rail_gui.c
changeset 2274 d94004c14b6c
parent 2186 461a2aff3486
child 2514 8887b1f005c7
equal deleted inserted replaced
2273:95dd61d9ca47 2274:d94004c14b6c
     1 /* $Id$ */
     1 /* $Id$ */
       
     2 
       
     3 /** @file rail_gui.c File for dealing with rail construction user interface */
     2 
     4 
     3 #include "stdafx.h"
     5 #include "stdafx.h"
     4 #include "openttd.h"
     6 #include "openttd.h"
     5 #include "table/sprites.h"
     7 #include "table/sprites.h"
     6 #include "table/strings.h"
     8 #include "table/strings.h"
   484 	} break;
   486 	} break;
   485 	}
   487 	}
   486 }
   488 }
   487 
   489 
   488 
   490 
   489 static const Widget _build_railroad_widgets[] = {
   491 static const Widget _build_rail_widgets[] = {
   490 {   WWT_CLOSEBOX,   RESIZE_NONE,     7,     0,    10,     0,    13, STR_00C5,STR_018B_CLOSE_WINDOW},
   492 {   WWT_CLOSEBOX,   RESIZE_NONE,     7,     0,    10,     0,    13, STR_00C5,STR_018B_CLOSE_WINDOW},
   491 {    WWT_CAPTION,   RESIZE_NONE,     7,    11,   359,     0,    13, STR_100A_RAILROAD_CONSTRUCTION, STR_018C_WINDOW_TITLE_DRAG_THIS},
   493 {    WWT_CAPTION,   RESIZE_NONE,     7,    11,   359,     0,    13, STR_100A_RAILROAD_CONSTRUCTION, STR_018C_WINDOW_TITLE_DRAG_THIS},
   492 {  WWT_STICKYBOX,   RESIZE_NONE,     7,   360,   371,     0,    13, 0x0,     STR_STICKY_BUTTON},
   494 {  WWT_STICKYBOX,   RESIZE_NONE,     7,   360,   371,     0,    13, 0x0,     STR_STICKY_BUTTON},
   493 
   495 
   494 {      WWT_PANEL,   RESIZE_NONE,     7,   110,   113,    14,    35, 0x0,			STR_NULL},
   496 {      WWT_PANEL,   RESIZE_NONE,     7,   110,   113,    14,    35, 0x0,			STR_NULL},
   513 {      WWT_PANEL,   RESIZE_NONE,     7,   350,   371,    14,    35, SPR_IMG_LANDSCAPING,	STR_LANDSCAPING_TOOLBAR_TIP},
   515 {      WWT_PANEL,   RESIZE_NONE,     7,   350,   371,    14,    35, SPR_IMG_LANDSCAPING,	STR_LANDSCAPING_TOOLBAR_TIP},
   514 
   516 
   515 {   WIDGETS_END},
   517 {   WIDGETS_END},
   516 };
   518 };
   517 
   519 
   518 static const WindowDesc _build_railroad_desc = {
   520 static const WindowDesc _build_rail_desc = {
   519 	640-372, 22, 372, 36,
   521 	640-372, 22, 372, 36,
   520 	WC_BUILD_TOOLBAR,0,
   522 	WC_BUILD_TOOLBAR,0,
   521 	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_STICKY_BUTTON,
   523 	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_STICKY_BUTTON,
   522 	_build_railroad_widgets,
   524 	_build_rail_widgets,
   523 	BuildRailToolbWndProc
   525 	BuildRailToolbWndProc
   524 };
   526 };
   525 
   527 
   526 static const Widget _build_monorail_widgets[] = {
   528 /** Enum referring to the widgets of the build rail toolbar
   527 {   WWT_CLOSEBOX,   RESIZE_NONE,     7,     0,    10,     0,    13, STR_00C5,STR_018B_CLOSE_WINDOW},
   529  */
   528 {    WWT_CAPTION,   RESIZE_NONE,     7,    11,   359,     0,    13, STR_100B_MONORAIL_CONSTRUCTION, STR_018C_WINDOW_TITLE_DRAG_THIS},
   530 typedef enum {
   529 {  WWT_STICKYBOX,   RESIZE_NONE,     7,   360,   371,     0,    13, 0x0,     STR_STICKY_BUTTON},
   531 	RTW_CAPTION = 1,
   530 
   532 	RTW_BUILD_NS = 4,
   531 {      WWT_PANEL,   RESIZE_NONE,     7,   110,   113,    14,    35, 0x0,			STR_NULL},
   533 	RTW_BUILD_X = 5,
   532 
   534 	RTW_BUILD_EW = 6,
   533 {      WWT_PANEL,   RESIZE_NONE,     7,     0,    21,    14,    35, 0x4E7,		STR_1018_BUILD_RAILROAD_TRACK},
   535 	RTW_BUILD_Y = 7,
   534 {      WWT_PANEL,   RESIZE_NONE,     7,    22,    43,    14,    35, 0x4E8,		STR_1018_BUILD_RAILROAD_TRACK},
   536 	RTW_AUTORAIL = 8,
   535 {      WWT_PANEL,   RESIZE_NONE,     7,    44,    65,    14,    35, 0x4E9,		STR_1018_BUILD_RAILROAD_TRACK},
   537 	RTW_BUILD_DEPOT = 10,
   536 {      WWT_PANEL,   RESIZE_NONE,     7,    66,    87,    14,    35, 0x4EA,		STR_1018_BUILD_RAILROAD_TRACK},
   538 	RTW_BUILD_TUNNEL = 15,
   537 {      WWT_PANEL,   RESIZE_NONE,     7,    88,   109,    14,    35, SPR_OPENTTD_BASE + 1, STR_BUILD_AUTORAIL_TIP},
   539 	RTW_CONVERT_RAIL = 17
   538 
   540 } RailToolbarWidgets;
   539 {      WWT_PANEL,   RESIZE_NONE,     7,   114,   135,    14,    35, 0x2BF,		STR_018D_DEMOLISH_BUILDINGS_ETC},
   541 
   540 {      WWT_PANEL,   RESIZE_NONE,     7,   136,   157,    14,    35, SPR_OPENTTD_BASE + 12, STR_1019_BUILD_TRAIN_DEPOT_FOR_BUILDING},
   542 /** Configures the rail toolbar for railtype given
   541 {      WWT_PANEL,   RESIZE_NONE,     7,   158,   179,    14,    35, SPR_OPENTTD_BASE + 3, STR_CONVERT_RAIL_TO_WAYPOINT_TIP},
   543  * @param railtype the railtype to display
   542 
   544  * @param w the window to modify
   543 {      WWT_PANEL,   RESIZE_NONE,     7,   180,   221,    14,    35, 0x512,		STR_101A_BUILD_RAILROAD_STATION},
   545  */
   544 {      WWT_PANEL,   RESIZE_NONE,     7,   222,   243,    14,    35, 0x50B,		STR_101B_BUILD_RAILROAD_SIGNALS},
   546 static void SetupRailToolbar(uint16 railtype, Window *w)
   545 {      WWT_PANEL,   RESIZE_NONE,     7,   244,   285,    14,    35, 0xA22,		STR_101C_BUILD_RAILROAD_BRIDGE},
   547 {
   546 {      WWT_PANEL,   RESIZE_NONE,     7,   286,   305,    14,    35, 0x97F,		STR_101D_BUILD_RAILROAD_TUNNEL},
   548 	const RailtypeInfo *rti = GetRailTypeInfo(railtype);
   547 {      WWT_PANEL,   RESIZE_NONE,     7,   306,   327,    14,    35, 0x2CA,		STR_101E_TOGGLE_BUILD_REMOVE_FOR},
   549 
   548 {      WWT_PANEL,   RESIZE_NONE,     7,   328,   349,    14,    35, SPR_OPENTTD_BASE + 27, STR_CONVERT_RAIL_TIP},
   550 	assert(railtype < RAILTYPE_END);
   549 
   551 	w->widget[RTW_CAPTION].unkA = rti->strings.toolbar_caption;
   550 {      WWT_PANEL,   RESIZE_NONE,     7,   350,   371,    14,    35, SPR_IMG_LANDSCAPING,	STR_LANDSCAPING_TOOLBAR_TIP},
   552 	w->widget[RTW_BUILD_NS].unkA = rti->gui_sprites.build_ns_rail;
   551 
   553 	w->widget[RTW_BUILD_X].unkA = rti->gui_sprites.build_x_rail;
   552 {   WIDGETS_END},
   554 	w->widget[RTW_BUILD_EW].unkA = rti->gui_sprites.build_ew_rail;
   553 };
   555 	w->widget[RTW_BUILD_Y].unkA = rti->gui_sprites.build_y_rail;
   554 
   556 	w->widget[RTW_AUTORAIL].unkA = rti->gui_sprites.auto_rail;
   555 static const WindowDesc _build_monorail_desc = {
   557 	w->widget[RTW_BUILD_DEPOT].unkA = rti->gui_sprites.build_depot;
   556 	640-372, 22, 372, 36,
   558 	w->widget[RTW_CONVERT_RAIL].unkA = rti->gui_sprites.convert_rail;
   557 	WC_BUILD_TOOLBAR,0,
   559 	w->widget[RTW_BUILD_TUNNEL].unkA = rti->gui_sprites.build_tunnel;
   558 	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_STICKY_BUTTON,
   560 }
   559 	_build_monorail_widgets,
       
   560 	BuildRailToolbWndProc
       
   561 };
       
   562 
       
   563 static const Widget _build_maglev_widgets[] = {
       
   564 {   WWT_CLOSEBOX,   RESIZE_NONE,     7,     0,    10,     0,    13, STR_00C5,STR_018B_CLOSE_WINDOW},
       
   565 {    WWT_CAPTION,   RESIZE_NONE,     7,    11,   359,     0,    13, STR_100C_MAGLEV_CONSTRUCTION, STR_018C_WINDOW_TITLE_DRAG_THIS},
       
   566 {  WWT_STICKYBOX,   RESIZE_NONE,     7,   360,   371,     0,    13, 0x0,     STR_STICKY_BUTTON},
       
   567 
       
   568 {      WWT_PANEL,   RESIZE_NONE,     7,   110,   113,    14,    35, 0x0,			STR_NULL},
       
   569 
       
   570 {      WWT_PANEL,   RESIZE_NONE,     7,     0,    21,    14,    35, 0x4EB,		STR_1018_BUILD_RAILROAD_TRACK},
       
   571 {      WWT_PANEL,   RESIZE_NONE,     7,    22,    43,    14,    35, 0x4EC,		STR_1018_BUILD_RAILROAD_TRACK},
       
   572 {      WWT_PANEL,   RESIZE_NONE,     7,    44,    65,    14,    35, 0x4EE,		STR_1018_BUILD_RAILROAD_TRACK},
       
   573 {      WWT_PANEL,   RESIZE_NONE,     7,    66,    87,    14,    35, 0x4ED,		STR_1018_BUILD_RAILROAD_TRACK},
       
   574 {      WWT_PANEL,   RESIZE_NONE,     7,    88,   109,    14,    35, SPR_OPENTTD_BASE + 2, STR_BUILD_AUTORAIL_TIP},
       
   575 
       
   576 {      WWT_PANEL,   RESIZE_NONE,     7,   114,   135,    14,    35, 0x2BF,		STR_018D_DEMOLISH_BUILDINGS_ETC},
       
   577 {      WWT_PANEL,   RESIZE_NONE,     7,   136,   157,    14,    35, SPR_OPENTTD_BASE + 13, STR_1019_BUILD_TRAIN_DEPOT_FOR_BUILDING},
       
   578 {      WWT_PANEL,   RESIZE_NONE,     7,   158,   179,    14,    35, SPR_OPENTTD_BASE + 3, STR_CONVERT_RAIL_TO_WAYPOINT_TIP},
       
   579 
       
   580 {      WWT_PANEL,   RESIZE_NONE,     7,   180,   221,    14,    35, 0x512,		STR_101A_BUILD_RAILROAD_STATION},
       
   581 {      WWT_PANEL,   RESIZE_NONE,     7,   222,   243,    14,    35, 0x50B,		STR_101B_BUILD_RAILROAD_SIGNALS},
       
   582 {      WWT_PANEL,   RESIZE_NONE,     7,   244,   285,    14,    35, 0xA22,		STR_101C_BUILD_RAILROAD_BRIDGE},
       
   583 {      WWT_PANEL,   RESIZE_NONE,     7,   286,   305,    14,    35, 0x980,		STR_101D_BUILD_RAILROAD_TUNNEL},
       
   584 {      WWT_PANEL,   RESIZE_NONE,     7,   306,   327,    14,    35, 0x2CA,		STR_101E_TOGGLE_BUILD_REMOVE_FOR},
       
   585 {      WWT_PANEL,   RESIZE_NONE,     7,   328,   349,    14,    35, SPR_OPENTTD_BASE + 29, STR_CONVERT_RAIL_TIP},
       
   586 
       
   587 {      WWT_PANEL,   RESIZE_NONE,     7,   350,   371,    14,    35, SPR_IMG_LANDSCAPING,	STR_LANDSCAPING_TOOLBAR_TIP},
       
   588 
       
   589 {   WIDGETS_END},
       
   590 };
       
   591 
       
   592 static const WindowDesc _build_maglev_desc = {
       
   593 	640-372, 22, 372, 36,
       
   594 	WC_BUILD_TOOLBAR,0,
       
   595 	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_STICKY_BUTTON,
       
   596 	_build_maglev_widgets,
       
   597 	BuildRailToolbWndProc
       
   598 };
       
   599 
       
   600 
       
   601 static const WindowDesc * const _build_rr_desc[] = {
       
   602 	&_build_railroad_desc,
       
   603 	&_build_monorail_desc,
       
   604 	&_build_maglev_desc,
       
   605 };
       
   606 
   561 
   607 void ShowBuildRailToolbar(int index, int button)
   562 void ShowBuildRailToolbar(int index, int button)
   608 {
   563 {
   609 	Window *w;
   564 	Window *w;
   610 
   565 
   612 
   567 
   613 	// don't recreate the window if we're clicking on a button and the window exists.
   568 	// don't recreate the window if we're clicking on a button and the window exists.
   614 	if (button < 0 || !(w = FindWindowById(WC_BUILD_TOOLBAR, 0)) || w->wndproc != BuildRailToolbWndProc) {
   569 	if (button < 0 || !(w = FindWindowById(WC_BUILD_TOOLBAR, 0)) || w->wndproc != BuildRailToolbWndProc) {
   615 		DeleteWindowById(WC_BUILD_TOOLBAR, 0);
   570 		DeleteWindowById(WC_BUILD_TOOLBAR, 0);
   616 		_cur_railtype = (byte)index;
   571 		_cur_railtype = (byte)index;
   617 		w = AllocateWindowDesc(_build_rr_desc[index]);
   572 		w = AllocateWindowDesc(&_build_rail_desc);
       
   573 		SetupRailToolbar( (byte) index, w);
   618 	}
   574 	}
   619 
   575 
   620 	_remove_button_clicked = false;
   576 	_remove_button_clicked = false;
   621 	if (w != NULL && button >= 0) _build_railroad_button_proc[button](w);
   577 	if (w != NULL && button >= 0) _build_railroad_button_proc[button](w);
   622 }
   578 }