summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGreg Ercolano <erco@seriss.com>2010-05-10 22:51:01 +0000
committerGreg Ercolano <erco@seriss.com>2010-05-10 22:51:01 +0000
commit1f6d222cb8979737052357324b7d5d31a4a70c49 (patch)
tree3dcae2c797a306434506a8d7f0a7eab889a46754
parentc4fd0d2900d264ad4417cc5fe39c03194c16352e (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.H7
-rw-r--r--src/Fl_Tree.cxx9
-rw-r--r--test/tree.cxx2
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}
};