X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;ds=sidebyside;f=src%2FguiFormSpecMenu.h;h=15bc628d17296f869b40145111cf9b7f30e03346;hb=5884236046c4405eec7cfc12cdde0be9f48058b6;hp=1946f88ebc3ba0c635e8c3261c977bd1b4a50326;hpb=8966c16ad298f94be1f4542afa6b081a1d286eda;p=minetest.git diff --git a/src/guiFormSpecMenu.h b/src/guiFormSpecMenu.h index 1946f88eb..15bc628d1 100644 --- a/src/guiFormSpecMenu.h +++ b/src/guiFormSpecMenu.h @@ -28,6 +28,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "inventorymanager.h" #include "modalMenu.h" #include "guiTable.h" +#include "clientserver.h" class IGameDef; class InventoryManager; @@ -39,15 +40,26 @@ typedef enum { f_TabHeader, f_CheckBox, f_DropDown, + f_ScrollBar, f_Unknown } FormspecFieldType; +typedef enum { + quit_mode_no, + quit_mode_accept, + quit_mode_cancel +} FormspecQuitMode; + struct TextDest { virtual ~TextDest() {}; // This is deprecated I guess? -celeron55 virtual void gotText(std::wstring text){} virtual void gotText(std::map fields) = 0; + virtual void setFormName(std::string formname) + { m_formname = formname;}; + + std::string m_formname; }; class IFormSource @@ -133,13 +145,14 @@ class GUIFormSpecMenu : public GUIModalMenu v2s32 geom; bool scale; }; - + struct FieldSpec { FieldSpec() { } - FieldSpec(const std::wstring name, const std::wstring label, const std::wstring fdeflt, int id): + FieldSpec(const std::wstring &name, const std::wstring &label, + const std::wstring &fdeflt, int id) : fname(name), flabel(label), fdefault(fdeflt), @@ -148,7 +161,6 @@ class GUIFormSpecMenu : public GUIModalMenu send = false; ftype = f_Unknown; is_exit = false; - tooltip=""; } std::wstring fname; std::wstring flabel; @@ -158,7 +170,6 @@ class GUIFormSpecMenu : public GUIModalMenu FormspecFieldType ftype; bool is_exit; core::rect rect; - std::string tooltip; }; struct BoxDrawSpec { @@ -173,13 +184,32 @@ class GUIFormSpecMenu : public GUIModalMenu irr::video::SColor color; }; + struct TooltipSpec { + TooltipSpec() + { + } + TooltipSpec(std::string a_tooltip, irr::video::SColor a_bgcolor, + irr::video::SColor a_color): + tooltip(a_tooltip), + bgcolor(a_bgcolor), + color(a_color) + { + } + std::string tooltip; + irr::video::SColor bgcolor; + irr::video::SColor color; + }; + public: GUIFormSpecMenu(irr::IrrlichtDevice* dev, gui::IGUIElement* parent, s32 id, IMenuManager *menumgr, InventoryManager *invmgr, IGameDef *gamedef, - ISimpleTextureSource *tsrc + ISimpleTextureSource *tsrc, + IFormSource* fs_src, + TextDest* txt_dst, + GUIFormSpecMenu** ext_ptr ); ~GUIFormSpecMenu(); @@ -191,16 +221,22 @@ class GUIFormSpecMenu : public GUIModalMenu m_current_inventory_location = current_inventory_location; regenerateGui(m_screensize_old); } - + // form_src is deleted by this GUIFormSpecMenu void setFormSource(IFormSource *form_src) { + if (m_form_src != NULL) { + delete m_form_src; + } m_form_src = form_src; } // text_dst is deleted by this GUIFormSpecMenu void setTextDest(TextDest *text_dst) { + if (m_text_dst != NULL) { + delete m_text_dst; + } m_text_dst = text_dst; } @@ -220,7 +256,7 @@ class GUIFormSpecMenu : public GUIModalMenu Remove and re-add (or reposition) stuff */ void regenerateGui(v2u32 screensize); - + ItemSpec getItemAtPos(v2s32 p) const; void drawList(const ListDrawSpec &s, int phase); void drawSelectedItem(); @@ -228,15 +264,21 @@ class GUIFormSpecMenu : public GUIModalMenu void updateSelectedItem(); ItemStack verifySelectedItem(); - void acceptInput(bool quit); + void acceptInput(FormspecQuitMode quitmode); bool preprocessEvent(const SEvent& event); bool OnEvent(const SEvent& event); + bool doPause; + bool pausesGame() { return doPause; } GUITable* getTable(std::wstring tablename); static bool parseColor(const std::string &value, video::SColor &color, bool quiet); +#ifdef __ANDROID__ + bool getAndroidUIInput(); +#endif + protected: v2s32 getBasePos() const { @@ -247,7 +289,7 @@ class GUIFormSpecMenu : public GUIModalMenu v2s32 spacing; v2s32 imgsize; v2s32 offset; - + irr::IrrlichtDevice* m_device; InventoryManager *m_invmgr; IGameDef *m_gamedef; @@ -255,8 +297,6 @@ class GUIFormSpecMenu : public GUIModalMenu std::string m_formspec_string; InventoryLocation m_current_inventory_location; - IFormSource *m_form_src; - TextDest *m_text_dst; std::vector m_inventorylists; std::vector m_backgrounds; @@ -266,11 +306,13 @@ class GUIFormSpecMenu : public GUIModalMenu std::vector m_fields; std::vector > m_tables; std::vector > m_checkboxes; + std::map m_tooltips; + std::vector > m_scrollbars; ItemSpec *m_selected_item; u32 m_selected_amount; bool m_selected_dragging; - + // WARNING: BLACK MAGIC // Used to guess and keep up with some special things the server can do. // If name is "", no guess exists. @@ -280,6 +322,11 @@ class GUIFormSpecMenu : public GUIModalMenu v2s32 m_pointer; gui::IGUIStaticText *m_tooltip_element; + u32 m_tooltip_show_delay; + s32 m_hoovered_time; + s32 m_old_tooltip_id; + std::string m_old_tooltip; + bool m_allowclose; bool m_lock; v2u32 m_lockscreensize; @@ -291,10 +338,18 @@ class GUIFormSpecMenu : public GUIModalMenu video::SColor m_slotbg_n; video::SColor m_slotbg_h; video::SColor m_slotbordercolor; + video::SColor m_default_tooltip_bgcolor; + video::SColor m_default_tooltip_color; + private: + IFormSource *m_form_src; + TextDest *m_text_dst; + GUIFormSpecMenu **m_ext_ptr; + gui::IGUIFont *m_font; + unsigned int m_formspec_version; + typedef struct { v2s32 size; - s32 helptext_h; core::rect rect; v2s32 basepos; int bp_set; @@ -332,7 +387,8 @@ class GUIFormSpecMenu : public GUIModalMenu void parsePwdField(parserData* data,std::string element); void parseField(parserData* data,std::string element,std::string type); void parseSimpleField(parserData* data,std::vector &parts); - void parseTextArea(parserData* data,std::vector& parts,std::string type); + void parseTextArea(parserData* data,std::vector& parts, + std::string type); void parseLabel(parserData* data,std::string element); void parseVertLabel(parserData* data,std::string element); void parseImageButton(parserData* data,std::string element,std::string type); @@ -341,24 +397,48 @@ class GUIFormSpecMenu : public GUIModalMenu void parseBox(parserData* data,std::string element); void parseBackgroundColor(parserData* data,std::string element); void parseListColors(parserData* data,std::string element); + void parseTooltip(parserData* data,std::string element); + bool parseVersionDirect(std::string data); + void parseScrollBar(parserData* data, std::string element); + + /** + * check if event is part of a double click + * @param event event to evaluate + * @return true/false if a doubleclick was detected + */ + bool DoubleClickDetection(const SEvent event); + + struct clickpos + { + v2s32 pos; + s32 time; + }; + clickpos m_doubleclickdetect[2]; + + int m_btn_height; + + std::wstring getLabelByID(s32 id); + std::wstring getNameByID(s32 id); +#ifdef __ANDROID__ + v2s32 m_down_pos; + std::wstring m_JavaDialogFieldName; +#endif + }; class FormspecFormSource: public IFormSource { public: - FormspecFormSource(std::string formspec,FormspecFormSource** game_formspec) + FormspecFormSource(std::string formspec) { m_formspec = formspec; - m_game_formspec = game_formspec; } ~FormspecFormSource() - { - *m_game_formspec = 0; - } + {} void setForm(std::string formspec) { - m_formspec = formspec; + m_formspec = FORMSPEC_VERSION_STRING + formspec; } std::string getForm() @@ -367,7 +447,6 @@ class FormspecFormSource: public IFormSource } std::string m_formspec; - FormspecFormSource** m_game_formspec; }; #endif