src/bridge_gui.cpp
author rubidium
Fri, 04 Jul 2008 19:00:11 +0000
changeset 11118 f66e0a4ce878
parent 11036 5e6aacb99732
permissions -rw-r--r--
(svn r13676) -Fix [FS#2126]: inactive companies from old (TTD) saves could be marked active in some cases, which then loads garbage in their statistics and such.
2186
461a2aff3486 (svn r2701) Insert Id tags into all source files
tron
parents: 2163
diff changeset
     1
/* $Id$ */
461a2aff3486 (svn r2701) Insert Id tags into all source files
tron
parents: 2163
diff changeset
     2
6443
b8f06d8eb7be (svn r8853) -Cleanup: doxygen changes. Correct forgotten c files to cpp files with the @file tag as well as a few general comments style
belugas
parents: 6182
diff changeset
     3
/** @file bridge_gui.cpp Graphical user interface for bridge construction */
2262
bd59b2d8d75f (svn r2782) -Codechange: Started cleaning the bridge code. Removed numerous global variables containing bridge information and joined them in a struct. Introduced GetBridgeType and GetBridgePiece and fixed some minor stuff (whitespace etc)
celestar
parents: 2186
diff changeset
     4
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
     5
#include "stdafx.h"
1891
92a3b0aa0946 (svn r2397) - CodeChange: rename all "ttd" files to "openttd" files.
Darkvater
parents: 1781
diff changeset
     6
#include "openttd.h"
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
     7
#include "gui.h"
8603
88c5ce6a5215 (svn r11668) -Codechange: more refactoring aimed at reducing compile time and making it more logic where function definitions can be found.
rubidium
parents: 8602
diff changeset
     8
#include "window_gui.h"
8612
6414fc21c2f3 (svn r11677) -Codechange: move price and command related types/functions to their respective places.
rubidium
parents: 8610
diff changeset
     9
#include "command_func.h"
6414fc21c2f3 (svn r11677) -Codechange: move price and command related types/functions to their respective places.
rubidium
parents: 8610
diff changeset
    10
#include "economy_func.h"
2159
3b634157c3b2 (svn r2669) Shuffle some more stuff around to reduce dependencies
tron
parents: 2133
diff changeset
    11
#include "variables.h"
2262
bd59b2d8d75f (svn r2782) -Codechange: Started cleaning the bridge code. Removed numerous global variables containing bridge information and joined them in a struct. Introduced GetBridgeType and GetBridgePiece and fixed some minor stuff (whitespace etc)
celestar
parents: 2186
diff changeset
    12
#include "bridge.h"
8610
17cc343a23dd (svn r11675) -Codechange: split the string types from the string functions.
rubidium
parents: 8603
diff changeset
    13
#include "strings_func.h"
8627
448ebf3a8291 (svn r11692) -Codechange: move some functions from 'functions.h' to a more logical place and remove about 50% of the includes of 'functions.h'
rubidium
parents: 8617
diff changeset
    14
#include "window_func.h"
8653
a83f7a536919 (svn r11719) -Codechange: split sound.h in a header with types and one with functions.
rubidium
parents: 8635
diff changeset
    15
#include "sound_func.h"
8635
3bbb6f87fced (svn r11701) -Codechange: removal unnecessary inclusions of map.h (and split map.h).
rubidium
parents: 8627
diff changeset
    16
#include "map_func.h"
8720
4e60c30e2006 (svn r11787) -Codechange: more header rewrites. This time related to viewport.h.
rubidium
parents: 8653
diff changeset
    17
#include "viewport_func.h"
4e60c30e2006 (svn r11787) -Codechange: more header rewrites. This time related to viewport.h.
rubidium
parents: 8653
diff changeset
    18
#include "gfx_func.h"
8894
1e5b2d4380b8 (svn r11968) -Codechange: remove redundant FindLengthOfTunnel(), use GetTunnelBridgeLength() and/or GetOtherTunnelEnd() instead
smatz
parents: 8760
diff changeset
    19
#include "tunnelbridge.h"
10605
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
    20
#include "sortlist_type.h"
10615
58fb0e062812 (svn r13159) -Feature: Add the ability to sort availible bridges in the build bridge GUI
skidd13
parents: 10607
diff changeset
    21
#include "widgets/dropdown_func.h"
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    22
8760
ce0891c412ce (svn r11828) -Codechange: include table/* as the last includes and remove an unneeded include from openttd.h.
rubidium
parents: 8720
diff changeset
    23
#include "table/strings.h"
ce0891c412ce (svn r11828) -Codechange: include table/* as the last includes and remove an unneeded include from openttd.h.
rubidium
parents: 8720
diff changeset
    24
10605
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
    25
/**
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
    26
 * Carriage for the data we need if we want to build a bridge
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
    27
 */
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
    28
struct BuildBridgeData {
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
    29
	BridgeType index;
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
    30
	const BridgeSpec *spec;
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
    31
	Money cost;
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
    32
};
8516
e7ce655f85ef (svn r11580) -Feature: Memorise the resizing of the build bridge selection window during runtime
skidd13
parents: 8479
diff changeset
    33
10605
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
    34
typedef GUIList<BuildBridgeData> GUIBridgeList;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    35
10605
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
    36
/**
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
    37
 * Callback executed after a build Bridge CMD has been called
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
    38
 *
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
    39
 * @param scucess True if the build succeded
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
    40
 * @param tile The tile where the command has been executed
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
    41
 * @param p1 not used
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
    42
 * @param p2 not used
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
    43
 */
1977
4392ae3d8e31 (svn r2483) Replace almost 500 "uint tile" (and variants) with "TileIndex tile"
tron
parents: 1891
diff changeset
    44
void CcBuildBridge(bool success, TileIndex tile, uint32 p1, uint32 p2)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    45
{
541
e1cd34389f79 (svn r925) Use sound enums
tron
parents: 534
diff changeset
    46
	if (success) SndPlayTileFx(SND_27_BLACKSMITH_ANVIL, tile);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    47
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    48
8516
e7ce655f85ef (svn r11580) -Feature: Memorise the resizing of the build bridge selection window during runtime
skidd13
parents: 8479
diff changeset
    49
/* Names of the build bridge selection window */
e7ce655f85ef (svn r11580) -Feature: Memorise the resizing of the build bridge selection window during runtime
skidd13
parents: 8479
diff changeset
    50
enum BuildBridgeSelectionWidgets {
e7ce655f85ef (svn r11580) -Feature: Memorise the resizing of the build bridge selection window during runtime
skidd13
parents: 8479
diff changeset
    51
	BBSW_CLOSEBOX = 0,
e7ce655f85ef (svn r11580) -Feature: Memorise the resizing of the build bridge selection window during runtime
skidd13
parents: 8479
diff changeset
    52
	BBSW_CAPTION,
10615
58fb0e062812 (svn r13159) -Feature: Add the ability to sort availible bridges in the build bridge GUI
skidd13
parents: 10607
diff changeset
    53
	BBSW_DROPDOWN_ORDER,
58fb0e062812 (svn r13159) -Feature: Add the ability to sort availible bridges in the build bridge GUI
skidd13
parents: 10607
diff changeset
    54
	BBSW_DROPDOWN_CRITERIA,
8516
e7ce655f85ef (svn r11580) -Feature: Memorise the resizing of the build bridge selection window during runtime
skidd13
parents: 8479
diff changeset
    55
	BBSW_BRIDGE_LIST,
e7ce655f85ef (svn r11580) -Feature: Memorise the resizing of the build bridge selection window during runtime
skidd13
parents: 8479
diff changeset
    56
	BBSW_SCROLLBAR,
e7ce655f85ef (svn r11580) -Feature: Memorise the resizing of the build bridge selection window during runtime
skidd13
parents: 8479
diff changeset
    57
	BBSW_RESIZEBOX
e7ce655f85ef (svn r11580) -Feature: Memorise the resizing of the build bridge selection window during runtime
skidd13
parents: 8479
diff changeset
    58
};
e7ce655f85ef (svn r11580) -Feature: Memorise the resizing of the build bridge selection window during runtime
skidd13
parents: 8479
diff changeset
    59
10605
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
    60
class BuildBridgeWindow : public Window {
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
    61
private:
10719
96129d85f5d8 (svn r13269) -Codechange: build bridge window uses GUILists Sort() now
skidd13
parents: 10716
diff changeset
    62
	/* Runtime saved values */
11036
5e6aacb99732 (svn r13592) -Fix: window size remembering was broken
skidd13
parents: 10979
diff changeset
    63
	static uint16 last_size;
10719
96129d85f5d8 (svn r13269) -Codechange: build bridge window uses GUILists Sort() now
skidd13
parents: 10716
diff changeset
    64
	static Listing last_sorting;
8516
e7ce655f85ef (svn r11580) -Feature: Memorise the resizing of the build bridge selection window during runtime
skidd13
parents: 8479
diff changeset
    65
10719
96129d85f5d8 (svn r13269) -Codechange: build bridge window uses GUILists Sort() now
skidd13
parents: 10716
diff changeset
    66
	/* Constants for sorting the bridges */
96129d85f5d8 (svn r13269) -Codechange: build bridge window uses GUILists Sort() now
skidd13
parents: 10716
diff changeset
    67
	static const StringID sorter_names[];
10723
7f3386562e59 (svn r13273) -Fix [FS#2042]: MSVC warnings (again)
glx
parents: 10719
diff changeset
    68
	static GUIBridgeList::SortFunction *const sorter_funcs[];
10719
96129d85f5d8 (svn r13269) -Codechange: build bridge window uses GUILists Sort() now
skidd13
parents: 10716
diff changeset
    69
96129d85f5d8 (svn r13269) -Codechange: build bridge window uses GUILists Sort() now
skidd13
parents: 10716
diff changeset
    70
	/* Internal variables */
10605
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
    71
	TileIndex start_tile;
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
    72
	TileIndex end_tile;
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
    73
	uint32 type;
10615
58fb0e062812 (svn r13159) -Feature: Add the ability to sort availible bridges in the build bridge GUI
skidd13
parents: 10607
diff changeset
    74
	GUIBridgeList *bridges;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    75
10719
96129d85f5d8 (svn r13269) -Codechange: build bridge window uses GUILists Sort() now
skidd13
parents: 10716
diff changeset
    76
	/** Sort the bridges by their index */
10730
40906a6f031e (svn r13280) -Fix (r13276): MSVC compilation was broken
smatz
parents: 10723
diff changeset
    77
	static int CDECL BridgeIndexSorter(const BuildBridgeData *a, const BuildBridgeData *b)
10719
96129d85f5d8 (svn r13269) -Codechange: build bridge window uses GUILists Sort() now
skidd13
parents: 10716
diff changeset
    78
	{
96129d85f5d8 (svn r13269) -Codechange: build bridge window uses GUILists Sort() now
skidd13
parents: 10716
diff changeset
    79
		return a->index - b->index;
96129d85f5d8 (svn r13269) -Codechange: build bridge window uses GUILists Sort() now
skidd13
parents: 10716
diff changeset
    80
	}
96129d85f5d8 (svn r13269) -Codechange: build bridge window uses GUILists Sort() now
skidd13
parents: 10716
diff changeset
    81
96129d85f5d8 (svn r13269) -Codechange: build bridge window uses GUILists Sort() now
skidd13
parents: 10716
diff changeset
    82
	/** Sort the bridges by their price */
10730
40906a6f031e (svn r13280) -Fix (r13276): MSVC compilation was broken
smatz
parents: 10723
diff changeset
    83
	static int CDECL BridgePriceSorter(const BuildBridgeData *a, const BuildBridgeData *b)
10719
96129d85f5d8 (svn r13269) -Codechange: build bridge window uses GUILists Sort() now
skidd13
parents: 10716
diff changeset
    84
	{
96129d85f5d8 (svn r13269) -Codechange: build bridge window uses GUILists Sort() now
skidd13
parents: 10716
diff changeset
    85
		return a->cost - b->cost;
96129d85f5d8 (svn r13269) -Codechange: build bridge window uses GUILists Sort() now
skidd13
parents: 10716
diff changeset
    86
	}
96129d85f5d8 (svn r13269) -Codechange: build bridge window uses GUILists Sort() now
skidd13
parents: 10716
diff changeset
    87
96129d85f5d8 (svn r13269) -Codechange: build bridge window uses GUILists Sort() now
skidd13
parents: 10716
diff changeset
    88
	/** Sort the bridges by their maximum speed */
10730
40906a6f031e (svn r13280) -Fix (r13276): MSVC compilation was broken
smatz
parents: 10723
diff changeset
    89
	static int CDECL BridgeSpeedSorter(const BuildBridgeData *a, const BuildBridgeData *b)
10719
96129d85f5d8 (svn r13269) -Codechange: build bridge window uses GUILists Sort() now
skidd13
parents: 10716
diff changeset
    90
	{
96129d85f5d8 (svn r13269) -Codechange: build bridge window uses GUILists Sort() now
skidd13
parents: 10716
diff changeset
    91
		return a->spec->speed - b->spec->speed;
96129d85f5d8 (svn r13269) -Codechange: build bridge window uses GUILists Sort() now
skidd13
parents: 10716
diff changeset
    92
	}
96129d85f5d8 (svn r13269) -Codechange: build bridge window uses GUILists Sort() now
skidd13
parents: 10716
diff changeset
    93
10605
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
    94
	void BuildBridge(uint8 i)
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
    95
	{
10716
2406d1520245 (svn r13266) -Codechange: Use SmallVector in GUIList
peter1138
parents: 10658
diff changeset
    96
		DoCommandP(this->end_tile, this->start_tile, this->type | this->bridges->Get(i)->index,
10605
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
    97
				CcBuildBridge, CMD_BUILD_BRIDGE | CMD_MSG(STR_5015_CAN_T_BUILD_BRIDGE_HERE));
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
    98
	}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    99
10615
58fb0e062812 (svn r13159) -Feature: Add the ability to sort availible bridges in the build bridge GUI
skidd13
parents: 10607
diff changeset
   100
	/** Sort the builable bridges */
58fb0e062812 (svn r13159) -Feature: Add the ability to sort availible bridges in the build bridge GUI
skidd13
parents: 10607
diff changeset
   101
	void SortBridgeList()
58fb0e062812 (svn r13159) -Feature: Add the ability to sort availible bridges in the build bridge GUI
skidd13
parents: 10607
diff changeset
   102
	{
10719
96129d85f5d8 (svn r13269) -Codechange: build bridge window uses GUILists Sort() now
skidd13
parents: 10716
diff changeset
   103
		this->bridges->Sort();
10615
58fb0e062812 (svn r13159) -Feature: Add the ability to sort availible bridges in the build bridge GUI
skidd13
parents: 10607
diff changeset
   104
58fb0e062812 (svn r13159) -Feature: Add the ability to sort availible bridges in the build bridge GUI
skidd13
parents: 10607
diff changeset
   105
		/* Display the current sort variant */
10719
96129d85f5d8 (svn r13269) -Codechange: build bridge window uses GUILists Sort() now
skidd13
parents: 10716
diff changeset
   106
		this->widget[BBSW_DROPDOWN_CRITERIA].data = this->sorter_names[this->bridges->SortType()];
10615
58fb0e062812 (svn r13159) -Feature: Add the ability to sort availible bridges in the build bridge GUI
skidd13
parents: 10607
diff changeset
   107
58fb0e062812 (svn r13159) -Feature: Add the ability to sort availible bridges in the build bridge GUI
skidd13
parents: 10607
diff changeset
   108
		/* Set the modified widgets dirty */
58fb0e062812 (svn r13159) -Feature: Add the ability to sort availible bridges in the build bridge GUI
skidd13
parents: 10607
diff changeset
   109
		this->InvalidateWidget(BBSW_DROPDOWN_CRITERIA);
58fb0e062812 (svn r13159) -Feature: Add the ability to sort availible bridges in the build bridge GUI
skidd13
parents: 10607
diff changeset
   110
		this->InvalidateWidget(BBSW_BRIDGE_LIST);
58fb0e062812 (svn r13159) -Feature: Add the ability to sort availible bridges in the build bridge GUI
skidd13
parents: 10607
diff changeset
   111
	}
58fb0e062812 (svn r13159) -Feature: Add the ability to sort availible bridges in the build bridge GUI
skidd13
parents: 10607
diff changeset
   112
10605
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   113
public:
10615
58fb0e062812 (svn r13159) -Feature: Add the ability to sort availible bridges in the build bridge GUI
skidd13
parents: 10607
diff changeset
   114
	BuildBridgeWindow(const WindowDesc *desc, TileIndex start, TileIndex end, uint32 br_type, GUIBridgeList *bl) : Window(desc),
10605
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   115
		start_tile(start),
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   116
		end_tile(end),
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   117
		type(br_type),
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   118
		bridges(bl)
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   119
	{
10719
96129d85f5d8 (svn r13269) -Codechange: build bridge window uses GUILists Sort() now
skidd13
parents: 10716
diff changeset
   120
		this->bridges->SetListing(this->last_sorting);
96129d85f5d8 (svn r13269) -Codechange: build bridge window uses GUILists Sort() now
skidd13
parents: 10716
diff changeset
   121
		this->bridges->SetSortFuncs(this->sorter_funcs);
10868
9fa1519ca3f7 (svn r13419) -Fix [FS#2063]: Entries in the bridge list were not sorted when the window was just opened.
rubidium
parents: 10730
diff changeset
   122
		this->bridges->NeedResort();
10615
58fb0e062812 (svn r13159) -Feature: Add the ability to sort availible bridges in the build bridge GUI
skidd13
parents: 10607
diff changeset
   123
		this->SortBridgeList();
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   124
10605
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   125
		/* Change the data, or the caption of the gui. Set it to road or rail, accordingly */
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   126
		this->widget[BBSW_CAPTION].data = (GB(this->type, 15, 2) == TRANSPORT_ROAD) ? STR_1803_SELECT_ROAD_BRIDGE : STR_100D_SELECT_RAIL_BRIDGE;
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   127
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   128
		this->resize.step_height = 22;
10716
2406d1520245 (svn r13266) -Codechange: Use SmallVector in GUIList
peter1138
parents: 10658
diff changeset
   129
		this->vscroll.count = bl->Length();
10605
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   130
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   131
		if (this->last_size <= 4) {
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   132
			this->vscroll.cap = 4;
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   133
		} else {
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   134
			/* Resize the bridge selection window if we used a bigger one the last time */
11036
5e6aacb99732 (svn r13592) -Fix: window size remembering was broken
skidd13
parents: 10979
diff changeset
   135
			this->vscroll.cap = min(this->last_size, this->vscroll.count);
10605
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   136
			ResizeWindow(this, 0, (this->vscroll.cap - 4) * this->resize.step_height);
8479
a1ab2afafb84 (svn r11539) -Feature: Make the bridge selection window resizable
skidd13
parents: 8320
diff changeset
   137
		}
6530
c43fa965e8ae (svn r8990) -Fix: more indenting and variable scoping
peter1138
parents: 6443
diff changeset
   138
10605
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   139
		this->FindWindowPlacementAndResize(desc);
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   140
	}
6530
c43fa965e8ae (svn r8990) -Fix: more indenting and variable scoping
peter1138
parents: 6443
diff changeset
   141
10605
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   142
	~BuildBridgeWindow()
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   143
	{
10719
96129d85f5d8 (svn r13269) -Codechange: build bridge window uses GUILists Sort() now
skidd13
parents: 10716
diff changeset
   144
		this->last_sorting = this->bridges->GetListing();
96129d85f5d8 (svn r13269) -Codechange: build bridge window uses GUILists Sort() now
skidd13
parents: 10716
diff changeset
   145
10605
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   146
		delete bridges;
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   147
	}
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   148
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   149
	virtual void OnPaint()
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   150
	{
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   151
		this->DrawWidgets();
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   152
10979
13c4100d8757 (svn r13533) -Codechange: Replace direct class member access of GUIList with the appropriate function calls
skidd13
parents: 10868
diff changeset
   153
		this->DrawSortButtonState(BBSW_DROPDOWN_ORDER, this->bridges->IsDescSortOrder() ? SBS_DOWN : SBS_UP);
10605
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   154
10615
58fb0e062812 (svn r13159) -Feature: Add the ability to sort availible bridges in the build bridge GUI
skidd13
parents: 10607
diff changeset
   155
		uint y = this->widget[BBSW_BRIDGE_LIST].top + 2;
58fb0e062812 (svn r13159) -Feature: Add the ability to sort availible bridges in the build bridge GUI
skidd13
parents: 10607
diff changeset
   156
10716
2406d1520245 (svn r13266) -Codechange: Use SmallVector in GUIList
peter1138
parents: 10658
diff changeset
   157
		for (int i = this->vscroll.pos; (i < (this->vscroll.cap + this->vscroll.pos)) && (i < (int)this->bridges->Length()); i++) {
2406d1520245 (svn r13266) -Codechange: Use SmallVector in GUIList
peter1138
parents: 10658
diff changeset
   158
			const BridgeSpec *b = this->bridges->Get(i)->spec;
10615
58fb0e062812 (svn r13159) -Feature: Add the ability to sort availible bridges in the build bridge GUI
skidd13
parents: 10607
diff changeset
   159
10716
2406d1520245 (svn r13266) -Codechange: Use SmallVector in GUIList
peter1138
parents: 10658
diff changeset
   160
			SetDParam(2, this->bridges->Get(i)->cost);
10605
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   161
			SetDParam(1, b->speed * 10 / 16);
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   162
			SetDParam(0, b->material);
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   163
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   164
			DrawSprite(b->sprite, b->pal, 3, y);
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   165
			DrawString(44, y, STR_500D, TC_FROMSTRING);
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   166
			y += this->resize.step_height;
10615
58fb0e062812 (svn r13159) -Feature: Add the ability to sort availible bridges in the build bridge GUI
skidd13
parents: 10607
diff changeset
   167
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   168
		}
10605
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   169
	}
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 176
diff changeset
   170
10607
1ab30cead125 (svn r13151) -Codechange: use an enum instead of bool as return type of OnKeyPress/OnCTRLStateChange to make it obvious what the return values mean.
rubidium
parents: 10605
diff changeset
   171
	virtual EventState OnKeyPress(uint16 key, uint16 keycode)
10605
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   172
	{
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   173
		const uint8 i = keycode - '1';
10716
2406d1520245 (svn r13266) -Codechange: Use SmallVector in GUIList
peter1138
parents: 10658
diff changeset
   174
		if (i < 9 && i < this->bridges->Length()) {
10605
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   175
			/* Build the requested bridge */
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   176
			this->BuildBridge(i);
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   177
			delete this;
10607
1ab30cead125 (svn r13151) -Codechange: use an enum instead of bool as return type of OnKeyPress/OnCTRLStateChange to make it obvious what the return values mean.
rubidium
parents: 10605
diff changeset
   178
			return ES_HANDLED;
10605
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   179
		}
10607
1ab30cead125 (svn r13151) -Codechange: use an enum instead of bool as return type of OnKeyPress/OnCTRLStateChange to make it obvious what the return values mean.
rubidium
parents: 10605
diff changeset
   180
		return ES_NOT_HANDLED;
10605
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   181
	}
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   182
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   183
	virtual void OnClick(Point pt, int widget)
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   184
	{
10615
58fb0e062812 (svn r13159) -Feature: Add the ability to sort availible bridges in the build bridge GUI
skidd13
parents: 10607
diff changeset
   185
		switch (widget) {
58fb0e062812 (svn r13159) -Feature: Add the ability to sort availible bridges in the build bridge GUI
skidd13
parents: 10607
diff changeset
   186
			default: break;
58fb0e062812 (svn r13159) -Feature: Add the ability to sort availible bridges in the build bridge GUI
skidd13
parents: 10607
diff changeset
   187
			case BBSW_BRIDGE_LIST: {
58fb0e062812 (svn r13159) -Feature: Add the ability to sort availible bridges in the build bridge GUI
skidd13
parents: 10607
diff changeset
   188
				uint i = ((int)pt.y - this->widget[BBSW_BRIDGE_LIST].top) / this->resize.step_height;
58fb0e062812 (svn r13159) -Feature: Add the ability to sort availible bridges in the build bridge GUI
skidd13
parents: 10607
diff changeset
   189
				if (i < this->vscroll.cap) {
58fb0e062812 (svn r13159) -Feature: Add the ability to sort availible bridges in the build bridge GUI
skidd13
parents: 10607
diff changeset
   190
					i += this->vscroll.pos;
10716
2406d1520245 (svn r13266) -Codechange: Use SmallVector in GUIList
peter1138
parents: 10658
diff changeset
   191
					if (i < this->bridges->Length()) {
10615
58fb0e062812 (svn r13159) -Feature: Add the ability to sort availible bridges in the build bridge GUI
skidd13
parents: 10607
diff changeset
   192
						this->BuildBridge(i);
58fb0e062812 (svn r13159) -Feature: Add the ability to sort availible bridges in the build bridge GUI
skidd13
parents: 10607
diff changeset
   193
						delete this;
58fb0e062812 (svn r13159) -Feature: Add the ability to sort availible bridges in the build bridge GUI
skidd13
parents: 10607
diff changeset
   194
					}
8479
a1ab2afafb84 (svn r11539) -Feature: Make the bridge selection window resizable
skidd13
parents: 8320
diff changeset
   195
				}
10615
58fb0e062812 (svn r13159) -Feature: Add the ability to sort availible bridges in the build bridge GUI
skidd13
parents: 10607
diff changeset
   196
			} break;
58fb0e062812 (svn r13159) -Feature: Add the ability to sort availible bridges in the build bridge GUI
skidd13
parents: 10607
diff changeset
   197
58fb0e062812 (svn r13159) -Feature: Add the ability to sort availible bridges in the build bridge GUI
skidd13
parents: 10607
diff changeset
   198
			case BBSW_DROPDOWN_ORDER:
10719
96129d85f5d8 (svn r13269) -Codechange: build bridge window uses GUILists Sort() now
skidd13
parents: 10716
diff changeset
   199
				this->bridges->ToggleSortOrder();
96129d85f5d8 (svn r13269) -Codechange: build bridge window uses GUILists Sort() now
skidd13
parents: 10716
diff changeset
   200
				this->SetDirty();
10615
58fb0e062812 (svn r13159) -Feature: Add the ability to sort availible bridges in the build bridge GUI
skidd13
parents: 10607
diff changeset
   201
				break;
58fb0e062812 (svn r13159) -Feature: Add the ability to sort availible bridges in the build bridge GUI
skidd13
parents: 10607
diff changeset
   202
58fb0e062812 (svn r13159) -Feature: Add the ability to sort availible bridges in the build bridge GUI
skidd13
parents: 10607
diff changeset
   203
			case BBSW_DROPDOWN_CRITERIA:
10719
96129d85f5d8 (svn r13269) -Codechange: build bridge window uses GUILists Sort() now
skidd13
parents: 10716
diff changeset
   204
				ShowDropDownMenu(this, this->sorter_names, this->bridges->SortType(), BBSW_DROPDOWN_CRITERIA, 0, 0);
10615
58fb0e062812 (svn r13159) -Feature: Add the ability to sort availible bridges in the build bridge GUI
skidd13
parents: 10607
diff changeset
   205
				break;
58fb0e062812 (svn r13159) -Feature: Add the ability to sort availible bridges in the build bridge GUI
skidd13
parents: 10607
diff changeset
   206
		}
58fb0e062812 (svn r13159) -Feature: Add the ability to sort availible bridges in the build bridge GUI
skidd13
parents: 10607
diff changeset
   207
	}
58fb0e062812 (svn r13159) -Feature: Add the ability to sort availible bridges in the build bridge GUI
skidd13
parents: 10607
diff changeset
   208
58fb0e062812 (svn r13159) -Feature: Add the ability to sort availible bridges in the build bridge GUI
skidd13
parents: 10607
diff changeset
   209
	virtual void OnDropdownSelect(int widget, int index)
58fb0e062812 (svn r13159) -Feature: Add the ability to sort availible bridges in the build bridge GUI
skidd13
parents: 10607
diff changeset
   210
	{
10719
96129d85f5d8 (svn r13269) -Codechange: build bridge window uses GUILists Sort() now
skidd13
parents: 10716
diff changeset
   211
		if (widget == BBSW_DROPDOWN_CRITERIA && this->bridges->SortType() != index) {
96129d85f5d8 (svn r13269) -Codechange: build bridge window uses GUILists Sort() now
skidd13
parents: 10716
diff changeset
   212
			this->bridges->SetSortType(index);
10615
58fb0e062812 (svn r13159) -Feature: Add the ability to sort availible bridges in the build bridge GUI
skidd13
parents: 10607
diff changeset
   213
58fb0e062812 (svn r13159) -Feature: Add the ability to sort availible bridges in the build bridge GUI
skidd13
parents: 10607
diff changeset
   214
			this->SortBridgeList();
10605
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   215
		}
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   216
	}
8479
a1ab2afafb84 (svn r11539) -Feature: Make the bridge selection window resizable
skidd13
parents: 8320
diff changeset
   217
10605
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   218
	virtual void OnResize(Point new_size, Point delta)
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   219
	{
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   220
		this->vscroll.cap += delta.y / (int)this->resize.step_height;
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   221
		this->widget[BBSW_BRIDGE_LIST].data = (this->vscroll.cap << 8) + 1;
10716
2406d1520245 (svn r13266) -Codechange: Use SmallVector in GUIList
peter1138
parents: 10658
diff changeset
   222
		SetVScrollCount(this, this->bridges->Length());
8516
e7ce655f85ef (svn r11580) -Feature: Memorise the resizing of the build bridge selection window during runtime
skidd13
parents: 8479
diff changeset
   223
11036
5e6aacb99732 (svn r13592) -Fix: window size remembering was broken
skidd13
parents: 10979
diff changeset
   224
		this->last_size = max(this->vscroll.cap, this->last_size);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   225
	}
10605
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   226
};
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   227
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   228
/* Set the default size of the Build Bridge Window */
11036
5e6aacb99732 (svn r13592) -Fix: window size remembering was broken
skidd13
parents: 10979
diff changeset
   229
uint16 BuildBridgeWindow::last_size = 4;
10719
96129d85f5d8 (svn r13269) -Codechange: build bridge window uses GUILists Sort() now
skidd13
parents: 10716
diff changeset
   230
/* Set the default sorting for the bridges */
96129d85f5d8 (svn r13269) -Codechange: build bridge window uses GUILists Sort() now
skidd13
parents: 10716
diff changeset
   231
Listing BuildBridgeWindow::last_sorting = {false, 0};
96129d85f5d8 (svn r13269) -Codechange: build bridge window uses GUILists Sort() now
skidd13
parents: 10716
diff changeset
   232
96129d85f5d8 (svn r13269) -Codechange: build bridge window uses GUILists Sort() now
skidd13
parents: 10716
diff changeset
   233
/* Availible bridge sorting functions */
96129d85f5d8 (svn r13269) -Codechange: build bridge window uses GUILists Sort() now
skidd13
parents: 10716
diff changeset
   234
GUIBridgeList::SortFunction* const BuildBridgeWindow::sorter_funcs[] = {
96129d85f5d8 (svn r13269) -Codechange: build bridge window uses GUILists Sort() now
skidd13
parents: 10716
diff changeset
   235
	&BridgeIndexSorter,
96129d85f5d8 (svn r13269) -Codechange: build bridge window uses GUILists Sort() now
skidd13
parents: 10716
diff changeset
   236
	&BridgePriceSorter,
96129d85f5d8 (svn r13269) -Codechange: build bridge window uses GUILists Sort() now
skidd13
parents: 10716
diff changeset
   237
	&BridgeSpeedSorter
96129d85f5d8 (svn r13269) -Codechange: build bridge window uses GUILists Sort() now
skidd13
parents: 10716
diff changeset
   238
};
96129d85f5d8 (svn r13269) -Codechange: build bridge window uses GUILists Sort() now
skidd13
parents: 10716
diff changeset
   239
96129d85f5d8 (svn r13269) -Codechange: build bridge window uses GUILists Sort() now
skidd13
parents: 10716
diff changeset
   240
/* Names of the sorting functions */
96129d85f5d8 (svn r13269) -Codechange: build bridge window uses GUILists Sort() now
skidd13
parents: 10716
diff changeset
   241
const StringID BuildBridgeWindow::sorter_names[] = {
96129d85f5d8 (svn r13269) -Codechange: build bridge window uses GUILists Sort() now
skidd13
parents: 10716
diff changeset
   242
	STR_SORT_BY_NUMBER,
96129d85f5d8 (svn r13269) -Codechange: build bridge window uses GUILists Sort() now
skidd13
parents: 10716
diff changeset
   243
	STR_ENGINE_SORT_COST,
96129d85f5d8 (svn r13269) -Codechange: build bridge window uses GUILists Sort() now
skidd13
parents: 10716
diff changeset
   244
	STR_SORT_BY_MAX_SPEED,
96129d85f5d8 (svn r13269) -Codechange: build bridge window uses GUILists Sort() now
skidd13
parents: 10716
diff changeset
   245
	INVALID_STRING_ID
96129d85f5d8 (svn r13269) -Codechange: build bridge window uses GUILists Sort() now
skidd13
parents: 10716
diff changeset
   246
};
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   247
8516
e7ce655f85ef (svn r11580) -Feature: Memorise the resizing of the build bridge selection window during runtime
skidd13
parents: 8479
diff changeset
   248
/* Widget definition for the rail bridge selection window */
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   249
static const Widget _build_bridge_widgets[] = {
8516
e7ce655f85ef (svn r11580) -Feature: Memorise the resizing of the build bridge selection window during runtime
skidd13
parents: 8479
diff changeset
   250
{   WWT_CLOSEBOX,   RESIZE_NONE,  7,   0,  10,   0,  13, STR_00C5,                    STR_018B_CLOSE_WINDOW},            // BBSW_CLOSEBOX
e7ce655f85ef (svn r11580) -Feature: Memorise the resizing of the build bridge selection window during runtime
skidd13
parents: 8479
diff changeset
   251
{    WWT_CAPTION,   RESIZE_NONE,  7,  11, 199,   0,  13, STR_100D_SELECT_RAIL_BRIDGE, STR_018C_WINDOW_TITLE_DRAG_THIS},  // BBSW_CAPTION
10615
58fb0e062812 (svn r13159) -Feature: Add the ability to sort availible bridges in the build bridge GUI
skidd13
parents: 10607
diff changeset
   252
58fb0e062812 (svn r13159) -Feature: Add the ability to sort availible bridges in the build bridge GUI
skidd13
parents: 10607
diff changeset
   253
{    WWT_TEXTBTN,   RESIZE_NONE,  7,   0,  80,  14,  25, STR_SORT_BY,                 STR_SORT_ORDER_TIP},               // BBSW_DROPDOWN_ORDER
58fb0e062812 (svn r13159) -Feature: Add the ability to sort availible bridges in the build bridge GUI
skidd13
parents: 10607
diff changeset
   254
{   WWT_DROPDOWN,   RESIZE_NONE,  7,  81, 199,  14,  25, 0x0,                         STR_SORT_CRITERIA_TIP},            // BBSW_DROPDOWN_CRITERIA
58fb0e062812 (svn r13159) -Feature: Add the ability to sort availible bridges in the build bridge GUI
skidd13
parents: 10607
diff changeset
   255
58fb0e062812 (svn r13159) -Feature: Add the ability to sort availible bridges in the build bridge GUI
skidd13
parents: 10607
diff changeset
   256
{     WWT_MATRIX, RESIZE_BOTTOM,  7,   0, 187,  26, 113, 0x401,                       STR_101F_BRIDGE_SELECTION_CLICK},  // BBSW_BRIDGE_LIST
58fb0e062812 (svn r13159) -Feature: Add the ability to sort availible bridges in the build bridge GUI
skidd13
parents: 10607
diff changeset
   257
{  WWT_SCROLLBAR, RESIZE_BOTTOM,  7, 188, 199,  26, 101, 0x0,                         STR_0190_SCROLL_BAR_SCROLLS_LIST}, // BBSW_SCROLLBAR
58fb0e062812 (svn r13159) -Feature: Add the ability to sort availible bridges in the build bridge GUI
skidd13
parents: 10607
diff changeset
   258
{  WWT_RESIZEBOX,     RESIZE_TB,  7, 188, 199, 102, 113, 0x0,                         STR_RESIZE_BUTTON},                // BBSW_RESIZEBOX
176
84990c4b9212 (svn r177) -Fix: padded out Widget code to solve warnings on C99 compiler (Tron)
darkvater
parents: 0
diff changeset
   259
{   WIDGETS_END},
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   260
};
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   261
8516
e7ce655f85ef (svn r11580) -Feature: Memorise the resizing of the build bridge selection window during runtime
skidd13
parents: 8479
diff changeset
   262
/* Window definition for the rail bridge selection window */
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   263
static const WindowDesc _build_bridge_desc = {
10615
58fb0e062812 (svn r13159) -Feature: Add the ability to sort availible bridges in the build bridge GUI
skidd13
parents: 10607
diff changeset
   264
	WDP_AUTO, WDP_AUTO, 200, 114, 200, 114,
5070
0bbf5264bfb7 (svn r7128) -Codechange: Replace magic numbers by magic enums (windowdesc positioning WDP_AUTO = -1)
Darkvater
parents: 4634
diff changeset
   265
	WC_BUILD_BRIDGE, WC_BUILD_TOOLBAR,
8479
a1ab2afafb84 (svn r11539) -Feature: Make the bridge selection window resizable
skidd13
parents: 8320
diff changeset
   266
	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_RESIZABLE,
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   267
	_build_bridge_widgets,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   268
};
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   269
10605
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   270
/**
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   271
 * Prepare the data for the build a bridge window.
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   272
 *  If we can't build a bridge under the given conditions
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   273
 *  show an error message.
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   274
 *
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   275
 * @parma start The start tile of the bridge
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   276
 * @param end The end tile of the bridge
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   277
 * @param transport_type The transport type
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   278
 * @param bridge_type The bridge type
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   279
 */
9053
13c47e8836eb (svn r12135) -Codechange: Road and rail bridge selection windows were identical apart the caption. So remove one window definition and set manually the caption accordingly.
belugas
parents: 9031
diff changeset
   280
void ShowBuildBridgeWindow(TileIndex start, TileIndex end, TransportType transport_type, byte bridge_type)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   281
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   282
	DeleteWindowById(WC_BUILD_BRIDGE, 0);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   283
10605
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   284
	/* Data type for the bridge.
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   285
	 * Bit 16,15 = transport type,
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   286
	 *     14..8 = road/rail pieces,
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   287
	 *      7..0 = type of bridge */
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   288
	uint32 type = (transport_type << 15) | (bridge_type << 8);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   289
8479
a1ab2afafb84 (svn r11539) -Feature: Make the bridge selection window resizable
skidd13
parents: 8320
diff changeset
   290
	/* only query bridge building possibility once, result is the same for all bridges!
a1ab2afafb84 (svn r11539) -Feature: Make the bridge selection window resizable
skidd13
parents: 8320
diff changeset
   291
	 * returns CMD_ERROR on failure, and price on success */
a1ab2afafb84 (svn r11539) -Feature: Make the bridge selection window resizable
skidd13
parents: 8320
diff changeset
   292
	StringID errmsg = INVALID_STRING_ID;
10605
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   293
	CommandCost ret = DoCommand(end, start, type, DC_AUTO | DC_QUERY_COST, CMD_BUILD_BRIDGE);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   294
10605
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   295
	GUIBridgeList *bl = NULL;
2737
f16e0a808897 (svn r3282) - Codechange: Replace tests against CMD_ERROR with CmdFailed()
peter1138
parents: 2639
diff changeset
   296
	if (CmdFailed(ret)) {
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   297
		errmsg = _error_message;
2548
97ada3bd2702 (svn r3077) static, const, bracing, indentation, 0 -> '\0'/NULL, typos in comments, excess empty lines, minor other changes
tron
parents: 2470
diff changeset
   298
	} else {
8479
a1ab2afafb84 (svn r11539) -Feature: Make the bridge selection window resizable
skidd13
parents: 8320
diff changeset
   299
		/* check which bridges can be built
a1ab2afafb84 (svn r11539) -Feature: Make the bridge selection window resizable
skidd13
parents: 8320
diff changeset
   300
		 * get absolute bridge length
a1ab2afafb84 (svn r11539) -Feature: Make the bridge selection window resizable
skidd13
parents: 8320
diff changeset
   301
		 * length of the middle parts of the bridge */
8894
1e5b2d4380b8 (svn r11968) -Codechange: remove redundant FindLengthOfTunnel(), use GetTunnelBridgeLength() and/or GetOtherTunnelEnd() instead
smatz
parents: 8760
diff changeset
   302
		const uint bridge_len = GetTunnelBridgeLength(start, end);
8479
a1ab2afafb84 (svn r11539) -Feature: Make the bridge selection window resizable
skidd13
parents: 8320
diff changeset
   303
		/* total length of bridge */
a1ab2afafb84 (svn r11539) -Feature: Make the bridge selection window resizable
skidd13
parents: 8320
diff changeset
   304
		const uint tot_bridgedata_len = CalcBridgeLenCostFactor(bridge_len + 2);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   305
10716
2406d1520245 (svn r13266) -Codechange: Use SmallVector in GUIList
peter1138
parents: 10658
diff changeset
   306
		bl = new GUIBridgeList();
2406d1520245 (svn r13266) -Codechange: Use SmallVector in GUIList
peter1138
parents: 10658
diff changeset
   307
8479
a1ab2afafb84 (svn r11539) -Feature: Make the bridge selection window resizable
skidd13
parents: 8320
diff changeset
   308
		/* loop for all bridgetypes */
9028
501b3b351df7 (svn r12107) -Codechange: Add and use the typedef BridgeType
belugas
parents: 8987
diff changeset
   309
		for (BridgeType brd_type = 0; brd_type != MAX_BRIDGES; brd_type++) {
501b3b351df7 (svn r12107) -Codechange: Add and use the typedef BridgeType
belugas
parents: 8987
diff changeset
   310
			if (CheckBridge_Stuff(brd_type, bridge_len)) {
8479
a1ab2afafb84 (svn r11539) -Feature: Make the bridge selection window resizable
skidd13
parents: 8320
diff changeset
   311
				/* bridge is accepted, add to list */
10716
2406d1520245 (svn r13266) -Codechange: Use SmallVector in GUIList
peter1138
parents: 10658
diff changeset
   312
				BuildBridgeData *item = bl->Append();
2406d1520245 (svn r13266) -Codechange: Use SmallVector in GUIList
peter1138
parents: 10658
diff changeset
   313
				item->index = brd_type;
2406d1520245 (svn r13266) -Codechange: Use SmallVector in GUIList
peter1138
parents: 10658
diff changeset
   314
				item->spec = GetBridgeSpec(brd_type);
8479
a1ab2afafb84 (svn r11539) -Feature: Make the bridge selection window resizable
skidd13
parents: 8320
diff changeset
   315
				/* Add to terraforming & bulldozing costs the cost of the
a1ab2afafb84 (svn r11539) -Feature: Make the bridge selection window resizable
skidd13
parents: 8320
diff changeset
   316
				 * bridge itself (not computed with DC_QUERY_COST) */
10716
2406d1520245 (svn r13266) -Codechange: Use SmallVector in GUIList
peter1138
parents: 10658
diff changeset
   317
				item->cost = ret.GetCost() + (((int64)tot_bridgedata_len * _price.build_bridge * item->spec->price) >> 8);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   318
			}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   319
		}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   320
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   321
10716
2406d1520245 (svn r13266) -Codechange: Use SmallVector in GUIList
peter1138
parents: 10658
diff changeset
   322
	if (bl != NULL && bl->Length() != 0) {
10605
87e6826b9901 (svn r13149) -Codechange: make a class of the BuildBridgeWindow.
skidd13
parents: 10595
diff changeset
   323
		new BuildBridgeWindow(&_build_bridge_desc, start, end, type, bl);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   324
	} else {
10716
2406d1520245 (svn r13266) -Codechange: Use SmallVector in GUIList
peter1138
parents: 10658
diff changeset
   325
		if (bl != NULL) delete bl;
3422
12cdb13ddb56 (svn r4249) -Codechange: Replace more occurences of 16 by TILE_SIZE and of 8 by TILE_HEIGHT. Reverted one change from the previous commit because it was faulty
celestar
parents: 2952
diff changeset
   326
		ShowErrorMessage(errmsg, STR_5015_CAN_T_BUILD_BRIDGE_HERE, TileX(end) * TILE_SIZE, TileY(end) * TILE_SIZE);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   327
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   328
}