X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2FguiFormSpecMenu.h;h=95df11e6a1bfa17b93a28e914016168a2f35e2bd;hb=bb9fe6eb2b32548e66d62b64e949b058ec7856fc;hp=9955048a351c4958f58048a810e852de6ee06f86;hpb=bd439338282fccb2c50fd1395e55843259914e25;p=dragonfireclient.git diff --git a/src/guiFormSpecMenu.h b/src/guiFormSpecMenu.h index 9955048a3..95df11e6a 100644 --- a/src/guiFormSpecMenu.h +++ b/src/guiFormSpecMenu.h @@ -22,6 +22,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #define GUIINVENTORYMENU_HEADER #include +#include #include "irrlichttypes_extrabloated.h" #include "inventory.h" @@ -29,6 +30,9 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "modalMenu.h" #include "guiTable.h" #include "network/networkprotocol.h" +#include "client/joystick_controller.h" +#include "util/string.h" +#include "util/enriched_string.h" class IGameDef; class InventoryManager; @@ -139,39 +143,62 @@ class GUIFormSpecMenu : public GUIModalMenu struct ImageDrawSpec { - ImageDrawSpec() - { - } + ImageDrawSpec(): + parent_button(NULL), + clip(false) + {} + ImageDrawSpec(const std::string &a_name, const std::string &a_item_name, + gui::IGUIButton *a_parent_button, const v2s32 &a_pos, const v2s32 &a_geom): name(a_name), - item_name (a_item_name), + item_name(a_item_name), + parent_button(a_parent_button), pos(a_pos), - geom(a_geom) - { - scale = true; - } + geom(a_geom), + scale(true), + clip(false) + {} + ImageDrawSpec(const std::string &a_name, + const std::string &a_item_name, const v2s32 &a_pos, const v2s32 &a_geom): name(a_name), + item_name(a_item_name), + parent_button(NULL), pos(a_pos), - geom(a_geom) - { - scale = true; - } + geom(a_geom), + scale(true), + clip(false) + {} + + ImageDrawSpec(const std::string &a_name, + const v2s32 &a_pos, const v2s32 &a_geom, bool clip=false): + name(a_name), + parent_button(NULL), + pos(a_pos), + geom(a_geom), + scale(true), + clip(clip) + {} + ImageDrawSpec(const std::string &a_name, const v2s32 &a_pos): name(a_name), - pos(a_pos) - { - scale = false; - } + parent_button(NULL), + pos(a_pos), + scale(false), + clip(false) + {} + std::string name; std::string item_name; + gui::IGUIButton *parent_button; v2s32 pos; v2s32 geom; bool scale; + bool clip; }; struct FieldSpec @@ -180,15 +207,16 @@ class GUIFormSpecMenu : public GUIModalMenu { } FieldSpec(const std::string &name, const std::wstring &label, - const std::wstring &fdeflt, int id) : + const std::wstring &default_text, int id) : fname(name), flabel(label), - fdefault(fdeflt), - fid(id) + fid(id), + send(false), + ftype(f_Unknown), + is_exit(false) { - send = false; - ftype = f_Unknown; - is_exit = false; + //flabel = unescape_enriched(label); + fdefault = unescape_enriched(default_text); } std::string fname; std::wstring flabel; @@ -218,32 +246,47 @@ class GUIFormSpecMenu : public GUIModalMenu } TooltipSpec(std::string a_tooltip, irr::video::SColor a_bgcolor, irr::video::SColor a_color): - tooltip(a_tooltip), bgcolor(a_bgcolor), color(a_color) { + //tooltip = unescape_enriched(utf8_to_wide(a_tooltip)); + tooltip = utf8_to_wide(a_tooltip); } - std::string tooltip; + std::wstring tooltip; irr::video::SColor bgcolor; irr::video::SColor color; }; struct StaticTextSpec { - StaticTextSpec() + StaticTextSpec(): + parent_button(NULL) { } StaticTextSpec(const std::wstring &a_text, const core::rect &a_rect): - text(a_text), - rect(a_rect) + rect(a_rect), + parent_button(NULL) + { + //text = unescape_enriched(a_text); + text = a_text; + } + StaticTextSpec(const std::wstring &a_text, + const core::rect &a_rect, + gui::IGUIButton *a_parent_button): + rect(a_rect), + parent_button(a_parent_button) { + //text = unescape_enriched(a_text); + text = a_text; } std::wstring text; core::rect rect; + gui::IGUIButton *parent_button; }; public: GUIFormSpecMenu(irr::IrrlichtDevice* dev, + JoystickController *joystick, gui::IGUIElement* parent, s32 id, IMenuManager *menumgr, InventoryManager *invmgr, @@ -320,6 +363,7 @@ class GUIFormSpecMenu : public GUIModalMenu bool pausesGame() { return doPause; } GUITable* getTable(const std::string &tablename); + std::vector* getDropDownValues(const std::string &name); #ifdef __ANDROID__ bool getAndroidUIInput(); @@ -335,6 +379,8 @@ class GUIFormSpecMenu : public GUIModalMenu v2s32 spacing; v2s32 imgsize; v2s32 offset; + v2s32 pos_offset; + std::stack container_stack; irr::IrrlichtDevice* m_device; InventoryManager *m_invmgr; @@ -352,16 +398,16 @@ class GUIFormSpecMenu : public GUIModalMenu std::vector m_images; std::vector m_itemimages; std::vector m_boxes; + UNORDERED_MAP field_close_on_enter; std::vector m_fields; std::vector m_static_texts; std::vector > m_tables; std::vector > m_checkboxes; std::map m_tooltips; std::vector > m_scrollbars; + std::vector > > m_dropdowns; ItemSpec *m_selected_item; - f32 m_timer1; - f32 m_timer2; u32 m_selected_amount; bool m_selected_dragging; @@ -378,7 +424,7 @@ class GUIFormSpecMenu : public GUIModalMenu u32 m_tooltip_show_delay; s32 m_hovered_time; s32 m_old_tooltip_id; - std::string m_old_tooltip; + std::wstring m_old_tooltip; bool m_rmouse_auto_place; @@ -388,7 +434,6 @@ class GUIFormSpecMenu : public GUIModalMenu bool m_bgfullscreen; bool m_slotborder; - bool m_clipbackground; video::SColor m_bgcolor; video::SColor m_slotbg_n; video::SColor m_slotbg_h; @@ -397,10 +442,11 @@ class GUIFormSpecMenu : public GUIModalMenu video::SColor m_default_tooltip_color; private: - IFormSource *m_form_src; - TextDest *m_text_dst; - unsigned int m_formspec_version; - std::string m_focused_element; + IFormSource *m_form_src; + TextDest *m_text_dst; + unsigned int m_formspec_version; + std::string m_focused_element; + JoystickController *m_joystick; typedef struct { bool explicit_size; @@ -413,7 +459,7 @@ class GUIFormSpecMenu : public GUIModalMenu GUITable::TableOptions table_options; GUITable::TableColumns table_columns; // used to restore table selection/scroll/treeview state - std::map table_dyndata; + UNORDERED_MAP table_dyndata; } parserData; typedef struct { @@ -424,14 +470,17 @@ class GUIFormSpecMenu : public GUIModalMenu } fs_key_pendig; fs_key_pendig current_keys_pending; + std::string current_field_enter_pending; - void parseElement(parserData* data,std::string element); + void parseElement(parserData* data, std::string element); - void parseSize(parserData* data,std::string element); - void parseList(parserData* data,std::string element); - void parseListRing(parserData* data,std::string element); - void parseCheckbox(parserData* data,std::string element); - void parseImage(parserData* data,std::string element); + void parseSize(parserData* data, std::string element); + void parseContainer(parserData* data, std::string element); + void parseContainerEnd(parserData* data); + void parseList(parserData* data, std::string element); + void parseListRing(parserData* data, std::string element); + void parseCheckbox(parserData* data, std::string element); + void parseImage(parserData* data, std::string element); void parseItemImage(parserData* data,std::string element); void parseButton(parserData* data,std::string element,std::string typ); void parseBackground(parserData* data,std::string element); @@ -440,6 +489,7 @@ class GUIFormSpecMenu : public GUIModalMenu void parseTable(parserData* data,std::string element); void parseTextList(parserData* data,std::string element); void parseDropDown(parserData* data,std::string element); + void parseFieldCloseOnEnter(parserData *data, const std::string &element); void parsePwdField(parserData* data,std::string element); void parseField(parserData* data,std::string element,std::string type); void parseSimpleField(parserData* data,std::vector &parts); @@ -458,6 +508,8 @@ class GUIFormSpecMenu : public GUIModalMenu bool parseSizeDirect(parserData* data, std::string element); void parseScrollBar(parserData* data, std::string element); + void tryClose(); + /** * check if event is part of a double click * @param event event to evaluate @@ -516,4 +568,3 @@ class FormspecFormSource: public IFormSource }; #endif -