// This may look like C code, but it's really -*- C++ -*-
/*
 * Copyright (C) 2008 Emweb bvba, Kessel-Lo, Belgium.
 *
 * See the LICENSE file for terms of use.
 */
#ifndef EXT_MENU_ITEM_H_
#define EXT_MENU_ITEM_H_

#include <Wt/Ext/AbstractButton>

namespace Wt {
  namespace Ext {

/*! \class MenuItem Wt/Ext/MenuItem Wt/Ext/MenuItem
 *  \brief An item in a menu.
 *
 * A menu is always contained by a Menu, and, unlike other widgets,
 * cannot be instantiated on its own (by adding to a
 * WContainerWidget).
 *
 * \image html ExtMenuItem-1.png Menu item
 * \image html ExtMenuItem-2.png Menu item with icon
 * \image html ExtMenuItem-3.png Menu item with icon and menu
 * \image html ExtMenuItem-4.png Menu item hover effect
 * \image html ExtMenuItem-5.png Toggled menu item
 *
 * \sa Menu, Menu::add(MenuItem *)
 *
 * \ingroup ext
 */
class WT_EXT_API MenuItem : public AbstractButton
{
public:
  /*! \brief Create a new item with given text.
   */
  MenuItem(const WString& text);

  /*! \brief Create a new item with given icon and text.
   */
  MenuItem(const std::string& iconPath, const WString& text);

private:
  virtual std::string createJS(DomElement *inContainer);
  virtual std::string checkMethodJS() const;
  virtual std::string checkEventJS() const;
  virtual std::string checkInitialState() const;
};

  }
}

#endif // EXT_MENU_ITEM_H_
