diff options
| author | Greg Ercolano <erco@seriss.com> | 2010-05-12 04:59:52 +0000 |
|---|---|---|
| committer | Greg Ercolano <erco@seriss.com> | 2010-05-12 04:59:52 +0000 |
| commit | 5be97a78684886cfdbb68d223f48d1fb11cc55b0 (patch) | |
| tree | c0f584b4a1135cb969f597ac781e45a8ea7e55bc /src/Fl_Tree.cxx | |
| parent | 22f5929a2cc63db1f6c4a67da46ff92af27b1a9f (diff) | |
Mods to tree widget for docs and callbacks.
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@7604 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'src/Fl_Tree.cxx')
| -rw-r--r-- | src/Fl_Tree.cxx | 49 |
1 files changed, 43 insertions, 6 deletions
diff --git a/src/Fl_Tree.cxx b/src/Fl_Tree.cxx index 92b4c0123..25d509c97 100644 --- a/src/Fl_Tree.cxx +++ b/src/Fl_Tree.cxx @@ -345,10 +345,22 @@ int Fl_Tree::handle(int e) { /// Returns count of how many items were in the 'selected' state, /// ie. how many items were "changed". /// -int Fl_Tree::deselect_all(Fl_Tree_Item *item) { +/// \p docallback is an optional paramemter that can either be 0 or 1: +/// +/// - 0 - the callback() is not invoked (default) +/// - 1 - the callback() is invoked once if \b any items changed state, +/// and item_clicked() will be NULL (since many items could have been changed). +// +/// \todo deselect_all()'s docallback should support '2' (invoke callback for each item changed) +/// +int Fl_Tree::deselect_all(Fl_Tree_Item *item, int docallback) { item = item ? item : root(); // NULL? use root() int count = item->deselect_all(); - if ( count ) redraw(); // anything changed? cause redraw + if ( count ) { + redraw(); // anything changed? cause redraw + if ( docallback == 1 ) + do_callback_for_item(0); + } return(count); } @@ -358,10 +370,22 @@ int Fl_Tree::deselect_all(Fl_Tree_Item *item) { /// Returns count of how many items were in the 'deselected' state, /// ie. how many items were "changed". /// -int Fl_Tree::select_all(Fl_Tree_Item *item) { +/// \p docallback is an optional paramemter that can either be 0 or 1: +/// +/// - 0 - the callback() is not invoked (default) +/// - 1 - the callback() is invoked once if \b any items changed state, +/// and item_clicked() will be NULL (since many items could have been changed). +/// +/// \todo select_all()'s docallback should support '2' (invoke callback for each item changed) +/// +int Fl_Tree::select_all(Fl_Tree_Item *item, int docallback) { item = item ? item : root(); // NULL? use root() int count = item->select_all(); - if ( count ) redraw(); // anything changed? cause redraw + if ( count ) { + redraw(); // anything changed? cause redraw + if (docallback == 1) + do_callback_for_item(0); + } return(count); } @@ -370,7 +394,15 @@ int Fl_Tree::select_all(Fl_Tree_Item *item) { /// Handles calling redraw() if anything was changed. /// Returns how many items were changed, if any. /// -int Fl_Tree::select_only(Fl_Tree_Item *selitem) { +/// \p docallback is an optional paramemter that can either be 0, 1 or 2: +/// +/// - 0 - the callback() is not invoked (default) +/// - 1 - the callback() is invoked once if \b any items changed state, +/// and item_clicked() will be NULL (since many items could have been changed). +/// - 2 - the callback() is invoked once for \b each item that changed state, +/// and the callback() can use item_clicked() to determine the item changed. +/// +int Fl_Tree::select_only(Fl_Tree_Item *selitem, int docallback) { selitem = selitem ? selitem : root(); // NULL? use root() int changed = 0; for ( Fl_Tree_Item *item = first(); item; item = item->next() ) { @@ -378,14 +410,19 @@ int Fl_Tree::select_only(Fl_Tree_Item *selitem) { if ( item->is_selected() ) continue; // don't count if already selected item->select(); ++changed; + if ( docallback == 2 ) do_callback_for_item(item); } else { if ( item->is_selected() ) { item->deselect(); ++changed; + if ( docallback == 2 ) do_callback_for_item(item); } } } - if ( changed ) redraw(); // anything changed? redraw + if ( changed ) { + redraw(); // anything changed? redraw + if ( docallback == 1 ) do_callback_for_item(0); + } return(changed); } |
