OpenTTD Source  20241121-master-g67a0fccfad
window_func.h File Reference

Window functions not directly related to making/drawing windows. More...

Go to the source code of this file.

Functions

WindowFindWindowById (WindowClass cls, WindowNumber number)
 Find a window by its class and window number. More...
 
WindowFindWindowByClass (WindowClass cls)
 Find any window by its class. More...
 
WindowGetMainWindow ()
 Get the main window, i.e. More...
 
void ChangeWindowOwner (Owner old_owner, Owner new_owner)
 Change the owner of all the windows one company can take over from another company in the case of a company merger. More...
 
template<typename T , std::enable_if_t< std::is_base_of< StrongTypedefBase, T >::value, int > = 0>
WindowFindWindowById (WindowClass cls, T number)
 
void ResizeWindow (Window *w, int x, int y, bool clamp_to_screen=true, bool schedule_resize=true)
 Resize the window. More...
 
int PositionMainToolbar (Window *w)
 (Re)position main toolbar window at the screen. More...
 
int PositionStatusbar (Window *w)
 (Re)position statusbar window at the screen. More...
 
int PositionNewsMessage (Window *w)
 (Re)position news message window at the screen. More...
 
int PositionNetworkChatWindow (Window *w)
 (Re)position network chat window at the screen. More...
 
int GetMainViewTop ()
 Return the top of the main view available for general use. More...
 
int GetMainViewBottom ()
 Return the bottom of the main view available for general use. More...
 
void InitWindowSystem ()
 (re)initialize the windowing system
 
void UnInitWindowSystem ()
 Close down the windowing system.
 
void ResetWindowSystem ()
 Reset the windowing system, by means of shutting it down followed by re-initialization.
 
void SetupColoursAndInitialWindow ()
 Initialise the default colours (remaps and the likes), and load the main windows.
 
void InputLoop ()
 Regular call from the global game loop.
 
void InvalidateWindowData (WindowClass cls, WindowNumber number, int data=0, bool gui_scope=false)
 Mark window data of the window of a given class and specific window number as invalid (in need of re-computing) More...
 
void InvalidateWindowClassesData (WindowClass cls, int data=0, bool gui_scope=false)
 Mark window data of all windows of a given class as invalid (in need of re-computing) Note that by default the invalidation is not considered to be called from GUI scope. More...
 
template<typename T , std::enable_if_t< std::is_base_of< StrongTypedefBase, T >::value, int > = 0>
void InvalidateWindowData (WindowClass cls, T number, int data=0, bool gui_scope=false)
 
void CloseNonVitalWindows ()
 Try to close a non-vital window. More...
 
void CloseAllNonVitalWindows ()
 It is possible that a stickied window gets to a position where the 'close' button is outside the gaming area. More...
 
void DeleteAllMessages ()
 Delete all messages and close their corresponding window (if any).
 
void CloseConstructionWindows ()
 Close all windows that are used for construction of vehicle etc. More...
 
void HideVitalWindows ()
 Close all always on-top windows to get an empty screen.
 
void ShowVitalWindows ()
 Show the vital in-game windows.
 
void ReInitAllWindows (bool zoom_changed)
 Re-initialize all windows. More...
 
void SetWindowWidgetDirty (WindowClass cls, WindowNumber number, WidgetID widget_index)
 Mark a particular widget in a particular window as dirty (in need of repainting) More...
 
void SetWindowDirty (WindowClass cls, WindowNumber number)
 Mark window as dirty (in need of repainting) More...
 
void SetWindowClassesDirty (WindowClass cls)
 Mark all windows of a particular class as dirty (in need of repainting) More...
 
template<typename T , std::enable_if_t< std::is_base_of< StrongTypedefBase, T >::value, int > = 0>
void SetWindowDirty (WindowClass cls, T number)
 
void CloseWindowById (WindowClass cls, WindowNumber number, bool force=true, int data=0)
 Close a window by its class and window number (if it is open). More...
 
void CloseWindowByClass (WindowClass cls, int data=0)
 Close all windows of a given class. More...
 
template<typename T , std::enable_if_t< std::is_base_of< StrongTypedefBase, T >::value, int > = 0>
void CloseWindowById (WindowClass cls, T number, bool force=true, int data=0)
 
bool EditBoxInGlobalFocus ()
 Check if an edit box is in global focus. More...
 
bool FocusedWindowIsConsole ()
 Check if a console is focused. More...
 
Point GetCaretPosition ()
 

Detailed Description

Window functions not directly related to making/drawing windows.

Definition in file window_func.h.

Function Documentation

◆ ChangeWindowOwner()

void ChangeWindowOwner ( Owner  old_owner,
Owner  new_owner 
)

Change the owner of all the windows one company can take over from another company in the case of a company merger.

Do not change ownership of windows that need to be deleted once takeover is complete

Parameters
old_owneroriginal owner of the window
new_ownerthe new owner of the window

Definition at line 1188 of file window.cpp.

References WC_AIRCRAFT_LIST, WC_BUY_COMPANY, WC_COMPANY, WC_COMPANY_COLOUR, WC_COMPANY_INFRASTRUCTURE, WC_FINANCES, WC_ROADVEH_LIST, WC_SHIPS_LIST, WC_STATION_LIST, WC_TRAINS_LIST, and WC_VEHICLE_ORDERS.

◆ CloseAllNonVitalWindows()

void CloseAllNonVitalWindows ( )

It is possible that a stickied window gets to a position where the 'close' button is outside the gaming area.

You cannot close it then; except with this function. It closes all windows calling the standard function, then, does a little hacked loop of closing all stickied windows. Note that standard windows (status bar, etc.) are not stickied, so these aren't affected

Definition at line 3272 of file window.cpp.

References Window::Close(), WindowDesc::flags, WDF_NO_CLOSE, and Window::window_desc.

◆ CloseConstructionWindows()

void CloseConstructionWindows ( )

Close all windows that are used for construction of vehicle etc.

Once done with that invalidate the others to ensure they get refreshed too.

Definition at line 3297 of file window.cpp.

References Window::Close(), WindowDesc::flags, Window::SetDirty(), WDF_CONSTRUCTION, and Window::window_desc.

Referenced by SetLocalCompany().

◆ CloseNonVitalWindows()

void CloseNonVitalWindows ( )

Try to close a non-vital window.

Non-vital windows are windows other than the game selection, main toolbar, status bar, toolbar menu, and tooltip windows. Stickied windows are also considered vital.

Definition at line 3253 of file window.cpp.

References Window::Close(), WindowDesc::flags, Window::flags, WDF_NO_CLOSE, WF_STICKY, and Window::window_desc.

◆ CloseWindowByClass()

◆ CloseWindowById()

◆ EditBoxInGlobalFocus()

bool EditBoxInGlobalFocus ( )

Check if an edit box is in global focus.

That is if focused window has a edit box as focused widget, or if a console is focused.

Returns
returns true if an edit box is in global focus or if the focused window is a console, else false

Definition at line 448 of file window.cpp.

Referenced by HandleKeypress(), HandleTextInput(), VideoDriver_Win32Base::PollEvent(), SetCandidatePos(), and SetCompositionPos().

◆ FindWindowByClass()

Window* FindWindowByClass ( WindowClass  cls)

Find any window by its class.

Useful when searching for a window that uses the window number as a WindowClass, like WC_SEND_NETWORK_MSG.

Parameters
clsWindow class
Returns
Pointer to the found window, or nullptr if not available

Definition at line 1113 of file window.cpp.

Referenced by GetAutoPlacePosition(), NetworkDrawChatMessage(), ShowScriptDebugWindow(), and UpdateNewGRFScanStatus().

◆ FindWindowById()

◆ FocusedWindowIsConsole()

bool FocusedWindowIsConsole ( )

Check if a console is focused.

Returns
returns true if the focused window is a console, else false

Definition at line 462 of file window.cpp.

◆ GetMainViewBottom()

int GetMainViewBottom ( )

Return the bottom of the main view available for general use.

Returns
The vertical coordinate of the first unusable row, so 'top + height <= bottom' gives the correct result.
Note
At and below the bottom y coordinate is often the status bar.

Definition at line 2073 of file window.cpp.

References FindWindowById(), and WC_STATUS_BAR.

Referenced by DropdownWindow::UpdateSizeAndPosition().

◆ GetMainViewTop()

int GetMainViewTop ( )

Return the top of the main view available for general use.

Returns
Uppermost vertical coordinate available.
Note
Above the upper y coordinate is often the main toolbar.

Definition at line 2062 of file window.cpp.

References FindWindowById(), Window::height, Window::top, and WC_MAIN_TOOLBAR.

Referenced by DropdownWindow::UpdateSizeAndPosition().

◆ GetMainWindow()

Window* GetMainWindow ( )

Get the main window, i.e.

FindWindowById(WC_MAIN_WINDOW, 0). If the main window is not available, this function will trigger an assert.

Returns
Pointer to the main window.

Definition at line 1127 of file window.cpp.

References FindWindowById(), and WC_MAIN_WINDOW.

Referenced by DEF_CONSOLE_CMD(), SmallMapWindow::DrawMapIndicators(), VehicleViewWindow::OnHotkey(), MainToolbarWindow::OnInvalidateData(), ScenarioEditorToolbarWindow::OnInvalidateData(), VehicleViewWindow::OnPaint(), SetupScreenshotViewport(), ShowNetworkAskRelay(), ShowNetworkAskSurvey(), ShowQuery(), and SmallMapWindow::SmallMapCenterOnCurrentPos().

◆ InvalidateWindowClassesData()

◆ InvalidateWindowData()

void InvalidateWindowData ( WindowClass  cls,
WindowNumber  number,
int  data,
bool  gui_scope 
)

Mark window data of the window of a given class and specific window number as invalid (in need of re-computing)

Note that by default the invalidation is not considered to be called from GUI scope. That means only a part of invalidation is executed immediately. The rest is scheduled for the next redraw. The asynchronous execution is important to prevent GUI code being executed from command scope. When not in GUI-scope:

  • OnInvalidateData() may not do test-runs on commands, as they might affect the execution of the command which triggered the invalidation. (town rating and such)
  • OnInvalidateData() may not rely on _current_company == _local_company. This implies that no NewGRF callbacks may be run.

However, when invalidations are scheduled, then multiple calls may be scheduled before execution starts. Earlier scheduled invalidations may be called with invalidation-data, which is already invalid at the point of execution. That means some stuff requires to be executed immediately in command scope, while not everything may be executed in command scope. While GUI-scope calls have no restrictions on what they may do, they cannot assume the game to still be in the state when the invalidation was scheduled; passed IDs may have got invalid in the mean time.

Finally, note that invalidations triggered from commands or the game loop result in OnInvalidateData() being called twice. Once in command-scope, once in GUI-scope. So make sure to not process differential-changes twice.

Parameters
clsWindow class
numberWindow number within the class
dataThe data to invalidate with
gui_scopeWhether the call is done from GUI scope

Definition at line 3211 of file window.cpp.

References Window::InvalidateData(), Window::window_class, and Window::window_number.

Referenced by ServerNetworkGameSocketHandler::AcceptConnection(), AcceptEnginePreview(), AddRemoveEngineFromAutoreplaceAndBuildWindows(), AircraftLeaveHangar(), Subsidy::AwardTo(), MusicSystem::ChangeMusicSet(), ChangePopulation(), CmdAddSharedVehicleGroup(), CmdCompanyCtrl(), CmdConvertRail(), CmdCreateGoal(), CmdCreateLeagueTableElement(), CmdDeleteGroup(), CmdIndustrySetText(), CmdRemoveAllVehiclesGroup(), CmdRemoveGoal(), CmdRemoveLeagueTableElement(), CmdRemoveStoryPage(), CmdRenameTown(), CmdSellRailWagon(), CmdSetGoalCompleted(), CmdSetGoalProgress(), CmdSetGoalText(), CmdTownCargoGoal(), CmdTownSetText(), CmdUpdateLeagueTableElementData(), CmdUpdateLeagueTableElementScore(), CreateSubsidy(), DeleteAllMessages(), DeleteNewGRFInspectWindow(), DeleteNews(), DeleteNewsItem(), DeleteStationIfEmpty(), DeleteSubsidyWith(), DoScanNewGRFFiles(), EnableEngineForCompany(), InvalidateAutoreplaceWindow(), InvalidateNewGRFInspectWindow(), InvalidateVehicleOrder(), NetworkChatWindow::NetworkChatWindow(), NewVehicleAvailable(), MusicSystem::Next(), NormaliseTrainHead(), MainWindow::OnInvalidateData(), MusicSystem::PlaylistRemove(), BaseStation::PostDestructor(), Company::PostDestructor(), Industry::PostDestructor(), Town::PostDestructor(), MusicSystem::Prev(), ClientNetworkGameSocketHandler::Receive_SERVER_CONFIG_UPDATE(), RemoveBuoy(), AI::Rescan(), SaveFileDone(), SaveFileStart(), SetLocalCompany(), MusicSystem::Stop(), MusicSystem::Unshuffle(), UpdateClientConfigValues(), UpdateNetworkGameWindow(), NetworkClientInfo::~NetworkClientInfo(), and ServerNetworkGameSocketHandler::~ServerNetworkGameSocketHandler().

◆ PositionMainToolbar()

int PositionMainToolbar ( Window w)

(Re)position main toolbar window at the screen.

Parameters
wWindow structure of the main toolbar window, may also be nullptr.
Returns
X coordinate of left edge of the repositioned toolbar window.

Definition at line 3382 of file window.cpp.

References _settings_client, Debug, ClientSettings::gui, PositionWindow(), GUISettings::toolbar_pos, and WC_MAIN_TOOLBAR.

Referenced by RelocateAllWindows().

◆ PositionNetworkChatWindow()

int PositionNetworkChatWindow ( Window w)

(Re)position network chat window at the screen.

Parameters
wWindow structure of the network chat window, may also be nullptr.
Returns
X coordinate of left edge of the repositioned network chat window.

Definition at line 3415 of file window.cpp.

References _settings_client, Debug, ClientSettings::gui, PositionWindow(), GUISettings::statusbar_pos, and WC_SEND_NETWORK_MSG.

Referenced by NetworkChatWindow::NetworkChatWindow(), and RelocateAllWindows().

◆ PositionNewsMessage()

int PositionNewsMessage ( Window w)

(Re)position news message window at the screen.

Parameters
wWindow structure of the news message window, may also be nullptr.
Returns
X coordinate of left edge of the repositioned news message.

Definition at line 3404 of file window.cpp.

References _settings_client, Debug, ClientSettings::gui, PositionWindow(), GUISettings::statusbar_pos, and WC_NEWS_WINDOW.

Referenced by RelocateAllWindows().

◆ PositionStatusbar()

int PositionStatusbar ( Window w)

(Re)position statusbar window at the screen.

Parameters
wWindow structure of the statusbar window, may also be nullptr.
Returns
X coordinate of left edge of the repositioned statusbar.

Definition at line 3393 of file window.cpp.

References _settings_client, Debug, ClientSettings::gui, PositionWindow(), GUISettings::statusbar_pos, and WC_STATUS_BAR.

Referenced by RelocateAllWindows().

◆ ReInitAllWindows()

void ReInitAllWindows ( bool  zoom_changed)

Re-initialize all windows.

Parameters
zoom_changedSet if windows are being re-initialized due to a zoom level changed.

Definition at line 3327 of file window.cpp.

References InitDepotWindowBlockSizes(), NWidgetLeaf::InvalidateDimensionCache(), and SetupWidgetDimensions().

Referenced by InvalidateNewGRFChangeWindows(), NewGRFConfirmationCallback(), and GameOptionsWindow::OnMouseLoop().

◆ ResizeWindow()

void ResizeWindow ( Window w,
int  delta_x,
int  delta_y,
bool  clamp_to_screen,
bool  schedule_resize 
)

Resize the window.

Update all the widgets of a window based on their resize flags Both the areas of the old window and the new sized window are set dirty ensuring proper redrawal.

Parameters
wWindow to resize
delta_xDelta x-size of changed window (positive if larger, etc.)
delta_yDelta y-size of changed window
clamp_to_screenWhether to make sure the whole window stays visible

Definition at line 2022 of file window.cpp.

References Window::height, Window::left, Window::top, and Window::width.

Referenced by Window::ReInit(), and RelocateAllWindows().

◆ SetWindowClassesDirty()

void SetWindowClassesDirty ( WindowClass  cls)

Mark all windows of a particular class as dirty (in need of repainting)

Parameters
clsWindow class

Definition at line 3119 of file window.cpp.

References Window::SetDirty(), and Window::window_class.

Referenced by AircraftLeaveHangar(), CalendarEnginesMonthlyLoop(), IntSettingDesc::ChangeValue(), CheckTrainStayInDepot(), CmdRenameDepot(), RedrawSmallmap(), AI::Rescan(), and VehicleEnterDepot().

◆ SetWindowDirty()

◆ SetWindowWidgetDirty()

void SetWindowWidgetDirty ( WindowClass  cls,
WindowNumber  number,
WidgetID  widget_index 
)

Mark a particular widget in a particular window as dirty (in need of repainting)

Parameters
clsWindow class
numberWindow number in that class
widget_indexIndex number of the widget that needs repainting

Definition at line 3106 of file window.cpp.

References Window::SetWidgetDirty(), Window::window_class, and Window::window_number.

Referenced by AircraftHandleDestTooFar(), CmdOpenCloseAirport(), Vehicle::Crash(), Vehicle::HandlePathfindingResult(), InvalidateCompanyWindows(), MarkTrainAsStuck(), NormaliseTrainHead(), GroundVehicle< T, Type >::SetLastSpeed(), ShipAccelerate(), ShipMoveUpDownOnLock(), TryPathReserve(), UpdateAircraftSpeed(), and UpdateStationAcceptance().