Changeset - r12319:8d5b405a03d1
[Not reviewed]
master
0 1 0
alberth - 15 years ago 2009-07-05 15:53:47
alberth@openttd.org
(svn r16749) -Codechange: Rail toolbar uses nested widget tree only.
1 file changed with 38 insertions and 64 deletions:
0 comments (0 inline, 0 general)
src/rail_gui.cpp
Show inline comments
 
@@ -604,11 +604,12 @@ static const RailBuildingGUIButtonData _
 
 * @param clicked_widget Widget clicked in the toolbar
 
 */
 
struct BuildRailToolbarWindow : Window {
 
	BuildRailToolbarWindow(const WindowDesc *desc, WindowNumber window_number) : Window(desc, window_number)
 
	BuildRailToolbarWindow(const WindowDesc *desc, WindowNumber window_number, RailType railtype) : Window()
 
	{
 
		this->InitNested(desc);
 
		this->SetupRailToolbar(railtype);
 
		this->DisableWidget(RTW_REMOVE);
 

	
 
		this->FindWindowPlacementAndResize(desc);
 
		if (_settings_client.gui.link_terraform_toolbar) ShowTerraformToolbar(this);
 
	}
 

	
 
@@ -617,6 +618,35 @@ struct BuildRailToolbarWindow : Window {
 
		if (_settings_client.gui.link_terraform_toolbar) DeleteWindowById(WC_SCEN_LAND_GEN, 0, false);
 
	}
 

	
 
	/** Configures the rail toolbar for railtype given
 
	 * @param railtype the railtype to display
 
	 * @param w the window to modify
 
	 */
 
	void SetupRailToolbar(RailType railtype)
 
	{
 
		const RailtypeInfo *rti = GetRailTypeInfo(railtype);
 

	
 
		assert(railtype < RAILTYPE_END);
 
		this->nested_array[RTW_CAPTION]->widget_data      = rti->strings.toolbar_caption;
 
		this->nested_array[RTW_BUILD_NS]->widget_data     = rti->gui_sprites.build_ns_rail;
 
		this->nested_array[RTW_BUILD_X]->widget_data      = rti->gui_sprites.build_x_rail;
 
		this->nested_array[RTW_BUILD_EW]->widget_data     = rti->gui_sprites.build_ew_rail;
 
		this->nested_array[RTW_BUILD_Y]->widget_data      = rti->gui_sprites.build_y_rail;
 
		this->nested_array[RTW_AUTORAIL]->widget_data     = rti->gui_sprites.auto_rail;
 
		this->nested_array[RTW_BUILD_DEPOT]->widget_data  = rti->gui_sprites.build_depot;
 
		this->nested_array[RTW_CONVERT_RAIL]->widget_data = rti->gui_sprites.convert_rail;
 
		this->nested_array[RTW_BUILD_TUNNEL]->widget_data = rti->gui_sprites.build_tunnel;
 
	}
 

	
 
	/** Switch to another rail type.
 
	 * @param railtype New rail type.
 
	 */
 
	void ModifyRailType(RailType railtype)
 
	{
 
		this->SetupRailToolbar(railtype);
 
		this->ReInit();
 
	}
 

	
 
	void UpdateRemoveWidgetStatus(int clicked_widget)
 
	{
 
		switch (clicked_widget) {
 
@@ -757,34 +787,6 @@ struct BuildRailToolbarWindow : Window {
 
	}
 
};
 

	
 
/** Widget definition for the rail toolbar */
 
static const Widget _build_rail_widgets[] = {
 
{   WWT_CLOSEBOX,   RESIZE_NONE,  COLOUR_DARK_GREEN,     0,    10,     0,    13, STR_BLACK_CROSS,                STR_TOOLTIP_CLOSE_WINDOW},                      // RTW_CLOSEBOX
 
{    WWT_CAPTION,   RESIZE_NONE,  COLOUR_DARK_GREEN,    11,   337,     0,    13, STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS}, // RTW_CAPTION
 
{  WWT_STICKYBOX,   RESIZE_NONE,  COLOUR_DARK_GREEN,   338,   349,     0,    13, 0x0,                            STR_STICKY_BUTTON},                             // RTW_STICKY
 

	
 
{      WWT_PANEL,   RESIZE_NONE,  COLOUR_DARK_GREEN,   110,   113,    14,    35, 0x0,                            STR_NULL},                                      // RTW_SPACER
 

	
 
{     WWT_IMGBTN,   RESIZE_NONE,  COLOUR_DARK_GREEN,     0,    21,    14,    35, SPR_IMG_RAIL_NS,                STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK}, // RTW_BUILD_NS
 
{     WWT_IMGBTN,   RESIZE_NONE,  COLOUR_DARK_GREEN,    22,    43,    14,    35, SPR_IMG_RAIL_NE,                STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK}, // RTW_BUILD_X
 
{     WWT_IMGBTN,   RESIZE_NONE,  COLOUR_DARK_GREEN,    44,    65,    14,    35, SPR_IMG_RAIL_EW,                STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK}, // RTW_BUILD_EW
 
{     WWT_IMGBTN,   RESIZE_NONE,  COLOUR_DARK_GREEN,    66,    87,    14,    35, SPR_IMG_RAIL_NW,                STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK}, // RTW_BUILD_Y
 
{     WWT_IMGBTN,   RESIZE_NONE,  COLOUR_DARK_GREEN,    88,   109,    14,    35, SPR_IMG_AUTORAIL,               STR_BUILD_AUTORAIL_TIP},                        // RTW_AUTORAIL
 

	
 
{     WWT_IMGBTN,   RESIZE_NONE,  COLOUR_DARK_GREEN,   114,   135,    14,    35, SPR_IMG_DYNAMITE,               STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC},            // RTW_DEMOLISH
 
{     WWT_IMGBTN,   RESIZE_NONE,  COLOUR_DARK_GREEN,   136,   157,    14,    35, SPR_IMG_DEPOT_RAIL,             STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING}, // RTW_BUILD_DEPOT
 
{     WWT_IMGBTN,   RESIZE_NONE,  COLOUR_DARK_GREEN,   158,   179,    14,    35, SPR_IMG_WAYPOINT,               STR_CONVERT_RAIL_TO_WAYPOINT_TIP},              // RTW_BUILD_WAYPOINT
 

	
 
{     WWT_IMGBTN,   RESIZE_NONE,  COLOUR_DARK_GREEN,   180,   221,    14,    35, SPR_IMG_RAIL_STATION,           STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION},  // RTW_BUILD_STATION
 
{     WWT_IMGBTN,   RESIZE_NONE,  COLOUR_DARK_GREEN,   222,   243,    14,    35, SPR_IMG_RAIL_SIGNALS,           STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS},  // RTW_BUILD_SIGNALS
 
{     WWT_IMGBTN,   RESIZE_NONE,  COLOUR_DARK_GREEN,   244,   285,    14,    35, SPR_IMG_BRIDGE,                 STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE},   // RTW_BUILD_BRIDGE
 
{     WWT_IMGBTN,   RESIZE_NONE,  COLOUR_DARK_GREEN,   286,   305,    14,    35, SPR_IMG_TUNNEL_RAIL,            STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL},   // RTW_BUILD_TUNNEL
 
{     WWT_IMGBTN,   RESIZE_NONE,  COLOUR_DARK_GREEN,   306,   327,    14,    35, SPR_IMG_REMOVE,                 STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR}, // RTW_REMOVE
 
{     WWT_IMGBTN,   RESIZE_NONE,  COLOUR_DARK_GREEN,   328,   349,    14,    35, SPR_IMG_CONVERT_RAIL,           STR_CONVERT_RAIL_TIP},                             // RTW_CONVERT_RAIL
 

	
 
{   WIDGETS_END},
 
};
 

	
 
static const NWidgetPart _nested_build_rail_widgets[] = {
 
	NWidget(NWID_HORIZONTAL),
 
		NWidget(WWT_CLOSEBOX, COLOUR_DARK_GREEN, RTW_CLOSEBOX),
 
@@ -814,30 +816,10 @@ static const WindowDesc _build_rail_desc
 
	WDP_ALIGN_TBR, 22, 350, 36, 350, 36,
 
	WC_BUILD_TOOLBAR, WC_NONE,
 
	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_STICKY_BUTTON | WDF_CONSTRUCTION,
 
	_build_rail_widgets, _nested_build_rail_widgets, lengthof(_nested_build_rail_widgets)
 
	NULL, _nested_build_rail_widgets, lengthof(_nested_build_rail_widgets)
 
);
 

	
 

	
 
/** Configures the rail toolbar for railtype given
 
 * @param railtype the railtype to display
 
 * @param w the window to modify
 
 */
 
static void SetupRailToolbar(RailType railtype, Window *w)
 
{
 
	const RailtypeInfo *rti = GetRailTypeInfo(railtype);
 

	
 
	assert(railtype < RAILTYPE_END);
 
	w->widget[RTW_CAPTION].data = rti->strings.toolbar_caption;
 
	w->widget[RTW_BUILD_NS].data = rti->gui_sprites.build_ns_rail;
 
	w->widget[RTW_BUILD_X].data = rti->gui_sprites.build_x_rail;
 
	w->widget[RTW_BUILD_EW].data = rti->gui_sprites.build_ew_rail;
 
	w->widget[RTW_BUILD_Y].data = rti->gui_sprites.build_y_rail;
 
	w->widget[RTW_AUTORAIL].data = rti->gui_sprites.auto_rail;
 
	w->widget[RTW_BUILD_DEPOT].data = rti->gui_sprites.build_depot;
 
	w->widget[RTW_CONVERT_RAIL].data = rti->gui_sprites.convert_rail;
 
	w->widget[RTW_BUILD_TUNNEL].data = rti->gui_sprites.build_tunnel;
 
}
 

	
 
/**
 
 * Open the build rail toolbar window for a specific rail type.
 
 * The window may be opened in the 'normal' way by clicking at the rail icon in
 
@@ -860,8 +842,7 @@ void ShowBuildRailToolbar(RailType railt
 
	if (button < 0 || w == NULL) {
 
		DeleteWindowByClass(WC_BUILD_TOOLBAR);
 
		_cur_railtype = railtype;
 
		w = AllocateWindowDescFront<BuildRailToolbarWindow>(&_build_rail_desc, TRANSPORT_RAIL);
 
		SetupRailToolbar(railtype, w);
 
		w = new BuildRailToolbarWindow(&_build_rail_desc, TRANSPORT_RAIL, railtype);
 
	}
 

	
 
	_remove_button_clicked = false;
 
@@ -1919,13 +1900,9 @@ void ReinitGuiAfterToggleElrail(bool dis
 
{
 
	extern RailType _last_built_railtype;
 
	if (disable && _last_built_railtype == RAILTYPE_ELECTRIC) {
 
		Window *w;
 
		_last_built_railtype = _cur_railtype = RAILTYPE_RAIL;
 
		w = FindWindowById(WC_BUILD_TOOLBAR, TRANSPORT_RAIL);
 
		if (w != NULL) {
 
			SetupRailToolbar(_cur_railtype, w);
 
			w->SetDirty();
 
		}
 
		BuildRailToolbarWindow *w = dynamic_cast<BuildRailToolbarWindow *>(FindWindowById(WC_BUILD_TOOLBAR, TRANSPORT_RAIL));
 
		if (w != NULL) w->ModifyRailType(_cur_railtype);
 
	}
 
	MarkWholeScreenDirty();
 
}
 
@@ -1973,11 +1950,8 @@ static void SetDefaultRailGui()
 
	}
 

	
 
	_last_built_railtype = _cur_railtype = rt;
 
	Window *w = FindWindowById(WC_BUILD_TOOLBAR, TRANSPORT_RAIL);
 
	if (w != NULL) {
 
		SetupRailToolbar(_cur_railtype, w);
 
		w->SetDirty();
 
	}
 
	BuildRailToolbarWindow *w = dynamic_cast<BuildRailToolbarWindow *>(FindWindowById(WC_BUILD_TOOLBAR, TRANSPORT_RAIL));
 
	if (w != NULL) w->ModifyRailType(_cur_railtype);
 
}
 

	
 
/**
0 comments (0 inline, 0 general)