summaryrefslogtreecommitdiff
path: root/src/gui/modalMenu.h
diff options
context:
space:
mode:
authorstujones11 <stujones111@gmail.com>2018-06-24 20:50:57 +0100
committersfan5 <sfan5@live.de>2018-10-29 15:37:44 +0100
commit323c8600450a5ae3893de9ba1d04095589c5b06c (patch)
treef38afffdc33c85c5964c1eaa650675508a9248b4 /src/gui/modalMenu.h
parent0d54399be2af37e334f3506bd09da85ad932b92f (diff)
downloadminetest-323c8600450a5ae3893de9ba1d04095589c5b06c.tar.gz
minetest-323c8600450a5ae3893de9ba1d04095589c5b06c.tar.bz2
minetest-323c8600450a5ae3893de9ba1d04095589c5b06c.zip
Move touchscreen input handling to base GUIModalMenu class
Diffstat (limited to 'src/gui/modalMenu.h')
-rw-r--r--src/gui/modalMenu.h113
1 files changed, 28 insertions, 85 deletions
diff --git a/src/gui/modalMenu.h b/src/gui/modalMenu.h
index f41591c3f..8d32ad159 100644
--- a/src/gui/modalMenu.h
+++ b/src/gui/modalMenu.h
@@ -20,9 +20,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#pragma once
#include "irrlichttypes_extrabloated.h"
-#ifdef HAVE_TOUCHSCREENGUI
-#include "touchscreengui.h"
-#endif
+#include "util/string.h"
class GUIModalMenu;
@@ -34,101 +32,46 @@ public:
virtual void deletingMenu(gui::IGUIElement *menu) = 0;
};
-/*
- Remember to drop() the menu after creating, so that it can
- remove itself when it wants to.
-*/
+// Remember to drop() the menu after creating, so that it can
+// remove itself when it wants to.
class GUIModalMenu : public gui::IGUIElement
{
public:
GUIModalMenu(gui::IGUIEnvironment* env, gui::IGUIElement* parent, s32 id,
- IMenuManager *menumgr):
- IGUIElement(gui::EGUIET_ELEMENT, env, parent, id,
- core::rect<s32>(0,0,100,100))
- {
- m_menumgr = menumgr;
-
- setVisible(true);
- Environment->setFocus(this);
- m_menumgr->createdMenu(this);
- }
-
- virtual ~GUIModalMenu()
- {
- m_menumgr->deletingMenu(this);
- }
-
- void allowFocusRemoval(bool allow)
- {
- m_allow_focus_removal = allow;
- }
-
- bool canTakeFocus(gui::IGUIElement *e)
- {
- return (e && (e == this || isMyChild(e))) || m_allow_focus_removal;
- }
-
- void draw()
- {
- if(!IsVisible)
- return;
-
- video::IVideoDriver* driver = Environment->getVideoDriver();
- v2u32 screensize = driver->getScreenSize();
- if(screensize != m_screensize_old /*|| m_force_regenerate_gui*/)
- {
- m_screensize_old = screensize;
- regenerateGui(screensize);
- //m_force_regenerate_gui = false;
- }
-
- drawMenu();
- }
+ IMenuManager *menumgr);
+ virtual ~GUIModalMenu();
- /*
- This should be called when the menu wants to quit.
-
- WARNING: THIS DEALLOCATES THE MENU FROM MEMORY. Return
- immediately if you call this from the menu itself.
-
- (More precisely, this decrements the reference count.)
- */
- void quitMenu()
- {
- allowFocusRemoval(true);
- // This removes Environment's grab on us
- Environment->removeFocus(this);
- m_menumgr->deletingMenu(this);
- this->remove();
-#ifdef HAVE_TOUCHSCREENGUI
- if (g_touchscreengui)
- g_touchscreengui->show();
-#endif
- }
-
- void removeChildren()
- {
- const core::list<gui::IGUIElement*> &children = getChildren();
- core::list<gui::IGUIElement*> children_copy;
- for (gui::IGUIElement *i : children) {
- children_copy.push_back(i);
- }
-
- for (gui::IGUIElement *i : children_copy) {
- i->remove();
- }
- }
+ void allowFocusRemoval(bool allow);
+ bool canTakeFocus(gui::IGUIElement *e);
+ void draw();
+ void quitMenu();
+ void removeChildren();
virtual void regenerateGui(v2u32 screensize) = 0;
virtual void drawMenu() = 0;
- virtual bool preprocessEvent(const SEvent& event) { return false; };
+ virtual bool preprocessEvent(const SEvent& event);
virtual bool OnEvent(const SEvent& event) { return false; };
- virtual bool pausesGame(){ return false; } // Used for pause menu
+ virtual bool pausesGame() { return false; } // Used for pause menu
+#ifdef __ANDROID__
+ virtual bool getAndroidUIInput() { return false; }
+ bool hasAndroidUIInput();
+#endif
protected:
- //bool m_force_regenerate_gui;
+ virtual std::wstring getLabelByID(s32 id) = 0;
+ virtual std::string getNameByID(s32 id) = 0;
+
+ v2s32 m_pointer;
+ v2s32 m_old_pointer; // Mouse position after previous mouse event
v2u32 m_screensize_old;
+#ifdef __ANDROID__
+ v2s32 m_down_pos;
+ std::string m_jni_field_name;
+#endif
+#ifdef HAVE_TOUCHSCREENGUI
+ bool m_touchscreen_visible = true;
+#endif
private:
IMenuManager *m_menumgr;
// This might be necessary to expose to the implementation if it