Luanti 5.11.0-dev
 
Loading...
Searching...
No Matches
mainmenumanager.h
Go to the documentation of this file.
1// Luanti
2// SPDX-License-Identifier: LGPL-2.1-or-later
3// Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com>
4
5#pragma once
6
7/*
8 All kinds of stuff that needs to be exposed from main.cpp
9*/
10#include "modalMenu.h"
11#include <cassert>
12#include <list>
13
14#include "IGUIEnvironment.h"
15
16namespace irr::gui {
17 class IGUIStaticText;
18}
19
21{
22public:
23 virtual void exitToOS() = 0;
24 virtual void openSettings() = 0;
25 virtual void keyConfig() = 0;
26 virtual void disconnect() = 0;
27 virtual void changePassword() = 0;
28 virtual void changeVolume() = 0;
29 virtual void showOpenURLDialog(const std::string &url) = 0;
30 virtual void signalKeyConfigChange() = 0;
31 virtual void touchscreenLayout() = 0;
32};
33
34extern gui::IGUIEnvironment *guienv;
35extern gui::IGUIStaticText *guiroot;
36
37// Handler for the modal menus
38
40{
41public:
42 virtual void createdMenu(gui::IGUIElement *menu)
43 {
44 for (gui::IGUIElement *e : m_stack) {
45 if (e == menu)
46 return;
47 }
48
49 if(!m_stack.empty())
50 m_stack.back()->setVisible(false);
51
52 m_stack.push_back(menu);
53 guienv->setFocus(m_stack.back());
54 }
55
56 virtual void deletingMenu(gui::IGUIElement *menu)
57 {
58 // Remove all entries if there are duplicates
59 m_stack.remove(menu);
60
61 if(!m_stack.empty()) {
62 m_stack.back()->setVisible(true);
63 guienv->setFocus(m_stack.back());
64 }
65 }
66
67 // Returns true to prevent further processing
68 virtual bool preprocessEvent(const SEvent& event)
69 {
70 if (m_stack.empty())
71 return false;
72 GUIModalMenu *mm = dynamic_cast<GUIModalMenu*>(m_stack.back());
73 return mm && mm->preprocessEvent(event);
74 }
75
76 size_t menuCount() const
77 {
78 return m_stack.size();
79 }
80
82 {
83 m_stack.front()->setVisible(false);
84 deletingMenu(m_stack.front());
85 }
86
88 {
89 for (gui::IGUIElement *i : m_stack) {
90 GUIModalMenu *mm = dynamic_cast<GUIModalMenu*>(i);
91 if (mm && mm->pausesGame())
92 return true;
93 }
94 return false;
95 }
96
97private:
98 std::list<gui::IGUIElement*> m_stack;
99};
100
102
103static inline bool isMenuActive()
104{
105 return g_menumgr.menuCount() != 0;
106}
107
109{
110public:
111 MainGameCallback() = default;
112 virtual ~MainGameCallback() = default;
113
114 void exitToOS() override
115 {
116 shutdown_requested = true;
117 }
118
119 void openSettings() override
120 {
121 settings_requested = true;
122 }
123
124 void disconnect() override
125 {
127 }
128
129 void changePassword() override
130 {
132 }
133
134 void changeVolume() override
135 {
137 }
138
139 void keyConfig() override
140 {
141 keyconfig_requested = true;
142 }
143
144 void signalKeyConfigChange() override
145 {
146 keyconfig_changed = true;
147 }
148
149 void touchscreenLayout() override
150 {
152 }
153
154 void showOpenURLDialog(const std::string &url) override
155 {
157 }
158
160 bool settings_requested = false;
165 bool shutdown_requested = false;
166 bool keyconfig_changed = false;
167 std::string show_open_url_dialog = "";
168};
169
Definition modalMenu.h:38
virtual bool preprocessEvent(const SEvent &event)
Definition modalMenu.cpp:243
virtual bool pausesGame()
Definition modalMenu.h:53
Definition mainmenumanager.h:21
virtual void exitToOS()=0
virtual void touchscreenLayout()=0
virtual void changePassword()=0
virtual void showOpenURLDialog(const std::string &url)=0
virtual void signalKeyConfigChange()=0
virtual void disconnect()=0
virtual void changeVolume()=0
virtual void openSettings()=0
virtual void keyConfig()=0
Definition modalMenu.h:27
Definition mainmenumanager.h:109
bool keyconfig_changed
Definition mainmenumanager.h:166
bool touchscreenlayout_requested
Definition mainmenumanager.h:164
bool keyconfig_requested
Definition mainmenumanager.h:163
MainGameCallback()=default
void openSettings() override
Definition mainmenumanager.h:119
bool shutdown_requested
Definition mainmenumanager.h:165
void touchscreenLayout() override
Definition mainmenumanager.h:149
std::string show_open_url_dialog
Definition mainmenumanager.h:167
bool disconnect_requested
Definition mainmenumanager.h:159
void changeVolume() override
Definition mainmenumanager.h:134
void showOpenURLDialog(const std::string &url) override
Definition mainmenumanager.h:154
virtual ~MainGameCallback()=default
void exitToOS() override
Definition mainmenumanager.h:114
void keyConfig() override
Definition mainmenumanager.h:139
bool changevolume_requested
Definition mainmenumanager.h:162
void disconnect() override
Definition mainmenumanager.h:124
bool settings_requested
Definition mainmenumanager.h:160
bool changepassword_requested
Definition mainmenumanager.h:161
void changePassword() override
Definition mainmenumanager.h:129
void signalKeyConfigChange() override
Definition mainmenumanager.h:144
Definition mainmenumanager.h:40
virtual bool preprocessEvent(const SEvent &event)
Definition mainmenumanager.h:68
void deleteFront()
Definition mainmenumanager.h:81
bool pausesGame()
Definition mainmenumanager.h:87
size_t menuCount() const
Definition mainmenumanager.h:76
virtual void createdMenu(gui::IGUIElement *menu)
Definition mainmenumanager.h:42
std::list< gui::IGUIElement * > m_stack
Definition mainmenumanager.h:98
virtual void deletingMenu(gui::IGUIElement *menu)
Definition mainmenumanager.h:56
MainMenuManager g_menumgr
Definition clientlauncher.cpp:36
gui::IGUIEnvironment * guienv
Definition clientlauncher.cpp:34
static bool isMenuActive()
Definition mainmenumanager.h:103
MainGameCallback * g_gamecallback
Definition clientlauncher.cpp:39
gui::IGUIStaticText * guiroot
Definition clientlauncher.cpp:35
Definition fontengine.h:17