summaryrefslogtreecommitdiff
path: root/src/Fl_Tree.cxx
diff options
context:
space:
mode:
authorGreg Ercolano <erco@seriss.com>2010-05-12 04:59:52 +0000
committerGreg Ercolano <erco@seriss.com>2010-05-12 04:59:52 +0000
commit5be97a78684886cfdbb68d223f48d1fb11cc55b0 (patch)
treec0f584b4a1135cb969f597ac781e45a8ea7e55bc /src/Fl_Tree.cxx
parent22f5929a2cc63db1f6c4a67da46ff92af27b1a9f (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.cxx49
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);
}