diff options
Diffstat (limited to 'src/Basemenu.cc')
-rw-r--r-- | src/Basemenu.cc | 53 |
1 files changed, 31 insertions, 22 deletions
diff --git a/src/Basemenu.cc b/src/Basemenu.cc index 8ef636a..5328a2b 100644 --- a/src/Basemenu.cc +++ b/src/Basemenu.cc | |||
@@ -22,7 +22,7 @@ | |||
22 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | 22 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
23 | // DEALINGS IN THE SOFTWARE. | 23 | // DEALINGS IN THE SOFTWARE. |
24 | 24 | ||
25 | // $Id: Basemenu.cc,v 1.10 2002/02/08 13:47:11 fluxgen Exp $ | 25 | // $Id: Basemenu.cc,v 1.11 2002/03/18 15:42:34 fluxgen Exp $ |
26 | 26 | ||
27 | // stupid macros needed to access some functions in version 2 of the GNU C | 27 | // stupid macros needed to access some functions in version 2 of the GNU C |
28 | // library | 28 | // library |
@@ -49,6 +49,7 @@ | |||
49 | # include <string.h> | 49 | # include <string.h> |
50 | #endif // STDC_HEADERS | 50 | #endif // STDC_HEADERS |
51 | 51 | ||
52 | #include <iostream> | ||
52 | 53 | ||
53 | static Basemenu *shown = (Basemenu *) 0; | 54 | static Basemenu *shown = (Basemenu *) 0; |
54 | 55 | ||
@@ -236,23 +237,31 @@ int Basemenu::insert(const char **ulabel, int pos, int function) { | |||
236 | 237 | ||
237 | 238 | ||
238 | int Basemenu::remove(int index) { | 239 | int Basemenu::remove(int index) { |
239 | if (index < 0 || index > menuitems.size()) return -1; | 240 | if (index < 0 || index >= menuitems.size()) { |
241 | #ifdef DEBUG | ||
242 | std::cout << "Bad index (" << index << ") given to Basemenu::remove()" | ||
243 | << " -- should be between 0 and " << menuitems.size()-1 | ||
244 | << " inclusive." | ||
245 | << std::endl; | ||
246 | #endif | ||
247 | return -1; | ||
248 | } | ||
240 | 249 | ||
241 | Menuitems::iterator it = menuitems.begin() + index; | 250 | Menuitems::iterator it = menuitems.begin() + index; |
242 | BasemenuItem *item = (*it); | 251 | BasemenuItem *item = (*it); |
243 | 252 | ||
244 | if (item) { | 253 | if (item) { |
254 | menuitems.erase(it); | ||
245 | if ((! internal_menu) && (item->submenu())) { | 255 | if ((! internal_menu) && (item->submenu())) { |
246 | Basemenu *tmp = (Basemenu *) item->submenu(); | 256 | Basemenu *tmp = (Basemenu *) item->submenu(); |
247 | 257 | ||
248 | if (! tmp->internal_menu) { | 258 | if (! tmp->internal_menu) { |
249 | delete tmp; | 259 | delete tmp; |
250 | } else | 260 | } else |
251 | tmp->internal_hide(); | 261 | tmp->internal_hide(); |
252 | } | 262 | } |
253 | 263 | ||
254 | delete item; | 264 | delete item; |
255 | menuitems.erase(it); | ||
256 | } | 265 | } |
257 | 266 | ||
258 | if (which_sub == index) | 267 | if (which_sub == index) |
@@ -458,7 +467,7 @@ void Basemenu::hide(void) { | |||
458 | 467 | ||
459 | 468 | ||
460 | void Basemenu::internal_hide(void) { | 469 | void Basemenu::internal_hide(void) { |
461 | if (which_sub != -1) { | 470 | if (which_sub >= 0) { |
462 | BasemenuItem *tmp = menuitems[which_sub]; | 471 | BasemenuItem *tmp = menuitems[which_sub]; |
463 | tmp->submenu()->internal_hide(); | 472 | tmp->submenu()->internal_hide(); |
464 | } | 473 | } |
@@ -533,7 +542,7 @@ void Basemenu::redrawTitle(void) { | |||
533 | 542 | ||
534 | 543 | ||
535 | void Basemenu::drawSubmenu(int index) { | 544 | void Basemenu::drawSubmenu(int index) { |
536 | if (which_sub != -1 && which_sub != index) { | 545 | if (which_sub >= 0 && which_sub != index) { |
537 | BasemenuItem *itmp = menuitems[which_sub]; | 546 | BasemenuItem *itmp = menuitems[which_sub]; |
538 | 547 | ||
539 | if (! itmp->submenu()->isTorn()) | 548 | if (! itmp->submenu()->isTorn()) |
@@ -682,27 +691,27 @@ void Basemenu::drawItem(int index, Bool highlight, Bool clear, | |||
682 | False); | 691 | False); |
683 | } else if (! (x == y && y == -1 && w == h && h == 0)) { | 692 | } else if (! (x == y && y == -1 && w == h && h == 0)) { |
684 | // calculate the which part of the hilite to redraw | 693 | // calculate the which part of the hilite to redraw |
685 | if (! (max(item_x, x) <= (signed) min(item_x + menu.item_w, x + w) && | 694 | if (! (std::max(item_x, x) <= (signed) std::min(item_x + menu.item_w, x + w) && |
686 | max(item_y, y) <= (signed) min(item_y + menu.item_h, y + h))) { | 695 | std::max(item_y, y) <= (signed) std::min(item_y + menu.item_h, y + h))) { |
687 | dohilite = False; | 696 | dohilite = False; |
688 | } else { | 697 | } else { |
689 | hilite_x = max(item_x, x); | 698 | hilite_x = std::max(item_x, x); |
690 | hilite_y = max(item_y, y); | 699 | hilite_y = std::max(item_y, y); |
691 | hilite_w = min(item_x + menu.item_w, x + w) - hilite_x; | 700 | hilite_w = std::min(item_x + menu.item_w, x + w) - hilite_x; |
692 | hilite_h = min(item_y + menu.item_h, y + h) - hilite_y; | 701 | hilite_h = std::min(item_y + menu.item_h, y + h) - hilite_y; |
693 | hoff_x = hilite_x % menu.item_w; | 702 | hoff_x = hilite_x % menu.item_w; |
694 | hoff_y = hilite_y % menu.item_h; | 703 | hoff_y = hilite_y % menu.item_h; |
695 | } | 704 | } |
696 | 705 | ||
697 | // check if we need to redraw the text | 706 | // check if we need to redraw the text |
698 | int text_ry = item_y + (menu.bevel_w / 2); | 707 | int text_ry = item_y + (menu.bevel_w / 2); |
699 | if (! (max(text_x, x) <= (signed) min(text_x + text_w, x + w) && | 708 | if (! (std::max(text_x, x) <= (signed) std::min(text_x + text_w, x + w) && |
700 | max(text_ry, y) <= (signed) min(text_ry + text_h, y + h))) | 709 | std::max(text_ry, y) <= (signed) std::min(text_ry + text_h, y + h))) |
701 | dotext = False; | 710 | dotext = False; |
702 | 711 | ||
703 | // check if we need to redraw the select pixmap/menu bullet | 712 | // check if we need to redraw the select pixmap/menu bullet |
704 | if (! (max(sel_x, x) <= (signed) min(sel_x + half_w, x + w) && | 713 | if (! (std::max(sel_x, x) <= (signed) std::min(sel_x + half_w, x + w) && |
705 | max(sel_y, y) <= (signed) min(sel_y + half_w, y + h))) | 714 | std::max(sel_y, y) <= (signed) std::min(sel_y + half_w, y + h))) |
706 | dosel = False; | 715 | dosel = False; |
707 | 716 | ||
708 | } | 717 | } |
@@ -866,7 +875,7 @@ void Basemenu::buttonReleaseEvent(XButtonEvent *re) { | |||
866 | if (moving) { | 875 | if (moving) { |
867 | moving = False; | 876 | moving = False; |
868 | 877 | ||
869 | if (which_sub != -1) | 878 | if (which_sub >= 0) |
870 | drawSubmenu(which_sub); | 879 | drawSubmenu(which_sub); |
871 | } | 880 | } |
872 | 881 | ||
@@ -913,7 +922,7 @@ void Basemenu::motionNotifyEvent(XMotionEvent *me) { | |||
913 | 922 | ||
914 | moving = torn = True; | 923 | moving = torn = True; |
915 | 924 | ||
916 | if (which_sub != -1) | 925 | if (which_sub >= 0) |
917 | drawSubmenu(which_sub); | 926 | drawSubmenu(which_sub); |
918 | } else { | 927 | } else { |
919 | menu.x = me->x_root - menu.x_move, | 928 | menu.x = me->x_root - menu.x_move, |
@@ -921,7 +930,7 @@ void Basemenu::motionNotifyEvent(XMotionEvent *me) { | |||
921 | 930 | ||
922 | XMoveWindow(display, menu.window, menu.x, menu.y); | 931 | XMoveWindow(display, menu.window, menu.x, menu.y); |
923 | 932 | ||
924 | if (which_sub != -1) | 933 | if (which_sub >= 0) |
925 | drawSubmenu(which_sub); | 934 | drawSubmenu(which_sub); |
926 | } | 935 | } |
927 | } | 936 | } |
@@ -1021,7 +1030,7 @@ void Basemenu::enterNotifyEvent(XCrossingEvent *ce) { | |||
1021 | if (shifted) | 1030 | if (shifted) |
1022 | XMoveWindow(display, menu.window, menu.x_shift, menu.y_shift); | 1031 | XMoveWindow(display, menu.window, menu.x_shift, menu.y_shift); |
1023 | 1032 | ||
1024 | if (which_sub != -1) { | 1033 | if (which_sub >= 0) { |
1025 | BasemenuItem *tmp = menuitems[which_sub]; | 1034 | BasemenuItem *tmp = menuitems[which_sub]; |
1026 | if (tmp->submenu()->isVisible()) { | 1035 | if (tmp->submenu()->isVisible()) { |
1027 | int sbl = (ce->x / menu.item_w), i = (ce->y / menu.item_h), | 1036 | int sbl = (ce->x / menu.item_w), i = (ce->y / menu.item_h), |
@@ -1053,7 +1062,7 @@ void Basemenu::leaveNotifyEvent(XCrossingEvent *ce) { | |||
1053 | XMoveWindow(display, menu.window, menu.x, menu.y); | 1062 | XMoveWindow(display, menu.window, menu.x, menu.y); |
1054 | shifted = False; | 1063 | shifted = False; |
1055 | 1064 | ||
1056 | if (which_sub != -1) drawSubmenu(which_sub); | 1065 | if (which_sub >= 0) drawSubmenu(which_sub); |
1057 | } | 1066 | } |
1058 | } | 1067 | } |
1059 | } | 1068 | } |