OpenTTD Source 20241224-master-gf74b0cf984
newgrf_debug_gui.cpp File Reference

GUIs for debugging NewGRFs. More...

#include "stdafx.h"
#include "core/backup_type.hpp"
#include "core/geometry_func.hpp"
#include "window_gui.h"
#include "window_func.h"
#include "random_access_file_type.h"
#include "spritecache.h"
#include "string_func.h"
#include "strings_func.h"
#include "textbuf_gui.h"
#include "vehicle_gui.h"
#include "zoom_func.h"
#include "engine_base.h"
#include "industry.h"
#include "object_base.h"
#include "station_base.h"
#include "town.h"
#include "vehicle_base.h"
#include "train.h"
#include "roadveh.h"
#include "newgrf_act5.h"
#include "newgrf_airport.h"
#include "newgrf_airporttiles.h"
#include "newgrf_debug.h"
#include "newgrf_object.h"
#include "newgrf_spritegroup.h"
#include "newgrf_station.h"
#include "newgrf_town.h"
#include "newgrf_railtype.h"
#include "newgrf_industries.h"
#include "newgrf_industrytiles.h"
#include "widgets/newgrf_debug_widget.h"
#include "table/strings.h"
#include "safeguards.h"
#include "table/newgrf_debug_data.h"

Go to the source code of this file.

Data Structures

struct  NIProperty
 Representation of the data from a NewGRF property. More...
 
struct  NICallback
 Representation of the available callbacks with information on when they actually apply. More...
 
struct  NIVariable
 Representation on the NewGRF variables. More...
 
class  NIHelper
 Helper class to wrap some functionality/queries in. More...
 
struct  NIFeature
 Container for all information for a given feature. More...
 
struct  NewGRFInspectWindow
 Window used for inspecting NewGRFs. More...
 
struct  SpriteAlignerWindow
 Window used for aligning sprites. More...
 

Typedefs

typedef const void * NIOffsetProc(const void *b)
 

Enumerations

enum  NIType { NIT_INT , NIT_CARGO }
 The type of a property to show. More...
 

Functions

static uint GetFeatureIndex (uint window_number)
 Get the feature index related to the window number.
 
static uint GetInspectWindowNumber (GrfSpecFeature feature, uint index)
 Get the window number for the inspect window given a feature and index.
 
static GrfSpecFeature GetFeatureNum (uint window_number)
 Get the feature number related to the window number.
 
static const NIFeatureGetFeature (uint window_number)
 Get the NIFeature related to the window number.
 
static const NIHelperGetFeatureHelper (uint window_number)
 Get the NIHelper related to the window number.
 
void ShowNewGRFInspectWindow (GrfSpecFeature feature, uint index, const uint32_t grfid)
 Show the inspect window for a given feature and index.
 
void InvalidateNewGRFInspectWindow (GrfSpecFeature feature, uint index)
 Invalidate the inspect window for a given feature and index.
 
void DeleteNewGRFInspectWindow (GrfSpecFeature feature, uint index)
 Delete inspect window for a given feature and index.
 
bool IsNewGRFInspectable (GrfSpecFeature feature, uint index)
 Can we inspect the data given a certain feature and index.
 
GrfSpecFeature GetGrfSpecFeature (TileIndex tile)
 Get the GrfSpecFeature associated with the tile.
 
GrfSpecFeature GetGrfSpecFeature (VehicleType type)
 Get the GrfSpecFeature associated with the vehicle.
 
void ShowSpriteAlignerWindow ()
 Show the window for aligning sprites.
 

Variables

NewGrfDebugSpritePicker _newgrf_debug_sprite_picker = { SPM_NONE, nullptr, std::vector<SpriteID>() }
 The sprite picker.
 
static const int CBM_NO_BIT = UINT8_MAX
 Mask to show no bit needs to be enabled for the callback.
 
static constexpr NWidgetPart _nested_newgrf_inspect_chain_widgets []
 
static constexpr NWidgetPart _nested_newgrf_inspect_widgets []
 
static WindowDesc _newgrf_inspect_chain_desc (WDP_AUTO, "newgrf_inspect_chain", 400, 300, WC_NEWGRF_INSPECT, WC_NONE, 0, _nested_newgrf_inspect_chain_widgets)
 
static WindowDesc _newgrf_inspect_desc (WDP_AUTO, "newgrf_inspect", 400, 300, WC_NEWGRF_INSPECT, WC_NONE, 0, _nested_newgrf_inspect_widgets)
 
static constexpr NWidgetPart _nested_sprite_aligner_widgets []
 
static WindowDesc _sprite_aligner_desc (WDP_AUTO, "sprite_aligner", 400, 300, WC_SPRITE_ALIGNER, WC_NONE, 0, _nested_sprite_aligner_widgets)
 

Detailed Description

GUIs for debugging NewGRFs.

Definition in file newgrf_debug_gui.cpp.

Typedef Documentation

◆ NIOffsetProc

typedef const void * NIOffsetProc(const void *b)

Definition at line 85 of file newgrf_debug_gui.cpp.

Enumeration Type Documentation

◆ NIType

enum NIType

The type of a property to show.

This is used to provide an appropriate representation in the GUI.

Enumerator
NIT_INT 

The property is a simple integer.

NIT_CARGO 

The property is a cargo.

Definition at line 80 of file newgrf_debug_gui.cpp.

Function Documentation

◆ DeleteNewGRFInspectWindow()

void DeleteNewGRFInspectWindow ( GrfSpecFeature  feature,
uint  index 
)

Delete inspect window for a given feature and index.

The index is normally an in-game location/identifier, such as a TileIndex or an IndustryID depending on the feature we want to inspect.

Parameters
featureThe feature we want to delete the window for.
indexThe index/identifier of the feature to delete.

Definition at line 729 of file newgrf_debug_gui.cpp.

References CloseWindowById(), GetInspectWindowNumber(), GSF_INVALID, InvalidateWindowData(), WC_LAND_INFO, and WC_NEWGRF_INSPECT.

Referenced by CmdMoveRailVehicle(), CmdRemoveSingleRail(), DoClearTownHouseHelper(), ReallyClearObjectTile(), RemoveAirport(), RemoveFromRailBaseStation(), RemoveRoadStop(), RemoveRoadWaypointStop(), Town::~Town(), and Vehicle::~Vehicle().

◆ GetFeature()

static const NIFeature * GetFeature ( uint  window_number)
inlinestatic

Get the NIFeature related to the window number.

Parameters
window_numberThe window to get the NIFeature for.
Returns
the NIFeature, or nullptr is there isn't one.

Definition at line 249 of file newgrf_debug_gui.cpp.

References _nifeatures, GetFeatureNum(), and GSF_FAKE_END.

Referenced by NewGRFInspectWindow::DrawMainPanelWidget(), GetFeatureHelper(), IsNewGRFInspectable(), and NewGRFInspectWindow::OnClick().

◆ GetFeatureHelper()

static const NIHelper * GetFeatureHelper ( uint  window_number)
inlinestatic

Get the NIHelper related to the window number.

Parameters
window_numberThe window to get the NIHelper for.
Precondition
GetFeature(window_number) != nullptr
Returns
the NIHelper

Definition at line 261 of file newgrf_debug_gui.cpp.

References GetFeature(), and NIFeature::helper.

Referenced by NewGRFInspectWindow::OnClick(), and NewGRFInspectWindow::SetStringParameters().

◆ GetFeatureIndex()

static uint GetFeatureIndex ( uint  window_number)
inlinestatic

Get the feature index related to the window number.

Parameters
window_numberThe window to get the feature index from.
Returns
the feature index

Definition at line 58 of file newgrf_debug_gui.cpp.

References GB().

◆ GetFeatureNum()

static GrfSpecFeature GetFeatureNum ( uint  window_number)
inlinestatic

Get the feature number related to the window number.

Parameters
window_numberThe window to get the feature number for.
Returns
The feature number.

Definition at line 239 of file newgrf_debug_gui.cpp.

References GB().

Referenced by NewGRFInspectWindow::DrawMainPanelWidget(), NewGRFInspectWindow::DrawVehicleChainWidget(), GetFeature(), NewGRFInspectWindow::HasChainIndex(), NewGRFInspectWindow::OnClick(), NewGRFInspectWindow::OnQueryTextFinished(), and NewGRFInspectWindow::UpdateWidgetSize().

◆ GetGrfSpecFeature() [1/2]

GrfSpecFeature GetGrfSpecFeature ( TileIndex  tile)

◆ GetGrfSpecFeature() [2/2]

GrfSpecFeature GetGrfSpecFeature ( VehicleType  type)

Get the GrfSpecFeature associated with the vehicle.

Parameters
typeThe vehicle type to get the feature from.
Returns
the GrfSpecFeature.

Definition at line 789 of file newgrf_debug_gui.cpp.

References GSF_INVALID, VEH_AIRCRAFT, VEH_ROAD, VEH_SHIP, and VEH_TRAIN.

◆ GetInspectWindowNumber()

static uint GetInspectWindowNumber ( GrfSpecFeature  feature,
uint  index 
)
inlinestatic

Get the window number for the inspect window given a feature and index.

Parameters
featureThe feature we want to inspect.
indexThe index/identifier of the feature to inspect.
Returns
the InspectWindow (Window)Number

Definition at line 70 of file newgrf_debug_gui.cpp.

Referenced by DeleteNewGRFInspectWindow(), NIHVehicle::GetParent(), NIHStation::GetParent(), NIHHouse::GetParent(), NIHIndustryTile::GetParent(), NIHIndustry::GetParent(), NIHObject::GetParent(), NIHAirportTile::GetParent(), NIHAirport::GetParent(), NIHRoadStop::GetParent(), InvalidateNewGRFInspectWindow(), IsNewGRFInspectable(), and ShowNewGRFInspectWindow().

◆ InvalidateNewGRFInspectWindow()

void InvalidateNewGRFInspectWindow ( GrfSpecFeature  feature,
uint  index 
)

Invalidate the inspect window for a given feature and index.

The index is normally an in-game location/identifier, such as a TileIndex or an IndustryID depending on the feature we want to inspect.

Parameters
featureThe feature we want to invalidate the window for.
indexThe index/identifier of the feature to invalidate.

Definition at line 713 of file newgrf_debug_gui.cpp.

References GetInspectWindowNumber(), GSF_INVALID, InvalidateWindowData(), and WC_NEWGRF_INSPECT.

Referenced by Train::ConsistChanged().

◆ IsNewGRFInspectable()

bool IsNewGRFInspectable ( GrfSpecFeature  feature,
uint  index 
)

Can we inspect the data given a certain feature and index.

The index is normally an in-game location/identifier, such as a TileIndex or an IndustryID depending on the feature we want to inspect.

Parameters
featureThe feature we want to inspect.
indexThe index/identifier of the feature to inspect.
Returns
true if there is something to show.

Definition at line 751 of file newgrf_debug_gui.cpp.

References GetFeature(), GetInspectWindowNumber(), NIFeature::helper, and NIHelper::IsInspectable().

Referenced by ShowNewGRFInspectWindow().

◆ ShowNewGRFInspectWindow()

void ShowNewGRFInspectWindow ( GrfSpecFeature  feature,
uint  index,
const uint32_t  grfid 
)

Show the inspect window for a given feature and index.

The index is normally an in-game location/identifier, such as a TileIndex or an IndustryID depending on the feature we want to inspect.

Parameters
featureThe feature we want to inspect.
indexThe index/identifier of the feature to inspect.
grfidGRFID of the item opening this window, or 0 if not opened by other window.

Definition at line 695 of file newgrf_debug_gui.cpp.

References GetInspectWindowNumber(), IsNewGRFInspectable(), and NewGRFInspectWindow::SetCallerGRFID().

◆ ShowSpriteAlignerWindow()

void ShowSpriteAlignerWindow ( )

Show the window for aligning sprites.

Definition at line 1213 of file newgrf_debug_gui.cpp.

Referenced by MenuClickHelp().

Variable Documentation

◆ _nested_newgrf_inspect_chain_widgets

constexpr NWidgetPart _nested_newgrf_inspect_chain_widgets[]
staticconstexpr
Initial value:
= {
NWidget(WWT_CLOSEBOX, COLOUR_GREY),
NWidget(WWT_CAPTION, COLOUR_GREY, WID_NGRFI_CAPTION), SetDataTip(STR_NEWGRF_INSPECT_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS),
NWidget(WWT_SHADEBOX, COLOUR_GREY),
NWidget(WWT_DEFSIZEBOX, COLOUR_GREY),
NWidget(WWT_STICKYBOX, COLOUR_GREY),
NWidget(WWT_PANEL, COLOUR_GREY),
NWidget(WWT_EMPTY, COLOUR_GREY, WID_NGRFI_VEH_CHAIN), SetFill(1, 0), SetResize(1, 0),
NWidget(WWT_RESIZEBOX, COLOUR_GREY),
}
constexpr NWidgetPart SetFill(uint16_t fill_x, uint16_t fill_y)
Widget part function for setting filling.
constexpr NWidgetPart SetScrollbar(WidgetID index)
Attach a scrollbar to a widget.
constexpr NWidgetPart SetDataTip(uint32_t data, StringID tip)
Widget part function for setting the data and tooltip.
constexpr NWidgetPart SetMinimalSize(int16_t x, int16_t y)
Widget part function for setting the minimal size.
constexpr NWidgetPart NWidget(WidgetType tp, Colours col, WidgetID idx=-1)
Widget part function for starting a new 'real' widget.
constexpr NWidgetPart EndContainer()
Widget part function for denoting the end of a container (horizontal, vertical, WWT_FRAME,...
constexpr NWidgetPart SetResize(int16_t dx, int16_t dy)
Widget part function for setting the resize step.
@ WID_NGRFI_VEH_CHAIN
Display for vehicle chain.
@ WID_NGRFI_MAINPANEL
Panel widget containing the actual data.
@ WID_NGRFI_VEH_NEXT
Go to next vehicle in chain.
@ WID_NGRFI_CAPTION
The caption bar of course.
@ WID_NGRFI_VEH_PREV
Go to previous vehicle in chain.
@ WID_NGRFI_SCROLLBAR
Scrollbar.
@ AWV_DECREASE
Arrow to the left or in case of RTL to the right.
Definition widget_type.h:31
@ AWV_INCREASE
Arrow to the right or in case of RTL to the left.
Definition widget_type.h:32
@ WWT_PUSHARROWBTN
Normal push-button (no toggle button) with arrow caption.
@ NWID_HORIZONTAL
Horizontal container.
Definition widget_type.h:75
@ WWT_PANEL
Simple depressed panel.
Definition widget_type.h:50
@ WWT_STICKYBOX
Sticky box (at top-right of a window, after WWT_DEFSIZEBOX)
Definition widget_type.h:66
@ WWT_SHADEBOX
Shade box (at top-right of a window, between WWT_DEBUGBOX and WWT_DEFSIZEBOX)
Definition widget_type.h:64
@ WWT_CAPTION
Window caption (window title between closebox and stickybox)
Definition widget_type.h:61
@ NWID_VSCROLLBAR
Vertical scrollbar.
Definition widget_type.h:85
@ NWID_VERTICAL
Vertical container.
Definition widget_type.h:77
@ WWT_CLOSEBOX
Close box (at top-left of a window)
Definition widget_type.h:69
@ WWT_EMPTY
Empty widget, place holder to reserve space in widget tree.
Definition widget_type.h:48
@ WWT_RESIZEBOX
Resize box (normally at bottom-right of a window)
Definition widget_type.h:68
@ WWT_DEFSIZEBOX
Default window size box (at top-right of a window, between WWT_SHADEBOX and WWT_STICKYBOX)
Definition widget_type.h:65

Definition at line 630 of file newgrf_debug_gui.cpp.

◆ _nested_newgrf_inspect_widgets

constexpr NWidgetPart _nested_newgrf_inspect_widgets[]
staticconstexpr
Initial value:
= {
NWidget(WWT_CLOSEBOX, COLOUR_GREY),
NWidget(WWT_CAPTION, COLOUR_GREY, WID_NGRFI_CAPTION), SetDataTip(STR_NEWGRF_INSPECT_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS),
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_NGRFI_PARENT), SetDataTip(STR_NEWGRF_INSPECT_PARENT_BUTTON, STR_NEWGRF_INSPECT_PARENT_TOOLTIP),
NWidget(WWT_SHADEBOX, COLOUR_GREY),
NWidget(WWT_DEFSIZEBOX, COLOUR_GREY),
NWidget(WWT_STICKYBOX, COLOUR_GREY),
NWidget(WWT_RESIZEBOX, COLOUR_GREY),
}
@ WID_NGRFI_PARENT
Inspect the parent.
@ WWT_PUSHTXTBTN
Normal push-button (no toggle button) with text caption.

Definition at line 654 of file newgrf_debug_gui.cpp.

◆ _nested_sprite_aligner_widgets

constexpr NWidgetPart _nested_sprite_aligner_widgets[]
staticconstexpr

Definition at line 1133 of file newgrf_debug_gui.cpp.

◆ _newgrf_debug_sprite_picker

NewGrfDebugSpritePicker _newgrf_debug_sprite_picker = { SPM_NONE, nullptr, std::vector<SpriteID>() }

◆ CBM_NO_BIT

const int CBM_NO_BIT = UINT8_MAX
static

Mask to show no bit needs to be enabled for the callback.

Definition at line 109 of file newgrf_debug_gui.cpp.

Referenced by NewGRFInspectWindow::DrawMainPanelWidget().