Luanti 5.17.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;
30
44
51
64
66{
67 virtual ~TextDest() = default;
68
69 virtual void gotText(const StringMap &fields) = 0;
70 virtual void requestScreenshot() {}
71
72 std::string m_formname;
73};
74
76{
77public:
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{
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
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),
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 std::string url;
124 s32 fid;
125 bool send;
128 // Draw priority for formspec version < 3
130 gui::ECURSOR_ICON fcursor_icon;
131 std::string sound;
132 f32 aux_f32 = 0;
133 };
134
136 {
137 TooltipSpec() = default;
138 TooltipSpec(const std::wstring &a_tooltip, video::SColor a_bgcolor,
139 video::SColor a_color):
140 tooltip(translate_string(a_tooltip)),
141 bgcolor(a_bgcolor),
142 color(a_color)
143 {
144 }
145
146 std::wstring tooltip;
147 video::SColor bgcolor;
148 video::SColor color;
149 };
150
151public:
152 GUIFormSpecMenu(gui::IGUIElement* parent, s32 id,
153 IMenuManager *menumgr,
154 Client *client,
155 gui::IGUIEnvironment *guienv,
157 ISoundManager *sound_manager,
158 IFormSource* fs_src,
159 TextDest* txt_dst,
160 const std::string &formspecPrepend,
161 bool remap_dbl_click = true);
162
164
165 static void create(GUIFormSpecMenu *&cur_formspec, Client *client,
166 gui::IGUIEnvironment *guienv, IFormSource *fs_src,
167 TextDest *txt_dest, const std::string &formspecPrepend,
168 ISoundManager *sound_manager);
169
170 void setFormSpec(const std::string &formspec_string,
171 const InventoryLocation &current_inventory_location)
172 {
173 m_formspec_string = formspec_string;
174 m_current_inventory_location = current_inventory_location;
175 m_is_form_regenerated = false;
177 }
178
183
184 void setFormspecPrepend(const std::string &formspecPrepend)
185 {
186 m_formspec_prepend = formspecPrepend;
187 }
188
189 // form_src is deleted by this GUIFormSpecMenu
191 {
192 delete m_form_src;
193 m_form_src = form_src;
194 }
195
196 // text_dst is deleted by this GUIFormSpecMenu
197 void setTextDest(TextDest *text_dst)
198 {
199 delete m_text_dst;
200 m_text_dst = text_dst;
201 }
202
203 void defaultAllowClose(bool value)
204 {
205 // Also set m_allowclose here in order to have the correct value if
206 // escape is pressed before regenerateGui() is called.
207 m_default_allowclose = value;
208 m_allowclose = value;
209 }
210
211 void setDebugView(bool value)
212 {
213 m_show_debug = value;
214 }
215
216 void lockSize(bool lock,v2u32 basescreensize=v2u32(0,0))
217 {
218 m_lock = lock;
219 m_lockscreensize = basescreensize;
220 }
221
222 void removeTooltip();
223 void setInitialFocus();
224
225 void setFocus(const std::string &elementname)
226 {
227 m_focused_element = elementname;
228 }
229
231 {
232 return m_client;
233 }
234
236 {
237 return m_selected_item.get();
238 }
239
241 {
242 return m_selected_amount;
243 }
244
246 {
248 }
249
250 void addHoveredItemTooltip(const std::string &name)
251 {
252 m_hovered_item_tooltips.emplace_back(name);
253 }
254
255 /*
256 Remove and re-add (or reposition) stuff
257 */
258 void regenerateGui(v2u32 screensize) override;
259
261 void drawSelectedItem();
262 void drawMenu() override;
263 void updateSelectedItem();
265
266 s16 getNextInventoryRing(const InventoryLocation &inventoryloc, const std::string &listname);
267
269 bool preprocessEvent(const SEvent& event) override;
270 bool OnEvent(const SEvent& event) override;
271
272 bool doPause = false;
273 bool pausesGame() override { return doPause; }
274
275 GUITable* getTable(const std::string &tablename);
276 std::vector<std::string>* getDropDownValues(const std::string &name);
277
278 // This will only return a meaningful value if called after drawMenu().
279 core::rect<s32> getAbsoluteRect();
280
281#ifdef __ANDROID__
282 void getAndroidUIInput();
283#endif
284
285 // Returns the fixed formspec coordinate size for the given parameters.
286 static double getFixedImgsize(double screen_dpi, double gui_scaling);
287 // Returns the preferred non-fixed formspec coordinate size for the given parameters.
288 static double getImgsize(v2u32 avail_screensize, double screen_dpi, double gui_scaling);
289
290protected:
291 bool remapClickOutside(const SEvent &event) override;
292
294 {
295 return padding + offset + AbsoluteRect.UpperLeftCorner;
296 }
297
298 std::wstring getLabelByID(s32 id) override;
299 std::string getNameByID(s32 id) override;
300 const FieldSpec *getSpecByID(s32 id);
301 v2s32 getElementBasePos(const std::vector<std::string> *v_pos);
302 v2s32 getRealCoordinateBasePos(const std::vector<std::string> &v_pos);
303 v2s32 getRealCoordinateGeometry(const std::vector<std::string> &v_geom);
304 bool precheckElement(const std::string &name, const std::string &element,
305 size_t args_min, size_t args_max, std::vector<std::string> &parts);
306
307 std::unordered_map<std::string, std::vector<StyleSpec>> theme_by_type;
308 std::unordered_map<std::string, std::vector<StyleSpec>> theme_by_name;
309 std::unordered_set<std::string> property_warned;
310
311 StyleSpec getDefaultStyleForElement(const std::string &type,
312 const std::string &name="", const std::string &parent_type="");
313 std::array<StyleSpec, StyleSpec::NUM_STATES> getStyleForElement(const std::string &type,
314 const std::string &name="", const std::string &parent_type="");
315
321 std::stack<v2f32> container_stack;
322
327
328 std::string m_formspec_string;
331
332 // Default true because we can't control regeneration on resizing, but
333 // we can control cases when the formspec is shown intentionally.
335
336 std::vector<GUIInventoryList *> m_inventorylists;
337 std::vector<ListRingSpec> m_inventory_rings;
338 std::unordered_map<std::string, bool> field_enter_after_edit;
339 std::unordered_map<std::string, bool> field_close_on_enter;
340 std::unordered_map<std::string, bool> m_dropdown_index_event;
341 std::vector<FieldSpec> m_fields;
342 std::vector<std::pair<FieldSpec, GUITable *>> m_tables;
343 std::vector<std::pair<FieldSpec, gui::IGUICheckBox *>> m_checkboxes;
344 std::map<std::string, TooltipSpec> m_tooltips;
345 std::vector<std::pair<gui::IGUIElement *, TooltipSpec>> m_tooltip_rects;
346 std::vector<std::pair<FieldSpec, GUIScrollBar *>> m_scrollbars;
347 std::vector<std::pair<FieldSpec, std::vector<std::string>>> m_dropdowns;
348 std::vector<gui::IGUIElement *> m_clickthrough_elements;
349 std::vector<std::pair<std::string, GUIScrollContainer *>> m_scroll_containers;
350
351 std::unique_ptr<GUIInventoryList::ItemSpec> m_selected_item;
357
360 std::vector<std::pair<GUIInventoryList::ItemSpec, ItemStack>> m_left_drag_stacks;
361 bool m_left_dragging = false;
362
363 gui::IGUIStaticText *m_tooltip_element = nullptr;
364
369
371 bool m_allowclose = true;
372 bool m_lock = false;
374
377 video::SColor m_bgcolor;
378 video::SColor m_fullscreen_bgcolor;
381
382private:
385 std::string m_last_formname;
387 std::optional<std::string> m_focused_element = std::nullopt;
388 bool m_show_debug = false;
389 bool m_show_focus = false;
390 gui::IGUIElement *m_last_focused = nullptr;
391
392 struct parserData {
401 core::rect<s32> rect;
406 gui::IGUIElement *current_parent = nullptr;
407 irr_ptr<gui::IGUIElement> background_parent;
408
410
411 struct {
412 s32 max = 1000;
413 s32 min = 0;
414 s32 small_step = 10;
415 s32 large_step = 100;
416 s32 thumb_size = 1;
417 GUIScrollBar::ArrowVisibility arrow_visiblity = GUIScrollBar::DEFAULT;
419
420 // used to restore table selection/scroll/treeview state
421 std::unordered_map<std::string, GUITable::DynamicData> table_dyndata;
422 std::string type;
423 };
424
425 static const std::unordered_map<std::string, std::function<void(GUIFormSpecMenu*, GUIFormSpecMenu::parserData *data, const std::string &description)>> element_parsers;
426
428 bool key_up;
431 };
432
435 std::vector<std::string> m_hovered_item_tooltips;
436
437 void removeAll();
438
439 void parseElement(parserData* data, const std::string &element);
440
441 void parseSize(parserData* data, const std::string &element);
442 void parseContainer(parserData* data, const std::string &element);
443 void parseContainerEnd(parserData* data, const std::string &element);
444 void parseScrollContainer(parserData *data, const std::string &element);
445 void parseScrollContainerEnd(parserData *data, const std::string &element);
446 void parseList(parserData* data, const std::string &element);
447 void parseListRing(parserData* data, const std::string &element);
448 void parseCheckbox(parserData* data, const std::string &element);
449 void parseImage(parserData* data, const std::string &element);
450 void parseAnimatedImage(parserData *data, const std::string &element);
451 void parseItemImage(parserData* data, const std::string &element);
452 void parseButton(parserData* data, const std::string &element);
453 void parseBackground(parserData* data, const std::string &element);
454 void parseTableOptions(parserData* data, const std::string &element);
455 void parseTableColumns(parserData* data, const std::string &element);
456 void parseTable(parserData* data, const std::string &element);
457 void parseTextList(parserData* data, const std::string &element);
458 void parseDropDown(parserData* data, const std::string &element);
459 void parseFieldEnterAfterEdit(parserData *data, const std::string &element);
460 void parseFieldCloseOnEnter(parserData *data, const std::string &element);
461 void parsePwdField(parserData* data, const std::string &element);
462 void parseField(parserData* data, const std::string &element);
463 void createTextField(parserData *data, FieldSpec &spec,
464 core::rect<s32> &rect, bool is_multiline);
465 void parseSimpleField(parserData* data,std::vector<std::string> &parts);
466 void parseTextArea(parserData* data,std::vector<std::string>& parts,
467 const std::string &type);
468 void parseHyperText(parserData *data, const std::string &element);
469 void parseLabel(parserData* data, const std::string &element);
470 void parseVertLabel(parserData* data, const std::string &element);
471 void parseImageButton(parserData* data, const std::string &element);
472 void parseItemImageButton(parserData* data, const std::string &element);
473 void parseTabHeader(parserData* data, const std::string &element);
474 void parseBox(parserData* data, const std::string &element);
475 void parseBackgroundColor(parserData* data, const std::string &element);
476 void parseListColors(parserData* data, const std::string &element);
477 void parseTooltip(parserData* data, const std::string &element);
478 bool parseVersionDirect(const std::string &data);
479 bool parseSizeDirect(parserData* data, const std::string &element);
480 void parseRealCoordinates(parserData* data, const std::string &element);
481 void parseScrollBar(parserData* data, const std::string &element);
482 void parseScrollBarOptions(parserData *data, const std::string &element);
483 bool parsePositionDirect(parserData *data, const std::string &element);
484 void parsePosition(parserData *data, const std::string &element);
485 bool parseAnchorDirect(parserData *data, const std::string &element);
486 void parseAnchor(parserData *data, const std::string &element);
487 bool parsePaddingDirect(parserData *data, const std::string &element);
488 void parsePadding(parserData *data, const std::string &element);
489 void parseStyle(parserData *data, const std::string &element);
490 void parseSetFocus(parserData *, const std::string &element);
491 void parseModel(parserData *data, const std::string &element);
492 void parseAllowClose(parserData *data, const std::string &element);
493
494 bool parseMiddleRect(const std::string &value, core::rect<s32> *parsed_rect);
495
496 void tryClose();
497 void trySubmitClose();
498
499 void showTooltip(const std::wstring &text, const video::SColor &color,
500 const video::SColor &bgcolor);
501
506 void autoScroll();
507
513 void legacySortElements(std::list<IGUIElement *>::iterator from);
514
516 gui::IGUIFont *m_font = nullptr;
517
518 // used by getAbsoluteRect
520
521 // Determines the size (in pixels) of formspec coordinate units.
522 double calculateImgsize(const parserData &data);
523};
524
526{
527public:
528 FormspecFormSource(const std::string &formspec):
529 m_formspec(formspec)
530 {
531 }
532
534
535 void setForm(const std::string &formspec)
536 {
537 m_formspec = formspec;
538 }
539
540 const std::string &getForm() const
541 {
542 return m_formspec;
543 }
544
545 std::string m_formspec;
546};
Definition client.h:107
const std::string & getForm() const
Definition guiFormSpecMenu.h:540
FormspecFormSource(const std::string &formspec)
Definition guiFormSpecMenu.h:528
void setForm(const std::string &formspec)
Definition guiFormSpecMenu.h:535
~FormspecFormSource()=default
std::string m_formspec
Definition guiFormSpecMenu.h:545
std::unordered_set< std::string > property_warned
Definition guiFormSpecMenu.h:309
int m_btn_height
Definition guiFormSpecMenu.h:515
ItemStack m_selected_swap
Definition guiFormSpecMenu.h:354
std::string current_field_enter_pending
Definition guiFormSpecMenu.h:434
fs_key_pending current_keys_pending
Definition guiFormSpecMenu.h:433
void legacySortElements(std::list< IGUIElement * >::iterator from)
In formspec version < 2 the elements were not ordered properly.
Definition guiFormSpecMenu.cpp:3350
ItemStack verifySelectedItem()
Definition guiFormSpecMenu.cpp:3895
std::wstring getLabelByID(s32 id) override
get label of element by id
Definition guiFormSpecMenu.cpp:5190
void parseHyperText(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:1716
void parseTableColumns(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:1170
void trySubmitClose()
Definition guiFormSpecMenu.cpp:4193
void tryClose()
Definition guiFormSpecMenu.cpp:4182
void parseImage(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:771
void parseDropDown(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:1338
bool m_show_focus
Definition guiFormSpecMenu.h:389
std::unique_ptr< GUIInventoryList::ItemSpec > m_selected_item
Definition guiFormSpecMenu.h:351
std::array< StyleSpec, StyleSpec::NUM_STATES > getStyleForElement(const std::string &type, const std::string &name="", const std::string &parent_type="")
Definition guiFormSpecMenu.cpp:5204
std::string m_formspec_string
Definition guiFormSpecMenu.h:328
void parseAllowClose(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:2875
Client * m_client
Definition guiFormSpecMenu.h:326
void regenerateGui(v2u32 screensize) override
Definition guiFormSpecMenu.cpp:2984
ISimpleTextureSource * m_tsrc
Definition guiFormSpecMenu.h:324
s16 getNextInventoryRing(const InventoryLocation &inventoryloc, const std::string &listname)
Definition guiFormSpecMenu.cpp:3931
bool doTooltipAppendItemname() const
Definition guiFormSpecMenu.h:245
void parseSize(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:290
double calculateImgsize(const parserData &data)
Definition guiFormSpecMenu.cpp:5268
ButtonEventType m_held_mouse_button
Definition guiFormSpecMenu.h:355
core::rect< s32 > getAbsoluteRect()
Definition guiFormSpecMenu.cpp:251
u16 m_left_drag_amount
Definition guiFormSpecMenu.h:358
v2u32 m_lockscreensize
Definition guiFormSpecMenu.h:373
void drawSelectedItem()
Definition guiFormSpecMenu.cpp:3461
bool m_default_allowclose
Definition guiFormSpecMenu.h:370
void parseScrollBar(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:643
void setTextDest(TextDest *text_dst)
Definition guiFormSpecMenu.h:197
StyleSpec getDefaultStyleForElement(const std::string &type, const std::string &name="", const std::string &parent_type="")
Definition guiFormSpecMenu.cpp:5199
std::string m_formspec_prepend
Definition guiFormSpecMenu.h:329
void parseModel(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:2774
video::SColor m_default_tooltip_bgcolor
Definition guiFormSpecMenu.h:379
void parseList(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:440
bool m_selected_dragging
Definition guiFormSpecMenu.h:353
void parseContainer(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:316
void parseSetFocus(parserData *, const std::string &element)
Definition guiFormSpecMenu.cpp:2760
std::unordered_map< std::string, bool > m_dropdown_index_event
Definition guiFormSpecMenu.h:340
void createTextField(parserData *data, FieldSpec &spec, core::rect< s32 > &rect, bool is_multiline)
Definition guiFormSpecMenu.cpp:1520
~GUIFormSpecMenu()
Definition guiFormSpecMenu.cpp:110
TextDest * m_text_dst
Definition guiFormSpecMenu.h:384
bool m_bgnonfullscreen
Definition guiFormSpecMenu.h:375
std::vector< std::pair< FieldSpec, gui::IGUICheckBox * > > m_checkboxes
Definition guiFormSpecMenu.h:343
void parseRealCoordinates(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:638
v2s32 getBasePos() const
Definition guiFormSpecMenu.h:293
void acceptInput(FormspecQuitMode quitmode=quit_mode_no)
Definition guiFormSpecMenu.cpp:3950
video::SColor m_fullscreen_bgcolor
Definition guiFormSpecMenu.h:378
void parseTextList(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:1262
void parseStyle(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:2617
bool parsePositionDirect(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:2498
gui::IGUIFont * m_font
Definition guiFormSpecMenu.h:516
void parseBackground(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:1083
u64 m_hovered_time
Definition guiFormSpecMenu.h:367
void parseFieldEnterAfterEdit(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:1419
bool remapClickOutside(const SEvent &event) override
Definition guiFormSpecMenu.cpp:4073
void parseTableOptions(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:1158
std::unordered_map< std::string, bool > field_close_on_enter
Definition guiFormSpecMenu.h:339
gui::IGUIElement * m_last_focused
Definition guiFormSpecMenu.h:390
ItemStack m_left_drag_stack
Definition guiFormSpecMenu.h:359
std::vector< std::pair< FieldSpec, GUIScrollBar * > > m_scrollbars
Definition guiFormSpecMenu.h:346
void parseTextArea(parserData *data, std::vector< std::string > &parts, const std::string &type)
Definition guiFormSpecMenu.cpp:1636
void parseFieldCloseOnEnter(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:1428
void setFormSource(IFormSource *form_src)
Definition guiFormSpecMenu.h:190
std::vector< FieldSpec > m_fields
Definition guiFormSpecMenu.h:341
bool parseAnchorDirect(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:2537
std::unordered_map< std::string, std::vector< StyleSpec > > theme_by_type
Definition guiFormSpecMenu.h:307
void parseLabel(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:1769
bool m_show_debug
Definition guiFormSpecMenu.h:388
void parseItemImage(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:929
ISoundManager * m_sound_manager
Definition guiFormSpecMenu.h:325
static const std::unordered_map< std::string, std::function< void(GUIFormSpecMenu *, GUIFormSpecMenu::parserData *data, const std::string &description)> > element_parsers
Definition guiFormSpecMenu.h:2903
gui::IGUIStaticText * m_tooltip_element
Definition guiFormSpecMenu.h:363
void parseBackgroundColor(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:2298
void parseTooltip(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:2377
void parseScrollBarOptions(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:718
void parsePadding(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:2598
bool m_shift_move_after_craft
Definition guiFormSpecMenu.h:356
v2f32 pos_offset
Definition guiFormSpecMenu.h:320
void parsePosition(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:2519
GUITable * getTable(const std::string &tablename)
Definition guiFormSpecMenu.cpp:232
bool preprocessEvent(const SEvent &event) override
Definition guiFormSpecMenu.cpp:4081
bool OnEvent(const SEvent &event) override
Definition guiFormSpecMenu.cpp:4203
void setDebugView(bool value)
Definition guiFormSpecMenu.h:211
std::vector< GUIInventoryList * > m_inventorylists
Definition guiFormSpecMenu.h:336
GUIInventoryList::ItemSpec getItemAtPos(v2s32 p) const
Definition guiFormSpecMenu.cpp:3449
bool m_bgfullscreen
Definition guiFormSpecMenu.h:376
void parsePwdField(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:1437
void updateSelectedItem()
Definition guiFormSpecMenu.cpp:3816
v2s32 getRealCoordinateBasePos(const std::vector< std::string > &v_pos)
Definition guiFormSpecMenu.cpp:268
void showTooltip(const std::wstring &text, const video::SColor &color, const video::SColor &bgcolor)
Definition guiFormSpecMenu.cpp:3673
void lockSize(bool lock, v2u32 basescreensize=v2u32(0, 0))
Definition guiFormSpecMenu.h:216
void parseAnimatedImage(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:863
v2s32 imgsize
Definition guiFormSpecMenu.h:318
std::vector< std::pair< gui::IGUIElement *, TooltipSpec > > m_tooltip_rects
Definition guiFormSpecMenu.h:345
const InventoryLocation & getFormspecLocation()
Definition guiFormSpecMenu.h:179
u64 m_tooltip_show_delay
Definition guiFormSpecMenu.h:365
bool doPause
Definition guiFormSpecMenu.h:272
InventoryLocation m_current_inventory_location
Definition guiFormSpecMenu.h:330
bool m_tooltip_append_itemname
Definition guiFormSpecMenu.h:366
void parseTabHeader(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:2050
bool m_is_form_regenerated
Definition guiFormSpecMenu.h:334
void removeAll()
Definition guiFormSpecMenu.cpp:2880
void setInitialFocus()
Definition guiFormSpecMenu.cpp:165
void setFocus(const std::string &elementname)
Definition guiFormSpecMenu.h:225
void parseVertLabel(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:1882
void removeTooltip()
Definition guiFormSpecMenu.cpp:156
std::vector< std::pair< std::string, GUIScrollContainer * > > m_scroll_containers
Definition guiFormSpecMenu.h:349
bool parsePaddingDirect(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:2577
std::optional< std::string > m_focused_element
Definition guiFormSpecMenu.h:387
InventoryManager * m_invmgr
Definition guiFormSpecMenu.h:323
void parseScrollContainer(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:342
static double getFixedImgsize(double screen_dpi, double gui_scaling)
Definition guiFormSpecMenu.cpp:5244
GUIFormSpecMenu(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:89
void autoScroll()
Auto-scrolls a scroll container to center the focused element.
Definition guiFormSpecMenu.cpp:3733
s32 m_tabheader_upper_edge
Definition guiFormSpecMenu.h:519
bool parseMiddleRect(const std::string &value, core::rect< s32 > *parsed_rect)
Definition guiFormSpecMenu.cpp:1054
std::vector< std::string > * getDropDownValues(const std::string &name)
Definition guiFormSpecMenu.cpp:241
void parseTable(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:1190
bool m_left_dragging
Definition guiFormSpecMenu.h:361
s32 m_old_tooltip_id
Definition guiFormSpecMenu.h:368
std::vector< std::pair< FieldSpec, GUITable * > > m_tables
Definition guiFormSpecMenu.h:342
v2f32 spacing
Definition guiFormSpecMenu.h:317
const GUIInventoryList::ItemSpec * getSelectedItem() const
Definition guiFormSpecMenu.h:235
void parseAnchor(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:2558
v2s32 getRealCoordinateGeometry(const std::vector< std::string > &v_geom)
Definition guiFormSpecMenu.cpp:274
static double getImgsize(v2u32 avail_screensize, double screen_dpi, double gui_scaling)
Definition guiFormSpecMenu.cpp:5256
v2s32 padding
Definition guiFormSpecMenu.h:316
void parseItemImageButton(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:2165
void parseElement(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:2953
std::vector< ListRingSpec > m_inventory_rings
Definition guiFormSpecMenu.h:337
bool parseSizeDirect(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:2474
bool parseVersionDirect(const std::string &data)
Definition guiFormSpecMenu.cpp:2450
v2s32 offset
Definition guiFormSpecMenu.h:319
std::string getNameByID(s32 id) override
get name of element by element id
Definition guiFormSpecMenu.cpp:5166
void setFormSpec(const std::string &formspec_string, const InventoryLocation &current_inventory_location)
Definition guiFormSpecMenu.h:170
bool m_lock
Definition guiFormSpecMenu.h:372
void parseListRing(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:528
void parseField(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:1701
void parseContainerEnd(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:332
std::vector< std::pair< GUIInventoryList::ItemSpec, ItemStack > > m_left_drag_stacks
Definition guiFormSpecMenu.h:360
void parseSimpleField(parserData *data, std::vector< std::string > &parts)
Definition guiFormSpecMenu.cpp:1592
void addHoveredItemTooltip(const std::string &name)
Definition guiFormSpecMenu.h:250
bool pausesGame() override
Definition guiFormSpecMenu.h:273
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:279
std::map< std::string, TooltipSpec > m_tooltips
Definition guiFormSpecMenu.h:344
std::vector< gui::IGUIElement * > m_clickthrough_elements
Definition guiFormSpecMenu.h:348
video::SColor m_bgcolor
Definition guiFormSpecMenu.h:377
v2s32 getElementBasePos(const std::vector< std::string > *v_pos)
Definition guiFormSpecMenu.cpp:258
void parseListColors(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:2335
bool m_allowclose
Definition guiFormSpecMenu.h:371
u16 m_selected_amount
Definition guiFormSpecMenu.h:352
void parseScrollContainerEnd(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:416
u16 m_formspec_version
Definition guiFormSpecMenu.h:386
void defaultAllowClose(bool value)
Definition guiFormSpecMenu.h:203
IFormSource * m_form_src
Definition guiFormSpecMenu.h:383
void parseButton(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:977
const FieldSpec * getSpecByID(s32 id)
Definition guiFormSpecMenu.cpp:5176
void parseCheckbox(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:563
u16 getSelectedAmount() const
Definition guiFormSpecMenu.h:240
std::unordered_map< std::string, bool > field_enter_after_edit
Definition guiFormSpecMenu.h:338
std::string m_last_formname
Definition guiFormSpecMenu.h:385
void setFormspecPrepend(const std::string &formspecPrepend)
Definition guiFormSpecMenu.h:184
std::vector< std::string > m_hovered_item_tooltips
Definition guiFormSpecMenu.h:435
video::SColor m_default_tooltip_color
Definition guiFormSpecMenu.h:380
Client * getClient() const
Definition guiFormSpecMenu.h:230
std::stack< v2f32 > container_stack
Definition guiFormSpecMenu.h:321
void drawMenu() override
Definition guiFormSpecMenu.cpp:3487
void parseImageButton(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:1960
std::unordered_map< std::string, std::vector< StyleSpec > > theme_by_name
Definition guiFormSpecMenu.h:308
std::vector< std::pair< FieldSpec, std::vector< std::string > > > m_dropdowns
Definition guiFormSpecMenu.h:347
static void create(GUIFormSpecMenu *&cur_formspec, Client *client, gui::IGUIEnvironment *guienv, IFormSource *fs_src, TextDest *txt_dest, const std::string &formspecPrepend, ISoundManager *sound_manager)
Definition guiFormSpecMenu.cpp:118
void parseBox(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:2239
GUIModalMenu(gui::IGUIEnvironment *env, gui::IGUIElement *parent, s32 id, IMenuManager *menumgr, bool remap_dbl_click=true)
Definition modalMenu.cpp:34
v2u32 m_screensize_old
Definition modalMenu.h:68
Definition guiScrollContainer.h:10
Definition guiTable.h:39
std::vector< Option > TableOptions
Definition guiTable.h:71
std::vector< TableColumn > TableColumns
Definition guiTable.h:81
Definition guiFormSpecMenu.h:76
virtual std::string resolveText(const std::string &str)
Definition guiFormSpecMenu.h:81
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 StyleSpec.h:18
gui::IGUIEnvironment * guienv
Definition clientlauncher.cpp:36
FormspecFieldType
Definition guiFormSpecMenu.h:31
@ f_Box
Definition guiFormSpecMenu.h:38
@ f_CheckBox
Definition guiFormSpecMenu.h:35
@ f_Table
Definition guiFormSpecMenu.h:33
@ f_ScrollBar
Definition guiFormSpecMenu.h:37
@ f_ItemImage
Definition guiFormSpecMenu.h:39
@ f_Unknown
Definition guiFormSpecMenu.h:42
@ f_DropDown
Definition guiFormSpecMenu.h:36
@ f_TabHeader
Definition guiFormSpecMenu.h:34
@ f_AnimatedImage
Definition guiFormSpecMenu.h:41
@ f_Button
Definition guiFormSpecMenu.h:32
@ f_HyperText
Definition guiFormSpecMenu.h:40
FormspecQuitMode
Definition guiFormSpecMenu.h:45
@ quit_mode_cancel
Definition guiFormSpecMenu.h:48
@ quit_mode_accept
Definition guiFormSpecMenu.h:47
@ quit_mode_try
Definition guiFormSpecMenu.h:49
@ quit_mode_no
Definition guiFormSpecMenu.h:46
ButtonEventType
Definition guiFormSpecMenu.h:53
@ BET_RIGHT
Definition guiFormSpecMenu.h:55
@ BET_DOWN
Definition guiFormSpecMenu.h:60
@ BET_MIDDLE
Definition guiFormSpecMenu.h:56
@ BET_WHEEL_UP
Definition guiFormSpecMenu.h:57
@ BET_OTHER
Definition guiFormSpecMenu.h:62
@ BET_UP
Definition guiFormSpecMenu.h:59
@ BET_LEFT
Definition guiFormSpecMenu.h:54
@ BET_WHEEL_DOWN
Definition guiFormSpecMenu.h:58
@ BET_MOVE
Definition guiFormSpecMenu.h:61
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
Definition al_extensions.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:102
bool send
Definition guiFormSpecMenu.h:125
f32 aux_f32
Definition guiFormSpecMenu.h:132
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:126
bool is_exit
Definition guiFormSpecMenu.h:127
std::string url
Definition guiFormSpecMenu.h:123
std::wstring fdefault
Definition guiFormSpecMenu.h:122
std::string fname
Definition guiFormSpecMenu.h:120
s32 fid
Definition guiFormSpecMenu.h:124
std::wstring flabel
Definition guiFormSpecMenu.h:121
gui::ECURSOR_ICON fcursor_icon
Definition guiFormSpecMenu.h:130
int priority
Definition guiFormSpecMenu.h:129
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
std::wstring tooltip
Definition guiFormSpecMenu.h:146
video::SColor color
Definition guiFormSpecMenu.h:148
video::SColor bgcolor
Definition guiFormSpecMenu.h:147
TooltipSpec(const std::wstring &a_tooltip, video::SColor a_bgcolor, video::SColor a_color)
Definition guiFormSpecMenu.h:138
Definition guiFormSpecMenu.h:427
bool key_down
Definition guiFormSpecMenu.h:429
bool key_up
Definition guiFormSpecMenu.h:428
bool key_enter
Definition guiFormSpecMenu.h:430
Definition guiFormSpecMenu.h:392
v2f invsize
Definition guiFormSpecMenu.h:396
GUITable::TableColumns table_columns
Definition guiFormSpecMenu.h:405
gui::IGUIElement * current_parent
Definition guiFormSpecMenu.h:406
struct GUIFormSpecMenu::parserData::@135275212320055041207276377017315320240115251121 scrollbar_options
v2s32 basepos
Definition guiFormSpecMenu.h:402
v2u32 screensize
Definition guiFormSpecMenu.h:403
v2f32 anchor
Definition guiFormSpecMenu.h:399
GUITable::TableOptions table_options
Definition guiFormSpecMenu.h:404
bool real_coordinates
Definition guiFormSpecMenu.h:394
s32 thumb_size
Definition guiFormSpecMenu.h:416
s32 max
Definition guiFormSpecMenu.h:412
v2s32 size
Definition guiFormSpecMenu.h:397
std::string type
Definition guiFormSpecMenu.h:422
v2f32 offset
Definition guiFormSpecMenu.h:398
GUIScrollBar::ArrowVisibility arrow_visiblity
Definition guiFormSpecMenu.h:417
bool explicit_size
Definition guiFormSpecMenu.h:393
s32 small_step
Definition guiFormSpecMenu.h:414
s32 min
Definition guiFormSpecMenu.h:413
v2f32 padding
Definition guiFormSpecMenu.h:400
u8 simple_field_count
Definition guiFormSpecMenu.h:395
GUIInventoryList::Options inventorylist_options
Definition guiFormSpecMenu.h:409
core::rect< s32 > rect
Definition guiFormSpecMenu.h:401
irr_ptr< gui::IGUIElement > background_parent
Definition guiFormSpecMenu.h:407
std::unordered_map< std::string, GUITable::DynamicData > table_dyndata
Definition guiFormSpecMenu.h:421
s32 large_step
Definition guiFormSpecMenu.h:415
Definition guiInventoryList.h:19
Definition guiInventoryList.h:48
Definition inventorymanager.h:18
Definition inventory.h:21
Definition guiFormSpecMenu.h:66
virtual void gotText(const StringMap &fields)=0
virtual void requestScreenshot()
Definition guiFormSpecMenu.h:70
virtual ~TextDest()=default
std::string m_formname
Definition guiFormSpecMenu.h:72
static std::string p(std::string path)
Definition test_filesys.cpp:66