diff options
| author | Greg Ercolano <erco@seriss.com> | 2010-05-10 22:51:01 +0000 |
|---|---|---|
| committer | Greg Ercolano <erco@seriss.com> | 2010-05-10 22:51:01 +0000 |
| commit | 1f6d222cb8979737052357324b7d5d31a4a70c49 (patch) | |
| tree | 3dcae2c797a306434506a8d7f0a7eab889a46754 | |
| parent | c4fd0d2900d264ad4417cc5fe39c03194c16352e (diff) | |
1) Modified tree test program to include when() options,
2) Improved when() handling for left mouse behavior
3) Added docs for when() handling
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@7601 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
| -rw-r--r-- | FL/Fl_Tree.H | 7 | ||||
| -rw-r--r-- | src/Fl_Tree.cxx | 9 | ||||
| -rw-r--r-- | test/tree.cxx | 2 |
3 files changed, 13 insertions, 5 deletions
diff --git a/FL/Fl_Tree.H b/FL/Fl_Tree.H index 3768ab8e2..df3897080 100644 --- a/FL/Fl_Tree.H +++ b/FL/Fl_Tree.H @@ -63,6 +63,11 @@ /// The tree items may also contain other FLTK widgets, like buttons, input fields, /// or even "custom" widgets. /// +/// The callback() is invoked depending on the value of when(): +/// +/// - FL_WHEN_RELEASE -- callback invoked when left mouse button is released on an item +/// - FL_WHEN_CHANGED -- callback invoked when left mouse changes selection state +/// /// The simple way to define a tree: /// \code /// #include <FL/Fl_Tree.H> @@ -101,6 +106,8 @@ /// /// \image html tree-elements.png /// +/// \todo Needs handling of callbacks when items are procedurally select()ed +/// class Fl_Tree : public Fl_Group { Fl_Tree_Item *_root; // can be null! diff --git a/src/Fl_Tree.cxx b/src/Fl_Tree.cxx index 3578778ca..92b4c0123 100644 --- a/src/Fl_Tree.cxx +++ b/src/Fl_Tree.cxx @@ -279,6 +279,7 @@ int Fl_Tree::handle(int e) { break; } case FL_DRAG: { + if ( Fl::event_button() != FL_LEFT_MOUSE ) break; Fl_Tree_Item *o = _root->find_clicked(_prefs); if ( o ) { ret |= 1; // handled @@ -328,11 +329,9 @@ int Fl_Tree::handle(int e) { case FL_RELEASE: { if ( Fl::event_button() == FL_LEFT_MOUSE ) { ret |= 1; - } - if ( when() & FL_WHEN_RELEASE || - ( changed && when() & FL_WHEN_CHANGED) ) { - set_changed(); - do_callback((Fl_Widget*)this, user_data()); // item callback + if ( when() & FL_WHEN_RELEASE || ( this->changed() && (when() & FL_WHEN_CHANGED)) ) { + do_callback((Fl_Widget*)this, user_data()); // item callback + } } break; } diff --git a/test/tree.cxx b/test/tree.cxx index 8cef2551c..859542693 100644 --- a/test/tree.cxx +++ b/test/tree.cxx @@ -458,6 +458,7 @@ static void cb_whenmode_chooser(Fl_Choice*, void*) { switch ( whenmode_chooser->value() ) { case 0: tree->when(FL_WHEN_RELEASE); break; case 1: tree->when(FL_WHEN_CHANGED); break; + case 2: tree->when(FL_WHEN_NEVER); break; default: tree->when(FL_WHEN_RELEASE); break; }; } @@ -465,6 +466,7 @@ static void cb_whenmode_chooser(Fl_Choice*, void*) { Fl_Menu_Item menu_whenmode_chooser[] = { {"Release", 0, 0, 0, 0, FL_NORMAL_LABEL, 0, 11, 0}, {"Changed", 0, 0, 0, 0, FL_NORMAL_LABEL, 0, 11, 0}, + {"Never", 0, 0, 0, 0, FL_NORMAL_LABEL, 0, 11, 0}, {0,0,0,0,0,0,0,0,0} }; |
