#define GUIINVENTORYMENU_HEADER
#include <utility>
+#include <stack>
#include "irrlichttypes_extrabloated.h"
#include "inventory.h"
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,
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):
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;
};
struct FieldSpec
flabel(label),
fid(id),
send(false),
- close_on_enter(false),
ftype(f_Unknown),
is_exit(false)
{
std::wstring fdefault;
int fid;
bool send;
- bool close_on_enter; // used by text fields
FormspecFieldType ftype;
bool is_exit;
core::rect<s32> rect;
v2s32 spacing;
v2s32 imgsize;
v2s32 offset;
+ v2s32 pos_offset;
+ std::stack<v2s32> container_stack;
irr::IrrlichtDevice* m_device;
InventoryManager *m_invmgr;
std::vector<ImageDrawSpec> m_images;
std::vector<ImageDrawSpec> m_itemimages;
std::vector<BoxDrawSpec> m_boxes;
+ UNORDERED_MAP<std::string, bool> field_close_on_enter;
std::vector<FieldSpec> m_fields;
std::vector<StaticTextSpec> m_static_texts;
std::vector<std::pair<FieldSpec,GUITable*> > m_tables;
std::vector<std::pair<FieldSpec, std::vector<std::string> > > m_dropdowns;
ItemSpec *m_selected_item;
- f32 m_timer1;
- f32 m_timer2;
u32 m_selected_amount;
bool m_selected_dragging;
bool m_bgfullscreen;
bool m_slotborder;
- bool m_clipbackground;
video::SColor m_bgcolor;
video::SColor m_slotbg_n;
video::SColor m_slotbg_h;
GUITable::TableOptions table_options;
GUITable::TableColumns table_columns;
// used to restore table selection/scroll/treeview state
- std::map<std::string, GUITable::DynamicData> table_dyndata;
+ UNORDERED_MAP<std::string, GUITable::DynamicData> table_dyndata;
} parserData;
typedef struct {
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);
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<std::string> &parts);