OpenTTD Source  20240915-master-g3784a3d3d6
misc_gui.cpp File Reference
#include "stdafx.h"
#include "debug.h"
#include "landscape.h"
#include "error.h"
#include "gui.h"
#include "gfx_layout.h"
#include "command_func.h"
#include "company_func.h"
#include "town.h"
#include "string_func.h"
#include "company_base.h"
#include "texteff.hpp"
#include "strings_func.h"
#include "window_func.h"
#include "querystring_gui.h"
#include "core/geometry_func.hpp"
#include "newgrf_debug.h"
#include "zoom_func.h"
#include "viewport_func.h"
#include "landscape_cmd.h"
#include "rev.h"
#include "timer/timer.h"
#include "timer/timer_window.h"
#include "pathfinder/water_regions.h"
#include "widgets/misc_widget.h"
#include "table/strings.h"
#include <sstream>
#include <iomanip>
#include "safeguards.h"

Go to the source code of this file.

Data Structures

class  LandInfoWindow
 
struct  AboutWindow
 
struct  TooltipsWindow
 Window for displaying a tooltip. More...
 
struct  QueryStringWindow
 Class for the string query window. More...
 
struct  QueryWindow
 Window used for asking the user a YES/NO question. More...
 

Macros

#define LANDINFOD_LEVEL   1
 

Enumerations

enum  OskActivation { OSKA_DISABLED, OSKA_DOUBLE_CLICK, OSKA_SINGLE_CLICK, OSKA_IMMEDIATELY }
 Method to open the OSK. More...
 

Functions

void ShowLandInfo (TileIndex tile)
 Show land information window. More...
 
void ShowAboutWindow ()
 
void ShowEstimatedCostOrIncome (Money cost, int x, int y)
 Display estimated costs. More...
 
void ShowCostOrIncomeAnimation (int x, int y, int z, Money cost)
 Display animated income or costs on the map. More...
 
void ShowFeederIncomeAnimation (int x, int y, int z, Money transfer, Money income)
 Display animated feeder income. More...
 
TextEffectID ShowFillingPercent (int x, int y, int z, uint8_t percent, StringID string)
 Display vehicle loading indicators. More...
 
void UpdateFillingPercent (TextEffectID te_id, uint8_t percent, StringID string)
 Update vehicle loading indicators. More...
 
void HideFillingPercent (TextEffectID *te_id)
 Hide vehicle loading indicators. More...
 
void GuiShowTooltips (Window *parent, StringID str, TooltipCloseCondition close_tooltip, uint paramcount)
 Shows a tooltip. More...
 
static int GetCaretWidth ()
 
static Rect ScrollEditBoxTextRect (Rect r, const Textbuf &tb)
 Reposition edit text box rect based on textbuf length can caret position. More...
 
void ShowQueryString (StringID str, StringID caption, uint maxsize, Window *parent, CharSetFilter afilter, QueryStringFlags flags)
 Show a query popup window with a textbox in it. More...
 
void ShowQuery (StringID caption, StringID message, Window *parent, QueryCallbackProc *callback, bool focus)
 Show a confirmation window with standard 'yes' and 'no' buttons The window is aligned to the centre of its parent. More...
 

Variables

static constexpr NWidgetPart _nested_land_info_widgets []
 
static WindowDesc _land_info_desc (WDP_AUTO, nullptr, 0, 0, WC_LAND_INFO, WC_NONE, 0, _nested_land_info_widgets)
 
static constexpr NWidgetPart _nested_about_widgets []
 
static WindowDesc _about_desc (WDP_CENTER, nullptr, 0, 0, WC_GAME_OPTIONS, WC_NONE, 0, _nested_about_widgets)
 
static const std::initializer_list< const std::string_view > _credits
 
static constexpr NWidgetPart _nested_tooltips_widgets []
 
static WindowDesc _tool_tips_desc (WDP_MANUAL, nullptr, 0, 0, WC_TOOLTIPS, WC_NONE, WDF_NO_FOCUS|WDF_NO_CLOSE, _nested_tooltips_widgets)
 
static constexpr NWidgetPart _nested_query_string_widgets []
 
static WindowDesc _query_string_desc (WDP_CENTER, nullptr, 0, 0, WC_QUERY_STRING, WC_NONE, 0, _nested_query_string_widgets)
 
static constexpr NWidgetPart _nested_query_widgets []
 
static WindowDesc _query_desc (WDP_CENTER, nullptr, 0, 0, WC_CONFIRM_POPUP_QUERY, WC_NONE, WDF_MODAL, _nested_query_widgets)
 

Detailed Description

GUIs for a number of misc windows.

Definition in file misc_gui.cpp.

Enumeration Type Documentation

◆ OskActivation

Method to open the OSK.

Enumerator
OSKA_DISABLED 

The OSK shall not be activated at all.

OSKA_DOUBLE_CLICK 

Double click on the edit box opens OSK.

OSKA_SINGLE_CLICK 

Single click after focus click opens OSK.

OSKA_IMMEDIATELY 

Focusing click already opens OSK.

Definition at line 45 of file misc_gui.cpp.

Function Documentation

◆ GuiShowTooltips()

void GuiShowTooltips ( Window parent,
StringID  str,
TooltipCloseCondition  close_tooltip,
uint  paramcount 
)

Shows a tooltip.

Parameters
parentThe window this tooltip is related to.
strString to be displayed
close_tooltipthe condition under which the tooltip closes
paramcountnumber of params to deal with

Definition at line 760 of file misc_gui.cpp.

References CloseWindowById(), and WC_TOOLTIPS.

Referenced by ShowMeasurementTooltips().

◆ HideFillingPercent()

void HideFillingPercent ( TextEffectID *  te_id)

Hide vehicle loading indicators.

Parameters
*te_idTextEffectID which is supposed to be hidden.

Definition at line 648 of file misc_gui.cpp.

Referenced by Train::Crash(), and Vehicle::PreDestructor().

◆ ScrollEditBoxTextRect()

static Rect ScrollEditBoxTextRect ( Rect  r,
const Textbuf tb 
)
static

Reposition edit text box rect based on textbuf length can caret position.

Parameters
rInitial rect of edit text box.
tbThe Textbuf being processed.
Returns
Updated rect.

Definition at line 790 of file misc_gui.cpp.

References Textbuf::pixels.

◆ ShowCostOrIncomeAnimation()

void ShowCostOrIncomeAnimation ( int  x,
int  y,
int  z,
Money  cost 
)

Display animated income or costs on the map.

Does nothing if cost is zero.

Parameters
xWorld X position of the animation location.
yWorld Y position of the animation location.
zWorld Z position of the animation location.
costEstimated cost (or income if negative).

Definition at line 570 of file misc_gui.cpp.

Referenced by CmdChangeBankBalance().

◆ ShowEstimatedCostOrIncome()

void ShowEstimatedCostOrIncome ( Money  cost,
int  x,
int  y 
)

Display estimated costs.

Parameters
costEstimated cost (or income if negative).
xX position of the notification window.
yY position of the notification window.

Definition at line 551 of file misc_gui.cpp.

◆ ShowFeederIncomeAnimation()

void ShowFeederIncomeAnimation ( int  x,
int  y,
int  z,
Money  transfer,
Money  income 
)

Display animated feeder income.

Parameters
xWorld X position of the animation location.
yWorld Y position of the animation location.
zWorld Z position of the animation location.
transferEstimated feeder income.
incomeReal income from goods being delivered to their final destination.

Definition at line 594 of file misc_gui.cpp.

◆ ShowFillingPercent()

TextEffectID ShowFillingPercent ( int  x,
int  y,
int  z,
uint8_t  percent,
StringID  string 
)

Display vehicle loading indicators.

Parameters
xWorld X position of the animation location.
yWorld Y position of the animation location.
zWorld Z position of the animation location.
percentEstimated feeder income.
stringString which is drawn on the map.
Returns
TextEffectID to be used for future updates of the loading indicators.

Definition at line 621 of file misc_gui.cpp.

◆ ShowLandInfo()

void ShowLandInfo ( TileIndex  tile)

Show land information window.

Parameters
tileThe tile to show information about.

Definition at line 379 of file misc_gui.cpp.

References CloseWindowById(), and WC_LAND_INFO.

◆ ShowQuery()

void ShowQuery ( StringID  caption,
StringID  message,
Window parent,
QueryCallbackProc callback,
bool  focus 
)

Show a confirmation window with standard 'yes' and 'no' buttons The window is aligned to the centre of its parent.

Parameters
captionstring shown as window caption
messagestring that will be shown for the window
parentpointer to parent window, if this pointer is nullptr the parent becomes the main window WC_MAIN_WINDOW
callbackcallback function pointer to set in the window descriptor
focuswhether the window should be focussed (by default false)

Definition at line 1223 of file misc_gui.cpp.

References GetMainWindow(), Window::parent, QueryWindow::proc, WC_CONFIRM_POPUP_QUERY, and Window::window_class.

Referenced by CmdPause(), MakeScreenshotWithConfirm(), and SaveLoadWindow::OnTimeout().

◆ ShowQueryString()

void ShowQueryString ( StringID  str,
StringID  caption,
uint  maxsize,
Window parent,
CharSetFilter  afilter,
QueryStringFlags  flags 
)

Show a query popup window with a textbox in it.

Parameters
strStringID for the text shown in the textbox
captionStringID of text shown in caption of querywindow
maxsizemaximum size in bytes or characters (including terminating '\0') depending on flags
parentpointer to a Window that will handle the events (ok/cancel) of this window.
afilterfilters out unwanted character input
flagsvarious flags,
See also
QueryStringFlags

Definition at line 1079 of file misc_gui.cpp.

References CloseWindowByClass(), MAX_CHAR_LENGTH, QSF_LEN_IN_CHARS, and WC_QUERY_STRING.

Referenced by ToolbarScenDatePanel().

◆ UpdateFillingPercent()

void UpdateFillingPercent ( TextEffectID  te_id,
uint8_t  percent,
StringID  string 
)

Update vehicle loading indicators.

Parameters
te_idTextEffectID to be updated.
stringString which is printed.

Definition at line 636 of file misc_gui.cpp.

References SetDParam().

Variable Documentation

◆ _nested_about_widgets

constexpr NWidgetPart _nested_about_widgets[]
staticconstexpr
Initial value:
= {
NWidget(WWT_CLOSEBOX, COLOUR_GREY),
NWidget(WWT_CAPTION, COLOUR_GREY), SetDataTip(STR_ABOUT_OPENTTD, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS),
NWidget(WWT_PANEL, COLOUR_GREY), SetPIP(4, 2, 4),
NWidget(WWT_LABEL, COLOUR_GREY), SetDataTip(STR_ABOUT_ORIGINAL_COPYRIGHT, STR_NULL),
NWidget(WWT_LABEL, COLOUR_GREY), SetDataTip(STR_ABOUT_VERSION, STR_NULL),
NWidget(WWT_FRAME, COLOUR_GREY), SetPadding(0, 5, 1, 5),
NWidget(WWT_LABEL, COLOUR_GREY, WID_A_WEBSITE), SetDataTip(STR_JUST_RAW_STRING, STR_NULL),
NWidget(WWT_LABEL, COLOUR_GREY, WID_A_COPYRIGHT), SetDataTip(STR_ABOUT_COPYRIGHT_OPENTTD, STR_NULL),
}

Definition at line 385 of file misc_gui.cpp.

◆ _nested_land_info_widgets

constexpr NWidgetPart _nested_land_info_widgets[]
staticconstexpr
Initial value:
= {
NWidget(WWT_CLOSEBOX, COLOUR_GREY),
NWidget(WWT_CAPTION, COLOUR_GREY), SetDataTip(STR_LAND_AREA_INFORMATION_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS),
NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_LI_LOCATION), SetAspect(WidgetDimensions::ASPECT_LOCATION), SetDataTip(SPR_GOTO_LOCATION, STR_LAND_AREA_INFORMATION_LOCATION_TOOLTIP),
NWidget(WWT_DEBUGBOX, COLOUR_GREY),
}

Definition at line 53 of file misc_gui.cpp.

◆ _nested_query_string_widgets

constexpr NWidgetPart _nested_query_string_widgets[]
staticconstexpr
Initial value:
= {
NWidget(WWT_CLOSEBOX, COLOUR_GREY),
NWidget(WWT_CAPTION, COLOUR_GREY, WID_QS_CAPTION), SetDataTip(STR_JUST_STRING, STR_NULL), SetTextStyle(TC_WHITE),
NWidget(WWT_PANEL, COLOUR_GREY),
NWidget(WWT_EDITBOX, COLOUR_GREY, WID_QS_TEXT), SetMinimalSize(256, 0), SetFill(1, 0), SetPadding(2, 2, 2, 2),
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_QS_DEFAULT), SetMinimalSize(87, 12), SetFill(1, 1), SetDataTip(STR_BUTTON_DEFAULT, STR_NULL),
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_QS_CANCEL), SetMinimalSize(86, 12), SetFill(1, 1), SetDataTip(STR_BUTTON_CANCEL, STR_NULL),
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_QS_OK), SetMinimalSize(87, 12), SetFill(1, 1), SetDataTip(STR_BUTTON_OK, STR_NULL),
}

Definition at line 1048 of file misc_gui.cpp.

◆ _nested_query_widgets

constexpr NWidgetPart _nested_query_widgets[]
staticconstexpr
Initial value:

Definition at line 1190 of file misc_gui.cpp.

◆ _nested_tooltips_widgets

constexpr NWidgetPart _nested_tooltips_widgets[]
staticconstexpr
Initial value:
= {
NWidget(WWT_EMPTY, INVALID_COLOUR, WID_TT_BACKGROUND),
}

Definition at line 656 of file misc_gui.cpp.

SetFill
constexpr NWidgetPart SetFill(uint16_t fill_x, uint16_t fill_y)
Widget part function for setting filling.
Definition: widget_type.h:1183
WID_A_WEBSITE
@ WID_A_WEBSITE
URL of OpenTTD website.
Definition: misc_widget.h:27
WWT_CAPTION
@ WWT_CAPTION
Window caption (window title between closebox and stickybox)
Definition: widget_type.h:63
WID_Q_NO
@ WID_Q_NO
Yes button.
Definition: misc_widget.h:44
WWT_LABEL
@ WWT_LABEL
Centered label.
Definition: widget_type.h:59
NWID_HORIZONTAL
@ NWID_HORIZONTAL
Horizontal container.
Definition: widget_type.h:77
WID_Q_TEXT
@ WID_Q_TEXT
Text of the query.
Definition: misc_widget.h:43
EndContainer
constexpr NWidgetPart EndContainer()
Widget part function for denoting the end of a container (horizontal, vertical, WWT_FRAME,...
Definition: widget_type.h:1193
WWT_EMPTY
@ WWT_EMPTY
Empty widget, place holder to reserve space in widget tree.
Definition: widget_type.h:50
WID_QS_CAPTION
@ WID_QS_CAPTION
Caption of the window.
Definition: misc_widget.h:33
NC_EQUALSIZE
@ NC_EQUALSIZE
Value of the NCB_EQUALSIZE flag.
Definition: widget_type.h:526
SetPadding
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.
Definition: widget_type.h:1230
WWT_EDITBOX
@ WWT_EDITBOX
a textbox for typing
Definition: widget_type.h:73
WID_QS_TEXT
@ WID_QS_TEXT
Text of the query.
Definition: misc_widget.h:34
WWT_PUSHTXTBTN
@ WWT_PUSHTXTBTN
Normal push-button (no toggle button) with text caption.
Definition: widget_type.h:114
WID_LI_BACKGROUND
@ WID_LI_BACKGROUND
Background of the window.
Definition: misc_widget.h:16
NWidget
constexpr NWidgetPart NWidget(WidgetType tp, Colours col, WidgetID idx=-1)
Widget part function for starting a new 'real' widget.
Definition: widget_type.h:1311
WWT_FRAME
@ WWT_FRAME
Frame.
Definition: widget_type.h:62
WID_LI_LOCATION
@ WID_LI_LOCATION
Scroll to location.
Definition: misc_widget.h:15
NWID_VERTICAL
@ NWID_VERTICAL
Vertical container.
Definition: widget_type.h:79
WidgetDimensions::unscaled
static const WidgetDimensions unscaled
Unscaled widget dimensions.
Definition: window_gui.h:67
WWT_CLOSEBOX
@ WWT_CLOSEBOX
Close box (at top-left of a window)
Definition: widget_type.h:71
WID_Q_YES
@ WID_Q_YES
No button.
Definition: misc_widget.h:45
WWT_PUSHIMGBTN
@ WWT_PUSHIMGBTN
Normal push-button (no toggle button) with image caption.
Definition: widget_type.h:115
WWT_TEXT
@ WWT_TEXT
Pure simple text.
Definition: widget_type.h:60
SetPIP
constexpr NWidgetPart SetPIP(uint8_t pre, uint8_t inter, uint8_t post)
Widget part function for setting a pre/inter/post spaces.
Definition: widget_type.h:1262
WID_QS_OK
@ WID_QS_OK
OK button.
Definition: misc_widget.h:37
WWT_PANEL
@ WWT_PANEL
Simple depressed panel.
Definition: widget_type.h:52
WID_TT_BACKGROUND
@ WID_TT_BACKGROUND
Background of the window.
Definition: misc_widget.h:21
WID_QS_CANCEL
@ WID_QS_CANCEL
Cancel button.
Definition: misc_widget.h:36
WID_QS_DEFAULT
@ WID_QS_DEFAULT
Default button.
Definition: misc_widget.h:35
SetMinimalSize
constexpr NWidgetPart SetMinimalSize(int16_t x, int16_t y)
Widget part function for setting the minimal size.
Definition: widget_type.h:1139
WID_A_SCROLLING_TEXT
@ WID_A_SCROLLING_TEXT
The actually scrolling text.
Definition: misc_widget.h:26
SetDataTip
constexpr NWidgetPart SetDataTip(uint32_t data, StringID tip)
Widget part function for setting the data and tooltip.
Definition: widget_type.h:1204
WWT_DEBUGBOX
@ WWT_DEBUGBOX
NewGRF debug box (at top-right of a window, between WWT_CAPTION and WWT_SHADEBOX)
Definition: widget_type.h:65
SetAspect
constexpr NWidgetPart SetAspect(float ratio, AspectFlags flags=AspectFlags::ResizeX)
Widget part function for setting the aspect ratio.
Definition: widget_type.h:1297
WID_A_COPYRIGHT
@ WID_A_COPYRIGHT
Copyright string.
Definition: misc_widget.h:28
SetTextStyle
constexpr NWidgetPart SetTextStyle(TextColour colour, FontSize size=FS_NORMAL)
Widget part function for setting the text style.
Definition: widget_type.h:1162
WWT_TEXTBTN
@ WWT_TEXTBTN
(Toggle) Button with text
Definition: widget_type.h:57
WID_Q_CAPTION
@ WID_Q_CAPTION
Caption of the window.
Definition: misc_widget.h:42