|
|
Author: fabien
Date: 2007-04-05 05:37:50 -0400 (Thu, 05 Apr 2007)
New Revision: 5758
Log:
Fixed several behavior bugs found when analysing STR#1648
and realized 1648 RFE
Now forward and backward menus work much better
and code is not as loose as before
(i.e: normalized backward and forward in a more general 'move' operation.
Not a wonder that we had so many trouble with menus
when reviewing the code.
Added:
branches/fctrunk/README.STR
Modified:
branches/fctrunk/fluid/fluid.cxx
branches/fctrunk/src/Menu_popup.cxx
Added: branches/fctrunk/README.STR
===================================================================
--- branches/fctrunk/README.STR (rev 0)
+++ branches/fctrunk/README.STR 2007-04-05 09:37:50 UTC (rev 5758)
@@ -0,0 +1,2 @@
+str adressed or about to be adressed:
+STR#1648
Modified: branches/fctrunk/fluid/fluid.cxx
===================================================================
--- branches/fctrunk/fluid/fluid.cxx 2007-04-04 16:34:45 UTC (rev 5757)
+++ branches/fctrunk/fluid/fluid.cxx 2007-04-05 09:37:50 UTC (rev 5758)
@@ -279,7 +279,7 @@
img = fltk::SharedImage::get(pngfile);
if (img) {
- img->fetch_if_needed(); // fetch in memory
+ img->fetch_if_needed(); // fetch in memory, will also initialize w,h
template_preview->image(img);
template_preview->redraw();
}
Modified: branches/fctrunk/src/Menu_popup.cxx
===================================================================
--- branches/fctrunk/src/Menu_popup.cxx 2007-04-04 16:34:45 UTC (rev 5757)
+++ branches/fctrunk/src/Menu_popup.cxx 2007-04-05 09:37:50 UTC (rev 5758)
@@ -666,25 +666,30 @@
return true;
}
-static bool forward(MenuState& p, int menu) {
+static bool forward0(MenuState& p, int menu) {
// go to next item in menu menu if possible
MWindow &m = *(p.menus[menu]);
- for (int item = p.indexes[menu]+1; item < m.children; item++) {
+ if (!m.children) return false; // empty submenu
+ for (int item = (p.indexes[menu]+1) % m.children; item < m.children; item++) {
Widget* widget = m.get_widget(item);
if (widget->takesevents()) return setitem(p, menu, item);
}
return false;
}
-static bool backward(MenuState& p, int menu) {
+static bool move(MenuState& p, int menu,int delta) {
+ MWindow &m = *(p.menus[menu]);
+ if (!m.children) return false; // empty submenu
+ int nc = m.children;
// previous item in menu menu if possible
- MWindow &m = *(p.menus[menu]);
- for (int item = p.indexes[menu]-1; item >= 0; item--) {
+ for (int item = (p.indexes[menu]+nc+delta) % nc; item !=p.indexes[menu]; item=(item+nc+delta)%nc) {
Widget* widget = m.get_widget(item);
- if (widget->takesevents()) return setitem(p, menu, item);
+ if (widget->takesevents() ) return setitem(p, menu, item);
}
return false;
}
+static bool backward(MenuState& p, int menu) {return move(p, menu, -1);}
+static bool forward(MenuState& p, int menu) { return move(p, menu, +1);}
static bool track_mouse;
@@ -705,13 +710,16 @@
}
return 1;
case UpKey:
- if (p.hmenubar && p.level == 0) ;
- else if (backward(p, p.level));
- else if (p.hmenubar) setitem(p, 0, p.indexes[0]);
+ if (p.hmenubar && p.level == 0)
+ if (forward(p, p.level+1) && //enter the submenu first
+ p.hmenubar)
+ backward(p,p.level);
return 1;
case DownKey:
- if (p.level || !p.hmenubar) forward(p, p.level);
- else if (p.level+1 < p.nummenus) forward(p, p.level+1);
+ if (p.level || !p.hmenubar)
+ forward(p, p.level);
+ else if (p.level+1 < p.nummenus)
+ forward(p, p.level+1);
return 1;
case RightKey:
if (p.hmenubar && (p.level<=0 || p.level==1 && p.nummenus==2))
[ Direct Link to Message ] | |
|
| |