//
// "$Id: Item.h 5168 2006-05-31 13:42:26Z dejan $"
//
// Widget designed to be a menu or browser item.
//
// Copyright 1998-2006 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Library General Public License for more details.
//
// You should have received a copy of the GNU Library General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA.
//
// Please report all bugs and problems to "fltk-bugs@fltk.org".
//

#ifndef fltk_Item_h
#define fltk_Item_h

#ifndef fltk_Widget_h
#include "Widget.h"
#endif

namespace fltk {

class FL_API Item : public Widget {
public:
  
  void draw();
  void layout();
  int handle(int);
  void type(int);
  int type() const {return Widget::type();}
  //!default  constructor for normal item type decl
  Item(const char* label=0,int shortcut=0,Callback *callback=0,void *user_data_=0, int flags=0, LabelType* labeltype=0, Font*labelfont=0, float labelsize=0);  
  //!other constructor for menus with symbols
  Item(const char* label,const Symbol* img, int shortcut=0,Callback *callback=0,void *user_data_=0, int flags=0, LabelType* labeltype=0, Font*labelfont=0, float labelsize=0);  
  
  //! constructor for custom item type decl
  Item(WidgetVisualType t,const char* label,int shortcut,Callback *callback,void *user_data_=0, int flags=0, LabelType* labeltype=0, Font*labelfont=0, float labelsize=0);

  // constructor for adding a tree like item with a name, an image, and eventuallly an alignement. 
  Item(const Symbol* img, const char* label, int custom_alignment=-1);

  static NamedStyle* default_style;
  static void set_style(const Style*, bool menubar);
  static void set_style(const Widget* w, bool f) {set_style(w->style(),f);}
  static void clear_style() {set_style(Widget::default_style,false);}

  bool value() const { return (flags()&VALUE)!=0; }
  bool value(bool);
  bool set();
  bool clear();

private:
    void init(); // common constructor initialization
};

//! Toggle item declarations facility
class FL_API ItemToggle : public Item {
public:
  ItemToggle(const char* label = 0) : Item(label) {type(Item::TOGGLE);}
  ItemToggle(const char* label,int shortcut,Callback *callback,void *user_data=0, int flags=0)
      : Item(label,shortcut,callback,user_data, flags) {type(Item::TOGGLE);}

};

//! Radio item declarations facility
class FL_API ItemRadio : public Item {
public:
  ItemRadio(const char* label = 0) : Item(label) {type(Item::TOGGLE);}
  ItemRadio(const char* label,int shortcut,Callback *callback,void *user_data=0, int flags=0)
      : Item(label,shortcut,callback,user_data, flags) {type(Item::TOGGLE);}

};
// compatibility definition : is it used ?
typedef ItemRadio RadioItem;
}

#endif
