OpenTTD Source: src/widget_type.h File Reference

OpenTTD Source 14.0-RC3

Data Structures | Typedefs | Enumerations | Functions
widget_type.h File Reference
`#include "core/alloc_type.hpp"`
`#include "core/bitmath_func.hpp"`
`#include "core/math_func.hpp"`
`#include "strings_type.h"`
`#include "gfx_type.h"`
`#include "window_type.h"`

Go to the source code of this file.

## Data Structures
class | NWidgetBase
| Baseclass for nested widgets. More...
class | NWidgetResizeBase
| Base class for a resizable nested widget. More...
class | NWidgetCore
| Base class for a 'real' widget. More...
class | NWidgetContainer
| Baseclass for container widgets. More...
class | NWidgetStacked
| Stacked widgets, widgets all occupying the same space in the window. More...
class | NWidgetPIPContainer
| Container with pre/inter/post child space. More...
class | NWidgetHorizontal
| Horizontal container. More...
class | NWidgetHorizontalLTR
| Horizontal container that doesn't change the direction of the widgets for RTL languages. More...
class | NWidgetVertical
| Vertical container. More...
class | NWidgetMatrix
| Matrix container with implicitly equal sized (virtual) sub-widgets. More...
class | NWidgetSpacer
| Spacer widget. More...
class | NWidgetBackground
| Nested widget with a child. More...
class | NWidgetViewport
| Nested widget to display a viewport in a window. More...
class | Scrollbar
| Scrollbar data structure. More...
class | NWidgetScrollbar
| Nested widget to display and control a scrollbar in a window. More...
class | NWidgetLeaf
| Leaf widget. More...
struct | NWidgetPartDataTip
| Widget part for storing data and tooltip information. More...
struct | NWidgetPartWidget
| Widget part for storing basic widget information. More...
struct | NWidgetPartPaddings
| Widget part for storing padding. More...
struct | NWidgetPartPIP
| Widget part for storing pre/inter/post spaces. More...
struct | NWidgetPartTextLines
| Widget part for storing minimal text line data. More...
struct | NWidgetPartTextStyle
| Widget part for storing text colour. More...
struct | NWidgetPartAlignment
| Widget part for setting text/image alignment within a widget. More...
struct | NWidgetPart
| Partial widget specification to allow NWidgets to be written nested. More...
union | NWidgetPart::NWidgetPartUnion

## Typedefs
using | WidgetLookup = std::map< WidgetID, class NWidgetBase * >
| Lookup between widget IDs and NWidget objects.
typedef std::unique_ptr< NWidgetBase > | NWidgetFunctionType()
| Pointer to function returning a nested widget. More...

## Enumerations
enum | MatrixWidgetValues { MAT_COL_START = 0, MAT_COL_BITS = 8, MAT_ROW_START = 8, MAT_ROW_BITS = 8 }
| Bits of the WWT_MATRIX widget data. More...
enum | ArrowWidgetValues { AWV_DECREASE, AWV_INCREASE, AWV_LEFT, AWV_RIGHT }
| Values for an arrow widget. More...
enum | ResizeWidgetValues { RWV_SHOW_BEVEL, RWV_HIDE_BEVEL }
| WidgetData values for a resize box widget. More...
enum | WidgetType { WWT_EMPTY, WWT_PANEL, WWT_INSET, WWT_IMGBTN, WWT_IMGBTN_2, WWT_ARROWBTN, WWT_TEXTBTN, WWT_TEXTBTN_2, WWT_LABEL, WWT_TEXT, WWT_MATRIX, WWT_FRAME, WWT_CAPTION, WWT_DEBUGBOX, WWT_SHADEBOX, WWT_DEFSIZEBOX, WWT_STICKYBOX, WWT_RESIZEBOX, WWT_CLOSEBOX, WWT_DROPDOWN, WWT_EDITBOX, WWT_LAST, NWID_HORIZONTAL, NWID_HORIZONTAL_LTR, NWID_VERTICAL, NWID_MATRIX, NWID_SPACER, NWID_SELECTION, NWID_VIEWPORT, NWID_BUTTON_DROPDOWN, NWID_HSCROLLBAR, NWID_VSCROLLBAR, NWID_CUSTOM, WPT_RESIZE, WPT_MINSIZE, WPT_MINTEXTLINES, WPT_FILL, WPT_DATATIP, WPT_PADDING, WPT_PIPSPACE, WPT_PIPRATIO, WPT_TEXTSTYLE, WPT_ALIGNMENT, WPT_ENDCONTAINER, WPT_FUNCTION, WPT_SCROLLBAR, WWT_MASK = 0x7F, WWB_PUSHBUTTON = 1 << 7, WWT_PUSHBTN = WWT_PANEL | WWB_PUSHBUTTON, WWT_PUSHTXTBTN = WWT_TEXTBTN | WWB_PUSHBUTTON, WWT_PUSHIMGBTN = WWT_IMGBTN | WWB_PUSHBUTTON, WWT_PUSHARROWBTN = WWT_ARROWBTN | WWB_PUSHBUTTON, NWID_PUSHBUTTON_DROPDOWN = NWID_BUTTON_DROPDOWN | WWB_PUSHBUTTON }
| Window widget types, nested widget types, and nested widget part types. More...
enum | SizingType { ST_SMALLEST, ST_RESIZE }
| Different forms of sizing nested widgets, using NWidgetBase::AssignSizePosition() More...
enum | NWidgetDisplay { NDB_LOWERED = 0, NDB_DISABLED = 1, NDB_NO_TRANSPARENCY = 2, NDB_SHADE_GREY = 3, NDB_SHADE_DIMMED = 4, NDB_DROPDOWN_ACTIVE = 5, NDB_SCROLLBAR_UP = 6, NDB_SCROLLBAR_DOWN = 7, NDB_HIGHLIGHT = 8, NDB_DROPDOWN_CLOSED = 9, ND_LOWERED = 1 << NDB_LOWERED, ND_DISABLED = 1 << NDB_DISABLED, ND_HIGHLIGHT = 1 << NDB_HIGHLIGHT, ND_NO_TRANSPARENCY = 1 << NDB_NO_TRANSPARENCY, ND_SHADE_GREY = 1 << NDB_SHADE_GREY, ND_SHADE_DIMMED = 1 << NDB_SHADE_DIMMED, ND_DROPDOWN_ACTIVE = 1 << NDB_DROPDOWN_ACTIVE, ND_SCROLLBAR_UP = 1 << NDB_SCROLLBAR_UP, ND_SCROLLBAR_DOWN = 1 << NDB_SCROLLBAR_DOWN, ND_SCROLLBAR_BTN = ND_SCROLLBAR_UP | ND_SCROLLBAR_DOWN, ND_DROPDOWN_CLOSED = 1 << NDB_DROPDOWN_CLOSED }
| Nested widget flags that affect display and interaction with 'real' widgets. More...
enum | StackedZeroSizePlanes { SZSP_VERTICAL = INT_MAX / 2, SZSP_HORIZONTAL, SZSP_NONE, SZSP_BEGIN = SZSP_VERTICAL }
| Display planes with zero size for NWidgetStacked. More...
enum | NWidContainerFlags { NCB_EQUALSIZE = 0, NCB_BIGFIRST = 1, NC_NONE = 0, NC_EQUALSIZE = 1 << NCB_EQUALSIZE, NC_BIGFIRST = 1 << NCB_BIGFIRST }
| Nested widget container flags,. More...

## Functions
uint | ComputeMaxSize (uint base, uint max_space, uint step)
| Return the biggest possible size of a nested widget. More...
constexpr NWidgetPart | SetResize (int16_t dx, int16_t dy)
| Widget part function for setting the resize step. More...
constexpr NWidgetPart | SetMinimalSize (int16_t x, int16_t y)
| Widget part function for setting the minimal size. More...
constexpr NWidgetPart | SetMinimalTextLines (uint8_t lines, uint8_t spacing, FontSize size=FS_NORMAL)
| Widget part function for setting the minimal text lines. More...
constexpr NWidgetPart | SetTextStyle (TextColour colour, FontSize size=FS_NORMAL)
| Widget part function for setting the text style. More...
constexpr NWidgetPart | SetAlignment (StringAlignment align)
| Widget part function for setting the alignment of text/images. More...
constexpr NWidgetPart | SetFill (uint16_t fill_x, uint16_t fill_y)
| Widget part function for setting filling. More...
constexpr NWidgetPart | EndContainer ()
| Widget part function for denoting the end of a container (horizontal, vertical, WWT_FRAME, WWT_INSET, or WWT_PANEL).
constexpr NWidgetPart | SetDataTip (uint32_t data, StringID tip)
| Widget part function for setting the data and tooltip. More...
constexpr NWidgetPart | SetMatrixDataTip (uint8_t cols, uint8_t rows, StringID tip)
| Widget part function for setting the data and tooltip of WWT_MATRIX widgets. More...
constexpr NWidgetPart | SetPadding (uint8_t top, uint8_t right, uint8_t bottom, uint8_t left)
| Widget part function for setting additional space around a widget. More...
constexpr NWidgetPart | SetPadding (const RectPadding &padding)
| Widget part function for setting additional space around a widget. More...
constexpr NWidgetPart | SetPadding (uint8_t padding)
| Widget part function for setting a padding. More...
constexpr NWidgetPart | SetPIP (uint8_t pre, uint8_t inter, uint8_t post)
| Widget part function for setting a pre/inter/post spaces. More...
constexpr NWidgetPart | SetPIPRatio (uint8_t ratio_pre, uint8_t ratio_inter, uint8_t ratio_post)
| Widget part function for setting a pre/inter/post ratio. More...
constexpr NWidgetPart | SetScrollbar (WidgetID index)
| Attach a scrollbar to a widget. More...
constexpr NWidgetPart | NWidget (WidgetType tp, Colours col, WidgetID idx=-1)
| Widget part function for starting a new 'real' widget. More...
constexpr NWidgetPart | NWidget (WidgetType tp, NWidContainerFlags cont_flags=NC_NONE)
| Widget part function for starting a new horizontal container, vertical container, or spacer widget. More...
constexpr NWidgetPart | NWidgetFunction (NWidgetFunctionType *func_ptr)
| Obtain a nested widget (sub)tree from an external source. More...
bool | IsContainerWidgetType (WidgetType tp)
| Test if WidgetType is a container widget. More...
std::unique_ptr< NWidgetBase > | MakeNWidgets (const NWidgetPart *nwid_begin, const NWidgetPart *nwid_end, std::unique_ptr< NWidgetBase > &&container)
| Construct a nested widget tree from an array of parts. More...
std::unique_ptr< NWidgetBase > | MakeWindowNWidgetTree (const NWidgetPart *nwid_begin, const NWidgetPart *nwid_end, NWidgetStacked **shade_select)
| Make a nested widget tree for a window from a parts array. More...
std::unique_ptr< NWidgetBase > | MakeCompanyButtonRows (WidgetID widget_first, WidgetID widget_last, Colours button_colour, int max_length, StringID button_tooltip, bool resizable=true)
| Make a number of rows with button-like graphics, for enabling/disabling each company. More...
void | SetupWidgetDimensions ()
| Set up pre-scaled versions of Widget Dimensions.

## Detailed Description

Definitions about widgets.

Definition in file widget_type.h.

## Typedef Documentation

## ◆ NWidgetFunctionType

typedef std::unique_ptr<NWidgetBase> NWidgetFunctionType()

Pointer to function returning a nested widget.

Returns
  Nested widget (tree).

Definition at line 1034 of file widget_type.h.

## Enumeration Type Documentation

## ◆ ArrowWidgetValues

enum ArrowWidgetValues

Values for an arrow widget.

Enumerator
AWV_DECREASE | Arrow to the left or in case of RTL to the right.
AWV_INCREASE | Arrow to the right or in case of RTL to the left.
AWV_LEFT | Force the arrow to the left.
AWV_RIGHT | Force the arrow to the right.

Definition at line 32 of file widget_type.h.

## ◆ MatrixWidgetValues

enum MatrixWidgetValues

Bits of the WWT_MATRIX widget data.

Enumerator
MAT_COL_START | Lowest bit of the number of columns.
MAT_COL_BITS | Number of bits for the number of columns in the matrix.
MAT_ROW_START | Lowest bit of the number of rows.
MAT_ROW_BITS | Number of bits for the number of rows in the matrix.

Definition at line 21 of file widget_type.h.

## ◆ NWidContainerFlags

enum NWidContainerFlags

Nested widget container flags,.

Enumerator
NCB_EQUALSIZE | Containers should keep all their (resizing) children equally large.
NCB_BIGFIRST | Allocate space to biggest resize first.
NC_NONE | All flags cleared.
NC_EQUALSIZE | Value of the NCB_EQUALSIZE flag.
NC_BIGFIRST | Value of the NCB_BIGFIRST flag.

Definition at line 505 of file widget_type.h.

## ◆ NWidgetDisplay

enum NWidgetDisplay

Nested widget flags that affect display and interaction with 'real' widgets.

Enumerator
NDB_LOWERED | Widget is lowered (pressed down) bit.
NDB_DISABLED | Widget is disabled (greyed out) bit.
NDB_NO_TRANSPARENCY | Viewport is never transparent.
NDB_SHADE_GREY | Shade viewport to grey-scale.
NDB_SHADE_DIMMED | Display dimmed colours in the viewport.
NDB_DROPDOWN_ACTIVE | Dropdown menu of the button dropdown widget is active. See also NWID_BUTTON_DROPDOWN
NDB_SCROLLBAR_UP | Up-button is lowered bit.
NDB_SCROLLBAR_DOWN | Down-button is lowered bit.
NDB_HIGHLIGHT | Highlight of widget is on.
NDB_DROPDOWN_CLOSED | Dropdown menu of the dropdown widget has closed.
ND_LOWERED | Bit value of the lowered flag.
ND_DISABLED | Bit value of the disabled flag.
ND_HIGHLIGHT | Bit value of the highlight flag.
ND_NO_TRANSPARENCY | Bit value of the 'no transparency' flag.
ND_SHADE_GREY | Bit value of the 'shade to grey' flag.
ND_SHADE_DIMMED | Bit value of the 'dimmed colours' flag.
ND_DROPDOWN_ACTIVE | Bit value of the 'dropdown active' flag.
ND_SCROLLBAR_UP | Bit value of the 'scrollbar up' flag.
ND_SCROLLBAR_DOWN | Bit value of the 'scrollbar down' flag.
ND_SCROLLBAR_BTN | Bit value of the 'scrollbar up' or 'scrollbar down' flag.
ND_DROPDOWN_CLOSED | Bit value of the 'dropdown closed' flag.

Definition at line 321 of file widget_type.h.

## ◆ ResizeWidgetValues

enum ResizeWidgetValues

WidgetData values for a resize box widget.

Enumerator
RWV_SHOW_BEVEL | Bevel of resize box is shown.
RWV_HIDE_BEVEL | Bevel of resize box is hidden.

Definition at line 40 of file widget_type.h.

## ◆ SizingType

enum SizingType

Different forms of sizing nested widgets, using NWidgetBase::AssignSizePosition()

Enumerator
ST_SMALLEST | Initialize nested widget tree to smallest size. Also updates current_x and current_y.
ST_RESIZE | Resize the nested widget tree.

Definition at line 117 of file widget_type.h.

## ◆ StackedZeroSizePlanes

enum StackedZeroSizePlanes

Display planes with zero size for NWidgetStacked.

Enumerator
SZSP_VERTICAL | Display plane with zero size horizontally, and filling and resizing vertically.
SZSP_HORIZONTAL | Display plane with zero size vertically, and filling and resizing horizontally.
SZSP_NONE | Display plane with zero size in both directions (none filling and resizing).
SZSP_BEGIN | First zero-size plane.

Definition at line 466 of file widget_type.h.

## ◆ WidgetType

enum WidgetType

Window widget types, nested widget types, and nested widget part types.

Enumerator
WWT_EMPTY | Empty widget, place holder to reserve space in widget tree.
WWT_PANEL | Simple depressed panel.
WWT_INSET | Pressed (inset) panel, most commonly used as combo box text area.
WWT_IMGBTN | (Toggle) Button with image
WWT_IMGBTN_2 | (Toggle) Button with diff image when clicked
WWT_ARROWBTN | (Toggle) Button with an arrow
WWT_TEXTBTN | (Toggle) Button with text
WWT_TEXTBTN_2 | (Toggle) Button with diff text when clicked
WWT_LABEL | Centered label.
WWT_TEXT | Pure simple text.
WWT_MATRIX | Grid of rows and columns. See also MatrixWidgetValues
WWT_FRAME | Frame.
WWT_CAPTION | Window caption (window title between closebox and stickybox)
WWT_DEBUGBOX | NewGRF debug box (at top-right of a window, between WWT_CAPTION and WWT_SHADEBOX)
WWT_SHADEBOX | Shade box (at top-right of a window, between WWT_DEBUGBOX and WWT_DEFSIZEBOX)
WWT_DEFSIZEBOX | Default window size box (at top-right of a window, between WWT_SHADEBOX and WWT_STICKYBOX)
WWT_STICKYBOX | Sticky box (at top-right of a window, after WWT_DEFSIZEBOX)
WWT_RESIZEBOX | Resize box (normally at bottom-right of a window)
WWT_CLOSEBOX | Close box (at top-left of a window)
WWT_DROPDOWN | Drop down list.
WWT_EDITBOX | a textbox for typing
WWT_LAST | Last Item. use WIDGETS_END to fill up padding!!
NWID_HORIZONTAL | Horizontal container.
NWID_HORIZONTAL_LTR | Horizontal container that doesn't change the order of the widgets for RTL languages.
NWID_VERTICAL | Vertical container.
NWID_MATRIX | Matrix container.
NWID_SPACER | Invisible widget that takes some space.
NWID_SELECTION | Stacked widgets, only one visible at a time (eg in a panel with tabs).
NWID_VIEWPORT | Nested widget containing a viewport.
NWID_BUTTON_DROPDOWN | Button with a drop-down.
NWID_HSCROLLBAR | Horizontal scrollbar.
NWID_VSCROLLBAR | Vertical scrollbar.
NWID_CUSTOM | General Custom widget.
WPT_RESIZE | Widget part for specifying resizing.
WPT_MINSIZE | Widget part for specifying minimal size.
WPT_MINTEXTLINES | Widget part for specifying minimal number of lines of text.
WPT_FILL | Widget part for specifying fill.
WPT_DATATIP | Widget part for specifying data and tooltip.
WPT_PADDING | Widget part for specifying a padding.
WPT_PIPSPACE | Widget part for specifying pre/inter/post space for containers.
WPT_PIPRATIO | Widget part for specifying pre/inter/post ratio for containers.
WPT_TEXTSTYLE | Widget part for specifying text colour.
WPT_ALIGNMENT | Widget part for specifying text/image alignment.
WPT_ENDCONTAINER | Widget part to denote end of a container.
WPT_FUNCTION | Widget part for calling a user function.
WPT_SCROLLBAR | Widget part for attaching a scrollbar.
WWT_PUSHBTN | Normal push-button (no toggle button) with custom drawing.
WWT_PUSHTXTBTN | Normal push-button (no toggle button) with text caption.
WWT_PUSHIMGBTN | Normal push-button (no toggle button) with image caption.
WWT_PUSHARROWBTN | Normal push-button (no toggle button) with arrow caption.

Definition at line 48 of file widget_type.h.

## Function Documentation

## ◆ ComputeMaxSize()

uint ComputeMaxSize | ( | uint | base,
|  | uint | max_space,
|  | uint | step
| ) |  |
| inline

Return the biggest possible size of a nested widget.

Parameters

  base | Base size of the widget.
  max_space | Available space for the widget.
  step | Stepsize of the widget.

Returns
  Biggest possible size of the widget, assuming that base may only be incremented by step size steps.

Definition at line 914 of file widget_type.h.

Referenced by NWidgetNewGRFDisplay::SetupSmallestSize().

## ◆ IsContainerWidgetType()

bool IsContainerWidgetType | ( | WidgetType | tp | ) |

Test if WidgetType is a container widget.

Parameters

  tp | WidgetType to test.

Returns
  True iff WidgetType is a container widget.

Definition at line 3086 of file widget.cpp.

References NWID_HORIZONTAL, NWID_HORIZONTAL_LTR, NWID_MATRIX, NWID_SELECTION, NWID_VERTICAL, WWT_FRAME, WWT_INSET, and WWT_PANEL.

Referenced by IsNWidgetTreeClosed(), and MakeWidgetTree().

## ◆ MakeCompanyButtonRows()

std::unique_ptr<NWidgetBase> MakeCompanyButtonRows | ( | WidgetID | widget_first,
|  | WidgetID | widget_last,
|  | Colours | button_colour,
|  | int | max_length,
|  | StringID | button_tooltip,
|  | bool | resizable
| ) |  |

Make a number of rows with button-like graphics, for enabling/disabling each company.

Parameters

  widget_first | The first widget index to use.
  widget_last | The last widget index to use.
  colour | The colour in which to draw the button.
  max_length | Maximal number of company buttons in one row.
  button_tooltip | The tooltip-string of every button.
  resizable | Whether the rows are resizable.

Returns
  Panel with rows of company buttons.

Definition at line 3203 of file widget.cpp.

References GetSpriteSize().

Referenced by MakeCompanyButtonRowsGraphGUI(), MakeCompanyButtonRowsLinkGraphGUI(), and MakeCompanyButtonRowsScriptDebug().