aboutsummaryrefslogtreecommitdiff
path: root/dw/fltkui.cc
diff options
context:
space:
mode:
authorcorvid <corvid@lavabit.com>2011-01-29 06:24:08 +0000
committercorvid <corvid@lavabit.com>2011-01-29 06:24:08 +0000
commit6ce6ea48b6a5980e3d286a6759a29aaf3327a635 (patch)
treeaede7b1139e052866d565347fc1160b0b7dbe616 /dw/fltkui.cc
parent6ff4ba2afed396681731303ed6d929579a913c27 (diff)
push/pop for List
Diffstat (limited to 'dw/fltkui.cc')
-rw-r--r--dw/fltkui.cc36
1 files changed, 30 insertions, 6 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;