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

GUI that shows performance graphs. More...

#include "stdafx.h"
#include "graph_gui.h"
#include "window_gui.h"
#include "company_base.h"
#include "company_gui.h"
#include "economy_func.h"
#include "cargotype.h"
#include "strings_func.h"
#include "window_func.h"
#include "gfx_func.h"
#include "core/geometry_func.hpp"
#include "currency.h"
#include "timer/timer.h"
#include "timer/timer_window.h"
#include "timer/timer_game_tick.h"
#include "timer/timer_game_economy.h"
#include "zoom_func.h"
#include "industry.h"
#include "widgets/graph_widget.h"
#include "table/strings.h"
#include "table/sprites.h"
#include "safeguards.h"

Go to the source code of this file.

Data Structures

struct  GraphLegendWindow
 
struct  ValuesInterval
 Contains the interval of a graph's data. More...
 
struct  BaseGraphWindow
 
struct  BaseGraphWindow::DataSet
 
struct  OperatingProfitGraphWindow
 
struct  IncomeGraphWindow
 
struct  DeliveredCargoGraphWindow
 
struct  PerformanceHistoryGraphWindow
 
struct  CompanyValueGraphWindow
 
struct  PaymentRatesGraphWindow
 
struct  PerformanceRatingDetailWindow
 
struct  IndustryProductionGraphWindow
 

Functions

static std::unique_ptr< NWidgetBaseMakeNWidgetCompanyLines ()
 Construct a vertical list of buttons, one for each company.
 
static void ShowGraphLegend ()
 
void ShowOperatingProfitGraph ()
 
void ShowIncomeGraph ()
 
void ShowDeliveredCargoGraph ()
 
void ShowPerformanceHistoryGraph ()
 
void ShowCompanyValueGraph ()
 
void ShowCargoPaymentRates ()
 
void ShowIndustryProductionGraph (WindowNumber window_number)
 
static std::unique_ptr< NWidgetBaseMakePerformanceDetailPanels ()
 Make a vertical list of panels for outputting score details.
 
std::unique_ptr< NWidgetBaseMakeCompanyButtonRowsGraphGUI ()
 Make a number of rows with buttons for each company for the performance rating detail window.
 
void ShowPerformanceRatingDetail ()
 
void InitializeGraphGui ()
 

Variables

static CompanyMask _legend_excluded_companies
 
static CargoTypes _legend_excluded_cargo_payment_rates
 
static CargoTypes _legend_excluded_cargo_production_history
 
static const OverflowSafeInt64 INVALID_DATAPOINT (INT64_MAX)
 
static const uint INVALID_DATAPOINT_POS = UINT_MAX
 
constexpr double INT64_MAX_IN_DOUBLE = static_cast<double>(INT64_MAX - 512)
 The biggest double that when cast to int64_t still fits in a int64_t.
 
static constexpr NWidgetPart _nested_graph_legend_widgets []
 
static WindowDesc _graph_legend_desc (WDP_AUTO, "graph_legend", 0, 0, WC_GRAPH_LEGEND, WC_NONE, 0, _nested_graph_legend_widgets)
 
static constexpr NWidgetPart _nested_operating_profit_widgets []
 
static WindowDesc _operating_profit_desc (WDP_AUTO, "graph_operating_profit", 0, 0, WC_OPERATING_PROFIT, WC_NONE, 0, _nested_operating_profit_widgets)
 
static constexpr NWidgetPart _nested_income_graph_widgets []
 
static WindowDesc _income_graph_desc (WDP_AUTO, "graph_income", 0, 0, WC_INCOME_GRAPH, WC_NONE, 0, _nested_income_graph_widgets)
 
static constexpr NWidgetPart _nested_delivered_cargo_graph_widgets []
 
static WindowDesc _delivered_cargo_graph_desc (WDP_AUTO, "graph_delivered_cargo", 0, 0, WC_DELIVERED_CARGO, WC_NONE, 0, _nested_delivered_cargo_graph_widgets)
 
static constexpr NWidgetPart _nested_performance_history_widgets []
 
static WindowDesc _performance_history_desc (WDP_AUTO, "graph_performance", 0, 0, WC_PERFORMANCE_HISTORY, WC_NONE, 0, _nested_performance_history_widgets)
 
static constexpr NWidgetPart _nested_company_value_graph_widgets []
 
static WindowDesc _company_value_graph_desc (WDP_AUTO, "graph_company_value", 0, 0, WC_COMPANY_VALUE, WC_NONE, 0, _nested_company_value_graph_widgets)
 
static constexpr NWidgetPart _nested_cargo_payment_rates_widgets []
 
static WindowDesc _cargo_payment_rates_desc (WDP_AUTO, "graph_cargo_payment_rates", 0, 0, WC_PAYMENT_RATES, WC_NONE, 0, _nested_cargo_payment_rates_widgets)
 
static constexpr NWidgetPart _nested_industry_production_widgets []
 
static WindowDesc _industry_production_desc (WDP_AUTO, "graph_industry_production", 0, 0, WC_INDUSTRY_PRODUCTION, WC_INDUSTRY_VIEW, 0, _nested_industry_production_widgets)
 
static constexpr NWidgetPart _nested_performance_rating_detail_widgets []
 
static WindowDesc _performance_rating_detail_desc (WDP_AUTO, "league_details", 0, 0, WC_PERFORMANCE_DETAIL, WC_NONE, 0, _nested_performance_rating_detail_widgets)
 

Detailed Description

GUI that shows performance graphs.

Definition in file graph_gui.cpp.

Function Documentation

◆ InitializeGraphGui()

void InitializeGraphGui ( )

Definition at line 1850 of file graph_gui.cpp.

◆ MakeCompanyButtonRowsGraphGUI()

std::unique_ptr< NWidgetBase > MakeCompanyButtonRowsGraphGUI ( )

Make a number of rows with buttons for each company for the performance rating detail window.

Definition at line 1820 of file graph_gui.cpp.

References MakeCompanyButtonRows(), WID_PRD_COMPANY_FIRST, and WID_PRD_COMPANY_LAST.

◆ MakeNWidgetCompanyLines()

static std::unique_ptr< NWidgetBase > MakeNWidgetCompanyLines ( )
static

Construct a vertical list of buttons, one for each company.

Returns
Panel with company buttons.

Definition at line 117 of file graph_gui.cpp.

References FS_NORMAL, GetSpriteSize(), NC_EQUALSIZE, WidgetDimensions::unscaled, WID_GL_FIRST_COMPANY, WID_GL_LAST_COMPANY, WWT_PANEL, and ZOOM_LVL_NORMAL.

◆ MakePerformanceDetailPanels()

static std::unique_ptr< NWidgetBase > MakePerformanceDetailPanels ( )
static

Make a vertical list of panels for outputting score details.

Returns
Panel with performance details.

Definition at line 1791 of file graph_gui.cpp.

References lengthof, NC_EQUALSIZE, SCORE_END, TimerGameEconomy::UsingWallclockUnits(), WID_PRD_SCORE_FIRST, WID_PRD_SCORE_LAST, and WWT_PANEL.

◆ ShowCargoPaymentRates()

void ShowCargoPaymentRates ( )

Definition at line 1262 of file graph_gui.cpp.

◆ ShowCompanyValueGraph()

void ShowCompanyValueGraph ( )

Definition at line 1019 of file graph_gui.cpp.

◆ ShowDeliveredCargoGraph()

void ShowDeliveredCargoGraph ( )

Definition at line 898 of file graph_gui.cpp.

◆ ShowGraphLegend()

static void ShowGraphLegend ( )
static

Definition at line 153 of file graph_gui.cpp.

◆ ShowIncomeGraph()

void ShowIncomeGraph ( )

Definition at line 841 of file graph_gui.cpp.

◆ ShowIndustryProductionGraph()

void ShowIndustryProductionGraph ( WindowNumber  window_number)

Definition at line 1782 of file graph_gui.cpp.

◆ ShowOperatingProfitGraph()

void ShowOperatingProfitGraph ( )

Definition at line 783 of file graph_gui.cpp.

◆ ShowPerformanceHistoryGraph()

void ShowPerformanceHistoryGraph ( )

Definition at line 962 of file graph_gui.cpp.

◆ ShowPerformanceRatingDetail()

void ShowPerformanceRatingDetail ( )

Definition at line 1845 of file graph_gui.cpp.

Variable Documentation

◆ _legend_excluded_cargo_payment_rates

CargoTypes _legend_excluded_cargo_payment_rates
static

Definition at line 38 of file graph_gui.cpp.

◆ _legend_excluded_cargo_production_history

CargoTypes _legend_excluded_cargo_production_history
static

Definition at line 39 of file graph_gui.cpp.

◆ _legend_excluded_companies

CompanyMask _legend_excluded_companies
static

Definition at line 37 of file graph_gui.cpp.

◆ _nested_cargo_payment_rates_widgets

constexpr NWidgetPart _nested_cargo_payment_rates_widgets[]
staticconstexpr

Definition at line 1216 of file graph_gui.cpp.

◆ _nested_company_value_graph_widgets

constexpr NWidgetPart _nested_company_value_graph_widgets[]
staticconstexpr
Initial value:
= {
NWidget(WWT_CLOSEBOX, COLOUR_BROWN),
NWidget(WWT_CAPTION, COLOUR_BROWN), SetDataTip(STR_GRAPH_COMPANY_VALUES_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS),
NWidget(WWT_PUSHTXTBTN, COLOUR_BROWN, WID_GRAPH_KEY_BUTTON), SetMinimalSize(50, 0), SetDataTip(STR_GRAPH_KEY_BUTTON, STR_GRAPH_KEY_TOOLTIP),
NWidget(WWT_SHADEBOX, COLOUR_BROWN),
NWidget(WWT_DEFSIZEBOX, COLOUR_BROWN),
NWidget(WWT_STICKYBOX, COLOUR_BROWN),
NWidget(WWT_EMPTY, COLOUR_BROWN, WID_GRAPH_GRAPH), SetMinimalSize(576, 224), SetFill(1, 1), SetResize(1, 1),
NWidget(WWT_TEXT, COLOUR_BROWN, WID_GRAPH_FOOTER), SetMinimalSize(0, 6), SetPadding(2, 0, 2, 0), SetDataTip(STR_EMPTY, STR_NULL),
NWidget(WWT_RESIZEBOX, COLOUR_BROWN, WID_GRAPH_RESIZE), SetDataTip(RWV_HIDE_BEVEL, STR_TOOLTIP_RESIZE),
}
@ WID_GRAPH_FOOTER
Footer.
@ WID_GRAPH_RESIZE
Resize button.
@ WID_GRAPH_BACKGROUND
Background of the window.
@ WID_GRAPH_GRAPH
Graph itself.
@ WID_GRAPH_KEY_BUTTON
Key button.
constexpr NWidgetPart SetFill(uint16_t fill_x, uint16_t fill_y)
Widget part function for setting filling.
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.
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.
@ WWT_PUSHTXTBTN
Normal push-button (no toggle button) with text caption.
@ NWID_SPACER
Invisible widget that takes some space.
Definition widget_type.h:79
@ 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_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
@ WWT_TEXT
Pure simple text.
Definition widget_type.h:58
@ RWV_HIDE_BEVEL
Bevel of resize box is hidden.
Definition widget_type.h:40

Definition at line 990 of file graph_gui.cpp.

◆ _nested_delivered_cargo_graph_widgets

constexpr NWidgetPart _nested_delivered_cargo_graph_widgets[]
staticconstexpr
Initial value:
= {
NWidget(WWT_CLOSEBOX, COLOUR_BROWN),
NWidget(WWT_CAPTION, COLOUR_BROWN), SetDataTip(STR_GRAPH_CARGO_DELIVERED_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS),
NWidget(WWT_PUSHTXTBTN, COLOUR_BROWN, WID_GRAPH_KEY_BUTTON), SetMinimalSize(50, 0), SetDataTip(STR_GRAPH_KEY_BUTTON, STR_GRAPH_KEY_TOOLTIP),
NWidget(WWT_SHADEBOX, COLOUR_BROWN),
NWidget(WWT_DEFSIZEBOX, COLOUR_BROWN),
NWidget(WWT_STICKYBOX, COLOUR_BROWN),
NWidget(WWT_EMPTY, COLOUR_BROWN, WID_GRAPH_GRAPH), SetMinimalSize(576, 128), SetFill(1, 1), SetResize(1, 1),
NWidget(WWT_TEXT, COLOUR_BROWN, WID_GRAPH_FOOTER), SetMinimalSize(0, 6), SetPadding(2, 0, 2, 0), SetDataTip(STR_EMPTY, STR_NULL),
NWidget(WWT_RESIZEBOX, COLOUR_BROWN, WID_GRAPH_RESIZE), SetDataTip(RWV_HIDE_BEVEL, STR_TOOLTIP_RESIZE),
}

Definition at line 869 of file graph_gui.cpp.

◆ _nested_graph_legend_widgets

constexpr NWidgetPart _nested_graph_legend_widgets[]
staticconstexpr
Initial value:
= {
NWidget(WWT_CLOSEBOX, COLOUR_BROWN),
NWidget(WWT_CAPTION, COLOUR_BROWN), SetDataTip(STR_GRAPH_KEY_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS),
NWidget(WWT_SHADEBOX, COLOUR_BROWN),
NWidget(WWT_STICKYBOX, COLOUR_BROWN),
}
static std::unique_ptr< NWidgetBase > MakeNWidgetCompanyLines()
Construct a vertical list of buttons, one for each company.
@ WID_GL_BACKGROUND
Background of the window.
constexpr NWidgetPart NWidgetFunction(NWidgetFunctionType *func_ptr)
Obtain a nested widget (sub)tree from an external source.

Definition at line 134 of file graph_gui.cpp.

◆ _nested_income_graph_widgets

constexpr NWidgetPart _nested_income_graph_widgets[]
staticconstexpr
Initial value:
= {
NWidget(WWT_CLOSEBOX, COLOUR_BROWN),
NWidget(WWT_CAPTION, COLOUR_BROWN), SetDataTip(STR_GRAPH_INCOME_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS),
NWidget(WWT_PUSHTXTBTN, COLOUR_BROWN, WID_GRAPH_KEY_BUTTON), SetMinimalSize(50, 0), SetDataTip(STR_GRAPH_KEY_BUTTON, STR_GRAPH_KEY_TOOLTIP),
NWidget(WWT_SHADEBOX, COLOUR_BROWN),
NWidget(WWT_DEFSIZEBOX, COLOUR_BROWN),
NWidget(WWT_STICKYBOX, COLOUR_BROWN),
NWidget(WWT_EMPTY, COLOUR_BROWN, WID_GRAPH_GRAPH), SetMinimalSize(576, 128), SetFill(1, 1), SetResize(1, 1),
NWidget(WWT_TEXT, COLOUR_BROWN, WID_GRAPH_FOOTER), SetMinimalSize(0, 6), SetPadding(2, 0, 2, 0), SetDataTip(STR_EMPTY, STR_NULL),
NWidget(WWT_RESIZEBOX, COLOUR_BROWN, WID_GRAPH_RESIZE), SetDataTip(RWV_HIDE_BEVEL, STR_TOOLTIP_RESIZE),
}

Definition at line 812 of file graph_gui.cpp.

◆ _nested_industry_production_widgets

constexpr NWidgetPart _nested_industry_production_widgets[]
staticconstexpr

Definition at line 1740 of file graph_gui.cpp.

◆ _nested_operating_profit_widgets

constexpr NWidgetPart _nested_operating_profit_widgets[]
staticconstexpr
Initial value:
= {
NWidget(WWT_CLOSEBOX, COLOUR_BROWN),
NWidget(WWT_CAPTION, COLOUR_BROWN), SetDataTip(STR_GRAPH_OPERATING_PROFIT_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS),
NWidget(WWT_PUSHTXTBTN, COLOUR_BROWN, WID_GRAPH_KEY_BUTTON), SetMinimalSize(50, 0), SetDataTip(STR_GRAPH_KEY_BUTTON, STR_GRAPH_KEY_TOOLTIP),
NWidget(WWT_SHADEBOX, COLOUR_BROWN),
NWidget(WWT_DEFSIZEBOX, COLOUR_BROWN),
NWidget(WWT_STICKYBOX, COLOUR_BROWN),
NWidget(WWT_EMPTY, COLOUR_BROWN, WID_GRAPH_GRAPH), SetMinimalSize(576, 160), SetFill(1, 1), SetResize(1, 1),
NWidget(WWT_TEXT, COLOUR_BROWN, WID_GRAPH_FOOTER), SetMinimalSize(0, 6), SetPadding(2, 0, 2, 0), SetDataTip(STR_EMPTY, STR_NULL),
NWidget(WWT_RESIZEBOX, COLOUR_BROWN, WID_GRAPH_RESIZE), SetDataTip(RWV_HIDE_BEVEL, STR_TOOLTIP_RESIZE),
}

Definition at line 753 of file graph_gui.cpp.

◆ _nested_performance_history_widgets

constexpr NWidgetPart _nested_performance_history_widgets[]
staticconstexpr
Initial value:
= {
NWidget(WWT_CLOSEBOX, COLOUR_BROWN),
NWidget(WWT_CAPTION, COLOUR_BROWN), SetDataTip(STR_GRAPH_COMPANY_PERFORMANCE_RATINGS_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS),
NWidget(WWT_PUSHTXTBTN, COLOUR_BROWN, WID_PHG_DETAILED_PERFORMANCE), SetMinimalSize(50, 0), SetDataTip(STR_PERFORMANCE_DETAIL_KEY, STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP),
NWidget(WWT_PUSHTXTBTN, COLOUR_BROWN, WID_GRAPH_KEY_BUTTON), SetMinimalSize(50, 0), SetDataTip(STR_GRAPH_KEY_BUTTON, STR_GRAPH_KEY_TOOLTIP),
NWidget(WWT_SHADEBOX, COLOUR_BROWN),
NWidget(WWT_DEFSIZEBOX, COLOUR_BROWN),
NWidget(WWT_STICKYBOX, COLOUR_BROWN),
NWidget(WWT_EMPTY, COLOUR_BROWN, WID_GRAPH_GRAPH), SetMinimalSize(576, 224), SetFill(1, 1), SetResize(1, 1),
NWidget(WWT_TEXT, COLOUR_BROWN, WID_GRAPH_FOOTER), SetMinimalSize(0, 6), SetPadding(2, 0, 2, 0), SetDataTip(STR_EMPTY, STR_NULL),
NWidget(WWT_RESIZEBOX, COLOUR_BROWN, WID_GRAPH_RESIZE), SetDataTip(RWV_HIDE_BEVEL, STR_TOOLTIP_RESIZE),
}
@ WID_PHG_DETAILED_PERFORMANCE
Detailed performance.

Definition at line 932 of file graph_gui.cpp.

◆ _nested_performance_rating_detail_widgets

constexpr NWidgetPart _nested_performance_rating_detail_widgets[]
staticconstexpr
Initial value:
= {
NWidget(WWT_CLOSEBOX, COLOUR_BROWN),
NWidget(WWT_CAPTION, COLOUR_BROWN), SetDataTip(STR_PERFORMANCE_DETAIL, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS),
NWidget(WWT_SHADEBOX, COLOUR_BROWN),
NWidget(WWT_STICKYBOX, COLOUR_BROWN),
NWidget(WWT_PANEL, COLOUR_BROWN),
}
std::unique_ptr< NWidgetBase > MakeCompanyButtonRowsGraphGUI()
Make a number of rows with buttons for each company for the performance rating detail window.
static std::unique_ptr< NWidgetBase > MakePerformanceDetailPanels()
Make a vertical list of panels for outputting score details.

Definition at line 1825 of file graph_gui.cpp.

◆ INT64_MAX_IN_DOUBLE

constexpr double INT64_MAX_IN_DOUBLE = static_cast<double>(INT64_MAX - 512)
constexpr

The biggest double that when cast to int64_t still fits in a int64_t.

Definition at line 45 of file graph_gui.cpp.

Referenced by BaseGraphWindow::GetValuesInterval().

◆ INVALID_DATAPOINT_POS

const uint INVALID_DATAPOINT_POS = UINT_MAX
static

Definition at line 43 of file graph_gui.cpp.