author | rubidium |
Wed, 09 Jul 2008 13:32:13 +0000 | |
branch | noai |
changeset 11126 | 72d4c9314c72 |
parent 11044 | 097ea3e7ec56 |
permissions | -rw-r--r-- |
2186 | 1 |
/* $Id$ */ |
2 |
||
10455
22c441f5adf9
(svn r12997) [NoAI] -Sync: with trunk r12895:12996.
rubidium
parents:
10294
diff
changeset
|
3 |
/** @file town_gui.cpp GUI for towns. */ |
9574 | 4 |
|
0 | 5 |
#include "stdafx.h" |
1891
92a3b0aa0946
(svn r2397) - CodeChange: rename all "ttd" files to "openttd" files.
Darkvater
parents:
1820
diff
changeset
|
6 |
#include "openttd.h" |
1299
0a6510cc889b
(svn r1803) Move debugging stuff into files of it's own
tron
parents:
1260
diff
changeset
|
7 |
#include "debug.h" |
0 | 8 |
#include "town.h" |
9723
eee46cb39750
(svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
9722
diff
changeset
|
9 |
#include "viewport_func.h" |
eee46cb39750
(svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
9722
diff
changeset
|
10 |
#include "gfx_func.h" |
0 | 11 |
#include "gui.h" |
9723
eee46cb39750
(svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
9722
diff
changeset
|
12 |
#include "window_gui.h" |
eee46cb39750
(svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
9722
diff
changeset
|
13 |
#include "textbuf_gui.h" |
eee46cb39750
(svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
9722
diff
changeset
|
14 |
#include "command_func.h" |
9724
b39bc69bb2f2
(svn r12051) [NoAI] -Sync: with trunk (r11795:12050).
rubidium
parents:
9723
diff
changeset
|
15 |
#include "player_func.h" |
b39bc69bb2f2
(svn r12051) [NoAI] -Sync: with trunk (r11795:12050).
rubidium
parents:
9723
diff
changeset
|
16 |
#include "player_base.h" |
b39bc69bb2f2
(svn r12051) [NoAI] -Sync: with trunk (r11795:12050).
rubidium
parents:
9723
diff
changeset
|
17 |
#include "player_gui.h" |
5720
cc0ceeafaa55
(svn r7751) -Codechange: move network_* to a new network map. Furthermore move the low level network functions to network/core, so they can be reused by the masterserver and website-serverlist-updater.
rubidium
parents:
5682
diff
changeset
|
18 |
#include "network/network.h" |
2159
3b634157c3b2
(svn r2669) Shuffle some more stuff around to reduce dependencies
tron
parents:
2070
diff
changeset
|
19 |
#include "variables.h" |
9723
eee46cb39750
(svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
9722
diff
changeset
|
20 |
#include "strings_func.h" |
9826
9707ad4c9b60
(svn r12462) [NoAI] -Sync: with trunk r12304:12461.
rubidium
parents:
9732
diff
changeset
|
21 |
#include "sound_func.h" |
9723
eee46cb39750
(svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
9722
diff
changeset
|
22 |
#include "economy_func.h" |
eee46cb39750
(svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
9722
diff
changeset
|
23 |
#include "core/alloc_func.hpp" |
9724
b39bc69bb2f2
(svn r12051) [NoAI] -Sync: with trunk (r11795:12050).
rubidium
parents:
9723
diff
changeset
|
24 |
#include "settings_type.h" |
10455
22c441f5adf9
(svn r12997) [NoAI] -Sync: with trunk r12895:12996.
rubidium
parents:
10294
diff
changeset
|
25 |
#include "tilehighlight_func.h" |
10513
33cb70ff2f5d
(svn r13056) [NoAI] -Sync: with trunk r12996:13055.
rubidium
parents:
10455
diff
changeset
|
26 |
#include "string_func.h" |
10776 | 27 |
#include "sortlist_type.h" |
9724
b39bc69bb2f2
(svn r12051) [NoAI] -Sync: with trunk (r11795:12050).
rubidium
parents:
9723
diff
changeset
|
28 |
|
b39bc69bb2f2
(svn r12051) [NoAI] -Sync: with trunk (r11795:12050).
rubidium
parents:
9723
diff
changeset
|
29 |
#include "table/sprites.h" |
b39bc69bb2f2
(svn r12051) [NoAI] -Sync: with trunk (r11795:12050).
rubidium
parents:
9723
diff
changeset
|
30 |
#include "table/strings.h" |
0 | 31 |
|
10776 | 32 |
typedef GUIList<const Town*> GUITownList; |
33 |
||
9826
9707ad4c9b60
(svn r12462) [NoAI] -Sync: with trunk r12304:12461.
rubidium
parents:
9732
diff
changeset
|
34 |
extern bool GenerateTowns(); |
9707ad4c9b60
(svn r12462) [NoAI] -Sync: with trunk r12304:12461.
rubidium
parents:
9732
diff
changeset
|
35 |
static int _scengen_town_size = 1; // depress medium-sized towns per default |
9707ad4c9b60
(svn r12462) [NoAI] -Sync: with trunk r12304:12461.
rubidium
parents:
9732
diff
changeset
|
36 |
|
0 | 37 |
static const Widget _town_authority_widgets[] = { |
9704 | 38 |
{ WWT_CLOSEBOX, RESIZE_NONE, 13, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, // TWA_CLOSEBOX |
39 |
{ WWT_CAPTION, RESIZE_NONE, 13, 11, 316, 0, 13, STR_2022_LOCAL_AUTHORITY, STR_018C_WINDOW_TITLE_DRAG_THIS}, // TWA_CAPTION |
|
40 |
{ WWT_PANEL, RESIZE_NONE, 13, 0, 316, 14, 105, 0x0, STR_NULL}, // TWA_RATING_INFO |
|
41 |
{ WWT_PANEL, RESIZE_NONE, 13, 0, 304, 106, 157, 0x0, STR_2043_LIST_OF_THINGS_TO_DO_AT}, // TWA_COMMAND_LIST |
|
42 |
{ WWT_SCROLLBAR, RESIZE_NONE, 13, 305, 316, 106, 157, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST}, // TWA_SCROLLBAR |
|
43 |
{ WWT_PANEL, RESIZE_NONE, 13, 0, 316, 158, 209, 0x0, STR_NULL}, // TWA_ACTION_INFO |
|
44 |
{ WWT_PUSHTXTBTN, RESIZE_NONE, 13, 0, 316, 210, 221, STR_2042_DO_IT, STR_2044_CARRY_OUT_THE_HIGHLIGHTED}, // TWA_EXECUTE |
|
176
84990c4b9212
(svn r177) -Fix: padded out Widget code to solve warnings on C99 compiler (Tron)
darkvater
parents:
174
diff
changeset
|
45 |
{ WIDGETS_END}, |
0 | 46 |
}; |
47 |
||
48 |
extern const byte _town_action_costs[8]; |
|
49 |
||
9704 | 50 |
enum TownActions { |
51 |
TACT_NONE = 0x00, |
|
52 |
||
53 |
TACT_ADVERTISE_SMALL = 0x01, |
|
54 |
TACT_ADVERTISE_MEDIUM = 0x02, |
|
55 |
TACT_ADVERTISE_LARGE = 0x04, |
|
56 |
TACT_ROAD_REBUILD = 0x08, |
|
57 |
TACT_BUILD_STATUE = 0x10, |
|
58 |
TACT_FOUND_BUILDINGS = 0x20, |
|
59 |
TACT_BUY_RIGHTS = 0x40, |
|
60 |
TACT_BRIBE = 0x80, |
|
61 |
||
62 |
TACT_ADVERTISE = TACT_ADVERTISE_SMALL | TACT_ADVERTISE_MEDIUM | TACT_ADVERTISE_LARGE, |
|
63 |
TACT_CONSTRUCTION = TACT_ROAD_REBUILD | TACT_BUILD_STATUE | TACT_FOUND_BUILDINGS, |
|
64 |
TACT_FUNDS = TACT_BUY_RIGHTS | TACT_BRIBE, |
|
65 |
TACT_ALL = TACT_ADVERTISE | TACT_CONSTRUCTION | TACT_FUNDS, |
|
66 |
}; |
|
67 |
||
68 |
DECLARE_ENUM_AS_BIT_SET(TownActions); |
|
69 |
||
1793
8ac8a8c9ec0f
(svn r2297) - CodeChange: server-check the next batch of commands.
Darkvater
parents:
1363
diff
changeset
|
70 |
/** Get a list of available actions to do at a town. |
9574 | 71 |
* @param nump if not NULL add put the number of available actions in it |
1793
8ac8a8c9ec0f
(svn r2297) - CodeChange: server-check the next batch of commands.
Darkvater
parents:
1363
diff
changeset
|
72 |
* @param pid the player that is querying the town |
9574 | 73 |
* @param t the town that is queried |
1793
8ac8a8c9ec0f
(svn r2297) - CodeChange: server-check the next batch of commands.
Darkvater
parents:
1363
diff
changeset
|
74 |
* @return bitmasked value of enabled actions |
8ac8a8c9ec0f
(svn r2297) - CodeChange: server-check the next batch of commands.
Darkvater
parents:
1363
diff
changeset
|
75 |
*/ |
8ac8a8c9ec0f
(svn r2297) - CodeChange: server-check the next batch of commands.
Darkvater
parents:
1363
diff
changeset
|
76 |
uint GetMaskOfTownActions(int *nump, PlayerID pid, const Town *t) |
0 | 77 |
{ |
1793
8ac8a8c9ec0f
(svn r2297) - CodeChange: server-check the next batch of commands.
Darkvater
parents:
1363
diff
changeset
|
78 |
int num = 0; |
9704 | 79 |
TownActions buttons = TACT_NONE; |
2639 | 80 |
|
9704 | 81 |
/* Spectators and unwanted have no options */ |
10776 | 82 |
if (pid != PLAYER_SPECTATOR && !(_settings_game.economy.bribe && t->unwanted[pid])) { |
0 | 83 |
|
9574 | 84 |
/* Things worth more than this are not shown */ |
9704 | 85 |
Money avail = GetPlayer(pid)->player_money + _price.station_value * 200; |
86 |
Money ref = _price.build_industry >> 8; |
|
0 | 87 |
|
9704 | 88 |
/* Check the action bits for validity and |
89 |
* if they are valid add them */ |
|
90 |
for (uint i = 0; i != lengthof(_town_action_costs); i++) { |
|
91 |
const TownActions cur = (TownActions)(1 << i); |
|
92 |
||
93 |
/* Is the player not able to bribe ? */ |
|
10776 | 94 |
if (cur == TACT_BRIBE && (!_settings_game.economy.bribe || t->ratings[pid] >= RATING_BRIBE_MAXIMUM)) |
9704 | 95 |
continue; |
96 |
||
97 |
/* Is the player not able to buy exclusive rights ? */ |
|
10776 | 98 |
if (cur == TACT_BUY_RIGHTS && !_settings_game.economy.exclusive_rights) |
9704 | 99 |
continue; |
100 |
||
101 |
/* Is the player not able to build a statue ? */ |
|
9722
ebf0ece7d8f6
(svn r11503) [NoAI] -Sync: with trunk r11308:11502.
rubidium
parents:
9704
diff
changeset
|
102 |
if (cur == TACT_BUILD_STATUE && HasBit(t->statues, pid)) |
9704 | 103 |
continue; |
104 |
||
105 |
if (avail >= _town_action_costs[i] * ref) { |
|
106 |
buttons |= cur; |
|
0 | 107 |
num++; |
108 |
} |
|
109 |
} |
|
110 |
} |
|
111 |
||
1793
8ac8a8c9ec0f
(svn r2297) - CodeChange: server-check the next batch of commands.
Darkvater
parents:
1363
diff
changeset
|
112 |
if (nump != NULL) *nump = num; |
0 | 113 |
return buttons; |
114 |
} |
|
115 |
||
10645 | 116 |
struct TownAuthorityWindow : Window { |
10715
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
117 |
private: |
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
118 |
Town *town; |
10645 | 119 |
int sel_index; |
10181
54df587fef5d
(svn r12712) [NoAI] -Sync with trunk r12672:12711.
rubidium
parents:
9826
diff
changeset
|
120 |
|
10715
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
121 |
enum TownAuthorityWidget { |
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
122 |
TWA_CLOSEBOX = 0, |
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
123 |
TWA_CAPTION, |
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
124 |
TWA_RATING_INFO, |
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
125 |
TWA_COMMAND_LIST, |
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
126 |
TWA_SCROLLBAR, |
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
127 |
TWA_ACTION_INFO, |
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
128 |
TWA_EXECUTE, |
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
129 |
}; |
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
130 |
|
11126
72d4c9314c72
(svn r13684) [NoAI] -Sync: with trunk r13599:13683.
rubidium
parents:
11044
diff
changeset
|
131 |
/** |
72d4c9314c72
(svn r13684) [NoAI] -Sync: with trunk r13599:13683.
rubidium
parents:
11044
diff
changeset
|
132 |
* Get the position of the Nth set bit. |
72d4c9314c72
(svn r13684) [NoAI] -Sync: with trunk r13599:13683.
rubidium
parents:
11044
diff
changeset
|
133 |
* |
72d4c9314c72
(svn r13684) [NoAI] -Sync: with trunk r13599:13683.
rubidium
parents:
11044
diff
changeset
|
134 |
* If there is no Nth bit set return -1 |
72d4c9314c72
(svn r13684) [NoAI] -Sync: with trunk r13599:13683.
rubidium
parents:
11044
diff
changeset
|
135 |
* |
72d4c9314c72
(svn r13684) [NoAI] -Sync: with trunk r13599:13683.
rubidium
parents:
11044
diff
changeset
|
136 |
* @param bits The value to search in |
72d4c9314c72
(svn r13684) [NoAI] -Sync: with trunk r13599:13683.
rubidium
parents:
11044
diff
changeset
|
137 |
* @param n The Nth set bit from which we want to know the position |
72d4c9314c72
(svn r13684) [NoAI] -Sync: with trunk r13599:13683.
rubidium
parents:
11044
diff
changeset
|
138 |
* @return The position of the Nth set bit |
72d4c9314c72
(svn r13684) [NoAI] -Sync: with trunk r13599:13683.
rubidium
parents:
11044
diff
changeset
|
139 |
*/ |
72d4c9314c72
(svn r13684) [NoAI] -Sync: with trunk r13599:13683.
rubidium
parents:
11044
diff
changeset
|
140 |
static int GetNthSetBit(uint32 bits, int n) |
72d4c9314c72
(svn r13684) [NoAI] -Sync: with trunk r13599:13683.
rubidium
parents:
11044
diff
changeset
|
141 |
{ |
72d4c9314c72
(svn r13684) [NoAI] -Sync: with trunk r13599:13683.
rubidium
parents:
11044
diff
changeset
|
142 |
if (n >= 0) { |
72d4c9314c72
(svn r13684) [NoAI] -Sync: with trunk r13599:13683.
rubidium
parents:
11044
diff
changeset
|
143 |
uint i; |
72d4c9314c72
(svn r13684) [NoAI] -Sync: with trunk r13599:13683.
rubidium
parents:
11044
diff
changeset
|
144 |
FOR_EACH_SET_BIT(i, bits) { |
72d4c9314c72
(svn r13684) [NoAI] -Sync: with trunk r13599:13683.
rubidium
parents:
11044
diff
changeset
|
145 |
n--; |
72d4c9314c72
(svn r13684) [NoAI] -Sync: with trunk r13599:13683.
rubidium
parents:
11044
diff
changeset
|
146 |
if (n < 0) return i; |
72d4c9314c72
(svn r13684) [NoAI] -Sync: with trunk r13599:13683.
rubidium
parents:
11044
diff
changeset
|
147 |
} |
72d4c9314c72
(svn r13684) [NoAI] -Sync: with trunk r13599:13683.
rubidium
parents:
11044
diff
changeset
|
148 |
} |
72d4c9314c72
(svn r13684) [NoAI] -Sync: with trunk r13599:13683.
rubidium
parents:
11044
diff
changeset
|
149 |
return -1; |
72d4c9314c72
(svn r13684) [NoAI] -Sync: with trunk r13599:13683.
rubidium
parents:
11044
diff
changeset
|
150 |
} |
72d4c9314c72
(svn r13684) [NoAI] -Sync: with trunk r13599:13683.
rubidium
parents:
11044
diff
changeset
|
151 |
|
10715
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
152 |
public: |
10645 | 153 |
TownAuthorityWindow(const WindowDesc *desc, WindowNumber window_number) : |
154 |
Window(desc, window_number), sel_index(-1) |
|
155 |
{ |
|
10715
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
156 |
this->town = GetTown(this->window_number); |
10645 | 157 |
this->vscroll.cap = 5; |
10181
54df587fef5d
(svn r12712) [NoAI] -Sync with trunk r12672:12711.
rubidium
parents:
9826
diff
changeset
|
158 |
|
10645 | 159 |
this->FindWindowPlacementAndResize(desc); |
160 |
} |
|
10181
54df587fef5d
(svn r12712) [NoAI] -Sync with trunk r12672:12711.
rubidium
parents:
9826
diff
changeset
|
161 |
|
10645 | 162 |
virtual void OnPaint() |
163 |
{ |
|
164 |
int numact; |
|
10715
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
165 |
uint buttons = GetMaskOfTownActions(&numact, _local_player, this->town); |
10181
54df587fef5d
(svn r12712) [NoAI] -Sync with trunk r12672:12711.
rubidium
parents:
9826
diff
changeset
|
166 |
|
10645 | 167 |
SetVScrollCount(this, numact + 1); |
168 |
||
169 |
if (this->sel_index != -1 && !HasBit(buttons, this->sel_index)) { |
|
170 |
this->sel_index = -1; |
|
171 |
} |
|
172 |
||
173 |
this->SetWidgetDisabledState(6, this->sel_index == -1); |
|
174 |
||
175 |
SetDParam(0, this->window_number); |
|
176 |
this->DrawWidgets(); |
|
177 |
||
178 |
DrawString(2, 15, STR_2023_TRANSPORT_COMPANY_RATINGS, TC_FROMSTRING); |
|
179 |
||
180 |
/* Draw list of players */ |
|
181 |
int y = 25; |
|
182 |
||
183 |
const Player *p; |
|
184 |
FOR_ALL_PLAYERS(p) { |
|
10715
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
185 |
if (p->is_active && (HasBit(this->town->have_ratings, p->index) || this->town->exclusivity == p->index)) { |
10645 | 186 |
DrawPlayerIcon(p->index, 2, y); |
187 |
||
188 |
SetDParam(0, p->index); |
|
189 |
SetDParam(1, p->index); |
|
190 |
||
10715
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
191 |
int r = this->town->ratings[p->index]; |
10645 | 192 |
StringID str; |
193 |
(str = STR_3035_APPALLING, r <= RATING_APPALLING) || // Apalling |
|
194 |
(str++, r <= RATING_VERYPOOR) || // Very Poor |
|
195 |
(str++, r <= RATING_POOR) || // Poor |
|
196 |
(str++, r <= RATING_MEDIOCRE) || // Mediocore |
|
197 |
(str++, r <= RATING_GOOD) || // Good |
|
198 |
(str++, r <= RATING_VERYGOOD) || // Very Good |
|
199 |
(str++, r <= RATING_EXCELLENT) || // Excellent |
|
200 |
(str++, true); // Outstanding |
|
201 |
||
202 |
SetDParam(2, str); |
|
10715
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
203 |
if (this->town->exclusivity == p->index) { // red icon for player with exclusive rights |
10645 | 204 |
DrawSprite(SPR_BLOT, PALETTE_TO_RED, 18, y); |
0 | 205 |
} |
10645 | 206 |
|
207 |
DrawString(28, y, STR_2024, TC_FROMSTRING); |
|
208 |
y += 10; |
|
209 |
} |
|
210 |
} |
|
211 |
y = 107; |
|
212 |
int pos = this->vscroll.pos; |
|
213 |
||
214 |
if (--pos < 0) { |
|
215 |
DrawString(2, y, STR_2045_ACTIONS_AVAILABLE, TC_FROMSTRING); |
|
216 |
y += 10; |
|
217 |
} |
|
218 |
||
219 |
for (int i = 0; buttons; i++, buttons >>= 1) { |
|
220 |
if (pos <= -5) break; ///< Draw only the 5 fitting lines |
|
221 |
||
222 |
if ((buttons & 1) && --pos < 0) { |
|
223 |
DrawString(3, y, STR_2046_SMALL_ADVERTISING_CAMPAIGN + i, TC_ORANGE); |
|
224 |
y += 10; |
|
225 |
} |
|
226 |
} |
|
227 |
||
228 |
if (this->sel_index != -1) { |
|
229 |
SetDParam(1, (_price.build_industry >> 8) * _town_action_costs[this->sel_index]); |
|
230 |
SetDParam(0, STR_2046_SMALL_ADVERTISING_CAMPAIGN + this->sel_index); |
|
231 |
DrawStringMultiLine(2, 159, STR_204D_INITIATE_A_SMALL_LOCAL + this->sel_index, 313); |
|
232 |
} |
|
233 |
} |
|
234 |
||
235 |
virtual void OnDoubleClick(Point pt, int widget) { HandleClick(pt, widget, true); } |
|
236 |
virtual void OnClick(Point pt, int widget) { HandleClick(pt, widget, false); } |
|
237 |
||
238 |
void HandleClick(Point pt, int widget, bool double_click) |
|
239 |
{ |
|
240 |
switch (widget) { |
|
241 |
case TWA_COMMAND_LIST: { |
|
242 |
int y = (pt.y - 0x6B) / 10; |
|
243 |
||
244 |
if (!IsInsideMM(y, 0, 5)) return; |
|
245 |
||
10715
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
246 |
y = GetNthSetBit(GetMaskOfTownActions(NULL, _local_player, this->town), y + this->vscroll.pos - 1); |
10645 | 247 |
if (y >= 0) { |
248 |
this->sel_index = y; |
|
249 |
this->SetDirty(); |
|
250 |
} |
|
251 |
/* Fall through to clicking in case we are double-clicked */ |
|
252 |
if (!double_click || y < 0) break; |
|
0 | 253 |
} |
254 |
||
10645 | 255 |
case TWA_EXECUTE: |
10715
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
256 |
DoCommandP(this->town->xy, this->window_number, this->sel_index, NULL, CMD_DO_TOWN_ACTION | CMD_MSG(STR_00B4_CAN_T_DO_THIS)); |
10645 | 257 |
break; |
258 |
} |
|
259 |
} |
|
0 | 260 |
|
10645 | 261 |
virtual void OnHundredthTick() |
262 |
{ |
|
263 |
this->SetDirty(); |
|
0 | 264 |
} |
10645 | 265 |
}; |
0 | 266 |
|
267 |
static const WindowDesc _town_authority_desc = { |
|
9694
e72987579514
(svn r10775) [NoAI] -Sync: with trunk r10535:r10774.
rubidium
parents:
9629
diff
changeset
|
268 |
WDP_AUTO, WDP_AUTO, 317, 222, 317, 222, |
6144
5a0ffbf27ced
(svn r8511) -Codechange: make WindowClass an enumerated value.
rubidium
parents:
6001
diff
changeset
|
269 |
WC_TOWN_AUTHORITY, WC_NONE, |
0 | 270 |
WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS, |
271 |
_town_authority_widgets, |
|
272 |
}; |
|
273 |
||
410 | 274 |
static void ShowTownAuthorityWindow(uint town) |
0 | 275 |
{ |
10645 | 276 |
AllocateWindowDescFront<TownAuthorityWindow>(&_town_authority_desc, town); |
0 | 277 |
} |
278 |
||
10715
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
279 |
struct TownViewWindow : Window { |
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
280 |
private: |
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
281 |
Town *town; |
10181
54df587fef5d
(svn r12712) [NoAI] -Sync with trunk r12672:12711.
rubidium
parents:
9826
diff
changeset
|
282 |
|
10715
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
283 |
enum TownViewWidget { |
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
284 |
TVW_CAPTION = 1, |
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
285 |
TVW_STICKY, |
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
286 |
TVW_VIEWPORTPANEL, |
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
287 |
TVW_INFOPANEL = 5, |
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
288 |
TVW_CENTERVIEW, |
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
289 |
TVW_SHOWAUTORITY, |
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
290 |
TVW_CHANGENAME, |
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
291 |
TVW_EXPAND, |
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
292 |
TVW_DELETE, |
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
293 |
}; |
10181
54df587fef5d
(svn r12712) [NoAI] -Sync with trunk r12672:12711.
rubidium
parents:
9826
diff
changeset
|
294 |
|
10715
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
295 |
public: |
10645 | 296 |
TownViewWindow(const WindowDesc *desc, WindowNumber window_number) : Window(desc, window_number) |
297 |
{ |
|
10715
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
298 |
this->town = GetTown(this->window_number); |
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
299 |
bool ingame = _game_mode != GM_EDITOR; |
10181
54df587fef5d
(svn r12712) [NoAI] -Sync with trunk r12672:12711.
rubidium
parents:
9826
diff
changeset
|
300 |
|
10645 | 301 |
this->flags4 |= WF_DISABLE_VP_SCROLL; |
10715
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
302 |
InitializeWindowViewport(this, 3, 17, 254, 86, this->town->xy, ZOOM_LVL_TOWN); |
10181
54df587fef5d
(svn r12712) [NoAI] -Sync with trunk r12672:12711.
rubidium
parents:
9826
diff
changeset
|
303 |
|
10715
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
304 |
if (this->town->larger_town) this->widget[TVW_CAPTION].data = STR_CITY; |
10645 | 305 |
this->SetWidgetHiddenState(TVW_DELETE, ingame); // hide delete button on game mode |
306 |
this->SetWidgetHiddenState(TVW_EXPAND, ingame); // hide expand button on game mode |
|
307 |
this->SetWidgetHiddenState(TVW_SHOWAUTORITY, !ingame); // hide autority button on editor mode |
|
10181
54df587fef5d
(svn r12712) [NoAI] -Sync with trunk r12672:12711.
rubidium
parents:
9826
diff
changeset
|
308 |
|
10645 | 309 |
if (ingame) { |
310 |
/* resize caption bar */ |
|
311 |
this->widget[TVW_CAPTION].right = this->widget[TVW_STICKY].left -1; |
|
312 |
/* move the rename from top on scenario to bottom in game */ |
|
313 |
this->widget[TVW_CHANGENAME].top = this->widget[TVW_EXPAND].top; |
|
314 |
this->widget[TVW_CHANGENAME].bottom = this->widget[TVW_EXPAND].bottom; |
|
315 |
this->widget[TVW_CHANGENAME].right = this->widget[TVW_STICKY].right; |
|
316 |
} |
|
10181
54df587fef5d
(svn r12712) [NoAI] -Sync with trunk r12672:12711.
rubidium
parents:
9826
diff
changeset
|
317 |
|
10715
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
318 |
/* Space required for showing noise level information */ |
10776 | 319 |
if (_settings_game.economy.station_noise_level) { |
10715
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
320 |
ResizeWindowForWidget(this, TVW_INFOPANEL, 0, 10); |
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
321 |
} |
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
322 |
|
10645 | 323 |
this->FindWindowPlacementAndResize(desc); |
0 | 324 |
} |
10645 | 325 |
|
326 |
virtual void OnPaint() |
|
327 |
{ |
|
328 |
/* disable renaming town in network games if you are not the server */ |
|
329 |
this->SetWidgetDisabledState(TVW_CHANGENAME, _networking && !_network_server); |
|
330 |
||
10715
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
331 |
SetDParam(0, this->town->index); |
10645 | 332 |
this->DrawWidgets(); |
333 |
||
10715
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
334 |
SetDParam(0, this->town->population); |
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
335 |
SetDParam(1, this->town->num_houses); |
10645 | 336 |
DrawString(2, 107, STR_2006_POPULATION, TC_FROMSTRING); |
337 |
||
10715
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
338 |
SetDParam(0, this->town->act_pass); |
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
339 |
SetDParam(1, this->town->max_pass); |
10645 | 340 |
DrawString(2, 117, STR_200D_PASSENGERS_LAST_MONTH_MAX, TC_FROMSTRING); |
341 |
||
10715
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
342 |
SetDParam(0, this->town->act_mail); |
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
343 |
SetDParam(1, this->town->max_mail); |
10645 | 344 |
DrawString(2, 127, STR_200E_MAIL_LAST_MONTH_MAX, TC_FROMSTRING); |
345 |
||
346 |
this->DrawViewport(); |
|
10715
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
347 |
|
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
348 |
/* only show the town noise, if the noise option is activated. */ |
10776 | 349 |
if (_settings_game.economy.station_noise_level) { |
10715
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
350 |
SetDParam(0, this->town->noise_reached); |
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
351 |
SetDParam(1, this->town->MaxTownNoise()); |
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
352 |
DrawString(2, 137, STR_NOISE_IN_TOWN, 0); |
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
353 |
} |
10645 | 354 |
} |
355 |
||
356 |
virtual void OnClick(Point pt, int widget) |
|
357 |
{ |
|
358 |
switch (widget) { |
|
359 |
case TVW_CENTERVIEW: /* scroll to location */ |
|
360 |
if (_ctrl_pressed) { |
|
10715
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
361 |
ShowExtraViewPortWindow(this->town->xy); |
10645 | 362 |
} else { |
10715
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
363 |
ScrollMainWindowToTile(this->town->xy); |
10645 | 364 |
} |
365 |
break; |
|
366 |
||
367 |
case TVW_SHOWAUTORITY: /* town authority */ |
|
368 |
ShowTownAuthorityWindow(this->window_number); |
|
369 |
break; |
|
370 |
||
371 |
case TVW_CHANGENAME: /* rename */ |
|
372 |
SetDParam(0, this->window_number); |
|
373 |
ShowQueryString(STR_TOWN, STR_2007_RENAME_TOWN, 31, 130, this, CS_ALPHANUMERAL); |
|
374 |
break; |
|
375 |
||
376 |
case TVW_EXPAND: /* expand town - only available on Scenario editor */ |
|
10715
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
377 |
ExpandTown(this->town); |
10645 | 378 |
break; |
379 |
||
380 |
case TVW_DELETE: /* delete town - only available on Scenario editor */ |
|
10715
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
381 |
delete this->town; |
10645 | 382 |
break; |
383 |
} |
|
384 |
} |
|
385 |
||
10715
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
386 |
virtual void OnInvalidateData(int data = 0) |
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
387 |
{ |
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
388 |
/* Called when setting station noise have changed, in order to resize the window */ |
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
389 |
this->SetDirty(); // refresh display for current size. This will allow to avoid glitches when downgrading |
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
390 |
|
10776 | 391 |
if (_settings_game.economy.station_noise_level) { // adjust depending |
10715
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
392 |
if (this->height == 150) { // window is smaller, needs to be bigger |
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
393 |
ResizeWindowForWidget(this, TVW_INFOPANEL, 0, 10); |
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
394 |
} |
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
395 |
} else { |
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
396 |
if (this->height != 150) { // window is bigger, needs to be smaller |
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
397 |
ResizeWindowForWidget(this, TVW_INFOPANEL, 0, -10); |
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
398 |
} |
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
399 |
} |
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
400 |
} |
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
401 |
|
10645 | 402 |
virtual void OnQueryTextFinished(char *str) |
403 |
{ |
|
404 |
if (!StrEmpty(str)) { |
|
405 |
_cmd_text = str; |
|
406 |
DoCommandP(0, this->window_number, 0, NULL, |
|
407 |
CMD_RENAME_TOWN | CMD_MSG(STR_2008_CAN_T_RENAME_TOWN)); |
|
408 |
} |
|
409 |
} |
|
410 |
}; |
|
0 | 411 |
|
412 |
||
413 |
static const Widget _town_view_widgets[] = { |
|
4344
5d0e40cd67b9
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4299
diff
changeset
|
414 |
{ WWT_CLOSEBOX, RESIZE_NONE, 13, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, |
10249
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
10181
diff
changeset
|
415 |
{ WWT_CAPTION, RESIZE_NONE, 13, 11, 172, 0, 13, STR_2005, STR_018C_WINDOW_TITLE_DRAG_THIS}, |
4344
5d0e40cd67b9
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4299
diff
changeset
|
416 |
{ WWT_STICKYBOX, RESIZE_NONE, 13, 248, 259, 0, 13, 0x0, STR_STICKY_BUTTON}, |
4938
074f734a91ca
(svn r6925) -Codechange: Be more strict with widget distinctions. WWT_PANEL is only plain panel,
Darkvater
parents:
4913
diff
changeset
|
417 |
{ WWT_PANEL, RESIZE_NONE, 13, 0, 259, 14, 105, 0x0, STR_NULL}, |
4939
ede0f6777b3c
(svn r6926) -Codechange: Rename WWT_4 to WWT_TEXTBTN_2 and WWT_6 to WWT_INSET (credits to peter1138
Darkvater
parents:
4938
diff
changeset
|
418 |
{ WWT_INSET, RESIZE_NONE, 13, 2, 257, 16, 103, 0x0, STR_NULL}, |
4938
074f734a91ca
(svn r6925) -Codechange: Be more strict with widget distinctions. WWT_PANEL is only plain panel,
Darkvater
parents:
4913
diff
changeset
|
419 |
{ WWT_PANEL, RESIZE_NONE, 13, 0, 259, 106, 137, 0x0, STR_NULL}, |
4344
5d0e40cd67b9
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4299
diff
changeset
|
420 |
{ WWT_PUSHTXTBTN, RESIZE_NONE, 13, 0, 85, 138, 149, STR_00E4_LOCATION, STR_200B_CENTER_THE_MAIN_VIEW_ON}, |
5d0e40cd67b9
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4299
diff
changeset
|
421 |
{ WWT_PUSHTXTBTN, RESIZE_NONE, 13, 86, 171, 138, 149, STR_2020_LOCAL_AUTHORITY, STR_2021_SHOW_INFORMATION_ON_LOCAL}, |
10249
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
10181
diff
changeset
|
422 |
{ WWT_PUSHTXTBTN, RESIZE_NONE, 13, 172, 247, 0, 13, STR_0130_RENAME, STR_200C_CHANGE_TOWN_NAME}, |
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
10181
diff
changeset
|
423 |
{ WWT_PUSHTXTBTN, RESIZE_NONE, 13, 86, 171, 138, 149, STR_023C_EXPAND, STR_023B_INCREASE_SIZE_OF_TOWN}, |
58810805030e
(svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
10181
diff
changeset
|
424 |
{ WWT_PUSHTXTBTN, RESIZE_NONE, 13, 172, 259, 138, 149, STR_0290_DELETE, STR_0291_DELETE_THIS_TOWN_COMPLETELY}, |
176
84990c4b9212
(svn r177) -Fix: padded out Widget code to solve warnings on C99 compiler (Tron)
darkvater
parents:
174
diff
changeset
|
425 |
{ WIDGETS_END}, |
0 | 426 |
}; |
427 |
||
428 |
static const WindowDesc _town_view_desc = { |
|
9694
e72987579514
(svn r10775) [NoAI] -Sync: with trunk r10535:r10774.
rubidium
parents:
9629
diff
changeset
|
429 |
WDP_AUTO, WDP_AUTO, 260, 150, 260, 150, |
6144
5a0ffbf27ced
(svn r8511) -Codechange: make WindowClass an enumerated value.
rubidium
parents:
6001
diff
changeset
|
430 |
WC_TOWN_VIEW, WC_NONE, |
758
bd9e868b9fae
(svn r1214) -Feature: Stickified Industries (list & window), Smallmaps (all three), Stations (list & window) and Towns (list & window). I hope I didn't forget to update a widget somewhere :O
darkvater
parents:
727
diff
changeset
|
431 |
WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_STICKY_BUTTON, |
0 | 432 |
_town_view_widgets, |
433 |
}; |
|
434 |
||
3349
1ad72db34298
(svn r4133) - Some miscellaneous changes (unconverted TownID in function definition, Owner instead of byte, remove obsolete member and compare waypoint index with 0 not STR_NULL)
Darkvater
parents:
2952
diff
changeset
|
435 |
void ShowTownViewWindow(TownID town) |
0 | 436 |
{ |
10645 | 437 |
AllocateWindowDescFront<TownViewWindow>(&_town_view_desc, town); |
0 | 438 |
} |
439 |
||
440 |
static const Widget _town_directory_widgets[] = { |
|
4344
5d0e40cd67b9
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4299
diff
changeset
|
441 |
{ WWT_CLOSEBOX, RESIZE_NONE, 13, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, |
5d0e40cd67b9
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4299
diff
changeset
|
442 |
{ WWT_CAPTION, RESIZE_NONE, 13, 11, 195, 0, 13, STR_2000_TOWNS, STR_018C_WINDOW_TITLE_DRAG_THIS}, |
5d0e40cd67b9
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4299
diff
changeset
|
443 |
{ WWT_STICKYBOX, RESIZE_NONE, 13, 196, 207, 0, 13, 0x0, STR_STICKY_BUTTON}, |
5d0e40cd67b9
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4299
diff
changeset
|
444 |
{ WWT_PUSHTXTBTN, RESIZE_NONE, 13, 0, 98, 14, 25, STR_SORT_BY_NAME, STR_SORT_ORDER_TIP}, |
5d0e40cd67b9
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4299
diff
changeset
|
445 |
{ WWT_PUSHTXTBTN, RESIZE_NONE, 13, 99, 195, 14, 25, STR_SORT_BY_POPULATION, STR_SORT_ORDER_TIP}, |
4938
074f734a91ca
(svn r6925) -Codechange: Be more strict with widget distinctions. WWT_PANEL is only plain panel,
Darkvater
parents:
4913
diff
changeset
|
446 |
{ WWT_PANEL, RESIZE_BOTTOM, 13, 0, 195, 26, 189, 0x0, STR_200A_TOWN_NAMES_CLICK_ON_NAME}, |
4344
5d0e40cd67b9
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4299
diff
changeset
|
447 |
{ WWT_SCROLLBAR, RESIZE_BOTTOM, 13, 196, 207, 14, 189, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST}, |
4938
074f734a91ca
(svn r6925) -Codechange: Be more strict with widget distinctions. WWT_PANEL is only plain panel,
Darkvater
parents:
4913
diff
changeset
|
448 |
{ WWT_PANEL, RESIZE_TB, 13, 0, 195, 190, 201, 0x0, STR_NULL}, |
4344
5d0e40cd67b9
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4299
diff
changeset
|
449 |
{ WWT_RESIZEBOX, RESIZE_TB, 13, 196, 207, 190, 201, 0x0, STR_RESIZE_BUTTON}, |
176
84990c4b9212
(svn r177) -Fix: padded out Widget code to solve warnings on C99 compiler (Tron)
darkvater
parents:
174
diff
changeset
|
450 |
{ WIDGETS_END}, |
0 | 451 |
}; |
452 |
||
453 |
||
10645 | 454 |
struct TownDirectoryWindow : public Window { |
10715
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
455 |
private: |
10645 | 456 |
enum TownDirectoryWidget { |
457 |
TDW_SORTNAME = 3, |
|
458 |
TDW_SORTPOPULATION, |
|
459 |
TDW_CENTERTOWN, |
|
460 |
}; |
|
461 |
||
10776 | 462 |
/* Runtime saved values */ |
463 |
static Listing last_sorting; |
|
464 |
static const Town *last_town; |
|
465 |
||
466 |
/* Constants for sorting towns */ |
|
467 |
static GUITownList::SortFunction * const sorter_funcs[]; |
|
468 |
||
469 |
GUITownList towns; |
|
470 |
||
471 |
void BuildTownList() |
|
472 |
{ |
|
473 |
if (!this->towns.NeedRebuild()) return; |
|
474 |
||
475 |
this->towns.Clear(); |
|
476 |
||
477 |
const Town *t; |
|
478 |
FOR_ALL_TOWNS(t) { |
|
479 |
*this->towns.Append() = t; |
|
480 |
} |
|
481 |
||
482 |
this->towns.Compact(); |
|
483 |
this->towns.RebuildDone(); |
|
484 |
} |
|
485 |
||
486 |
void SortTownList() |
|
487 |
{ |
|
488 |
last_town = NULL; |
|
489 |
this->towns.Sort(); |
|
490 |
} |
|
491 |
||
492 |
/** Sort by town name */ |
|
493 |
static int CDECL TownNameSorter(const Town * const *a, const Town * const *b) |
|
494 |
{ |
|
495 |
static char buf_cache[64]; |
|
496 |
const Town *ta = *a; |
|
497 |
const Town *tb = *b; |
|
498 |
char buf[64]; |
|
499 |
||
500 |
SetDParam(0, ta->index); |
|
501 |
GetString(buf, STR_TOWN, lastof(buf)); |
|
502 |
||
503 |
/* If 'b' is the same town as in the last round, use the cached value |
|
504 |
* We do this to speed stuff up ('b' is called with the same value a lot of |
|
505 |
* times after eachother) */ |
|
506 |
if (tb != last_town) { |
|
507 |
last_town = tb; |
|
508 |
SetDParam(0, tb->index); |
|
509 |
GetString(buf_cache, STR_TOWN, lastof(buf_cache)); |
|
510 |
} |
|
511 |
||
512 |
return strcmp(buf, buf_cache); |
|
513 |
} |
|
514 |
||
515 |
/** Sort by population */ |
|
516 |
static int CDECL TownPopulationSorter(const Town * const *a, const Town * const *b) |
|
517 |
{ |
|
518 |
return (*a)->population - (*b)->population; |
|
519 |
} |
|
520 |
||
10715
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
521 |
public: |
10645 | 522 |
TownDirectoryWindow(const WindowDesc *desc) : Window(desc, 0) |
523 |
{ |
|
524 |
this->vscroll.cap = 16; |
|
525 |
this->resize.step_height = 10; |
|
526 |
this->resize.height = this->height - 10 * 6; // minimum of 10 items in the list, each item 10 high |
|
527 |
||
10776 | 528 |
this->towns.SetListing(this->last_sorting); |
529 |
this->towns.SetSortFuncs(this->sorter_funcs); |
|
530 |
this->towns.ForceRebuild(); |
|
531 |
||
10645 | 532 |
this->FindWindowPlacementAndResize(desc); |
533 |
} |
|
534 |
||
10776 | 535 |
~TownDirectoryWindow() |
536 |
{ |
|
537 |
this->last_sorting = this->towns.GetListing(); |
|
538 |
} |
|
539 |
||
10645 | 540 |
virtual void OnPaint() |
541 |
{ |
|
10776 | 542 |
this->BuildTownList(); |
543 |
this->SortTownList(); |
|
10645 | 544 |
|
10776 | 545 |
SetVScrollCount(this, this->towns.Length()); |
10645 | 546 |
|
547 |
this->DrawWidgets(); |
|
11044
097ea3e7ec56
(svn r13600) [NoAI] -Sync: with trunk r13508:13599.
rubidium
parents:
10776
diff
changeset
|
548 |
this->DrawSortButtonState(this->towns.SortType() == 0 ? TDW_SORTNAME : TDW_SORTPOPULATION, this->towns.IsDescSortOrder() ? SBS_DOWN : SBS_UP); |
10645 | 549 |
|
550 |
{ |
|
551 |
int n = 0; |
|
552 |
uint16 i = this->vscroll.pos; |
|
553 |
int y = 28; |
|
554 |
||
10776 | 555 |
while (i < this->towns.Length()) { |
556 |
const Town *t = this->towns[i]; |
|
10645 | 557 |
|
558 |
assert(t->xy); |
|
559 |
||
560 |
SetDParam(0, t->index); |
|
561 |
SetDParam(1, t->population); |
|
562 |
DrawString(2, y, STR_2057, TC_FROMSTRING); |
|
563 |
||
564 |
y += 10; |
|
565 |
i++; |
|
566 |
if (++n == this->vscroll.cap) break; // max number of towns in 1 window |
|
174
bd79fb899824
(svn r175) -Fix: [1023771] inconsistent/missing stations in station list. Forgot to change owner-sort after changing function.
darkvater
parents:
164
diff
changeset
|
567 |
} |
0 | 568 |
|
10645 | 569 |
SetDParam(0, GetWorldPopulation()); |
570 |
DrawString(3, this->height - 12 + 2, STR_TOWN_POPULATION, TC_FROMSTRING); |
|
571 |
} |
|
572 |
} |
|
10181
54df587fef5d
(svn r12712) [NoAI] -Sync with trunk r12672:12711.
rubidium
parents:
9826
diff
changeset
|
573 |
|
10645 | 574 |
virtual void OnClick(Point pt, int widget) |
575 |
{ |
|
576 |
switch (widget) { |
|
577 |
case TDW_SORTNAME: /* Sort by Name ascending/descending */ |
|
10776 | 578 |
if (this->towns.SortType() == 0) { |
579 |
this->towns.ToggleSortOrder(); |
|
580 |
} else { |
|
581 |
this->towns.SetSortType(0); |
|
582 |
} |
|
10645 | 583 |
this->SetDirty(); |
584 |
break; |
|
10181
54df587fef5d
(svn r12712) [NoAI] -Sync with trunk r12672:12711.
rubidium
parents:
9826
diff
changeset
|
585 |
|
10645 | 586 |
case TDW_SORTPOPULATION: /* Sort by Population ascending/descending */ |
10776 | 587 |
if (this->towns.SortType() == 1) { |
588 |
this->towns.ToggleSortOrder(); |
|
589 |
} else { |
|
590 |
this->towns.SetSortType(1); |
|
591 |
} |
|
10645 | 592 |
this->SetDirty(); |
593 |
break; |
|
594 |
||
595 |
case TDW_CENTERTOWN: { /* Click on Town Matrix */ |
|
596 |
uint16 id_v = (pt.y - 28) / 10; |
|
597 |
||
598 |
if (id_v >= this->vscroll.cap) return; // click out of bounds |
|
599 |
||
600 |
id_v += this->vscroll.pos; |
|
601 |
||
10776 | 602 |
if (id_v >= this->towns.Length()) return; // click out of town bounds |
10645 | 603 |
|
10776 | 604 |
const Town *t = this->towns[id_v]; |
10645 | 605 |
assert(t->xy); |
606 |
if (_ctrl_pressed) { |
|
607 |
ShowExtraViewPortWindow(t->xy); |
|
608 |
} else { |
|
609 |
ScrollMainWindowToTile(t->xy); |
|
610 |
} |
|
611 |
break; |
|
10181
54df587fef5d
(svn r12712) [NoAI] -Sync with trunk r12672:12711.
rubidium
parents:
9826
diff
changeset
|
612 |
} |
10645 | 613 |
} |
614 |
} |
|
10181
54df587fef5d
(svn r12712) [NoAI] -Sync with trunk r12672:12711.
rubidium
parents:
9826
diff
changeset
|
615 |
|
10645 | 616 |
virtual void OnHundredthTick() |
617 |
{ |
|
618 |
this->SetDirty(); |
|
619 |
} |
|
10181
54df587fef5d
(svn r12712) [NoAI] -Sync with trunk r12672:12711.
rubidium
parents:
9826
diff
changeset
|
620 |
|
10645 | 621 |
virtual void OnResize(Point new_size, Point delta) |
622 |
{ |
|
623 |
this->vscroll.cap += delta.y / 10; |
|
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
176
diff
changeset
|
624 |
} |
10776 | 625 |
|
626 |
virtual void OnInvalidateData(int data) |
|
627 |
{ |
|
628 |
if (data == 0) { |
|
629 |
this->towns.ForceRebuild(); |
|
630 |
} else { |
|
631 |
this->towns.ForceResort(); |
|
632 |
} |
|
633 |
} |
|
634 |
}; |
|
635 |
||
636 |
Listing TownDirectoryWindow::last_sorting = {false, 0}; |
|
637 |
const Town *TownDirectoryWindow::last_town = NULL; |
|
638 |
||
639 |
/* Available town directory sorting functions */ |
|
640 |
GUITownList::SortFunction * const TownDirectoryWindow::sorter_funcs[] = { |
|
641 |
&TownNameSorter, |
|
642 |
&TownPopulationSorter, |
|
10645 | 643 |
}; |
0 | 644 |
|
645 |
static const WindowDesc _town_directory_desc = { |
|
9694
e72987579514
(svn r10775) [NoAI] -Sync: with trunk r10535:r10774.
rubidium
parents:
9629
diff
changeset
|
646 |
WDP_AUTO, WDP_AUTO, 208, 202, 208, 202, |
6144
5a0ffbf27ced
(svn r8511) -Codechange: make WindowClass an enumerated value.
rubidium
parents:
6001
diff
changeset
|
647 |
WC_TOWN_DIRECTORY, WC_NONE, |
867
581154a08a78
(svn r1348) -Feature: resizable windows. Read the comment in window.h to find out
truelight
parents:
821
diff
changeset
|
648 |
WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_STICKY_BUTTON | WDF_RESIZABLE, |
0 | 649 |
_town_directory_widgets, |
650 |
}; |
|
651 |
||
6573 | 652 |
void ShowTownDirectory() |
0 | 653 |
{ |
10715
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
654 |
if (BringWindowToFrontById(WC_TOWN_DIRECTORY, 0)) return; |
10645 | 655 |
new TownDirectoryWindow(&_town_directory_desc); |
0 | 656 |
} |
9826
9707ad4c9b60
(svn r12462) [NoAI] -Sync: with trunk r12304:12461.
rubidium
parents:
9732
diff
changeset
|
657 |
|
9707ad4c9b60
(svn r12462) [NoAI] -Sync: with trunk r12304:12461.
rubidium
parents:
9732
diff
changeset
|
658 |
void CcBuildTown(bool success, TileIndex tile, uint32 p1, uint32 p2) |
9707ad4c9b60
(svn r12462) [NoAI] -Sync: with trunk r12304:12461.
rubidium
parents:
9732
diff
changeset
|
659 |
{ |
9707ad4c9b60
(svn r12462) [NoAI] -Sync: with trunk r12304:12461.
rubidium
parents:
9732
diff
changeset
|
660 |
if (success) { |
9707ad4c9b60
(svn r12462) [NoAI] -Sync: with trunk r12304:12461.
rubidium
parents:
9732
diff
changeset
|
661 |
SndPlayTileFx(SND_1F_SPLAT, tile); |
9707ad4c9b60
(svn r12462) [NoAI] -Sync: with trunk r12304:12461.
rubidium
parents:
9732
diff
changeset
|
662 |
ResetObjectToPlace(); |
9707ad4c9b60
(svn r12462) [NoAI] -Sync: with trunk r12304:12461.
rubidium
parents:
9732
diff
changeset
|
663 |
} |
9707ad4c9b60
(svn r12462) [NoAI] -Sync: with trunk r12304:12461.
rubidium
parents:
9732
diff
changeset
|
664 |
} |
9707ad4c9b60
(svn r12462) [NoAI] -Sync: with trunk r12304:12461.
rubidium
parents:
9732
diff
changeset
|
665 |
|
9707ad4c9b60
(svn r12462) [NoAI] -Sync: with trunk r12304:12461.
rubidium
parents:
9732
diff
changeset
|
666 |
static void PlaceProc_Town(TileIndex tile) |
9707ad4c9b60
(svn r12462) [NoAI] -Sync: with trunk r12304:12461.
rubidium
parents:
9732
diff
changeset
|
667 |
{ |
9707ad4c9b60
(svn r12462) [NoAI] -Sync: with trunk r12304:12461.
rubidium
parents:
9732
diff
changeset
|
668 |
uint32 size = min(_scengen_town_size, (int)TSM_CITY); |
9707ad4c9b60
(svn r12462) [NoAI] -Sync: with trunk r12304:12461.
rubidium
parents:
9732
diff
changeset
|
669 |
uint32 mode = _scengen_town_size > TSM_CITY ? TSM_CITY : TSM_FIXED; |
9707ad4c9b60
(svn r12462) [NoAI] -Sync: with trunk r12304:12461.
rubidium
parents:
9732
diff
changeset
|
670 |
DoCommandP(tile, size, mode, CcBuildTown, CMD_BUILD_TOWN | CMD_MSG(STR_0236_CAN_T_BUILD_TOWN_HERE)); |
9707ad4c9b60
(svn r12462) [NoAI] -Sync: with trunk r12304:12461.
rubidium
parents:
9732
diff
changeset
|
671 |
} |
9707ad4c9b60
(svn r12462) [NoAI] -Sync: with trunk r12304:12461.
rubidium
parents:
9732
diff
changeset
|
672 |
|
9707ad4c9b60
(svn r12462) [NoAI] -Sync: with trunk r12304:12461.
rubidium
parents:
9732
diff
changeset
|
673 |
static const Widget _scen_edit_town_gen_widgets[] = { |
9707ad4c9b60
(svn r12462) [NoAI] -Sync: with trunk r12304:12461.
rubidium
parents:
9732
diff
changeset
|
674 |
{ WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, |
9707ad4c9b60
(svn r12462) [NoAI] -Sync: with trunk r12304:12461.
rubidium
parents:
9732
diff
changeset
|
675 |
{ WWT_CAPTION, RESIZE_NONE, 7, 11, 147, 0, 13, STR_0233_TOWN_GENERATION, STR_018C_WINDOW_TITLE_DRAG_THIS}, |
9707ad4c9b60
(svn r12462) [NoAI] -Sync: with trunk r12304:12461.
rubidium
parents:
9732
diff
changeset
|
676 |
{ WWT_STICKYBOX, RESIZE_NONE, 7, 148, 159, 0, 13, 0x0, STR_STICKY_BUTTON}, |
9707ad4c9b60
(svn r12462) [NoAI] -Sync: with trunk r12304:12461.
rubidium
parents:
9732
diff
changeset
|
677 |
{ WWT_PANEL, RESIZE_NONE, 7, 0, 159, 14, 94, 0x0, STR_NULL}, |
9707ad4c9b60
(svn r12462) [NoAI] -Sync: with trunk r12304:12461.
rubidium
parents:
9732
diff
changeset
|
678 |
{ WWT_TEXTBTN, RESIZE_NONE, 14, 2, 157, 16, 27, STR_0234_NEW_TOWN, STR_0235_CONSTRUCT_NEW_TOWN}, |
9707ad4c9b60
(svn r12462) [NoAI] -Sync: with trunk r12304:12461.
rubidium
parents:
9732
diff
changeset
|
679 |
{ WWT_TEXTBTN, RESIZE_NONE, 14, 2, 157, 29, 40, STR_023D_RANDOM_TOWN, STR_023E_BUILD_TOWN_IN_RANDOM_LOCATION}, |
9707ad4c9b60
(svn r12462) [NoAI] -Sync: with trunk r12304:12461.
rubidium
parents:
9732
diff
changeset
|
680 |
{ WWT_TEXTBTN, RESIZE_NONE, 14, 2, 157, 42, 53, STR_MANY_RANDOM_TOWNS, STR_RANDOM_TOWNS_TIP}, |
9707ad4c9b60
(svn r12462) [NoAI] -Sync: with trunk r12304:12461.
rubidium
parents:
9732
diff
changeset
|
681 |
{ WWT_TEXTBTN, RESIZE_NONE, 14, 2, 53, 68, 79, STR_02A1_SMALL, STR_02A4_SELECT_TOWN_SIZE}, |
9707ad4c9b60
(svn r12462) [NoAI] -Sync: with trunk r12304:12461.
rubidium
parents:
9732
diff
changeset
|
682 |
{ WWT_TEXTBTN, RESIZE_NONE, 14, 54, 105, 68, 79, STR_02A2_MEDIUM, STR_02A4_SELECT_TOWN_SIZE}, |
9707ad4c9b60
(svn r12462) [NoAI] -Sync: with trunk r12304:12461.
rubidium
parents:
9732
diff
changeset
|
683 |
{ WWT_TEXTBTN, RESIZE_NONE, 14, 106, 157, 68, 79, STR_02A3_LARGE, STR_02A4_SELECT_TOWN_SIZE}, |
9707ad4c9b60
(svn r12462) [NoAI] -Sync: with trunk r12304:12461.
rubidium
parents:
9732
diff
changeset
|
684 |
{ WWT_TEXTBTN, RESIZE_NONE, 14, 2, 157, 81, 92, STR_SCENARIO_EDITOR_CITY, STR_02A4_SELECT_TOWN_SIZE}, |
9707ad4c9b60
(svn r12462) [NoAI] -Sync: with trunk r12304:12461.
rubidium
parents:
9732
diff
changeset
|
685 |
{ WWT_LABEL, RESIZE_NONE, 7, 0, 147, 54, 67, STR_02A5_TOWN_SIZE, STR_NULL}, |
9707ad4c9b60
(svn r12462) [NoAI] -Sync: with trunk r12304:12461.
rubidium
parents:
9732
diff
changeset
|
686 |
{ WIDGETS_END}, |
9707ad4c9b60
(svn r12462) [NoAI] -Sync: with trunk r12304:12461.
rubidium
parents:
9732
diff
changeset
|
687 |
}; |
9707ad4c9b60
(svn r12462) [NoAI] -Sync: with trunk r12304:12461.
rubidium
parents:
9732
diff
changeset
|
688 |
|
10645 | 689 |
struct ScenarioEditorTownGenerationWindow : Window |
9826
9707ad4c9b60
(svn r12462) [NoAI] -Sync: with trunk r12304:12461.
rubidium
parents:
9732
diff
changeset
|
690 |
{ |
10715
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
691 |
private: |
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
692 |
enum TownScenarioEditorWidget { |
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
693 |
TSEW_NEWTOWN = 4, |
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
694 |
TSEW_RANDOMTOWN, |
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
695 |
TSEW_MANYRANDOMTOWNS, |
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
696 |
TSEW_SMALLTOWN, |
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
697 |
TSEW_MEDIUMTOWN, |
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
698 |
TSEW_LARGETOWN, |
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
699 |
TSEW_CITY, |
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
700 |
}; |
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
701 |
|
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
702 |
public: |
10645 | 703 |
ScenarioEditorTownGenerationWindow(const WindowDesc *desc, WindowNumber window_number) : Window(desc, window_number) |
704 |
{ |
|
705 |
this->LowerWidget(_scengen_town_size + TSEW_SMALLTOWN); |
|
10715
6bdf79ffb022
(svn r13265) [NoAI] -Sync with trunk r13185:13264.
rubidium
parents:
10645
diff
changeset
|
706 |
this->FindWindowPlacementAndResize(desc); |
10645 | 707 |
} |
10181
54df587fef5d
(svn r12712) [NoAI] -Sync with trunk r12672:12711.
rubidium
parents:
9826
diff
changeset
|
708 |
|
10645 | 709 |
virtual void OnPaint() |
710 |
{ |
|
711 |
this->DrawWidgets(); |
|
712 |
} |
|
10181
54df587fef5d
(svn r12712) [NoAI] -Sync with trunk r12672:12711.
rubidium
parents:
9826
diff
changeset
|
713 |
|
10645 | 714 |
virtual void OnClick(Point pt, int widget) |
715 |
{ |
|
716 |
switch (widget) { |
|
717 |
case TSEW_NEWTOWN: |
|
718 |
HandlePlacePushButton(this, TSEW_NEWTOWN, SPR_CURSOR_TOWN, VHM_RECT, PlaceProc_Town); |
|
719 |
break; |
|
10181
54df587fef5d
(svn r12712) [NoAI] -Sync with trunk r12672:12711.
rubidium
parents:
9826
diff
changeset
|
720 |
|
10645 | 721 |
case TSEW_RANDOMTOWN: { |
722 |
Town *t; |
|
723 |
uint size = min(_scengen_town_size, (int)TSM_CITY); |
|
724 |
TownSizeMode mode = _scengen_town_size > TSM_CITY ? TSM_CITY : TSM_FIXED; |
|
10181
54df587fef5d
(svn r12712) [NoAI] -Sync with trunk r12672:12711.
rubidium
parents:
9826
diff
changeset
|
725 |
|
10645 | 726 |
this->HandleButtonClick(TSEW_RANDOMTOWN); |
727 |
_generating_world = true; |
|
728 |
t = CreateRandomTown(20, mode, size); |
|
729 |
_generating_world = false; |
|
730 |
||
731 |
if (t == NULL) { |
|
732 |
ShowErrorMessage(STR_NO_SPACE_FOR_TOWN, STR_CANNOT_GENERATE_TOWN, 0, 0); |
|
733 |
} else { |
|
734 |
ScrollMainWindowToTile(t->xy); |
|
735 |
} |
|
10181
54df587fef5d
(svn r12712) [NoAI] -Sync with trunk r12672:12711.
rubidium
parents:
9826
diff
changeset
|
736 |
} break; |
54df587fef5d
(svn r12712) [NoAI] -Sync with trunk r12672:12711.
rubidium
parents:
9826
diff
changeset
|
737 |
|
10645 | 738 |
case TSEW_MANYRANDOMTOWNS: |
739 |
this->HandleButtonClick(TSEW_MANYRANDOMTOWNS); |
|
9826
9707ad4c9b60
(svn r12462) [NoAI] -Sync: with trunk r12304:12461.
rubidium
parents:
9732
diff
changeset
|
740 |
|
10645 | 741 |
_generating_world = true; |
742 |
if (!GenerateTowns()) ShowErrorMessage(STR_NO_SPACE_FOR_TOWN, STR_CANNOT_GENERATE_TOWN, 0, 0); |
|
743 |
_generating_world = false; |
|
744 |
break; |
|
10181
54df587fef5d
(svn r12712) [NoAI] -Sync with trunk r12672:12711.
rubidium
parents:
9826
diff
changeset
|
745 |
|
10645 | 746 |
case TSEW_SMALLTOWN: case TSEW_MEDIUMTOWN: case TSEW_LARGETOWN: case TSEW_CITY: |
747 |
this->RaiseWidget(_scengen_town_size + TSEW_SMALLTOWN); |
|
748 |
_scengen_town_size = widget - TSEW_SMALLTOWN; |
|
749 |
this->LowerWidget(_scengen_town_size + TSEW_SMALLTOWN); |
|
750 |
this->SetDirty(); |
|
751 |
break; |
|
752 |
} |
|
9826
9707ad4c9b60
(svn r12462) [NoAI] -Sync: with trunk r12304:12461.
rubidium
parents:
9732
diff
changeset
|
753 |
} |
10645 | 754 |
|
755 |
virtual void OnTimeout() |
|
756 |
{ |
|
757 |
this->RaiseWidget(TSEW_RANDOMTOWN); |
|
758 |
this->RaiseWidget(TSEW_MANYRANDOMTOWNS); |
|
759 |
this->SetDirty(); |
|
760 |
} |
|
761 |
||
762 |
virtual void OnPlaceObject(Point pt, TileIndex tile) |
|
763 |
{ |
|
764 |
_place_proc(tile); |
|
765 |
} |
|
766 |
||
767 |
virtual void OnPlaceObjectAbort() |
|
768 |
{ |
|
769 |
this->RaiseButtons(); |
|
770 |
this->LowerWidget(_scengen_town_size + TSEW_SMALLTOWN); |
|
771 |
this->SetDirty(); |
|
772 |
} |
|
773 |
}; |
|
9826
9707ad4c9b60
(svn r12462) [NoAI] -Sync: with trunk r12304:12461.
rubidium
parents:
9732
diff
changeset
|
774 |
|
9707ad4c9b60
(svn r12462) [NoAI] -Sync: with trunk r12304:12461.
rubidium
parents:
9732
diff
changeset
|
775 |
static const WindowDesc _scen_edit_town_gen_desc = { |
9707ad4c9b60
(svn r12462) [NoAI] -Sync: with trunk r12304:12461.
rubidium
parents:
9732
diff
changeset
|
776 |
WDP_AUTO, WDP_AUTO, 160, 95, 160, 95, |
9707ad4c9b60
(svn r12462) [NoAI] -Sync: with trunk r12304:12461.
rubidium
parents:
9732
diff
changeset
|
777 |
WC_SCEN_TOWN_GEN, WC_NONE, |
9707ad4c9b60
(svn r12462) [NoAI] -Sync: with trunk r12304:12461.
rubidium
parents:
9732
diff
changeset
|
778 |
WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_STICKY_BUTTON, |
9707ad4c9b60
(svn r12462) [NoAI] -Sync: with trunk r12304:12461.
rubidium
parents:
9732
diff
changeset
|
779 |
_scen_edit_town_gen_widgets, |
9707ad4c9b60
(svn r12462) [NoAI] -Sync: with trunk r12304:12461.
rubidium
parents:
9732
diff
changeset
|
780 |
}; |
9707ad4c9b60
(svn r12462) [NoAI] -Sync: with trunk r12304:12461.
rubidium
parents:
9732
diff
changeset
|
781 |
|
9707ad4c9b60
(svn r12462) [NoAI] -Sync: with trunk r12304:12461.
rubidium
parents:
9732
diff
changeset
|
782 |
void ShowBuildTownWindow() |
9707ad4c9b60
(svn r12462) [NoAI] -Sync: with trunk r12304:12461.
rubidium
parents:
9732
diff
changeset
|
783 |
{ |
9707ad4c9b60
(svn r12462) [NoAI] -Sync: with trunk r12304:12461.
rubidium
parents:
9732
diff
changeset
|
784 |
if (_game_mode != GM_EDITOR && !IsValidPlayer(_current_player)) return; |
10645 | 785 |
AllocateWindowDescFront<ScenarioEditorTownGenerationWindow>(&_scen_edit_town_gen_desc, 0); |
9826
9707ad4c9b60
(svn r12462) [NoAI] -Sync: with trunk r12304:12461.
rubidium
parents:
9732
diff
changeset
|
786 |
} |
9707ad4c9b60
(svn r12462) [NoAI] -Sync: with trunk r12304:12461.
rubidium
parents:
9732
diff
changeset
|
787 |