Luanti 5.15.0-dev
 
Loading...
Searching...
No Matches
guiFormSpecMenu.h
Go to the documentation of this file.
1// Luanti
2// SPDX-License-Identifier: LGPL-2.1-or-later
3// Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com>
4
5#pragma once
6
7#include <optional>
8#include <utility>
9#include <stack>
10#include <unordered_set>
11
13#include "irr_ptr.h"
14#include "inventory.h"
15#include "inventorymanager.h"
16#include "modalMenu.h"
17#include "guiInventoryList.h"
18#include "guiScrollBar.h"
19#include "guiTable.h"
20#include "util/string.h"
21#include "StyleSpec.h"
22#include <ICursorControl.h> // gui::ECURSOR_ICON
23#include <IGUIStaticText.h>
24
27class Client;
29class ISoundManager;
31
45
52
65
67{
68 virtual ~TextDest() = default;
69
70 virtual void gotText(const StringMap &fields) = 0;
71 virtual void requestScreenshot() {}
72
73 std::string m_formname;
74};
75
77{
78public:
79 virtual ~IFormSource() = default;
80 virtual const std::string &getForm() const = 0;
81 // Fill in variables in field text
82 virtual std::string resolveText(const std::string &str) { return str; }
83};
84
86{
88 {
89 ListRingSpec() = default;
90
91 ListRingSpec(const InventoryLocation &a_inventoryloc,
92 const std::string &a_listname):
93 inventoryloc(a_inventoryloc),
94 listname(a_listname)
95 {
96 }
97
99 std::string listname;
100 };
101
103 {
104 FieldSpec() = default;
105
106 FieldSpec(const std::string &name, const std::wstring &label,
107 const std::wstring &default_text, s32 id, int priority = 0,
108 gui::ECURSOR_ICON cursor_icon = ECI_NORMAL) :
109 fname(name),
110 flabel(label),
112 fid(id),
113 send(false),
115 is_exit(false),
117 fcursor_icon(cursor_icon)
118 {
119 }
120
121 std::string fname;
122 std::wstring flabel;
123 std::wstring fdefault;
124 std::string url;
125 s32 fid;
126 bool send;
129 // Draw priority for formspec version < 3
131 gui::ECURSOR_ICON fcursor_icon;
132 std::string sound;
133 f32 aux_f32 = 0;
134 };
135
137 {
138 TooltipSpec() = default;
139 TooltipSpec(const std::wstring &a_tooltip, video::SColor a_bgcolor,
140 video::SColor a_color):
141 tooltip(translate_string(a_tooltip)),
142 bgcolor(a_bgcolor),
143 color(a_color)
144 {
145 }
146
147 std::wstring tooltip;
148 video::SColor bgcolor;
149 video::SColor color;
150 };
151
152public:
154 gui::IGUIElement* parent, s32 id,
155 IMenuManager *menumgr,
156 Client *client,
157 gui::IGUIEnvironment *guienv,
159 ISoundManager *sound_manager,
160 IFormSource* fs_src,
161 TextDest* txt_dst,
162 const std::string &formspecPrepend,
163 bool remap_dbl_click = true);
164
166
167 static void create(GUIFormSpecMenu *&cur_formspec, Client *client,
168 gui::IGUIEnvironment *guienv, JoystickController *joystick, IFormSource *fs_src,
169 TextDest *txt_dest, const std::string &formspecPrepend,
170 ISoundManager *sound_manager);
171
172 void setFormSpec(const std::string &formspec_string,
173 const InventoryLocation &current_inventory_location)
174 {
175 m_formspec_string = formspec_string;
176 m_current_inventory_location = current_inventory_location;
177 m_is_form_regenerated = false;
179 }
180
185
186 void setFormspecPrepend(const std::string &formspecPrepend)
187 {
188 m_formspec_prepend = formspecPrepend;
189 }
190
191 // form_src is deleted by this GUIFormSpecMenu
193 {
194 delete m_form_src;
195 m_form_src = form_src;
196 }
197
198 // text_dst is deleted by this GUIFormSpecMenu
199 void setTextDest(TextDest *text_dst)
200 {
201 delete m_text_dst;
202 m_text_dst = text_dst;
203 }
204
205 void defaultAllowClose(bool value)
206 {
207 // Also set m_allowclose here in order to have the correct value if
208 // escape is pressed before regenerateGui() is called.
209 m_default_allowclose = value;
210 m_allowclose = value;
211 }
212
213 void setDebugView(bool value)
214 {
215 m_show_debug = value;
216 }
217
218 void lockSize(bool lock,v2u32 basescreensize=v2u32(0,0))
219 {
220 m_lock = lock;
221 m_lockscreensize = basescreensize;
222 }
223
224 void removeTooltip();
225 void setInitialFocus();
226
227 void setFocus(const std::string &elementname)
228 {
229 m_focused_element = elementname;
230 }
231
233 {
234 return m_client;
235 }
236
238 {
239 return m_selected_item.get();
240 }
241
243 {
244 return m_selected_amount;
245 }
246
248 {
250 }
251
252 void addHoveredItemTooltip(const std::string &name)
253 {
254 m_hovered_item_tooltips.emplace_back(name);
255 }
256
257 /*
258 Remove and re-add (or reposition) stuff
259 */
260 void regenerateGui(v2u32 screensize);
261
263 void drawSelectedItem();
264 void drawMenu();
265 void updateSelectedItem();
267
268 s16 getNextInventoryRing(const InventoryLocation &inventoryloc, const std::string &listname);
269
271 bool preprocessEvent(const SEvent& event);
272 bool OnEvent(const SEvent& event);
274 bool pausesGame() { return doPause; }
275
276 GUITable* getTable(const std::string &tablename);
277 std::vector<std::string>* getDropDownValues(const std::string &name);
278
279 // This will only return a meaningful value if called after drawMenu().
280 core::rect<s32> getAbsoluteRect();
281
282#ifdef __ANDROID__
283 void getAndroidUIInput();
284#endif
285
286 // Returns the fixed formspec coordinate size for the given parameters.
287 static double getFixedImgsize(double screen_dpi, double gui_scaling);
288 // Returns the preferred non-fixed formspec coordinate size for the given parameters.
289 static double getImgsize(v2u32 avail_screensize, double screen_dpi, double gui_scaling);
290
291protected:
293 {
294 return padding + offset + AbsoluteRect.UpperLeftCorner;
295 }
296 std::wstring getLabelByID(s32 id);
297 std::string getNameByID(s32 id);
298 const FieldSpec *getSpecByID(s32 id);
299 v2s32 getElementBasePos(const std::vector<std::string> *v_pos);
300 v2s32 getRealCoordinateBasePos(const std::vector<std::string> &v_pos);
301 v2s32 getRealCoordinateGeometry(const std::vector<std::string> &v_geom);
302 bool precheckElement(const std::string &name, const std::string &element,
303 size_t args_min, size_t args_max, std::vector<std::string> &parts);
304
305 std::unordered_map<std::string, std::vector<StyleSpec>> theme_by_type;
306 std::unordered_map<std::string, std::vector<StyleSpec>> theme_by_name;
307 std::unordered_set<std::string> property_warned;
308
309 StyleSpec getDefaultStyleForElement(const std::string &type,
310 const std::string &name="", const std::string &parent_type="");
311 std::array<StyleSpec, StyleSpec::NUM_STATES> getStyleForElement(const std::string &type,
312 const std::string &name="", const std::string &parent_type="");
313
319 std::stack<v2f32> container_stack;
320
325
326 std::string m_formspec_string;
329
330 // Default true because we can't control regeneration on resizing, but
331 // we can control cases when the formspec is shown intentionally.
333
334 std::vector<GUIInventoryList *> m_inventorylists;
335 std::vector<ListRingSpec> m_inventory_rings;
336 std::unordered_map<std::string, bool> field_enter_after_edit;
337 std::unordered_map<std::string, bool> field_close_on_enter;
338 std::unordered_map<std::string, bool> m_dropdown_index_event;
339 std::vector<FieldSpec> m_fields;
340 std::vector<std::pair<FieldSpec, GUITable *>> m_tables;
341 std::vector<std::pair<FieldSpec, gui::IGUICheckBox *>> m_checkboxes;
342 std::map<std::string, TooltipSpec> m_tooltips;
343 std::vector<std::pair<gui::IGUIElement *, TooltipSpec>> m_tooltip_rects;
344 std::vector<std::pair<FieldSpec, GUIScrollBar *>> m_scrollbars;
345 std::vector<std::pair<FieldSpec, std::vector<std::string>>> m_dropdowns;
346 std::vector<gui::IGUIElement *> m_clickthrough_elements;
347 std::vector<std::pair<std::string, GUIScrollContainer *>> m_scroll_containers;
348
349 std::unique_ptr<GUIInventoryList::ItemSpec> m_selected_item;
355
358 std::vector<std::pair<GUIInventoryList::ItemSpec, ItemStack>> m_left_drag_stacks;
359 bool m_left_dragging = false;
360
361 gui::IGUIStaticText *m_tooltip_element = nullptr;
362
367
369 bool m_allowclose = true;
370 bool m_lock = false;
372
375 video::SColor m_bgcolor;
376 video::SColor m_fullscreen_bgcolor;
379
380private:
383 std::string m_last_formname;
385 std::optional<std::string> m_focused_element = std::nullopt;
387 bool m_show_debug = false;
388
389 struct parserData {
398 core::rect<s32> rect;
403 gui::IGUIElement *current_parent = nullptr;
404 irr_ptr<gui::IGUIElement> background_parent;
405
407
408 struct {
409 s32 max = 1000;
410 s32 min = 0;
411 s32 small_step = 10;
412 s32 large_step = 100;
413 s32 thumb_size = 1;
416
417 // used to restore table selection/scroll/treeview state
418 std::unordered_map<std::string, GUITable::DynamicData> table_dyndata;
419 std::string type;
420 };
421
422 static const std::unordered_map<std::string, std::function<void(GUIFormSpecMenu*, GUIFormSpecMenu::parserData *data, const std::string &description)>> element_parsers;
423
425 bool key_up;
428 };
429
432 std::vector<std::string> m_hovered_item_tooltips;
433
434 void removeAll();
435
436 void parseElement(parserData* data, const std::string &element);
437
438 void parseSize(parserData* data, const std::string &element);
439 void parseContainer(parserData* data, const std::string &element);
440 void parseContainerEnd(parserData* data, const std::string &element);
441 void parseScrollContainer(parserData *data, const std::string &element);
442 void parseScrollContainerEnd(parserData *data, const std::string &element);
443 void parseList(parserData* data, const std::string &element);
444 void parseListRing(parserData* data, const std::string &element);
445 void parseCheckbox(parserData* data, const std::string &element);
446 void parseImage(parserData* data, const std::string &element);
447 void parseAnimatedImage(parserData *data, const std::string &element);
448 void parseItemImage(parserData* data, const std::string &element);
449 void parseButton(parserData* data, const std::string &element);
450 void parseBackground(parserData* data, const std::string &element);
451 void parseTableOptions(parserData* data, const std::string &element);
452 void parseTableColumns(parserData* data, const std::string &element);
453 void parseTable(parserData* data, const std::string &element);
454 void parseTextList(parserData* data, const std::string &element);
455 void parseDropDown(parserData* data, const std::string &element);
456 void parseFieldEnterAfterEdit(parserData *data, const std::string &element);
457 void parseFieldCloseOnEnter(parserData *data, const std::string &element);
458 void parsePwdField(parserData* data, const std::string &element);
459 void parseField(parserData* data, const std::string &element);
460 void createTextField(parserData *data, FieldSpec &spec,
461 core::rect<s32> &rect, bool is_multiline);
462 void parseSimpleField(parserData* data,std::vector<std::string> &parts);
463 void parseTextArea(parserData* data,std::vector<std::string>& parts,
464 const std::string &type);
465 void parseHyperText(parserData *data, const std::string &element);
466 void parseLabel(parserData* data, const std::string &element);
467 void parseVertLabel(parserData* data, const std::string &element);
468 void parseImageButton(parserData* data, const std::string &element);
469 void parseItemImageButton(parserData* data, const std::string &element);
470 void parseTabHeader(parserData* data, const std::string &element);
471 void parseBox(parserData* data, const std::string &element);
472 void parseBackgroundColor(parserData* data, const std::string &element);
473 void parseListColors(parserData* data, const std::string &element);
474 void parseTooltip(parserData* data, const std::string &element);
475 bool parseVersionDirect(const std::string &data);
476 bool parseSizeDirect(parserData* data, const std::string &element);
477 void parseRealCoordinates(parserData* data, const std::string &element);
478 void parseScrollBar(parserData* data, const std::string &element);
479 void parseScrollBarOptions(parserData *data, const std::string &element);
480 bool parsePositionDirect(parserData *data, const std::string &element);
481 void parsePosition(parserData *data, const std::string &element);
482 bool parseAnchorDirect(parserData *data, const std::string &element);
483 void parseAnchor(parserData *data, const std::string &element);
484 bool parsePaddingDirect(parserData *data, const std::string &element);
485 void parsePadding(parserData *data, const std::string &element);
486 void parseStyle(parserData *data, const std::string &element);
487 void parseSetFocus(parserData *, const std::string &element);
488 void parseModel(parserData *data, const std::string &element);
489 void parseAllowClose(parserData *data, const std::string &element);
490
491 bool parseMiddleRect(const std::string &value, core::rect<s32> *parsed_rect);
492
493 void tryClose();
494 void trySubmitClose();
495
496 void showTooltip(const std::wstring &text, const video::SColor &color,
497 const video::SColor &bgcolor);
498
504 void legacySortElements(std::list<IGUIElement *>::iterator from);
505
507 gui::IGUIFont *m_font = nullptr;
508
509 // used by getAbsoluteRect
511
512 // Determines the size (in pixels) of formspec coordinate units.
513 double calculateImgsize(const parserData &data);
514};
515
517{
518public:
519 FormspecFormSource(const std::string &formspec):
520 m_formspec(formspec)
521 {
522 }
523
525
526 void setForm(const std::string &formspec)
527 {
528 m_formspec = formspec;
529 }
530
531 const std::string &getForm() const
532 {
533 return m_formspec;
534 }
535
536 std::string m_formspec;
537};
Definition client.h:106
Definition guiFormSpecMenu.h:517
const std::string & getForm() const
Definition guiFormSpecMenu.h:531
FormspecFormSource(const std::string &formspec)
Definition guiFormSpecMenu.h:519
void setForm(const std::string &formspec)
Definition guiFormSpecMenu.h:526
~FormspecFormSource()=default
std::string m_formspec
Definition guiFormSpecMenu.h:536
Definition guiFormSpecMenu.h:86
std::unordered_set< std::string > property_warned
Definition guiFormSpecMenu.h:307
int m_btn_height
Definition guiFormSpecMenu.h:506
ItemStack m_selected_swap
Definition guiFormSpecMenu.h:352
std::string current_field_enter_pending
Definition guiFormSpecMenu.h:431
fs_key_pending current_keys_pending
Definition guiFormSpecMenu.h:430
void legacySortElements(std::list< IGUIElement * >::iterator from)
In formspec version < 2 the elements were not ordered properly.
Definition guiFormSpecMenu.cpp:3334
ItemStack verifySelectedItem()
Definition guiFormSpecMenu.cpp:3766
void parseHyperText(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:1713
void parseTableColumns(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:1167
void trySubmitClose()
Definition guiFormSpecMenu.cpp:4040
void tryClose()
Definition guiFormSpecMenu.cpp:4029
void parseImage(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:768
void parseDropDown(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:1335
std::unique_ptr< GUIInventoryList::ItemSpec > m_selected_item
Definition guiFormSpecMenu.h:349
std::array< StyleSpec, StyleSpec::NUM_STATES > getStyleForElement(const std::string &type, const std::string &name="", const std::string &parent_type="")
Definition guiFormSpecMenu.cpp:5047
std::string m_formspec_string
Definition guiFormSpecMenu.h:326
void parseAllowClose(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:2867
Client * m_client
Definition guiFormSpecMenu.h:324
ISimpleTextureSource * m_tsrc
Definition guiFormSpecMenu.h:322
s16 getNextInventoryRing(const InventoryLocation &inventoryloc, const std::string &listname)
Definition guiFormSpecMenu.cpp:3802
bool doTooltipAppendItemname() const
Definition guiFormSpecMenu.h:247
void parseSize(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:287
double calculateImgsize(const parserData &data)
Definition guiFormSpecMenu.cpp:5111
ButtonEventType m_held_mouse_button
Definition guiFormSpecMenu.h:353
core::rect< s32 > getAbsoluteRect()
Definition guiFormSpecMenu.cpp:248
u16 m_left_drag_amount
Definition guiFormSpecMenu.h:356
v2u32 m_lockscreensize
Definition guiFormSpecMenu.h:371
void drawSelectedItem()
Definition guiFormSpecMenu.cpp:3439
bool m_default_allowclose
Definition guiFormSpecMenu.h:368
bool preprocessEvent(const SEvent &event)
Definition guiFormSpecMenu.cpp:3944
void regenerateGui(v2u32 screensize)
Definition guiFormSpecMenu.cpp:2976
void parseScrollBar(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:640
void setTextDest(TextDest *text_dst)
Definition guiFormSpecMenu.h:199
StyleSpec getDefaultStyleForElement(const std::string &type, const std::string &name="", const std::string &parent_type="")
Definition guiFormSpecMenu.cpp:5042
std::string m_formspec_prepend
Definition guiFormSpecMenu.h:327
void parseModel(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:2771
video::SColor m_default_tooltip_bgcolor
Definition guiFormSpecMenu.h:377
void parseList(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:437
bool m_selected_dragging
Definition guiFormSpecMenu.h:351
void parseContainer(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:313
void parseSetFocus(parserData *, const std::string &element)
Definition guiFormSpecMenu.cpp:2757
std::unordered_map< std::string, bool > m_dropdown_index_event
Definition guiFormSpecMenu.h:338
void createTextField(parserData *data, FieldSpec &spec, core::rect< s32 > &rect, bool is_multiline)
Definition guiFormSpecMenu.cpp:1517
~GUIFormSpecMenu()
Definition guiFormSpecMenu.cpp:113
TextDest * m_text_dst
Definition guiFormSpecMenu.h:382
bool m_bgnonfullscreen
Definition guiFormSpecMenu.h:373
std::vector< std::pair< FieldSpec, gui::IGUICheckBox * > > m_checkboxes
Definition guiFormSpecMenu.h:341
void parseRealCoordinates(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:635
v2s32 getBasePos() const
Definition guiFormSpecMenu.h:292
void acceptInput(FormspecQuitMode quitmode=quit_mode_no)
Definition guiFormSpecMenu.cpp:3821
video::SColor m_fullscreen_bgcolor
Definition guiFormSpecMenu.h:376
void parseTextList(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:1259
void parseStyle(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:2614
static void create(GUIFormSpecMenu *&cur_formspec, Client *client, gui::IGUIEnvironment *guienv, JoystickController *joystick, IFormSource *fs_src, TextDest *txt_dest, const std::string &formspecPrepend, ISoundManager *sound_manager)
Definition guiFormSpecMenu.cpp:121
bool parsePositionDirect(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:2495
JoystickController * m_joystick
Definition guiFormSpecMenu.h:386
gui::IGUIFont * m_font
Definition guiFormSpecMenu.h:507
void parseBackground(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:1080
u64 m_hovered_time
Definition guiFormSpecMenu.h:365
void parseFieldEnterAfterEdit(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:1416
std::wstring getLabelByID(s32 id)
get label of element by id
Definition guiFormSpecMenu.cpp:5033
void parseTableOptions(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:1155
std::unordered_map< std::string, bool > field_close_on_enter
Definition guiFormSpecMenu.h:337
ItemStack m_left_drag_stack
Definition guiFormSpecMenu.h:357
std::vector< std::pair< FieldSpec, GUIScrollBar * > > m_scrollbars
Definition guiFormSpecMenu.h:344
void parseTextArea(parserData *data, std::vector< std::string > &parts, const std::string &type)
Definition guiFormSpecMenu.cpp:1633
void parseFieldCloseOnEnter(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:1425
void setFormSource(IFormSource *form_src)
Definition guiFormSpecMenu.h:192
std::vector< FieldSpec > m_fields
Definition guiFormSpecMenu.h:339
bool OnEvent(const SEvent &event)
Definition guiFormSpecMenu.cpp:4050
bool parseAnchorDirect(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:2534
std::unordered_map< std::string, std::vector< StyleSpec > > theme_by_type
Definition guiFormSpecMenu.h:305
void parseLabel(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:1766
bool m_show_debug
Definition guiFormSpecMenu.h:387
void parseItemImage(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:926
ISoundManager * m_sound_manager
Definition guiFormSpecMenu.h:323
bool pausesGame()
Definition guiFormSpecMenu.h:274
static const std::unordered_map< std::string, std::function< void(GUIFormSpecMenu *, GUIFormSpecMenu::parserData *data, const std::string &description)> > element_parsers
Definition guiFormSpecMenu.h:2895
gui::IGUIStaticText * m_tooltip_element
Definition guiFormSpecMenu.h:361
void parseBackgroundColor(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:2295
void parseTooltip(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:2374
std::string getNameByID(s32 id)
get name of element by element id
Definition guiFormSpecMenu.cpp:5009
void parseScrollBarOptions(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:715
void parsePadding(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:2595
bool m_shift_move_after_craft
Definition guiFormSpecMenu.h:354
v2f32 pos_offset
Definition guiFormSpecMenu.h:318
void parsePosition(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:2516
GUITable * getTable(const std::string &tablename)
Definition guiFormSpecMenu.cpp:229
void setDebugView(bool value)
Definition guiFormSpecMenu.h:213
std::vector< GUIInventoryList * > m_inventorylists
Definition guiFormSpecMenu.h:334
GUIInventoryList::ItemSpec getItemAtPos(v2s32 p) const
Definition guiFormSpecMenu.cpp:3427
GUIFormSpecMenu(JoystickController *joystick, gui::IGUIElement *parent, s32 id, IMenuManager *menumgr, Client *client, gui::IGUIEnvironment *guienv, ISimpleTextureSource *tsrc, ISoundManager *sound_manager, IFormSource *fs_src, TextDest *txt_dst, const std::string &formspecPrepend, bool remap_dbl_click=true)
Definition guiFormSpecMenu.cpp:90
bool m_bgfullscreen
Definition guiFormSpecMenu.h:374
void parsePwdField(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:1434
void updateSelectedItem()
Definition guiFormSpecMenu.cpp:3687
v2s32 getRealCoordinateBasePos(const std::vector< std::string > &v_pos)
Definition guiFormSpecMenu.cpp:265
void showTooltip(const std::wstring &text, const video::SColor &color, const video::SColor &bgcolor)
Definition guiFormSpecMenu.cpp:3627
void lockSize(bool lock, v2u32 basescreensize=v2u32(0, 0))
Definition guiFormSpecMenu.h:218
void parseAnimatedImage(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:860
v2s32 imgsize
Definition guiFormSpecMenu.h:316
std::vector< std::pair< gui::IGUIElement *, TooltipSpec > > m_tooltip_rects
Definition guiFormSpecMenu.h:343
const InventoryLocation & getFormspecLocation()
Definition guiFormSpecMenu.h:181
u64 m_tooltip_show_delay
Definition guiFormSpecMenu.h:363
bool doPause
Definition guiFormSpecMenu.h:273
InventoryLocation m_current_inventory_location
Definition guiFormSpecMenu.h:328
bool m_tooltip_append_itemname
Definition guiFormSpecMenu.h:364
void parseTabHeader(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:2047
bool m_is_form_regenerated
Definition guiFormSpecMenu.h:332
void removeAll()
Definition guiFormSpecMenu.cpp:2872
void setInitialFocus()
Definition guiFormSpecMenu.cpp:168
void setFocus(const std::string &elementname)
Definition guiFormSpecMenu.h:227
void parseVertLabel(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:1879
void removeTooltip()
Definition guiFormSpecMenu.cpp:159
std::vector< std::pair< std::string, GUIScrollContainer * > > m_scroll_containers
Definition guiFormSpecMenu.h:347
bool parsePaddingDirect(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:2574
std::optional< std::string > m_focused_element
Definition guiFormSpecMenu.h:385
InventoryManager * m_invmgr
Definition guiFormSpecMenu.h:321
void parseScrollContainer(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:339
static double getFixedImgsize(double screen_dpi, double gui_scaling)
Definition guiFormSpecMenu.cpp:5087
s32 m_tabheader_upper_edge
Definition guiFormSpecMenu.h:510
bool parseMiddleRect(const std::string &value, core::rect< s32 > *parsed_rect)
Definition guiFormSpecMenu.cpp:1051
std::vector< std::string > * getDropDownValues(const std::string &name)
Definition guiFormSpecMenu.cpp:238
void parseTable(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:1187
bool m_left_dragging
Definition guiFormSpecMenu.h:359
s32 m_old_tooltip_id
Definition guiFormSpecMenu.h:366
std::vector< std::pair< FieldSpec, GUITable * > > m_tables
Definition guiFormSpecMenu.h:340
v2f32 spacing
Definition guiFormSpecMenu.h:315
const GUIInventoryList::ItemSpec * getSelectedItem() const
Definition guiFormSpecMenu.h:237
void parseAnchor(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:2555
v2s32 getRealCoordinateGeometry(const std::vector< std::string > &v_geom)
Definition guiFormSpecMenu.cpp:271
static double getImgsize(v2u32 avail_screensize, double screen_dpi, double gui_scaling)
Definition guiFormSpecMenu.cpp:5099
v2s32 padding
Definition guiFormSpecMenu.h:314
void parseItemImageButton(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:2162
void parseElement(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:2945
std::vector< ListRingSpec > m_inventory_rings
Definition guiFormSpecMenu.h:335
bool parseSizeDirect(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:2471
bool parseVersionDirect(const std::string &data)
Definition guiFormSpecMenu.cpp:2447
v2s32 offset
Definition guiFormSpecMenu.h:317
void setFormSpec(const std::string &formspec_string, const InventoryLocation &current_inventory_location)
Definition guiFormSpecMenu.h:172
bool m_lock
Definition guiFormSpecMenu.h:370
void parseListRing(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:525
void parseField(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:1698
void parseContainerEnd(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:329
std::vector< std::pair< GUIInventoryList::ItemSpec, ItemStack > > m_left_drag_stacks
Definition guiFormSpecMenu.h:358
void parseSimpleField(parserData *data, std::vector< std::string > &parts)
Definition guiFormSpecMenu.cpp:1589
void addHoveredItemTooltip(const std::string &name)
Definition guiFormSpecMenu.h:252
bool precheckElement(const std::string &name, const std::string &element, size_t args_min, size_t args_max, std::vector< std::string > &parts)
Definition guiFormSpecMenu.cpp:276
std::map< std::string, TooltipSpec > m_tooltips
Definition guiFormSpecMenu.h:342
std::vector< gui::IGUIElement * > m_clickthrough_elements
Definition guiFormSpecMenu.h:346
video::SColor m_bgcolor
Definition guiFormSpecMenu.h:375
v2s32 getElementBasePos(const std::vector< std::string > *v_pos)
Definition guiFormSpecMenu.cpp:255
void parseListColors(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:2332
bool m_allowclose
Definition guiFormSpecMenu.h:369
u16 m_selected_amount
Definition guiFormSpecMenu.h:350
void parseScrollContainerEnd(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:413
u16 m_formspec_version
Definition guiFormSpecMenu.h:384
void defaultAllowClose(bool value)
Definition guiFormSpecMenu.h:205
IFormSource * m_form_src
Definition guiFormSpecMenu.h:381
void parseButton(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:974
const FieldSpec * getSpecByID(s32 id)
Definition guiFormSpecMenu.cpp:5019
void parseCheckbox(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:560
u16 getSelectedAmount() const
Definition guiFormSpecMenu.h:242
std::unordered_map< std::string, bool > field_enter_after_edit
Definition guiFormSpecMenu.h:336
std::string m_last_formname
Definition guiFormSpecMenu.h:383
void setFormspecPrepend(const std::string &formspecPrepend)
Definition guiFormSpecMenu.h:186
std::vector< std::string > m_hovered_item_tooltips
Definition guiFormSpecMenu.h:432
video::SColor m_default_tooltip_color
Definition guiFormSpecMenu.h:378
Client * getClient() const
Definition guiFormSpecMenu.h:232
std::stack< v2f32 > container_stack
Definition guiFormSpecMenu.h:319
void parseImageButton(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:1957
std::unordered_map< std::string, std::vector< StyleSpec > > theme_by_name
Definition guiFormSpecMenu.h:306
std::vector< std::pair< FieldSpec, std::vector< std::string > > > m_dropdowns
Definition guiFormSpecMenu.h:345
void drawMenu()
Definition guiFormSpecMenu.cpp:3465
void parseBox(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:2236
Definition modalMenu.h:37
v2u32 m_screensize_old
Definition modalMenu.h:68
ArrowVisibility
Definition guiScrollBar.h:32
@ DEFAULT
Definition guiScrollBar.h:35
Definition guiScrollContainer.h:10
Definition guiTable.h:29
std::vector< Option > TableOptions
Definition guiTable.h:61
std::vector< TableColumn > TableColumns
Definition guiTable.h:71
Definition guiFormSpecMenu.h:77
virtual std::string resolveText(const std::string &str)
Definition guiFormSpecMenu.h:82
virtual const std::string & getForm() const =0
virtual ~IFormSource()=default
Definition modalMenu.h:26
Definition texturesource.h:34
Definition sound.h:46
Definition inventorymanager.h:96
Definition joystick_controller.h:89
Definition StyleSpec.h:18
gui::IGUIEnvironment * guienv
Definition clientlauncher.cpp:34
FormspecFieldType
Definition guiFormSpecMenu.h:32
@ f_Box
Definition guiFormSpecMenu.h:39
@ f_CheckBox
Definition guiFormSpecMenu.h:36
@ f_Table
Definition guiFormSpecMenu.h:34
@ f_ScrollBar
Definition guiFormSpecMenu.h:38
@ f_ItemImage
Definition guiFormSpecMenu.h:40
@ f_Unknown
Definition guiFormSpecMenu.h:43
@ f_DropDown
Definition guiFormSpecMenu.h:37
@ f_TabHeader
Definition guiFormSpecMenu.h:35
@ f_AnimatedImage
Definition guiFormSpecMenu.h:42
@ f_Button
Definition guiFormSpecMenu.h:33
@ f_HyperText
Definition guiFormSpecMenu.h:41
FormspecQuitMode
Definition guiFormSpecMenu.h:46
@ quit_mode_cancel
Definition guiFormSpecMenu.h:49
@ quit_mode_accept
Definition guiFormSpecMenu.h:48
@ quit_mode_try
Definition guiFormSpecMenu.h:50
@ quit_mode_no
Definition guiFormSpecMenu.h:47
ButtonEventType
Definition guiFormSpecMenu.h:54
@ BET_RIGHT
Definition guiFormSpecMenu.h:56
@ BET_DOWN
Definition guiFormSpecMenu.h:61
@ BET_MIDDLE
Definition guiFormSpecMenu.h:57
@ BET_WHEEL_UP
Definition guiFormSpecMenu.h:58
@ BET_OTHER
Definition guiFormSpecMenu.h:63
@ BET_UP
Definition guiFormSpecMenu.h:60
@ BET_LEFT
Definition guiFormSpecMenu.h:55
@ BET_WHEEL_DOWN
Definition guiFormSpecMenu.h:59
@ BET_MOVE
Definition guiFormSpecMenu.h:62
core::vector2d< f32 > v2f32
Definition irr_v2d.h:15
core::vector2d< s32 > v2s32
Definition irr_v2d.h:13
core::vector2d< f32 > v2f
Definition irr_v2d.h:11
core::vector2d< u32 > v2u32
Definition irr_v2d.h:14
Definition activeobjectmgr.cpp:11
static void translate_string(std::wstring_view s, Translations *translations, const std::wstring &textdomain, size_t &i, std::wstring &res, bool use_plural, unsigned long int number)
Definition string.cpp:659
std::unordered_map< std::string, std::string > StringMap
Definition string.h:66
std::basic_string< T > unescape_enriched(std::basic_string_view< T > s)
Remove all escape sequences in s.
Definition string.h:605
Definition guiFormSpecMenu.h:103
bool send
Definition guiFormSpecMenu.h:126
f32 aux_f32
Definition guiFormSpecMenu.h:133
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:106
FormspecFieldType ftype
Definition guiFormSpecMenu.h:127
bool is_exit
Definition guiFormSpecMenu.h:128
std::string sound
Definition guiFormSpecMenu.h:132
std::string url
Definition guiFormSpecMenu.h:124
std::wstring fdefault
Definition guiFormSpecMenu.h:123
std::string fname
Definition guiFormSpecMenu.h:121
s32 fid
Definition guiFormSpecMenu.h:125
std::wstring flabel
Definition guiFormSpecMenu.h:122
gui::ECURSOR_ICON fcursor_icon
Definition guiFormSpecMenu.h:131
int priority
Definition guiFormSpecMenu.h:130
Definition guiFormSpecMenu.h:88
ListRingSpec(const InventoryLocation &a_inventoryloc, const std::string &a_listname)
Definition guiFormSpecMenu.h:91
InventoryLocation inventoryloc
Definition guiFormSpecMenu.h:98
std::string listname
Definition guiFormSpecMenu.h:99
Definition guiFormSpecMenu.h:137
std::wstring tooltip
Definition guiFormSpecMenu.h:147
video::SColor color
Definition guiFormSpecMenu.h:149
video::SColor bgcolor
Definition guiFormSpecMenu.h:148
TooltipSpec(const std::wstring &a_tooltip, video::SColor a_bgcolor, video::SColor a_color)
Definition guiFormSpecMenu.h:139
Definition guiFormSpecMenu.h:424
bool key_down
Definition guiFormSpecMenu.h:426
bool key_up
Definition guiFormSpecMenu.h:425
bool key_enter
Definition guiFormSpecMenu.h:427
Definition guiFormSpecMenu.h:389
v2f invsize
Definition guiFormSpecMenu.h:393
GUITable::TableColumns table_columns
Definition guiFormSpecMenu.h:402
gui::IGUIElement * current_parent
Definition guiFormSpecMenu.h:403
v2s32 basepos
Definition guiFormSpecMenu.h:399
v2u32 screensize
Definition guiFormSpecMenu.h:400
v2f32 anchor
Definition guiFormSpecMenu.h:396
GUITable::TableOptions table_options
Definition guiFormSpecMenu.h:401
bool real_coordinates
Definition guiFormSpecMenu.h:391
s32 thumb_size
Definition guiFormSpecMenu.h:413
s32 max
Definition guiFormSpecMenu.h:409
v2s32 size
Definition guiFormSpecMenu.h:394
struct GUIFormSpecMenu::parserData::@19 scrollbar_options
std::string type
Definition guiFormSpecMenu.h:419
v2f32 offset
Definition guiFormSpecMenu.h:395
GUIScrollBar::ArrowVisibility arrow_visiblity
Definition guiFormSpecMenu.h:414
bool explicit_size
Definition guiFormSpecMenu.h:390
s32 small_step
Definition guiFormSpecMenu.h:411
s32 min
Definition guiFormSpecMenu.h:410
v2f32 padding
Definition guiFormSpecMenu.h:397
u8 simple_field_count
Definition guiFormSpecMenu.h:392
GUIInventoryList::Options inventorylist_options
Definition guiFormSpecMenu.h:406
core::rect< s32 > rect
Definition guiFormSpecMenu.h:398
irr_ptr< gui::IGUIElement > background_parent
Definition guiFormSpecMenu.h:404
std::unordered_map< std::string, GUITable::DynamicData > table_dyndata
Definition guiFormSpecMenu.h:418
s32 large_step
Definition guiFormSpecMenu.h:412
Definition guiInventoryList.h:19
Definition guiInventoryList.h:48
Definition inventorymanager.h:18
Definition inventory.h:21
Definition guiFormSpecMenu.h:67
virtual void gotText(const StringMap &fields)=0
virtual void requestScreenshot()
Definition guiFormSpecMenu.h:71
virtual ~TextDest()=default
std::string m_formname
Definition guiFormSpecMenu.h:73
static std::string p(std::string path)
Definition test_filesys.cpp:64