Author: fabien
Date: 2012-04-15 14:16:48 -0700 (Sun, 15 Apr 2012)
New Revision: 9349
Log:
Applied STR 2827 changes back to fltk3.
Modified:
branches/branch-3.0/examples/tree-simple.cxx
branches/branch-3.0/include/FL/Fl_Tree.H
branches/branch-3.0/include/fltk3/Tree.h
branches/branch-3.0/src/fltk3/Tree.cxx
Modified: branches/branch-3.0/examples/tree-simple.cxx
===================================================================
--- branches/branch-3.0/examples/tree-simple.cxx 2012-04-15 20:47:02 UTC
(rev 9348)
+++ branches/branch-3.0/examples/tree-simple.cxx 2012-04-15 21:16:48 UTC
(rev 9349)
@@ -44,6 +44,12 @@
fprintf(stderr, "TreeCallback: Item selected='%s', Full
pathname='%s'\n", item->label(), pathname);
break;
}
+ case FL_TREE_REASON_RESELECTED: {
+ char pathname[256];
+ tree->item_pathname(pathname, sizeof(pathname), item);
+ fprintf(stderr, "TreeCallback: Item reselected='%s', Full
pathname='%s'\n", item->label(), pathname);
+ break;
+ }
case FL_TREE_REASON_DESELECTED:
// fprintf(stderr, "TreeCallback: Item '%s' deselected\n",
item->label());
break;
Modified: branches/branch-3.0/include/FL/Fl_Tree.H
===================================================================
--- branches/branch-3.0/include/FL/Fl_Tree.H 2012-04-15 20:47:02 UTC (rev
9348)
+++ branches/branch-3.0/include/FL/Fl_Tree.H 2012-04-15 21:16:48 UTC (rev
9349)
@@ -44,11 +44,11 @@
FL_TREE_REASON_NONE=0,
FL_TREE_REASON_SELECTED,
FL_TREE_REASON_DESELECTED,
+ FL_TREE_REASON_RESELECTED,
FL_TREE_REASON_OPENED,
FL_TREE_REASON_CLOSED
};
-
FLTK3_WRAPPER_INTERFACE_BEGIN(Fl_Tree, Tree)
FLTK3_WRAPPER_INTERFACE_WIDGET(Fl_Tree, Tree)
FLTK3_WRAPPER_INTERFACE_END()
@@ -56,6 +56,29 @@
class FL_EXPORT Fl_Tree : public Fl_Group {
+public:
+ /// \enum Fl_Tree_Item_Select_Mode
+ /// Defines the ways an item can be (re) selected.
+ ///
+ enum Fl_Tree_Item_Reselect_Mode
+ {
+ FL_TREE_SELECTABLE_ONCE=0, /// backward compatible default: an item can
only be selected once
+ FL_TREE_SELECTABLE_ALWAYS /// needed for new RESELECT feature
+ };
+
+ //! Returns the current item re/selection mode
+ Fl_Tree_Item_Reselect_Mode item_reselect_mode() const {
+ return _itemReselectMode;
+ }
+
+ //! Sets the item re/selection mode
+ void item_reselect_mode(Fl_Tree_Item_Reselect_Mode mode) {
+ _itemReselectMode = mode;
+ }
+
+private:
+ Fl_Tree_Item_Reselect_Mode _itemReselectMode;
+
protected:
// Fl_Scrollbar *_vscroll;
Modified: branches/branch-3.0/include/fltk3/Tree.h
===================================================================
--- branches/branch-3.0/include/fltk3/Tree.h 2012-04-15 20:47:02 UTC (rev
9348)
+++ branches/branch-3.0/include/fltk3/Tree.h 2012-04-15 21:16:48 UTC (rev
9349)
@@ -127,6 +127,7 @@
/// switch ( tree->callback_reason() ) {
/// case fltk3::TREE_REASON_SELECTED: [..]
/// case fltk3::TREE_REASON_DESELECTED: [..]
+ /// case fltk3::TREE_REASON_RESELECTED: [..]
/// case fltk3::TREE_REASON_OPENED: [..]
/// case fltk3::TREE_REASON_CLOSED: [..]
/// }
@@ -194,6 +195,7 @@
TREE_REASON_NONE=0, ///< unknown reason
TREE_REASON_SELECTED, ///< an item was selected
TREE_REASON_DESELECTED, ///< an item was de-selected
+ TREE_REASON_RESELECTED, ///< an item was re-selected
TREE_REASON_OPENED, ///< an item was opened
TREE_REASON_CLOSED ///< an item was closed
};
@@ -207,7 +209,30 @@
fltk3::TreeReason _callback_reason; // reason for the
callback
fltk3::TreePrefs _prefs; // all the tree's settings
int _scrollbar_size; // size of scrollbar trough
+
+ public:
+ /// \enum Fl_Tree_Item_Select_Mode
+ /// Defines the ways an item can be (re) selected.
+ ///
+ enum Tree_Item_Reselect_Mode
+ {
+ TREE_SELECTABLE_ONCE=0, /// backward compatible default: an item can
only be selected once
+ TREE_SELECTABLE_ALWAYS, /// needed for new RESELECT feature
+ };
+ //! Returns the current item re/selection mode
+ Tree_Item_Reselect_Mode item_reselect_mode() const {
+ return _itemReselectMode;
+ }
+
+ //! Sets the item re/selection mode
+ void item_reselect_mode(Tree_Item_Reselect_Mode mode) {
+ _itemReselectMode = mode;
+ }
+
+ private:
+ Tree_Item_Reselect_Mode _itemReselectMode;
+
protected:
/// Vertical scrollbar
fltk3::Scrollbar *_vscroll;
@@ -526,11 +551,14 @@
/// - 0 - item was already selected, no change was made
///
int select(fltk3::TreeItem *item, int docallback=1) {
- if ( ! item->is_selected() ) {
- item->select();
- set_changed();
- if ( docallback ) {
- do_callback_for_item(item, fltk3::TREE_REASON_SELECTED);
+ int alreadySelected = item->is_selected();
+
+ if ( !alreadySelected || item_reselect_mode()== TREE_SELECTABLE_ALWAYS )
{
+ item->select();
+ set_changed();
+ if ( docallback ) {
+ do_callback_for_item(item, alreadySelected ?
+ TREE_REASON_RESELECTED : TREE_REASON_SELECTED);
}
redraw();
return(1);
Modified: branches/branch-3.0/src/fltk3/Tree.cxx
===================================================================
--- branches/branch-3.0/src/fltk3/Tree.cxx 2012-04-15 20:47:02 UTC (rev
9348)
+++ branches/branch-3.0/src/fltk3/Tree.cxx 2012-04-15 21:16:48 UTC (rev
9349)
@@ -104,6 +104,8 @@
_callback_item = 0;
_callback_reason = fltk3::TREE_REASON_NONE;
_scrollbar_size = 0; // 0: uses
fltk3::scrollbar_size()
+ _itemReselectMode = TREE_SELECTABLE_ONCE;
+
box(fltk3::DOWN_BOX);
color(fltk3::BACKGROUND2_COLOR, fltk3::SELECTION_COLOR);
when(fltk3::WHEN_CHANGED);
@@ -796,7 +798,8 @@
int changed = 0;
for ( fltk3::TreeItem *item = first(); item; item = item->next() ) {
if ( item == selitem ) {
- if ( item->is_selected() ) continue; // don't count if already
selected
+ if ( item->is_selected() && item_reselect_mode()!=TREE_SELECTABLE_ALWAYS
+) continue; // don't count if already selected
select(item, docallback);
++changed;
} else {
_______________________________________________
fltk-commit mailing list
[email protected]
http://lists.easysw.com/mailman/listinfo/fltk-commit