|
@@ -77,35 +77,42 @@ struct GraphLegendWindow : Window {
|
|
|
|
|
|
ToggleBit(_legend_excluded_companies, widget - GLW_FIRST_COMPANY);
|
|
|
this->ToggleWidgetLoweredState(widget);
|
|
|
this->SetDirty();
|
|
|
InvalidateWindow(WC_INCOME_GRAPH, 0);
|
|
|
InvalidateWindow(WC_OPERATING_PROFIT, 0);
|
|
|
InvalidateWindow(WC_DELIVERED_CARGO, 0);
|
|
|
InvalidateWindow(WC_PERFORMANCE_HISTORY, 0);
|
|
|
InvalidateWindow(WC_COMPANY_VALUE, 0);
|
|
|
}
|
|
|
};
|
|
|
|
|
|
static NWidgetBase *MakeNWidgetCompanyLines()
|
|
|
/**
|
|
|
* Construct a vertical list of buttons, one for each company.
|
|
|
* @param biggest_index Storage for collecting the biggest index used in the returned tree.
|
|
|
* @return Panel with company buttons.
|
|
|
* @postcond \c *biggest_index contains the largest used index in the tree.
|
|
|
*/
|
|
|
static NWidgetBase *MakeNWidgetCompanyLines(int *biggest_index)
|
|
|
{
|
|
|
NWidgetVertical *vert = new NWidgetVertical();
|
|
|
|
|
|
for (int widnum = GLW_FIRST_COMPANY; widnum <= GLW_LAST_COMPANY; widnum++) {
|
|
|
NWidgetBackground *panel = new NWidgetBackground(WWT_PANEL, COLOUR_GREY, widnum);
|
|
|
panel->SetMinimalSize(246, 12);
|
|
|
panel->SetFill(false, false);
|
|
|
panel->SetDataTip(0x0, STR_GRAPH_KEY_COMPANY_SELECTION);
|
|
|
vert->Add(panel);
|
|
|
}
|
|
|
*biggest_index = GLW_LAST_COMPANY;
|
|
|
return vert;
|
|
|
}
|
|
|
|
|
|
static const Widget _graph_legend_widgets[] = {
|
|
|
{ WWT_CLOSEBOX, RESIZE_NONE, COLOUR_GREY, 0, 10, 0, 13, STR_BLACK_CROSS, STR_TOOLTIP_CLOSE_WINDOW}, // GLW_CLOSEBOX
|
|
|
{ WWT_CAPTION, RESIZE_NONE, COLOUR_GREY, 11, 249, 0, 13, STR_GRAPH_KEY_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS}, // GLW_CAPTION
|
|
|
{ WWT_PANEL, RESIZE_NONE, COLOUR_GREY, 0, 249, 14, 195, 0x0, STR_NULL}, // GLW_BACKGROUND
|
|
|
{ WWT_PANEL, RESIZE_NONE, COLOUR_GREY, 2, 247, 16, 27, 0x0, STR_GRAPH_KEY_COMPANY_SELECTION}, // GLW_FIRST_COMPANY
|
|
|
{ WWT_PANEL, RESIZE_NONE, COLOUR_GREY, 2, 247, 28, 39, 0x0, STR_GRAPH_KEY_COMPANY_SELECTION},
|
|
|
{ WWT_PANEL, RESIZE_NONE, COLOUR_GREY, 2, 247, 40, 51, 0x0, STR_GRAPH_KEY_COMPANY_SELECTION},
|
|
|
{ WWT_PANEL, RESIZE_NONE, COLOUR_GREY, 2, 247, 52, 63, 0x0, STR_GRAPH_KEY_COMPANY_SELECTION},
|
|
|
{ WWT_PANEL, RESIZE_NONE, COLOUR_GREY, 2, 247, 64, 75, 0x0, STR_GRAPH_KEY_COMPANY_SELECTION},
|
|
@@ -1186,55 +1193,65 @@ struct PerformanceRatingDetailWindow : W
|
|
|
if (_pause_mode != PM_UNPAUSED) return;
|
|
|
|
|
|
/* Update the company score every 5 days */
|
|
|
if (--this->timeout == 0) {
|
|
|
this->UpdateCompanyStats();
|
|
|
this->SetDirty();
|
|
|
}
|
|
|
}
|
|
|
};
|
|
|
|
|
|
CompanyID PerformanceRatingDetailWindow::company = INVALID_COMPANY;
|
|
|
|
|
|
/** Make a vertical list of panels for outputting score details. */
|
|
|
static NWidgetBase *MakePerformanceDetailPanels()
|
|
|
/** Make a vertical list of panels for outputting score details.
|
|
|
* @param biggest_index Storage for collecting the biggest index used in the returned tree.
|
|
|
* @return Panel with performance details.
|
|
|
* @postcond \c *biggest_index contains the largest used index in the tree.
|
|
|
*/
|
|
|
static NWidgetBase *MakePerformanceDetailPanels(int *biggest_index)
|
|
|
{
|
|
|
const StringID performance_tips[] = {
|
|
|
STR_PERFORMANCE_DETAIL_VEHICLES_TIP,
|
|
|
STR_PERFORMANCE_DETAIL_STATIONS_TIP,
|
|
|
STR_PERFORMANCE_DETAIL_MIN_PROFIT_TIP,
|
|
|
STR_PERFORMANCE_DETAIL_MIN_INCOME_TIP,
|
|
|
STR_PERFORMANCE_DETAIL_MAX_INCOME_TIP,
|
|
|
STR_PERFORMANCE_DETAIL_DELIVERED_TIP,
|
|
|
STR_PERFORMANCE_DETAIL_CARGO_TIP,
|
|
|
STR_PERFORMANCE_DETAIL_MONEY_TIP,
|
|
|
STR_PERFORMANCE_DETAIL_LOAN_TIP,
|
|
|
STR_PERFORMANCE_DETAIL_TOTAL_TIP,
|
|
|
};
|
|
|
|
|
|
assert(lengthof(performance_tips) == SCORE_END - SCORE_BEGIN);
|
|
|
|
|
|
NWidgetVertical *vert = new NWidgetVertical();
|
|
|
for (int widnum = PRW_SCORE_FIRST; widnum <= PRW_SCORE_LAST; widnum++) {
|
|
|
NWidgetBackground *panel = new NWidgetBackground(WWT_PANEL, COLOUR_GREY, widnum);
|
|
|
panel->SetMinimalSize(299, 20);
|
|
|
panel->SetFill(false, false);
|
|
|
panel->SetDataTip(0x0, performance_tips[widnum - PRW_SCORE_FIRST]);
|
|
|
vert->Add(panel);
|
|
|
}
|
|
|
*biggest_index = PRW_SCORE_LAST;
|
|
|
return vert;
|
|
|
}
|
|
|
|
|
|
/** Make a number of rows with button-like graphics, for enabling/disabling each company. */
|
|
|
static NWidgetBase *MakeCompanyButtonRows()
|
|
|
/**
|
|
|
* Make a number of rows with button-like graphics, for enabling/disabling each company.
|
|
|
* @param biggest_index Storage for collecting the biggest index used in the returned tree.
|
|
|
* @return Panel with rows of company buttons.
|
|
|
* @postcond \c *biggest_index contains the largest used index in the tree.
|
|
|
*/
|
|
|
static NWidgetBase *MakeCompanyButtonRows(int *biggest_index)
|
|
|
{
|
|
|
static const int MAX_LENGTH = 8; // Maximal number of company buttons in one row.
|
|
|
NWidgetVertical *vert = NULL; // Storage for all rows.
|
|
|
NWidgetHorizontal *hor = NULL; // Storage for buttons in one row.
|
|
|
int hor_length = 0;
|
|
|
|
|
|
for (int widnum = PRW_COMPANY_FIRST; widnum <= PRW_COMPANY_LAST; widnum++) {
|
|
|
/* Ensure there is room in 'hor' for another button. */
|
|
|
if (hor_length == MAX_LENGTH) {
|
|
|
if (vert == NULL) vert = new NWidgetVertical();
|
|
|
vert->Add(hor);
|
|
|
hor = NULL;
|
|
@@ -1243,24 +1260,25 @@ static NWidgetBase *MakeCompanyButtonRow
|
|
|
if (hor == NULL) {
|
|
|
hor = new NWidgetHorizontal();
|
|
|
hor_length = 0;
|
|
|
}
|
|
|
|
|
|
NWidgetBackground *panel = new NWidgetBackground(WWT_PANEL, COLOUR_GREY, widnum);
|
|
|
panel->SetMinimalSize(37, 13);
|
|
|
panel->SetFill(false, false);
|
|
|
panel->SetDataTip(0x0, STR_GRAPH_KEY_COMPANY_SELECTION);
|
|
|
hor->Add(panel);
|
|
|
hor_length++;
|
|
|
}
|
|
|
*biggest_index = PRW_COMPANY_LAST;
|
|
|
if (vert == NULL) return hor; // All buttons fit in a single row.
|
|
|
|
|
|
if (hor_length > 0 && hor_length < MAX_LENGTH) {
|
|
|
/* Last row is partial, add a spacer at the end to force all buttons to the left. */
|
|
|
NWidgetSpacer *spc = new NWidgetSpacer(0, 0);
|
|
|
spc->SetFill(true, false);
|
|
|
hor->Add(spc);
|
|
|
}
|
|
|
if (hor != NULL) vert->Add(hor);
|
|
|
return vert;
|
|
|
}
|
|
|
|