Luanti 5.15.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 gui {
17 class IGUIStaticText;
18}
19
21{
22public:
23 virtual void exitToOS() = 0;
24 virtual void openSettings() = 0;
25 virtual void disconnect() = 0;
26 virtual void changePassword() = 0;
27 virtual void changeVolume() = 0;
28 virtual void showOpenURLDialog(const std::string &url) = 0;
29 virtual void touchscreenLayout() = 0;
30};
31
32extern gui::IGUIEnvironment *guienv;
33extern gui::IGUIStaticText *guiroot;
34
35// Handler for the modal menus
36
38{
39public:
40 virtual void createdMenu(gui::IGUIElement *menu)
41 {
42 for (gui::IGUIElement *e : m_stack) {
43 if (e == menu)
44 return;
45 }
46
47 if(!m_stack.empty())
48 m_stack.back()->setVisible(false);
49
50 m_stack.push_back(menu);
51 guienv->setFocus(m_stack.back());
52 }
53
54 virtual void deletingMenu(gui::IGUIElement *menu)
55 {
56 // Remove all entries if there are duplicates
57 m_stack.remove(menu);
58
59 if(!m_stack.empty()) {
60 m_stack.back()->setVisible(true);
61 guienv->setFocus(m_stack.back());
62 } else {
63 guienv->removeFocus(menu);
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 if (m_stack.empty())
84 return nullptr;
85 return dynamic_cast<GUIModalMenu *>(m_stack.back());
86 }
87
89 {
90 m_stack.front()->setVisible(false);
91 deletingMenu(m_stack.front());
92 }
93
95 {
96 for (gui::IGUIElement *i : m_stack) {
97 GUIModalMenu *mm = dynamic_cast<GUIModalMenu*>(i);
98 if (mm && mm->pausesGame())
99 return true;
100 }
101 return false;
102 }
103
104private:
105 std::list<gui::IGUIElement*> m_stack;
106};
107
109
110static inline bool isMenuActive()
111{
112 return g_menumgr.menuCount() != 0;
113}
114
116{
117public:
118 MainGameCallback() = default;
119 virtual ~MainGameCallback() = default;
120
121 void exitToOS() override
122 {
123 shutdown_requested = true;
124 }
125
126 void openSettings() override
127 {
128 settings_requested = true;
129 }
130
131 void disconnect() override
132 {
134 }
135
136 void changePassword() override
137 {
139 }
140
141 void changeVolume() override
142 {
144 }
145
146 void touchscreenLayout() override
147 {
149 }
150
151 void showOpenURLDialog(const std::string &url) override
152 {
154 }
155
157 bool settings_requested = false;
161 bool shutdown_requested = false;
162 std::string show_open_url_dialog = "";
163};
164
Definition modalMenu.h:37
virtual bool preprocessEvent(const SEvent &event)
Definition modalMenu.cpp:242
virtual bool pausesGame()
Definition modalMenu.h:52
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 disconnect()=0
virtual void changeVolume()=0
virtual void openSettings()=0
Definition modalMenu.h:26
Definition mainmenumanager.h:116
bool touchscreenlayout_requested
Definition mainmenumanager.h:160
MainGameCallback()=default
void openSettings() override
Definition mainmenumanager.h:126
bool shutdown_requested
Definition mainmenumanager.h:161
void touchscreenLayout() override
Definition mainmenumanager.h:146
std::string show_open_url_dialog
Definition mainmenumanager.h:162
bool disconnect_requested
Definition mainmenumanager.h:156
void changeVolume() override
Definition mainmenumanager.h:141
void showOpenURLDialog(const std::string &url) override
Definition mainmenumanager.h:151
virtual ~MainGameCallback()=default
void exitToOS() override
Definition mainmenumanager.h:121
bool changevolume_requested
Definition mainmenumanager.h:159
void disconnect() override
Definition mainmenumanager.h:131
bool settings_requested
Definition mainmenumanager.h:157
bool changepassword_requested
Definition mainmenumanager.h:158
void changePassword() override
Definition mainmenumanager.h:136
Definition mainmenumanager.h:38
virtual bool preprocessEvent(const SEvent &event)
Definition mainmenumanager.h:68
void deleteFront()
Definition mainmenumanager.h:88
bool pausesGame()
Definition mainmenumanager.h:94
GUIModalMenu * tryGetTopMenu() const
Definition mainmenumanager.h:81
size_t menuCount() const
Definition mainmenumanager.h:76
virtual void createdMenu(gui::IGUIElement *menu)
Definition mainmenumanager.h:40
std::list< gui::IGUIElement * > m_stack
Definition mainmenumanager.h:105
virtual void deletingMenu(gui::IGUIElement *menu)
Definition mainmenumanager.h:54
MainMenuManager g_menumgr
Definition clientlauncher.cpp:36
gui::IGUIEnvironment * guienv
Definition clientlauncher.cpp:34
static bool isMenuActive()
Definition mainmenumanager.h:110
MainGameCallback * g_gamecallback
Definition clientlauncher.cpp:39
gui::IGUIStaticText * guiroot
Definition clientlauncher.cpp:35
Definition fontengine.h:16