X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2FguiFormSpecMenu.h;h=2ab7db4f104334a3a464fbd30eaa8c4f57a58f28;hb=f2aa2c6a986dec47856c49ae5f54fbf3c688e027;hp=276807438657be6a10c47948d43737038401fe24;hpb=d5c3db9c4179e27a80c32ee95d6573ad0ec7137e;p=oweals%2Fminetest.git diff --git a/src/guiFormSpecMenu.h b/src/guiFormSpecMenu.h index 276807438..2ab7db4f1 100644 --- a/src/guiFormSpecMenu.h +++ b/src/guiFormSpecMenu.h @@ -22,16 +22,17 @@ with this program; if not, write to the Free Software Foundation, Inc., #define GUIINVENTORYMENU_HEADER #include +#include #include "irrlichttypes_extrabloated.h" -#include "inventory.h" #include "inventorymanager.h" #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; class ISimpleTextureSource; class Client; @@ -141,9 +142,10 @@ class GUIFormSpecMenu : public GUIModalMenu struct ImageDrawSpec { ImageDrawSpec(): - parent_button(NULL) - { - } + parent_button(NULL), + clip(false) + {} + ImageDrawSpec(const std::string &a_name, const std::string &a_item_name, gui::IGUIButton *a_parent_button, @@ -153,9 +155,10 @@ class GUIFormSpecMenu : public GUIModalMenu parent_button(a_parent_button), pos(a_pos), geom(a_geom), - scale(true) - { - } + scale(true), + clip(false) + {} + ImageDrawSpec(const std::string &a_name, const std::string &a_item_name, const v2s32 &a_pos, const v2s32 &a_geom): @@ -164,42 +167,38 @@ class GUIFormSpecMenu : public GUIModalMenu parent_button(NULL), pos(a_pos), geom(a_geom), - scale(true) - { - } + scale(true), + clip(false) + {} + ImageDrawSpec(const std::string &a_name, - const v2s32 &a_pos, const v2s32 &a_geom): + 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) - { - } + scale(true), + clip(clip) + {} + ImageDrawSpec(const std::string &a_name, const v2s32 &a_pos): name(a_name), parent_button(NULL), pos(a_pos), - scale(false) - { - } + scale(false), + clip(false) + {} + std::string name; std::string item_name; gui::IGUIButton *parent_button; v2s32 pos; v2s32 geom; bool scale; + bool clip; }; - /* The responsibility of unescaping the strings has been shifted - * from the formspec parsing methods to the draw methods. - * There still are a few exceptions: - * - Vertical label, because it modifies the string by inserting - * '\n' between each character, - * - Tab header, because it gives the string immediately to - * Irrlicht and we can't unescape it later. - */ struct FieldSpec { FieldSpec() @@ -208,13 +207,14 @@ class GUIFormSpecMenu : public GUIModalMenu FieldSpec(const std::string &name, const std::wstring &label, const std::wstring &default_text, int id) : fname(name), - fid(id) + flabel(label), + fid(id), + send(false), + ftype(f_Unknown), + is_exit(false) { - flabel = unescape_string(unescape_enriched(label)); - fdefault = unescape_string(unescape_enriched(default_text)); - send = false; - ftype = f_Unknown; - is_exit = false; + //flabel = unescape_enriched(label); + fdefault = unescape_enriched(default_text); } std::string fname; std::wstring flabel; @@ -247,7 +247,8 @@ class GUIFormSpecMenu : public GUIModalMenu bgcolor(a_bgcolor), color(a_color) { - tooltip = unescape_string(unescape_enriched(utf8_to_wide(a_tooltip))); + //tooltip = unescape_enriched(utf8_to_wide(a_tooltip)); + tooltip = utf8_to_wide(a_tooltip); } std::wstring tooltip; irr::video::SColor bgcolor; @@ -264,7 +265,8 @@ class GUIFormSpecMenu : public GUIModalMenu rect(a_rect), parent_button(NULL) { - text = unescape_string(unescape_enriched(a_text)); + //text = unescape_enriched(a_text); + text = a_text; } StaticTextSpec(const std::wstring &a_text, const core::rect &a_rect, @@ -272,7 +274,8 @@ class GUIFormSpecMenu : public GUIModalMenu rect(a_rect), parent_button(a_parent_button) { - text = unescape_string(unescape_enriched(a_text)); + //text = unescape_enriched(a_text); + text = a_text; } std::wstring text; core::rect rect; @@ -281,14 +284,13 @@ class GUIFormSpecMenu : public GUIModalMenu public: GUIFormSpecMenu(irr::IrrlichtDevice* dev, + JoystickController *joystick, gui::IGUIElement* parent, s32 id, IMenuManager *menumgr, - InventoryManager *invmgr, - IGameDef *gamedef, + Client *client, ISimpleTextureSource *tsrc, IFormSource* fs_src, TextDest* txt_dst, - Client* client, bool remap_dbl_click = true); ~GUIFormSpecMenu(); @@ -373,10 +375,11 @@ protected: v2s32 spacing; v2s32 imgsize; v2s32 offset; + v2s32 pos_offset; + std::stack container_stack; irr::IrrlichtDevice* m_device; InventoryManager *m_invmgr; - IGameDef *m_gamedef; ISimpleTextureSource *m_tsrc; Client *m_client; @@ -390,6 +393,7 @@ protected: 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; @@ -399,8 +403,6 @@ protected: std::vector > > m_dropdowns; ItemSpec *m_selected_item; - f32 m_timer1; - f32 m_timer2; u32 m_selected_amount; bool m_selected_dragging; @@ -427,7 +429,6 @@ protected: bool m_bgfullscreen; bool m_slotborder; - bool m_clipbackground; video::SColor m_bgcolor; video::SColor m_slotbg_n; video::SColor m_slotbg_h; @@ -436,10 +437,11 @@ protected: 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; @@ -452,7 +454,7 @@ private: 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 { @@ -463,14 +465,17 @@ private: } 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); @@ -479,6 +484,7 @@ private: 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); @@ -497,6 +503,8 @@ private: 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 @@ -555,4 +563,3 @@ public: }; #endif -