Remove TBTR replace all files, they are not used.
This commit is contained in:
		@@ -294,13 +294,11 @@
 | 
				
			|||||||
    <ClCompile Include="..\src\tbtr_template_gui_main.cpp" />
 | 
					    <ClCompile Include="..\src\tbtr_template_gui_main.cpp" />
 | 
				
			||||||
    <ClCompile Include="..\src\tbtr_template_gui_create.cpp" />
 | 
					    <ClCompile Include="..\src\tbtr_template_gui_create.cpp" />
 | 
				
			||||||
    <ClCompile Include="..\src\tbtr_template_gui_create_virtualtrain.cpp" />
 | 
					    <ClCompile Include="..\src\tbtr_template_gui_create_virtualtrain.cpp" />
 | 
				
			||||||
    <ClCompile Include="..\src\tbtr_template_gui_replaceall.cpp" />
 | 
					 | 
				
			||||||
    <ClCompile Include="..\src\tbtr_template_vehicle.cpp" />
 | 
					    <ClCompile Include="..\src\tbtr_template_vehicle.cpp" />
 | 
				
			||||||
    <ClCompile Include="..\src\tbtr_template_vehicle_func.cpp" />
 | 
					    <ClCompile Include="..\src\tbtr_template_vehicle_func.cpp" />
 | 
				
			||||||
    <ClInclude Include="..\src\tbtr_template_gui_main.h" />
 | 
					    <ClInclude Include="..\src\tbtr_template_gui_main.h" />
 | 
				
			||||||
    <ClInclude Include="..\src\tbtr_template_gui_create.h" />
 | 
					    <ClInclude Include="..\src\tbtr_template_gui_create.h" />
 | 
				
			||||||
    <ClInclude Include="..\src\tbtr_template_gui_create_virtualtrain.h" />
 | 
					    <ClInclude Include="..\src\tbtr_template_gui_create_virtualtrain.h" />
 | 
				
			||||||
    <ClInclude Include="..\src\tbtr_template_gui_replaceall.h" />
 | 
					 | 
				
			||||||
    <ClInclude Include="..\src\tbtr_template_vehicle.h" />
 | 
					    <ClInclude Include="..\src\tbtr_template_vehicle.h" />
 | 
				
			||||||
    <ClInclude Include="..\src\tbtr_template_vehicle_func.h" />
 | 
					    <ClInclude Include="..\src\tbtr_template_vehicle_func.h" />
 | 
				
			||||||
    <ClCompile Include="..\src\airport.cpp" />
 | 
					    <ClCompile Include="..\src\airport.cpp" />
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -111,9 +111,6 @@
 | 
				
			|||||||
    <ClCompile Include="..\src\tbtr_template_gui_create_virtualtrain.cpp">
 | 
					    <ClCompile Include="..\src\tbtr_template_gui_create_virtualtrain.cpp">
 | 
				
			||||||
      <Filter>Source Files</Filter>
 | 
					      <Filter>Source Files</Filter>
 | 
				
			||||||
    </ClCompile>
 | 
					    </ClCompile>
 | 
				
			||||||
    <ClCompile Include="..\src\tbtr_template_gui_replaceall.cpp">
 | 
					 | 
				
			||||||
      <Filter>Source Files</Filter>
 | 
					 | 
				
			||||||
    </ClCompile>
 | 
					 | 
				
			||||||
    <ClCompile Include="..\src\tbtr_template_vehicle.cpp">
 | 
					    <ClCompile Include="..\src\tbtr_template_vehicle.cpp">
 | 
				
			||||||
      <Filter>Source Files</Filter>
 | 
					      <Filter>Source Files</Filter>
 | 
				
			||||||
    </ClCompile>
 | 
					    </ClCompile>
 | 
				
			||||||
@@ -129,9 +126,6 @@
 | 
				
			|||||||
    <ClInclude Include="..\src\tbtr_template_gui_create_virtualtrain.h">
 | 
					    <ClInclude Include="..\src\tbtr_template_gui_create_virtualtrain.h">
 | 
				
			||||||
      <Filter>Source Files</Filter>
 | 
					      <Filter>Source Files</Filter>
 | 
				
			||||||
    </ClInclude>
 | 
					    </ClInclude>
 | 
				
			||||||
    <ClInclude Include="..\src\tbtr_template_gui_replaceall.h">
 | 
					 | 
				
			||||||
      <Filter>Source Files</Filter>
 | 
					 | 
				
			||||||
    </ClInclude>
 | 
					 | 
				
			||||||
    <ClInclude Include="..\src\tbtr_template_vehicle.h">
 | 
					    <ClInclude Include="..\src\tbtr_template_vehicle.h">
 | 
				
			||||||
      <Filter>Source Files</Filter>
 | 
					      <Filter>Source Files</Filter>
 | 
				
			||||||
    </ClInclude>
 | 
					    </ClInclude>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -311,13 +311,11 @@
 | 
				
			|||||||
    <ClCompile Include="..\src\tbtr_template_gui_main.cpp" />
 | 
					    <ClCompile Include="..\src\tbtr_template_gui_main.cpp" />
 | 
				
			||||||
    <ClCompile Include="..\src\tbtr_template_gui_create.cpp" />
 | 
					    <ClCompile Include="..\src\tbtr_template_gui_create.cpp" />
 | 
				
			||||||
    <ClCompile Include="..\src\tbtr_template_gui_create_virtualtrain.cpp" />
 | 
					    <ClCompile Include="..\src\tbtr_template_gui_create_virtualtrain.cpp" />
 | 
				
			||||||
    <ClCompile Include="..\src\tbtr_template_gui_replaceall.cpp" />
 | 
					 | 
				
			||||||
    <ClCompile Include="..\src\tbtr_template_vehicle.cpp" />
 | 
					    <ClCompile Include="..\src\tbtr_template_vehicle.cpp" />
 | 
				
			||||||
    <ClCompile Include="..\src\tbtr_template_vehicle_func.cpp" />
 | 
					    <ClCompile Include="..\src\tbtr_template_vehicle_func.cpp" />
 | 
				
			||||||
    <ClInclude Include="..\src\tbtr_template_gui_main.h" />
 | 
					    <ClInclude Include="..\src\tbtr_template_gui_main.h" />
 | 
				
			||||||
    <ClInclude Include="..\src\tbtr_template_gui_create.h" />
 | 
					    <ClInclude Include="..\src\tbtr_template_gui_create.h" />
 | 
				
			||||||
    <ClInclude Include="..\src\tbtr_template_gui_create_virtualtrain.h" />
 | 
					    <ClInclude Include="..\src\tbtr_template_gui_create_virtualtrain.h" />
 | 
				
			||||||
    <ClInclude Include="..\src\tbtr_template_gui_replaceall.h" />
 | 
					 | 
				
			||||||
    <ClInclude Include="..\src\tbtr_template_vehicle.h" />
 | 
					    <ClInclude Include="..\src\tbtr_template_vehicle.h" />
 | 
				
			||||||
    <ClInclude Include="..\src\tbtr_template_vehicle_func.h" />
 | 
					    <ClInclude Include="..\src\tbtr_template_vehicle_func.h" />
 | 
				
			||||||
    <ClCompile Include="..\src\airport.cpp" />
 | 
					    <ClCompile Include="..\src\airport.cpp" />
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -111,9 +111,6 @@
 | 
				
			|||||||
    <ClCompile Include="..\src\tbtr_template_gui_create_virtualtrain.cpp">
 | 
					    <ClCompile Include="..\src\tbtr_template_gui_create_virtualtrain.cpp">
 | 
				
			||||||
      <Filter>Source Files</Filter>
 | 
					      <Filter>Source Files</Filter>
 | 
				
			||||||
    </ClCompile>
 | 
					    </ClCompile>
 | 
				
			||||||
    <ClCompile Include="..\src\tbtr_template_gui_replaceall.cpp">
 | 
					 | 
				
			||||||
      <Filter>Source Files</Filter>
 | 
					 | 
				
			||||||
    </ClCompile>
 | 
					 | 
				
			||||||
    <ClCompile Include="..\src\tbtr_template_vehicle.cpp">
 | 
					    <ClCompile Include="..\src\tbtr_template_vehicle.cpp">
 | 
				
			||||||
      <Filter>Source Files</Filter>
 | 
					      <Filter>Source Files</Filter>
 | 
				
			||||||
    </ClCompile>
 | 
					    </ClCompile>
 | 
				
			||||||
@@ -129,9 +126,6 @@
 | 
				
			|||||||
    <ClInclude Include="..\src\tbtr_template_gui_create_virtualtrain.h">
 | 
					    <ClInclude Include="..\src\tbtr_template_gui_create_virtualtrain.h">
 | 
				
			||||||
      <Filter>Source Files</Filter>
 | 
					      <Filter>Source Files</Filter>
 | 
				
			||||||
    </ClInclude>
 | 
					    </ClInclude>
 | 
				
			||||||
    <ClInclude Include="..\src\tbtr_template_gui_replaceall.h">
 | 
					 | 
				
			||||||
      <Filter>Source Files</Filter>
 | 
					 | 
				
			||||||
    </ClInclude>
 | 
					 | 
				
			||||||
    <ClInclude Include="..\src\tbtr_template_vehicle.h">
 | 
					    <ClInclude Include="..\src\tbtr_template_vehicle.h">
 | 
				
			||||||
      <Filter>Source Files</Filter>
 | 
					      <Filter>Source Files</Filter>
 | 
				
			||||||
    </ClInclude>
 | 
					    </ClInclude>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -446,10 +446,6 @@
 | 
				
			|||||||
				RelativePath=".\..\src\tbtr_template_gui_create_virtualtrain.cpp"
 | 
									RelativePath=".\..\src\tbtr_template_gui_create_virtualtrain.cpp"
 | 
				
			||||||
				>
 | 
									>
 | 
				
			||||||
			</File>
 | 
								</File>
 | 
				
			||||||
			<File
 | 
					 | 
				
			||||||
				RelativePath=".\..\src\tbtr_template_gui_replaceall.cpp"
 | 
					 | 
				
			||||||
				>
 | 
					 | 
				
			||||||
			</File>
 | 
					 | 
				
			||||||
			<File
 | 
								<File
 | 
				
			||||||
				RelativePath=".\..\src\tbtr_template_vehicle.cpp"
 | 
									RelativePath=".\..\src\tbtr_template_vehicle.cpp"
 | 
				
			||||||
				>
 | 
									>
 | 
				
			||||||
@@ -470,10 +466,6 @@
 | 
				
			|||||||
				RelativePath=".\..\src\tbtr_template_gui_create_virtualtrain.h"
 | 
									RelativePath=".\..\src\tbtr_template_gui_create_virtualtrain.h"
 | 
				
			||||||
				>
 | 
									>
 | 
				
			||||||
			</File>
 | 
								</File>
 | 
				
			||||||
			<File
 | 
					 | 
				
			||||||
				RelativePath=".\..\src\tbtr_template_gui_replaceall.h"
 | 
					 | 
				
			||||||
				>
 | 
					 | 
				
			||||||
			</File>
 | 
					 | 
				
			||||||
			<File
 | 
								<File
 | 
				
			||||||
				RelativePath=".\..\src\tbtr_template_vehicle.h"
 | 
									RelativePath=".\..\src\tbtr_template_vehicle.h"
 | 
				
			||||||
				>
 | 
									>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -443,10 +443,6 @@
 | 
				
			|||||||
				RelativePath=".\..\src\tbtr_template_gui_create_virtualtrain.cpp"
 | 
									RelativePath=".\..\src\tbtr_template_gui_create_virtualtrain.cpp"
 | 
				
			||||||
				>
 | 
									>
 | 
				
			||||||
			</File>
 | 
								</File>
 | 
				
			||||||
			<File
 | 
					 | 
				
			||||||
				RelativePath=".\..\src\tbtr_template_gui_replaceall.cpp"
 | 
					 | 
				
			||||||
				>
 | 
					 | 
				
			||||||
			</File>
 | 
					 | 
				
			||||||
			<File
 | 
								<File
 | 
				
			||||||
				RelativePath=".\..\src\tbtr_template_vehicle.cpp"
 | 
									RelativePath=".\..\src\tbtr_template_vehicle.cpp"
 | 
				
			||||||
				>
 | 
									>
 | 
				
			||||||
@@ -467,10 +463,6 @@
 | 
				
			|||||||
				RelativePath=".\..\src\tbtr_template_gui_create_virtualtrain.h"
 | 
									RelativePath=".\..\src\tbtr_template_gui_create_virtualtrain.h"
 | 
				
			||||||
				>
 | 
									>
 | 
				
			||||||
			</File>
 | 
								</File>
 | 
				
			||||||
			<File
 | 
					 | 
				
			||||||
				RelativePath=".\..\src\tbtr_template_gui_replaceall.h"
 | 
					 | 
				
			||||||
				>
 | 
					 | 
				
			||||||
			</File>
 | 
					 | 
				
			||||||
			<File
 | 
								<File
 | 
				
			||||||
				RelativePath=".\..\src\tbtr_template_vehicle.h"
 | 
									RelativePath=".\..\src\tbtr_template_vehicle.h"
 | 
				
			||||||
				>
 | 
									>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,13 +2,11 @@
 | 
				
			|||||||
tbtr_template_gui_main.cpp
 | 
					tbtr_template_gui_main.cpp
 | 
				
			||||||
tbtr_template_gui_create.cpp
 | 
					tbtr_template_gui_create.cpp
 | 
				
			||||||
tbtr_template_gui_create_virtualtrain.cpp
 | 
					tbtr_template_gui_create_virtualtrain.cpp
 | 
				
			||||||
tbtr_template_gui_replaceall.cpp
 | 
					 | 
				
			||||||
tbtr_template_vehicle.cpp
 | 
					tbtr_template_vehicle.cpp
 | 
				
			||||||
tbtr_template_vehicle_func.cpp
 | 
					tbtr_template_vehicle_func.cpp
 | 
				
			||||||
tbtr_template_gui_main.h
 | 
					tbtr_template_gui_main.h
 | 
				
			||||||
tbtr_template_gui_create.h
 | 
					tbtr_template_gui_create.h
 | 
				
			||||||
tbtr_template_gui_create_virtualtrain.h
 | 
					tbtr_template_gui_create_virtualtrain.h
 | 
				
			||||||
tbtr_template_gui_replaceall.h
 | 
					 | 
				
			||||||
tbtr_template_vehicle.h
 | 
					tbtr_template_vehicle.h
 | 
				
			||||||
tbtr_template_vehicle_func.h
 | 
					tbtr_template_vehicle_func.h
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -20,7 +20,6 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#include "tbtr_template_vehicle.h"
 | 
					#include "tbtr_template_vehicle.h"
 | 
				
			||||||
#include "tbtr_template_vehicle_func.h"
 | 
					#include "tbtr_template_vehicle_func.h"
 | 
				
			||||||
#include "tbtr_template_gui_replaceall.h"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef GUIList<const Group*> GUIGroupList;
 | 
					typedef GUIList<const Group*> GUIGroupList;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,553 +0,0 @@
 | 
				
			|||||||
/* $Id$ */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * This file is part of OpenTTD.
 | 
					 | 
				
			||||||
 * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
 | 
					 | 
				
			||||||
 * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 | 
					 | 
				
			||||||
 * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/** @file tbtr_template_gui_replaceall.cpp Template-based train replacement: replace all GUI. */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include "stdafx.h"
 | 
					 | 
				
			||||||
#include "window_gui.h"
 | 
					 | 
				
			||||||
#include "window_func.h"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include "company_func.h"
 | 
					 | 
				
			||||||
#include "engine_base.h"
 | 
					 | 
				
			||||||
#include "engine_func.h"
 | 
					 | 
				
			||||||
#include "engine_gui.h"
 | 
					 | 
				
			||||||
#include "train.h"
 | 
					 | 
				
			||||||
#include "strings_func.h"
 | 
					 | 
				
			||||||
#include "vehicle_base.h"
 | 
					 | 
				
			||||||
#include "vehicle_func.h"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include "tbtr_template_vehicle.h"
 | 
					 | 
				
			||||||
#include "tbtr_template_vehicle_func.h"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include "core/math_func.hpp"
 | 
					 | 
				
			||||||
#include "table/strings.h"
 | 
					 | 
				
			||||||
#include "tbtr_template_gui_replaceall.h"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include <stdio.h>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include "safeguards.h"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * A wrapper which contains a virtual train and additional info of the template vehicle it is replacing
 | 
					 | 
				
			||||||
 * We will restore this additional info when creating a new template from the changed virtual train
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
struct VirtTrainInfo {
 | 
					 | 
				
			||||||
	// the virtual train
 | 
					 | 
				
			||||||
	Train *vt;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// additional info from the template
 | 
					 | 
				
			||||||
	VehicleID original_index;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	bool reuse_depot_vehicles;
 | 
					 | 
				
			||||||
	bool keep_remaining_vehicles;
 | 
					 | 
				
			||||||
	bool refit_as_template;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	CargoID cargo_type;
 | 
					 | 
				
			||||||
	byte cargo_subtype;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// a fancy constructor
 | 
					 | 
				
			||||||
	VirtTrainInfo(Train *t) { this->vt = t; }
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
typedef AutoFreeSmallVector<VirtTrainInfo*, 64> VirtTrainList;
 | 
					 | 
				
			||||||
enum Widgets {
 | 
					 | 
				
			||||||
	RPLALL_GUI_CAPTION,
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	RPLALL_GUI_INSET_1,
 | 
					 | 
				
			||||||
	RPLALL_GUI_INSET_1_1,
 | 
					 | 
				
			||||||
	RPLALL_GUI_INSET_1_2,
 | 
					 | 
				
			||||||
	RPLALL_GUI_MATRIX_TOPLEFT,
 | 
					 | 
				
			||||||
	RPLALL_GUI_MATRIX_TOPRIGHT,
 | 
					 | 
				
			||||||
	RPLALL_GUI_SCROLL_TL,
 | 
					 | 
				
			||||||
	RPLALL_GUI_SCROLL_TR,
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	RPLALL_GUI_INSET_2,
 | 
					 | 
				
			||||||
	RPLALL_GUI_MATRIX_BOTTOM,
 | 
					 | 
				
			||||||
	RPLALL_GUI_SCROLL_BO,
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	RPLALL_GUI_INSET_3,
 | 
					 | 
				
			||||||
	RPLALL_GUI_BUTTON_RPLALL,
 | 
					 | 
				
			||||||
	RPLALL_GUI_PANEL_BUTTONFLUFF_1,
 | 
					 | 
				
			||||||
	RPLALL_GUI_PANEL_BUTTONFLUFF_2,
 | 
					 | 
				
			||||||
	RPLALL_GUI_BUTTON_APPLY,
 | 
					 | 
				
			||||||
	RPLALL_GUI_PANEL_BUTTONFLUFF_3,
 | 
					 | 
				
			||||||
	RPLALL_GUI_BUTTON_CANCEL,
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	RPLALL_GUI_PANEL_RESIZEFLUFF
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static const NWidgetPart widgets[] = {
 | 
					 | 
				
			||||||
	// title bar
 | 
					 | 
				
			||||||
	NWidget(NWID_HORIZONTAL),
 | 
					 | 
				
			||||||
		NWidget(WWT_CLOSEBOX, COLOUR_GREY),
 | 
					 | 
				
			||||||
		NWidget(WWT_CAPTION, COLOUR_GREY, RPLALL_GUI_CAPTION), SetDataTip(STR_TMPL_RPLALLGUI_TITLE, STR_TMPL_RPLALLGUI_TITLE),
 | 
					 | 
				
			||||||
		NWidget(WWT_SHADEBOX, COLOUR_GREY),
 | 
					 | 
				
			||||||
		NWidget(WWT_STICKYBOX, COLOUR_GREY),
 | 
					 | 
				
			||||||
	EndContainer(),
 | 
					 | 
				
			||||||
	// top matrices
 | 
					 | 
				
			||||||
		NWidget(WWT_INSET, COLOUR_GREY, RPLALL_GUI_INSET_1), SetMinimalSize(100,12), SetResize(1,0), SetDataTip(STR_TMPL_RPLALLGUI_INSET_TOP, STR_TMPL_RPLALLGUI_INSET_TOP), EndContainer(),
 | 
					 | 
				
			||||||
	NWidget(NWID_HORIZONTAL),
 | 
					 | 
				
			||||||
		NWidget(NWID_VERTICAL),
 | 
					 | 
				
			||||||
			NWidget(WWT_INSET, COLOUR_GREY, RPLALL_GUI_INSET_1_1), SetMinimalSize(100,12), SetResize(1,0), SetDataTip(STR_TMPL_RPLALLGUI_INSET_TOP_1, STR_TMPL_RPLALLGUI_INSET_TOP_1), EndContainer(),
 | 
					 | 
				
			||||||
			NWidget(NWID_HORIZONTAL),
 | 
					 | 
				
			||||||
				NWidget(WWT_MATRIX, COLOUR_GREY, RPLALL_GUI_MATRIX_TOPLEFT), SetMinimalSize(100, 16), SetFill(1, 1), SetResize(1, 1), SetScrollbar(RPLALL_GUI_SCROLL_TL),// SetDataTip(0x1, STR_REPLACE_HELP_LEFT_ARRAY),
 | 
					 | 
				
			||||||
				NWidget(NWID_VSCROLLBAR, COLOUR_GREY, RPLALL_GUI_SCROLL_TL),
 | 
					 | 
				
			||||||
			EndContainer(),
 | 
					 | 
				
			||||||
		EndContainer(),
 | 
					 | 
				
			||||||
		NWidget(NWID_VERTICAL),
 | 
					 | 
				
			||||||
			NWidget(WWT_INSET, COLOUR_GREY, RPLALL_GUI_INSET_1_2), SetMinimalSize(100,12), SetResize(1,0), SetDataTip(STR_TMPL_RPLALLGUI_INSET_TOP_2, STR_TMPL_RPLALLGUI_INSET_TOP_2), EndContainer(),
 | 
					 | 
				
			||||||
			NWidget(NWID_HORIZONTAL),
 | 
					 | 
				
			||||||
				NWidget(WWT_MATRIX, COLOUR_GREY, RPLALL_GUI_MATRIX_TOPRIGHT), SetMinimalSize(100, 16), SetFill(1, 1), SetResize(1, 1), SetScrollbar(RPLALL_GUI_SCROLL_TR),// SetDataTip(0x1, STR_REPLACE_HELP_LEFT_ARRAY),
 | 
					 | 
				
			||||||
				NWidget(NWID_VSCROLLBAR, COLOUR_GREY, RPLALL_GUI_SCROLL_TR),
 | 
					 | 
				
			||||||
			EndContainer(),
 | 
					 | 
				
			||||||
		EndContainer(),
 | 
					 | 
				
			||||||
	EndContainer(),
 | 
					 | 
				
			||||||
	// bottom matrix
 | 
					 | 
				
			||||||
	NWidget(WWT_INSET, COLOUR_GREY, RPLALL_GUI_INSET_2), SetMinimalSize(200,12), SetResize(1,0), SetDataTip(STR_TMPL_RPLALLGUI_INSET_BOTTOM, STR_TMPL_RPLALLGUI_INSET_BOTTOM), EndContainer(),
 | 
					 | 
				
			||||||
	NWidget(NWID_HORIZONTAL),
 | 
					 | 
				
			||||||
		NWidget(WWT_MATRIX, COLOUR_GREY, RPLALL_GUI_MATRIX_BOTTOM), SetMinimalSize(200, 16), SetFill(1, 1), SetResize(1, 1), SetScrollbar(RPLALL_GUI_SCROLL_BO),// SetDataTip(0x1, STR_REPLACE_HELP_LEFT_ARRAY),
 | 
					 | 
				
			||||||
		NWidget(NWID_VSCROLLBAR, COLOUR_GREY, RPLALL_GUI_SCROLL_BO),
 | 
					 | 
				
			||||||
	EndContainer(),
 | 
					 | 
				
			||||||
	// control area
 | 
					 | 
				
			||||||
	NWidget(WWT_INSET, COLOUR_GREY, RPLALL_GUI_INSET_3), SetMinimalSize(200,12), SetResize(1,0), EndContainer(),// SetDataTip(STR_TMPL_MAINGUI_DEFINEDGROUPS, STR_TMPL_MAINGUI_DEFINEDGROUPS),
 | 
					 | 
				
			||||||
	NWidget(NWID_HORIZONTAL),
 | 
					 | 
				
			||||||
		NWidget(WWT_PANEL, COLOUR_GREY, RPLALL_GUI_PANEL_BUTTONFLUFF_1), SetMinimalSize(75,12), SetResize(1,0), EndContainer(),
 | 
					 | 
				
			||||||
		NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, RPLALL_GUI_BUTTON_RPLALL), SetMinimalSize(150,12), SetResize(0,0), SetDataTip(STR_TMPL_RPLALLGUI_BUTTON_RPLALL, STR_TMPL_RPLALLGUI_BUTTON_RPLALL),
 | 
					 | 
				
			||||||
		NWidget(WWT_PANEL, COLOUR_GREY, RPLALL_GUI_PANEL_BUTTONFLUFF_2), SetMinimalSize(75,12), SetResize(1,0), EndContainer(),
 | 
					 | 
				
			||||||
	EndContainer(),
 | 
					 | 
				
			||||||
	NWidget(NWID_HORIZONTAL),
 | 
					 | 
				
			||||||
		NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, RPLALL_GUI_BUTTON_APPLY), SetMinimalSize(75,12), SetResize(1,0), SetDataTip(STR_TMPL_RPLALLGUI_BUTTON_APPLY, STR_TMPL_RPLALLGUI_BUTTON_APPLY),
 | 
					 | 
				
			||||||
		NWidget(WWT_PANEL, COLOUR_GREY, RPLALL_GUI_PANEL_BUTTONFLUFF_3), SetMinimalSize(150,12), SetResize(0,0), EndContainer(),
 | 
					 | 
				
			||||||
		NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, RPLALL_GUI_BUTTON_CANCEL), SetMinimalSize(75,12), SetResize(1,0), SetDataTip(STR_TMPL_RPLALLGUI_BUTTON_CANCEL, STR_TMPL_RPLALLGUI_BUTTON_CANCEL),
 | 
					 | 
				
			||||||
	EndContainer(),
 | 
					 | 
				
			||||||
	NWidget(NWID_HORIZONTAL),
 | 
					 | 
				
			||||||
		NWidget(WWT_PANEL, COLOUR_GREY, RPLALL_GUI_PANEL_RESIZEFLUFF), SetMinimalSize(100,12), SetResize(1,0), EndContainer(),
 | 
					 | 
				
			||||||
		NWidget(WWT_RESIZEBOX, COLOUR_GREY),
 | 
					 | 
				
			||||||
	EndContainer(),
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static WindowDesc _template_replace_replaceall_desc(
 | 
					 | 
				
			||||||
	WDP_AUTO,
 | 
					 | 
				
			||||||
	"template replace window",
 | 
					 | 
				
			||||||
	400, 200,
 | 
					 | 
				
			||||||
	WC_TEMPLATEGUI_RPLALL, WC_NONE,
 | 
					 | 
				
			||||||
	WDF_CONSTRUCTION,
 | 
					 | 
				
			||||||
	widgets, lengthof(widgets)
 | 
					 | 
				
			||||||
);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static int CDECL EngineNumberSorter(const EngineID *a, const EngineID *b)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	int r = Engine::Get(*a)->list_position - Engine::Get(*b)->list_position;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return r;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
static int CDECL TrainEnginesThenWagonsSorter(const EngineID *a, const EngineID *b)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	int val_a = (RailVehInfo(*a)->railveh_type == RAILVEH_WAGON ? 1 : 0);
 | 
					 | 
				
			||||||
	int val_b = (RailVehInfo(*b)->railveh_type == RAILVEH_WAGON ? 1 : 0);
 | 
					 | 
				
			||||||
	int r = val_a - val_b;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	/* Use EngineID to sort instead since we want consistent sorting */
 | 
					 | 
				
			||||||
	if (r == 0) return EngineNumberSorter(a, b);
 | 
					 | 
				
			||||||
	return r;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class TemplateReplacementReplaceAllWindow : public Window {
 | 
					 | 
				
			||||||
private:
 | 
					 | 
				
			||||||
	uint16 line_height;
 | 
					 | 
				
			||||||
	Scrollbar *vscroll_tl;
 | 
					 | 
				
			||||||
	Scrollbar *vscroll_tr;
 | 
					 | 
				
			||||||
	Scrollbar *vscroll_bo;
 | 
					 | 
				
			||||||
	GUIEngineList *engines_left;
 | 
					 | 
				
			||||||
	GUIEngineList *engines_right;
 | 
					 | 
				
			||||||
	short selected_left;
 | 
					 | 
				
			||||||
	short selected_right;
 | 
					 | 
				
			||||||
	VirtTrainList *virtualTrains;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
public:
 | 
					 | 
				
			||||||
	TemplateReplacementReplaceAllWindow(WindowDesc *wdesc) : Window(wdesc)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		this->CreateNestedTree(wdesc != NULL);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		this->vscroll_tl = this->GetScrollbar(RPLALL_GUI_SCROLL_TL);
 | 
					 | 
				
			||||||
		this->vscroll_tr = this->GetScrollbar(RPLALL_GUI_SCROLL_TR);
 | 
					 | 
				
			||||||
		this->vscroll_bo = this->GetScrollbar(RPLALL_GUI_SCROLL_BO);
 | 
					 | 
				
			||||||
		this->vscroll_tl->SetStepSize(16);
 | 
					 | 
				
			||||||
		this->vscroll_tr->SetStepSize(16);
 | 
					 | 
				
			||||||
		this->vscroll_bo->SetStepSize(16);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		this->FinishInitNested(VEH_TRAIN);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		this->owner = _local_company;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		engines_left = new GUIEngineList();
 | 
					 | 
				
			||||||
		engines_right = new GUIEngineList();
 | 
					 | 
				
			||||||
		virtualTrains = new VirtTrainList();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		this->GenerateBuyableEnginesList();
 | 
					 | 
				
			||||||
		this->GenerateIncludedTemplateList();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		this->line_height = 16;
 | 
					 | 
				
			||||||
		this->selected_left = -1;
 | 
					 | 
				
			||||||
		this->selected_right = -1;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	~TemplateReplacementReplaceAllWindow()
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		for (uint i = 0; i<this->virtualTrains->Length(); ++i) {
 | 
					 | 
				
			||||||
			delete (*this->virtualTrains)[i]->vt;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		SetWindowClassesDirty(WC_TEMPLATEGUI_MAIN);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		switch (widget) {
 | 
					 | 
				
			||||||
			case RPLALL_GUI_MATRIX_TOPLEFT:
 | 
					 | 
				
			||||||
			case RPLALL_GUI_MATRIX_TOPRIGHT:
 | 
					 | 
				
			||||||
			case RPLALL_GUI_MATRIX_BOTTOM: {
 | 
					 | 
				
			||||||
				resize->height = 16;
 | 
					 | 
				
			||||||
				size->height = 16;
 | 
					 | 
				
			||||||
				break;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	virtual void OnPaint()
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		this->GetWidget<NWidgetCore>(RPLALL_GUI_PANEL_BUTTONFLUFF_3)->colour  = _company_colours[_local_company];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		this->DrawWidgets();
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	virtual void OnResize()
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		NWidgetCore *nwi_tl = this->GetWidget<NWidgetCore>(RPLALL_GUI_MATRIX_TOPLEFT);
 | 
					 | 
				
			||||||
		this->vscroll_tl->SetCapacityFromWidget(this, RPLALL_GUI_MATRIX_TOPLEFT);
 | 
					 | 
				
			||||||
		nwi_tl->widget_data = (this->vscroll_tl->GetCapacity() << MAT_ROW_START) + (1 << MAT_COL_START);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		NWidgetCore *nwi_tr = this->GetWidget<NWidgetCore>(RPLALL_GUI_MATRIX_TOPRIGHT);
 | 
					 | 
				
			||||||
		this->vscroll_tr->SetCapacityFromWidget(this, RPLALL_GUI_MATRIX_TOPRIGHT);
 | 
					 | 
				
			||||||
		nwi_tr->widget_data = (this->vscroll_tr->GetCapacity() << MAT_ROW_START) + (1 << MAT_COL_START);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		NWidgetCore *nwi_bo = this->GetWidget<NWidgetCore>(RPLALL_GUI_MATRIX_BOTTOM);
 | 
					 | 
				
			||||||
		this->vscroll_bo->SetCapacityFromWidget(this, RPLALL_GUI_MATRIX_BOTTOM);
 | 
					 | 
				
			||||||
		nwi_bo->widget_data = (this->vscroll_bo->GetCapacity() << MAT_ROW_START) + (1 << MAT_COL_START);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	virtual void DrawWidget(const Rect &r, int widget) const
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		switch (widget) {
 | 
					 | 
				
			||||||
			case RPLALL_GUI_MATRIX_TOPLEFT: {
 | 
					 | 
				
			||||||
				this->DrawEngineList(r, true);
 | 
					 | 
				
			||||||
				break;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
			case RPLALL_GUI_MATRIX_TOPRIGHT: {
 | 
					 | 
				
			||||||
				this->DrawEngineList(r, false);
 | 
					 | 
				
			||||||
				break;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
			case RPLALL_GUI_MATRIX_BOTTOM: {
 | 
					 | 
				
			||||||
				this->DrawVirtualTrains(r);
 | 
					 | 
				
			||||||
				break;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	virtual void OnClick(Point pt, int widget, int click_count)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		switch(widget) {
 | 
					 | 
				
			||||||
			case RPLALL_GUI_MATRIX_TOPLEFT: {
 | 
					 | 
				
			||||||
				uint16 newindex = (uint16)((pt.y - this->nested_array[RPLALL_GUI_MATRIX_TOPLEFT]->pos_y) / this->line_height) + this->vscroll_tl->GetPosition();
 | 
					 | 
				
			||||||
				if (newindex >= this->engines_left->Length() || newindex == this->selected_left) {
 | 
					 | 
				
			||||||
					this->selected_left = -1;
 | 
					 | 
				
			||||||
				} else {
 | 
					 | 
				
			||||||
					this->selected_left = newindex;
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
				this->SetDirty();
 | 
					 | 
				
			||||||
				break;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
			case RPLALL_GUI_MATRIX_TOPRIGHT: {
 | 
					 | 
				
			||||||
				uint16 newindex = (uint16)((pt.y - this->nested_array[RPLALL_GUI_MATRIX_TOPRIGHT]->pos_y) / this->line_height) + this->vscroll_tr->GetPosition();
 | 
					 | 
				
			||||||
				if (newindex > this->engines_right->Length() || newindex==this->selected_right) {
 | 
					 | 
				
			||||||
					this->selected_right = -1;
 | 
					 | 
				
			||||||
				} else {
 | 
					 | 
				
			||||||
					this->selected_right = newindex;
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
				this->SetDirty();
 | 
					 | 
				
			||||||
				break;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
			case RPLALL_GUI_BUTTON_RPLALL: {
 | 
					 | 
				
			||||||
				this->ReplaceAll();
 | 
					 | 
				
			||||||
				break;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
			case RPLALL_GUI_BUTTON_APPLY: {
 | 
					 | 
				
			||||||
				// check if we actually did anything so far, if not, applying is forbidden
 | 
					 | 
				
			||||||
				if (this->virtualTrains->Length() == 0) {
 | 
					 | 
				
			||||||
					return;
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
				// first delete all current templates
 | 
					 | 
				
			||||||
				this->DeleteAllTemplateTrains();
 | 
					 | 
				
			||||||
				// then build a new list from the current virtual trains
 | 
					 | 
				
			||||||
				for (uint i = 0; i < this->virtualTrains->Length(); ++i) {
 | 
					 | 
				
			||||||
					// the relevant info struct
 | 
					 | 
				
			||||||
					VirtTrainInfo *vti = (*this->virtualTrains)[i];
 | 
					 | 
				
			||||||
					// setup template from contained train
 | 
					 | 
				
			||||||
					Train *t = vti->vt;
 | 
					 | 
				
			||||||
					TemplateVehicle *tv = TemplateVehicleFromVirtualTrain(t);
 | 
					 | 
				
			||||||
					// restore template specific stuff
 | 
					 | 
				
			||||||
					tv->reuse_depot_vehicles		= vti->reuse_depot_vehicles;
 | 
					 | 
				
			||||||
					tv->keep_remaining_vehicles		= vti->keep_remaining_vehicles;
 | 
					 | 
				
			||||||
					tv->refit_as_template			= vti->refit_as_template;
 | 
					 | 
				
			||||||
					tv->cargo_type					= vti->cargo_type;
 | 
					 | 
				
			||||||
					tv->cargo_subtype				= vti->cargo_subtype;
 | 
					 | 
				
			||||||
					// use the original_index information to repoint the relevant TemplateReplacement if existing
 | 
					 | 
				
			||||||
					TemplateReplacement *tr = GetTemplateReplacementByTemplateID(vti->original_index);
 | 
					 | 
				
			||||||
					if (tr) {
 | 
					 | 
				
			||||||
						tr->sel_template = tv->index;
 | 
					 | 
				
			||||||
					}
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
				// then close this window and return to parent
 | 
					 | 
				
			||||||
				delete this;
 | 
					 | 
				
			||||||
				break;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
			case RPLALL_GUI_BUTTON_CANCEL: {
 | 
					 | 
				
			||||||
				delete this;
 | 
					 | 
				
			||||||
				break;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	bool HasTemplateWithEngine(EngineID eid) const
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		const TemplateVehicle *tv;
 | 
					 | 
				
			||||||
		FOR_ALL_TEMPLATES(tv) {
 | 
					 | 
				
			||||||
			if (tv->Prev() || tv->owner != _local_company) continue;
 | 
					 | 
				
			||||||
			for (const TemplateVehicle *tmp = tv; tmp != NULL; tmp = tmp->GetNextUnit()) {
 | 
					 | 
				
			||||||
				if (tmp->engine_type == eid) {
 | 
					 | 
				
			||||||
					return true;
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		return false;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	void GenerateVirtualTrains()
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		this->virtualTrains->Clear();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		TemplateVehicle *tv;
 | 
					 | 
				
			||||||
		FOR_ALL_TEMPLATES(tv) {
 | 
					 | 
				
			||||||
			if (!tv->Prev() && tv->owner == this->owner) {
 | 
					 | 
				
			||||||
				// setup template train
 | 
					 | 
				
			||||||
				Train *newtrain = VirtualTrainFromTemplateVehicle(tv);
 | 
					 | 
				
			||||||
				VirtTrainInfo *vti = new VirtTrainInfo(newtrain);
 | 
					 | 
				
			||||||
				// store template specific stuff
 | 
					 | 
				
			||||||
				vti->original_index             = tv->index;
 | 
					 | 
				
			||||||
				vti->reuse_depot_vehicles       = tv->reuse_depot_vehicles;
 | 
					 | 
				
			||||||
				vti->keep_remaining_vehicles    = tv->keep_remaining_vehicles;
 | 
					 | 
				
			||||||
				vti->refit_as_template          = tv->refit_as_template;
 | 
					 | 
				
			||||||
				vti->cargo_type                 = tv->cargo_type;
 | 
					 | 
				
			||||||
				vti->cargo_subtype              = tv->cargo_subtype;
 | 
					 | 
				
			||||||
				// add new info struct
 | 
					 | 
				
			||||||
				*this->virtualTrains->Append() = vti;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		this->vscroll_bo->SetCount(this->virtualTrains->Length());
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	void DeleteAllTemplateTrains()
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		TemplateVehicle *tv, *tmp;
 | 
					 | 
				
			||||||
		FOR_ALL_TEMPLATES(tv) {
 | 
					 | 
				
			||||||
			tmp = tv;
 | 
					 | 
				
			||||||
			if (tmp->Prev() == NULL && tmp->owner == this->owner) {
 | 
					 | 
				
			||||||
				delete tmp;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	void GenerateIncludedTemplateList()
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		int num_engines = 0;
 | 
					 | 
				
			||||||
		int num_wagons  = 0;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		this->engines_left->Clear();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		const Engine *e;
 | 
					 | 
				
			||||||
		FOR_ALL_ENGINES_OF_TYPE(e, VEH_TRAIN) {
 | 
					 | 
				
			||||||
			EngineID eid = e->index;
 | 
					 | 
				
			||||||
			const RailVehicleInfo*rvi = &e->u.rail;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			if (!HasTemplateWithEngine(eid)) continue;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			*this->engines_left->Append() = eid;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			if (rvi->railveh_type != RAILVEH_WAGON) {
 | 
					 | 
				
			||||||
				num_engines++;
 | 
					 | 
				
			||||||
			} else {
 | 
					 | 
				
			||||||
				num_wagons++;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		this->vscroll_tl->SetCount(this->engines_left->Length());
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	bool VirtualTrainHasEngineID(EngineID eid)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		for (uint i = 0; i < this->virtualTrains->Length(); ++i) {
 | 
					 | 
				
			||||||
			const Train *tmp = (*this->virtualTrains)[i]->vt;
 | 
					 | 
				
			||||||
			for (; tmp != NULL; tmp = tmp->Next()) {
 | 
					 | 
				
			||||||
				if (tmp->engine_type == eid) {
 | 
					 | 
				
			||||||
					return true;
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		return false;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// after 'replace all' we need to replace the currently used templates as well
 | 
					 | 
				
			||||||
	void RebuildIncludedTemplateList() {
 | 
					 | 
				
			||||||
		// first remove all engine ids
 | 
					 | 
				
			||||||
		for (uint i = 0; i < this->engines_left->Length(); ++i) {
 | 
					 | 
				
			||||||
			EngineID entry = (*this->engines_left)[i];
 | 
					 | 
				
			||||||
			if (!VirtualTrainHasEngineID(entry)) {
 | 
					 | 
				
			||||||
				this->engines_left->Erase(&((*this->engines_left)[i]));
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	void ReplaceAll()
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		if (this->selected_left == -1 || this->selected_right == -1) return;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		EngineID eid_orig = (*this->engines_left)[this->selected_left];
 | 
					 | 
				
			||||||
		EngineID eid_repl = (*this->engines_right)[this->selected_right];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		if (eid_orig == eid_repl) return;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		if (this->virtualTrains->Length() == 0) {
 | 
					 | 
				
			||||||
			this->GenerateVirtualTrains();
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		for (uint i = 0; i < this->virtualTrains->Length(); ++i) {
 | 
					 | 
				
			||||||
			Train *tmp = (*this->virtualTrains)[i]->vt;
 | 
					 | 
				
			||||||
			while (tmp) {
 | 
					 | 
				
			||||||
				if (tmp->engine_type == eid_orig) {
 | 
					 | 
				
			||||||
					// build a new virtual rail vehicle and test for success
 | 
					 | 
				
			||||||
					Train *nt = CmdBuildVirtualRailVehicle(eid_repl);
 | 
					 | 
				
			||||||
					if (!nt) continue;
 | 
					 | 
				
			||||||
					// include the (probably) new engine into the 'included'-list
 | 
					 | 
				
			||||||
					this->engines_left->Include(nt->engine_type);
 | 
					 | 
				
			||||||
					// advance the tmp pointer in the chain, otherwise it would get deleted later on
 | 
					 | 
				
			||||||
					Train *to_del = tmp;
 | 
					 | 
				
			||||||
					tmp = tmp->GetNextUnit();
 | 
					 | 
				
			||||||
					// first move the new virtual rail vehicle behind to_del
 | 
					 | 
				
			||||||
					CommandCost move = CmdMoveRailVehicle(INVALID_TILE, DC_EXEC, nt->index | (1 << 21), to_del->index, 0);
 | 
					 | 
				
			||||||
					// then move to_del away from the chain and delete it
 | 
					 | 
				
			||||||
					move = CmdMoveRailVehicle(INVALID_TILE, DC_EXEC, to_del->index | (1 << 21), INVALID_VEHICLE, 0);
 | 
					 | 
				
			||||||
					(*this->virtualTrains)[i]->vt = nt->First();
 | 
					 | 
				
			||||||
					delete to_del;
 | 
					 | 
				
			||||||
				} else {
 | 
					 | 
				
			||||||
					tmp = tmp->GetNextUnit();
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		this->selected_left = -1;
 | 
					 | 
				
			||||||
		// rebuild the left engines list as some engines might not be there anymore
 | 
					 | 
				
			||||||
		this->RebuildIncludedTemplateList();
 | 
					 | 
				
			||||||
		this->SetDirty();
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	void GenerateBuyableEnginesList()
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		int num_engines = 0;
 | 
					 | 
				
			||||||
		int num_wagons  = 0;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		this->engines_right->Clear();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		const Engine *e;
 | 
					 | 
				
			||||||
		FOR_ALL_ENGINES_OF_TYPE(e, VEH_TRAIN) {
 | 
					 | 
				
			||||||
			EngineID eid = e->index;
 | 
					 | 
				
			||||||
			const RailVehicleInfo *rvi = &e->u.rail;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			if (!IsEngineBuildable(eid, VEH_TRAIN, _local_company)) continue;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			*this->engines_right->Append() = eid;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			if (rvi->railveh_type != RAILVEH_WAGON) {
 | 
					 | 
				
			||||||
				num_engines++;
 | 
					 | 
				
			||||||
			} else {
 | 
					 | 
				
			||||||
				num_wagons++;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		/* make engines first, and then wagons, sorted by ListPositionOfEngine() */
 | 
					 | 
				
			||||||
		EngList_Sort(this->engines_right, TrainEnginesThenWagonsSorter);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		this->vscroll_tr->SetCount(this->engines_right->Length());
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	void DrawEngineList(const Rect &r, bool left) const
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		uint16 y = r.top;
 | 
					 | 
				
			||||||
		uint32 eid;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		Scrollbar *sb;
 | 
					 | 
				
			||||||
		const GUIEngineList *el;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		if (left) {
 | 
					 | 
				
			||||||
			sb = this->vscroll_tl;
 | 
					 | 
				
			||||||
			el = this->engines_left;
 | 
					 | 
				
			||||||
		} else {
 | 
					 | 
				
			||||||
			sb = this->vscroll_tr;
 | 
					 | 
				
			||||||
			el = this->engines_right;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		int maximum = min((int) sb->GetCapacity(), (int) el->Length()) + sb->GetPosition();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		for (int i = sb->GetPosition(); i < maximum; ++i) {
 | 
					 | 
				
			||||||
			eid = (*el)[i];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			/* Draw a grey background rectangle if the current line is the selected one */
 | 
					 | 
				
			||||||
			if ((left && this->selected_left == i) || (!left && this->selected_right == i)) {
 | 
					 | 
				
			||||||
				GfxFillRect(r.left, y, r.right, y + this->line_height, _colour_gradient[COLOUR_GREY][3]);
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			/* Draw a description string of the current engine */
 | 
					 | 
				
			||||||
			SetDParam(0, eid);
 | 
					 | 
				
			||||||
			DrawString(r.left + 100, r.right, y + 4, STR_ENGINE_NAME, TC_BLACK);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			/* Draw the engine */
 | 
					 | 
				
			||||||
			DrawVehicleEngine(r.left, r.right, r.left + 29, y + 8, eid, GetEnginePalette(eid, _local_company), EIT_PURCHASE);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			y += this->line_height;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	void DrawVirtualTrains(const Rect &r) const
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		uint16 y = r.top;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		uint16 max = min(virtualTrains->Length(), this->vscroll_bo->GetCapacity());
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		for (uint16 i = vscroll_bo->GetPosition(); i < max + vscroll_bo->GetPosition(); ++i) {
 | 
					 | 
				
			||||||
			/* Draw a virtual train*/
 | 
					 | 
				
			||||||
			DrawTrainImage((*this->virtualTrains)[i]->vt, r.left + 32, r.right, y, INVALID_VEHICLE, EIT_PURCHASE, 0, -1);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			y += this->line_height;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void ShowTemplateReplaceAllGui()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	new TemplateReplacementReplaceAllWindow(&_template_replace_replaceall_desc);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,17 +0,0 @@
 | 
				
			|||||||
/* $Id$ */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * This file is part of OpenTTD.
 | 
					 | 
				
			||||||
 * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
 | 
					 | 
				
			||||||
 * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 | 
					 | 
				
			||||||
 * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/** @file tbtr_template_gui_replaceall.cpp Template-based train replacement: replace all GUI header. */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifndef TMPL_RPLALL_GUI
 | 
					 | 
				
			||||||
#define TMPL_RPLALL_GUI
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void ShowTemplateReplaceAllGui();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
		Reference in New Issue
	
	Block a user