diff options
Diffstat (limited to 'dw/fltkui.cc')
-rw-r--r-- | dw/fltkui.cc | 25 |
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); } |