--- a/graph_gui.c Sat Jan 22 15:50:54 2005 +0000
+++ b/graph_gui.c Sat Jan 22 16:24:21 2005 +0000
@@ -334,19 +334,19 @@
SetupGraphDrawerForPlayers(&gd);
- numd = -1;
+ numd = 0;
FOR_ALL_PLAYERS(p) {
+ if (p->is_active) {
+ gd.colors[numd] = _color_list[p->player_color].window_color_bgb;
+ for(j=gd.num_on_x_axis,i=0; --j >= 0;) {
+ gd.cost[numd][i] = (j >= p->num_valid_stat_ent) ? INVALID_VALUE : (uint64)(p->old_economy[j].income + p->old_economy[j].expenses);
+ i++;
+ }
+ }
numd++;
- if (!p->is_active)
- continue;
- gd.colors[numd] = _color_list[p->player_color].window_color_bgb;
- for(j=gd.num_on_x_axis,i=0; --j >= 0;) {
- gd.cost[numd][i] = (j >= p->num_valid_stat_ent) ? INVALID_VALUE : (uint64)(p->old_economy[j].income + p->old_economy[j].expenses);
- i++;
- }
}
- gd.num_dataset = numd + 1;
+ gd.num_dataset = numd;
DrawGraph(&gd);
} break;
@@ -407,19 +407,19 @@
gd.bg_line_color = 0xE;
SetupGraphDrawerForPlayers(&gd);
- numd = -1;
+ numd = 0;
FOR_ALL_PLAYERS(p) {
+ if (p->is_active) {
+ gd.colors[numd] = _color_list[p->player_color].window_color_bgb;
+ for(j=gd.num_on_x_axis,i=0; --j >= 0;) {
+ gd.cost[numd][i] = (j >= p->num_valid_stat_ent) ? INVALID_VALUE : (uint64)p->old_economy[j].income;
+ i++;
+ }
+ }
numd++;
- if (!p->is_active)
- continue;
- gd.colors[numd] = _color_list[p->player_color].window_color_bgb;
- for(j=gd.num_on_x_axis,i=0; --j >= 0;) {
- gd.cost[numd][i] = (j >= p->num_valid_stat_ent) ? INVALID_VALUE : (uint64)p->old_economy[j].income;
- i++;
- }
}
- gd.num_dataset = numd + 1;
+ gd.num_dataset = numd;
DrawGraph(&gd);
break;
@@ -480,19 +480,19 @@
gd.bg_line_color = 0xE;
SetupGraphDrawerForPlayers(&gd);
- numd = -1;
+ numd = 0;
FOR_ALL_PLAYERS(p) {
+ if (p->is_active) {
+ gd.colors[numd] = _color_list[p->player_color].window_color_bgb;
+ for(j=gd.num_on_x_axis,i=0; --j >= 0;) {
+ gd.cost[numd][i] = (j >= p->num_valid_stat_ent) ? INVALID_VALUE : (uint64)p->old_economy[j].delivered_cargo;
+ i++;
+ }
+ }
numd++;
- if (!p->is_active)
- continue;
- gd.colors[numd] = _color_list[p->player_color].window_color_bgb;
- for(j=gd.num_on_x_axis,i=0; --j >= 0;) {
- gd.cost[numd][i] = (j >= p->num_valid_stat_ent) ? INVALID_VALUE : (uint64)p->old_economy[j].delivered_cargo;
- i++;
- }
}
- gd.num_dataset = numd + 1;
+ gd.num_dataset = numd;
DrawGraph(&gd);
break;
@@ -528,6 +528,357 @@
}
}
+/***********************/
+/* PERFORMANCE HISTORY */
+/***********************/
+
+static void PerformanceHistoryWndProc(Window *w, WindowEvent *e)
+{
+ switch(e->event) {
+ case WE_PAINT: {
+ GraphDrawer gd;
+ Player *p;
+ int i,j;
+ int numd;
+
+ DrawWindowWidgets(w);
+
+ gd.left = 2;
+ gd.top = 18;
+ gd.height = 200;
+ gd.include_neg = false;
+ gd.format_str_y_axis = STR_7024;
+ gd.color_3 = 0x10;
+ gd.color_2 = 0xD7;
+ gd.bg_line_color = 0xE;
+ SetupGraphDrawerForPlayers(&gd);
+
+ numd = 0;
+ FOR_ALL_PLAYERS(p) {
+ if (p->is_active) {
+ gd.colors[numd] = _color_list[p->player_color].window_color_bgb;
+ for(j=gd.num_on_x_axis,i=0; --j >= 0;) {
+ gd.cost[numd][i] = (j >= p->num_valid_stat_ent) ? INVALID_VALUE : (uint64)p->old_economy[j].performance_history;
+ i++;
+ }
+ }
+ numd++;
+ }
+
+ gd.num_dataset = numd;
+
+ DrawGraph(&gd);
+ break;
+ }
+
+ case WE_CLICK:
+ if (e->click.widget == 2)
+ ShowGraphLegend();
+ if (e->click.widget == 3)
+ ShowPerformanceRatingDetail();
+ break;
+ }
+}
+
+static const Widget _performance_history_widgets[] = {
+{ WWT_TEXTBTN, RESIZE_NONE, 14, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
+{ WWT_CAPTION, RESIZE_NONE, 14, 11, 475, 0, 13, STR_7051_COMPANY_PERFORMANCE_RATINGS, STR_018C_WINDOW_TITLE_DRAG_THIS},
+{ WWT_PUSHTXTBTN, RESIZE_NONE, 14, 526, 575, 0, 13, STR_704C_KEY, STR_704D_SHOW_KEY_TO_GRAPHS},
+{ WWT_PUSHTXTBTN, RESIZE_NONE, 14, 476, 525, 0, 13, STR_PERFORMANCE_DETAIL_KEY, STR_704D_SHOW_KEY_TO_GRAPHS},
+{ WWT_IMGBTN, RESIZE_NONE, 14, 0, 575, 14, 237, 0x0, STR_NULL},
+{ WIDGETS_END},
+};
+
+static const WindowDesc _performance_history_desc = {
+ -1, -1, 576, 238,
+ WC_PERFORMANCE_HISTORY,0,
+ WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS,
+ _performance_history_widgets,
+ PerformanceHistoryWndProc
+};
+
+void ShowPerformanceHistoryGraph()
+{
+ if (AllocateWindowDescFront(&_performance_history_desc, 0)) {
+ InvalidateWindow(WC_GRAPH_LEGEND, 0);
+ }
+}
+
+/*****************/
+/* COMPANY VALUE */
+/*****************/
+
+static void CompanyValueGraphWndProc(Window *w, WindowEvent *e)
+{
+ switch(e->event) {
+ case WE_PAINT: {
+ GraphDrawer gd;
+ Player *p;
+ int i,j;
+ int numd;
+
+ DrawWindowWidgets(w);
+
+ gd.left = 2;
+ gd.top = 18;
+ gd.height = 200;
+ gd.include_neg = false;
+ gd.format_str_y_axis = STR_CURRCOMPACT64;
+ gd.color_3 = 0x10;
+ gd.color_2 = 0xD7;
+ gd.bg_line_color = 0xE;
+ SetupGraphDrawerForPlayers(&gd);
+
+ numd = 0;
+ FOR_ALL_PLAYERS(p) {
+ if (p->is_active) {
+ gd.colors[numd] = _color_list[p->player_color].window_color_bgb;
+ for(j=gd.num_on_x_axis,i=0; --j >= 0;) {
+ gd.cost[numd][i] = (j >= p->num_valid_stat_ent) ? INVALID_VALUE : (uint64)p->old_economy[j].company_value;
+ i++;
+ }
+ }
+ numd++;
+ }
+
+ gd.num_dataset = numd;
+
+ DrawGraph(&gd);
+ break;
+ }
+
+ case WE_CLICK:
+ if (e->click.widget == 2)
+ ShowGraphLegend();
+ break;
+ }
+}
+
+static const Widget _company_value_graph_widgets[] = {
+{ WWT_TEXTBTN, RESIZE_NONE, 14, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
+{ WWT_CAPTION, RESIZE_NONE, 14, 11, 525, 0, 13, STR_7052_COMPANY_VALUES, STR_018C_WINDOW_TITLE_DRAG_THIS},
+{ WWT_PUSHTXTBTN, RESIZE_NONE, 14, 526, 575, 0, 13, STR_704C_KEY, STR_704D_SHOW_KEY_TO_GRAPHS},
+{ WWT_IMGBTN, RESIZE_NONE, 14, 0, 575, 14, 237, 0x0, STR_NULL},
+{ WIDGETS_END},
+};
+
+static const WindowDesc _company_value_graph_desc = {
+ -1, -1, 576, 238,
+ WC_COMPANY_VALUE,0,
+ WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS,
+ _company_value_graph_widgets,
+ CompanyValueGraphWndProc
+};
+
+void ShowCompanyValueGraph()
+{
+ if (AllocateWindowDescFront(&_company_value_graph_desc, 0)) {
+ InvalidateWindow(WC_GRAPH_LEGEND, 0);
+ }
+}
+
+/*****************/
+/* PAYMENT RATES */
+/*****************/
+
+static const byte _cargo_legend_colors[12] = {152, 32, 15, 174, 208, 194, 191, 84, 184, 10, 202, 215};
+
+static void CargoPaymentRatesWndProc(Window *w, WindowEvent *e)
+{
+ switch(e->event) {
+ case WE_PAINT: {
+ int i, j, x, y;
+ GraphDrawer gd;
+
+ gd.sel = _legend_cargobits;
+ w->click_state = (~_legend_cargobits) << 3;
+ DrawWindowWidgets(w);
+
+ x = 495;
+ y = 25;
+
+ for(i=0; i!=NUM_CARGO; i++) {
+ GfxFillRect(x, y, x+8, y+5, 0);
+ GfxFillRect(x+1, y+1, x+7, y+4, _cargo_legend_colors[i]);
+ SetDParam(0, _cargoc.names_s[i]);
+ DrawString(x+14, y, STR_7065, 0);
+ y += 8;
+ }
+
+ gd.left = 2;
+ gd.top = 24;
+ gd.height = 104;
+ gd.include_neg = false;
+ gd.format_str_y_axis = STR_CURRCOMPACT32;
+ gd.color_3 = 16;
+ gd.color_2 = 215;
+ gd.bg_line_color = 14;
+ gd.num_dataset = NUM_CARGO;
+ gd.num_on_x_axis = 20;
+ gd.num_vert_lines = 20;
+ gd.month = 0xFF;
+ gd.unk61A = 10;
+ gd.unk61C = 10;
+
+ for(i=0; i!=NUM_CARGO; i++) {
+ gd.colors[i] = _cargo_legend_colors[i];
+ for(j=0; j!=20; j++) {
+ gd.cost[i][j] = (uint64)GetTransportedGoodsIncome(10, 20, j*6+6,i);
+ }
+ }
+
+ DrawGraph(&gd);
+
+ DrawString(2 + 46, 24 + gd.height + 7, STR_7062_DAYS_IN_TRANSIT, 0);
+ DrawString(2 + 84, 24 - 9, STR_7063_PAYMENT_FOR_DELIVERING, 0);
+ } break;
+
+ case WE_CLICK: {
+ switch(e->click.widget) {
+ case 3: case 4: case 5: case 6:
+ case 7: case 8: case 9: case 10:
+ case 11: case 12: case 13: case 14:
+ _legend_cargobits ^= 1 << (e->click.widget - 3);
+ SetWindowDirty(w);
+ break;
+ }
+ } break;
+ }
+}
+
+static const Widget _cargo_payment_rates_widgets[] = {
+{ WWT_CLOSEBOX, RESIZE_NONE, 14, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
+{ WWT_CAPTION, RESIZE_NONE, 14, 11, 567, 0, 13, STR_7061_CARGO_PAYMENT_RATES, STR_018C_WINDOW_TITLE_DRAG_THIS},
+{ WWT_PANEL, RESIZE_NONE, 14, 0, 567, 14, 141, 0x0, STR_NULL},
+{ WWT_PANEL, RESIZE_NONE, 12, 493, 562, 24, 31, 0x0, STR_7064_TOGGLE_GRAPH_FOR_CARGO},
+{ WWT_PANEL, RESIZE_NONE, 12, 493, 562, 32, 39, 0x0, STR_7064_TOGGLE_GRAPH_FOR_CARGO},
+{ WWT_PANEL, RESIZE_NONE, 12, 493, 562, 40, 47, 0x0, STR_7064_TOGGLE_GRAPH_FOR_CARGO},
+{ WWT_PANEL, RESIZE_NONE, 12, 493, 562, 48, 55, 0x0, STR_7064_TOGGLE_GRAPH_FOR_CARGO},
+{ WWT_PANEL, RESIZE_NONE, 12, 493, 562, 56, 63, 0x0, STR_7064_TOGGLE_GRAPH_FOR_CARGO},
+{ WWT_PANEL, RESIZE_NONE, 12, 493, 562, 64, 71, 0x0, STR_7064_TOGGLE_GRAPH_FOR_CARGO},
+{ WWT_PANEL, RESIZE_NONE, 12, 493, 562, 72, 79, 0x0, STR_7064_TOGGLE_GRAPH_FOR_CARGO},
+{ WWT_PANEL, RESIZE_NONE, 12, 493, 562, 80, 87, 0x0, STR_7064_TOGGLE_GRAPH_FOR_CARGO},
+{ WWT_PANEL, RESIZE_NONE, 12, 493, 562, 88, 95, 0x0, STR_7064_TOGGLE_GRAPH_FOR_CARGO},
+{ WWT_PANEL, RESIZE_NONE, 12, 493, 562, 96, 103, 0x0, STR_7064_TOGGLE_GRAPH_FOR_CARGO},
+{ WWT_PANEL, RESIZE_NONE, 12, 493, 562, 104, 111, 0x0, STR_7064_TOGGLE_GRAPH_FOR_CARGO},
+{ WWT_PANEL, RESIZE_NONE, 12, 493, 562, 112, 119, 0x0, STR_7064_TOGGLE_GRAPH_FOR_CARGO},
+{ WIDGETS_END},
+};
+
+static const WindowDesc _cargo_payment_rates_desc = {
+ -1, -1, 568, 142,
+ WC_PAYMENT_RATES,0,
+ WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET,
+ _cargo_payment_rates_widgets,
+ CargoPaymentRatesWndProc
+};
+
+
+void ShowCargoPaymentRates()
+{
+ AllocateWindowDescFront(&_cargo_payment_rates_desc, 0);
+}
+
+/************************/
+/* COMPANY LEAGUE TABLE */
+/************************/
+
+static const StringID _performance_titles[] = {
+ STR_7066_ENGINEER,
+ STR_7066_ENGINEER,
+ STR_7067_TRAFFIC_MANAGER,
+ STR_7067_TRAFFIC_MANAGER,
+ STR_7068_TRANSPORT_COORDINATOR,
+ STR_7068_TRANSPORT_COORDINATOR,
+ STR_7069_ROUTE_SUPERVISOR,
+ STR_7069_ROUTE_SUPERVISOR,
+ STR_706A_DIRECTOR,
+ STR_706A_DIRECTOR,
+ STR_706B_CHIEF_EXECUTIVE,
+ STR_706B_CHIEF_EXECUTIVE,
+ STR_706C_CHAIRMAN,
+ STR_706C_CHAIRMAN,
+ STR_706D_PRESIDENT,
+ STR_706E_TYCOON,
+};
+
+static inline StringID GetPerformanceTitleFromValue(uint value)
+{
+ return _performance_titles[minu(value, 1000) >> 6];
+}
+
+static int CDECL _perf_hist_comp(const void *elem1, const void *elem2 ) {
+ const Player *p1 = *(const Player* const *)elem1;
+ const Player *p2 = *(const Player* const *)elem2;
+ int32 v = p2->old_economy[1].performance_history - p1->old_economy[1].performance_history;
+ return (v!=0) | (v >> (sizeof(int32)*8-1));
+}
+
+static void CompanyLeagueWndProc(Window *w, WindowEvent *e)
+{
+ switch(e->event) {
+ case WE_PAINT: {
+ Player *p;
+ Player *plist[MAX_PLAYERS];
+ size_t pl_num, i;
+
+ DrawWindowWidgets(w);
+
+ pl_num=0;
+ FOR_ALL_PLAYERS(p) {
+ if (p->is_active)
+ plist[pl_num++] = p;
+ }
+ assert(pl_num > 0);
+
+ qsort(plist, pl_num, sizeof(Player*), _perf_hist_comp);
+
+ i = 0;
+ do {
+ SetDParam(0, i + 1 + STR_01AB);
+ p = plist[i];
+ SetDParam(1, p->name_1);
+ SetDParam(2, p->name_2);
+
+ SetDParam(3, GetPlayerNameString(p->index, 4));
+ /* WARNING ugly hack!
+ GetPlayerNameString sets up (Player #) if the player is human in an extra DPARAM16
+ It seems that if player is non-human, nothing is set up, so param is 0. GetString doesn't like
+ that because there is another param after it.
+ So we'll just shift the rating one back if player is AI and all is fine
+ */
+ SetDParam((IS_HUMAN_PLAYER(p->index) ? 5 : 4), GetPerformanceTitleFromValue(p->old_economy[1].performance_history));
+
+ DrawString(2, 15 + i * 10, i == 0 ? STR_7054 : STR_7055, 0);
+ DrawPlayerIcon(p->index, 27, 16 + i * 10);
+ } while (++i != pl_num);
+
+ break;
+ }
+ }
+}
+
+
+static const Widget _company_league_widgets[] = {
+{ WWT_TEXTBTN, RESIZE_NONE, 14, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
+{ WWT_CAPTION, RESIZE_NONE, 14, 11, 399, 0, 13, STR_7053_COMPANY_LEAGUE_TABLE, STR_018C_WINDOW_TITLE_DRAG_THIS},
+{ WWT_IMGBTN, RESIZE_NONE, 14, 0, 399, 14, 96, 0x0, STR_NULL},
+{ WIDGETS_END},
+};
+
+static const WindowDesc _company_league_desc = {
+ -1, -1, 400, 97,
+ WC_COMPANY_LEAGUE,0,
+ WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET,
+ _company_league_widgets,
+ CompanyLeagueWndProc
+};
+
+void ShowCompanyLeagueTable()
+{
+ AllocateWindowDescFront(&_company_league_desc,0);
+}
+
/*****************************/
/* PERFORMANCE RATING DETAIL */
/*****************************/
@@ -747,355 +1098,3 @@
{
AllocateWindowDescFront(&_performance_rating_detail_desc, 0);
}
-
-/***********************/
-/* PERFORMANCE HISTORY */
-/***********************/
-
-static void PerformanceHistoryWndProc(Window *w, WindowEvent *e)
-{
- switch(e->event) {
- case WE_PAINT: {
- GraphDrawer gd;
- Player *p;
- int i,j;
- int numd;
-
- DrawWindowWidgets(w);
-
- gd.left = 2;
- gd.top = 18;
- gd.height = 200;
- gd.include_neg = false;
- gd.format_str_y_axis = STR_7024;
- gd.color_3 = 0x10;
- gd.color_2 = 0xD7;
- gd.bg_line_color = 0xE;
- SetupGraphDrawerForPlayers(&gd);
-
- numd = -1;
- FOR_ALL_PLAYERS(p) {
- numd++;
- if (!p->is_active)
- continue;
- gd.colors[numd] = _color_list[p->player_color].window_color_bgb;
- for(j=gd.num_on_x_axis,i=0; --j >= 0;) {
- gd.cost[numd][i] = (j >= p->num_valid_stat_ent) ? INVALID_VALUE : (uint64)p->old_economy[j].performance_history;
- i++;
- }
- }
-
- gd.num_dataset = numd + 1;
-
- DrawGraph(&gd);
- break;
- }
-
- case WE_CLICK:
- if (e->click.widget == 2)
- ShowGraphLegend();
- if (e->click.widget == 3)
- ShowPerformanceRatingDetail();
- break;
- }
-}
-
-static const Widget _performance_history_widgets[] = {
-{ WWT_TEXTBTN, RESIZE_NONE, 14, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
-{ WWT_CAPTION, RESIZE_NONE, 14, 11, 475, 0, 13, STR_7051_COMPANY_PERFORMANCE_RATINGS, STR_018C_WINDOW_TITLE_DRAG_THIS},
-{ WWT_PUSHTXTBTN, RESIZE_NONE, 14, 526, 575, 0, 13, STR_704C_KEY, STR_704D_SHOW_KEY_TO_GRAPHS},
-{ WWT_PUSHTXTBTN, RESIZE_NONE, 14, 476, 525, 0, 13, STR_PERFORMANCE_DETAIL_KEY, STR_704D_SHOW_KEY_TO_GRAPHS},
-{ WWT_IMGBTN, RESIZE_NONE, 14, 0, 575, 14, 237, 0x0, STR_NULL},
-{ WIDGETS_END},
-};
-
-static const WindowDesc _performance_history_desc = {
- -1, -1, 576, 238,
- WC_PERFORMANCE_HISTORY,0,
- WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS,
- _performance_history_widgets,
- PerformanceHistoryWndProc
-};
-
-void ShowPerformanceHistoryGraph()
-{
- if (AllocateWindowDescFront(&_performance_history_desc, 0)) {
- InvalidateWindow(WC_GRAPH_LEGEND, 0);
- }
-}
-
-/*****************/
-/* COMPANY VALUE */
-/*****************/
-
-static void CompanyValueGraphWndProc(Window *w, WindowEvent *e)
-{
- switch(e->event) {
- case WE_PAINT: {
- GraphDrawer gd;
- Player *p;
- int i,j;
- int numd;
-
- DrawWindowWidgets(w);
-
- gd.left = 2;
- gd.top = 18;
- gd.height = 200;
- gd.include_neg = false;
- gd.format_str_y_axis = STR_CURRCOMPACT64;
- gd.color_3 = 0x10;
- gd.color_2 = 0xD7;
- gd.bg_line_color = 0xE;
- SetupGraphDrawerForPlayers(&gd);
-
- numd = -1;
- FOR_ALL_PLAYERS(p) {
- numd++;
- if (!p->is_active)
- continue;
-
- gd.colors[numd] = _color_list[p->player_color].window_color_bgb;
- for(j=gd.num_on_x_axis,i=0; --j >= 0;) {
- gd.cost[numd][i] = (j >= p->num_valid_stat_ent) ? INVALID_VALUE : (uint64)p->old_economy[j].company_value;
- i++;
- }
- }
-
- gd.num_dataset = numd + 1;
-
- DrawGraph(&gd);
- break;
- }
-
- case WE_CLICK:
- if (e->click.widget == 2)
- ShowGraphLegend();
- break;
- }
-}
-
-static const Widget _company_value_graph_widgets[] = {
-{ WWT_TEXTBTN, RESIZE_NONE, 14, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
-{ WWT_CAPTION, RESIZE_NONE, 14, 11, 525, 0, 13, STR_7052_COMPANY_VALUES, STR_018C_WINDOW_TITLE_DRAG_THIS},
-{ WWT_PUSHTXTBTN, RESIZE_NONE, 14, 526, 575, 0, 13, STR_704C_KEY, STR_704D_SHOW_KEY_TO_GRAPHS},
-{ WWT_IMGBTN, RESIZE_NONE, 14, 0, 575, 14, 237, 0x0, STR_NULL},
-{ WIDGETS_END},
-};
-
-static const WindowDesc _company_value_graph_desc = {
- -1, -1, 576, 238,
- WC_COMPANY_VALUE,0,
- WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS,
- _company_value_graph_widgets,
- CompanyValueGraphWndProc
-};
-
-void ShowCompanyValueGraph()
-{
- if (AllocateWindowDescFront(&_company_value_graph_desc, 0)) {
- InvalidateWindow(WC_GRAPH_LEGEND, 0);
- }
-}
-
-/*****************/
-/* PAYMENT RATES */
-/*****************/
-
-static const byte _cargo_legend_colors[12] = {152, 32, 15, 174, 208, 194, 191, 84, 184, 10, 202, 215};
-
-static void CargoPaymentRatesWndProc(Window *w, WindowEvent *e)
-{
- switch(e->event) {
- case WE_PAINT: {
- int i, j, x, y;
- GraphDrawer gd;
-
- gd.sel = _legend_cargobits;
- w->click_state = (~_legend_cargobits) << 3;
- DrawWindowWidgets(w);
-
- x = 495;
- y = 25;
-
- for(i=0; i!=NUM_CARGO; i++) {
- GfxFillRect(x, y, x+8, y+5, 0);
- GfxFillRect(x+1, y+1, x+7, y+4, _cargo_legend_colors[i]);
- SetDParam(0, _cargoc.names_s[i]);
- DrawString(x+14, y, STR_7065, 0);
- y += 8;
- }
-
- gd.left = 2;
- gd.top = 24;
- gd.height = 104;
- gd.include_neg = false;
- gd.format_str_y_axis = STR_CURRCOMPACT32;
- gd.color_3 = 16;
- gd.color_2 = 215;
- gd.bg_line_color = 14;
- gd.num_dataset = 12;
- gd.num_on_x_axis = 20;
- gd.num_vert_lines = 20;
- gd.month = 0xFF;
- gd.unk61A = 10;
- gd.unk61C = 10;
-
- for(i=0; i!=NUM_CARGO; i++) {
- gd.colors[i] = _cargo_legend_colors[i];
- for(j=0; j!=20; j++) {
- gd.cost[i][j] = (uint64)GetTransportedGoodsIncome(10, 20, j*6+6,i);
- }
- }
-
- DrawGraph(&gd);
-
- DrawString(2 + 46, 24 + gd.height + 7, STR_7062_DAYS_IN_TRANSIT, 0);
- DrawString(2 + 84, 24 - 9, STR_7063_PAYMENT_FOR_DELIVERING, 0);
- } break;
-
- case WE_CLICK: {
- switch(e->click.widget) {
- case 3: case 4: case 5: case 6:
- case 7: case 8: case 9: case 10:
- case 11: case 12: case 13: case 14:
- _legend_cargobits ^= 1 << (e->click.widget - 3);
- SetWindowDirty(w);
- break;
- }
- } break;
- }
-}
-
-static const Widget _cargo_payment_rates_widgets[] = {
-{ WWT_CLOSEBOX, RESIZE_NONE, 14, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
-{ WWT_CAPTION, RESIZE_NONE, 14, 11, 567, 0, 13, STR_7061_CARGO_PAYMENT_RATES, STR_018C_WINDOW_TITLE_DRAG_THIS},
-{ WWT_PANEL, RESIZE_NONE, 14, 0, 567, 14, 141, 0x0, STR_NULL},
-{ WWT_PANEL, RESIZE_NONE, 12, 493, 562, 24, 31, 0x0, STR_7064_TOGGLE_GRAPH_FOR_CARGO},
-{ WWT_PANEL, RESIZE_NONE, 12, 493, 562, 32, 39, 0x0, STR_7064_TOGGLE_GRAPH_FOR_CARGO},
-{ WWT_PANEL, RESIZE_NONE, 12, 493, 562, 40, 47, 0x0, STR_7064_TOGGLE_GRAPH_FOR_CARGO},
-{ WWT_PANEL, RESIZE_NONE, 12, 493, 562, 48, 55, 0x0, STR_7064_TOGGLE_GRAPH_FOR_CARGO},
-{ WWT_PANEL, RESIZE_NONE, 12, 493, 562, 56, 63, 0x0, STR_7064_TOGGLE_GRAPH_FOR_CARGO},
-{ WWT_PANEL, RESIZE_NONE, 12, 493, 562, 64, 71, 0x0, STR_7064_TOGGLE_GRAPH_FOR_CARGO},
-{ WWT_PANEL, RESIZE_NONE, 12, 493, 562, 72, 79, 0x0, STR_7064_TOGGLE_GRAPH_FOR_CARGO},
-{ WWT_PANEL, RESIZE_NONE, 12, 493, 562, 80, 87, 0x0, STR_7064_TOGGLE_GRAPH_FOR_CARGO},
-{ WWT_PANEL, RESIZE_NONE, 12, 493, 562, 88, 95, 0x0, STR_7064_TOGGLE_GRAPH_FOR_CARGO},
-{ WWT_PANEL, RESIZE_NONE, 12, 493, 562, 96, 103, 0x0, STR_7064_TOGGLE_GRAPH_FOR_CARGO},
-{ WWT_PANEL, RESIZE_NONE, 12, 493, 562, 104, 111, 0x0, STR_7064_TOGGLE_GRAPH_FOR_CARGO},
-{ WWT_PANEL, RESIZE_NONE, 12, 493, 562, 112, 119, 0x0, STR_7064_TOGGLE_GRAPH_FOR_CARGO},
-{ WIDGETS_END},
-};
-
-static const WindowDesc _cargo_payment_rates_desc = {
- -1, -1, 568, 142,
- WC_PAYMENT_RATES,0,
- WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET,
- _cargo_payment_rates_widgets,
- CargoPaymentRatesWndProc
-};
-
-
-void ShowCargoPaymentRates()
-{
- AllocateWindowDescFront(&_cargo_payment_rates_desc, 0);
-}
-
-/************************/
-/* COMPANY LEAGUE TABLE */
-/************************/
-
-static const StringID _performance_titles[] = {
- STR_7066_ENGINEER,
- STR_7066_ENGINEER,
- STR_7067_TRAFFIC_MANAGER,
- STR_7067_TRAFFIC_MANAGER,
- STR_7068_TRANSPORT_COORDINATOR,
- STR_7068_TRANSPORT_COORDINATOR,
- STR_7069_ROUTE_SUPERVISOR,
- STR_7069_ROUTE_SUPERVISOR,
- STR_706A_DIRECTOR,
- STR_706A_DIRECTOR,
- STR_706B_CHIEF_EXECUTIVE,
- STR_706B_CHIEF_EXECUTIVE,
- STR_706C_CHAIRMAN,
- STR_706C_CHAIRMAN,
- STR_706D_PRESIDENT,
- STR_706E_TYCOON,
-};
-
-static inline StringID GetPerformanceTitleFromValue(uint value)
-{
- return _performance_titles[minu(value, 1000) >> 6];
-}
-
-static int CDECL _perf_hist_comp(const void *elem1, const void *elem2 ) {
- const Player *p1 = *(const Player* const *)elem1;
- const Player *p2 = *(const Player* const *)elem2;
- int32 v = p2->old_economy[1].performance_history - p1->old_economy[1].performance_history;
- return (v!=0) | (v >> (sizeof(int32)*8-1));
-}
-
-static void CompanyLeagueWndProc(Window *w, WindowEvent *e)
-{
- switch(e->event) {
- case WE_PAINT: {
- Player *p;
- Player *plist[MAX_PLAYERS];
- size_t pl_num, i;
-
- DrawWindowWidgets(w);
-
- pl_num=0;
- FOR_ALL_PLAYERS(p) {
- if (p->is_active)
- plist[pl_num++] = p;
- }
- assert(pl_num > 0);
-
- qsort(plist, pl_num, sizeof(Player*), _perf_hist_comp);
-
- i = 0;
- do {
- SetDParam(0, i + 1 + STR_01AB);
- p = plist[i];
- SetDParam(1, p->name_1);
- SetDParam(2, p->name_2);
-
- SetDParam(3, GetPlayerNameString(p->index, 4));
- /* WARNING ugly hack!
- GetPlayerNameString sets up (Player #) if the player is human in an extra DPARAM16
- It seems that if player is non-human, nothing is set up, so param is 0. GetString doesn't like
- that because there is another param after it.
- So we'll just shift the rating one back if player is AI and all is fine
- */
- SetDParam((IS_HUMAN_PLAYER(p->index) ? 5 : 4), GetPerformanceTitleFromValue(p->old_economy[1].performance_history));
-
- DrawString(2, 15 + i * 10, i == 0 ? STR_7054 : STR_7055, 0);
- DrawPlayerIcon(p->index, 27, 16 + i * 10);
- } while (++i != pl_num);
-
- break;
- }
- }
-}
-
-
-static const Widget _company_league_widgets[] = {
-{ WWT_TEXTBTN, RESIZE_NONE, 14, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
-{ WWT_CAPTION, RESIZE_NONE, 14, 11, 399, 0, 13, STR_7053_COMPANY_LEAGUE_TABLE, STR_018C_WINDOW_TITLE_DRAG_THIS},
-{ WWT_IMGBTN, RESIZE_NONE, 14, 0, 399, 14, 96, 0x0, STR_NULL},
-{ WIDGETS_END},
-};
-
-static const WindowDesc _company_league_desc = {
- -1, -1, 400, 97,
- WC_COMPANY_LEAGUE,0,
- WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET,
- _company_league_widgets,
- CompanyLeagueWndProc
-};
-
-void ShowCompanyLeagueTable()
-{
- AllocateWindowDescFront(&_company_league_desc,0);
-}