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 "guiHyperText.h"
18#include "guiInventoryList.h"
19#include "guiScrollBar.h"
20#include "guiTable.h"
21#include "util/string.h"
23#include "StyleSpec.h"
24#include <ICursorControl.h> // gui::ECURSOR_ICON
25#include <IGUIStaticText.h>
26
29class Client;
30class GUIHyperText;
32class ISoundManager;
33
47
54
67
69{
70 virtual ~TextDest() = default;
71
72 virtual void gotText(const StringMap &fields) = 0;
73 virtual void requestScreenshot() {}
74
75 std::string m_formname;
76};
77
79{
80public:
81 virtual ~IFormSource() = default;
82 virtual const std::string &getForm() const = 0;
83 // Fill in variables in field text
84 virtual std::string resolveText(const std::string &str) { return str; }
85};
86
88{
90 {
91 ListRingSpec() = default;
92
93 ListRingSpec(const InventoryLocation &a_inventoryloc,
94 const std::string &a_listname):
95 inventoryloc(a_inventoryloc),
96 listname(a_listname)
97 {
98 }
99
101 std::string listname;
102 };
103
105 {
106 FieldSpec() = default;
107
108 FieldSpec(const std::string &name, const std::wstring &label,
109 const std::wstring &default_text, s32 id, int priority = 0,
110 gui::ECURSOR_ICON cursor_icon = ECI_NORMAL) :
111 fname(name),
112 flabel(label),
114 fid(id),
115 send(false),
117 is_exit(false),
119 fcursor_icon(cursor_icon)
120 {
121 }
122
123 std::string fname;
124 std::wstring flabel;
125 std::wstring fdefault;
126 std::string url;
127 s32 fid;
128 bool send;
131 // Draw priority for formspec version < 3
133 gui::ECURSOR_ICON fcursor_icon;
134 std::string sound;
135 f32 aux_f32 = 0;
136 };
137
139 {
140 TooltipSpec() = default;
141 TooltipSpec(const std::wstring &a_tooltip, video::SColor a_bgcolor,
142 video::SColor a_color):
143 tooltip(translate_string(a_tooltip)),
144 bgcolor(a_bgcolor),
145 color(a_color)
146 {
147 }
148
149 std::wstring tooltip;
150 video::SColor bgcolor;
151 video::SColor color;
152 };
153
155 {
156 HyperTipSpec() = default;
157 HyperTipSpec(const std::string &a_name,
158 const std::string &a_parent_name,
159 const std::string &a_text,
160 const core::rect<s32> &a_rect,
161 v2s32 a_stpos,
162 s32 a_width,
163 bool a_floating) :
164 name(a_name),
165 parent_name(a_parent_name),
166 text(a_text),
167 hover_rect(a_rect),
168 stpos(a_stpos),
169 width(a_width),
170 floating(a_floating)
171 {
172 }
173
174 std::string name;
175 std::string parent_name;
176 std::string text;
177 core::rect<s32> hover_rect;
179 s32 width;
180 bool floating;
181 bool bound = false;
182 };
183
184public:
185 GUIFormSpecMenu(gui::IGUIElement* parent, s32 id,
186 IMenuManager *menumgr,
187 Client *client,
188 gui::IGUIEnvironment *guienv,
190 ISoundManager *sound_manager,
191 IFormSource* fs_src,
192 TextDest* txt_dst,
193 const std::string &formspecPrepend,
194 bool remap_dbl_click = true);
195
197
198 static void create(GUIFormSpecMenu *&cur_formspec, Client *client,
199 gui::IGUIEnvironment *guienv, IFormSource *fs_src,
200 TextDest *txt_dest, const std::string &formspecPrepend,
201 ISoundManager *sound_manager);
202
203 void setFormSpec(const std::string &formspec_string,
204 const InventoryLocation &current_inventory_location)
205 {
206 m_formspec_string = formspec_string;
207 m_current_inventory_location = current_inventory_location;
208 m_is_form_regenerated = false;
210 }
211
216
217 void setFormspecPrepend(const std::string &formspecPrepend)
218 {
219 m_formspec_prepend = formspecPrepend;
220 }
221
222 // form_src is deleted by this GUIFormSpecMenu
224 {
225 delete m_form_src;
226 m_form_src = form_src;
227 }
228
229 // text_dst is deleted by this GUIFormSpecMenu
230 void setTextDest(TextDest *text_dst)
231 {
232 delete m_text_dst;
233 m_text_dst = text_dst;
234 }
235
236 void defaultAllowClose(bool value)
237 {
238 // Also set m_allowclose here in order to have the correct value if
239 // escape is pressed before regenerateGui() is called.
240 m_default_allowclose = value;
241 m_allowclose = value;
242 }
243
244 void setDebugView(bool value)
245 {
246 m_show_debug = value;
247 }
248
249 void lockSize(bool lock,v2u32 basescreensize=v2u32(0,0))
250 {
251 m_lock = lock;
252 m_lockscreensize = basescreensize;
253 }
254
255 void removeTooltip();
256 void setInitialFocus();
257
258 void setFocus(const std::string &elementname)
259 {
260 m_focused_element = elementname;
261 }
262
264 {
265 return m_client;
266 }
267
269 {
270 return m_selected_item.get();
271 }
272
274 {
275 return m_selected_amount;
276 }
277
279 {
281 }
282
283 void addHoveredItemTooltip(const std::string &name)
284 {
285 m_hovered_item_tooltips.emplace_back(name);
286 }
287
288 /*
289 Remove and re-add (or reposition) stuff
290 */
291 void regenerateGui(v2u32 screensize) override;
292
294 void drawSelectedItem();
295 void drawMenu() override;
296 void updateSelectedItem();
298
299 s16 getNextInventoryRing(const InventoryLocation &inventoryloc, const std::string &listname);
300
302 bool preprocessEvent(const SEvent& event) override;
303 bool OnEvent(const SEvent& event) override;
304
305 bool doPause = false;
306 bool pausesGame() override { return doPause; }
307
308 GUITable* getTable(const std::string &tablename);
309 std::vector<std::string>* getDropDownValues(const std::string &name);
310
311 // This will only return a meaningful value if called after drawMenu().
312 core::rect<s32> getAbsoluteRect();
313
314#ifdef __ANDROID__
315 void getAndroidUIInput();
316#endif
317
318 // Returns the fixed formspec coordinate size for the given parameters.
319 static double getFixedImgsize(double screen_dpi, double gui_scaling);
320 // Returns the preferred non-fixed formspec coordinate size for the given parameters.
321 static double getImgsize(v2u32 avail_screensize, double screen_dpi, double gui_scaling);
322
323protected:
324 bool remapClickOutside(const SEvent &event) override;
325
327 {
328 return padding + offset + AbsoluteRect.UpperLeftCorner;
329 }
330
331 std::wstring getLabelByID(s32 id) override;
332 std::string getNameByID(s32 id) override;
333 const FieldSpec *getSpecByID(s32 id);
334 v2s32 getElementBasePos(const std::vector<std::string> *v_pos);
335 v2s32 getRealCoordinateBasePos(const std::vector<std::string> &v_pos);
336 v2s32 getRealCoordinateGeometry(const std::vector<std::string> &v_geom);
337 bool precheckElement(const std::string &name, const std::string &element,
338 size_t args_min, size_t args_max, std::vector<std::string> &parts);
339
340 std::unordered_map<std::string, std::vector<StyleSpec>> theme_by_type;
341 std::unordered_map<std::string, std::vector<StyleSpec>> theme_by_name;
342 std::unordered_set<std::string> property_warned;
343
344 StyleSpec getDefaultStyleForElement(const std::string &type,
345 const std::string &name="", const std::string &parent_type="");
346 std::array<StyleSpec, StyleSpec::NUM_STATES> getStyleForElement(const std::string &type,
347 const std::string &name="", const std::string &parent_type="");
348
354 std::stack<v2f32> container_stack;
355
360
361 std::string m_formspec_string;
364
365 // Default true because we can't control regeneration on resizing, but
366 // we can control cases when the formspec is shown intentionally.
368
369 std::vector<GUIInventoryList *> m_inventorylists;
370 std::vector<ListRingSpec> m_inventory_rings;
371 std::unordered_map<std::string, bool> field_enter_after_edit;
372 std::unordered_map<std::string, bool> field_close_on_enter;
373 std::unordered_map<std::string, bool> m_dropdown_index_event;
374 std::vector<FieldSpec> m_fields;
375 std::vector<std::pair<FieldSpec, GUITable *>> m_tables;
376 std::vector<std::pair<FieldSpec, gui::IGUICheckBox *>> m_checkboxes;
377 std::map<std::string, TooltipSpec> m_tooltips;
378 std::vector<std::pair<GUIHyperText *, HyperTipSpec>> m_hypertips;
379 std::map<std::string, HyperTipSpec> m_hypertip_map;
380 std::vector<std::pair<gui::IGUIElement *, TooltipSpec>> m_tooltip_rects;
381 std::vector<std::pair<FieldSpec, GUIScrollBar *>> m_scrollbars;
382 std::vector<std::pair<FieldSpec, std::vector<std::string>>> m_dropdowns;
383 std::vector<gui::IGUIElement *> m_clickthrough_elements;
384 std::vector<std::pair<std::string, GUIScrollContainer *>> m_scroll_containers;
385
386 std::unique_ptr<GUIInventoryList::ItemSpec> m_selected_item;
392
395 std::vector<std::pair<GUIInventoryList::ItemSpec, ItemStack>> m_left_drag_stacks;
396 bool m_left_dragging = false;
397
398 gui::IGUIStaticText *m_tooltip_element = nullptr;
399
404
406 bool m_allowclose = true;
407 bool m_lock = false;
409
412 video::SColor m_bgcolor;
413 video::SColor m_fullscreen_bgcolor;
416
417private:
420 std::string m_last_formname;
422 std::optional<std::string> m_focused_element = std::nullopt;
423 bool m_show_debug = false;
424 bool m_show_focus = false;
425 gui::IGUIElement *m_last_focused = nullptr;
426
427 struct parserData {
436 core::rect<s32> rect;
441 gui::IGUIElement *current_parent = nullptr;
442 irr_ptr<gui::IGUIElement> background_parent;
443
445
446 struct {
447 s32 max = 1000;
448 s32 min = 0;
449 s32 small_step = 10;
450 s32 large_step = 100;
451 s32 thumb_size = 1;
452 GUIScrollBar::ArrowVisibility arrow_visiblity = GUIScrollBar::DEFAULT;
454
455 // used to restore table selection/scroll/treeview state
456 std::unordered_map<std::string, GUITable::DynamicData> table_dyndata;
457 std::string type;
458 };
459
460 static const std::unordered_map<std::string, std::function<void(GUIFormSpecMenu*, GUIFormSpecMenu::parserData *data, const std::string &description)>> element_parsers;
461
463 bool key_up;
466 };
467
470 std::vector<std::string> m_hovered_item_tooltips;
471
472 void removeAll();
473
474 void parseElement(parserData* data, const std::string &element);
475
476 void parseSize(parserData* data, const std::string &element);
477 void parseContainer(parserData* data, const std::string &element);
478 void parseContainerEnd(parserData* data, const std::string &element);
479 void parseScrollContainer(parserData *data, const std::string &element);
480 void parseScrollContainerEnd(parserData *data, const std::string &element);
481 void parseList(parserData* data, const std::string &element);
482 void parseListRing(parserData* data, const std::string &element);
483 void parseCheckbox(parserData* data, const std::string &element);
484 void parseImage(parserData* data, const std::string &element);
485 void parseAnimatedImage(parserData *data, const std::string &element);
486 void parseItemImage(parserData* data, const std::string &element);
487 void parseButton(parserData* data, const std::string &element);
488 void parseBackground(parserData* data, const std::string &element);
489 void parseTableOptions(parserData* data, const std::string &element);
490 void parseTableColumns(parserData* data, const std::string &element);
491 void parseTable(parserData* data, const std::string &element);
492 void parseTextList(parserData* data, const std::string &element);
493 void parseDropDown(parserData* data, const std::string &element);
494 void parseFieldEnterAfterEdit(parserData *data, const std::string &element);
495 void parseFieldCloseOnEnter(parserData *data, const std::string &element);
496 void parsePwdField(parserData* data, const std::string &element);
497 void parseField(parserData* data, const std::string &element);
498 void createTextField(parserData *data, FieldSpec &spec,
499 core::rect<s32> &rect, bool is_multiline);
500 void parseSimpleField(parserData* data,std::vector<std::string> &parts);
501 void parseTextArea(parserData* data,std::vector<std::string>& parts,
502 const std::string &type);
503 void parseHyperText(parserData *data, const std::string &element);
504 void parseHyperTip(parserData *data, const std::string &element);
505 void parseLabel(parserData* data, const std::string &element);
506 void parseVertLabel(parserData* data, const std::string &element);
507 void parseImageButton(parserData* data, const std::string &element);
508 void parseItemImageButton(parserData* data, const std::string &element);
509 void parseTabHeader(parserData* data, const std::string &element);
510 void parseBox(parserData* data, const std::string &element);
511 void parseBackgroundColor(parserData* data, const std::string &element);
512 void parseListColors(parserData* data, const std::string &element);
513 void parseTooltip(parserData* data, const std::string &element);
514 bool parseVersionDirect(const std::string &data);
515 bool parseSizeDirect(parserData* data, const std::string &element);
516 void parseRealCoordinates(parserData* data, const std::string &element);
517 void parseScrollBar(parserData* data, const std::string &element);
518 void parseScrollBarOptions(parserData *data, const std::string &element);
519 bool parsePositionDirect(parserData *data, const std::string &element);
520 void parsePosition(parserData *data, const std::string &element);
521 bool parseAnchorDirect(parserData *data, const std::string &element);
522 void parseAnchor(parserData *data, const std::string &element);
523 bool parsePaddingDirect(parserData *data, const std::string &element);
524 void parsePadding(parserData *data, const std::string &element);
525 void parseStyle(parserData *data, const std::string &element);
526 void parseSetFocus(parserData *, const std::string &element);
527 void parseModel(parserData *data, const std::string &element);
528 void parseAllowClose(parserData *data, const std::string &element);
529
530 bool parseMiddleRect(const std::string &value, core::rect<s32> *parsed_rect);
531
532 void tryClose();
533 void trySubmitClose();
534
535 void positionTooltip(s32 tooltip_width, s32 tooltip_height, s32 &tooltip_x, s32 &tooltip_y);
536
537 void showTooltip(const std::wstring &text, const video::SColor &color,
538 const video::SColor &bgcolor);
539 void showHyperTip(GUIHyperText *e, const HyperTipSpec &spec);
540
541 gui::IGUIStaticText *addLabel(const EnrichedString &text, const core::rect<s32> &rect,
542 gui::IGUIElement *parent, const StyleSpec &style, bool word_wrap = true, s32 id = 0);
543
548 void autoScroll();
549
555 void legacySortElements(std::list<IGUIElement *>::iterator from);
556
558 gui::IGUIFont *m_font = nullptr;
559
560 // used by getAbsoluteRect
562
563 // Determines the size (in pixels) of formspec coordinate units.
564 double calculateImgsize(const parserData &data);
565};
566
568{
569public:
570 FormspecFormSource(const std::string &formspec):
571 m_formspec(formspec)
572 {
573 }
574
576
577 void setForm(const std::string &formspec)
578 {
579 m_formspec = formspec;
580 }
581
582 const std::string &getForm() const
583 {
584 return m_formspec;
585 }
586
587 std::string m_formspec;
588};
Definition client.h:107
Definition enriched_string.h:27
const std::string & getForm() const
Definition guiFormSpecMenu.h:582
FormspecFormSource(const std::string &formspec)
Definition guiFormSpecMenu.h:570
void setForm(const std::string &formspec)
Definition guiFormSpecMenu.h:577
~FormspecFormSource()=default
std::string m_formspec
Definition guiFormSpecMenu.h:587
std::unordered_set< std::string > property_warned
Definition guiFormSpecMenu.h:342
int m_btn_height
Definition guiFormSpecMenu.h:557
ItemStack m_selected_swap
Definition guiFormSpecMenu.h:389
std::string current_field_enter_pending
Definition guiFormSpecMenu.h:469
fs_key_pending current_keys_pending
Definition guiFormSpecMenu.h:468
void legacySortElements(std::list< IGUIElement * >::iterator from)
In formspec version < 2 the elements were not ordered properly.
Definition guiFormSpecMenu.cpp:3548
ItemStack verifySelectedItem()
Definition guiFormSpecMenu.cpp:4196
std::wstring getLabelByID(s32 id) override
get label of element by id
Definition guiFormSpecMenu.cpp:5493
void parseHyperText(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:1756
void parseTableColumns(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:1204
void trySubmitClose()
Definition guiFormSpecMenu.cpp:4497
void tryClose()
Definition guiFormSpecMenu.cpp:4486
void parseImage(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:805
void parseDropDown(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:1372
bool m_show_focus
Definition guiFormSpecMenu.h:424
void positionTooltip(s32 tooltip_width, s32 tooltip_height, s32 &tooltip_x, s32 &tooltip_y)
Definition guiFormSpecMenu.cpp:3920
std::unique_ptr< GUIInventoryList::ItemSpec > m_selected_item
Definition guiFormSpecMenu.h:386
std::array< StyleSpec, StyleSpec::NUM_STATES > getStyleForElement(const std::string &type, const std::string &name="", const std::string &parent_type="")
Definition guiFormSpecMenu.cpp:5507
std::string m_formspec_string
Definition guiFormSpecMenu.h:361
void parseAllowClose(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:3052
Client * m_client
Definition guiFormSpecMenu.h:359
void regenerateGui(v2u32 screensize) override
Definition guiFormSpecMenu.cpp:3161
ISimpleTextureSource * m_tsrc
Definition guiFormSpecMenu.h:357
s16 getNextInventoryRing(const InventoryLocation &inventoryloc, const std::string &listname)
Definition guiFormSpecMenu.cpp:4235
bool doTooltipAppendItemname() const
Definition guiFormSpecMenu.h:278
void parseSize(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:324
double calculateImgsize(const parserData &data)
Definition guiFormSpecMenu.cpp:5571
ButtonEventType m_held_mouse_button
Definition guiFormSpecMenu.h:390
core::rect< s32 > getAbsoluteRect()
Definition guiFormSpecMenu.cpp:275
u16 m_left_drag_amount
Definition guiFormSpecMenu.h:393
v2u32 m_lockscreensize
Definition guiFormSpecMenu.h:408
void drawSelectedItem()
Definition guiFormSpecMenu.cpp:3659
bool m_default_allowclose
Definition guiFormSpecMenu.h:405
void parseScrollBar(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:677
void setTextDest(TextDest *text_dst)
Definition guiFormSpecMenu.h:230
StyleSpec getDefaultStyleForElement(const std::string &type, const std::string &name="", const std::string &parent_type="")
Definition guiFormSpecMenu.cpp:5502
std::string m_formspec_prepend
Definition guiFormSpecMenu.h:362
void parseModel(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:2951
video::SColor m_default_tooltip_bgcolor
Definition guiFormSpecMenu.h:414
void parseList(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:474
bool m_selected_dragging
Definition guiFormSpecMenu.h:388
void parseContainer(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:350
void parseSetFocus(parserData *, const std::string &element)
Definition guiFormSpecMenu.cpp:2937
std::unordered_map< std::string, bool > m_dropdown_index_event
Definition guiFormSpecMenu.h:373
void createTextField(parserData *data, FieldSpec &spec, core::rect< s32 > &rect, bool is_multiline)
Definition guiFormSpecMenu.cpp:1554
~GUIFormSpecMenu()
Definition guiFormSpecMenu.cpp:134
TextDest * m_text_dst
Definition guiFormSpecMenu.h:419
bool m_bgnonfullscreen
Definition guiFormSpecMenu.h:410
std::vector< std::pair< FieldSpec, gui::IGUICheckBox * > > m_checkboxes
Definition guiFormSpecMenu.h:376
void parseRealCoordinates(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:672
v2s32 getBasePos() const
Definition guiFormSpecMenu.h:326
void acceptInput(FormspecQuitMode quitmode=quit_mode_no)
Definition guiFormSpecMenu.cpp:4254
video::SColor m_fullscreen_bgcolor
Definition guiFormSpecMenu.h:413
void parseTextList(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:1296
void parseStyle(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:2794
bool parsePositionDirect(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:2675
gui::IGUIFont * m_font
Definition guiFormSpecMenu.h:558
void parseBackground(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:1117
u64 m_hovered_time
Definition guiFormSpecMenu.h:402
void parseFieldEnterAfterEdit(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:1453
bool remapClickOutside(const SEvent &event) override
Definition guiFormSpecMenu.cpp:4377
void parseTableOptions(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:1192
std::unordered_map< std::string, bool > field_close_on_enter
Definition guiFormSpecMenu.h:372
gui::IGUIElement * m_last_focused
Definition guiFormSpecMenu.h:425
ItemStack m_left_drag_stack
Definition guiFormSpecMenu.h:394
gui::IGUIStaticText * addLabel(const EnrichedString &text, const core::rect< s32 > &rect, gui::IGUIElement *parent, const StyleSpec &style, bool word_wrap=true, s32 id=0)
Definition guiFormSpecMenu.cpp:303
std::map< std::string, HyperTipSpec > m_hypertip_map
Definition guiFormSpecMenu.h:379
std::vector< std::pair< FieldSpec, GUIScrollBar * > > m_scrollbars
Definition guiFormSpecMenu.h:381
void parseTextArea(parserData *data, std::vector< std::string > &parts, const std::string &type)
Definition guiFormSpecMenu.cpp:1679
void parseFieldCloseOnEnter(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:1462
void setFormSource(IFormSource *form_src)
Definition guiFormSpecMenu.h:223
std::vector< FieldSpec > m_fields
Definition guiFormSpecMenu.h:374
bool parseAnchorDirect(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:2714
std::unordered_map< std::string, std::vector< StyleSpec > > theme_by_type
Definition guiFormSpecMenu.h:340
void parseLabel(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:1948
bool m_show_debug
Definition guiFormSpecMenu.h:423
void parseItemImage(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:963
ISoundManager * m_sound_manager
Definition guiFormSpecMenu.h:358
static const std::unordered_map< std::string, std::function< void(GUIFormSpecMenu *, GUIFormSpecMenu::parserData *data, const std::string &description)> > element_parsers
Definition guiFormSpecMenu.h:3080
gui::IGUIStaticText * m_tooltip_element
Definition guiFormSpecMenu.h:398
void parseBackgroundColor(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:2468
void parseTooltip(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:2547
void parseScrollBarOptions(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:752
void parsePadding(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:2775
bool m_shift_move_after_craft
Definition guiFormSpecMenu.h:391
v2f32 pos_offset
Definition guiFormSpecMenu.h:353
void parsePosition(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:2696
GUITable * getTable(const std::string &tablename)
Definition guiFormSpecMenu.cpp:256
bool preprocessEvent(const SEvent &event) override
Definition guiFormSpecMenu.cpp:4385
bool OnEvent(const SEvent &event) override
Definition guiFormSpecMenu.cpp:4507
void setDebugView(bool value)
Definition guiFormSpecMenu.h:244
std::vector< GUIInventoryList * > m_inventorylists
Definition guiFormSpecMenu.h:369
GUIInventoryList::ItemSpec getItemAtPos(v2s32 p) const
Definition guiFormSpecMenu.cpp:3647
bool m_bgfullscreen
Definition guiFormSpecMenu.h:411
void parsePwdField(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:1471
void updateSelectedItem()
Definition guiFormSpecMenu.cpp:4117
v2s32 getRealCoordinateBasePos(const std::vector< std::string > &v_pos)
Definition guiFormSpecMenu.cpp:292
std::vector< std::pair< GUIHyperText *, HyperTipSpec > > m_hypertips
Definition guiFormSpecMenu.h:378
void showTooltip(const std::wstring &text, const video::SColor &color, const video::SColor &bgcolor)
Definition guiFormSpecMenu.cpp:3938
void lockSize(bool lock, v2u32 basescreensize=v2u32(0, 0))
Definition guiFormSpecMenu.h:249
void parseAnimatedImage(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:897
v2s32 imgsize
Definition guiFormSpecMenu.h:351
std::vector< std::pair< gui::IGUIElement *, TooltipSpec > > m_tooltip_rects
Definition guiFormSpecMenu.h:380
const InventoryLocation & getFormspecLocation()
Definition guiFormSpecMenu.h:212
u64 m_tooltip_show_delay
Definition guiFormSpecMenu.h:400
bool doPause
Definition guiFormSpecMenu.h:305
InventoryLocation m_current_inventory_location
Definition guiFormSpecMenu.h:363
bool m_tooltip_append_itemname
Definition guiFormSpecMenu.h:401
void parseTabHeader(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:2220
bool m_is_form_regenerated
Definition guiFormSpecMenu.h:367
void removeAll()
Definition guiFormSpecMenu.cpp:3057
void setInitialFocus()
Definition guiFormSpecMenu.cpp:189
void setFocus(const std::string &elementname)
Definition guiFormSpecMenu.h:258
void parseVertLabel(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:2058
void removeTooltip()
Definition guiFormSpecMenu.cpp:180
std::vector< std::pair< std::string, GUIScrollContainer * > > m_scroll_containers
Definition guiFormSpecMenu.h:384
bool parsePaddingDirect(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:2754
std::optional< std::string > m_focused_element
Definition guiFormSpecMenu.h:422
InventoryManager * m_invmgr
Definition guiFormSpecMenu.h:356
void parseScrollContainer(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:376
static double getFixedImgsize(double screen_dpi, double gui_scaling)
Definition guiFormSpecMenu.cpp:5547
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:113
void autoScroll()
Auto-scrolls a scroll container to center the focused element.
Definition guiFormSpecMenu.cpp:3990
s32 m_tabheader_upper_edge
Definition guiFormSpecMenu.h:561
bool parseMiddleRect(const std::string &value, core::rect< s32 > *parsed_rect)
Definition guiFormSpecMenu.cpp:1088
std::vector< std::string > * getDropDownValues(const std::string &name)
Definition guiFormSpecMenu.cpp:265
void parseTable(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:1224
bool m_left_dragging
Definition guiFormSpecMenu.h:396
s32 m_old_tooltip_id
Definition guiFormSpecMenu.h:403
std::vector< std::pair< FieldSpec, GUITable * > > m_tables
Definition guiFormSpecMenu.h:375
v2f32 spacing
Definition guiFormSpecMenu.h:350
const GUIInventoryList::ItemSpec * getSelectedItem() const
Definition guiFormSpecMenu.h:268
void parseAnchor(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:2735
v2s32 getRealCoordinateGeometry(const std::vector< std::string > &v_geom)
Definition guiFormSpecMenu.cpp:298
static double getImgsize(v2u32 avail_screensize, double screen_dpi, double gui_scaling)
Definition guiFormSpecMenu.cpp:5559
void showHyperTip(GUIHyperText *e, const HyperTipSpec &spec)
Definition guiFormSpecMenu.cpp:4074
v2s32 padding
Definition guiFormSpecMenu.h:349
void parseItemImageButton(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:2335
void parseElement(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:3131
std::vector< ListRingSpec > m_inventory_rings
Definition guiFormSpecMenu.h:370
bool parseSizeDirect(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:2651
bool parseVersionDirect(const std::string &data)
Definition guiFormSpecMenu.cpp:2627
v2s32 offset
Definition guiFormSpecMenu.h:352
std::string getNameByID(s32 id) override
get name of element by element id
Definition guiFormSpecMenu.cpp:5469
void setFormSpec(const std::string &formspec_string, const InventoryLocation &current_inventory_location)
Definition guiFormSpecMenu.h:203
bool m_lock
Definition guiFormSpecMenu.h:407
void parseListRing(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:562
void parseField(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:1741
void parseContainerEnd(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:366
std::vector< std::pair< GUIInventoryList::ItemSpec, ItemStack > > m_left_drag_stacks
Definition guiFormSpecMenu.h:395
void parseSimpleField(parserData *data, std::vector< std::string > &parts)
Definition guiFormSpecMenu.cpp:1635
void addHoveredItemTooltip(const std::string &name)
Definition guiFormSpecMenu.h:283
bool pausesGame() override
Definition guiFormSpecMenu.h:306
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:313
std::map< std::string, TooltipSpec > m_tooltips
Definition guiFormSpecMenu.h:377
std::vector< gui::IGUIElement * > m_clickthrough_elements
Definition guiFormSpecMenu.h:383
video::SColor m_bgcolor
Definition guiFormSpecMenu.h:412
v2s32 getElementBasePos(const std::vector< std::string > *v_pos)
Definition guiFormSpecMenu.cpp:282
void parseListColors(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:2505
bool m_allowclose
Definition guiFormSpecMenu.h:406
u16 m_selected_amount
Definition guiFormSpecMenu.h:387
void parseScrollContainerEnd(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:450
u16 m_formspec_version
Definition guiFormSpecMenu.h:421
void defaultAllowClose(bool value)
Definition guiFormSpecMenu.h:236
IFormSource * m_form_src
Definition guiFormSpecMenu.h:418
void parseButton(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:1011
const FieldSpec * getSpecByID(s32 id)
Definition guiFormSpecMenu.cpp:5479
void parseCheckbox(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:597
u16 getSelectedAmount() const
Definition guiFormSpecMenu.h:273
std::unordered_map< std::string, bool > field_enter_after_edit
Definition guiFormSpecMenu.h:371
std::string m_last_formname
Definition guiFormSpecMenu.h:420
void setFormspecPrepend(const std::string &formspecPrepend)
Definition guiFormSpecMenu.h:217
std::vector< std::string > m_hovered_item_tooltips
Definition guiFormSpecMenu.h:470
video::SColor m_default_tooltip_color
Definition guiFormSpecMenu.h:415
Client * getClient() const
Definition guiFormSpecMenu.h:263
std::stack< v2f32 > container_stack
Definition guiFormSpecMenu.h:354
void drawMenu() override
Definition guiFormSpecMenu.cpp:3685
void parseImageButton(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:2130
void parseHyperTip(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:1812
std::unordered_map< std::string, std::vector< StyleSpec > > theme_by_name
Definition guiFormSpecMenu.h:341
std::vector< std::pair< FieldSpec, std::vector< std::string > > > m_dropdowns
Definition guiFormSpecMenu.h:382
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:142
void parseBox(parserData *data, const std::string &element)
Definition guiFormSpecMenu.cpp:2409
Definition guiHyperText.h:194
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:79
virtual std::string resolveText(const std::string &str)
Definition guiFormSpecMenu.h:84
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:34
@ f_Box
Definition guiFormSpecMenu.h:41
@ f_CheckBox
Definition guiFormSpecMenu.h:38
@ f_Table
Definition guiFormSpecMenu.h:36
@ f_ScrollBar
Definition guiFormSpecMenu.h:40
@ f_ItemImage
Definition guiFormSpecMenu.h:42
@ f_Unknown
Definition guiFormSpecMenu.h:45
@ f_DropDown
Definition guiFormSpecMenu.h:39
@ f_TabHeader
Definition guiFormSpecMenu.h:37
@ f_AnimatedImage
Definition guiFormSpecMenu.h:44
@ f_Button
Definition guiFormSpecMenu.h:35
@ f_HyperText
Definition guiFormSpecMenu.h:43
FormspecQuitMode
Definition guiFormSpecMenu.h:48
@ quit_mode_cancel
Definition guiFormSpecMenu.h:51
@ quit_mode_accept
Definition guiFormSpecMenu.h:50
@ quit_mode_try
Definition guiFormSpecMenu.h:52
@ quit_mode_no
Definition guiFormSpecMenu.h:49
ButtonEventType
Definition guiFormSpecMenu.h:56
@ BET_RIGHT
Definition guiFormSpecMenu.h:58
@ BET_DOWN
Definition guiFormSpecMenu.h:63
@ BET_MIDDLE
Definition guiFormSpecMenu.h:59
@ BET_WHEEL_UP
Definition guiFormSpecMenu.h:60
@ BET_OTHER
Definition guiFormSpecMenu.h:65
@ BET_UP
Definition guiFormSpecMenu.h:62
@ BET_LEFT
Definition guiFormSpecMenu.h:57
@ BET_WHEEL_DOWN
Definition guiFormSpecMenu.h:61
@ BET_MOVE
Definition guiFormSpecMenu.h:64
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:105
bool send
Definition guiFormSpecMenu.h:128
f32 aux_f32
Definition guiFormSpecMenu.h:135
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:108
FormspecFieldType ftype
Definition guiFormSpecMenu.h:129
bool is_exit
Definition guiFormSpecMenu.h:130
std::string url
Definition guiFormSpecMenu.h:126
std::wstring fdefault
Definition guiFormSpecMenu.h:125
std::string fname
Definition guiFormSpecMenu.h:123
s32 fid
Definition guiFormSpecMenu.h:127
std::wstring flabel
Definition guiFormSpecMenu.h:124
gui::ECURSOR_ICON fcursor_icon
Definition guiFormSpecMenu.h:133
int priority
Definition guiFormSpecMenu.h:132
Definition guiFormSpecMenu.h:155
HyperTipSpec(const std::string &a_name, const std::string &a_parent_name, const std::string &a_text, const core::rect< s32 > &a_rect, v2s32 a_stpos, s32 a_width, bool a_floating)
Definition guiFormSpecMenu.h:157
bool floating
whether the position is NON-static (i.e. ignore stpos)
Definition guiFormSpecMenu.h:180
s32 width
in pixels
Definition guiFormSpecMenu.h:179
bool bound
whether it's cached
Definition guiFormSpecMenu.h:181
v2s32 stpos
static tooltip position
Definition guiFormSpecMenu.h:178
core::rect< s32 > hover_rect
Definition guiFormSpecMenu.h:177
std::string text
Definition guiFormSpecMenu.h:176
std::string parent_name
Definition guiFormSpecMenu.h:175
std::string name
Definition guiFormSpecMenu.h:174
ListRingSpec(const InventoryLocation &a_inventoryloc, const std::string &a_listname)
Definition guiFormSpecMenu.h:93
InventoryLocation inventoryloc
Definition guiFormSpecMenu.h:100
std::string listname
Definition guiFormSpecMenu.h:101
std::wstring tooltip
Definition guiFormSpecMenu.h:149
video::SColor color
Definition guiFormSpecMenu.h:151
video::SColor bgcolor
Definition guiFormSpecMenu.h:150
TooltipSpec(const std::wstring &a_tooltip, video::SColor a_bgcolor, video::SColor a_color)
Definition guiFormSpecMenu.h:141
Definition guiFormSpecMenu.h:462
bool key_down
Definition guiFormSpecMenu.h:464
bool key_up
Definition guiFormSpecMenu.h:463
bool key_enter
Definition guiFormSpecMenu.h:465
Definition guiFormSpecMenu.h:427
v2f invsize
Definition guiFormSpecMenu.h:431
GUITable::TableColumns table_columns
Definition guiFormSpecMenu.h:440
gui::IGUIElement * current_parent
Definition guiFormSpecMenu.h:441
struct GUIFormSpecMenu::parserData::@135275212320055041207276377017315320240115251121 scrollbar_options
v2s32 basepos
Definition guiFormSpecMenu.h:437
v2u32 screensize
Definition guiFormSpecMenu.h:438
v2f32 anchor
Definition guiFormSpecMenu.h:434
GUITable::TableOptions table_options
Definition guiFormSpecMenu.h:439
bool real_coordinates
Definition guiFormSpecMenu.h:429
s32 thumb_size
Definition guiFormSpecMenu.h:451
s32 max
Definition guiFormSpecMenu.h:447
v2s32 size
Definition guiFormSpecMenu.h:432
std::string type
Definition guiFormSpecMenu.h:457
v2f32 offset
Definition guiFormSpecMenu.h:433
GUIScrollBar::ArrowVisibility arrow_visiblity
Definition guiFormSpecMenu.h:452
bool explicit_size
Definition guiFormSpecMenu.h:428
s32 small_step
Definition guiFormSpecMenu.h:449
s32 min
Definition guiFormSpecMenu.h:448
v2f32 padding
Definition guiFormSpecMenu.h:435
u8 simple_field_count
Definition guiFormSpecMenu.h:430
GUIInventoryList::Options inventorylist_options
Definition guiFormSpecMenu.h:444
core::rect< s32 > rect
Definition guiFormSpecMenu.h:436
irr_ptr< gui::IGUIElement > background_parent
Definition guiFormSpecMenu.h:442
std::unordered_map< std::string, GUITable::DynamicData > table_dyndata
Definition guiFormSpecMenu.h:456
s32 large_step
Definition guiFormSpecMenu.h:450
Definition guiInventoryList.h:19
Definition guiInventoryList.h:48
Definition inventorymanager.h:18
Definition inventory.h:21
Definition guiFormSpecMenu.h:69
virtual void gotText(const StringMap &fields)=0
virtual void requestScreenshot()
Definition guiFormSpecMenu.h:73
virtual ~TextDest()=default
std::string m_formname
Definition guiFormSpecMenu.h:75
static std::string p(std::string path)
Definition test_filesys.cpp:66