@@ -389,76 +389,90 @@ protected:
}
BaseGraphWindow(const WindowDesc *desc, WindowNumber window_number, int left,
int top, int height, bool has_negative_values, StringID format_str_y_axis) :
Window(desc, window_number), has_negative_values(has_negative_values),
format_str_y_axis(format_str_y_axis)
{
InvalidateWindow(WC_GRAPH_LEGEND, 0);
this->num_vert_lines = 24;
/* Initialise the dataset */
this->OnTick();
this->graph_location.left = left;
this->graph_location.right = left + GRAPH_X_POSITION_BEGINNING + this->num_vert_lines * GRAPH_X_POSITION_SEPARATION - 1;
this->graph_location.top = top;
this->graph_location.bottom = top + height - 1;
void InitializeWindow(const WindowDesc *desc)
this->FindWindowPlacementAndResize(desc);
this->UpdateStatistics(true);
public:
virtual void OnPaint()
this->DrawWidgets();
this->DrawGraph(this->graph_location);
virtual OverflowSafeInt64 GetGraphData(const Company *c, int j)
return INVALID_DATAPOINT;
virtual void OnClick(Point pt, int widget)
/* Clicked on legend? */
if (widget == BGW_KEY_BUTTON) ShowGraphLegend();
virtual void OnTick()
this->UpdateStatistics(false);
/**
* Update the statistics.
* @param initialize Initialize the data structure.
*/
void UpdateStatistics(bool initialize)
uint excluded_companies = _legend_excluded_companies;
/* Exclude the companies which aren't valid */
for (CompanyID c = COMPANY_FIRST; c < MAX_COMPANIES; c++) {
if (!Company::IsValidID(c)) SetBit(excluded_companies, c);
byte nums = 0;
const Company *c;
FOR_ALL_COMPANIES(c) {
nums = min(this->num_vert_lines, max(nums, c->num_valid_stat_ent));
int mo = (_cur_month / 3 - nums) * 3;
int yr = _cur_year;
while (mo < 0) {
yr--;
mo += 12;
if (this->excluded_data == excluded_companies && this->num_on_x_axis == nums &&
if (!initialize && this->excluded_data == excluded_companies && this->num_on_x_axis == nums &&
this->year == yr && this->month == mo) {
/* There's no reason to get new stats */
return;
this->excluded_data = excluded_companies;
this->num_on_x_axis = nums;
this->year = yr;
this->month = mo;
int numd = 0;
for (CompanyID k = COMPANY_FIRST; k < MAX_COMPANIES; k++) {
@@ -477,25 +491,25 @@ public:
};
/********************/
/* OPERATING PROFIT */
struct OperatingProfitGraphWindow : BaseGraphWindow {
OperatingProfitGraphWindow(const WindowDesc *desc, WindowNumber window_number) :
BaseGraphWindow(desc, window_number, 2, 18, 136, true, STR_JUST_CURRCOMPACT)
this->InitializeWindow(desc);
return c->old_economy[j].income + c->old_economy[j].expenses;
static const Widget _operating_profit_widgets[] = {
{ WWT_CLOSEBOX, RESIZE_NONE, COLOUR_GREY, 0, 10, 0, 13, STR_BLACK_CROSS, STR_TOOLTIP_CLOSE_WINDOW},
{ WWT_CAPTION, RESIZE_NONE, COLOUR_GREY, 11, 525, 0, 13, STR_GRAPH_OPERATING_PROFIT_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS},
{ WWT_PUSHTXTBTN, RESIZE_NONE, COLOUR_GREY, 526, 575, 0, 13, STR_GRAPH_KEY_BUTTON, STR_GRAPH_KEY_TOOLTIP},
@@ -525,25 +539,25 @@ void ShowOperatingProfitGraph()
AllocateWindowDescFront<OperatingProfitGraphWindow>(&_operating_profit_desc, 0);
/****************/
/* INCOME GRAPH */
struct IncomeGraphWindow : BaseGraphWindow {
IncomeGraphWindow(const WindowDesc *desc, WindowNumber window_number) :
BaseGraphWindow(desc, window_number, 2, 18, 104, false, STR_JUST_CURRCOMPACT)
return c->old_economy[j].income;
static const Widget _income_graph_widgets[] = {
{ WWT_CAPTION, RESIZE_NONE, COLOUR_GREY, 11, 525, 0, 13, STR_GRAPH_INCOME_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS},
@@ -572,25 +586,25 @@ void ShowIncomeGraph()
AllocateWindowDescFront<IncomeGraphWindow>(&_income_graph_desc, 0);
/*******************/
/* DELIVERED CARGO */
struct DeliveredCargoGraphWindow : BaseGraphWindow {
DeliveredCargoGraphWindow(const WindowDesc *desc, WindowNumber window_number) :
BaseGraphWindow(desc, window_number, 2, 18, 104, false, STR_JUST_COMMA)
return c->old_economy[j].delivered_cargo;
static const Widget _delivered_cargo_graph_widgets[] = {
{ WWT_CAPTION, RESIZE_NONE, COLOUR_GREY, 11, 525, 0, 13, STR_GRAPH_CARGO_DELIVERED_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS},
@@ -627,25 +641,25 @@ void ShowDeliveredCargoGraph()
enum PerformanceHistoryGraphWidgets {
PHW_CLOSEBOX,
PHW_CAPTION,
PHW_KEY,
PHW_DETAILED_PERFORMANCE,
PHW_BACKGROUND,
struct PerformanceHistoryGraphWindow : BaseGraphWindow {
PerformanceHistoryGraphWindow(const WindowDesc *desc, WindowNumber window_number) :
BaseGraphWindow(desc, window_number, 2, 18, 200, false, STR_JUST_COMMA)
return c->old_economy[j].performance_history;
if (widget == PHW_DETAILED_PERFORMANCE) ShowPerformanceRatingDetail();
this->BaseGraphWindow::OnClick(pt, widget);
@@ -681,25 +695,25 @@ void ShowPerformanceHistoryGraph()
AllocateWindowDescFront<PerformanceHistoryGraphWindow>(&_performance_history_desc, 0);
/*****************/
/* COMPANY VALUE */
struct CompanyValueGraphWindow : BaseGraphWindow {
CompanyValueGraphWindow(const WindowDesc *desc, WindowNumber window_number) :
BaseGraphWindow(desc, window_number, 2, 18, 200, false, STR_JUST_CURRCOMPACT)
return c->old_economy[j].company_value;
static const Widget _company_value_graph_widgets[] = {
{ WWT_CAPTION, RESIZE_NONE, COLOUR_GREY, 11, 525, 0, 13, STR_GRAPH_COMPANY_VALUES_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS},
Status change: