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
This commit is contained in:
Greg Ercolano 2010-05-10 22:51:01 +00:00
parent c4fd0d2900
commit 1f6d222cb8
3 changed files with 13 additions and 5 deletions

View File

@ -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!

View File

@ -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;
}

View File

@ -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}
};