aboutsummaryrefslogtreecommitdiff
path: root/dw/fltkui.cc
diff options
context:
space:
mode:
Diffstat (limited to 'dw/fltkui.cc')
-rw-r--r--dw/fltkui.cc25
1 files changed, 17 insertions, 8 deletions
diff --git a/dw/fltkui.cc b/dw/fltkui.cc
index 14914dfe..86a3af3f 100644
--- a/dw/fltkui.cc
+++ b/dw/fltkui.cc
@@ -1229,12 +1229,19 @@ void FltkListResource::widgetCallback (Fl_Widget *widget, void *data)
{
Fl_Tree_Item *fltkItem = ((Fl_Tree *) widget)->callback_item ();
int index = -1;
+
if (fltkItem)
index = (long) (fltkItem->user_data ());
if (index > -1) {
- FltkListResource *res = (FltkListResource *) data;
bool selected = fltkItem->is_selected ();
- res->itemsSelected.set (index, selected);
+
+ if (selected && fltkItem->has_children()) {
+ /* Don't permit a group to be selected. */
+ fltkItem->deselect();
+ } else {
+ FltkListResource *res = (FltkListResource *) data;
+ res->itemsSelected.set (index, selected);
+ }
}
}
@@ -1273,15 +1280,18 @@ void FltkListResource::addItem (const char *str, bool enabled, bool selected)
void FltkListResource::setItem (int index, bool selected)
{
Fl_Tree *tree = (Fl_Tree *) widget;
- Fl_Tree_Item *item = tree->root()->child(index);
+ Fl_Tree_Item *item = tree->root()->next();
+
+ for (int i = 0; item && i < index; i++)
+ item = item->next();
- /* TODO: handle groups */
if (item) {
itemsSelected.set (index, selected);
- if (mode == SELECTION_MULTIPLE)
+ if (selected && mode != SELECTION_MULTIPLE) {
+ const bool do_callback = true;
+ tree->select_only(item, do_callback);
+ } else
item->select(selected);
- else if (selected)
- tree->select_only(item);
queueResize (true);
}
}
@@ -1290,7 +1300,6 @@ void FltkListResource::pushGroup (const char *name, bool enabled)
{
bool selected = false;
- /* TODO: make it impossible to select a group */
currParent = (Fl_Tree_Item *) newItem(name, enabled, selected);
queueResize (true);
}