FLTK logo

[Library] r5758 - in branches/fctrunk: . fluid src

FLTK matrix user chat room
(using Element browser app)   FLTK gitter user chat room   GitHub FLTK Project   FLTK News RSS Feed  
  FLTK Apps      FLTK Library      Forums      Links     Login 
 All Forums  |  Back to fltk.commit  ]
 
Previous Message ]Next Message ]

[Library] r5758 - in branches/fctrunk: . fluid src fltk-dev Apr 05, 2007  
 
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 ]
 
     
Previous Message ]Next Message ]
 
 

Comments are owned by the poster. All other content is copyright 1998-2024 by Bill Spitzak and others. This project is hosted by The FLTK Team. Please report site problems to 'erco@seriss.com'.