X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fmainmenumanager.h;h=ea9327813407e03dae232ebfaba72cb6793dd84e;hb=1b3e4e173624bb2523d4386aeef6987709d9b022;hp=a37a8300fae9b41a3c6da80c9c47fbf7c4601523;hpb=037b2591971d752e67fa7d47095b996b3f56da5a;p=minetest.git diff --git a/src/mainmenumanager.h b/src/mainmenumanager.h index a37a8300f..ea9327813 100644 --- a/src/mainmenumanager.h +++ b/src/mainmenumanager.h @@ -1,6 +1,6 @@ /* -Minetest-c55 -Copyright (C) 2010 celeron55, Perttu Ahola +Minetest +Copyright (C) 2013 celeron55, Perttu Ahola This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by @@ -17,17 +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 @@ -35,29 +46,28 @@ extern gui::IGUIStaticText *guiroot; class MainMenuManager : public IMenuManager { public: - virtual void createdMenu(GUIModalMenu *menu) + virtual void createdMenu(gui::IGUIElement *menu) { - for(core::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) - (*m_stack.getLast())->setVisible(false); + 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(core::list::Iterator + for(std::list::iterator i = m_stack.begin(); - i != m_stack.end(); i++) + i != m_stack.end(); ++i) { if(*i == menu) { @@ -71,9 +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) - (*m_stack.getLast())->setVisible(true); + + if(!m_stack.empty()) + m_stack.back()->setVisible(true); + } + + // Returns true to prevent further processing + virtual bool preprocessEvent(const SEvent& event) + { + if (m_stack.empty()) + return false; + GUIModalMenu *mm = dynamic_cast(m_stack.back()); + return mm && mm->preprocessEvent(event); } u32 menuCount() @@ -81,26 +100,32 @@ class MainMenuManager : public IMenuManager return m_stack.size(); } - core::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), - device(a_device) - { - } + MainGameCallback() = default; + virtual ~MainGameCallback() = default; virtual void exitToOS() { - device->closeDevice(); + shutdown_requested = true; } virtual void disconnect() @@ -113,12 +138,29 @@ class MainGameCallback : public IGameCallback changepassword_requested = true; } - bool disconnect_requested; - bool changepassword_requested; - IrrlichtDevice *device; -}; + virtual void changeVolume() + { + changevolume_requested = true; + } -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;