X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fmainmenumanager.h;h=ea9327813407e03dae232ebfaba72cb6793dd84e;hb=e6e5fa3bf8853f149fdef16b39af3981097176a4;hp=d151cf48d663b33958e8be9defacb316b9f81e0a;hpb=8548bb75b66f871d1b6941ca9b79012e88274799;p=dragonfireclient.git diff --git a/src/mainmenumanager.h b/src/mainmenumanager.h index d151cf48d..ea9327813 100644 --- a/src/mainmenumanager.h +++ b/src/mainmenumanager.h @@ -17,18 +17,28 @@ with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#ifndef MAINMENUMANAGER_HEADER -#define MAINMENUMANAGER_HEADER +#pragma once /* All kinds of stuff that needs to be exposed from main.cpp */ -#include "debug.h" // assert #include "modalMenu.h" -#include "guiPauseMenu.h" //For IGameCallback +#include #include -extern gui::IGUIEnvironment* guienv; +class IGameCallback +{ +public: + virtual void exitToOS() = 0; + virtual void keyConfig() = 0; + virtual void disconnect() = 0; + virtual void changePassword() = 0; + virtual void changeVolume() = 0; + + virtual void signalKeyConfigChange() = 0; +}; + +extern gui::IGUIEnvironment *guienv; extern gui::IGUIStaticText *guiroot; // Handler for the modal menus @@ -36,27 +46,26 @@ extern gui::IGUIStaticText *guiroot; class MainMenuManager : public IMenuManager { public: - virtual void createdMenu(GUIModalMenu *menu) + virtual void createdMenu(gui::IGUIElement *menu) { - for(std::list::iterator - i = m_stack.begin(); - i != m_stack.end(); ++i) - { - assert(*i != menu); +#ifndef NDEBUG + for (gui::IGUIElement *i : m_stack) { + assert(i != menu); } +#endif - if(m_stack.size() != 0) + if(!m_stack.empty()) m_stack.back()->setVisible(false); m_stack.push_back(menu); } - virtual void deletingMenu(GUIModalMenu *menu) + virtual void deletingMenu(gui::IGUIElement *menu) { // Remove all entries if there are duplicates bool removed_entry; do{ removed_entry = false; - for(std::list::iterator + for(std::list::iterator i = m_stack.begin(); i != m_stack.end(); ++i) { @@ -72,18 +81,18 @@ class MainMenuManager : public IMenuManager /*core::list::Iterator i = m_stack.getLast(); assert(*i == menu); m_stack.erase(i);*/ - - if(m_stack.size() != 0) + + if(!m_stack.empty()) m_stack.back()->setVisible(true); } // Returns true to prevent further processing virtual bool preprocessEvent(const SEvent& event) { - if(m_stack.size() != 0) - return m_stack.back()->preprocessEvent(event); - else + if (m_stack.empty()) return false; + GUIModalMenu *mm = dynamic_cast(m_stack.back()); + return mm && mm->preprocessEvent(event); } u32 menuCount() @@ -91,27 +100,32 @@ class MainMenuManager : public IMenuManager return m_stack.size(); } - std::list m_stack; + bool pausesGame() + { + for (gui::IGUIElement *i : m_stack) { + GUIModalMenu *mm = dynamic_cast(i); + if (mm && mm->pausesGame()) + return true; + } + return false; + } + + std::list m_stack; }; extern MainMenuManager g_menumgr; -extern bool noMenuActive(); +extern bool isMenuActive(); class MainGameCallback : public IGameCallback { public: - MainGameCallback(IrrlichtDevice *a_device): - disconnect_requested(false), - changepassword_requested(false), - changevolume_requested(false), - device(a_device) - { - } + MainGameCallback() = default; + virtual ~MainGameCallback() = default; virtual void exitToOS() { - device->closeDevice(); + shutdown_requested = true; } virtual void disconnect() @@ -128,14 +142,25 @@ class MainGameCallback : public IGameCallback { changevolume_requested = true; } - - bool disconnect_requested; - bool changepassword_requested; - bool changevolume_requested; - IrrlichtDevice *device; -}; -extern MainGameCallback *g_gamecallback; + virtual void keyConfig() + { + keyconfig_requested = true; + } -#endif + virtual void signalKeyConfigChange() + { + keyconfig_changed = true; + } + + + bool disconnect_requested = false; + bool changepassword_requested = false; + bool changevolume_requested = false; + bool keyconfig_requested = false; + bool shutdown_requested = false; + bool keyconfig_changed = false; +}; + +extern MainGameCallback *g_gamecallback;