aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--dw/fltkui.cc36
-rw-r--r--dw/fltkui.hh6
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);