FLTK 1.3.2

- Main Page
- Related Pages
- Modules
- Classes
- Files

- File List
- File Members

Fl_Tree_Item.H
Go to the documentation of this file.

    00001 //
    00002 // "$Id: Fl_Tree_Item.H 9706 2012-11-06 20:46:14Z matt $"
    00003 //
    00004
    00005 #ifndef FL_TREE_ITEM_H
    00006 #define FL_TREE_ITEM_H
    00007
    00008 #include <FL/Fl.H>
    00009 #include <FL/Fl_Widget.H>
    00010 #include <FL/Fl_Image.H>
    00011 #include <FL/fl_draw.H>
    00012
    00013 #include <FL/Fl_Tree_Item_Array.H>
    00014 #include <FL/Fl_Tree_Prefs.H>
    00015
    00017 // FL/Fl_Tree_Item.H
    00019 //
    00020 // Fl_Tree -- This file is part of the Fl_Tree widget for FLTK
    00021 // Copyright (C) 2009-2010 by Greg Ercolano.
    00022 //
    00023 // This library is free software. Distribution and use rights are outlined in
    00024 // the file "COPYING" which should have been included with this file.  If this
    00025 // file is missing or damaged, see the license at:
    00026 //
    00027 //     http://www.fltk.org/COPYING.php
    00028 //
    00029 // Please report all bugs and problems on the following page:
    00030 //
    00031 //     http://www.fltk.org/str.php
    00032 //
    00033
    00038
    00054 class FL_EXPORT Fl_Tree_Item {
    00055   const char             *_label;               // label (memory managed)
    00056   Fl_Font                 _labelfont;           // label's font face
    00057   Fl_Fontsize             _labelsize;           // label's font size
    00058   Fl_Color                _labelfgcolor;        // label's fg color
    00059   Fl_Color                _labelbgcolor;        // label's bg color (0xffffffff is 'transparent')
    00060   enum {
    00061     OPEN                = 1<<0,
    00062     VISIBLE             = 1<<1,
    00063     ACTIVE              = 1<<2,
    00064     SELECTED            = 1<<3,
    00065   };
    00066 #if FLTK_ABI_VERSION >= 10301
    00067   // NEW
    00068   unsigned short _flags;                // misc flags
    00069 #else /*FLTK_ABI_VERSION*/
    00070   // OLD: this will go away after 1.3.x
    00071   char                    _open;                // item is open?
    00072   char                    _visible;             // item is visible?
    00073   char                    _active;              // item activated?
    00074   char                    _selected;            // item selected?
    00075 #endif /*FLTK_ABI_VERSION*/
    00076   int                     _xywh[4];             // xywh of this widget (if visible)
    00077   int                     _collapse_xywh[4];    // xywh of collapse icon (if visible)
    00078   int                     _label_xywh[4];       // xywh of label
    00079   Fl_Widget              *_widget;              // item's label widget (optional)
    00080   Fl_Image               *_usericon;            // item's user-specific icon (optional)
    00081   Fl_Tree_Item_Array      _children;            // array of child items
    00082   Fl_Tree_Item           *_parent;              // parent item (=0 if root)
    00083   void                   *_userdata;            // user data that can be associated with an item
    00084 #if FLTK_ABI_VERSION >= 10301
    00085   Fl_Tree_Item           *_prev_sibling;        // previous sibling (same level)
    00086   Fl_Tree_Item           *_next_sibling;        // next sibling (same level)
    00087 #endif /*FLTK_ABI_VERSION*/
    00088 protected:
    00089   void show_widgets();
    00090   void hide_widgets();
    00091   void draw_vertical_connector(int x, int y1, int y2, const Fl_Tree_Prefs &prefs);
    00092   void draw_horizontal_connector(int x1, int x2, int y, const Fl_Tree_Prefs &prefs);
    00093 public:
    00094   Fl_Tree_Item(const Fl_Tree_Prefs &prefs);     // CTOR
    00095   ~Fl_Tree_Item();                              // DTOR
    00096   Fl_Tree_Item(const Fl_Tree_Item *o);          // COPY CTOR
    00097   int x() const { return(_xywh[0]); }
    00098   int y() const { return(_xywh[1]); }
    00099   int w() const { return(_xywh[2]); }
    00100   int h() const { return(_xywh[3]); }
    00101   int calc_item_height(const Fl_Tree_Prefs &prefs) const;
    00102   void draw(int X, int &Y, int W, Fl_Widget *tree, Fl_Tree_Item *itemfocus, const Fl_Tree_Prefs &prefs, int lastchild=1);
    00103   void show_self(const char *indent = "") const;
    00104   void label(const char *val);
    00105   const char *label() const;
    00106
    00108   inline void user_data( void* data ) { _userdata = data; }
    00109
    00111   inline void* user_data() const { return _userdata; }
    00112
    00114   void labelfont(Fl_Font val) {
    00115     _labelfont = val;
    00116   }
    00118   Fl_Font labelfont() const {
    00119     return(_labelfont);
    00120   }
    00122   void labelsize(Fl_Fontsize val) {
    00123     _labelsize = val;
    00124   }
    00126   Fl_Fontsize labelsize() const {
    00127     return(_labelsize);
    00128   }
    00130   void labelfgcolor(Fl_Color val) {
    00131     _labelfgcolor = val;
    00132   }
    00134   void labelcolor(Fl_Color val) {
    00135     _labelfgcolor = val;
    00136   }
    00138   Fl_Color labelcolor() const {
    00139     return(_labelfgcolor);
    00140   }
    00142   Fl_Color labelfgcolor() const {
    00143     return(_labelfgcolor);
    00144   }
    00147   void labelbgcolor(Fl_Color val) {
    00148     _labelbgcolor = val;
    00149   }
    00152   Fl_Color labelbgcolor() const {
    00153     return(_labelbgcolor);
    00154   }
    00156   void widget(Fl_Widget *val) {
    00157     _widget = val;
    00158   }
    00160   Fl_Widget *widget() const {
    00161     return(_widget);
    00162   }
    00164   int children() const {
    00165     return(_children.total());
    00166   }
    00168   Fl_Tree_Item *child(int index) {
    00169     return(_children[index]);
    00170   }
    00172   const Fl_Tree_Item *child(int t) const;
    00174   int has_children() const {
    00175     return(children());
    00176   }
    00177   int find_child(const char *name);
    00178   int find_child(Fl_Tree_Item *item);
    00179   int remove_child(Fl_Tree_Item *item);
    00180   int remove_child(const char *new_label);
    00181   void clear_children();
    00182   void swap_children(int ax, int bx);
    00183   int swap_children(Fl_Tree_Item *a, Fl_Tree_Item *b);
    00184   const Fl_Tree_Item *find_child_item(char **arr) const;        // const
    00185         Fl_Tree_Item *find_child_item(char **arr);              // non-const
    00186   const Fl_Tree_Item *find_item(char **arr) const;              // const
    00187         Fl_Tree_Item *find_item(char **arr);                    // non-const
    00189   // Adding items
    00191   Fl_Tree_Item *add(const Fl_Tree_Prefs &prefs, const char *new_label);
    00192   Fl_Tree_Item *add(const Fl_Tree_Prefs &prefs, char **arr);
    00193   Fl_Tree_Item *insert(const Fl_Tree_Prefs &prefs, const char *new_label, int pos=0);
    00194   Fl_Tree_Item *insert_above(const Fl_Tree_Prefs &prefs, const char *new_label);
    00195   int depth() const;
    00196   Fl_Tree_Item *prev();
    00197   Fl_Tree_Item *next();
    00198   Fl_Tree_Item *next_sibling();
    00199   Fl_Tree_Item *prev_sibling();
    00200   void update_prev_next(int index);
    00201   Fl_Tree_Item *next_displayed(Fl_Tree_Prefs &prefs);
    00202   Fl_Tree_Item *prev_displayed(Fl_Tree_Prefs &prefs);
    00203
    00205   Fl_Tree_Item *parent() {
    00206     return(_parent);
    00207   }
    00209   const Fl_Tree_Item *parent() const {
    00210     return(_parent);
    00211   }
    00215   void parent(Fl_Tree_Item *val) {
    00216     _parent = val;
    00217   }
    00219   // State
    00221   void open();
    00222   void close();
    00224   int is_open() const {
    00225     return(is_flag(OPEN));
    00226   }
    00228   int is_close() const {
    00229     return(is_flag(OPEN)?0:1);
    00230   }
    00232   void open_toggle() {
    00233     is_open()?close():open();
    00234   }
    00238   void select(int val=1) {
    00239     set_flag(SELECTED, val);
    00240   }
    00242   void select_toggle() {
    00243     if ( is_selected() ) {
    00244       deselect();       // deselect if selected
    00245     } else {
    00246       select();         // select if deselected
    00247     }
    00248   }
    00253   int select_all() {
    00254     int count = 0;
    00255     if ( ! is_selected() ) {
    00256       select();
    00257       ++count;
    00258     }
    00259     for ( int t=0; t<children(); t++ ) {
    00260       count += child(t)->select_all();
    00261     }
    00262     return(count);
    00263   }
    00265   void deselect() {
    00266     set_flag(SELECTED, 0);
    00267   }
    00272   int deselect_all() {
    00273     int count = 0;
    00274     if ( is_selected() ) {
    00275       deselect();
    00276       ++count;
    00277     }
    00278     for ( int t=0; t<children(); t++ ) {
    00279       count += child(t)->deselect_all();
    00280     }
    00281     return(count);
    00282   }
    00284   char is_selected() const {
    00285     return(is_flag(SELECTED));
    00286   }
    00296   void activate(int val=1) {
    00297     set_flag(ACTIVE,val);
    00298     if ( _widget && val != (int)_widget->active() ) {
    00299       if ( val ) {
    00300         _widget->activate();
    00301       } else {
    00302         _widget->deactivate();
    00303       }
    00304       _widget->redraw();
    00305     }
    00306   }
    00310   void deactivate() {
    00311     activate(0);
    00312   }
    00314   char is_activated() const {
    00315     return(is_flag(ACTIVE));
    00316   }
    00318   char is_active() const {
    00319     return(is_activated());
    00320   }
    00322   int visible() const {
    00323     return(is_visible());
    00324   }
    00326   int is_visible() const {
    00327     return(is_flag(VISIBLE));
    00328   }
    00329   int visible_r() const;
    00330
    00332   void usericon(Fl_Image *val) {
    00333     _usericon = val;
    00334   }
    00336   Fl_Image *usericon() const {
    00337     return(_usericon);
    00338   }
    00340   // Events
    00342   const Fl_Tree_Item *find_clicked(const Fl_Tree_Prefs &prefs) const;
    00343   Fl_Tree_Item *find_clicked(const Fl_Tree_Prefs &prefs);
    00344   int event_on_collapse_icon(const Fl_Tree_Prefs &prefs) const;
    00345   int event_on_label(const Fl_Tree_Prefs &prefs) const;
    00347   int is_root() const {
    00348     return(_parent==0?1:0);
    00349   }
    00350
    00351   // Protected methods
    00352 protected:
    00353 #if FLTK_ABI_VERSION >= 10301
    00354
    00355   inline void set_flag(unsigned short flag,int val) {
    00356     if ( val ) _flags |= flag; else _flags &= ~flag;
    00357   }
    00359   inline int is_flag(unsigned short val) const {
    00360     return(_flags & val ? 1 : 0);
    00361   }
    00362 #else /*FLTK_ABI_VERSION*/
    00363
    00364   void set_flag(unsigned short flag,int val) {
    00365     switch (flag) {
    00366       case     OPEN: _open     = val; break;
    00367       case  VISIBLE: _visible  = val; break;
    00368       case   ACTIVE: _active   = val; break;
    00369       case SELECTED: _selected = val; break;
    00370     }
    00371   }
    00373   int is_flag(unsigned short flag) const {
    00374     switch (flag) {
    00375       case     OPEN: return(_open ? 1 : 0);
    00376       case  VISIBLE: return(_visible ? 1 : 0);
    00377       case   ACTIVE: return(_active ? 1 : 0);
    00378       case SELECTED: return(_selected ? 1 : 0);
    00379       default:       return(0);
    00380     }
    00381   }
    00382 #endif /*FLTK_ABI_VERSION*/
    00383
    00384 };
    00385
    00386 #endif /*FL_TREE_ITEM_H*/
    00387
    00388 //
    00389 // End of "$Id: Fl_Tree_Item.H 9706 2012-11-06 20:46:14Z matt $".
    00390 //