mirror of https://github.com/OpenTTD/OpenTTD.git
(svn r6619) -Codechange: Use accessors for disabled_state.
Another step toward merging XTDwidget. The only two files not converted (window.h and widget.c) will be done at the very last commit)
This commit is contained in:
parent
e383584988
commit
753b572400
|
@ -121,7 +121,7 @@ static void NewAircraftWndProc(Window *w, WindowEvent *e)
|
|||
byte acc_planes;
|
||||
|
||||
if (tile == 0) {
|
||||
SETBIT(w->disabled_state, 5);
|
||||
DisableWindowWidget(w, 5);
|
||||
acc_planes = ALL;
|
||||
} else {
|
||||
acc_planes = GetAirport(GetStationByTile(tile)->airport_type)->acc_planes;
|
||||
|
@ -269,9 +269,11 @@ static void AircraftDetailsWndProc(Window *w, WindowEvent *e)
|
|||
case WE_PAINT: {
|
||||
const Vehicle *v = GetVehicle(w->window_number);
|
||||
|
||||
w->disabled_state = v->owner == _local_player ? 0 : (1 << 2);
|
||||
if (!_patches.servint_aircraft) // disable service-scroller when interval is set to disabled
|
||||
w->disabled_state |= (1 << 5) | (1 << 6);
|
||||
SetWindowWidgetDisabledState(w, 2, v->owner != _local_player);
|
||||
|
||||
/* Disable service-scroller when interval is set to disabled */
|
||||
SetWindowWidgetDisabledState(w, 5, !_patches.servint_aircraft);
|
||||
SetWindowWidgetDisabledState(w, 6, !_patches.servint_aircraft);
|
||||
|
||||
SetDParam(0, v->string_id);
|
||||
SetDParam(1, v->unitnumber);
|
||||
|
@ -451,13 +453,11 @@ static void AircraftViewWndProc(Window *w, WindowEvent *e)
|
|||
switch (e->event) {
|
||||
case WE_PAINT: {
|
||||
const Vehicle *v = GetVehicle(w->window_number);
|
||||
uint32 disabled = 1 << 8;
|
||||
StringID str;
|
||||
|
||||
if (IsAircraftInHangarStopped(v)) disabled = 0;
|
||||
SetWindowWidgetDisabledState(w, 7, v->owner != _local_player);
|
||||
SetWindowWidgetDisabledState(w, 8, !IsAircraftInHangarStopped(v) || v->owner != _local_player);
|
||||
|
||||
if (v->owner != _local_player) disabled |= 1 << 8 | 1 << 7;
|
||||
w->disabled_state = disabled;
|
||||
|
||||
/* draw widgets & caption */
|
||||
SetDParam(0, v->string_id);
|
||||
|
|
|
@ -143,6 +143,7 @@ static void BuildAirportPickerWndProc(Window *w, WindowEvent *e)
|
|||
{
|
||||
switch (e->event) {
|
||||
case WE_PAINT: {
|
||||
int i; // airport enabling loop
|
||||
int sel;
|
||||
int rad = 4; // default catchment radious
|
||||
uint32 avail_airports;
|
||||
|
@ -156,10 +157,13 @@ static void BuildAirportPickerWndProc(Window *w, WindowEvent *e)
|
|||
if (!HASBIT(avail_airports, 0) && sel == AT_SMALL) sel = AT_LARGE;
|
||||
if (!HASBIT(avail_airports, 1) && sel == AT_LARGE) sel = AT_SMALL;
|
||||
|
||||
/* 'Country Airport' starts at widget 3, and if its bit is set, it is
|
||||
* available, so take its opposite value to set the disabled_state. There
|
||||
* are 9 buildable airports, so XOR with 0x01FF (1 1111 1111) */
|
||||
w->disabled_state = (avail_airports ^ 0x01FF) << 7;
|
||||
/* 'Country Airport' starts at widget 7, and if its bit is set, it is
|
||||
* available, so take its opposite value to set the disabled state.
|
||||
* There are 9 buildable airports
|
||||
* XXX TODO : all airports should be held in arrays, with all relevant data.
|
||||
* This should be part of newgrf-airports, i suppose
|
||||
*/
|
||||
for (i = 0; i < 9; i++) SetWindowWidgetDisabledState(w, i + 7, !HASBIT(avail_airports, i));
|
||||
|
||||
_selected_airport_type = sel;
|
||||
// select default the coverage area to 'Off' (16)
|
||||
|
|
21
depot_gui.c
21
depot_gui.c
|
@ -258,17 +258,20 @@ static void ShowDepotSellAllWindow(TileIndex tile, byte type)
|
|||
static void DrawDepotWindow(Window *w)
|
||||
{
|
||||
Vehicle **vl = WP(w, depot_d).vehicle_list;
|
||||
TileIndex tile;
|
||||
TileIndex tile = w->window_number;
|
||||
int x, y, i, hnum, max;
|
||||
uint16 num = WP(w, depot_d).engine_count;
|
||||
|
||||
tile = w->window_number;
|
||||
bool is_localplayer = IsTileOwner(tile, _local_player);
|
||||
|
||||
/* setup disabled buttons */
|
||||
w->disabled_state =
|
||||
IsTileOwner(tile, _local_player) ? 0 : ( (1 << DEPOT_WIDGET_STOP_ALL) | (1 << DEPOT_WIDGET_START_ALL) |
|
||||
(1 << DEPOT_WIDGET_SELL) | (1 << DEPOT_WIDGET_SELL_CHAIN) | (1 << DEPOT_WIDGET_SELL_ALL) |
|
||||
(1 << DEPOT_WIDGET_BUILD) | (1 << DEPOT_WIDGET_CLONE) | (1 << DEPOT_WIDGET_AUTOREPLACE));
|
||||
SetWindowWidgetDisabledState(w, DEPOT_WIDGET_STOP_ALL, !is_localplayer);
|
||||
SetWindowWidgetDisabledState(w, DEPOT_WIDGET_START_ALL, !is_localplayer);
|
||||
SetWindowWidgetDisabledState(w, DEPOT_WIDGET_SELL, !is_localplayer);
|
||||
SetWindowWidgetDisabledState(w, DEPOT_WIDGET_SELL_CHAIN, !is_localplayer);
|
||||
SetWindowWidgetDisabledState(w, DEPOT_WIDGET_SELL_ALL, !is_localplayer);
|
||||
SetWindowWidgetDisabledState(w, DEPOT_WIDGET_BUILD, !is_localplayer);
|
||||
SetWindowWidgetDisabledState(w, DEPOT_WIDGET_CLONE, !is_localplayer);
|
||||
SetWindowWidgetDisabledState(w, DEPOT_WIDGET_AUTOREPLACE, !is_localplayer);
|
||||
|
||||
/* determine amount of items for scroller */
|
||||
if (WP(w, depot_d).type == VEH_Train) {
|
||||
|
@ -740,14 +743,14 @@ static void DepotWndProc(Window *w, WindowEvent *e)
|
|||
} break;
|
||||
|
||||
case DEPOT_WIDGET_SELL: case DEPOT_WIDGET_SELL_CHAIN:
|
||||
if (!HASBIT(w->disabled_state, DEPOT_WIDGET_SELL) &&
|
||||
if (!IsWindowWidgetDisabled(w, DEPOT_WIDGET_SELL) &&
|
||||
WP(w, depot_d).sel != INVALID_VEHICLE) {
|
||||
Vehicle *v;
|
||||
uint command;
|
||||
int sell_cmd;
|
||||
bool is_engine;
|
||||
|
||||
if (HASBIT(w->disabled_state, e->we.click.widget)) return;
|
||||
if (IsWindowWidgetDisabled(w, e->we.click.widget)) return;
|
||||
if (WP(w, depot_d).sel == INVALID_VEHICLE) return;
|
||||
|
||||
HandleButtonClick(w, e->we.click.widget);
|
||||
|
|
|
@ -209,7 +209,6 @@ void GenerateLandscapeWndProc(Window *w, WindowEvent *e)
|
|||
|
||||
switch (e->event) {
|
||||
case WE_PAINT:
|
||||
w->disabled_state = 0;
|
||||
/* TODO -- Above and below you see some lines commented out with '//' in
|
||||
* front of it. This is because currently the widget system can't handle
|
||||
* more than 32 widgets per window, and we need 34. Therefor we draw
|
||||
|
@ -223,18 +222,23 @@ void GenerateLandscapeWndProc(Window *w, WindowEvent *e)
|
|||
|
||||
/* You can't select smoothness if not terragenesis */
|
||||
// if (_patches_newgame.land_generator == 0) w->disabled_state |= (1 << 32 | 1 << 33);
|
||||
if (_patches_newgame.land_generator == 0) w->disabled_state |= (1 << 30 | 1 << 31);
|
||||
SetWindowWidgetDisabledState(w, 30, _patches_newgame.land_generator == 0);
|
||||
SetWindowWidgetDisabledState(w, 31, _patches_newgame.land_generator == 0);
|
||||
/* Disable snowline if not hilly */
|
||||
if (_opt_newgame.landscape != LT_HILLY) w->disabled_state |= (1 << 21 | 1 << 22 | 1 << 23);
|
||||
SetWindowWidgetDisabledState(w, 22, _opt_newgame.landscape != LT_HILLY);
|
||||
/* Disable town and industry in SE */
|
||||
if (_game_mode == GM_EDITOR) w->disabled_state |= (1 << 11 | 1 << 12 | 1 << 13 | 1 << 14 | 1 << 24 | 1 << 25);
|
||||
SetWindowWidgetDisabledState(w, 11, _game_mode == GM_EDITOR);
|
||||
SetWindowWidgetDisabledState(w, 12, _game_mode == GM_EDITOR);
|
||||
SetWindowWidgetDisabledState(w, 13, _game_mode == GM_EDITOR);
|
||||
SetWindowWidgetDisabledState(w, 14, _game_mode == GM_EDITOR);
|
||||
SetWindowWidgetDisabledState(w, 24, _game_mode == GM_EDITOR);
|
||||
SetWindowWidgetDisabledState(w, 25, _game_mode == GM_EDITOR);
|
||||
|
||||
if (_patches_newgame.starting_year <= MIN_YEAR) SETBIT(w->disabled_state, 18);
|
||||
if (_patches_newgame.starting_year >= MAX_YEAR) SETBIT(w->disabled_state, 20);
|
||||
if (_patches_newgame.snow_line_height <= 2 ) SETBIT(w->disabled_state, 21);
|
||||
if (_patches_newgame.snow_line_height >= 13) SETBIT(w->disabled_state, 23);
|
||||
SetWindowWidgetDisabledState(w, 18, _patches_newgame.starting_year <= MIN_YEAR);
|
||||
SetWindowWidgetDisabledState(w, 20, _patches_newgame.starting_year >= MAX_YEAR);
|
||||
SetWindowWidgetDisabledState(w, 21, _patches_newgame.snow_line_height <= 2 || _opt_newgame.landscape != LT_HILLY);
|
||||
SetWindowWidgetDisabledState(w, 23, _patches_newgame.snow_line_height >= 13 || _opt_newgame.landscape != LT_HILLY);
|
||||
|
||||
w->click_state = (w->click_state & ~(0xF << 3)) | (1 << (_opt_newgame.landscape + 3));
|
||||
DrawWindowWidgets(w);
|
||||
|
||||
y = (mode == GLWP_HEIGHTMAP) ? 22 : 0;
|
||||
|
@ -576,11 +580,10 @@ void CreateScenarioWndProc(Window *w, WindowEvent *e)
|
|||
|
||||
switch (e->event) {
|
||||
case WE_PAINT:
|
||||
w->disabled_state = 0;
|
||||
if (_patches_newgame.starting_year <= MIN_YEAR) SETBIT(w->disabled_state, 14);
|
||||
if (_patches_newgame.starting_year >= MAX_YEAR) SETBIT(w->disabled_state, 16);
|
||||
if (_patches_newgame.se_flat_world_height <= 0) SETBIT(w->disabled_state, 17);
|
||||
if (_patches_newgame.se_flat_world_height >= 15) SETBIT(w->disabled_state, 19);
|
||||
SetWindowWidgetDisabledState(w, 14, _patches_newgame.starting_year <= MIN_YEAR);
|
||||
SetWindowWidgetDisabledState(w, 16, _patches_newgame.starting_year >= MAX_YEAR);
|
||||
SetWindowWidgetDisabledState(w, 17, _patches_newgame.se_flat_world_height <= 0);
|
||||
SetWindowWidgetDisabledState(w, 19, _patches_newgame.se_flat_world_height >= 15);
|
||||
|
||||
w->click_state = (w->click_state & ~(0xF << 3)) | (1 << (_opt_newgame.landscape + 3));
|
||||
DrawWindowWidgets(w);
|
||||
|
|
16
graph_gui.c
16
graph_gui.c
|
@ -899,9 +899,9 @@ static void PerformanceRatingDetailWndProc(Window *w, WindowEvent *e)
|
|||
for (i = 0; i < MAX_PLAYERS; i++) {
|
||||
if (!GetPlayer(i)->is_active) {
|
||||
// Check if we have the player as an active player
|
||||
if (!(w->disabled_state & (1 << (i + 13)))) {
|
||||
if (!IsWindowWidgetDisabled(w, i + 13)) {
|
||||
// Bah, player gone :(
|
||||
w->disabled_state += 1 << (i + 13);
|
||||
DisableWindowWidget(w, i + 13);
|
||||
// Is this player selected? If so, select first player (always save? :s)
|
||||
if (w->click_state == 1U << (i + 13)) w->click_state = 1 << 13;
|
||||
// We need a repaint
|
||||
|
@ -911,9 +911,9 @@ static void PerformanceRatingDetailWndProc(Window *w, WindowEvent *e)
|
|||
}
|
||||
|
||||
// Check if we have the player marked as inactive
|
||||
if (w->disabled_state & (1 << (i + 13))) {
|
||||
if (IsWindowWidgetDisabled(w, i + 13)) {
|
||||
// New player! Yippie :p
|
||||
w->disabled_state -= 1 << (i + 13);
|
||||
EnableWindowWidget(w, i + 13);
|
||||
// We need a repaint
|
||||
SetWindowDirty(w);
|
||||
}
|
||||
|
@ -1000,7 +1000,7 @@ static void PerformanceRatingDetailWndProc(Window *w, WindowEvent *e)
|
|||
// Check which button is clicked
|
||||
if (IS_INT_INSIDE(e->we.click.widget, 13, 21)) {
|
||||
// Is it no on disable?
|
||||
if ((w->disabled_state & (1 << e->we.click.widget)) == 0) {
|
||||
if (!IsWindowWidgetDisabled(w, e->we.click.widget)) {
|
||||
w->click_state = 1 << e->we.click.widget;
|
||||
SetWindowDirty(w);
|
||||
}
|
||||
|
@ -1011,11 +1011,9 @@ static void PerformanceRatingDetailWndProc(Window *w, WindowEvent *e)
|
|||
int i;
|
||||
Player *p2;
|
||||
|
||||
w->disabled_state = 0;
|
||||
|
||||
// Hide the player who are not active
|
||||
/* Disable the players who are not active */
|
||||
for (i = 0; i < MAX_PLAYERS; i++) {
|
||||
if (!GetPlayer(i)->is_active) w->disabled_state += 1 << (i + 13);
|
||||
SetWindowWidgetDisabledState(w, i + 13, !GetPlayer(i)->is_active);
|
||||
}
|
||||
// Update all player stats with the current data
|
||||
// (this is because _score_info is not saved to a savegame)
|
||||
|
|
52
main_gui.c
52
main_gui.c
|
@ -107,7 +107,7 @@ bool HandlePlacePushButton(Window *w, int widget, CursorID cursor, int mode, Pla
|
|||
{
|
||||
uint32 mask = 1 << widget;
|
||||
|
||||
if (w->disabled_state & mask) return false;
|
||||
if (IsWindowWidgetDisabled(w, widget)) return false;
|
||||
|
||||
SndPlayFx(SND_15_BEEP);
|
||||
SetWindowDirty(w);
|
||||
|
@ -869,12 +869,9 @@ bool DoZoomInOutWindow(int how, Window *w)
|
|||
assert(wt);
|
||||
|
||||
// update the toolbar button too
|
||||
CLRBIT(wt->disabled_state, button);
|
||||
CLRBIT(wt->disabled_state, button + 1);
|
||||
switch (vp->zoom) {
|
||||
case 0: SETBIT(wt->disabled_state, button); break;
|
||||
case 2: SETBIT(wt->disabled_state, button + 1); break;
|
||||
}
|
||||
SetWindowWidgetDisabledState(wt, button, vp->zoom == 0);
|
||||
SetWindowWidgetDisabledState(wt, button + 1, vp->zoom == 2);
|
||||
|
||||
SetWindowDirty(wt);
|
||||
}
|
||||
|
||||
|
@ -1754,24 +1751,27 @@ static void MainToolbarWndProc(Window *w, WindowEvent *e)
|
|||
{
|
||||
switch (e->event) {
|
||||
case WE_PAINT: {
|
||||
bool is_spectator = _current_player == OWNER_SPECTATOR;
|
||||
|
||||
// Draw brown-red toolbar bg.
|
||||
GfxFillRect(0, 0, w->width-1, w->height-1, 0xB2);
|
||||
GfxFillRect(0, 0, w->width-1, w->height-1, 0xB4 | PALETTE_MODIFIER_GREYOUT);
|
||||
|
||||
// if spectator, disable things
|
||||
if (_current_player == OWNER_SPECTATOR){
|
||||
w->disabled_state |= (1 << 19) | (1<<20) | (1<<21) | (1<<22) | (1<<23);
|
||||
} else {
|
||||
w->disabled_state &= ~((1 << 19) | (1<<20) | (1<<21) | (1<<22) | (1<<23));
|
||||
}
|
||||
/* If spectator, disable all construction buttons
|
||||
* ie : Build road, rail, ships, airports and landscaping
|
||||
* Since enabled state is the default, just disable when needed */
|
||||
SetWindowWidgetDisabledState(w, 19, is_spectator);
|
||||
SetWindowWidgetDisabledState(w, 20, is_spectator);
|
||||
SetWindowWidgetDisabledState(w, 21, is_spectator);
|
||||
SetWindowWidgetDisabledState(w, 22, is_spectator);
|
||||
SetWindowWidgetDisabledState(w, 23, is_spectator);
|
||||
|
||||
DrawWindowWidgets(w);
|
||||
break;
|
||||
}
|
||||
|
||||
case WE_CLICK: {
|
||||
if (_game_mode != GM_MENU && !HASBIT(w->disabled_state, e->we.click.widget))
|
||||
if (_game_mode != GM_MENU && !IsWindowWidgetDisabled(w, e->we.click.widget))
|
||||
_toolbar_button_procs[e->we.click.widget](w);
|
||||
} break;
|
||||
|
||||
|
@ -1961,16 +1961,8 @@ static void ScenEditToolbarWndProc(Window *w, WindowEvent *e)
|
|||
{
|
||||
switch (e->event) {
|
||||
case WE_PAINT:
|
||||
if (_patches_newgame.starting_year <= MIN_YEAR) {
|
||||
SETBIT(w->disabled_state, 6);
|
||||
} else {
|
||||
CLRBIT(w->disabled_state, 6);
|
||||
}
|
||||
if (_patches_newgame.starting_year >= MAX_YEAR) {
|
||||
SETBIT(w->disabled_state, 7);
|
||||
} else {
|
||||
CLRBIT(w->disabled_state, 7);
|
||||
}
|
||||
SetWindowWidgetDisabledState(w, 6, _patches_newgame.starting_year <= MIN_YEAR);
|
||||
SetWindowWidgetDisabledState(w, 7, _patches_newgame.starting_year >= MAX_YEAR);
|
||||
|
||||
// Draw brown-red toolbar bg.
|
||||
GfxFillRect(0, 0, w->width-1, w->height-1, 0xB2);
|
||||
|
@ -2368,19 +2360,15 @@ void ShowVitalWindows(void)
|
|||
|
||||
if (_game_mode != GM_EDITOR) {
|
||||
w = AllocateWindowDesc(&_toolb_normal_desc);
|
||||
w->disabled_state = 1 << 18;
|
||||
DisableWindowWidget(w, 18);
|
||||
} else {
|
||||
w = AllocateWindowDesc(&_toolb_scen_desc);
|
||||
w->disabled_state = 1 << 10;
|
||||
DisableWindowWidget(w, 10);
|
||||
}
|
||||
CLRBITS(w->flags4, WF_WHITE_BORDER_MASK);
|
||||
|
||||
if (_networking) {
|
||||
/* If networking, disable fast-forward button */
|
||||
SETBIT(w->disabled_state, 1);
|
||||
/* If not server, disable pause button */
|
||||
if (!_network_server) SETBIT(w->disabled_state, 0);
|
||||
}
|
||||
SetWindowWidgetDisabledState(w, 0, _networking && !_network_server); // if not server, disable pause button
|
||||
SetWindowWidgetDisabledState(w, 1, _networking); // if networking, disable fast-forward button
|
||||
|
||||
/* 'w' is for sure a WC_MAIN_TOOLBAR */
|
||||
PositionMainToolbar(w);
|
||||
|
|
|
@ -199,7 +199,7 @@ static void MusicTrackSelectionWndProc(Window *w, WindowEvent *e)
|
|||
uint i;
|
||||
int y;
|
||||
|
||||
w->disabled_state = (msf.playlist <= 3) ? (1 << 11) : 0;
|
||||
SetWindowWidgetDisabledState(w, 11, msf.playlist <= 3);
|
||||
w->click_state |= 0x18;
|
||||
DrawWindowWidgets(w);
|
||||
|
||||
|
|
|
@ -238,18 +238,12 @@ static void NetworkGameWindowWndProc(Window *w, WindowEvent *e)
|
|||
}
|
||||
if (ld->flags & VL_RESORT) SortNetworkGameList(&WP(w, network_ql_d));
|
||||
|
||||
w->disabled_state = 0;
|
||||
|
||||
if (sel == NULL) {
|
||||
SETBIT(w->disabled_state, 16); SETBIT(w->disabled_state, 17);
|
||||
} else if (!sel->online) {
|
||||
SETBIT(w->disabled_state, 16); // Server offline, join button disabled
|
||||
} else if (sel->info.clients_on >= sel->info.clients_max) {
|
||||
SETBIT(w->disabled_state, 16); // Server full, join button disabled
|
||||
} else if (!sel->info.compatible) {
|
||||
// revisions don't match, check if server has no revision; then allow connection
|
||||
SETBIT(w->disabled_state, 16); // Revision mismatch, join button disabled
|
||||
}
|
||||
SetWindowWidgetDisabledState(w, 17, sel == NULL);
|
||||
/* Join Button disabling conditions */
|
||||
SetWindowWidgetDisabledState(w, 16, sel == NULL || // no Selected Server
|
||||
!sel->online || // Server offline
|
||||
sel->info.clients_on >= sel->info.clients_max || // Server full
|
||||
!sel->info.compatible); // Revision mismatch
|
||||
|
||||
SetDParam(0, 0x00);
|
||||
SetDParam(7, _lan_internet_types_dropdown[_network_lan_internet]);
|
||||
|
@ -823,14 +817,12 @@ static void NetworkLobbyWindowWndProc(Window *w, WindowEvent *e)
|
|||
const NetworkGameInfo *gi = &nd->server->info;
|
||||
int y = NET_PRC__OFFSET_TOP_WIDGET_COMPANY, pos;
|
||||
|
||||
w->disabled_state = 0;
|
||||
|
||||
if (nd->company == (byte)-1) SETBIT(w->disabled_state, 7);
|
||||
if (gi->companies_on >= gi->companies_max) SETBIT(w->disabled_state, 8);
|
||||
if (gi->spectators_on >= gi->spectators_max) SETBIT(w->disabled_state, 9);
|
||||
SetWindowWidgetDisabledState(w, 7, nd->company == (byte)-1);
|
||||
SetWindowWidgetDisabledState(w, 8, gi->companies_on >= gi->companies_max);
|
||||
/* You can not join a server as spectator when it has no companies active..
|
||||
* it causes some nasty crashes */
|
||||
if (gi->companies_on == 0) SETBIT(w->disabled_state, 9);
|
||||
SetWindowWidgetDisabledState(w, 9, gi->spectators_on >= gi->spectators_max ||
|
||||
gi->companies_on == 0);
|
||||
|
||||
DrawWindowWidgets(w);
|
||||
|
||||
|
|
37
news_gui.c
37
news_gui.c
|
@ -685,32 +685,14 @@ void ShowMessageHistory(void)
|
|||
static void SetMessageButtonStates(Window *w, byte value, int element)
|
||||
{
|
||||
element *= 2;
|
||||
switch (value) {
|
||||
case 0: /* Off */
|
||||
SETBIT(w->disabled_state, element + 3);
|
||||
CLRBIT(w->disabled_state, element + 3 + 1);
|
||||
break;
|
||||
case 1: /* Summary */
|
||||
CLRBIT(w->disabled_state, element + 3);
|
||||
CLRBIT(w->disabled_state, element + 3 + 1);
|
||||
break;
|
||||
case 2: /* Full */
|
||||
SETBIT(w->disabled_state, element + 3 + 1);
|
||||
CLRBIT(w->disabled_state, element + 3);
|
||||
break;
|
||||
default: NOT_REACHED();
|
||||
}
|
||||
|
||||
SetWindowWidgetDisabledState(w, element + 3, value == 0);
|
||||
SetWindowWidgetDisabledState(w, element + 3 + 1, value == 2);
|
||||
}
|
||||
|
||||
static void MessageOptionsWndProc(Window *w, WindowEvent *e)
|
||||
{
|
||||
static const StringID message_opt[] = {STR_OFF, STR_SUMMARY, STR_FULL, INVALID_STRING_ID};
|
||||
static const uint32 message_val[] = {0x0, 0x55555555, 0xAAAAAAAA}; // 0x555.. = 01010101010101010101 (all summary), 286.. 1010... (full)
|
||||
static const uint32 message_dis[] = {
|
||||
(1 << 3) | (1 << 5) | (1 << 7) | (1 << 9) | (1 << 11) | (1 << 13) | (1 << 15) | (1 << 17) | (1 << 19) | (1 << 21),
|
||||
0,
|
||||
(1 << 4) | (1 << 6) | (1 << 8) | (1 << 10) | (1 << 12) | (1 << 14) | (1 << 16) | (1 << 18) | (1 << 20) | (1 << 22),
|
||||
};
|
||||
|
||||
/* WP(w, def_d).data_1 are stores the clicked state of the fake widgets
|
||||
* WP(w, def_d).data_2 stores state of the ALL on/off/summary button */
|
||||
|
@ -784,18 +766,23 @@ static void MessageOptionsWndProc(Window *w, WindowEvent *e)
|
|||
} break;
|
||||
} break;
|
||||
|
||||
case WE_DROPDOWN_SELECT: /* Select all settings for newsmessages */
|
||||
case WE_DROPDOWN_SELECT: {/* Select all settings for newsmessages */
|
||||
int i;
|
||||
|
||||
WP(w, def_d).data_2 = e->we.dropdown.index;
|
||||
_news_display_opt = message_val[WP(w, def_d).data_2];
|
||||
w->disabled_state = message_dis[WP(w, def_d).data_2];
|
||||
|
||||
for (i = 0; i != 10; i++) {
|
||||
SB(_news_display_opt, i*2, 2, e->we.dropdown.index);
|
||||
SetMessageButtonStates(w, e->we.dropdown.index, i);
|
||||
}
|
||||
SetWindowDirty(w);
|
||||
break;
|
||||
}
|
||||
|
||||
case WE_TIMEOUT: /* XXX - Hack to animate 'fake' buttons */
|
||||
WP(w, def_d).data_1 = 0;
|
||||
SetWindowDirty(w);
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
64
order_gui.c
64
order_gui.c
|
@ -57,22 +57,13 @@ static void DrawOrdersWindow(Window *w)
|
|||
int sel;
|
||||
int y, i;
|
||||
bool shared_orders;
|
||||
bool not_localplayer;
|
||||
byte color;
|
||||
|
||||
v = GetVehicle(w->window_number);
|
||||
|
||||
w->disabled_state = (v->owner == _local_player) ? 0 : (
|
||||
1 << 4 | //skip
|
||||
1 << 5 | //delete
|
||||
1 << 6 | //non-stop
|
||||
1 << 7 | //go-to
|
||||
1 << 8 | //full load
|
||||
1 << 9 | //unload
|
||||
1 << 10 //transfer
|
||||
);
|
||||
not_localplayer = v->owner != _local_player;
|
||||
|
||||
if (v->type != VEH_Train) {
|
||||
SETBIT(w->disabled_state, 6); // Disable non-stop for non-trains
|
||||
switch (v->type) {
|
||||
case VEH_Road: w->widget[11].data = STR_LORRY; break;
|
||||
case VEH_Ship: w->widget[11].data = STR_SHIP; break;
|
||||
|
@ -83,16 +74,6 @@ static void DrawOrdersWindow(Window *w)
|
|||
|
||||
shared_orders = IsOrderListShared(v);
|
||||
|
||||
if (!shared_orders || v->orders == NULL) {
|
||||
SETBIT(w->disabled_state, 11); // Disable list of vehicles with the same shared orders if there are no list
|
||||
}
|
||||
|
||||
if ((uint)v->num_orders + (shared_orders?1:0) <= (uint)WP(w,order_d).sel)
|
||||
SETBIT(w->disabled_state, 5); /* delete */
|
||||
|
||||
if (v->num_orders == 0)
|
||||
SETBIT(w->disabled_state, 4); /* skip */
|
||||
|
||||
SetVScrollCount(w, v->num_orders + 1);
|
||||
|
||||
sel = OrderGetSel(w);
|
||||
|
@ -100,33 +81,44 @@ static void DrawOrdersWindow(Window *w)
|
|||
|
||||
order = GetVehicleOrder(v, sel);
|
||||
|
||||
/* skip */
|
||||
SetWindowWidgetDisabledState(w, 4, not_localplayer || v->num_orders == 0);
|
||||
|
||||
/* delete */
|
||||
SetWindowWidgetDisabledState(w, 5, not_localplayer ||
|
||||
(uint)v->num_orders + (shared_orders ? 1 : 0) <= (uint)WP(w, order_d).sel);
|
||||
|
||||
/* non-stop only for trains */
|
||||
SetWindowWidgetDisabledState(w, 6, not_localplayer || v->type != VEH_Train
|
||||
|| order == NULL);
|
||||
SetWindowWidgetDisabledState(w, 7, not_localplayer); // go-to
|
||||
SetWindowWidgetDisabledState(w, 8, not_localplayer || order == NULL); // full load
|
||||
SetWindowWidgetDisabledState(w, 9, not_localplayer || order == NULL); // unload
|
||||
SetWindowWidgetDisabledState(w, 10, not_localplayer || order == NULL); // transfer
|
||||
SetWindowWidgetDisabledState(w, 11, !shared_orders || v->orders == NULL); // Disable list of vehicles with the same shared orders if there are no list
|
||||
|
||||
if (order != NULL) {
|
||||
switch (order->type) {
|
||||
case OT_GOTO_STATION:
|
||||
break;
|
||||
|
||||
case OT_GOTO_DEPOT:
|
||||
SETBIT(w->disabled_state, 9); /* unload */
|
||||
SETBIT(w->disabled_state, 10); /* transfer */
|
||||
DisableWindowWidget(w, 9);
|
||||
DisableWindowWidget(w, 10);
|
||||
SetDParam(2,STR_SERVICE);
|
||||
break;
|
||||
|
||||
case OT_GOTO_WAYPOINT:
|
||||
SETBIT(w->disabled_state, 8); /* full load */
|
||||
SETBIT(w->disabled_state, 9); /* unload */
|
||||
SETBIT(w->disabled_state, 10); /* transfer */
|
||||
DisableWindowWidget(w, 8);
|
||||
DisableWindowWidget(w, 9);
|
||||
DisableWindowWidget(w, 10);
|
||||
break;
|
||||
|
||||
default:
|
||||
SETBIT(w->disabled_state, 6); /* nonstop */
|
||||
SETBIT(w->disabled_state, 8); /* full load */
|
||||
SETBIT(w->disabled_state, 9); /* unload */
|
||||
default: // every other orders
|
||||
DisableWindowWidget(w, 6);
|
||||
DisableWindowWidget(w, 8);
|
||||
DisableWindowWidget(w, 9);
|
||||
}
|
||||
} else {
|
||||
SETBIT(w->disabled_state, 6); /* nonstop */
|
||||
SETBIT(w->disabled_state, 8); /* full load */
|
||||
SETBIT(w->disabled_state, 9); /* unload */
|
||||
SETBIT(w->disabled_state, 10); /* transfer */
|
||||
}
|
||||
|
||||
SetDParam(0, v->string_id);
|
||||
|
@ -477,7 +469,7 @@ static void OrdersWndProc(Window *w, WindowEvent *e)
|
|||
if (e->we.keypress.keycode == _order_keycodes[i]) {
|
||||
e->we.keypress.cont = false;
|
||||
//see if the button is disabled
|
||||
if (!HASBIT(w->disabled_state, i + 4)) _order_button_proc[i](w, v);
|
||||
if (!IsWindowWidgetDisabled(w, i + 4)) _order_button_proc[i](w, v);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
41
player_gui.c
41
player_gui.c
|
@ -154,7 +154,7 @@ static void PlayerFinancesWndProc(Window *w, WindowEvent *e)
|
|||
PlayerID player = w->window_number;
|
||||
const Player *p = GetPlayer(player);
|
||||
|
||||
w->disabled_state = p->current_loan != 0 ? 0 : (1 << 7);
|
||||
SetWindowWidgetDisabledState(w, 7, p->current_loan == 0);
|
||||
|
||||
SetDParam(0, p->name_1);
|
||||
SetDParam(1, p->name_2);
|
||||
|
@ -322,11 +322,13 @@ static void SelectPlayerLiveryWndProc(Window *w, WindowEvent *e)
|
|||
LiveryScheme scheme = LS_DEFAULT;
|
||||
int y = 51;
|
||||
|
||||
if ((WP(w, livery_d).sel == 0)) {
|
||||
/* Disable dropdown controls if no scheme is selected */
|
||||
w->disabled_state = 1 << 9 | 1 << 10 | 1 << 11 | 1 << 12;
|
||||
} else {
|
||||
w->disabled_state = 0;
|
||||
/* Disable dropdown controls if no scheme is selected */
|
||||
SetWindowWidgetDisabledState(w, 9, (WP(w, livery_d).sel == 0));
|
||||
SetWindowWidgetDisabledState(w, 10, (WP(w, livery_d).sel == 0));
|
||||
SetWindowWidgetDisabledState(w, 11, (WP(w, livery_d).sel == 0));
|
||||
SetWindowWidgetDisabledState(w, 12, (WP(w, livery_d).sel == 0));
|
||||
|
||||
if (!(WP(w, livery_d).sel == 0)) {
|
||||
for (scheme = 0; scheme < LS_END; scheme++) {
|
||||
if (HASBIT(WP(w, livery_d).sel, scheme)) break;
|
||||
}
|
||||
|
@ -649,29 +651,29 @@ static void PlayerCompanyWndProc(Window *w, WindowEvent *e)
|
|||
switch (e->event) {
|
||||
case WE_PAINT: {
|
||||
const Player *p = GetPlayer(w->window_number);
|
||||
uint32 dis = 0;
|
||||
|
||||
if (!IsWindowOfPrototype(w, _other_player_company_widgets)) {
|
||||
AssignWidgetToWindow(w, (p->location_of_house != 0) ? _my_player_company_bh_widgets : _my_player_company_widgets);
|
||||
|
||||
SetWindowWidgetHiddenState(w, 11, !_networking); // Hide company-password widget
|
||||
} else {
|
||||
if (p->location_of_house == 0) SETBIT(dis, 7);
|
||||
SetWindowWidgetDisabledState(w, 7, p->location_of_house == 0);
|
||||
|
||||
if (_patches.allow_shares) { /* shares are allowed */
|
||||
if (_patches.allow_shares) { // Shares are allowed
|
||||
/* If all shares are owned by someone (none by nobody), disable buy button */
|
||||
if (GetAmountOwnedBy(p, OWNER_SPECTATOR) == 0) SETBIT(dis, 9);
|
||||
|
||||
/* Only 25% left to buy. If the player is human, disable buying it up.. TODO issues! */
|
||||
if (GetAmountOwnedBy(p, OWNER_SPECTATOR) == 1 && !p->is_ai) SETBIT(dis, 9);
|
||||
SetWindowWidgetDisabledState(w, 9, GetAmountOwnedBy(p, OWNER_SPECTATOR) == 0 ||
|
||||
/* Only 25% left to buy. If the player is human, disable buying it up.. TODO issues! */
|
||||
(GetAmountOwnedBy(p, OWNER_SPECTATOR) == 1 && !p->is_ai) ||
|
||||
/* Spectators cannot do anything of course */
|
||||
_local_player == OWNER_SPECTATOR);
|
||||
|
||||
/* If the player doesn't own any shares, disable sell button */
|
||||
if (GetAmountOwnedBy(p, _local_player) == 0) SETBIT(dis, 10);
|
||||
|
||||
/* Spectators cannot do anything of course */
|
||||
if (_local_player == OWNER_SPECTATOR) dis |= (1 << 9) | (1 << 10);
|
||||
} else { /* shares are not allowed, disable buy/sell buttons */
|
||||
dis |= (1 << 9) | (1 << 10);
|
||||
SetWindowWidgetDisabledState(w, 10, (GetAmountOwnedBy(p, _local_player) == 0) ||
|
||||
/* Spectators cannot do anything of course */
|
||||
_local_player == OWNER_SPECTATOR);
|
||||
} else { // Shares are not allowed, disable buy/sell buttons
|
||||
DisableWindowWidget(w, 9);
|
||||
DisableWindowWidget(w, 10);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -679,7 +681,6 @@ static void PlayerCompanyWndProc(Window *w, WindowEvent *e)
|
|||
SetDParam(1, p->name_2);
|
||||
SetDParam(2, GetPlayerNameString((byte)w->window_number, 3));
|
||||
|
||||
w->disabled_state = dis;
|
||||
DrawWindowWidgets(w);
|
||||
|
||||
SetDParam(0, p->inaugurated_year);
|
||||
|
|
33
rail_gui.c
33
rail_gui.c
|
@ -292,7 +292,7 @@ static void BuildRailClick_Tunnel(Window *w)
|
|||
|
||||
static void BuildRailClick_Remove(Window *w)
|
||||
{
|
||||
if (HASBIT(w->disabled_state, 16)) return;
|
||||
if (IsWindowWidgetDisabled(w, 16)) return;
|
||||
SetWindowDirty(w);
|
||||
SndPlayFx(SND_15_BEEP);
|
||||
|
||||
|
@ -405,24 +405,25 @@ static const uint16 _rail_keycodes[] = {
|
|||
};
|
||||
|
||||
|
||||
static void UpdateRemoveWidgetStatus(Window *w, int clicked_widget)
|
||||
{
|
||||
switch (clicked_widget) {
|
||||
case 4: case 5: case 6: case 7: case 8: case 11: case 12: case 13: EnableWindowWidget(w, 16); break;
|
||||
default: DisableWindowWidget(w, 16); w->click_state &= ~(1 << 16); break;
|
||||
}
|
||||
}
|
||||
|
||||
static void BuildRailToolbWndProc(Window *w, WindowEvent *e)
|
||||
{
|
||||
switch (e->event) {
|
||||
case WE_PAINT:
|
||||
w->disabled_state &= ~(1 << 16);
|
||||
if (!(w->click_state & ((1<<4)|(1<<5)|(1<<6)|(1<<7)|(1<<8)|(1<<11)|(1<<12)|(1<<13)))) {
|
||||
w->disabled_state |= (1 << 16);
|
||||
w->click_state &= ~(1<<16);
|
||||
}
|
||||
DrawWindowWidgets(w);
|
||||
break;
|
||||
|
||||
case WE_PAINT: DrawWindowWidgets(w); break;
|
||||
case WE_CLICK:
|
||||
if (e->we.click.widget >= 4) {
|
||||
_remove_button_clicked = false;
|
||||
_build_railroad_button_proc[e->we.click.widget - 4](w);
|
||||
}
|
||||
break;
|
||||
UpdateRemoveWidgetStatus(w, e->we.click.widget);
|
||||
break;
|
||||
|
||||
case WE_KEYPRESS: {
|
||||
uint i;
|
||||
|
@ -432,6 +433,7 @@ static void BuildRailToolbWndProc(Window *w, WindowEvent *e)
|
|||
e->we.keypress.cont = false;
|
||||
_remove_button_clicked = false;
|
||||
_build_railroad_button_proc[i](w);
|
||||
UpdateRemoveWidgetStatus(w, i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -651,10 +653,9 @@ static void StationBuildWndProc(Window *w, WindowEvent *e)
|
|||
SetTileSelectBigSize(-rad, -rad, 2 * rad, 2 * rad);
|
||||
|
||||
/* Update buttons for correct spread value */
|
||||
w->disabled_state = 0;
|
||||
for (bits = _patches.station_spread; bits < 7; bits++) {
|
||||
SETBIT(w->disabled_state, bits + 5);
|
||||
SETBIT(w->disabled_state, bits + 12);
|
||||
DisableWindowWidget(w, bits + 5);
|
||||
DisableWindowWidget(w, bits + 12);
|
||||
}
|
||||
|
||||
if (newstations) {
|
||||
|
@ -662,8 +663,8 @@ static void StationBuildWndProc(Window *w, WindowEvent *e)
|
|||
|
||||
if (statspec != NULL) {
|
||||
for (bits = 0; bits < 7; bits++) {
|
||||
if (HASBIT(statspec->disallowed_platforms, bits)) SETBIT(w->disabled_state, bits + 5);
|
||||
if (HASBIT(statspec->disallowed_lengths, bits)) SETBIT(w->disabled_state, bits + 12);
|
||||
SetWindowWidgetDisabledState(w, bits + 5, HASBIT(statspec->disallowed_platforms, bits));
|
||||
SetWindowWidgetDisabledState(w, bits + 12, HASBIT(statspec->disallowed_lengths, bits));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -155,7 +155,7 @@ static void BuildRoadClick_Tunnel(Window *w)
|
|||
|
||||
static void BuildRoadClick_Remove(Window *w)
|
||||
{
|
||||
if (HASBIT(w->disabled_state, 11)) return;
|
||||
if (IsWindowWidgetDisabled(w, 11)) return;
|
||||
SetWindowDirty(w);
|
||||
SndPlayFx(SND_15_BEEP);
|
||||
TOGGLEBIT(w->click_state, 11);
|
||||
|
@ -184,10 +184,11 @@ static void BuildRoadToolbWndProc(Window *w, WindowEvent *e)
|
|||
{
|
||||
switch (e->event) {
|
||||
case WE_PAINT:
|
||||
w->disabled_state &= ~(1 << 11);
|
||||
if (!(w->click_state & ((1<<3)|(1<<4)))) {
|
||||
w->disabled_state |= (1 << 11);
|
||||
DisableWindowWidget(w, 11);
|
||||
w->click_state &= ~(1<<11);
|
||||
} else {
|
||||
EnableWindowWidget(w, 11);
|
||||
}
|
||||
DrawWindowWidgets(w);
|
||||
break;
|
||||
|
|
|
@ -86,9 +86,10 @@ static void RoadVehDetailsWndProc(Window *w, WindowEvent *e)
|
|||
const Vehicle *v = GetVehicle(w->window_number);
|
||||
StringID str;
|
||||
|
||||
w->disabled_state = v->owner == _local_player ? 0 : (1 << 2);
|
||||
SetWindowWidgetDisabledState(w, 2, v->owner != _local_player);
|
||||
// disable service-scroller when interval is set to disabled
|
||||
if (!_patches.servint_roadveh) w->disabled_state |= (1 << 5) | (1 << 6);
|
||||
SetWindowWidgetDisabledState(w, 5, !_patches.servint_roadveh);
|
||||
SetWindowWidgetDisabledState(w, 6, !_patches.servint_roadveh);
|
||||
|
||||
SetDParam(0, v->string_id);
|
||||
SetDParam(1, v->unitnumber);
|
||||
|
@ -236,10 +237,11 @@ static void RoadVehViewWndProc(Window *w, WindowEvent *e)
|
|||
Vehicle *v = GetVehicle(w->window_number);
|
||||
StringID str;
|
||||
|
||||
w->disabled_state = (v->owner != _local_player) ? (1 << 8 | 1 << 7 | 1 << 12) : 0;
|
||||
|
||||
SetWindowWidgetDisabledState(w, 7, v->owner != _local_player);
|
||||
SetWindowWidgetDisabledState(w, 8, v->owner != _local_player);
|
||||
/* Disable refit button if vehicle not refittable */
|
||||
if (_engine_info[v->engine_type].refit_mask == 0) SETBIT(w->disabled_state, 12);
|
||||
SetWindowWidgetDisabledState(w, 12, v->owner != _local_player ||
|
||||
_engine_info[v->engine_type].refit_mask == 0);
|
||||
|
||||
/* draw widgets & caption */
|
||||
SetDParam(0, v->string_id);
|
||||
|
@ -403,7 +405,7 @@ static void DrawNewRoadVehWindow(Window *w)
|
|||
int sel;
|
||||
int y;
|
||||
|
||||
if (w->window_number == 0) w->disabled_state = 1 << 5;
|
||||
SetWindowWidgetDisabledState(w, 5, w->window_number == 0);
|
||||
|
||||
count = 0;
|
||||
for (e = ROAD_ENGINES_INDEX; e < ROAD_ENGINES_INDEX + NUM_ROAD_ENGINES; e++) {
|
||||
|
@ -541,3 +543,4 @@ void ShowBuildRoadVehWindow(TileIndex tile)
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -95,7 +95,9 @@ static void GameOptionsWndProc(Window *w, WindowEvent *e)
|
|||
case WE_PAINT: {
|
||||
int i;
|
||||
StringID str = STR_02BE_DEFAULT;
|
||||
w->disabled_state = (_vehicle_design_names & 1) ? (++str, 0) : (1 << 21);
|
||||
|
||||
SetWindowWidgetDisabledState(w, 21, !(_vehicle_design_names & 1));
|
||||
if (!IsWindowWidgetDisabled(w, 21)) str = STR_02BF_CUSTOM;
|
||||
SetDParam(0, str);
|
||||
SetDParam(1, _currency_specs[_opt_ptr->currency].name);
|
||||
SetDParam(2, STR_UNITS_IMPERIAL + _opt_ptr->units);
|
||||
|
@ -381,17 +383,15 @@ static GameOptions _opt_mod_temp;
|
|||
static void GameDifficultyWndProc(Window *w, WindowEvent *e)
|
||||
{
|
||||
switch (e->event) {
|
||||
case WE_CREATE: /* Setup disabled buttons when creating window */
|
||||
// disable all other difficulty buttons during gameplay except for 'custom'
|
||||
w->disabled_state = (_game_mode != GM_NORMAL) ? 0 : (1 << 3) | (1 << 4) | (1 << 5) | (1 << 6);
|
||||
case WE_CREATE: // Setup disabled buttons when creating window
|
||||
/* disable all other difficulty buttons during gameplay except for 'custom' */
|
||||
SetWindowWidgetDisabledState(w, 3, _game_mode == GM_NORMAL);
|
||||
SetWindowWidgetDisabledState(w, 4, _game_mode == GM_NORMAL);
|
||||
SetWindowWidgetDisabledState(w, 5, _game_mode == GM_NORMAL);
|
||||
SetWindowWidgetDisabledState(w, 6, _game_mode == GM_NORMAL);
|
||||
SetWindowWidgetDisabledState(w, 7, _game_mode == GM_EDITOR || _networking); // highscore chart in multiplayer
|
||||
SetWindowWidgetDisabledState(w, 10, _networking && !_network_server); // Save-button in multiplayer (and if client)
|
||||
|
||||
if (_game_mode == GM_EDITOR) SETBIT(w->disabled_state, 7);
|
||||
|
||||
if (_networking) {
|
||||
SETBIT(w->disabled_state, 7); // disable highscore chart in multiplayer
|
||||
if (!_network_server)
|
||||
SETBIT(w->disabled_state, 10); // Disable save-button in multiplayer (and if client)
|
||||
}
|
||||
break;
|
||||
case WE_PAINT: {
|
||||
uint32 click_a, click_b, disabled;
|
||||
|
@ -1049,7 +1049,9 @@ void ShowNewgrf(void)
|
|||
w->vscroll.cap = 12;
|
||||
w->vscroll.count = count;
|
||||
w->vscroll.pos = 0;
|
||||
w->disabled_state = (1 << 5) | (1 << 6) | (1 << 7);
|
||||
DisableWindowWidget(w, 5); // Small up arrow
|
||||
DisableWindowWidget(w, 6); // Small sown arrow
|
||||
DisableWindowWidget(w, 7); // Set parameter button
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
17
ship_gui.c
17
ship_gui.c
|
@ -85,9 +85,10 @@ static void ShipDetailsWndProc(Window *w, WindowEvent *e)
|
|||
const Vehicle *v = GetVehicle(w->window_number);
|
||||
StringID str;
|
||||
|
||||
w->disabled_state = v->owner == _local_player ? 0 : (1 << 2);
|
||||
SetWindowWidgetDisabledState(w, 2, v->owner != _local_player);
|
||||
// disable service-scroller when interval is set to disabled
|
||||
if (!_patches.servint_ships) w->disabled_state |= (1 << 5) | (1 << 6);
|
||||
SetWindowWidgetDisabledState(w, 5, !_patches.servint_ships);
|
||||
SetWindowWidgetDisabledState(w, 6, !_patches.servint_ships);
|
||||
|
||||
SetDParam(0, v->string_id);
|
||||
SetDParam(1, v->unitnumber);
|
||||
|
@ -251,7 +252,7 @@ static void NewShipWndProc(Window *w, WindowEvent *e)
|
|||
int sel;
|
||||
int y;
|
||||
|
||||
if (w->window_number == 0) w->disabled_state = 1 << 5;
|
||||
SetWindowWidgetDisabledState(w, 5, w->window_number == 0);
|
||||
|
||||
count = 0;
|
||||
for (eid = SHIP_ENGINES_INDEX; eid < SHIP_ENGINES_INDEX + NUM_SHIP_ENGINES; eid++) {
|
||||
|
@ -374,16 +375,16 @@ static void ShipViewWndProc(Window *w, WindowEvent *e)
|
|||
switch (e->event) {
|
||||
case WE_PAINT: {
|
||||
Vehicle *v = GetVehicle(w->window_number);
|
||||
uint32 disabled = 1<<8;
|
||||
StringID str;
|
||||
|
||||
// Possible to refit?
|
||||
/* Possible to refit? */
|
||||
if (ShipVehInfo(v->engine_type)->refittable && IsShipInDepotStopped(v)) {
|
||||
disabled = 0;
|
||||
EnableWindowWidget(w, 7);
|
||||
EnableWindowWidget(w, 8);
|
||||
}
|
||||
|
||||
if (v->owner != _local_player) disabled |= 1<<8 | 1<<7;
|
||||
w->disabled_state = disabled;
|
||||
SetWindowWidgetDisabledState(w, 7, v->owner != _local_player);
|
||||
SetWindowWidgetDisabledState(w, 8, v->owner != _local_player);
|
||||
|
||||
/* draw widgets & caption */
|
||||
SetDParam(0, v->string_id);
|
||||
|
|
|
@ -1010,7 +1010,7 @@ static void ExtraViewPortWndProc(Window *w, WindowEvent *e)
|
|||
{
|
||||
switch (e->event) {
|
||||
case WE_CREATE: /* Disable zoom in button */
|
||||
w->disabled_state = (1 << 5);
|
||||
DisableWindowWidget(w, 5);
|
||||
break;
|
||||
|
||||
case WE_PAINT:
|
||||
|
|
|
@ -541,13 +541,11 @@ static void DrawStationViewWindow(Window *w)
|
|||
}
|
||||
SetVScrollCount(w, num);
|
||||
|
||||
w->disabled_state = st->owner == _local_player ? 0 : (1 << 9);
|
||||
|
||||
if (!(st->facilities & FACIL_TRAIN)) SETBIT(w->disabled_state, 10);
|
||||
if (!(st->facilities & FACIL_TRUCK_STOP) &&
|
||||
!(st->facilities & FACIL_BUS_STOP)) SETBIT(w->disabled_state, 11);
|
||||
if (!(st->facilities & FACIL_AIRPORT)) SETBIT(w->disabled_state, 12);
|
||||
if (!(st->facilities & FACIL_DOCK)) SETBIT(w->disabled_state, 13);
|
||||
SetWindowWidgetDisabledState(w, 9, st->owner != _local_player);
|
||||
SetWindowWidgetDisabledState(w, 10, !(st->facilities & FACIL_TRAIN));
|
||||
SetWindowWidgetDisabledState(w, 11, !(st->facilities & FACIL_TRUCK_STOP) && !(st->facilities & FACIL_BUS_STOP));
|
||||
SetWindowWidgetDisabledState(w, 12, !(st->facilities & FACIL_AIRPORT));
|
||||
SetWindowWidgetDisabledState(w, 13, !(st->facilities & FACIL_DOCK));
|
||||
|
||||
SetDParam(0, st->index);
|
||||
SetDParam(1, st->facilities);
|
||||
|
|
|
@ -106,7 +106,7 @@ static void TownAuthorityWndProc(Window *w, WindowEvent *e)
|
|||
if (WP(w,def_d).data_1 != -1 && !HASBIT(buttons, WP(w,def_d).data_1))
|
||||
WP(w,def_d).data_1 = -1;
|
||||
|
||||
w->disabled_state = (WP(w,def_d).data_1 == -1) ? (1 << 6) : 0;
|
||||
SetWindowWidgetDisabledState(w, 6, WP(w, def_d).data_1 == -1);
|
||||
|
||||
{
|
||||
int y;
|
||||
|
@ -234,7 +234,7 @@ static void TownViewWndProc(Window *w, WindowEvent *e)
|
|||
switch (e->event) {
|
||||
case WE_PAINT:
|
||||
// disable renaming town in network games if you are not the server
|
||||
if (_networking && !_network_server) SETBIT(w->disabled_state, 8);
|
||||
SetWindowWidgetDisabledState(w, 8, _networking && !_network_server);
|
||||
|
||||
SetDParam(0, t->index);
|
||||
DrawWindowWidgets(w);
|
||||
|
|
37
train_gui.c
37
train_gui.c
|
@ -206,7 +206,7 @@ static void NewRailVehicleWndProc(Window *w, WindowEvent *e)
|
|||
switch (e->event) {
|
||||
case WE_PAINT:
|
||||
|
||||
if (w->window_number == 0) SETBIT(w->disabled_state, 5);
|
||||
SetWindowWidgetDisabledState(w, 5, w->window_number == 0);
|
||||
|
||||
{
|
||||
int count = 0;
|
||||
|
@ -424,21 +424,23 @@ static void TrainViewWndProc(Window *w, WindowEvent *e)
|
|||
case WE_PAINT: {
|
||||
const Vehicle *v, *u;
|
||||
StringID str;
|
||||
bool is_localplayer;
|
||||
|
||||
v = GetVehicle(w->window_number);
|
||||
|
||||
if (v->owner != _local_player) {
|
||||
w->disabled_state = 0x3380;
|
||||
} else {
|
||||
w->disabled_state = 0;
|
||||
|
||||
SETBIT(w->disabled_state, 12);
|
||||
is_localplayer = v->owner == _local_player;
|
||||
SetWindowWidgetDisabledState(w, 7, !is_localplayer);
|
||||
SetWindowWidgetDisabledState(w, 8, !is_localplayer);
|
||||
SetWindowWidgetDisabledState(w, 9, !is_localplayer);
|
||||
SetWindowWidgetDisabledState(w, 12, !is_localplayer);
|
||||
SetWindowWidgetDisabledState(w, 13, !is_localplayer);
|
||||
|
||||
if (is_localplayer) {
|
||||
/* See if any vehicle can be refitted */
|
||||
for (u = v; u != NULL; u = u->next) {
|
||||
if (EngInfo(u->engine_type)->refit_mask != 0 ||
|
||||
(!(RailVehInfo(v->engine_type)->flags & RVI_WAGON) && v->cargo_cap != 0)) {
|
||||
CLRBIT(w->disabled_state, 12);
|
||||
EnableWindowWidget(w, 12);
|
||||
/* We have a refittable carriage, bail out */
|
||||
break;
|
||||
}
|
||||
|
@ -682,11 +684,12 @@ static void DrawTrainDetailsWindow(Window *w)
|
|||
|
||||
SetVScrollCount(w, num);
|
||||
|
||||
w->disabled_state = 1 << (det_tab + 9);
|
||||
if (v->owner != _local_player) w->disabled_state |= (1 << 2);
|
||||
DisableWindowWidget(w, det_tab + 9);
|
||||
SetWindowWidgetDisabledState(w, 2, v->owner != _local_player);
|
||||
|
||||
// disable service-scroller when interval is set to disabled
|
||||
if (!_patches.servint_trains) w->disabled_state |= (1 << 6) | (1 << 7);
|
||||
/* disable service-scroller when interval is set to disabled */
|
||||
SetWindowWidgetDisabledState(w, 6, !_patches.servint_trains);
|
||||
SetWindowWidgetDisabledState(w, 7, !_patches.servint_trains);
|
||||
|
||||
SetDParam(0, v->string_id);
|
||||
SetDParam(1, v->unitnumber);
|
||||
|
@ -801,11 +804,11 @@ do_change_service_int:
|
|||
case 10: // Information
|
||||
case 11: // Capacities
|
||||
case 12: // Total cargo
|
||||
CLRBIT(w->disabled_state, 9);
|
||||
CLRBIT(w->disabled_state, 10);
|
||||
CLRBIT(w->disabled_state, 11);
|
||||
CLRBIT(w->disabled_state, 12);
|
||||
SETBIT(w->disabled_state, e->we.click.widget);
|
||||
EnableWindowWidget(w, 9);
|
||||
EnableWindowWidget(w, 10);
|
||||
EnableWindowWidget(w, 11);
|
||||
EnableWindowWidget(w, 12);
|
||||
EnableWindowWidget(w, e->we.click.widget);
|
||||
WP(w,traindetails_d).tab = e->we.click.widget - 9;
|
||||
SetWindowDirty(w);
|
||||
break;
|
||||
|
|
|
@ -1020,25 +1020,19 @@ static void ReplaceVehicleWndProc(Window *w, WindowEvent *e)
|
|||
// or Both lists have the same vehicle selected
|
||||
// or The selected replacement engine has a replacement (to prevent loops)
|
||||
// or The right list (new replacement) has the existing replacement vehicle selected
|
||||
if (selected_id[0] == INVALID_ENGINE ||
|
||||
SetWindowWidgetDisabledState(w, 4,
|
||||
selected_id[0] == INVALID_ENGINE ||
|
||||
selected_id[1] == INVALID_ENGINE ||
|
||||
selected_id[0] == selected_id[1] ||
|
||||
EngineReplacementForPlayer(p, selected_id[1]) != INVALID_ENGINE ||
|
||||
EngineReplacementForPlayer(p, selected_id[0]) == selected_id[1]) {
|
||||
SETBIT(w->disabled_state, 4);
|
||||
} else {
|
||||
CLRBIT(w->disabled_state, 4);
|
||||
}
|
||||
EngineReplacementForPlayer(p, selected_id[0]) == selected_id[1]);
|
||||
|
||||
// Disable the "Stop Replacing" button if:
|
||||
// The left list (existing vehicle) is empty
|
||||
// or The selected vehicle has no replacement set up
|
||||
if (selected_id[0] == INVALID_ENGINE ||
|
||||
!EngineHasReplacementForPlayer(p, selected_id[0])) {
|
||||
SETBIT(w->disabled_state, 6);
|
||||
} else {
|
||||
CLRBIT(w->disabled_state, 6);
|
||||
}
|
||||
SetWindowWidgetDisabledState(w, 6,
|
||||
selected_id[0] == INVALID_ENGINE ||
|
||||
!EngineHasReplacementForPlayer(p, selected_id[0]));
|
||||
|
||||
// now the actual drawing of the window itself takes place
|
||||
SetDParam(0, _vehicle_type_names[WP(w, replaceveh_d).vehicletype - VEH_Train]);
|
||||
|
@ -1577,7 +1571,7 @@ static void DrawVehicleListWindow(Window *w)
|
|||
|
||||
DrawWindowWidgets(w);
|
||||
|
||||
if (owner == _local_player && vl->l.list_length == 0) SETBIT(w->disabled_state, 9);
|
||||
if (owner == _local_player && vl->l.list_length == 0) DisableWindowWidget(w, 9);
|
||||
|
||||
/* draw sorting criteria string */
|
||||
DrawString(85, 15, _vehicle_sort_listing[vl->l.sort_type], 0x10);
|
||||
|
|
Loading…
Reference in New Issue