]> git.lizzy.rs Git - minetest.git/blob - src/mainmenumanager.h
Migrate to STL containers/algorithms.
[minetest.git] / src / mainmenumanager.h
1 /*
2 Minetest
3 Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com>
4
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU Lesser General Public License as published by
7 the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 GNU Lesser General Public License for more details.
14
15 You should have received a copy of the GNU Lesser General Public License along
16 with this program; if not, write to the Free Software Foundation, Inc.,
17 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18 */
19
20 #ifndef MAINMENUMANAGER_HEADER
21 #define MAINMENUMANAGER_HEADER
22
23 /*
24         All kinds of stuff that needs to be exposed from main.cpp
25 */
26 #include "debug.h" // assert
27 #include "modalMenu.h"
28 #include "guiPauseMenu.h" //For IGameCallback
29 #include <list>
30
31 extern gui::IGUIEnvironment* guienv;
32 extern gui::IGUIStaticText *guiroot;
33
34 // Handler for the modal menus
35
36 class MainMenuManager : public IMenuManager
37 {
38 public:
39         virtual void createdMenu(GUIModalMenu *menu)
40         {
41                 for(std::list<GUIModalMenu*>::iterator
42                                 i = m_stack.begin();
43                                 i != m_stack.end(); ++i)
44                 {
45                         assert(*i != menu);
46                 }
47
48                 if(m_stack.size() != 0)
49                         m_stack.back()->setVisible(false);
50                 m_stack.push_back(menu);
51         }
52
53         virtual void deletingMenu(GUIModalMenu *menu)
54         {
55                 // Remove all entries if there are duplicates
56                 bool removed_entry;
57                 do{
58                         removed_entry = false;
59                         for(std::list<GUIModalMenu*>::iterator
60                                         i = m_stack.begin();
61                                         i != m_stack.end(); ++i)
62                         {
63                                 if(*i == menu)
64                                 {
65                                         m_stack.erase(i);
66                                         removed_entry = true;
67                                         break;
68                                 }
69                         }
70                 }while(removed_entry);
71
72                 /*core::list<GUIModalMenu*>::Iterator i = m_stack.getLast();
73                 assert(*i == menu);
74                 m_stack.erase(i);*/
75                 
76                 if(m_stack.size() != 0)
77                         m_stack.back()->setVisible(true);
78         }
79
80         u32 menuCount()
81         {
82                 return m_stack.size();
83         }
84
85         std::list<GUIModalMenu*> m_stack;
86 };
87
88 extern MainMenuManager g_menumgr;
89
90 extern bool noMenuActive();
91
92 class MainGameCallback : public IGameCallback
93 {
94 public:
95         MainGameCallback(IrrlichtDevice *a_device):
96                 disconnect_requested(false),
97                 changepassword_requested(false),
98                 changevolume_requested(false),
99                 device(a_device)
100         {
101         }
102
103         virtual void exitToOS()
104         {
105                 device->closeDevice();
106         }
107
108         virtual void disconnect()
109         {
110                 disconnect_requested = true;
111         }
112
113         virtual void changePassword()
114         {
115                 changepassword_requested = true;
116         }
117
118         virtual void changeVolume()
119         {
120                 changevolume_requested = true;
121         }
122         
123         bool disconnect_requested;
124         bool changepassword_requested;
125         bool changevolume_requested;
126         IrrlichtDevice *device;
127 };
128
129 extern MainGameCallback *g_gamecallback;
130
131 #endif
132