OpenTTD Source 20260621-master-g720d10536d
window_gui.h
Go to the documentation of this file.
1/*
2 * This file is part of OpenTTD.
3 * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
4 * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
5 * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <https://www.gnu.org/licenses/old-licenses/gpl-2.0>.
6 */
7
9
10#ifndef WINDOW_GUI_H
11#define WINDOW_GUI_H
12
13#include "vehiclelist.h"
14#include "vehicle_type.h"
15#include "viewport_type.h"
16#include "company_type.h"
17#include "tile_type.h"
18#include "widget_type.h"
19#include "string_type.h"
20
33
35public:
58
66
67 static const WidgetDimensions unscaled;
69
70 static constexpr float ASPECT_LOCATION = 12.f / 14.f;
71 static constexpr float ASPECT_RENAME = 12.f / 14.f;
72 static constexpr float ASPECT_TOGGLE_SIZE = 12.f / 14.f;
73 static constexpr float ASPECT_LEFT_RIGHT_BUTTON = 8.f / 12.f;
74 static constexpr float ASPECT_UP_DOWN_BUTTON = 11.f / 12.f;
75 static constexpr float ASPECT_VEHICLE_ICON = 15.f / 12.f;
76 static constexpr float ASPECT_VEHICLE_FLAG = 11.f / 12.f;
77
78private:
83 static constexpr uint WD_SHADEBOX_WIDTH = 12;
84 static constexpr uint WD_STICKYBOX_WIDTH = 12;
85 static constexpr uint WD_DEBUGBOX_WIDTH = 12;
86 static constexpr uint WD_DEFSIZEBOX_WIDTH = 12;
87 static constexpr uint WD_RESIZEBOX_WIDTH = 12;
88 static constexpr uint WD_CLOSEBOX_WIDTH = 11;
89 static constexpr uint WD_CAPTION_HEIGHT = 14;
90 static constexpr uint WD_DROPDOWN_HEIGHT = 12;
91
92 friend NWidgetLeaf;
93};
94
96 .imgbtn = { .left = 1, .top = 1, .right = 1, .bottom = 1},
97 .inset = { .left = 2, .top = 1, .right = 2, .bottom = 1},
98 .vscrollbar = { .left = 2, .top = 3, .right = 2, .bottom = 3},
99 .hscrollbar = { .left = 3, .top = 2, .right = 3, .bottom = 2},
100 .bevel = { .left = 1, .top = 1, .right = 1, .bottom = 1},
101 .fullbevel = { .left = 1, .top = 1, .right = 1, .bottom = 1},
102 .framerect = { .left = 2, .top = 1, .right = 2, .bottom = 1},
103 .frametext = { .left = 6, .top = 6, .right = 6, .bottom = 6},
104 .matrix = { .left = 2, .top = 3, .right = 2, .bottom = 1},
105 .shadebox = { .left = 2, .top = 3, .right = 2, .bottom = 3},
106 .stickybox = { .left = 2, .top = 3, .right = 2, .bottom = 3},
107 .debugbox = { .left = 2, .top = 3, .right = 2, .bottom = 3},
108 .defsizebox = { .left = 2, .top = 3, .right = 2, .bottom = 3},
109 .resizebox = { .left = 2, .top = 2, .right = 2, .bottom = 2},
110 .closebox = { .left = 2, .top = 2, .right = 1, .bottom = 2},
111 .captiontext = { .left = 2, .top = 2, .right = 2, .bottom = 2},
112 .dropdowntext = { .left = 2, .top = 1, .right = 2, .bottom = 1},
113 .dropdownlist = { .left = 1, .top = 2, .right = 1, .bottom = 2},
114 .modalpopup = { .left = 20, .top = 10, .right = 20, .bottom = 10},
115 .picker = { .left = 3, .top = 3, .right = 3, .bottom = 3},
116 .sparse = { .left = 10, .top = 8, .right = 10, .bottom = 8},
117 .sparse_resize = { .left = 10, .top = 8, .right = 10, .bottom = 0},
118 .vsep_picker = 1,
119 .vsep_normal = 2,
120 .vsep_sparse = 4,
121 .vsep_wide = 8,
122 .hsep_normal = 2,
123 .hsep_wide = 6,
124 .hsep_indent = 10,
125};
126
127/* widget.cpp */
128void DrawFrameRect(int left, int top, int right, int bottom, Colours colour, FrameFlags flags);
129
130inline void DrawFrameRect(const Rect &r, Colours colour, FrameFlags flags)
131{
132 DrawFrameRect(r.left, r.top, r.right, r.bottom, colour, flags);
133}
134
135void DrawCaption(const Rect &r, Colours colour, Owner owner, TextColour text_colour, std::string_view str, StringAlignment align, FontSize fs);
136
137/* window.cpp */
138using WindowList = std::list<Window *>;
139extern WindowList _z_windows;
140extern Window *_focused_window;
141
142
150
160
163
164Point GetToolbarAlignedWindowPosition(int window_width);
165Point AlignInitialConstructionToolbar(int window_width);
166
167struct HotkeyList;
168
173
174 WindowDesc(WindowPosition default_pos, std::string_view ini_key, int16_t def_width_trad, int16_t def_height_trad,
175 WindowClass window_class, WindowClass parent_class, WindowDefaultFlags flags,
176 const std::span<const NWidgetPart> nwid_parts, HotkeyList *hotkeys = nullptr,
177 const std::source_location location = std::source_location::current());
178
179 ~WindowDesc();
180
181 const std::source_location source_location;
183 const WindowClass cls;
184 const WindowClass parent_cls;
185 const std::string_view ini_key;
187 const std::span<const NWidgetPart> nwid_parts;
189
190 bool pref_sticky = false;
191 int16_t pref_width = 0;
192 int16_t pref_height = 0;
193
194 int16_t GetDefaultWidth() const;
195 int16_t GetDefaultHeight() const;
196
197 static void LoadFromConfig();
198 static void SaveToConfig();
199
200private:
201 const int16_t default_width_trad;
202 const int16_t default_height_trad;
203
208 WindowDesc(const WindowDesc &) = delete;
209 WindowDesc& operator=(const WindowDesc &) = delete;
210};
211
218};
219
236
239
240static const int TIMEOUT_DURATION = 7;
241static const int WHITE_BORDER_DURATION = 3;
242
252 int32_t scrollpos_x;
253 int32_t scrollpos_y;
256
257 void CancelFollow(const Window &viewport_window);
258};
259
260struct QueryString;
261
262/* Automatic closing conditions for tooltips. */
269
273struct Window {
274private:
275 static std::vector<Window *> closed_windows;
276
277protected:
279 void InitializePositionSize(int x, int y, int min_width, int min_height);
280 virtual void FindWindowPlacementAndResize(int def_width, int def_height, bool allow_resize);
281
282 std::vector<int> scheduled_invalidation_data{};
283 bool scheduled_resize = false;
284
285 /* Protected to prevent deletion anywhere outside Window::DeleteClosedWindows(). */
286 virtual ~Window();
287
288public:
289 Window(WindowDesc &desc);
290
297 inline void *operator new[](size_t size) = delete;
298
301 WindowClass window_class{};
303
304 int scale = 0;
305
306 uint8_t timeout_timer = 0;
307 uint8_t white_border_timer = 0;
308
309 int left = 0;
310 int top = 0;
311 int width = 0;
312 int height = 0;
313
315
317
318 std::unique_ptr<ViewportData> viewport;
319 const NWidgetCore *nested_focus = nullptr;
320 std::map<WidgetID, QueryString*> querystrings{};
321 std::unique_ptr<NWidgetBase> nested_root{};
325
327
328 Window *parent = nullptr;
329 WindowList::iterator z_position{};
330
331 template <class NWID>
332 inline const NWID *GetWidget(WidgetID widnum) const;
333 template <class NWID>
334 inline NWID *GetWidget(WidgetID widnum);
335
336 const Scrollbar *GetScrollbar(WidgetID widnum) const;
338
339 const QueryString *GetQueryString(WidgetID widnum) const;
342
343 virtual const struct Textbuf *GetFocusedTextbuf() const;
344 virtual Point GetCaretPosition() const;
345 virtual Rect GetTextBoundingRect(size_t from, size_t to) const;
346 virtual ptrdiff_t GetTextCharacterAtPosition(const Point &pt) const;
347
348 void InitNested(WindowNumber number = 0);
349 void CreateNestedTree();
351
355 inline void SetTimeout()
356 {
357 this->flags.Set(WindowFlag::Timeout);
358 this->timeout_timer = TIMEOUT_DURATION;
359 }
360
364 inline void SetWhiteBorder()
365 {
366 this->flags.Set(WindowFlag::WhiteBorder);
367 this->white_border_timer = WHITE_BORDER_DURATION;
368 }
369
371 void SetWidgetHighlight(WidgetID widget_index, TextColour highlighted_colour);
372 bool IsWidgetHighlighted(WidgetID widget_index) const;
373
381 inline void SetWidgetDisabledState(WidgetID widget_index, bool disab_stat)
382 {
383 NWidgetCore *nwid = this->GetWidget<NWidgetCore>(widget_index);
384 if (nwid != nullptr) nwid->SetDisabled(disab_stat);
385 }
386
391 inline void DisableWidget(WidgetID widget_index)
392 {
393 SetWidgetDisabledState(widget_index, true);
394 }
395
400 inline void EnableWidget(WidgetID widget_index)
401 {
402 SetWidgetDisabledState(widget_index, false);
403 }
404
410 inline bool IsWidgetDisabled(WidgetID widget_index) const
411 {
412 return this->GetWidget<NWidgetCore>(widget_index)->IsDisabled();
413 }
414
420 inline bool IsWidgetFocused(WidgetID widget_index) const
421 {
422 return this->nested_focus != nullptr && this->nested_focus->GetIndex() == widget_index;
423 }
424
431 inline bool IsWidgetGloballyFocused(WidgetID widget_index) const
432 {
433 return _focused_window == this && IsWidgetFocused(widget_index);
434 }
435
441 inline void SetWidgetLoweredState(WidgetID widget_index, bool lowered_stat)
442 {
443 this->GetWidget<NWidgetCore>(widget_index)->SetLowered(lowered_stat);
444 }
445
450 inline void ToggleWidgetLoweredState(WidgetID widget_index)
451 {
452 bool lowered_state = this->GetWidget<NWidgetCore>(widget_index)->IsLowered();
453 this->GetWidget<NWidgetCore>(widget_index)->SetLowered(!lowered_state);
454 }
455
460 inline void LowerWidget(WidgetID widget_index)
461 {
462 SetWidgetLoweredState(widget_index, true);
463 }
464
469 inline void RaiseWidget(WidgetID widget_index)
470 {
471 SetWidgetLoweredState(widget_index, false);
472 }
473
478 inline void RaiseWidgetWhenLowered(WidgetID widget_index)
479 {
480 if (this->IsWidgetLowered(widget_index)) {
481 this->RaiseWidget(widget_index);
482 this->SetWidgetDirty(widget_index);
483 }
484 }
485
491 inline bool IsWidgetLowered(WidgetID widget_index) const
492 {
493 return this->GetWidget<NWidgetCore>(widget_index)->IsLowered();
494 }
495
497 bool SetFocusedWidget(WidgetID widget_index);
498
499 EventState HandleEditBoxKey(WidgetID wid, char32_t key, uint16_t keycode);
500 virtual void InsertTextString(WidgetID wid, std::string_view str, bool marked, std::optional<size_t> caret, std::optional<size_t> insert_location, std::optional<size_t> replacement_end);
501
502 void HandleButtonClick(WidgetID widget);
503 int GetRowFromWidget(int clickpos, WidgetID widget, int padding, int line_height = -1) const;
504
505 void RaiseButtons(bool autoraise = false);
506
514 template <typename... Args>
515 void SetWidgetsDisabledState(bool disab_stat, Args... widgets)
516 {
517 (SetWidgetDisabledState(widgets, disab_stat), ...);
518 }
519
525 template <typename... Args>
526 void SetWidgetsLoweredState(bool lowered_stat, Args... widgets)
527 {
528 (SetWidgetLoweredState(widgets, lowered_stat), ...);
529 }
530
535 template <typename... Args>
536 void RaiseWidgetsWhenLowered(Args... widgets)
537 {
538 (this->RaiseWidgetWhenLowered(widgets), ...);
539 }
540
541 void SetWidgetDirty(WidgetID widget_index) const;
542
543 void DrawWidgets() const;
544 void DrawViewport() const;
545 void DrawSortButton(WidgetID widget, bool descending) const;
546 static int SortButtonWidth();
547
548 Window *FindChildWindow(WindowClass wc = WindowClass::Invalid) const;
549 Window *FindChildWindowById(WindowClass wc, WindowNumber number) const;
550 void CloseChildWindows(WindowClass wc = WindowClass::Invalid) const;
551 void CloseChildWindowById(WindowClass wc, WindowNumber number) const;
552 virtual void Close(int data = 0);
553 static void DeleteClosedWindows();
554
555 void SetDirty() const;
556 void ReInit(int rx = 0, int ry = 0, bool reposition = false);
557
562 inline bool IsShaded() const
563 {
564 return this->shade_select != nullptr && this->shade_select->shown_plane == SZSP_HORIZONTAL;
565 }
566
567 void SetShaded(bool make_shaded);
568
569 void ScheduleResize();
571 void InvalidateData(int data = 0, bool gui_scope = true);
574
575 /*** Event handling ***/
576
581 virtual void OnInit() { }
582
583 virtual void ApplyDefaults();
584
592 virtual Point OnInitialPosition(int16_t sm_width, int16_t sm_height, int window_number);
593
598 virtual void OnPaint()
599 {
600 this->DrawWidgets();
601 }
602
609 virtual void DrawWidget([[maybe_unused]] const Rect &r, [[maybe_unused]] WidgetID widget) const {}
610
623 virtual void UpdateWidgetSize([[maybe_unused]] WidgetID widget, [[maybe_unused]] Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) {}
624
633 virtual std::string GetWidgetString([[maybe_unused]] WidgetID widget, StringID stringid) const;
634
638 virtual void OnFocus();
639
644 virtual void OnFocusLost(bool closing);
645
653 virtual EventState OnKeyPress([[maybe_unused]] char32_t key, [[maybe_unused]] uint16_t keycode) { return EventState::NotHandled; }
654
655 virtual EventState OnHotkey(int hotkey);
656
663
664
671 virtual void OnClick([[maybe_unused]] Point pt, [[maybe_unused]] WidgetID widget, [[maybe_unused]] int click_count) {}
672
680 virtual bool OnRightClick([[maybe_unused]] Point pt, [[maybe_unused]] WidgetID widget) { return false; }
681
687 virtual void OnHover([[maybe_unused]] Point pt, [[maybe_unused]] WidgetID widget) {}
688
696 virtual bool OnTooltip([[maybe_unused]] Point pt, [[maybe_unused]] WidgetID widget, [[maybe_unused]] TooltipCloseCondition close_cond) { return false; }
697
703 virtual void OnMouseDrag([[maybe_unused]] Point pt, [[maybe_unused]] WidgetID widget) {}
704
710 virtual void OnDragDrop([[maybe_unused]] Point pt, [[maybe_unused]] WidgetID widget) {}
711
716 virtual void OnScroll([[maybe_unused]] Point delta) {}
717
723 virtual void OnScrollbarScroll([[maybe_unused]] WidgetID widget) {}
724
731 virtual void OnMouseOver([[maybe_unused]] Point pt, [[maybe_unused]] WidgetID widget) {}
732
738 virtual void OnMouseWheel([[maybe_unused]] int wheel, [[maybe_unused]] WidgetID widget) {}
739
740
744 virtual void OnMouseLoop() {}
745
749 virtual void OnGameTick() {}
750
755 virtual void OnRealtimeTick([[maybe_unused]] uint delta_ms) {}
756
760 virtual void OnTimeout() {}
761
762
767 virtual void OnResize() {}
768
775 virtual void OnDropdownSelect([[maybe_unused]] WidgetID widget, [[maybe_unused]] int index, [[maybe_unused]] int click_result) {}
776
777 virtual void OnDropdownClose(Point pt, WidgetID widget, int index, int click_result, bool instant_close);
778
783 virtual void OnEditboxChanged([[maybe_unused]] WidgetID widget) {}
784
791 virtual void OnQueryTextFinished([[maybe_unused]] std::optional<std::string> str) {}
792
798 virtual void OnInvalidateData([[maybe_unused]] int data = 0, [[maybe_unused]] bool gui_scope = true) {}
799
806 virtual void OnPlaceObject([[maybe_unused]] Point pt, [[maybe_unused]] TileIndex tile) {}
807
814 virtual bool OnVehicleSelect([[maybe_unused]] const struct Vehicle *v) { return false; }
815
823 virtual bool OnVehicleSelect([[maybe_unused]] VehicleList::const_iterator begin, [[maybe_unused]] VehicleList::const_iterator end) { return false; }
824
828 virtual void OnPlaceObjectAbort() {}
829
830
838 virtual void OnPlaceDrag([[maybe_unused]] ViewportPlaceMethod select_method, [[maybe_unused]] ViewportDragDropSelectionProcess select_proc, [[maybe_unused]] Point pt) {}
839
849 virtual void OnPlaceMouseUp([[maybe_unused]] ViewportPlaceMethod select_method, [[maybe_unused]] ViewportDragDropSelectionProcess select_proc, [[maybe_unused]] Point pt, [[maybe_unused]] TileIndex start_tile, [[maybe_unused]] TileIndex end_tile) {}
850
858 virtual void OnPlacePresize([[maybe_unused]] Point pt, [[maybe_unused]] TileIndex tile) {}
859
860 /*** End of the event handling ***/
861
866 virtual bool IsNewGRFInspectable() const { return false; }
867
874 virtual void ShowNewGRFInspectWindow() const { NOT_REACHED(); }
875
880 template <bool TtoBack>
881 struct WindowIterator {
882 typedef Window *value_type;
883 typedef value_type *pointer;
884 typedef value_type &reference;
885 typedef size_t difference_type;
886 typedef std::forward_iterator_tag iterator_category;
887
888 explicit WindowIterator(WindowList::iterator start) : it(start)
889 {
890 this->Validate();
891 }
892 explicit WindowIterator(const Window *w) : it(w->z_position) {}
893
894 bool operator==(const WindowIterator &other) const { return this->it == other.it; }
895 Window * operator*() const { return *this->it; }
896 WindowIterator & operator++() { this->Next(); this->Validate(); return *this; }
897
898 bool IsEnd() const { return this->it == _z_windows.end(); }
899
900 private:
901 WindowList::iterator it;
902 void Validate()
903 {
904 while (!this->IsEnd() && *this->it == nullptr) this->Next();
905 }
906 void Next()
907 {
908 if constexpr (!TtoBack) {
909 ++this->it;
910 } else if (this->it == _z_windows.begin()) {
911 this->it = _z_windows.end();
912 } else {
913 --this->it;
914 }
915 }
916 };
919
924 template <bool Tfront>
925 struct AllWindows {
926 AllWindows() {}
928 {
929 if constexpr (Tfront) {
930 auto back = _z_windows.end();
931 if (back != _z_windows.begin()) --back;
932 return WindowIterator<Tfront>(back);
933 } else {
934 return WindowIterator<Tfront>(_z_windows.begin());
935 }
936 }
938 };
942};
943
951template <class It, class Pred>
952inline bool AllEqual(It begin, It end, Pred pred)
953{
954 return std::adjacent_find(begin, end, std::not_fn(pred)) == end;
955}
956
963template <class NWID>
964inline NWID *Window::GetWidget(WidgetID widnum)
965{
966 auto it = this->widget_lookup.find(widnum);
967 if (it == std::end(this->widget_lookup)) return nullptr;
968 NWID *nwid = dynamic_cast<NWID *>(it->second);
969 assert(nwid != nullptr);
970 return nwid;
971}
972
974template <>
976{
977 auto it = this->widget_lookup.find(widnum);
978 if (it == std::end(this->widget_lookup)) return nullptr;
979 return it->second;
980}
981
988template <class NWID>
989inline const NWID *Window::GetWidget(WidgetID widnum) const
990{
991 return const_cast<Window *>(this)->GetWidget<NWID>(widnum);
992}
993
994
998class PickerWindowBase : public Window {
999
1000public:
1001 PickerWindowBase(WindowDesc &desc, Window *parent) : Window(desc)
1002 {
1003 this->parent = parent;
1004 }
1005
1006 void Close(int data = 0) override;
1007};
1008
1009Window *BringWindowToFrontById(WindowClass cls, WindowNumber number);
1010Window *FindWindowFromPt(int x, int y);
1011
1021template <typename Twindow, bool Treturn_existing = false, typename... Targs>
1022Twindow *AllocateWindowDescFront(WindowDesc &desc, WindowNumber window_number, Targs... extra_arguments)
1023{
1024 Twindow *w = static_cast<Twindow *>(BringWindowToFrontById(desc.cls, window_number));
1025 if (w != nullptr) return Treturn_existing ? w : nullptr;
1026 return new Twindow(desc, window_number, std::forward<Targs>(extra_arguments)...);
1027}
1028
1029void RelocateAllWindows(int neww, int newh);
1030
1031void GuiShowTooltips(Window *parent, EncodedString &&text, TooltipCloseCondition close_tooltip);
1032
1033/* widget.cpp */
1034WidgetID GetWidgetFromPos(const Window *w, int x, int y);
1035
1036extern Point _cursorpos_drag_start;
1037
1038extern int _scrollbar_start_pos;
1039extern int _scrollbar_size;
1040extern uint8_t _scroller_click_timeout;
1041
1042extern bool _scrolling_viewport;
1043extern bool _mouse_hovering;
1044
1054
1055void SetFocusedWindow(Window *w);
1056
1057void ScrollbarClickHandler(Window *w, NWidgetCore *nw, int x, int y);
1058Rect ScrollRect(Rect r, const Scrollbar &sb, int resize_step = 1);
1059
1060#endif /* WINDOW_GUI_H */
constexpr Timpl & Set()
Set all bits.
Container for an encoded string, created by GetEncodedString.
Enum-as-bit-set wrapper.
Baseclass for nested widgets.
Base class for a 'real' widget.
void SetDisabled(bool disabled)
Disable (grey-out) or enable the widget.
Stacked widgets, widgets all occupying the same space in the window.
int shown_plane
Plane being displayed (for NWID_SELECTION only).
void Close(int data=0) override
Hide the window and all its child windows, and mark them for a later deletion.
Definition window.cpp:3622
Scrollbar data structure.
static constexpr uint WD_CAPTION_HEIGHT
Minimum height of a title bar.
Definition window_gui.h:89
RectPadding defsizebox
Padding around image in defsizebox widget.
Definition window_gui.h:48
RectPadding closebox
Padding around image in closebox widget.
Definition window_gui.h:50
RectPadding framerect
Standard padding inside many panels.
Definition window_gui.h:42
static constexpr uint WD_DROPDOWN_HEIGHT
Minimum height of a drop down widget.
Definition window_gui.h:90
RectPadding captiontext
Padding for text within caption widget.
Definition window_gui.h:51
RectPadding sparse_resize
Padding used for a resizeable 'sparse' widget window, usually containing multiple frames.
Definition window_gui.h:57
RectPadding debugbox
Padding around image in debugbox widget.
Definition window_gui.h:47
int vsep_sparse
Normal vertical spacing for 'sparse' widget window.
Definition window_gui.h:61
RectPadding sparse
Padding used for 'sparse' widget window, usually containing multiple frames.
Definition window_gui.h:56
RectPadding frametext
Padding inside frame with text.
Definition window_gui.h:43
static WidgetDimensions scaled
Widget dimensions scaled for current zoom level.
Definition window_gui.h:30
RectPadding modalpopup
Spacing for popup warning/information windows.
Definition window_gui.h:54
RectPadding hscrollbar
Padding inside horizontal scrollbar buttons.
Definition window_gui.h:39
RectPadding shadebox
Padding around image in shadebox widget.
Definition window_gui.h:45
RectPadding resizebox
Padding around image in resizebox widget.
Definition window_gui.h:49
RectPadding vscrollbar
Padding inside vertical scrollbar buttons.
Definition window_gui.h:38
RectPadding imgbtn
Padding around image button image.
Definition window_gui.h:36
int vsep_normal
Normal vertical spacing.
Definition window_gui.h:60
int vsep_picker
Vertical spacing of picker-window widgets.
Definition window_gui.h:59
int vsep_wide
Wide vertical spacing.
Definition window_gui.h:62
int hsep_wide
Wide horizontal spacing.
Definition window_gui.h:64
static constexpr uint WD_CLOSEBOX_WIDTH
Minimum width of a close box widget.
Definition window_gui.h:88
RectPadding fullbevel
Always-scaled bevel thickness.
Definition window_gui.h:41
RectPadding inset
Padding inside inset container.
Definition window_gui.h:37
static const WidgetDimensions unscaled
Unscaled widget dimensions.
Definition window_gui.h:95
static constexpr uint WD_RESIZEBOX_WIDTH
Minimum width of a resize box widget.
Definition window_gui.h:87
RectPadding picker
Padding for a picker (dock, station, etc) window.
Definition window_gui.h:55
static constexpr uint WD_STICKYBOX_WIDTH
Minimum width of a standard sticky box widget.
Definition window_gui.h:84
RectPadding matrix
Padding of WWT_MATRIX items.
Definition window_gui.h:44
int hsep_normal
Normal horizontal spacing.
Definition window_gui.h:63
RectPadding dropdownlist
Padding of complete drop down list.
Definition window_gui.h:53
static constexpr uint WD_DEBUGBOX_WIDTH
Minimum width of a standard debug box widget.
Definition window_gui.h:85
RectPadding stickybox
Padding around image in stickybox widget.
Definition window_gui.h:46
static constexpr uint WD_DEFSIZEBOX_WIDTH
Minimum width of a standard defsize box widget.
Definition window_gui.h:86
RectPadding bevel
Bevel thickness, affected by "scaled bevels" game option.
Definition window_gui.h:40
RectPadding dropdowntext
Padding of drop down list item.
Definition window_gui.h:52
static constexpr uint WD_SHADEBOX_WIDTH
Distances used in drawing widgets.
Definition window_gui.h:83
int hsep_indent
Width of indentation for tree layouts.
Definition window_gui.h:65
Types related to companies.
static constexpr Owner INVALID_OWNER
An invalid owner.
FontSize
Available font sizes.
Definition gfx_type.h:248
StringAlignment
How to align the to-be drawn text.
Definition gfx_type.h:435
Colours
One of 16 base colours used for companies and windows/widgets.
Definition gfx_type.h:284
TextColour
Colour of the strings, see _string_colourmap in table/string_colours.h or docs/ottd-colourtext-palett...
Definition gfx_type.h:316
void SetDirty() const
Mark entire window as dirty (in need of re-paint).
Definition window.cpp:972
#define Rect
Macro that prevents name conflicts between included headers.
#define Point
Macro that prevents name conflicts between included headers.
Types for strings.
uint32_t StringID
Numeric value that represents a string, independent of the selected language.
Dimensions (a width and height) of a rectangle in 2D.
List of hotkeys for a window.
Definition hotkeys.h:46
Data stored about a string that can be modified in the GUI.
Padding dimensions to apply to each side of a Rect.
Data structure for resizing a window.
Definition window_gui.h:215
uint step_height
Step-size of height resize changes.
Definition window_gui.h:217
uint step_width
Step-size of width resize changes.
Definition window_gui.h:216
Helper/buffer for input fields.
Vehicle data structure.
Data structure for a window viewport.
Definition window_gui.h:250
void CancelFollow(const Window &viewport_window)
Cancel viewport vehicle following, and raise follow location widget if needed.
int32_t dest_scrollpos_y
Current destination y coordinate to display (virtual screen coordinate of topleft corner of the viewp...
Definition window_gui.h:255
int32_t scrollpos_y
Currently shown y coordinate (virtual screen coordinate of topleft corner of the viewport).
Definition window_gui.h:253
int32_t dest_scrollpos_x
Current destination x coordinate to display (virtual screen coordinate of topleft corner of the viewp...
Definition window_gui.h:254
VehicleID follow_vehicle
VehicleID to follow if following a vehicle, VehicleID::Invalid() otherwise.
Definition window_gui.h:251
int32_t scrollpos_x
Currently shown x coordinate (virtual screen coordinate of topleft corner of the viewport).
Definition window_gui.h:252
Data structure for viewport, display of a part of the world.
High level window description.
Definition window_gui.h:172
int16_t GetDefaultWidth() const
Determine default width of window.
Definition window.cpp:142
~WindowDesc()
Remove ourselves from the global list of window descs.
Definition window.cpp:132
static void SaveToConfig()
Save all WindowDesc settings to _windows_file.
Definition window.cpp:179
int16_t pref_width
User-preferred width of the window. Zero if unset.
Definition window_gui.h:191
const WindowPosition default_pos
Preferred position of the window.
Definition window_gui.h:182
bool pref_sticky
Preferred stickyness.
Definition window_gui.h:190
WindowDesc(const WindowDesc &)=delete
Delete copy constructor to prevent compilers from copying the structure, which fails due to _window_d...
int16_t pref_height
User-preferred height of the window. Zero if unset.
Definition window_gui.h:192
int16_t GetDefaultHeight() const
Determine default height of window.
Definition window.cpp:152
const int16_t default_height_trad
Preferred initial height of the window (pixels at 1x zoom).
Definition window_gui.h:202
const int16_t default_width_trad
Preferred initial width of the window (pixels at 1x zoom).
Definition window_gui.h:201
const WindowClass cls
Class of the window,.
Definition window_gui.h:183
const std::string_view ini_key
Key to store window defaults in openttd.cfg. An empty string if nothing shall be stored.
Definition window_gui.h:185
const std::source_location source_location
Source location of this definition.
Definition window_gui.h:181
const WindowDefaultFlags flags
Flags.
Definition window_gui.h:186
static void LoadFromConfig()
Load all WindowDesc settings from _windows_file.
Definition window.cpp:160
const WindowClass parent_cls
Class of the parent window.
Definition window_gui.h:184
const HotkeyList * hotkeys
Hotkeys for the window.
Definition window_gui.h:188
WindowDesc(WindowPosition default_pos, std::string_view ini_key, int16_t def_width_trad, int16_t def_height_trad, WindowClass window_class, WindowClass parent_class, WindowDefaultFlags flags, const std::span< const NWidgetPart > nwid_parts, HotkeyList *hotkeys=nullptr, const std::source_location location=std::source_location::current())
Window description constructor.
Definition window.cpp:112
const std::span< const NWidgetPart > nwid_parts
Span of nested widget parts describing the window.
Definition window_gui.h:187
Number to differentiate different windows of the same class.
Iterable ensemble of all valid Windows.
Definition window_gui.h:925
Iterator to iterate all valid Windows.
Definition window_gui.h:881
Data structure for an opened window.
Definition window_gui.h:273
virtual const struct Textbuf * GetFocusedTextbuf() const
Get the current input text buffer.
Definition window.cpp:370
void SetWidgetHighlight(WidgetID widget_index, TextColour highlighted_colour)
Sets the highlighted status of a widget.
Definition window.cpp:244
void ReInit(int rx=0, int ry=0, bool reposition=false)
Re-initialize a window, and optionally change its size.
Definition window.cpp:984
void CloseChildWindows(WindowClass wc=WindowClass::Invalid) const
Close all children a window might have in a head-recursive manner.
Definition window.cpp:1081
virtual void Close(int data=0)
Hide the window and all its child windows, and mark them for a later deletion.
Definition window.cpp:1109
bool IsWidgetGloballyFocused(WidgetID widget_index) const
Check if given widget has user input focus.
Definition window_gui.h:431
virtual void UpdateWidgetSize(WidgetID widget, Dimension &size, const Dimension &padding, Dimension &fill, Dimension &resize)
Update size and resize step of a widget in the window.
Definition window_gui.h:623
virtual void OnInvalidateData(int data=0, bool gui_scope=true)
Some data on this window has become invalid.
Definition window_gui.h:798
static int SortButtonWidth()
Get width of up/down arrow of sort button state.
Definition widget.cpp:833
void FinishInitNested(WindowNumber window_number=0)
Perform the second part of the initialization of a nested widget tree.
Definition window.cpp:1814
std::map< WidgetID, QueryString * > querystrings
QueryString associated to WWT_EDITBOX widgets.
Definition window_gui.h:320
virtual void ApplyDefaults()
Read default values from WindowDesc configuration an apply them to the window.
Definition window.cpp:196
uint8_t white_border_timer
Timer value of the WindowFlag::WhiteBorder for flags.
Definition window_gui.h:307
NWidgetStacked * shade_select
Selection widget (NWID_SELECTION) to use for shading the window. If nullptr, window cannot shade.
Definition window_gui.h:323
void InitializePositionSize(int x, int y, int min_width, int min_height)
Set the position and smallest size of the window.
Definition window.cpp:1463
void DrawWidgets() const
Paint all widgets of a window.
Definition widget.cpp:786
virtual bool OnVehicleSelect(VehicleList::const_iterator begin, VehicleList::const_iterator end)
The user clicked on a vehicle while HT_VEHICLE has been set.
Definition window_gui.h:823
Dimension unshaded_size
Last known unshaded size (only valid while shaded).
Definition window_gui.h:324
void InvalidateData(int data=0, bool gui_scope=true)
Mark this window's data as invalid (in need of re-computing).
Definition window.cpp:3255
virtual EventState OnKeyPress(char32_t key, uint16_t keycode)
A key has been pressed.
Definition window_gui.h:653
Window * parent
Parent window.
Definition window_gui.h:328
AllWindows< false > IterateFromBack
Iterate all windows in Z order from back to front.
Definition window_gui.h:940
virtual ~Window()
Remove window and all its child windows from the window stack.
Definition window.cpp:1146
void RaiseWidget(WidgetID widget_index)
Marks a widget as raised.
Definition window_gui.h:469
void SetWidgetDirty(WidgetID widget_index) const
Invalidate a widget, i.e.
Definition window.cpp:562
uint8_t timeout_timer
Timer value of the WindowFlag::Timeout for flags.
Definition window_gui.h:306
std::unique_ptr< ViewportData > viewport
Pointer to viewport data, if present.
Definition window_gui.h:318
virtual std::string GetWidgetString(WidgetID widget, StringID stringid) const
Get the raw string for a widget.
Definition window.cpp:510
WidgetID mouse_capture_widget
ID of current mouse capture widget (e.g. dragged scrollbar). INVALID_WIDGET if no widget has mouse ca...
Definition window_gui.h:326
virtual void OnGameTick()
Called once per (game) tick.
Definition window_gui.h:749
virtual void ShowNewGRFInspectWindow() const
Show the NewGRF inspection window.
Definition window_gui.h:874
virtual bool OnRightClick(Point pt, WidgetID widget)
A click with the right mouse button has been made on the window.
Definition window_gui.h:680
virtual void OnScrollbarScroll(WidgetID widget)
Notify window that a scrollbar position has been updated.
Definition window_gui.h:723
void RaiseWidgetWhenLowered(WidgetID widget_index)
Marks a widget as raised and dirty (redraw), when it is marked as lowered.
Definition window_gui.h:478
virtual void OnDropdownSelect(WidgetID widget, int index, int click_result)
A dropdown option associated to this window has been selected.
Definition window_gui.h:775
void ProcessScheduledInvalidations()
Process all scheduled invalidations.
Definition window.cpp:3268
ResizeInfo resize
Resize information.
Definition window_gui.h:314
void UnfocusFocusedWidget()
Makes no widget on this window have focus.
Definition window.cpp:475
void DisableWidget(WidgetID widget_index)
Sets a widget to disabled.
Definition window_gui.h:391
virtual void OnMouseLoop()
Called for every mouse loop run, which is at least once per (game) tick.
Definition window_gui.h:744
void SetShaded(bool make_shaded)
Set the shaded state of the window to make_shaded.
Definition window.cpp:1027
virtual void OnPlaceObjectAbort()
The user cancelled a tile highlight mode that has been set.
Definition window_gui.h:828
int scale
Scale of this window – used to determine how to resize.
Definition window_gui.h:304
void ScheduleResize()
Mark this window as resized and in need of OnResize() event.
Definition window.cpp:3233
virtual bool OnVehicleSelect(const struct Vehicle *v)
The user clicked on a vehicle while HT_VEHICLE has been set.
Definition window_gui.h:814
bool IsWidgetFocused(WidgetID widget_index) const
Check if given widget is focused within this window.
Definition window_gui.h:420
void SetWidgetsDisabledState(bool disab_stat, Args... widgets)
Sets the enabled/disabled status of a list of widgets.
Definition window_gui.h:515
virtual void OnPaint()
The window must be repainted.
Definition window_gui.h:598
void DrawSortButton(WidgetID widget, bool descending) const
Draw a sort button's up or down arrow symbol.
Definition widget.cpp:818
virtual void OnDragDrop(Point pt, WidgetID widget)
A dragged 'object' has been released.
Definition window_gui.h:710
virtual bool IsNewGRFInspectable() const
Is the data related to this window NewGRF inspectable?
Definition window_gui.h:866
void CreateNestedTree()
Perform the first part of the initialization of a nested widget tree.
Definition window.cpp:1804
WindowDesc & window_desc
Window description.
Definition window_gui.h:299
WindowClass window_class
Window class.
Definition window_gui.h:301
virtual void OnRealtimeTick(uint delta_ms)
Called periodically.
Definition window_gui.h:755
virtual void OnMouseWheel(int wheel, WidgetID widget)
The mouse wheel has been turned.
Definition window_gui.h:738
AllWindows< true > IterateFromFront
Iterate all windows in Z order from front to back.
Definition window_gui.h:941
void CloseChildWindowById(WindowClass wc, WindowNumber number) const
Close all children a window might have in a head-recursive manner.
Definition window.cpp:1096
virtual void OnQueryTextFinished(std::optional< std::string > str)
The query window opened from this window has closed.
Definition window_gui.h:791
void SetWhiteBorder()
Set the timeout flag of the window and initiate the timer.
Definition window_gui.h:364
bool SetFocusedWidget(WidgetID widget_index)
Set focus within this window to the given widget.
Definition window.cpp:491
virtual void OnFocusLost(bool closing)
The window has lost focus.
Definition window.cpp:527
bool IsWidgetLowered(WidgetID widget_index) const
Gets the lowered state of a widget.
Definition window_gui.h:491
bool IsWidgetDisabled(WidgetID widget_index) const
Gets the enabled/disabled status of a widget.
Definition window_gui.h:410
void DrawViewport() const
Draw the viewport of this window.
static std::vector< Window * > closed_windows
List of closed windows to delete.
Definition window_gui.h:275
void RaiseButtons(bool autoraise=false)
Raise the buttons of the window.
Definition window.cpp:536
virtual void DrawWidget(const Rect &r, WidgetID widget) const
Draw the contents of a nested widget.
Definition window_gui.h:609
void SetWidgetsLoweredState(bool lowered_stat, Args... widgets)
Sets the lowered/raised status of a list of widgets.
Definition window_gui.h:526
virtual Point OnInitialPosition(int16_t sm_width, int16_t sm_height, int window_number)
Compute the initial position of the window.
Definition window.cpp:1793
Owner owner
The owner of the content shown in this window. Company colour is acquired from this variable.
Definition window_gui.h:316
WindowIterator< true > IteratorToBack
Iterate in Z order towards back.
Definition window_gui.h:918
void SetWidgetLoweredState(WidgetID widget_index, bool lowered_stat)
Sets the lowered/raised status of a widget.
Definition window_gui.h:441
void EnableWidget(WidgetID widget_index)
Sets a widget to Enabled.
Definition window_gui.h:400
virtual Point GetCaretPosition() const
Get the current caret position if an edit box has the focus.
Definition window.cpp:383
virtual void FindWindowPlacementAndResize(int def_width, int def_height, bool allow_resize)
Resize window towards the default size.
Definition window.cpp:1482
virtual void OnDropdownClose(Point pt, WidgetID widget, int index, int click_result, bool instant_close)
A dropdown window associated to this window has been closed.
Definition window.cpp:290
virtual void InsertTextString(WidgetID wid, std::string_view str, bool marked, std::optional< size_t > caret, std::optional< size_t > insert_location, std::optional< size_t > replacement_end)
Insert a text string at the cursor position into the edit box widget.
Definition window.cpp:2732
virtual void OnPlaceObject(Point pt, TileIndex tile)
The user clicked some place on the map when a tile highlight mode has been set.
Definition window_gui.h:806
WindowIterator< false > IteratorToFront
Iterate in Z order towards front.
Definition window_gui.h:917
int left
x position of left edge of the window
Definition window_gui.h:309
bool IsShaded() const
Is window shaded currently?
Definition window_gui.h:562
void SetTimeout()
Set the timeout flag of the window and initiate the timer.
Definition window_gui.h:355
const NWidgetCore * nested_focus
Currently focused nested widget, or nullptr if no nested widget has focus.
Definition window_gui.h:319
virtual void OnEditboxChanged(WidgetID widget)
The text in an editbox has been edited.
Definition window_gui.h:783
void UpdateQueryStringSize()
Update size of all QueryStrings of this window.
Definition window.cpp:359
virtual void OnScroll(Point delta)
Handle the request for (viewport) scrolling.
Definition window_gui.h:716
void RaiseWidgetsWhenLowered(Args... widgets)
Raises the widgets and sets widgets dirty that are lowered.
Definition window_gui.h:536
int top
y position of top edge of the window
Definition window_gui.h:310
virtual void OnClick(Point pt, WidgetID widget, int click_count)
A click with the left mouse button has been made on the window.
Definition window_gui.h:671
const QueryString * GetQueryString(WidgetID widnum) const
Return the querystring associated to a editbox.
Definition window.cpp:339
WidgetLookup widget_lookup
Indexed access to the nested widget tree. Do not access directly, use Window::GetWidget() instead.
Definition window_gui.h:322
virtual ptrdiff_t GetTextCharacterAtPosition(const Point &pt) const
Get the character that is rendered at a position by the focused edit box.
Definition window.cpp:414
Window * FindChildWindow(WindowClass wc=WindowClass::Invalid) const
Find the Window whose parent pointer points to this window.
Definition window.cpp:1053
std::vector< int > scheduled_invalidation_data
Data of scheduled OnInvalidateData() calls.
Definition window_gui.h:282
void InitializeData(WindowNumber window_number)
Initializes the data (except the position and initial size) of a new Window.
Definition window.cpp:1425
virtual void OnPlaceMouseUp(ViewportPlaceMethod select_method, ViewportDragDropSelectionProcess select_proc, Point pt, TileIndex start_tile, TileIndex end_tile)
The user has dragged over the map when the tile highlight mode has been set.
Definition window_gui.h:849
virtual void OnMouseOver(Point pt, WidgetID widget)
The mouse is currently moving over the window or has just moved outside of the window.
Definition window_gui.h:731
Window(WindowDesc &desc)
Empty constructor, initialization has been moved to InitNested() called from the constructor of the d...
Definition window.cpp:1838
int GetRowFromWidget(int clickpos, WidgetID widget, int padding, int line_height=-1) const
Compute the row of a widget that a user clicked in.
Definition window.cpp:215
const NWID * GetWidget(WidgetID widnum) const
Get the nested widget with number widnum from the nested widget tree.
Definition window_gui.h:989
virtual bool OnTooltip(Point pt, WidgetID widget, TooltipCloseCondition close_cond)
Event to display a custom tooltip.
Definition window_gui.h:696
void LowerWidget(WidgetID widget_index)
Marks a widget as lowered.
Definition window_gui.h:460
virtual EventState OnCTRLStateChange()
The state of the control key has changed.
Definition window_gui.h:662
void ProcessScheduledResize()
Process scheduled OnResize() event.
Definition window.cpp:3241
EventState HandleEditBoxKey(WidgetID wid, char32_t key, uint16_t keycode)
Process keypress for editbox widget.
Definition window.cpp:2570
virtual void OnMouseDrag(Point pt, WidgetID widget)
An 'object' is being dragged at the provided position, highlight the target if possible.
Definition window_gui.h:703
void HandleButtonClick(WidgetID widget)
Do all things to make a button look clicked and mark it to be unclicked in a few ticks.
Definition window.cpp:601
virtual void OnResize()
Called after the window got resized.
Definition window_gui.h:767
Window * FindChildWindowById(WindowClass wc, WindowNumber number) const
Find the Window whose parent pointer points to this window.
Definition window.cpp:1068
virtual void OnFocus()
The window has gained focus.
Definition window.cpp:519
void InitNested(WindowNumber number=0)
Perform complete initialization of the Window with nested widgets, to allow use.
Definition window.cpp:1828
virtual void OnTimeout()
Called when this window's timeout has been reached.
Definition window_gui.h:760
WindowFlags flags
Window flags.
Definition window_gui.h:300
const Scrollbar * GetScrollbar(WidgetID widnum) const
Return the Scrollbar to a widget index.
Definition window.cpp:319
void ProcessHighlightedInvalidations()
Process all invalidation of highlighted widgets.
Definition window.cpp:3280
virtual void OnPlaceDrag(ViewportPlaceMethod select_method, ViewportDragDropSelectionProcess select_proc, Point pt)
The user is dragging over the map when the tile highlight mode has been set.
Definition window_gui.h:838
virtual EventState OnHotkey(int hotkey)
A hotkey has been pressed.
Definition window.cpp:576
static void DeleteClosedWindows()
Delete all closed windows.
Definition window.cpp:60
void SetWidgetDisabledState(WidgetID widget_index, bool disab_stat)
Sets the enabled/disabled status of a widget.
Definition window_gui.h:381
std::unique_ptr< NWidgetBase > nested_root
Root of the nested tree.
Definition window_gui.h:321
bool scheduled_resize
Set if window has been resized.
Definition window_gui.h:283
virtual Rect GetTextBoundingRect(size_t from, size_t to) const
Get the bounding rectangle for a text range if an edit box has the focus.
Definition window.cpp:399
bool IsWidgetHighlighted(WidgetID widget_index) const
Gets the highlighted status of a widget.
Definition window.cpp:274
void DisableAllWidgetHighlight()
Disable the highlighted status of all widgets.
Definition window.cpp:226
virtual void OnPlacePresize(Point pt, TileIndex tile)
The user moves over the map when a tile highlight mode has been set when the special mouse mode has b...
Definition window_gui.h:858
AllWindows< false > Iterate
Iterate all windows in whatever order is easiest.
Definition window_gui.h:939
int height
Height of the window (number of pixels down in y direction).
Definition window_gui.h:312
virtual void OnHover(Point pt, WidgetID widget)
The mouse is hovering over a widget in the window, perform an action for it.
Definition window_gui.h:687
int width
width of the window (number of pixels to the right in x direction)
Definition window_gui.h:311
virtual void OnInit()
Notification that the nested widget tree gets initialized.
Definition window_gui.h:581
void ToggleWidgetLoweredState(WidgetID widget_index)
Invert the lowered/raised status of a widget.
Definition window_gui.h:450
WindowNumber window_number
Window number within the window class.
Definition window_gui.h:302
Types related to tiles.
StrongType::Typedef< uint32_t, struct TileIndexTag, StrongType::Compare, StrongType::Integer, StrongType::Compatible< int32_t >, StrongType::Compatible< int64_t > > TileIndex
The index/ID of a Tile.
Definition tile_type.h:92
Types related to vehicles.
PoolID< uint32_t, struct VehicleIDTag, 0xFF000, 0xFFFFF > VehicleID
The type all our vehicle IDs have.
Functions and type for generating vehicle lists.
Types related to viewports.
ViewportPlaceMethod
Viewport place method (type of highlighted area and placed objects).
ViewportDragDropSelectionProcess
Drag and drop selection process, or, what to do with an area of land when you've selected it.
Definitions about widgets.
@ SZSP_HORIZONTAL
Display plane with zero size vertically, and filling and resizing horizontally.
std::map< WidgetID, class NWidgetBase * > WidgetLookup
Lookup between widget IDs and NWidget objects.
bool _scrolling_viewport
A viewport is being scrolled with the mouse.
Definition window.cpp:85
Window * _focused_window
Window that currently has focus.
Definition window.cpp:77
bool _mouse_hovering
The mouse is hovering over the same point.
Definition window.cpp:86
WindowList _z_windows
List of windows opened at the screen sorted from the front to back.
Definition window.cpp:52
SpecialMouseMode _special_mouse_mode
Mode of the mouse.
Definition window.cpp:88
WindowDefaultFlag
Window default widget/window handling flags.
Definition window_gui.h:154
@ Construction
This window is used for construction; close it whenever changing company.
Definition window_gui.h:155
@ NoClose
This window can't be interactively closed.
Definition window_gui.h:158
@ NoFocus
This window won't get focus/make any other window lose focus when click.
Definition window_gui.h:157
@ Modal
The window is a modal child of some other window, meaning the parent is 'inactive'.
Definition window_gui.h:156
void DrawFrameRect(int left, int top, int right, int bottom, Colours colour, FrameFlags flags)
Draw frame rectangle.
Definition widget.cpp:309
TooltipCloseCondition
Definition window_gui.h:263
@ RightClick
Close the tooltip when releasing the right mouse button.
Definition window_gui.h:264
@ ExitViewport
Close the tooltip when leaving the viewport.
Definition window_gui.h:267
@ None
Do not automatically close the tooltip.
Definition window_gui.h:266
@ Hover
Close the tooltip when stopping to hovering, i.e. moving the mouse.
Definition window_gui.h:265
EnumBitSet< FrameFlag, uint8_t > FrameFlags
Bitset of FrameFlag elements.
Definition window_gui.h:32
void GuiShowTooltips(Window *parent, EncodedString &&text, TooltipCloseCondition close_tooltip)
Shows a tooltip.
Definition misc_gui.cpp:690
Window * _focused_window
Window that currently has focus.
Definition window.cpp:77
bool AllEqual(It begin, It end, Pred pred)
Generic helper function that checks if all elements of the range are equal with respect to the given ...
Definition window_gui.h:952
FrameFlag
Flags to describe the look of the frame.
Definition window_gui.h:24
@ Transparent
Makes the background transparent if set.
Definition window_gui.h:25
@ BorderOnly
Draw border only, no background.
Definition window_gui.h:26
@ Darkened
If set the background is darker, allows for lowered frames with normal background colour when used wi...
Definition window_gui.h:28
@ Lowered
If set the frame is lowered and the background colour brighter (ie. buttons when pressed).
Definition window_gui.h:27
Twindow * AllocateWindowDescFront(WindowDesc &desc, WindowNumber window_number, Targs... extra_arguments)
Open a new window.
void SetFocusedWindow(Window *w)
Set the window that has the focus.
Definition window.cpp:427
EnumBitSet< WindowFlag, uint16_t > WindowFlags
Bitset of WindowFlag elements.
Definition window_gui.h:238
WindowFlag
Window flags.
Definition window_gui.h:223
@ SizingLeft
Window is being resized towards the left.
Definition window_gui.h:228
@ DisableVpScroll
Window does not do autoscroll,.
Definition window_gui.h:231
@ Highlighted
Window has a widget that has a highlight.
Definition window_gui.h:233
@ Centred
Window is centered and shall stay centered after ReInit.
Definition window_gui.h:234
@ Dragging
Window is being dragged.
Definition window_gui.h:226
@ SizingRight
Window is being resized towards the right.
Definition window_gui.h:227
@ WhiteBorder
Window white border counter bit mask.
Definition window_gui.h:232
@ Timeout
Window timeout counter.
Definition window_gui.h:224
@ Sticky
Window is made sticky by user.
Definition window_gui.h:230
Window * FindWindowFromPt(int x, int y)
Do a search for a window at specific coordinates.
Definition window.cpp:1850
void DrawCaption(const Rect &r, Colours colour, Owner owner, TextColour text_colour, std::string_view str, StringAlignment align, FontSize fs)
Draw a caption bar.
Definition widget.cpp:738
static const int TIMEOUT_DURATION
The initial timeout value for WindowFlag::Timeout.
Definition window_gui.h:240
WidgetID GetWidgetFromPos(const Window *w, int x, int y)
Returns the index for the widget located at the given position relative to the window.
Definition widget.cpp:294
Point GetToolbarAlignedWindowPosition(int window_width)
Computer the position of the top-left corner of a window to be opened right under the toolbar.
Definition window.cpp:1691
SpecialMouseMode
Mouse modes.
@ DragDrop
Drag&drop an object.
@ Sizing
Sizing mode.
@ Presize
Presizing mode (docks, tunnels).
Window * BringWindowToFrontById(WindowClass cls, WindowNumber number)
Find a window and make it the relative top-window on the screen.
Definition window.cpp:1285
Point AlignInitialConstructionToolbar(int window_width)
Compute the position of the construction toolbars.
Definition window.cpp:1707
void RelocateAllWindows(int neww, int newh)
Relocate all windows to fit the new size of the game application screen.
Definition window.cpp:3548
void ScrollbarClickHandler(Window *w, NWidgetCore *nw, int x, int y)
Special handling for the scrollbar widget type.
Definition widget.cpp:270
EnumBitSet< WindowDefaultFlag, uint8_t > WindowDefaultFlags
Bitset of WindowDefaultFlag elements.
Definition window_gui.h:162
WindowPosition
How do we the window to be placed?
Definition window_gui.h:144
@ AlignToolbar
Align toward the toolbar.
Definition window_gui.h:148
@ Automatic
Find a place automatically.
Definition window_gui.h:146
@ Center
Center the window.
Definition window_gui.h:147
@ Manual
Manually align the window (so no automatic location finding).
Definition window_gui.h:145
WindowList _z_windows
List of windows opened at the screen sorted from the front to back.
Definition window.cpp:52
static const int WHITE_BORDER_DURATION
The initial timeout value for WindowFlag::WhiteBorder.
Definition window_gui.h:241
Rect ScrollRect(Rect r, const Scrollbar &sb, int resize_step=1)
Apply 'scroll' to a rect to be drawn in.
Definition widget.cpp:2547
int WidgetID
Widget ID.
Definition window_type.h:21
EventState
State of handling an event.
@ NotHandled
The passed event is not handled.
static constexpr WidgetID INVALID_WIDGET
An invalid widget index.
Definition window_type.h:24