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 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; } } }
void do_state_0( int keypress ) { int i, j; Menu[0].Active = 0; Menu[0].ShowBar = 0; if (Menu[0].Displayed==0) menu_show( &Menu[0] ); if ( keypress & KEY_ALTED ) { 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] ); } } for (i=0; i<num_menus; i++ ) for (j=0; j< Menu[i].NumItems; j++ ) { if ( Menu[i].Item[j].Hotkey == keypress ) { if (Menu[i].Item[j].user_function) Menu[i].Item[j].user_function(); last_keypress = 0; return; } } if (keyd_pressed[KEY_LALT] || keyd_pressed[KEY_RALT] || ((keypress & 0xFF) == KEY_LALT) ) //if ( (keypress & 0xFF) == KEY_LALT ) { state = 1; Menu[0].Active = 1; menu_show( &Menu[0] ); return; } i = menu_check_mouse_item( &Menu[0] ); if ( B1_PRESSED && (i > -1)) { Menu[0].CurrentItem = i; state = 3; Menu[ CMENU ].ShowBar = 1; Menu[0].ShowBar = 1; Menu[ CMENU ].Active = 1; Menu[0].Active = 0; menu_show( &Menu[ CMENU ] ); menu_show( &Menu[0] ); return; } }
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; }
static window_event_result do_state_0(const d_event &event) { int keypress = 0; if (event.type == EVENT_KEY_COMMAND) keypress = event_key_get(event); Menu[0].Active = 0; if (Menu[0].wind) window_set_modal(Menu[0].wind, 0); Menu[0].ShowBar = 0; if ( keypress & KEY_ALTED ) { const auto i = menu_match_keypress( &Menu[0], keypress ); if (i > -1 ) { Menu[0].CurrentItem = i; Menu[0].Active = 0; if (Menu[0].wind) 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; } } range_for (auto &i, partial_const_range(Menu, num_menus)) range_for (auto &j, partial_const_range(i.Item, i.NumItems)) { if ( j.Hotkey == keypress ) { if (j.user_function) j.user_function(); return window_event_result::handled; } } if (keypress & KEY_ALTED) //if ( (keypress & 0xFF) == KEY_LALT ) { // Make sure the menubar receives events exclusively state = 1; Menu[0].Active = 1; // Put the menubar in front - hope this doesn't mess anything up by leaving it there // If it does, will need to remember the previous front window and restore it. // (Personally, I just use either the mouse or 'hotkeys' for menus) window_select(*Menu[0].wind); window_set_modal(Menu[0].wind, 1); menu_show( &Menu[0] ); return window_event_result::handled; } const auto i = menu_check_mouse_item( &Menu[0] ); if ( B1_JUST_PRESSED && (i > -1)) { Menu[0].CurrentItem = i; state = 3; Menu[ CMENU ].ShowBar = 1; Menu[0].ShowBar = 1; Menu[ CMENU ].Active = 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 window_event_result::ignored; }
int do_state_0(d_event *event) { int i, j; int keypress = 0; if (event->type == EVENT_KEY_COMMAND) keypress = event_key_get(event); Menu[0].Active = 0; if (Menu[0].wind) window_set_modal(Menu[0].wind, 0); Menu[0].ShowBar = 0; if ( keypress & KEY_ALTED ) { i = menu_match_keypress( &Menu[0], keypress ); if (i > -1 ) { Menu[0].CurrentItem = i; Menu[0].Active = 0; if (Menu[0].wind) 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 1; } } for (i=0; i<num_menus; i++ ) for (j=0; j< Menu[i].NumItems; j++ ) { if ( Menu[i].Item[j].Hotkey == keypress ) { if (Menu[i].Item[j].user_function) Menu[i].Item[j].user_function(); return 1; } } if (keypress & KEY_ALTED) //if ( (keypress & 0xFF) == KEY_LALT ) { // Make sure the menubar receives events exclusively state = 1; Menu[0].Active = 1; // Put the menubar in front - hope this doesn't mess anything up by leaving it there // If it does, will need to remember the previous front window and restore it. // (Personally, I just use either the mouse or 'hotkeys' for menus) window_select(Menu[0].wind); window_set_modal(Menu[0].wind, 1); menu_show( &Menu[0] ); return 1; } i = menu_check_mouse_item( &Menu[0] ); if ( B1_JUST_PRESSED && (i > -1)) { Menu[0].CurrentItem = i; state = 3; Menu[ CMENU ].ShowBar = 1; Menu[0].ShowBar = 1; Menu[ CMENU ].Active = 1; Menu[0].Active = 0; window_set_modal(Menu[0].wind, 0); menu_show( &Menu[ CMENU ] ); menu_show( &Menu[0] ); return 1; } return 0; }