Minetest  5.4.0
guiFormSpecMenu.h
Go to the documentation of this file.
1 /*
2 Minetest
3 Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com>
4 
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU Lesser General Public License as published by
7 the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version.
9 
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU Lesser General Public License for more details.
14 
15 You should have received a copy of the GNU Lesser General Public License along
16 with this program; if not, write to the Free Software Foundation, Inc.,
17 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18 */
19 
20 #pragma once
21 
22 #include <utility>
23 #include <stack>
24 #include <unordered_set>
25 
27 #include "inventorymanager.h"
28 #include "modalMenu.h"
29 #include "guiInventoryList.h"
30 #include "guiScrollBar.h"
31 #include "guiTable.h"
34 #include "util/string.h"
35 #include "util/enriched_string.h"
36 #include "StyleSpec.h"
37 
38 class InventoryManager;
40 class Client;
41 class GUIScrollContainer;
42 class ISoundManager;
43 
55  f_Unknown
56 };
57 
62 };
63 
64 struct TextDest
65 {
66  virtual ~TextDest() = default;
67 
68  // This is deprecated I guess? -celeron55
69  virtual void gotText(const std::wstring &text) {}
70  virtual void gotText(const StringMap &fields) = 0;
71 
72  std::string m_formname;
73 };
74 
76 {
77 public:
78  virtual ~IFormSource() = default;
79  virtual const std::string &getForm() const = 0;
80  // Fill in variables in field text
81  virtual std::string resolveText(const std::string &str) { return str; }
82 };
83 
85 {
86  struct ListRingSpec
87  {
88  ListRingSpec() = default;
89 
90  ListRingSpec(const InventoryLocation &a_inventoryloc,
91  const std::string &a_listname):
92  inventoryloc(a_inventoryloc),
93  listname(a_listname)
94  {
95  }
96 
98  std::string listname;
99  };
100 
101  struct FieldSpec
102  {
103  FieldSpec() = default;
104 
105  FieldSpec(const std::string &name, const std::wstring &label,
106  const std::wstring &default_text, s32 id, int priority = 0,
107  gui::ECURSOR_ICON cursor_icon = ECI_NORMAL) :
108  fname(name),
109  flabel(label),
111  fid(id),
112  send(false),
113  ftype(f_Unknown),
114  is_exit(false),
116  fcursor_icon(cursor_icon)
117  {
118  }
119 
120  std::string fname;
121  std::wstring flabel;
122  std::wstring fdefault;
123  s32 fid;
124  bool send;
126  bool is_exit;
127  // Draw priority for formspec version < 3
128  int priority;
129  core::rect<s32> rect;
130  gui::ECURSOR_ICON fcursor_icon;
131  std::string sound;
132  };
133 
134  struct TooltipSpec
135  {
136  TooltipSpec() = default;
137  TooltipSpec(const std::wstring &a_tooltip, irr::video::SColor a_bgcolor,
138  irr::video::SColor a_color):
139  tooltip(translate_string(a_tooltip)),
140  bgcolor(a_bgcolor),
141  color(a_color)
142  {
143  }
144 
145  std::wstring tooltip;
146  irr::video::SColor bgcolor;
147  irr::video::SColor color;
148  };
149 
150 public:
152  gui::IGUIElement* parent, s32 id,
153  IMenuManager *menumgr,
154  Client *client,
155  ISimpleTextureSource *tsrc,
156  ISoundManager *sound_manager,
157  IFormSource* fs_src,
158  TextDest* txt_dst,
159  const std::string &formspecPrepend,
160  bool remap_dbl_click = true);
161 
163 
164  static void create(GUIFormSpecMenu *&cur_formspec, Client *client,
165  JoystickController *joystick, IFormSource *fs_src, TextDest *txt_dest,
166  const std::string &formspecPrepend, ISoundManager *sound_manager);
167 
168  void setFormSpec(const std::string &formspec_string,
169  const InventoryLocation &current_inventory_location)
170  {
171  m_formspec_string = formspec_string;
172  m_current_inventory_location = current_inventory_location;
173  m_is_form_regenerated = false;
175  }
176 
178  {
180  }
181 
182  void setFormspecPrepend(const std::string &formspecPrepend)
183  {
184  m_formspec_prepend = formspecPrepend;
185  }
186 
187  // form_src is deleted by this GUIFormSpecMenu
188  void setFormSource(IFormSource *form_src)
189  {
190  delete m_form_src;
191  m_form_src = form_src;
192  }
193 
194  // text_dst is deleted by this GUIFormSpecMenu
195  void setTextDest(TextDest *text_dst)
196  {
197  delete m_text_dst;
198  m_text_dst = text_dst;
199  }
200 
201  void allowClose(bool value)
202  {
203  m_allowclose = value;
204  }
205 
206  void lockSize(bool lock,v2u32 basescreensize=v2u32(0,0))
207  {
208  m_lock = lock;
209  m_lockscreensize = basescreensize;
210  }
211 
212  void removeChildren();
213  void setInitialFocus();
214 
215  void setFocus(const std::string &elementname)
216  {
217  m_focused_element = elementname;
218  }
219 
220  Client *getClient() const
221  {
222  return m_client;
223  }
224 
226  {
227  return m_selected_item;
228  }
229 
230  const u16 getSelectedAmount() const
231  {
232  return m_selected_amount;
233  }
234 
236  {
238  }
239 
240  void addHoveredItemTooltip(const std::string &name)
241  {
242  m_hovered_item_tooltips.emplace_back(name);
243  }
244 
245  /*
246  Remove and re-add (or reposition) stuff
247  */
248  void regenerateGui(v2u32 screensize);
249 
251  void drawSelectedItem();
252  void drawMenu();
253  void updateSelectedItem();
255 
257  bool preprocessEvent(const SEvent& event);
258  bool OnEvent(const SEvent& event);
259  bool doPause;
260  bool pausesGame() { return doPause; }
261 
262  GUITable* getTable(const std::string &tablename);
263  std::vector<std::string>* getDropDownValues(const std::string &name);
264 
265 #ifdef __ANDROID__
266  bool getAndroidUIInput();
267 #endif
268 
269 protected:
271  {
272  return padding + offset + AbsoluteRect.UpperLeftCorner;
273  }
274  std::wstring getLabelByID(s32 id);
275  std::string getNameByID(s32 id);
276  const FieldSpec *getSpecByID(s32 id);
277  v2s32 getElementBasePos(const std::vector<std::string> *v_pos);
278  v2s32 getRealCoordinateBasePos(const std::vector<std::string> &v_pos);
279  v2s32 getRealCoordinateGeometry(const std::vector<std::string> &v_geom);
280 
281  std::unordered_map<std::string, std::vector<StyleSpec>> theme_by_type;
282  std::unordered_map<std::string, std::vector<StyleSpec>> theme_by_name;
283  std::unordered_set<std::string> property_warned;
284 
285  StyleSpec getDefaultStyleForElement(const std::string &type,
286  const std::string &name="", const std::string &parent_type="");
287  std::array<StyleSpec, StyleSpec::NUM_STATES> getStyleForElement(const std::string &type,
288  const std::string &name="", const std::string &parent_type="");
289 
295  std::stack<v2f32> container_stack;
296 
301 
302  std::string m_formspec_string;
303  std::string m_formspec_prepend;
305 
306  // Default true because we can't control regeneration on resizing, but
307  // we can control cases when the formspec is shown intentionally.
309 
310  std::vector<GUIInventoryList *> m_inventorylists;
311  std::vector<ListRingSpec> m_inventory_rings;
312  std::vector<gui::IGUIElement *> m_backgrounds;
313  std::unordered_map<std::string, bool> field_close_on_enter;
314  std::unordered_map<std::string, bool> m_dropdown_index_event;
315  std::vector<FieldSpec> m_fields;
316  std::vector<std::pair<FieldSpec, GUITable *>> m_tables;
317  std::vector<std::pair<FieldSpec, gui::IGUICheckBox *>> m_checkboxes;
318  std::map<std::string, TooltipSpec> m_tooltips;
319  std::vector<std::pair<gui::IGUIElement *, TooltipSpec>> m_tooltip_rects;
320  std::vector<std::pair<FieldSpec, GUIScrollBar *>> m_scrollbars;
321  std::vector<std::pair<FieldSpec, std::vector<std::string>>> m_dropdowns;
322  std::vector<gui::IGUIElement *> m_clickthrough_elements;
323  std::vector<std::pair<std::string, GUIScrollContainer *>> m_scroll_containers;
324 
327  bool m_selected_dragging = false;
329 
330  gui::IGUIStaticText *m_tooltip_element = nullptr;
331 
334  u64 m_hovered_time = 0;
336 
337  bool m_auto_place = false;
338 
339  bool m_allowclose = true;
340  bool m_lock = false;
342 
345  video::SColor m_bgcolor;
346  video::SColor m_fullscreen_bgcolor;
348  video::SColor m_default_tooltip_color;
349 
350 private:
353  std::string m_last_formname;
355  std::string m_focused_element = "";
357  bool m_show_debug = false;
358 
359  struct parserData {
367  core::rect<s32> rect;
372  gui::IGUIElement *current_parent = nullptr;
373 
375 
376  struct {
377  s32 max = 1000;
378  s32 min = 0;
379  s32 small_step = 10;
380  s32 large_step = 100;
381  s32 thumb_size = 1;
384 
385  // used to restore table selection/scroll/treeview state
386  std::unordered_map<std::string, GUITable::DynamicData> table_dyndata;
387  };
388 
389  struct fs_key_pending {
390  bool key_up;
391  bool key_down;
392  bool key_enter;
394  };
395 
397  std::string current_field_enter_pending = "";
398  std::vector<std::string> m_hovered_item_tooltips;
399 
400  void parseElement(parserData* data, const std::string &element);
401 
402  void parseSize(parserData* data, const std::string &element);
403  void parseContainer(parserData* data, const std::string &element);
404  void parseContainerEnd(parserData* data);
405  void parseScrollContainer(parserData *data, const std::string &element);
407  void parseList(parserData* data, const std::string &element);
408  void parseListRing(parserData* data, const std::string &element);
409  void parseCheckbox(parserData* data, const std::string &element);
410  void parseImage(parserData* data, const std::string &element);
411  void parseAnimatedImage(parserData *data, const std::string &element);
412  void parseItemImage(parserData* data, const std::string &element);
413  void parseButton(parserData* data, const std::string &element,
414  const std::string &typ);
415  void parseBackground(parserData* data, const std::string &element);
416  void parseTableOptions(parserData* data, const std::string &element);
417  void parseTableColumns(parserData* data, const std::string &element);
418  void parseTable(parserData* data, const std::string &element);
419  void parseTextList(parserData* data, const std::string &element);
420  void parseDropDown(parserData* data, const std::string &element);
421  void parseFieldCloseOnEnter(parserData *data, const std::string &element);
422  void parsePwdField(parserData* data, const std::string &element);
423  void parseField(parserData* data, const std::string &element, const std::string &type);
424  void createTextField(parserData *data, FieldSpec &spec,
425  core::rect<s32> &rect, bool is_multiline);
426  void parseSimpleField(parserData* data,std::vector<std::string> &parts);
427  void parseTextArea(parserData* data,std::vector<std::string>& parts,
428  const std::string &type);
429  void parseHyperText(parserData *data, const std::string &element);
430  void parseLabel(parserData* data, const std::string &element);
431  void parseVertLabel(parserData* data, const std::string &element);
432  void parseImageButton(parserData* data, const std::string &element,
433  const std::string &type);
434  void parseItemImageButton(parserData* data, const std::string &element);
435  void parseTabHeader(parserData* data, const std::string &element);
436  void parseBox(parserData* data, const std::string &element);
437  void parseBackgroundColor(parserData* data, const std::string &element);
438  void parseListColors(parserData* data, const std::string &element);
439  void parseTooltip(parserData* data, const std::string &element);
440  bool parseVersionDirect(const std::string &data);
441  bool parseSizeDirect(parserData* data, const std::string &element);
442  void parseScrollBar(parserData* data, const std::string &element);
443  void parseScrollBarOptions(parserData *data, const std::string &element);
444  bool parsePositionDirect(parserData *data, const std::string &element);
445  void parsePosition(parserData *data, const std::string &element);
446  bool parseAnchorDirect(parserData *data, const std::string &element);
447  void parseAnchor(parserData *data, const std::string &element);
448  bool parseStyle(parserData *data, const std::string &element, bool style_type);
449  void parseSetFocus(const std::string &element);
450  void parseModel(parserData *data, const std::string &element);
451 
452  void tryClose();
453 
454  void showTooltip(const std::wstring &text, const irr::video::SColor &color,
455  const irr::video::SColor &bgcolor);
456 
462  void legacySortElements(core::list<IGUIElement *>::Iterator from);
463 
465  gui::IGUIFont *m_font = nullptr;
466 };
467 
469 {
470 public:
471  FormspecFormSource(const std::string &formspec):
472  m_formspec(formspec)
473  {
474  }
475 
476  ~FormspecFormSource() = default;
477 
478  void setForm(const std::string &formspec)
479  {
480  m_formspec = formspec;
481  }
482 
483  const std::string &getForm() const
484  {
485  return m_formspec;
486  }
487 
488  std::string m_formspec;
489 };
Definition: client.h:109
Definition: guiFormSpecMenu.h:469
const std::string & getForm() const
Definition: guiFormSpecMenu.h:483
FormspecFormSource(const std::string &formspec)
Definition: guiFormSpecMenu.h:471
void setForm(const std::string &formspec)
Definition: guiFormSpecMenu.h:478
~FormspecFormSource()=default
std::string m_formspec
Definition: guiFormSpecMenu.h:488
Definition: guiFormSpecMenu.h:85
std::unordered_set< std::string > property_warned
Definition: guiFormSpecMenu.h:283
std::vector< gui::IGUIElement * > m_backgrounds
Definition: guiFormSpecMenu.h:312
int m_btn_height
Definition: guiFormSpecMenu.h:464
ItemStack m_selected_swap
Definition: guiFormSpecMenu.h:328
std::string current_field_enter_pending
Definition: guiFormSpecMenu.h:397
fs_key_pending current_keys_pending
Definition: guiFormSpecMenu.h:396
ItemStack verifySelectedItem()
Definition: guiFormSpecMenu.cpp:3822
void parseHyperText(parserData *data, const std::string &element)
Definition: guiFormSpecMenu.cpp:1739
void parseTableColumns(parserData *data, const std::string &element)
Definition: guiFormSpecMenu.cpp:1174
void parseScrollContainerEnd(parserData *data)
Definition: guiFormSpecMenu.cpp:423
void tryClose()
Definition: guiFormSpecMenu.cpp:4083
void parseImage(parserData *data, const std::string &element)
Definition: guiFormSpecMenu.cpp:788
void parseDropDown(parserData *data, const std::string &element)
Definition: guiFormSpecMenu.cpp:1347
void parseSetFocus(const std::string &element)
Definition: guiFormSpecMenu.cpp:2724
std::array< StyleSpec, StyleSpec::NUM_STATES > getStyleForElement(const std::string &type, const std::string &name="", const std::string &parent_type="")
Definition: guiFormSpecMenu.cpp:4741
std::string m_formspec_string
Definition: guiFormSpecMenu.h:302
Client * m_client
Definition: guiFormSpecMenu.h:300
ISimpleTextureSource * m_tsrc
Definition: guiFormSpecMenu.h:298
bool doTooltipAppendItemname() const
Definition: guiFormSpecMenu.h:235
void parseSize(parserData *data, const std::string &element)
Definition: guiFormSpecMenu.cpp:298
bool parseStyle(parserData *data, const std::string &element, bool style_type)
Definition: guiFormSpecMenu.cpp:2588
v2u32 m_lockscreensize
Definition: guiFormSpecMenu.h:341
void drawSelectedItem()
Definition: guiFormSpecMenu.cpp:3539
bool preprocessEvent(const SEvent &event)
Definition: guiFormSpecMenu.cpp:4001
void regenerateGui(v2u32 screensize)
Definition: guiFormSpecMenu.cpp:3042
void parseScrollBar(parserData *data, const std::string &element)
Definition: guiFormSpecMenu.cpp:659
void setTextDest(TextDest *text_dst)
Definition: guiFormSpecMenu.h:195
StyleSpec getDefaultStyleForElement(const std::string &type, const std::string &name="", const std::string &parent_type="")
Definition: guiFormSpecMenu.cpp:4736
std::string m_formspec_prepend
Definition: guiFormSpecMenu.h:303
void parseModel(parserData *data, const std::string &element)
Definition: guiFormSpecMenu.cpp:2745
video::SColor m_default_tooltip_bgcolor
Definition: guiFormSpecMenu.h:347
void parseList(parserData *data, const std::string &element)
Definition: guiFormSpecMenu.cpp:447
bool m_selected_dragging
Definition: guiFormSpecMenu.h:327
void parseContainer(parserData *data, const std::string &element)
Definition: guiFormSpecMenu.cpp:325
void legacySortElements(core::list< IGUIElement * >::Iterator from)
In formspec version < 2 the elements were not ordered properly.
Definition: guiFormSpecMenu.cpp:3457
std::unordered_map< std::string, bool > m_dropdown_index_event
Definition: guiFormSpecMenu.h:314
void createTextField(parserData *data, FieldSpec &spec, core::rect< s32 > &rect, bool is_multiline)
Definition: guiFormSpecMenu.cpp:1530
~GUIFormSpecMenu()
Definition: guiFormSpecMenu.cpp:122
TextDest * m_text_dst
Definition: guiFormSpecMenu.h:352
bool m_bgnonfullscreen
Definition: guiFormSpecMenu.h:343
std::vector< std::pair< FieldSpec, gui::IGUICheckBox * > > m_checkboxes
Definition: guiFormSpecMenu.h:317
v2s32 getBasePos() const
Definition: guiFormSpecMenu.h:270
void acceptInput(FormspecQuitMode quitmode=quit_mode_no)
Definition: guiFormSpecMenu.cpp:3859
std::string m_focused_element
Definition: guiFormSpecMenu.h:355
video::SColor m_fullscreen_bgcolor
Definition: guiFormSpecMenu.h:346
void parseTextList(parserData *data, const std::string &element)
Definition: guiFormSpecMenu.cpp:1269
bool parsePositionDirect(parserData *data, const std::string &element)
Definition: guiFormSpecMenu.cpp:2519
JoystickController * m_joystick
Definition: guiFormSpecMenu.h:356
gui::IGUIFont * m_font
Definition: guiFormSpecMenu.h:465
void parseBackground(parserData *data, const std::string &element)
Definition: guiFormSpecMenu.cpp:1066
u64 m_hovered_time
Definition: guiFormSpecMenu.h:334
void parseButton(parserData *data, const std::string &element, const std::string &typ)
Definition: guiFormSpecMenu.cpp:998
std::wstring getLabelByID(s32 id)
get label of element by id
Definition: guiFormSpecMenu.cpp:4727
void parseTableOptions(parserData *data, const std::string &element)
Definition: guiFormSpecMenu.cpp:1162
std::unordered_map< std::string, bool > field_close_on_enter
Definition: guiFormSpecMenu.h:313
std::vector< std::pair< FieldSpec, GUIScrollBar * > > m_scrollbars
Definition: guiFormSpecMenu.h:320
void parseTextArea(parserData *data, std::vector< std::string > &parts, const std::string &type)
Definition: guiFormSpecMenu.cpp:1655
void removeChildren()
Definition: guiFormSpecMenu.cpp:173
void parseFieldCloseOnEnter(parserData *data, const std::string &element)
Definition: guiFormSpecMenu.cpp:1434
void setFormSource(IFormSource *form_src)
Definition: guiFormSpecMenu.h:188
std::vector< FieldSpec > m_fields
Definition: guiFormSpecMenu.h:315
bool OnEvent(const SEvent &event)
Definition: guiFormSpecMenu.cpp:4107
bool parseAnchorDirect(parserData *data, const std::string &element)
Definition: guiFormSpecMenu.cpp:2553
std::unordered_map< std::string, std::vector< StyleSpec > > theme_by_type
Definition: guiFormSpecMenu.h:281
void parseLabel(parserData *data, const std::string &element)
Definition: guiFormSpecMenu.cpp:1795
bool m_show_debug
Definition: guiFormSpecMenu.h:357
void parseItemImage(parserData *data, const std::string &element)
Definition: guiFormSpecMenu.cpp:946
ISoundManager * m_sound_manager
Definition: guiFormSpecMenu.h:299
bool pausesGame()
Definition: guiFormSpecMenu.h:260
gui::IGUIStaticText * m_tooltip_element
Definition: guiFormSpecMenu.h:330
void parseBackgroundColor(parserData *data, const std::string &element)
Definition: guiFormSpecMenu.cpp:2323
void parseTooltip(parserData *data, const std::string &element)
Definition: guiFormSpecMenu.cpp:2395
std::string getNameByID(s32 id)
get name of element by element id
Definition: guiFormSpecMenu.cpp:4703
void parseScrollBarOptions(parserData *data, const std::string &element)
Definition: guiFormSpecMenu.cpp:735
v2f32 pos_offset
Definition: guiFormSpecMenu.h:294
void parsePosition(parserData *data, const std::string &element)
Definition: guiFormSpecMenu.cpp:2540
GUITable * getTable(const std::string &tablename)
Definition: guiFormSpecMenu.cpp:259
std::vector< GUIInventoryList * > m_inventorylists
Definition: guiFormSpecMenu.h:310
GUIInventoryList::ItemSpec getItemAtPos(v2s32 p) const
Definition: guiFormSpecMenu.cpp:3527
const GUIInventoryList::ItemSpec * getSelectedItem() const
Definition: guiFormSpecMenu.h:225
void parseField(parserData *data, const std::string &element, const std::string &type)
Definition: guiFormSpecMenu.cpp:1720
bool m_bgfullscreen
Definition: guiFormSpecMenu.h:344
void parsePwdField(parserData *data, const std::string &element)
Definition: guiFormSpecMenu.cpp:1443
void updateSelectedItem()
Definition: guiFormSpecMenu.cpp:3783
v2s32 getRealCoordinateBasePos(const std::vector< std::string > &v_pos)
Definition: guiFormSpecMenu.cpp:287
bool m_auto_place
Definition: guiFormSpecMenu.h:337
void lockSize(bool lock, v2u32 basescreensize=v2u32(0, 0))
Definition: guiFormSpecMenu.h:206
void parseAnimatedImage(parserData *data, const std::string &element)
Definition: guiFormSpecMenu.cpp:884
v2s32 imgsize
Definition: guiFormSpecMenu.h:292
const InventoryLocation & getFormspecLocation()
Definition: guiFormSpecMenu.h:177
std::vector< std::pair< gui::IGUIElement *, TooltipSpec > > m_tooltip_rects
Definition: guiFormSpecMenu.h:319
u64 m_tooltip_show_delay
Definition: guiFormSpecMenu.h:332
bool doPause
Definition: guiFormSpecMenu.h:259
InventoryLocation m_current_inventory_location
Definition: guiFormSpecMenu.h:304
bool m_tooltip_append_itemname
Definition: guiFormSpecMenu.h:333
GUIFormSpecMenu(JoystickController *joystick, gui::IGUIElement *parent, s32 id, IMenuManager *menumgr, Client *client, ISimpleTextureSource *tsrc, ISoundManager *sound_manager, IFormSource *fs_src, TextDest *txt_dst, const std::string &formspecPrepend, bool remap_dbl_click=true)
Definition: guiFormSpecMenu.cpp:98
void parseTabHeader(parserData *data, const std::string &element)
Definition: guiFormSpecMenu.cpp:2064
bool m_is_form_regenerated
Definition: guiFormSpecMenu.h:308
void setInitialFocus()
Definition: guiFormSpecMenu.cpp:188
void setFocus(const std::string &elementname)
Definition: guiFormSpecMenu.h:215
void parseVertLabel(parserData *data, const std::string &element)
Definition: guiFormSpecMenu.cpp:1893
std::vector< std::pair< std::string, GUIScrollContainer * > > m_scroll_containers
Definition: guiFormSpecMenu.h:323
InventoryManager * m_invmgr
Definition: guiFormSpecMenu.h:297
void parseScrollContainer(parserData *data, const std::string &element)
Definition: guiFormSpecMenu.cpp:351
static void create(GUIFormSpecMenu *&cur_formspec, Client *client, JoystickController *joystick, IFormSource *fs_src, TextDest *txt_dest, const std::string &formspecPrepend, ISoundManager *sound_manager)
Definition: guiFormSpecMenu.cpp:148
std::vector< std::string > * getDropDownValues(const std::string &name)
Definition: guiFormSpecMenu.cpp:268
void parseTable(parserData *data, const std::string &element)
Definition: guiFormSpecMenu.cpp:1194
s32 m_old_tooltip_id
Definition: guiFormSpecMenu.h:335
void parseContainerEnd(parserData *data)
Definition: guiFormSpecMenu.cpp:341
std::vector< std::pair< FieldSpec, GUITable * > > m_tables
Definition: guiFormSpecMenu.h:316
v2f32 spacing
Definition: guiFormSpecMenu.h:291
void parseAnchor(parserData *data, const std::string &element)
Definition: guiFormSpecMenu.cpp:2574
v2s32 getRealCoordinateGeometry(const std::vector< std::string > &v_geom)
Definition: guiFormSpecMenu.cpp:293
v2s32 padding
Definition: guiFormSpecMenu.h:290
void parseItemImageButton(parserData *data, const std::string &element)
Definition: guiFormSpecMenu.cpp:2176
void parseElement(parserData *data, const std::string &element)
Definition: guiFormSpecMenu.cpp:2836
std::vector< ListRingSpec > m_inventory_rings
Definition: guiFormSpecMenu.h:311
bool parseSizeDirect(parserData *data, const std::string &element)
Definition: guiFormSpecMenu.cpp:2495
bool parseVersionDirect(const std::string &data)
Definition: guiFormSpecMenu.cpp:2471
v2s32 offset
Definition: guiFormSpecMenu.h:293
void setFormSpec(const std::string &formspec_string, const InventoryLocation &current_inventory_location)
Definition: guiFormSpecMenu.h:168
bool m_lock
Definition: guiFormSpecMenu.h:340
void parseListRing(parserData *data, const std::string &element)
Definition: guiFormSpecMenu.cpp:542
void allowClose(bool value)
Definition: guiFormSpecMenu.h:201
GUIInventoryList::ItemSpec * m_selected_item
Definition: guiFormSpecMenu.h:325
void parseSimpleField(parserData *data, std::vector< std::string > &parts)
Definition: guiFormSpecMenu.cpp:1611
void addHoveredItemTooltip(const std::string &name)
Definition: guiFormSpecMenu.h:240
const u16 getSelectedAmount() const
Definition: guiFormSpecMenu.h:230
std::map< std::string, TooltipSpec > m_tooltips
Definition: guiFormSpecMenu.h:318
std::vector< gui::IGUIElement * > m_clickthrough_elements
Definition: guiFormSpecMenu.h:322
video::SColor m_bgcolor
Definition: guiFormSpecMenu.h:345
v2s32 getElementBasePos(const std::vector< std::string > *v_pos)
Definition: guiFormSpecMenu.cpp:277
void parseListColors(parserData *data, const std::string &element)
Definition: guiFormSpecMenu.cpp:2358
bool m_allowclose
Definition: guiFormSpecMenu.h:339
u16 m_selected_amount
Definition: guiFormSpecMenu.h:326
void parseImageButton(parserData *data, const std::string &element, const std::string &type)
Definition: guiFormSpecMenu.cpp:1975
u16 m_formspec_version
Definition: guiFormSpecMenu.h:354
IFormSource * m_form_src
Definition: guiFormSpecMenu.h:351
const FieldSpec * getSpecByID(s32 id)
Definition: guiFormSpecMenu.cpp:4713
void parseCheckbox(parserData *data, const std::string &element)
Definition: guiFormSpecMenu.cpp:580
Client * getClient() const
Definition: guiFormSpecMenu.h:220
std::string m_last_formname
Definition: guiFormSpecMenu.h:353
void setFormspecPrepend(const std::string &formspecPrepend)
Definition: guiFormSpecMenu.h:182
std::vector< std::string > m_hovered_item_tooltips
Definition: guiFormSpecMenu.h:398
video::SColor m_default_tooltip_color
Definition: guiFormSpecMenu.h:348
std::stack< v2f32 > container_stack
Definition: guiFormSpecMenu.h:295
std::unordered_map< std::string, std::vector< StyleSpec > > theme_by_name
Definition: guiFormSpecMenu.h:282
void showTooltip(const std::wstring &text, const irr::video::SColor &color, const irr::video::SColor &bgcolor)
Definition: guiFormSpecMenu.cpp:3735
std::vector< std::pair< FieldSpec, std::vector< std::string > > > m_dropdowns
Definition: guiFormSpecMenu.h:321
void drawMenu()
Definition: guiFormSpecMenu.cpp:3564
void parseBox(parserData *data, const std::string &element)
Definition: guiFormSpecMenu.cpp:2259
Definition: modalMenu.h:40
v2u32 m_screensize_old
Definition: modalMenu.h:75
ArrowVisibility
Definition: guiScrollBar.h:27
@ DEFAULT
Definition: guiScrollBar.h:30
Definition: guiScrollContainer.h:27
Definition: guiTable.h:46
std::vector< Option > TableOptions
Definition: guiTable.h:78
std::vector< TableColumn > TableColumns
Definition: guiTable.h:88
Definition: guiFormSpecMenu.h:76
virtual std::string resolveText(const std::string &str)
Definition: guiFormSpecMenu.h:81
virtual ~IFormSource()=default
virtual const std::string & getForm() const =0
Definition: modalMenu.h:29
Definition: tile.h:75
Definition: sound.h:36
Definition: inventorymanager.h:106
Definition: joystick_controller.h:102
Definition: StyleSpec.h:32
FormspecFieldType
Definition: guiFormSpecMenu.h:44
@ f_Box
Definition: guiFormSpecMenu.h:51
@ f_CheckBox
Definition: guiFormSpecMenu.h:48
@ f_Table
Definition: guiFormSpecMenu.h:46
@ f_ScrollBar
Definition: guiFormSpecMenu.h:50
@ f_ItemImage
Definition: guiFormSpecMenu.h:52
@ f_Unknown
Definition: guiFormSpecMenu.h:55
@ f_DropDown
Definition: guiFormSpecMenu.h:49
@ f_TabHeader
Definition: guiFormSpecMenu.h:47
@ f_AnimatedImage
Definition: guiFormSpecMenu.h:54
@ f_Button
Definition: guiFormSpecMenu.h:45
@ f_HyperText
Definition: guiFormSpecMenu.h:53
FormspecQuitMode
Definition: guiFormSpecMenu.h:58
@ quit_mode_cancel
Definition: guiFormSpecMenu.h:61
@ quit_mode_accept
Definition: guiFormSpecMenu.h:60
@ quit_mode_no
Definition: guiFormSpecMenu.h:59
core::vector2d< f32 > v2f32
Definition: irr_v2d.h:30
core::vector2d< s32 > v2s32
Definition: irr_v2d.h:28
core::vector2d< f32 > v2f
Definition: irr_v2d.h:26
core::vector2d< u32 > v2u32
Definition: irr_v2d.h:29
Definition: activeobjectmgr.cpp:25
void translate_string(const std::wstring &s, Translations *translations, const std::wstring &textdomain, size_t &i, std::wstring &res)
Definition: string.cpp:635
std::unordered_map< std::string, std::string > StringMap
Definition: string.h:60
std::basic_string< T > unescape_enriched(const std::basic_string< T > &s)
Remove all escape sequences in s.
Definition: string.h:569
Definition: guiFormSpecMenu.h:102
bool send
Definition: guiFormSpecMenu.h:124
FieldSpec(const std::string &name, const std::wstring &label, const std::wstring &default_text, s32 id, int priority=0, gui::ECURSOR_ICON cursor_icon=ECI_NORMAL)
Definition: guiFormSpecMenu.h:105
FormspecFieldType ftype
Definition: guiFormSpecMenu.h:125
bool is_exit
Definition: guiFormSpecMenu.h:126
std::string sound
Definition: guiFormSpecMenu.h:131
std::wstring fdefault
Definition: guiFormSpecMenu.h:122
std::string fname
Definition: guiFormSpecMenu.h:120
s32 fid
Definition: guiFormSpecMenu.h:123
core::rect< s32 > rect
Definition: guiFormSpecMenu.h:129
std::wstring flabel
Definition: guiFormSpecMenu.h:121
gui::ECURSOR_ICON fcursor_icon
Definition: guiFormSpecMenu.h:130
int priority
Definition: guiFormSpecMenu.h:128
Definition: guiFormSpecMenu.h:87
ListRingSpec(const InventoryLocation &a_inventoryloc, const std::string &a_listname)
Definition: guiFormSpecMenu.h:90
InventoryLocation inventoryloc
Definition: guiFormSpecMenu.h:97
std::string listname
Definition: guiFormSpecMenu.h:98
Definition: guiFormSpecMenu.h:135
std::wstring tooltip
Definition: guiFormSpecMenu.h:145
irr::video::SColor bgcolor
Definition: guiFormSpecMenu.h:146
TooltipSpec(const std::wstring &a_tooltip, irr::video::SColor a_bgcolor, irr::video::SColor a_color)
Definition: guiFormSpecMenu.h:137
irr::video::SColor color
Definition: guiFormSpecMenu.h:147
Definition: guiFormSpecMenu.h:389
bool key_escape
Definition: guiFormSpecMenu.h:393
bool key_down
Definition: guiFormSpecMenu.h:391
bool key_up
Definition: guiFormSpecMenu.h:390
bool key_enter
Definition: guiFormSpecMenu.h:392
Definition: guiFormSpecMenu.h:359
v2f invsize
Definition: guiFormSpecMenu.h:363
GUITable::TableColumns table_columns
Definition: guiFormSpecMenu.h:371
gui::IGUIElement * current_parent
Definition: guiFormSpecMenu.h:372
v2s32 basepos
Definition: guiFormSpecMenu.h:368
v2u32 screensize
Definition: guiFormSpecMenu.h:369
v2f32 anchor
Definition: guiFormSpecMenu.h:366
GUITable::TableOptions table_options
Definition: guiFormSpecMenu.h:370
bool real_coordinates
Definition: guiFormSpecMenu.h:361
s32 thumb_size
Definition: guiFormSpecMenu.h:381
s32 max
Definition: guiFormSpecMenu.h:377
v2s32 size
Definition: guiFormSpecMenu.h:364
v2f32 offset
Definition: guiFormSpecMenu.h:365
GUIScrollBar::ArrowVisibility arrow_visiblity
Definition: guiFormSpecMenu.h:382
bool explicit_size
Definition: guiFormSpecMenu.h:360
s32 small_step
Definition: guiFormSpecMenu.h:379
s32 min
Definition: guiFormSpecMenu.h:378
struct GUIFormSpecMenu::parserData::@17 scrollbar_options
u8 simple_field_count
Definition: guiFormSpecMenu.h:362
GUIInventoryList::Options inventorylist_options
Definition: guiFormSpecMenu.h:374
core::rect< s32 > rect
Definition: guiFormSpecMenu.h:367
std::unordered_map< std::string, GUITable::DynamicData > table_dyndata
Definition: guiFormSpecMenu.h:386
s32 large_step
Definition: guiFormSpecMenu.h:380
Definition: guiInventoryList.h:32
Definition: guiInventoryList.h:52
Definition: inventorymanager.h:28
Definition: inventory.h:34
Definition: guiFormSpecMenu.h:65
virtual void gotText(const std::wstring &text)
Definition: guiFormSpecMenu.h:69
virtual void gotText(const StringMap &fields)=0
virtual ~TextDest()=default
std::string m_formname
Definition: guiFormSpecMenu.h:72
std::string p(std::string path)
Definition: test_filepath.cpp:59