static void menuitem_activate(GntMenu *menu, GntMenuItem *item) { if (!item) return; if (gnt_menuitem_activate(item)) { menu_hide_all(menu); } else { if (item->submenu) { GntMenu *sub = GNT_MENU(item->submenu); menu->submenu = sub; sub->type = GNT_MENU_POPUP; /* Submenus are *never* toplevel */ sub->parentmenu = menu; if (menu->type != GNT_MENU_TOPLEVEL) { GntWidget *widget = GNT_WIDGET(menu); item->priv.x = widget->priv.x + widget->priv.width - 1; item->priv.y = widget->priv.y + gnt_tree_get_selection_visible_line(GNT_TREE(menu)); } gnt_widget_set_position(GNT_WIDGET(sub), item->priv.x, item->priv.y); GNT_WIDGET_UNSET_FLAGS(GNT_WIDGET(sub), GNT_WIDGET_INVISIBLE); gnt_widget_draw(GNT_WIDGET(sub)); } else { menu_hide_all(menu); } } }
void do_state_1( int keypress ) { int i; if (!keyd_pressed[KEY_LALT] && !keyd_pressed[KEY_RALT] ) { //state = 2; //state2_alt_down = 0; //Menu[0].ShowBar = 1; //Menu[0].Active = 1; //menu_show( &Menu[0] ); state = 0; menu_hide_all(); } i = menu_match_keypress( &Menu[0], keypress ); if (i > -1 ) { Menu[0].CurrentItem = i; Menu[0].Active = 0; state = 3; Menu[ CMENU ].ShowBar = 1; Menu[ CMENU ].Active = 1; Menu[0].ShowBar = 1; menu_show( &Menu[ CMENU ] ); menu_show( &Menu[0] ); } i = menu_check_mouse_item( &Menu[0] ); if ( (i == -1) && B1_JUST_RELEASED ) { state = 0; menu_hide_all(); } if ( B1_PRESSED && (i > -1)) { Menu[0].CurrentItem = i; state = 3; Menu[ CMENU ].ShowBar = 1; Menu[ CMENU ].Active = 1; Menu[0].ShowBar = 1; Menu[0].Active = 0; menu_show( &Menu[ CMENU ] ); menu_show( &Menu[0] ); } }
void menubar_hide() { menubar_hid = 1; state = 0; menu_hide_all(); menu_hide( &Menu[0] ); }
int menubar_handler(window *wind, d_event *event, MENU *menu) { int rval = 0; if (event->type == EVENT_WINDOW_DRAW) { menu_draw(&Menu[0]); return 1; } else if (event->type == EVENT_WINDOW_CLOSE) { int i; //menu_hide_all(); //menu_hide( &Menu[0] ); for (i=1; i<num_menus; i++ ) { if (Menu[i].wind) { window_close(Menu[i].wind); Menu[i].wind = NULL; } } Menu[0].wind = NULL; } switch (state) { case 0: rval = do_state_0(event); break; case 1: rval = do_state_1(event); break; case 2: rval = do_state_2(event); break; case 3: break; default: state = 0; menu_hide_all(); } return rval; }
void do_state_3( int keypress ) { int i; switch( keypress ) { case KEY_ESC: state = 0; menu_hide_all(); break; case KEY_DOWN: case KEY_PAD2: i = Menu[ CMENU ].CurrentItem; do { i++; if ( i >= Menu[ CMENU ].NumItems ) i = 0; } while( Menu[CMENU].Item[i].Text[0] == '-'); menu_move_bar_to( &Menu[ CMENU ], i ); break; case KEY_UP: case KEY_PAD8: i = Menu[ CMENU ].CurrentItem; do { i--; if ( i < 0 ) i = Menu[ CMENU ].NumItems-1; } while( Menu[CMENU].Item[i].Text[0] == '-'); menu_move_bar_to( &Menu[ CMENU ], i ); break; case KEY_RIGHT: case KEY_PAD6: menu_hide( &Menu[ CMENU ] ); i = Menu[0].CurrentItem+1; if (i >= Menu[0].NumItems ) i = 0; menu_move_bar_to( &Menu[0], i ); Menu[CMENU].ShowBar = 1; Menu[CMENU].Active = 1; menu_show( &Menu[CMENU] ); break; case KEY_LEFT: case KEY_PAD4: menu_hide( &Menu[ CMENU ] ); i = Menu[0].CurrentItem-1; if (i < 0 ) i = Menu[0].NumItems-1; menu_move_bar_to( &Menu[0], i ); Menu[ CMENU ].ShowBar = 1; Menu[CMENU].Active = 1; menu_show( &Menu[ CMENU ] ); break; case KEY_ENTER: case KEY_PADENTER: state = 0; menu_hide_all(); if (Menu[CMENU].Item[ Menu[CMENU].CurrentItem ].user_function) Menu[CMENU].Item[ Menu[CMENU].CurrentItem ].user_function(); break; default: i = menu_match_keypress( &Menu[ CMENU ], keypress ); if (i > -1 ) { menu_move_bar_to( &Menu[ CMENU ], i ); state = 0; menu_hide_all(); if (Menu[CMENU].Item[ Menu[CMENU].CurrentItem ].user_function) Menu[CMENU].Item[ Menu[CMENU].CurrentItem ].user_function(); break; } i = menu_check_mouse_item( &Menu[CMENU] ); if (i > -1 ) { if ( B1_PRESSED ) menu_move_bar_to( &Menu[ CMENU ], i ); else if ( B1_JUST_RELEASED ) { menu_move_bar_to( &Menu[ CMENU ], i ); state = 0; menu_hide_all(); if (Menu[CMENU].Item[ Menu[CMENU].CurrentItem ].user_function) Menu[CMENU].Item[ Menu[CMENU].CurrentItem ].user_function(); break; } } else { i = menu_check_mouse_item( &Menu[0] ); if ( B1_PRESSED && (i > -1)) { if ( Menu[0].CurrentItem != i) { menu_hide( &Menu[ CMENU ] ); menu_move_bar_to( &Menu[0], i ); Menu[ CMENU ].ShowBar = 1; Menu[CMENU].Active = 1; menu_show( &Menu[ CMENU ] ); break; } } if ( B1_JUST_RELEASED ) { state = 0; menu_hide_all(); break; } } } }
void do_state_2(int keypress) { int i; if (keyd_pressed[KEY_LALT] || keyd_pressed[KEY_RALT] ) state2_alt_down = 1; if (!keyd_pressed[KEY_LALT] && !keyd_pressed[KEY_RALT] && state2_alt_down ) { state = 0; menu_hide_all(); } switch( keypress ) { case KEY_ESC: state = 0; menu_hide_all(); break; case KEY_LEFT: case KEY_PAD4: i = Menu[0].CurrentItem-1; if (i < 0 ) i = Menu[0].NumItems-1; menu_move_bar_to( &Menu[0], i ); break; case KEY_RIGHT: case KEY_PAD6: i = Menu[0].CurrentItem+1; if (i >= Menu[0].NumItems ) i = 0; menu_move_bar_to( &Menu[0], i ); break; case KEY_ENTER: case KEY_PADENTER: case KEY_DOWN: case KEY_PAD2: state = 3; Menu[ CMENU ].ShowBar = 1; Menu[ CMENU ].Active = 1; Menu[0].Active = 0; menu_show( &Menu[ 0 ] ); menu_show( &Menu[ CMENU ] ); break; default: i = menu_match_keypress( &Menu[0], keypress ); if (i > -1 ) { Menu[0].CurrentItem = i; Menu[0].Active = 0; state = 3; Menu[ CMENU ].ShowBar = 1; Menu[ CMENU ].Active = 1; Menu[0].ShowBar = 1; menu_show( &Menu[ CMENU ] ); menu_show( &Menu[0] ); break; } i = menu_check_mouse_item( &Menu[0] ); if ( (i == -1) && B1_JUST_RELEASED ) { state = 0; menu_hide_all(); break; } if ( B1_PRESSED && (i > -1)) { Menu[0].CurrentItem = i; Menu[0].Active = 0; state = 3; Menu[ CMENU ].ShowBar = 1; Menu[ CMENU ].Active = 1; Menu[0].ShowBar = 1; menu_show( &Menu[ CMENU ] ); menu_show( &Menu[0] ); break; } } }
static window_event_result menu_handler(window *, const d_event &event, MENU *menu) { int i; int keypress = 0; if (state != 3) return window_event_result::ignored; if (event.type == EVENT_KEY_COMMAND) keypress = event_key_get(event); else if (event.type == EVENT_WINDOW_CLOSE) // quitting { state = 0; menu_hide_all(); menu->wind = nullptr; return window_event_result::ignored; } window_event_result rval = window_event_result::ignored; switch( keypress ) { case 0: break; case KEY_ESC: state = 0; menu_hide_all(); rval = window_event_result::handled; break; case KEY_DOWN: case KEY_PAD2: i = Menu[ CMENU ].CurrentItem; do { i++; if ( i >= Menu[ CMENU ].NumItems ) i = 0; } while( Menu[CMENU].Item[i].Text[0] == '-'); menu_move_bar_to( &Menu[ CMENU ], i ); rval = window_event_result::handled; break; case KEY_UP: case KEY_PAD8: i = Menu[ CMENU ].CurrentItem; do { i--; if ( i < 0 ) i = Menu[ CMENU ].NumItems-1; } while( Menu[CMENU].Item[i].Text[0] == '-'); menu_move_bar_to( &Menu[ CMENU ], i ); rval = window_event_result::handled; break; case KEY_RIGHT: case KEY_PAD6: menu_hide( &Menu[ CMENU ] ); i = Menu[0].CurrentItem+1; if (i >= Menu[0].NumItems ) i = 0; menu_move_bar_to( &Menu[0], i ); Menu[CMENU].ShowBar = 1; Menu[CMENU].Active = 1; menu_show( &Menu[CMENU] ); rval = window_event_result::handled; break; case KEY_LEFT: case KEY_PAD4: menu_hide( &Menu[ CMENU ] ); i = Menu[0].CurrentItem-1; if (i < 0 ) i = Menu[0].NumItems-1; menu_move_bar_to( &Menu[0], i ); Menu[ CMENU ].ShowBar = 1; Menu[CMENU].Active = 1; menu_show( &Menu[ CMENU ] ); rval = window_event_result::handled; break; case KEY_ENTER: case KEY_PADENTER: state = 0; menu_hide_all(); if (Menu[CMENU].Item[ Menu[CMENU].CurrentItem ].user_function) Menu[CMENU].Item[ Menu[CMENU].CurrentItem ].user_function(); rval = window_event_result::handled; break; default: i = menu_match_keypress( &Menu[ CMENU ], keypress ); if (i > -1 ) { menu_move_bar_to( &Menu[ CMENU ], i ); state = 0; menu_hide_all(); if (Menu[CMENU].Item[ Menu[CMENU].CurrentItem ].user_function) Menu[CMENU].Item[ Menu[CMENU].CurrentItem ].user_function(); rval = window_event_result::handled; break; } } if (event.type == EVENT_MOUSE_MOVED || B1_JUST_RELEASED) { i = menu_check_mouse_item( &Menu[CMENU] ); if (i > -1 ) { if ( B1_JUST_RELEASED ) { menu_move_bar_to( &Menu[ CMENU ], i ); state = 0; menu_hide_all(); if (Menu[CMENU].Item[ Menu[CMENU].CurrentItem ].user_function) Menu[CMENU].Item[ Menu[CMENU].CurrentItem ].user_function(); rval = window_event_result::handled; } else { menu_move_bar_to( &Menu[ CMENU ], i ); rval = window_event_result::handled; } } else { i = menu_check_mouse_item( &Menu[0] ); if (i > -1) { if ( Menu[0].CurrentItem != i) { menu_hide( &Menu[ CMENU ] ); menu_move_bar_to( &Menu[0], i ); Menu[ CMENU ].ShowBar = 1; Menu[CMENU].Active = 1; menu_show( &Menu[ CMENU ] ); } rval = window_event_result::handled; } if ( B1_JUST_RELEASED ) { state = 0; menu_hide_all(); rval = window_event_result::handled; } } } if (event.type == EVENT_WINDOW_DRAW) { menu_draw(&Menu[CMENU]); return window_event_result::handled; } return rval; }
static window_event_result do_state_2(const d_event &event) { int i; int keypress = 0; window_event_result rval = window_event_result::ignored; if (event.type == EVENT_KEY_COMMAND) keypress = event_key_get(event); if (keypress & KEY_ALTED) { state2_alt_down = 1; rval = window_event_result::handled; } if ((event.type == EVENT_KEY_RELEASE) && !(event_key_get(event) & KEY_ALTED) && state2_alt_down) { state = 0; menu_hide_all(); rval = window_event_result::handled; } switch( keypress ) { case KEY_ESC: state = 0; menu_hide_all(); return window_event_result::handled; case KEY_LEFT: case KEY_PAD4: i = Menu[0].CurrentItem-1; if (i < 0 ) i = Menu[0].NumItems-1; menu_move_bar_to( &Menu[0], i ); return window_event_result::handled; case KEY_RIGHT: case KEY_PAD6: i = Menu[0].CurrentItem+1; if (i >= Menu[0].NumItems ) i = 0; menu_move_bar_to( &Menu[0], i ); return window_event_result::handled; case KEY_ENTER: case KEY_PADENTER: case KEY_DOWN: case KEY_PAD2: state = 3; Menu[ CMENU ].ShowBar = 1; Menu[ CMENU ].Active = 1; Menu[0].Active = 0; window_set_modal(Menu[0].wind, 0); menu_show( &Menu[ 0 ] ); menu_show( &Menu[ CMENU ] ); return window_event_result::handled; default: i = menu_match_keypress( &Menu[0], keypress ); if (i > -1 ) { Menu[0].CurrentItem = i; Menu[0].Active = 0; window_set_modal(Menu[0].wind, 0); state = 3; Menu[ CMENU ].ShowBar = 1; Menu[ CMENU ].Active = 1; Menu[0].ShowBar = 1; menu_show( &Menu[ CMENU ] ); menu_show( &Menu[0] ); return window_event_result::handled; } i = menu_check_mouse_item( &Menu[0] ); if ( (i == -1) && B1_JUST_RELEASED ) { state = 0; menu_hide_all(); return window_event_result::handled; } if (i > -1) { Menu[0].CurrentItem = i; Menu[0].Active = 0; window_set_modal(Menu[0].wind, 0); state = 3; Menu[ CMENU ].ShowBar = 1; Menu[ CMENU ].Active = 1; Menu[0].ShowBar = 1; menu_show( &Menu[ CMENU ] ); menu_show( &Menu[0] ); return window_event_result::handled; } } return rval; }
static window_event_result do_state_1(const d_event &event) { int i; int keypress = 0; window_event_result rval = window_event_result::ignored; if (event.type == EVENT_KEY_COMMAND) keypress = event_key_get(event); if ((event.type == EVENT_KEY_RELEASE) && !(event_key_get(event) & KEY_ALTED)) { state = 2; state2_alt_down = 0; Menu[0].ShowBar = 1; Menu[0].Active = 1; menu_show( &Menu[0] ); rval = window_event_result::handled; } i = menu_match_keypress( &Menu[0], keypress ); if (i > -1 ) { Menu[0].CurrentItem = i; Menu[0].Active = 0; window_set_modal(Menu[0].wind, 0); state = 3; Menu[ CMENU ].ShowBar = 1; Menu[ CMENU ].Active = 1; Menu[0].ShowBar = 1; menu_show( &Menu[ CMENU ] ); menu_show( &Menu[0] ); rval = window_event_result::handled; } i = menu_check_mouse_item( &Menu[0] ); if ( (i == -1) && B1_JUST_RELEASED ) { state = 0; menu_hide_all(); return window_event_result::handled; } if ( B1_JUST_PRESSED && (i > -1)) { Menu[0].CurrentItem = i; state = 3; Menu[ CMENU ].ShowBar = 1; Menu[ CMENU ].Active = 1; Menu[0].ShowBar = 1; Menu[0].Active = 0; window_set_modal(Menu[0].wind, 0); menu_show( &Menu[ CMENU ] ); menu_show( &Menu[0] ); return window_event_result::handled; } return rval; }