File diff r4343:004f55fe1239 → r4344:bff007ae1fd1
graph_gui.c
Show inline comments
 
@@ -212,107 +212,107 @@ static void DrawGraph(const GraphDrawer 
 
/****************/
 
/* GRAPH LEGEND */
 
/****************/
 

	
 
void DrawPlayerIcon(PlayerID p, int x, int y)
 
{
 
	DrawSprite(SPRITE_PALETTE(PLAYER_SPRITE_COLOR(p) + 0x2EB), x, y);
 
}
 

	
 
static void GraphLegendWndProc(Window *w, WindowEvent *e)
 
{
 
	const Player* p;
 

	
 
	switch (e->event) {
 
	case WE_PAINT:
 
		FOR_ALL_PLAYERS(p) {
 
			if (!p->is_active) SETBIT(_legend_excludebits, p->index);
 
		}
 
		w->click_state = (~_legend_excludebits) << 3;
 
		DrawWindowWidgets(w);
 

	
 
		FOR_ALL_PLAYERS(p) {
 
			if (!p->is_active) continue;
 

	
 
			DrawPlayerIcon(p->index, 4, 18+p->index*12);
 

	
 
			SetDParam(0, p->name_1);
 
			SetDParam(1, p->name_2);
 
			SetDParam(2, GetPlayerNameString(p->index, 3));
 
			DrawString(21,17+p->index*12,STR_7021,HASBIT(_legend_excludebits, p->index) ? 0x10 : 0xC);
 
		}
 
		break;
 

	
 
	case WE_CLICK:
 
		if (IS_INT_INSIDE(e->click.widget, 3, 11)) {
 
			_legend_excludebits ^= (1 << (e->click.widget - 3));
 
			SetWindowDirty(w);
 
			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);
 
		}
 
		break;
 
	}
 
}
 

	
 
static const Widget _graph_legend_widgets[] = {
 
{   WWT_CLOSEBOX,   RESIZE_NONE,    14,     0,    10,     0,    13, STR_00C5, STR_018B_CLOSE_WINDOW},
 
{   WWT_CLOSEBOX,   RESIZE_NONE,    14,     0,    10,     0,    13, STR_00C5,                       STR_018B_CLOSE_WINDOW},
 
{    WWT_CAPTION,   RESIZE_NONE,    14,    11,   249,     0,    13, STR_704E_KEY_TO_COMPANY_GRAPHS, STR_018C_WINDOW_TITLE_DRAG_THIS},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,   249,    14,   113, 0x0,STR_NULL},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,     2,   247,    16,    27, 0x0,STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,     2,   247,    28,    39, 0x0,STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,     2,   247,    40,    51, 0x0,STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,     2,   247,    52,    63, 0x0,STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,     2,   247,    64,    75, 0x0,STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,     2,   247,    76,    87, 0x0,STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,     2,   247,    88,    99, 0x0,STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,     2,   247,   100,   111, 0x0,STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,   249,    14,   113, 0x0,                            STR_NULL},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,     2,   247,    16,    27, 0x0,                            STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,     2,   247,    28,    39, 0x0,                            STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,     2,   247,    40,    51, 0x0,                            STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,     2,   247,    52,    63, 0x0,                            STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,     2,   247,    64,    75, 0x0,                            STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,     2,   247,    76,    87, 0x0,                            STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,     2,   247,    88,    99, 0x0,                            STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,     2,   247,   100,   111, 0x0,                            STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY},
 
{   WIDGETS_END},
 
};
 

	
 
static const WindowDesc _graph_legend_desc = {
 
	-1, -1, 250, 114,
 
	WC_GRAPH_LEGEND,0,
 
	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET,
 
	_graph_legend_widgets,
 
	GraphLegendWndProc
 
};
 

	
 
static void ShowGraphLegend(void)
 
{
 
	AllocateWindowDescFront(&_graph_legend_desc, 0);
 
}
 

	
 
/********************/
 
/* OPERATING PROFIT */
 
/********************/
 

	
 
static void SetupGraphDrawerForPlayers(GraphDrawer *gd)
 
{
 
	const Player* p;
 
	uint excludebits = _legend_excludebits;
 
	int nums;
 
	int mo,yr;
 

	
 
	// Exclude the players which aren't valid
 
	FOR_ALL_PLAYERS(p) {
 
		if (!p->is_active) SETBIT(excludebits,p->index);
 
	}
 
	gd->sel = excludebits;
 
	gd->num_vert_lines = 24;
 

	
 
	nums = 0;
 
	FOR_ALL_PLAYERS(p) {
 
		if (p->is_active) nums = max(nums,p->num_valid_stat_ent);
 
	}
 
	gd->num_on_x_axis = min(nums,24);
 

	
 
	mo = (_cur_month/3-nums)*3;
 
	yr = _cur_year;
 
	while (mo < 0) {
 
		yr--;
 
		mo += 12;
 
	}
 

	
 
	gd->year = yr;
 
@@ -320,498 +320,498 @@ static void SetupGraphDrawerForPlayers(G
 
}
 

	
 
static void OperatingProfitWndProc(Window *w, WindowEvent *e)
 
{
 
	switch (e->event) {
 
	case WE_PAINT: {
 
		GraphDrawer gd;
 
		const Player* p;
 
		int i,j;
 
		int numd;
 

	
 
		DrawWindowWidgets(w);
 

	
 
		gd.left = 2;
 
		gd.top = 18;
 
		gd.height = 136;
 
		gd.include_neg = true;
 
		gd.format_str_y_axis = STR_CURRCOMPACT;
 
		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].income + p->old_economy[j].expenses);
 
					i++;
 
				}
 
			}
 
			numd++;
 
		}
 

	
 
		gd.num_dataset = numd;
 

	
 
		DrawGraph(&gd);
 
	}	break;
 
	case WE_CLICK:
 
		if (e->click.widget == 2) /* Clicked on Legend */
 
			ShowGraphLegend();
 
		break;
 
	}
 
}
 

	
 
static const Widget _operating_profit_widgets[] = {
 
{   WWT_CLOSEBOX,   RESIZE_NONE,    14,     0,    10,     0,    13, STR_00C5,												STR_018B_CLOSE_WINDOW},
 
{   WWT_CLOSEBOX,   RESIZE_NONE,    14,     0,    10,     0,    13, STR_00C5,                        STR_018B_CLOSE_WINDOW},
 
{    WWT_CAPTION,   RESIZE_NONE,    14,    11,   525,     0,    13, STR_7025_OPERATING_PROFIT_GRAPH, 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,   173, 0x0,															STR_NULL},
 
{ 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,   173, 0x0,                             STR_NULL},
 
{   WIDGETS_END},
 
};
 

	
 
static const WindowDesc _operating_profit_desc = {
 
	-1, -1, 576, 174,
 
	WC_OPERATING_PROFIT,0,
 
	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS,
 
	_operating_profit_widgets,
 
	OperatingProfitWndProc
 
};
 

	
 

	
 
void ShowOperatingProfitGraph(void)
 
{
 
	if (AllocateWindowDescFront(&_operating_profit_desc, 0)) {
 
		InvalidateWindow(WC_GRAPH_LEGEND, 0);
 
	}
 
}
 

	
 

	
 
/****************/
 
/* INCOME GRAPH */
 
/****************/
 

	
 
static void IncomeGraphWndProc(Window *w, WindowEvent *e)
 
{
 
	switch (e->event) {
 
	case WE_PAINT: {
 
		GraphDrawer gd;
 
		const Player* p;
 
		int i,j;
 
		int numd;
 

	
 
		DrawWindowWidgets(w);
 

	
 
		gd.left = 2;
 
		gd.top = 18;
 
		gd.height = 104;
 
		gd.include_neg = false;
 
		gd.format_str_y_axis = STR_CURRCOMPACT;
 
		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].income;
 
					i++;
 
				}
 
			}
 
			numd++;
 
		}
 

	
 
		gd.num_dataset = numd;
 

	
 
		DrawGraph(&gd);
 
		break;
 
	}
 

	
 
	case WE_CLICK:
 
		if (e->click.widget == 2)
 
			ShowGraphLegend();
 
		break;
 
	}
 
}
 

	
 
static const Widget _income_graph_widgets[] = {
 
{   WWT_CLOSEBOX,   RESIZE_NONE,    14,     0,    10,     0,    13, STR_00C5,							STR_018B_CLOSE_WINDOW},
 
{   WWT_CLOSEBOX,   RESIZE_NONE,    14,     0,    10,     0,    13, STR_00C5,              STR_018B_CLOSE_WINDOW},
 
{    WWT_CAPTION,   RESIZE_NONE,    14,    11,   525,     0,    13, STR_7022_INCOME_GRAPH, 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,   141, 0x0,										STR_NULL},
 
{ 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,   141, 0x0,                   STR_NULL},
 
{   WIDGETS_END},
 
};
 

	
 
static const WindowDesc _income_graph_desc = {
 
	-1, -1, 576, 142,
 
	WC_INCOME_GRAPH,0,
 
	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS,
 
	_income_graph_widgets,
 
	IncomeGraphWndProc
 
};
 

	
 
void ShowIncomeGraph(void)
 
{
 
	if (AllocateWindowDescFront(&_income_graph_desc, 0)) {
 
		InvalidateWindow(WC_GRAPH_LEGEND, 0);
 
	}
 
}
 

	
 
/*******************/
 
/* DELIVERED CARGO */
 
/*******************/
 

	
 
static void DeliveredCargoGraphWndProc(Window *w, WindowEvent *e)
 
{
 
	switch (e->event) {
 
	case WE_PAINT: {
 
		GraphDrawer gd;
 
		const Player* p;
 
		int i,j;
 
		int numd;
 

	
 
		DrawWindowWidgets(w);
 

	
 
		gd.left = 2;
 
		gd.top = 18;
 
		gd.height = 104;
 
		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].delivered_cargo;
 
					i++;
 
				}
 
			}
 
			numd++;
 
		}
 

	
 
		gd.num_dataset = numd;
 

	
 
		DrawGraph(&gd);
 
		break;
 
	}
 

	
 
	case WE_CLICK:
 
		if (e->click.widget == 2)
 
			ShowGraphLegend();
 
		break;
 
	}
 
}
 

	
 
static const Widget _delivered_cargo_graph_widgets[] = {
 
{   WWT_CLOSEBOX,   RESIZE_NONE,    14,     0,    10,     0,    13, STR_00C5,													STR_018B_CLOSE_WINDOW},
 
{   WWT_CLOSEBOX,   RESIZE_NONE,    14,     0,    10,     0,    13, STR_00C5,                          STR_018B_CLOSE_WINDOW},
 
{    WWT_CAPTION,   RESIZE_NONE,    14,    11,   525,     0,    13, STR_7050_UNITS_OF_CARGO_DELIVERED, 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,   141, 0x0,																STR_NULL},
 
{ 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,   141, 0x0,                               STR_NULL},
 
{   WIDGETS_END},
 
};
 

	
 
static const WindowDesc _delivered_cargo_graph_desc = {
 
	-1, -1, 576, 142,
 
	WC_DELIVERED_CARGO,0,
 
	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS,
 
	_delivered_cargo_graph_widgets,
 
	DeliveredCargoGraphWndProc
 
};
 

	
 
void ShowDeliveredCargoGraph(void)
 
{
 
	if (AllocateWindowDescFront(&_delivered_cargo_graph_desc, 0)) {
 
		InvalidateWindow(WC_GRAPH_LEGEND, 0);
 
	}
 
}
 

	
 
/***********************/
 
/* PERFORMANCE HISTORY */
 
/***********************/
 

	
 
static void PerformanceHistoryWndProc(Window *w, WindowEvent *e)
 
{
 
	switch (e->event) {
 
	case WE_PAINT: {
 
		GraphDrawer gd;
 
		const 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_CLOSEBOX,   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},
 
{   WWT_CLOSEBOX,   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(void)
 
{
 
	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;
 
		const 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_CURRCOMPACT;
 
		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_CLOSEBOX,   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},
 
{   WWT_CLOSEBOX,   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(void)
 
{
 
	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 j, x, y;
 
		CargoID i;
 
		GraphDrawer gd;
 

	
 
		gd.sel = _legend_cargobits;
 
		w->click_state = (~_legend_cargobits) << 3;
 
		DrawWindowWidgets(w);
 

	
 
		x = 495;
 
		y = 25;
 

	
 
		gd.left = 2;
 
		gd.top = 24;
 
		gd.height = 104;
 
		gd.include_neg = false;
 
		gd.format_str_y_axis = STR_CURRCOMPACT;
 
		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++) {
 
			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.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},
 
{   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(void)
 
{
 
	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 PerfHistComp(const void* elem1, const void* elem2)
 
{
 
	const Player* p1 = *(const Player* const*)elem1;
 
@@ -1010,119 +1010,119 @@ static void PerformanceRatingDetailWndPr
 
		case WE_CREATE: {
 
			int i;
 
			Player *p2;
 
			w->hidden_state = 0;
 
			w->disabled_state = 0;
 

	
 
			// Hide the player who are not active
 
			for (i = 0; i < MAX_PLAYERS; i++) {
 
				if (!GetPlayer(i)->is_active) w->disabled_state += 1 << (i + 13);
 
			}
 
			// Update all player stats with the current data
 
			//  (this is because _score_info is not saved to a savegame)
 
			FOR_ALL_PLAYERS(p2) {
 
				if (p2->is_active) UpdateCompanyRatingAndValue(p2, false);
 
			}
 

	
 
			w->custom[0] = DAY_TICKS;
 
			w->custom[1] = 5;
 

	
 
			w->click_state = 1 << 13;
 

	
 
			SetWindowDirty(w);
 

	
 
			break;
 
		}
 

	
 
		case WE_TICK: {
 
			// Update the player score every 5 days
 
			if (--w->custom[0] == 0) {
 
				w->custom[0] = DAY_TICKS;
 
				if (--w->custom[1] == 0) {
 
					Player *p2;
 

	
 
					w->custom[1] = 5;
 
					FOR_ALL_PLAYERS(p2) {
 
						// Skip if player is not active
 
						if (p2->is_active) UpdateCompanyRatingAndValue(p2, false);
 
					}
 
					SetWindowDirty(w);
 
				}
 
			}
 

	
 
			break;
 
		}
 
	}
 
}
 

	
 
static const Widget _performance_rating_detail_widgets[] = {
 
{   WWT_CLOSEBOX,   RESIZE_NONE,    14,     0,    10,     0,    13, STR_00C5,								STR_018B_CLOSE_WINDOW},
 
{    WWT_CAPTION,   RESIZE_NONE,    14,    11,   298,     0,    13, STR_PERFORMANCE_DETAIL,	STR_018C_WINDOW_TITLE_DRAG_THIS},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,   298,    14,    27, 0x0,											STR_NULL},
 
{   WWT_CLOSEBOX,   RESIZE_NONE,    14,     0,    10,     0,    13, STR_00C5,               STR_018B_CLOSE_WINDOW},
 
{    WWT_CAPTION,   RESIZE_NONE,    14,    11,   298,     0,    13, STR_PERFORMANCE_DETAIL, STR_018C_WINDOW_TITLE_DRAG_THIS},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,   298,    14,    27, 0x0,                    STR_NULL},
 

	
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,   298,    28,    47, 0x0,STR_PERFORMANCE_DETAIL_VEHICLES_TIP},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,   298,    48,    67, 0x0,STR_PERFORMANCE_DETAIL_STATIONS_TIP},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,   298,    68,    87, 0x0,STR_PERFORMANCE_DETAIL_MIN_PROFIT_TIP},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,   298,    88,   107, 0x0,STR_PERFORMANCE_DETAIL_MIN_INCOME_TIP},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,   298,   108,   127, 0x0,STR_PERFORMANCE_DETAIL_MAX_INCOME_TIP},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,   298,   128,   147, 0x0,STR_PERFORMANCE_DETAIL_DELIVERED_TIP},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,   298,   148,   167, 0x0,STR_PERFORMANCE_DETAIL_CARGO_TIP},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,   298,   168,   187, 0x0,STR_PERFORMANCE_DETAIL_MONEY_TIP},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,   298,   188,   207, 0x0,STR_PERFORMANCE_DETAIL_LOAN_TIP},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,   298,   208,   227, 0x0,STR_PERFORMANCE_DETAIL_TOTAL_TIP},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,   298,    28,    47, 0x0,                    STR_PERFORMANCE_DETAIL_VEHICLES_TIP},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,   298,    48,    67, 0x0,                    STR_PERFORMANCE_DETAIL_STATIONS_TIP},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,   298,    68,    87, 0x0,                    STR_PERFORMANCE_DETAIL_MIN_PROFIT_TIP},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,   298,    88,   107, 0x0,                    STR_PERFORMANCE_DETAIL_MIN_INCOME_TIP},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,   298,   108,   127, 0x0,                    STR_PERFORMANCE_DETAIL_MAX_INCOME_TIP},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,   298,   128,   147, 0x0,                    STR_PERFORMANCE_DETAIL_DELIVERED_TIP},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,   298,   148,   167, 0x0,                    STR_PERFORMANCE_DETAIL_CARGO_TIP},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,   298,   168,   187, 0x0,                    STR_PERFORMANCE_DETAIL_MONEY_TIP},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,   298,   188,   207, 0x0,                    STR_PERFORMANCE_DETAIL_LOAN_TIP},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,   298,   208,   227, 0x0,                    STR_PERFORMANCE_DETAIL_TOTAL_TIP},
 

	
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,     2,    38,    14,    26, 0x0,STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,    39,    75,    14,    26, 0x0,STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,    76,   112,    14,    26, 0x0,STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,   113,   149,    14,    26, 0x0,STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,   150,   186,    14,    26, 0x0,STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,   187,   223,    14,    26, 0x0,STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,   224,   260,    14,    26, 0x0,STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,   261,   297,    14,    26, 0x0,STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,     2,    38,    14,    26, 0x0,                    STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,    39,    75,    14,    26, 0x0,                    STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,    76,   112,    14,    26, 0x0,                    STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,   113,   149,    14,    26, 0x0,                    STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,   150,   186,    14,    26, 0x0,                    STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,   187,   223,    14,    26, 0x0,                    STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,   224,   260,    14,    26, 0x0,                    STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,   261,   297,    14,    26, 0x0,                    STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY},
 
{   WIDGETS_END},
 
};
 

	
 
static const WindowDesc _performance_rating_detail_desc = {
 
	-1, -1, 299, 228,
 
	WC_PERFORMANCE_DETAIL,0,
 
	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET,
 
	_performance_rating_detail_widgets,
 
	PerformanceRatingDetailWndProc
 
};
 

	
 
void ShowPerformanceRatingDetail(void)
 
{
 
	AllocateWindowDescFront(&_performance_rating_detail_desc, 0);
 
}
 

	
 

	
 
static uint16 _num_sign_sort;
 

	
 
static char _bufcache[64];
 
static uint16 _last_sign_idx;
 

	
 
static int CDECL SignNameSorter(const void *a, const void *b)
 
{
 
	char buf1[64];
 
	SignStruct *ss;
 
	const uint16 cmp1 = *(const uint16 *)a;
 
	const uint16 cmp2 = *(const uint16 *)b;
 

	
 
	ss = GetSign(cmp1);
 
	GetString(buf1, ss->str);
 

	
 
	if (cmp2 != _last_sign_idx) {
 
		_last_sign_idx = cmp2;
 
		ss = GetSign(cmp2);
 
		GetString(_bufcache, ss->str);
 
	}
 

	
 
	return strcmp(buf1, _bufcache); // sort by name
 
}
 

	
 
static void GlobalSortSignList(void)
 
{
 
	const SignStruct *ss;
 
	uint32 n = 0;
 

	
 
	_num_sign_sort = 0;
 

	
 
@@ -1163,77 +1163,77 @@ static void SignListWndProc(Window *w, W
 
		if (w->vscroll.count == 0) {
 
			DrawString(2, y, STR_304A_NONE, 0);
 
			return;
 
		}
 

	
 
		{	const SignStruct *ss;
 
			uint16 i;
 

	
 
			/* Start drawing the signs */
 
			for (i = w->vscroll.pos; i < w->vscroll.cap + w->vscroll.pos && i < w->vscroll.count; i++) {
 
				ss = GetSign(_sign_sort[i]);
 

	
 
				if (ss->owner != OWNER_NONE)
 
					DrawPlayerIcon(ss->owner, 4, y + 1);
 

	
 
				DrawString(22, y, ss->str, 8);
 
				y += 10;
 
			}
 
		}
 
	} break;
 

	
 
	case WE_CLICK: {
 
		switch (e->click.widget) {
 
		case 3: {
 
			uint32 id_v = (e->click.pt.y - 15) / 10;
 
			SignStruct *ss;
 

	
 
			if (id_v >= w->vscroll.cap)
 
				return;
 

	
 
			id_v += w->vscroll.pos;
 

	
 
			if (id_v >= w->vscroll.count)
 
				return;
 

	
 
			ss = GetSign(_sign_sort[id_v]);
 
			ScrollMainWindowToTile(TileVirtXY(ss->x, ss->y));
 
		} break;
 
		}
 
	} break;
 

	
 
	case WE_RESIZE:
 
		w->vscroll.cap += e->sizing.diff.y / 10;
 
		break;
 
	}
 
}
 

	
 
static const Widget _sign_list_widget[] = {
 
{   WWT_CLOSEBOX,   RESIZE_NONE,    14,     0,    10,     0,    13, STR_00C5,									STR_018B_CLOSE_WINDOW},
 
{    WWT_CAPTION,  RESIZE_RIGHT,    14,    11,   345,     0,    13, STR_SIGN_LIST_CAPTION,		STR_018C_WINDOW_TITLE_DRAG_THIS},
 
{  WWT_STICKYBOX,     RESIZE_LR,    14,   346,   357,     0,    13, 0x0,											STR_STICKY_BUTTON},
 
{      WWT_PANEL,     RESIZE_RB,    14,     0,   345,    14,   137, 0x0,											STR_NULL},
 
{  WWT_SCROLLBAR,    RESIZE_LRB,    14,   346,   357,    14,   125, 0x0,											STR_0190_SCROLL_BAR_SCROLLS_LIST},
 
{  WWT_RESIZEBOX,   RESIZE_LRTB,    14,   346,   357,   126,   137, 0x0,											STR_RESIZE_BUTTON},
 
{   WWT_CLOSEBOX,   RESIZE_NONE,    14,     0,    10,     0,    13, STR_00C5,              STR_018B_CLOSE_WINDOW},
 
{    WWT_CAPTION,  RESIZE_RIGHT,    14,    11,   345,     0,    13, STR_SIGN_LIST_CAPTION, STR_018C_WINDOW_TITLE_DRAG_THIS},
 
{  WWT_STICKYBOX,     RESIZE_LR,    14,   346,   357,     0,    13, 0x0,                   STR_STICKY_BUTTON},
 
{      WWT_PANEL,     RESIZE_RB,    14,     0,   345,    14,   137, 0x0,                   STR_NULL},
 
{  WWT_SCROLLBAR,    RESIZE_LRB,    14,   346,   357,    14,   125, 0x0,                   STR_0190_SCROLL_BAR_SCROLLS_LIST},
 
{  WWT_RESIZEBOX,   RESIZE_LRTB,    14,   346,   357,   126,   137, 0x0,                   STR_RESIZE_BUTTON},
 
{   WIDGETS_END},
 
};
 

	
 
static const WindowDesc _sign_list_desc = {
 
	-1, -1, 358, 138,
 
	WC_SIGN_LIST,0,
 
	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_STICKY_BUTTON | WDF_RESIZABLE,
 
	_sign_list_widget,
 
	SignListWndProc
 
};
 

	
 

	
 
void ShowSignList(void)
 
{
 
	Window *w;
 

	
 
	w = AllocateWindowDescFront(&_sign_list_desc, 0);
 
	if (w != NULL) {
 
		w->vscroll.cap = 12;
 
		w->resize.step_height = 10;
 
		w->resize.height = w->height - 10 * 7; // minimum if 5 in the list
 
	}
 
}