diff options
author | corvid <corvid@lavabit.com> | 2011-05-14 06:43:17 +0000 |
---|---|---|
committer | corvid <corvid@lavabit.com> | 2011-05-14 06:43:17 +0000 |
commit | 4e348a6c67e15bb5c0feea1279272431abb3f0db (patch) | |
tree | 5ebb93780476883703e6d2f19a3b0b9046efe80e | |
parent | 442dcb263a068e685bfa65255172ae4c3747c4bd (diff) |
forms menu/list selection
-rw-r--r-- | dw/fltkui.cc | 21 | ||||
-rw-r--r-- | dw/fltkui.hh | 1 |
2 files changed, 14 insertions, 8 deletions
diff --git a/dw/fltkui.cc b/dw/fltkui.cc index a7da10d9..f79dea80 100644 --- a/dw/fltkui.cc +++ b/dw/fltkui.cc @@ -875,6 +875,7 @@ FltkOptionMenuResource::FltkOptionMenuResource (FltkPlatform *platform): menu = new Fl_Menu_Item[itemsAllocated]; memset(menu, 0, itemsAllocated * sizeof(Fl_Menu_Item)); itemsUsed = 1; // menu[0].text == NULL, which is an end-of-menu marker. + visibleItems = 0; init (platform); } @@ -986,12 +987,11 @@ void FltkOptionMenuResource::addItem (const char *str, Fl_Menu_Item *item = newItem(); item->text = strdup(str); + item->argument(visibleItems++); if (enabled == false) item->flags = FL_MENU_INACTIVE; - // TODO: verify that an array index is exactly what value() wants, - // even when there are submenus. if (selected) ((Fl_Choice *)widget)->value(item); @@ -1003,6 +1003,7 @@ void FltkOptionMenuResource::pushGroup (const char *name, bool enabled) Fl_Menu_Item *item = newItem(); item->text = strdup(name); + item->argument(visibleItems++); if (enabled == false) item->flags = FL_MENU_INACTIVE; @@ -1021,7 +1022,7 @@ void FltkOptionMenuResource::popGroup () bool FltkOptionMenuResource::isSelected (int index) { - return index == ((Fl_Choice *)widget)->value(); + return index == (int) ((Fl_Choice *)widget)->mvalue()->user_data(); } int FltkOptionMenuResource::getNumberOfItems() @@ -1096,9 +1097,11 @@ void *FltkListResource::newItem (const char *str, bool enabled) Fl_Tree *tree = (Fl_Tree *) widget; Fl_Tree_Item *parent = (Fl_Tree_Item *)currParent; Fl_Tree_Item *item = tree->add(parent, str); + int index = itemsSelected.size(); enabled &= parent->is_active(); item->activate(enabled); + item->user_data((void *)index); itemsSelected.increase (); return item; @@ -1109,19 +1112,21 @@ 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) + if (mode == SELECTION_MULTIPLE) { item->select(selected); - else - tree->select_only(item, 0); + itemsSelected.set (itemsSelected.size() - 1, selected); + } else { + const bool do_callback = true; + tree->select_only(item, do_callback); + } } queueResize (true); } void FltkListResource::pushGroup (const char *name, bool enabled) { + /* TODO: make it impossible to select a group */ currParent = (Fl_Tree_Item *) newItem(name, enabled); queueResize (true); } diff --git a/dw/fltkui.hh b/dw/fltkui.hh index 0a9d6242..7b9d6d71 100644 --- a/dw/fltkui.hh +++ b/dw/fltkui.hh @@ -465,6 +465,7 @@ private: Fl_Menu_Item *newItem(); Fl_Menu_Item *menu; int itemsAllocated, itemsUsed; + int visibleItems; /* not counting the invisible ones that close a group */ public: FltkOptionMenuResource (FltkPlatform *platform); ~FltkOptionMenuResource (); |