diff options
-rw-r--r-- | dw/fltkui.cc | 36 | ||||
-rw-r--r-- | dw/fltkui.hh | 6 |
2 files changed, 34 insertions, 8 deletions
diff --git a/dw/fltkui.cc b/dw/fltkui.cc index 686429ca..66461b09 100644 --- a/dw/fltkui.cc +++ b/dw/fltkui.cc @@ -1042,6 +1042,8 @@ Fl_Widget *FltkListResource::createNewWidget (core::Allocation *allocation) // tree->clear_flag (SHORTCUT_LABEL); tree->callback(widgetCallback,this); tree->when(FL_WHEN_CHANGED); + + currParent = tree->root(); return tree; } @@ -1058,27 +1060,49 @@ void FltkListResource::widgetCallback (Fl_Widget *widget, void *data) } } -void FltkListResource::addItem (const char *str, bool enabled, bool selected) +void *FltkListResource::newItem (const char *str, bool enabled) { Fl_Tree *tree = (Fl_Tree *) widget; - Fl_Tree_Item *item = tree->add(tree->root(), str); - int index = itemsSelected.size (); + Fl_Tree_Item *parent = (Fl_Tree_Item *)currParent; + Fl_Tree_Item *item = tree->add(parent, str); + enabled &= parent->is_active(); item->activate(enabled); - itemsSelected.increase (); - itemsSelected.set (index,selected); + + return item; +} + +void FltkListResource::addItem (const char *str, bool enabled, bool selected) +{ + Fl_Tree *tree = (Fl_Tree *) widget; + Fl_Tree_Item *item = (Fl_Tree_Item *) newItem(str, enabled); + + itemsSelected.set (itemsSelected.size() - 1, selected); if (selected) { if (mode == SELECTION_MULTIPLE) item->select(selected); else - ((Fl_Tree *)widget)->select_only(item, 0); + tree->select_only(item, 0); } + queueResize (true); +} +void FltkListResource::pushGroup (const char *name, bool enabled) +{ + currParent = (Fl_Tree_Item *) newItem(name, enabled); queueResize (true); } +void FltkListResource::popGroup () +{ + Fl_Tree_Item *p = (Fl_Tree_Item *)currParent; + + if (p->parent()) + currParent = p->parent(); +} + int FltkListResource::getMaxItemWidth() { Fl_Tree *tree = (Fl_Tree *)widget; diff --git a/dw/fltkui.hh b/dw/fltkui.hh index cc5f5bc0..741db2ab 100644 --- a/dw/fltkui.hh +++ b/dw/fltkui.hh @@ -514,6 +514,8 @@ protected: private: static void widgetCallback (Fl_Widget *widget, void *data); + void *newItem (const char *str, bool enabled); + void *currParent; lout::misc::SimpleVector <bool> itemsSelected; int showRows; ListResource::SelectionMode mode; @@ -524,8 +526,8 @@ public: ~FltkListResource (); void addItem (const char *str, bool enabled, bool selected); - void pushGroup (const char *name, bool enabled) {}; - void popGroup () {}; + void pushGroup (const char *name, bool enabled); + void popGroup (); void sizeRequest (core::Requisition *requisition); bool isSelected (int index); |