From c4c201db6ee3fa073cfa8732846408e8851a687b Mon Sep 17 00:00:00 2001 From: Celtic Minstrel Date: Sun, 2 Feb 2020 21:40:58 -0500 Subject: [PATCH] Implement the most important menu key accelerators for Linux Patch from @x-qq --- src/game/boe.menu.cpp | 105 +++++++++++++++++------- src/game/boe.menu.hpp | 5 +- src/pcedit/pc.menu.cpp | 88 ++++++++++++++------ src/pcedit/pc.menu.hpp | 5 +- src/scenedit/scen.menu.cpp | 162 ++++++++++++++++++++++++++----------- src/scenedit/scen.menu.hpp | 5 +- 6 files changed, 261 insertions(+), 109 deletions(-) diff --git a/src/game/boe.menu.cpp b/src/game/boe.menu.cpp index 322733f5..8fc70da6 100644 --- a/src/game/boe.menu.cpp +++ b/src/game/boe.menu.cpp @@ -50,11 +50,11 @@ void OpenBoEMenu::add_menu_placeholders(tgui::MenuBar::Ptr& menubar) const { void OpenBoEMenu::add_persistent_menu_items(tgui::MenuBar::Ptr& menubar) const { const std::vector> persistent_menu_items { - { { "File", "New Game" }, eMenu::FILE_NEW }, + { { "File", "New Game Ctrl-N" }, eMenu::FILE_NEW }, { { "File", "Open Game Ctrl-O" }, eMenu::FILE_OPEN }, { { "File", "Abort" }, eMenu::FILE_ABORT }, { { "File", "Save Game Ctrl-S" }, eMenu::FILE_SAVE }, - { { "File", "Save As..." }, eMenu::FILE_SAVE_AS }, + { { "File", "Save As... Ctrl-Shift-S" }, eMenu::FILE_SAVE_AS }, { { "File", "Preferences" }, eMenu::PREFS }, { { "File", "Quit Ctrl-Q" }, eMenu::QUIT }, @@ -67,9 +67,9 @@ void OpenBoEMenu::add_persistent_menu_items(tgui::MenuBar::Ptr& menubar) const { { { "Options", "See Overall Party Stats" }, eMenu::OPTIONS_STATS }, { { "Options", "See Journal" }, eMenu::OPTIONS_JOURNAL }, - { { "Actions", "Do Alchemy" }, eMenu::ACTIONS_ALCHEMY }, - { { "Actions", "Wait 80 Moves" }, eMenu::ACTIONS_WAIT }, - { { "Actions", "Display AutoMap" }, eMenu::ACTIONS_AUTOMAP }, + { { "Actions", "Do Alchemy Ctrl-A" }, eMenu::ACTIONS_ALCHEMY }, + { { "Actions", "Wait 80 Moves Ctrl-W" }, eMenu::ACTIONS_WAIT }, + { { "Actions", "Display AutoMap A" }, eMenu::ACTIONS_AUTOMAP }, { { "Library", "Mage Spells" }, eMenu::LIBRARY_MAGE }, { { "Library", "Priest Spells" }, eMenu::LIBRARY_PRIEST }, @@ -104,38 +104,78 @@ bool OpenBoEMenu::handle_event(const sf::Event& event) { } // Returns true if event was consumed -bool OpenBoEMenu::handle_keypressed_event(const sf::Event& event) { - - // NOTE: menu items get dynamically enabled/disabled based - // on gamestate, but these keyboard shortcuts do not. So - // this may not be the best way to implement them. +bool OpenBoEMenu::handle_keypressed_event(const sf::Event& event) const { // NOTE: since we are manually adding keyboard shortcut descriptions // to the menu items, they become parts of menu hierarchies bool event_was_consumed { false }; - + if(this->is_control_key_pressed()) { - switch(event.key.code) { - case sf::Keyboard::S: - handle_menu_choice(eMenu::FILE_SAVE); - event_was_consumed = true; - break; - case sf::Keyboard::O: - handle_menu_choice(eMenu::FILE_OPEN); - event_was_consumed = true; - break; - case sf::Keyboard::Q: - handle_menu_choice(eMenu::QUIT); - event_was_consumed = true; - break; - default: break; + if(this->is_shift_key_pressed()) { + event_was_consumed = this->handle_ctrl_shift_keypress(event); + } else { + event_was_consumed = this->handle_ctrl_keypress(event); } } return event_was_consumed; } +bool OpenBoEMenu::handle_ctrl_keypress(const sf::Event& event) const { + auto menubar = this->get_menubar_ptr(); + bool event_was_consumed { false }; + + switch(event.key.code) { + case sf::Keyboard::S: + if(!menubar->getMenuItemEnabled({ "File", "Save Game Ctrl-S" })) break; + handle_menu_choice(eMenu::FILE_SAVE); + event_was_consumed = true; + break; + case sf::Keyboard::A: + if(!menubar->getMenuItemEnabled({ "Actions", "Do Alchemy Ctrl-A" })) break; + handle_menu_choice(eMenu::ACTIONS_ALCHEMY); + event_was_consumed = true; + break; + case sf::Keyboard::W: + if(!menubar->getMenuItemEnabled({ "Actions", "Wait 80 Moves Ctrl-W" })) break; + handle_menu_choice(eMenu::ACTIONS_WAIT); + event_was_consumed = true; + break; + case sf::Keyboard::N: + handle_menu_choice(eMenu::FILE_NEW); + event_was_consumed = true; + break; + case sf::Keyboard::O: + handle_menu_choice(eMenu::FILE_OPEN); + event_was_consumed = true; + break; + case sf::Keyboard::Q: + handle_menu_choice(eMenu::QUIT); + event_was_consumed = true; + break; + default: break; + } + + return event_was_consumed; +} + +bool OpenBoEMenu::handle_ctrl_shift_keypress(const sf::Event& event) const { + auto menubar = this->get_menubar_ptr(); + bool event_was_consumed { false }; + + switch(event.key.code) { + case sf::Keyboard::S: + if(!menubar->getMenuItemEnabled({ "File", "Save As... Ctrl-Shift-S" })) break; + handle_menu_choice(eMenu::FILE_SAVE_AS); + event_was_consumed = true; + break; + default: break; + } + + return event_was_consumed; +} + bool OpenBoEMenu::is_control_key_pressed() const { // NOTE: Control is not cross-platform (apple) @@ -144,6 +184,11 @@ bool OpenBoEMenu::is_control_key_pressed() const { || sf::Keyboard::isKeyPressed(sf::Keyboard::RControl)); } +bool OpenBoEMenu::is_shift_key_pressed() const { + return (sf::Keyboard::isKeyPressed(sf::Keyboard::LShift) + || sf::Keyboard::isKeyPressed(sf::Keyboard::RShift)); +} + tgui::MenuBar::Ptr OpenBoEMenu::get_menubar_ptr() const { return this->tgui.get(this->internal_menubar_widget_name); } @@ -165,11 +210,8 @@ void OpenBoEMenu::update_for_game_state(eGameMode overall_mode, bool party_in_me menubar->setMenuEnabled("Cast Priest", false); menubar->setMenuItemEnabled({ "File", "Save Game Ctrl-S" }, false); - if(party_in_memory) { - menubar->setMenuItemEnabled({ "File", "Save As..." }, true); - } else { - menubar->setMenuItemEnabled({ "File", "Save As..." }, false); - } + menubar->setMenuItemEnabled({ "File", "Save As... Ctrl-Shift-S" }, party_in_memory); + menubar->setMenuItemEnabled({ "File", "Abort" }, false); } else { menubar->setMenuEnabled("Options", true); menubar->setMenuEnabled("Actions", true); @@ -178,7 +220,8 @@ void OpenBoEMenu::update_for_game_state(eGameMode overall_mode, bool party_in_me menubar->setMenuEnabled("Cast Priest", true); menubar->setMenuItemEnabled({ "File", "Save Game Ctrl-S" }, true); - menubar->setMenuItemEnabled({ "File", "Save As..." }, true); + menubar->setMenuItemEnabled({ "File", "Save As... Ctrl-Shift-S" }, true); + menubar->setMenuItemEnabled({ "File", "Abort" }, true); } } diff --git a/src/game/boe.menu.hpp b/src/game/boe.menu.hpp index c2718c30..4385d04b 100644 --- a/src/game/boe.menu.hpp +++ b/src/game/boe.menu.hpp @@ -33,8 +33,11 @@ private: std::vector spell_menus_connection_ids; tgui::MenuBar::Ptr build_menubar() const; - bool handle_keypressed_event(const sf::Event&); + bool handle_keypressed_event(const sf::Event&) const; + bool handle_ctrl_keypress(const sf::Event&) const; + bool handle_ctrl_shift_keypress(const sf::Event&) const; bool is_control_key_pressed() const; + bool is_shift_key_pressed() const; void add_menu_placeholders(tgui::MenuBar::Ptr&) const; void add_persistent_menu_items(tgui::MenuBar::Ptr&) const; tgui::MenuBar::Ptr get_menubar_ptr() const; diff --git a/src/pcedit/pc.menu.cpp b/src/pcedit/pc.menu.cpp index f4cd3429..57296631 100644 --- a/src/pcedit/pc.menu.cpp +++ b/src/pcedit/pc.menu.cpp @@ -36,9 +36,9 @@ void OpenBoEPCEditMenu::add_persistent_menu_items(tgui::MenuBar::Ptr& menubar) c const std::vector> persistent_menu_items { { { "File", "Open Game Ctrl-O" }, eMenu::FILE_OPEN }, - { { "File", "Close" }, eMenu::FILE_CLOSE }, + { { "File", "Close Ctrl-W" }, eMenu::FILE_CLOSE }, { { "File", "Save Game Ctrl-S" }, eMenu::FILE_SAVE }, - { { "File", "Save As..." }, eMenu::FILE_SAVE_AS }, + { { "File", "Save As... Ctrl-Shift-S" }, eMenu::FILE_SAVE_AS }, { { "File", "Revert to Saved" }, eMenu::FILE_REVERT }, { { "File", "Quit Ctrl-Q" }, eMenu::QUIT }, @@ -86,38 +86,69 @@ bool OpenBoEPCEditMenu::handle_event(const sf::Event& event) { } // Returns true if event was consumed -bool OpenBoEPCEditMenu::handle_keypressed_event(const sf::Event& event) { - - // NOTE: menu items get dynamically enabled/disabled based - // on gamestate, but these keyboard shortcuts do not. So - // this may not be the best way to implement them. +bool OpenBoEPCEditMenu::handle_keypressed_event(const sf::Event& event) const { // NOTE: since we are manually adding keyboard shortcut descriptions // to the menu items, they become parts of menu hierarchies bool event_was_consumed { false }; - + if(this->is_control_key_pressed()) { - switch(event.key.code) { - case sf::Keyboard::O: - handle_menu_choice(eMenu::FILE_OPEN); - event_was_consumed = true; - break; - case sf::Keyboard::S: - handle_menu_choice(eMenu::FILE_SAVE); - event_was_consumed = true; - break; - case sf::Keyboard::Q: - handle_menu_choice(eMenu::QUIT); - event_was_consumed = true; - break; - default: break; + if(this->is_shift_key_pressed()) { + event_was_consumed = this->handle_ctrl_shift_keypress(event); + } else { + event_was_consumed = this->handle_ctrl_keypress(event); } } return event_was_consumed; } +bool OpenBoEPCEditMenu::handle_ctrl_keypress(const sf::Event& event) const { + auto menubar = this->get_menubar_ptr(); + bool event_was_consumed { false }; + + switch(event.key.code) { + case sf::Keyboard::S: + if(!menubar->getMenuItemEnabled({ "File", "Save Game Ctrl-S" })) break; + handle_menu_choice(eMenu::FILE_SAVE); + event_was_consumed = true; + break; + case sf::Keyboard::W: + if(!menubar->getMenuItemEnabled({ "File", "Close Ctrl-W" })) break; + handle_menu_choice(eMenu::FILE_CLOSE); + event_was_consumed = true; + break; + case sf::Keyboard::O: + handle_menu_choice(eMenu::FILE_OPEN); + event_was_consumed = true; + break; + case sf::Keyboard::Q: + handle_menu_choice(eMenu::QUIT); + event_was_consumed = true; + break; + default: break; + } + + return event_was_consumed; +} + +bool OpenBoEPCEditMenu::handle_ctrl_shift_keypress(const sf::Event& event) const { + auto menubar = this->get_menubar_ptr(); + bool event_was_consumed { false }; + + switch(event.key.code) { + case sf::Keyboard::S: + if(!menubar->getMenuItemEnabled({ "File", "Save As... Ctrl-Shift-S" })) break; + handle_menu_choice(eMenu::FILE_SAVE_AS); + event_was_consumed = true; + break; + default: break; + } + + return event_was_consumed; +} + bool OpenBoEPCEditMenu::is_control_key_pressed() const { // NOTE: Control is not cross-platform (apple) @@ -126,6 +157,11 @@ bool OpenBoEPCEditMenu::is_control_key_pressed() const { || sf::Keyboard::isKeyPressed(sf::Keyboard::RControl)); } +bool OpenBoEPCEditMenu::is_shift_key_pressed() const { + return (sf::Keyboard::isKeyPressed(sf::Keyboard::LShift) + || sf::Keyboard::isKeyPressed(sf::Keyboard::RShift)); +} + void OpenBoEPCEditMenu::draw() { this->tgui.draw(); } @@ -141,17 +177,17 @@ void OpenBoEPCEditMenu::update_for_editor_state(bool party_in_memory, bool party menubar->setMenuEnabled("Party" , true); menubar->setMenuEnabled("Scenario", party_in_scenario); - menubar->setMenuItemEnabled({ "File", "Close" }, true); + menubar->setMenuItemEnabled({ "File", "Close Ctrl-W" }, true); menubar->setMenuItemEnabled({ "File", "Save Game Ctrl-S" }, true); - menubar->setMenuItemEnabled({ "File", "Save As..." }, true); + menubar->setMenuItemEnabled({ "File", "Save As... Ctrl-Shift-S" }, true); menubar->setMenuItemEnabled({ "File", "Revert to Saved" }, true); } else { menubar->setMenuEnabled("Party" , false); menubar->setMenuEnabled("Scenario", false); - menubar->setMenuItemEnabled({ "File", "Close" }, false); + menubar->setMenuItemEnabled({ "File", "Close Ctrl-W" }, false); menubar->setMenuItemEnabled({ "File", "Save Game Ctrl-S" }, false); - menubar->setMenuItemEnabled({ "File", "Save As..." }, false); + menubar->setMenuItemEnabled({ "File", "Save As... Ctrl-Shift-S" }, false); menubar->setMenuItemEnabled({ "File", "Revert to Saved" }, false); } } diff --git a/src/pcedit/pc.menu.hpp b/src/pcedit/pc.menu.hpp index 411b074a..a80089dc 100644 --- a/src/pcedit/pc.menu.hpp +++ b/src/pcedit/pc.menu.hpp @@ -27,8 +27,11 @@ private: void add_menu_placeholders(tgui::MenuBar::Ptr&) const; void add_persistent_menu_items(tgui::MenuBar::Ptr&) const; tgui::MenuBar::Ptr get_menubar_ptr() const; - bool handle_keypressed_event(const sf::Event&); + bool handle_keypressed_event(const sf::Event&) const; + bool handle_ctrl_keypress(const sf::Event&) const; + bool handle_ctrl_shift_keypress(const sf::Event&) const; bool is_control_key_pressed() const; + bool is_shift_key_pressed() const; }; #endif diff --git a/src/scenedit/scen.menu.cpp b/src/scenedit/scen.menu.cpp index ca0e08b8..2b5eff6d 100644 --- a/src/scenedit/scen.menu.cpp +++ b/src/scenedit/scen.menu.cpp @@ -41,21 +41,21 @@ void OpenBoESceneditMenu::add_menu_placeholders(tgui::MenuBar::Ptr& menubar) con // This method fills the menu with items that never change. void OpenBoESceneditMenu::add_persistent_menu_items(tgui::MenuBar::Ptr& menubar) const { const std::vector> persistent_menu_items { - { { "File", "New Scenario" }, eMenu::FILE_NEW }, - { { "File", "Open Scenario Ctrl-O" }, eMenu::FILE_OPEN }, - { { "File", "Close Scenario" }, eMenu::FILE_CLOSE }, - { { "File", "Save Scenario" }, eMenu::FILE_SAVE }, - { { "File", "Save As..." }, eMenu::FILE_SAVE_AS }, - { { "File", "Revert to Saved" }, eMenu::FILE_REVERT }, - { { "File", "Quit Ctrl-Q" }, eMenu::QUIT }, + { { "File", "New Scenario Ctrl-N" }, eMenu::FILE_NEW }, + { { "File", "Open Scenario Ctrl-O" }, eMenu::FILE_OPEN }, + { { "File", "Close Scenario Ctrl-W" }, eMenu::FILE_CLOSE }, + { { "File", "Save Scenario Ctrl-S" }, eMenu::FILE_SAVE }, + { { "File", "Save As... Ctrl-Shift-S" }, eMenu::FILE_SAVE_AS }, + { { "File", "Revert to Saved" }, eMenu::FILE_REVERT }, + { { "File", "Quit Ctrl-Q" }, eMenu::QUIT }, - { { "Edit", "Undo" }, eMenu::EDIT_UNDO }, - { { "Edit", "Redo" }, eMenu::EDIT_REDO }, - { { "Edit", "Cut" }, eMenu::EDIT_CUT }, - { { "Edit", "Copy" }, eMenu::EDIT_COPY }, - { { "Edit", "Paste" }, eMenu::EDIT_PASTE }, - { { "Edit", "Delete" }, eMenu::EDIT_DELETE }, - { { "Edit", "Select All" }, eMenu::EDIT_SELECT_ALL }, + { { "Edit", "Undo Ctrl-Z" }, eMenu::EDIT_UNDO }, + { { "Edit", "Redo Ctrl-Y" }, eMenu::EDIT_REDO }, + { { "Edit", "Cut Ctrl-X" }, eMenu::EDIT_CUT }, + { { "Edit", "Copy Ctrl-C" }, eMenu::EDIT_COPY }, + { { "Edit", "Paste Ctrl-V" }, eMenu::EDIT_PASTE }, + { { "Edit", "Delete" }, eMenu::EDIT_DELETE }, + { { "Edit", "Select All Ctrl-A" }, eMenu::EDIT_SELECT_ALL }, { { "Scenario", "Advanced", "Edit Special Nodes" }, eMenu::SCEN_SPECIALS }, { { "Scenario", "Advanced", "Edit Scenario Text" }, eMenu::SCEN_TEXT }, @@ -75,7 +75,6 @@ void OpenBoESceneditMenu::add_persistent_menu_items(tgui::MenuBar::Ptr& menubar) // { { "Scenario", "Advanced", "Scenario Specials Dump" }, eMenu::NONE }, // { { "Scenario", "Advanced", "Scenario Object Data Dump" }, eMenu::NONE }, - { { "Scenario", "Create New Town" }, eMenu::TOWN_CREATE }, { { "Scenario", "Create New Town" }, eMenu::TOWN_CREATE }, { { "Scenario", "Resize Outdoors" }, eMenu::OUT_RESIZE }, { { "Scenario", "Scenario Details" }, eMenu::SCEN_DETAILS }, @@ -140,34 +139,102 @@ bool OpenBoESceneditMenu::handle_event(const sf::Event& event) { } // Returns true if event was consumed -bool OpenBoESceneditMenu::handle_keypressed_event(const sf::Event& event) { - - // NOTE: menu items get dynamically enabled/disabled based - // on gamestate, but these keyboard shortcuts do not. So - // this may not be the best way to implement them. +bool OpenBoESceneditMenu::handle_keypressed_event(const sf::Event& event) const { // NOTE: since we are manually adding keyboard shortcut descriptions // to the menu items, they become parts of menu hierarchies bool event_was_consumed { false }; - + if(this->is_control_key_pressed()) { - switch(event.key.code) { - case sf::Keyboard::O: - handle_menu_choice(eMenu::FILE_OPEN); - event_was_consumed = true; - break; - case sf::Keyboard::Q: - handle_menu_choice(eMenu::QUIT); - event_was_consumed = true; - break; - default: break; + if(this->is_shift_key_pressed()) { + event_was_consumed = this->handle_ctrl_shift_keypress(event); + } else { + event_was_consumed = this->handle_ctrl_keypress(event); } } return event_was_consumed; } +bool OpenBoESceneditMenu::handle_ctrl_keypress(const sf::Event& event) const { + auto menubar = this->get_menubar_ptr(); + bool event_was_consumed { false }; + + switch(event.key.code) { + case sf::Keyboard::S: + if(!menubar->getMenuItemEnabled({ "File", "Save Scenario Ctrl-S" })) break; + handle_menu_choice(eMenu::FILE_SAVE); + event_was_consumed = true; + break; + case sf::Keyboard::W: + if(!menubar->getMenuItemEnabled({ "File", "Close Scenario Ctrl-W" })) break; + handle_menu_choice(eMenu::FILE_CLOSE); + event_was_consumed = true; + break; + case sf::Keyboard::Z: + if(!menubar->getMenuItemEnabled({ "Edit", "Undo Ctrl-Z" })) break; + handle_menu_choice(eMenu::EDIT_UNDO); + event_was_consumed = true; + break; + case sf::Keyboard::Y: + if(!menubar->getMenuItemEnabled({ "Edit", "Redo Ctrl-Y" })) break; + handle_menu_choice(eMenu::EDIT_REDO); + event_was_consumed = true; + case sf::Keyboard::X: + if(!menubar->getMenuItemEnabled({ "Edit", "Cut Ctrl-X" })) break; + handle_menu_choice(eMenu::EDIT_CUT); + event_was_consumed = true; + break; + case sf::Keyboard::C: + if(!menubar->getMenuItemEnabled({ "Edit", "Copy Ctrl-C" })) break; + handle_menu_choice(eMenu::EDIT_COPY); + event_was_consumed = true; + break; + case sf::Keyboard::V: + if(!menubar->getMenuItemEnabled({ "Edit", "Paste Ctrl-V" })) break; + handle_menu_choice(eMenu::EDIT_PASTE); + event_was_consumed = true; + break; + case sf::Keyboard::A: + if(!menubar->getMenuItemEnabled({ "Edit", "Select All Ctrl-A" })) break; + handle_menu_choice(eMenu::EDIT_SELECT_ALL); + event_was_consumed = true; + break; + case sf::Keyboard::O: + handle_menu_choice(eMenu::FILE_OPEN); + event_was_consumed = true; + break; + case sf::Keyboard::Q: + handle_menu_choice(eMenu::QUIT); + event_was_consumed = true; + break; + case sf::Keyboard::N: + handle_menu_choice(eMenu::FILE_NEW); + event_was_consumed = true; + break; + default: break; + } + + return event_was_consumed; +} + +bool OpenBoESceneditMenu::handle_ctrl_shift_keypress(const sf::Event& event) const { + auto menubar = this->get_menubar_ptr(); + bool event_was_consumed { false }; + + switch(event.key.code) { + case sf::Keyboard::S: + if(!menubar->getMenuItemEnabled({ "File", "Save As... Ctrl-Shift-S" })) break; + handle_menu_choice(eMenu::FILE_SAVE_AS); + event_was_consumed = true; + break; + default: break; + } + + return event_was_consumed; +} + bool OpenBoESceneditMenu::is_control_key_pressed() const { // NOTE: Control is not cross-platform (apple) @@ -176,6 +243,11 @@ bool OpenBoESceneditMenu::is_control_key_pressed() const { || sf::Keyboard::isKeyPressed(sf::Keyboard::RControl)); } +bool OpenBoESceneditMenu::is_shift_key_pressed() const { + return (sf::Keyboard::isKeyPressed(sf::Keyboard::LShift) + || sf::Keyboard::isKeyPressed(sf::Keyboard::RShift)); +} + void OpenBoESceneditMenu::draw() { this->tgui.draw(); } @@ -204,8 +276,10 @@ void OpenBoESceneditMenu::update_for_mode(short mode) { void OpenBoESceneditMenu::update_for_mode_0() { auto menubar = this->get_menubar_ptr(); - menubar->setMenuItemEnabled({ "File", "Save Scenario" }, false); - menubar->setMenuItemEnabled({ "File", "Save As..." }, false); + menubar->setMenuItemEnabled({ "File", "Save Scenario Ctrl-S" }, false); + menubar->setMenuItemEnabled({ "File", "Save As... Ctrl-Shift-S" }, false); + menubar->setMenuItemEnabled({ "File", "Close Scenario Ctrl-W" }, false); + menubar->setMenuItemEnabled({ "File", "Revert to Saved" }, false); menubar->setMenuEnabled("Scenario", false); menubar->setMenuEnabled("Town", false); @@ -234,8 +308,10 @@ void OpenBoESceneditMenu::update_for_mode_3() { void OpenBoESceneditMenu::update_for_mode_4() { auto menubar = this->get_menubar_ptr(); - menubar->setMenuItemEnabled({ "File", "Save Scenario" }, true); - menubar->setMenuItemEnabled({ "File", "Save As..." }, true); + menubar->setMenuItemEnabled({ "File", "Save Scenario Ctrl-S" }, true); + menubar->setMenuItemEnabled({ "File", "Save As... Ctrl-Shift-S" }, true); + menubar->setMenuItemEnabled({ "File", "Close Scenario Ctrl-W" }, true); + menubar->setMenuItemEnabled({ "File", "Revert to Saved" }, true); menubar->setMenuEnabled("Scenario", true); menubar->setMenuEnabled("Town", true); @@ -244,20 +320,8 @@ void OpenBoESceneditMenu::update_for_mode_4() { void OpenBoESceneditMenu::update_edit_menu(cUndoList const & undo_list) { auto menubar = this->get_menubar_ptr(); - - OpenBoESceneditMenu::MenuHierarchy const undo_menu_item { "Edit", "Undo" }; - OpenBoESceneditMenu::MenuHierarchy const redo_menu_item { "Edit", "Redo" }; - if(undo_list.noUndo()) { - menubar->setMenuItemEnabled(undo_menu_item, false); - } else { - menubar->setMenuItemEnabled(undo_menu_item, true); - } - - if(undo_list.noRedo()) { - menubar->setMenuItemEnabled(redo_menu_item, false); - } else { - menubar->setMenuItemEnabled(redo_menu_item, true); - } + menubar->setMenuItemEnabled({ "Edit", "Undo Ctrl-Z" }, !undo_list.noUndo()); + menubar->setMenuItemEnabled({ "Edit", "Redo Ctrl-Y" }, !undo_list.noRedo()); } diff --git a/src/scenedit/scen.menu.hpp b/src/scenedit/scen.menu.hpp index 8ea9dfc9..0ee05b97 100644 --- a/src/scenedit/scen.menu.hpp +++ b/src/scenedit/scen.menu.hpp @@ -30,8 +30,11 @@ private: void add_menu_placeholders(tgui::MenuBar::Ptr&) const; void add_persistent_menu_items(tgui::MenuBar::Ptr&) const; tgui::MenuBar::Ptr get_menubar_ptr() const; - bool handle_keypressed_event(const sf::Event&); + bool handle_keypressed_event(const sf::Event&) const; + bool handle_ctrl_keypress(const sf::Event&) const; + bool handle_ctrl_shift_keypress(const sf::Event&) const; bool is_control_key_pressed() const; + bool is_shift_key_pressed() const; void update_for_mode_0(); void update_for_mode_1(); void update_for_mode_2();