Luanti 5.16.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 "touchcontrols.h" // g_touchcontrols
12#include <cassert>
13#include <list>
14
15#include <IGUIEnvironment.h>
16
17namespace gui {
18 class IGUIStaticText;
19}
20
22{
23public:
24 virtual void exitToOS() = 0;
25 virtual void openSettings() = 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 touchscreenLayout() = 0;
31};
32
33extern gui::IGUIEnvironment *guienv;
34extern gui::IGUIStaticText *guiroot;
35
36// Handler for the modal menus
37
39{
40public:
41 virtual void createdMenu(gui::IGUIElement *menu)
42 {
43 for (gui::IGUIElement *e : m_stack) {
44 if (e == menu)
45 return;
46 }
47
48 if(!m_stack.empty())
49 m_stack.back()->setVisible(false);
50
51 m_stack.push_back(menu);
52 guienv->setFocus(m_stack.back());
53 }
54
58 virtual void deletingMenu(gui::IGUIElement *menu)
59 {
60 // Remove all entries if there are duplicates
61 m_stack.remove(menu);
62
63 // Reference count reduction (-1) due to focus loss
64 if (!m_stack.empty()) {
65 m_stack.back()->setVisible(true);
66 guienv->setFocus(m_stack.back());
67 } else {
68 guienv->removeFocus(menu);
71 }
72 }
73
74 // Returns true to prevent further processing
75 virtual bool preprocessEvent(const SEvent& event)
76 {
77 if (m_stack.empty())
78 return false;
79 GUIModalMenu *mm = dynamic_cast<GUIModalMenu*>(m_stack.back());
80 return mm && mm->preprocessEvent(event);
81 }
82
83 size_t menuCount() const
84 {
85 return m_stack.size();
86 }
87
89 {
90 if (m_stack.empty())
91 return nullptr;
92 return dynamic_cast<GUIModalMenu *>(m_stack.back());
93 }
94
96 {
97 assert(!m_stack.empty());
98 gui::IGUIElement *e = m_stack.front();
99 e->setVisible(false);
100 deletingMenu(e);
101 e->remove();
102 }
103
105 {
106 for (gui::IGUIElement *i : m_stack) {
107 GUIModalMenu *mm = dynamic_cast<GUIModalMenu*>(i);
108 if (mm && mm->pausesGame())
109 return true;
110 }
111 return false;
112 }
113
114private:
115 std::list<gui::IGUIElement*> m_stack;
116};
117
119
120static inline bool isMenuActive()
121{
122 return g_menumgr.menuCount() != 0;
123}
124
126{
127public:
128 MainGameCallback() = default;
129 virtual ~MainGameCallback() = default;
130
131 void exitToOS() override
132 {
133 shutdown_requested = true;
134 }
135
136 void openSettings() override
137 {
138 settings_requested = true;
139 }
140
141 void disconnect() override
142 {
144 }
145
146 void changePassword() override
147 {
149 }
150
151 void changeVolume() override
152 {
154 }
155
156 void touchscreenLayout() override
157 {
159 }
160
161 void showOpenURLDialog(const std::string &url) override
162 {
164 }
165
167 bool settings_requested = false;
171 bool shutdown_requested = false;
172 std::string show_open_url_dialog = "";
173};
174
Definition modalMenu.h:37
virtual bool preprocessEvent(const SEvent &event)
Definition modalMenu.cpp:237
virtual bool pausesGame()
Definition modalMenu.h:52
Definition mainmenumanager.h:22
virtual void exitToOS()=0
virtual void touchscreenLayout()=0
virtual void changePassword()=0
virtual void showOpenURLDialog(const std::string &url)=0
virtual void disconnect()=0
virtual void changeVolume()=0
virtual void openSettings()=0
Definition modalMenu.h:26
Definition mainmenumanager.h:126
bool touchscreenlayout_requested
Definition mainmenumanager.h:170
MainGameCallback()=default
void openSettings() override
Definition mainmenumanager.h:136
bool shutdown_requested
Definition mainmenumanager.h:171
void touchscreenLayout() override
Definition mainmenumanager.h:156
std::string show_open_url_dialog
Definition mainmenumanager.h:172
bool disconnect_requested
Definition mainmenumanager.h:166
void changeVolume() override
Definition mainmenumanager.h:151
void showOpenURLDialog(const std::string &url) override
Definition mainmenumanager.h:161
virtual ~MainGameCallback()=default
void exitToOS() override
Definition mainmenumanager.h:131
bool changevolume_requested
Definition mainmenumanager.h:169
void disconnect() override
Definition mainmenumanager.h:141
bool settings_requested
Definition mainmenumanager.h:167
bool changepassword_requested
Definition mainmenumanager.h:168
void changePassword() override
Definition mainmenumanager.h:146
Definition mainmenumanager.h:39
virtual bool preprocessEvent(const SEvent &event)
Definition mainmenumanager.h:75
void deleteFront()
Definition mainmenumanager.h:95
bool pausesGame()
Definition mainmenumanager.h:104
GUIModalMenu * tryGetTopMenu() const
Definition mainmenumanager.h:88
size_t menuCount() const
Definition mainmenumanager.h:83
virtual void createdMenu(gui::IGUIElement *menu)
Definition mainmenumanager.h:41
std::list< gui::IGUIElement * > m_stack
Definition mainmenumanager.h:115
virtual void deletingMenu(gui::IGUIElement *menu)
Note that it may be called multiple times on GUIModalMenu (or GUIFormSpecMenu): 1x Explicit close req...
Definition mainmenumanager.h:58
void show()
Definition touchcontrols.cpp:780
MainMenuManager g_menumgr
Definition clientlauncher.cpp:37
gui::IGUIEnvironment * guienv
Definition clientlauncher.cpp:35
static bool isMenuActive()
Definition mainmenumanager.h:120
MainGameCallback * g_gamecallback
Definition clientlauncher.cpp:40
gui::IGUIStaticText * guiroot
Definition clientlauncher.cpp:36
Definition fontengine.h:16
TouchControls * g_touchcontrols
Definition touchcontrols.cpp:29