1
0
Fork 0

(svn r13103) -Codechange: make a class of the PlayerCompanyWindow.

release/0.7
rubidium 2008-05-15 14:12:22 +00:00
parent d94bef9d5c
commit 8fff6e8638
2 changed files with 166 additions and 164 deletions

View File

@ -1164,48 +1164,61 @@ static void DrawCompanyOwnerText(const Player *p)
* @param w window pointer * @param w window pointer
* @param e event been triggered * @param e event been triggered
*/ */
static void PlayerCompanyWndProc(Window *w, WindowEvent *e) struct PlayerCompanyWindow : Window
{ {
switch (e->event) { PlayerCompanyWindowWidgets query_widget;
case WE_PAINT: {
const Player *p = GetPlayer((PlayerID)w->window_number);
bool local = w->window_number == _local_player;
w->SetWidgetHiddenState(PCW_WIDGET_NEW_FACE, !local); PlayerCompanyWindow(const WindowDesc *desc, WindowNumber window_number) : Window(desc, window_number)
w->SetWidgetHiddenState(PCW_WIDGET_COLOR_SCHEME, !local); {
w->SetWidgetHiddenState(PCW_WIDGET_PRESIDENT_NAME, !local); this->caption_color = this->window_number;
w->SetWidgetHiddenState(PCW_WIDGET_COMPANY_NAME, !local); }
w->widget[PCW_WIDGET_BUILD_VIEW_HQ].data = (local && p->location_of_house == 0) ? STR_706F_BUILD_HQ : STR_7072_VIEW_HQ;
if (local && p->location_of_house != 0) w->widget[PCW_WIDGET_BUILD_VIEW_HQ].type = WWT_PUSHTXTBTN; //HQ is already built. ~PlayerCompanyWindow()
w->SetWidgetDisabledState(PCW_WIDGET_BUILD_VIEW_HQ, !local && p->location_of_house == 0); {
w->SetWidgetHiddenState(PCW_WIDGET_RELOCATE_HQ, !local || p->location_of_house == 0); DeleteWindowById(WC_PLAYER_FACE, this->window_number);
w->SetWidgetHiddenState(PCW_WIDGET_BUY_SHARE, local); if (this->window_number == _local_player) DeleteWindowById(WC_COMPANY_PASSWORD_WINDOW, 0);
w->SetWidgetHiddenState(PCW_WIDGET_SELL_SHARE, local); }
w->SetWidgetHiddenState(PCW_WIDGET_COMPANY_PASSWORD, !local || !_networking);
virtual void OnPaint()
{
const Player *p = GetPlayer((PlayerID)this->window_number);
bool local = this->window_number == _local_player;
this->SetWidgetHiddenState(PCW_WIDGET_NEW_FACE, !local);
this->SetWidgetHiddenState(PCW_WIDGET_COLOR_SCHEME, !local);
this->SetWidgetHiddenState(PCW_WIDGET_PRESIDENT_NAME, !local);
this->SetWidgetHiddenState(PCW_WIDGET_COMPANY_NAME, !local);
this->widget[PCW_WIDGET_BUILD_VIEW_HQ].data = (local && p->location_of_house == 0) ? STR_706F_BUILD_HQ : STR_7072_VIEW_HQ;
if (local && p->location_of_house != 0) this->widget[PCW_WIDGET_BUILD_VIEW_HQ].type = WWT_PUSHTXTBTN; //HQ is already built.
this->SetWidgetDisabledState(PCW_WIDGET_BUILD_VIEW_HQ, !local && p->location_of_house == 0);
this->SetWidgetHiddenState(PCW_WIDGET_RELOCATE_HQ, !local || p->location_of_house == 0);
this->SetWidgetHiddenState(PCW_WIDGET_BUY_SHARE, local);
this->SetWidgetHiddenState(PCW_WIDGET_SELL_SHARE, local);
this->SetWidgetHiddenState(PCW_WIDGET_COMPANY_PASSWORD, !local || !_networking);
if (!local) { if (!local) {
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 all shares are owned by someone (none by nobody), disable buy button */
w->SetWidgetDisabledState(PCW_WIDGET_BUY_SHARE, GetAmountOwnedBy(p, PLAYER_SPECTATOR) == 0 || this->SetWidgetDisabledState(PCW_WIDGET_BUY_SHARE, GetAmountOwnedBy(p, PLAYER_SPECTATOR) == 0 ||
/* Only 25% left to buy. If the player is human, disable buying it up.. TODO issues! */ /* Only 25% left to buy. If the player is human, disable buying it up.. TODO issues! */
(GetAmountOwnedBy(p, PLAYER_SPECTATOR) == 1 && !p->is_ai) || (GetAmountOwnedBy(p, PLAYER_SPECTATOR) == 1 && !p->is_ai) ||
/* Spectators cannot do anything of course */ /* Spectators cannot do anything of course */
_local_player == PLAYER_SPECTATOR); _local_player == PLAYER_SPECTATOR);
/* If the player doesn't own any shares, disable sell button */ /* If the player doesn't own any shares, disable sell button */
w->SetWidgetDisabledState(PCW_WIDGET_SELL_SHARE, (GetAmountOwnedBy(p, _local_player) == 0) || this->SetWidgetDisabledState(PCW_WIDGET_SELL_SHARE, (GetAmountOwnedBy(p, _local_player) == 0) ||
/* Spectators cannot do anything of course */ /* Spectators cannot do anything of course */
_local_player == PLAYER_SPECTATOR); _local_player == PLAYER_SPECTATOR);
} else { // Shares are not allowed, disable buy/sell buttons } else { // Shares are not allowed, disable buy/sell buttons
w->DisableWidget(PCW_WIDGET_BUY_SHARE); this->DisableWidget(PCW_WIDGET_BUY_SHARE);
w->DisableWidget(PCW_WIDGET_SELL_SHARE); this->DisableWidget(PCW_WIDGET_SELL_SHARE);
} }
} }
SetDParam(0, p->index); SetDParam(0, p->index);
SetDParam(1, p->index); SetDParam(1, p->index);
DrawWindowWidgets(w); DrawWindowWidgets(this);
/* Player face */ /* Player face */
DrawPlayerFace(p->face, p->player_color, 2, 16); DrawPlayerFace(p->face, p->player_color, 2, 16);
@ -1224,7 +1237,7 @@ static void PlayerCompanyWndProc(Window *w, WindowEvent *e)
DrawSprite(SPR_VEH_BUS_SW_VIEW, PLAYER_SPRITE_COLOR(p->index), 215, 44); DrawSprite(SPR_VEH_BUS_SW_VIEW, PLAYER_SPRITE_COLOR(p->index), 215, 44);
/* "Vehicles:" */ /* "Vehicles:" */
DrawPlayerVehiclesAmount((PlayerID)w->window_number); DrawPlayerVehiclesAmount((PlayerID)this->window_number);
/* "Company value:" */ /* "Company value:" */
SetDParam(0, CalculateCompanyValue(p)); SetDParam(0, CalculateCompanyValue(p));
@ -1232,44 +1245,38 @@ static void PlayerCompanyWndProc(Window *w, WindowEvent *e)
/* Shares list */ /* Shares list */
DrawCompanyOwnerText(p); DrawCompanyOwnerText(p);
break;
} }
case WE_CLICK: virtual void OnClick(Point pt, int widget)
switch (e->we.click.widget) { {
case PCW_WIDGET_NEW_FACE: DoSelectPlayerFace((PlayerID)w->window_number, false); break; switch (widget) {
case PCW_WIDGET_NEW_FACE: DoSelectPlayerFace((PlayerID)this->window_number, false); break;
case PCW_WIDGET_COLOR_SCHEME: case PCW_WIDGET_COLOR_SCHEME:
if (BringWindowToFrontById(WC_PLAYER_COLOR, w->window_number)) break; if (BringWindowToFrontById(WC_PLAYER_COLOR, this->window_number)) break;
new SelectPlayerLiveryWindow(&_select_player_livery_desc, (PlayerID)w->window_number); new SelectPlayerLiveryWindow(&_select_player_livery_desc, (PlayerID)this->window_number);
break; break;
case PCW_WIDGET_PRESIDENT_NAME: { case PCW_WIDGET_PRESIDENT_NAME:
const Player *p = GetPlayer((PlayerID)w->window_number); this->query_widget = PCW_WIDGET_PRESIDENT_NAME;
WP(w, def_d).byte_1 = 0; SetDParam(0, this->window_number);
SetDParam(0, p->index); ShowQueryString(STR_PLAYER_NAME, STR_700B_PRESIDENT_S_NAME, 31, 94, this, CS_ALPHANUMERAL);
ShowQueryString(STR_PLAYER_NAME, STR_700B_PRESIDENT_S_NAME, 31, 94, w, CS_ALPHANUMERAL);
break; break;
}
case PCW_WIDGET_COMPANY_NAME: { case PCW_WIDGET_COMPANY_NAME:
Player *p = GetPlayer((PlayerID)w->window_number); this->query_widget = PCW_WIDGET_COMPANY_NAME;
WP(w, def_d).byte_1 = 1; SetDParam(0, this->window_number);
SetDParam(0, p->index); ShowQueryString(STR_COMPANY_NAME, STR_700A_COMPANY_NAME, 31, 150, this, CS_ALPHANUMERAL);
ShowQueryString(STR_COMPANY_NAME, STR_700A_COMPANY_NAME, 31, 150, w, CS_ALPHANUMERAL);
break; break;
}
case PCW_WIDGET_BUILD_VIEW_HQ: { case PCW_WIDGET_BUILD_VIEW_HQ: {
TileIndex tile = GetPlayer((PlayerID)w->window_number)->location_of_house; TileIndex tile = GetPlayer((PlayerID)this->window_number)->location_of_house;
if (tile == 0) { if (tile == 0) {
if ((byte)w->window_number != _local_player) if ((byte)this->window_number != _local_player) return;
return; SetObjectToPlaceWnd(SPR_CURSOR_HQ, PAL_NONE, VHM_RECT, this);
SetObjectToPlaceWnd(SPR_CURSOR_HQ, PAL_NONE, VHM_RECT, w);
SetTileSelectSize(2, 2); SetTileSelectSize(2, 2);
w->LowerWidget(PCW_WIDGET_BUILD_VIEW_HQ); this->LowerWidget(PCW_WIDGET_BUILD_VIEW_HQ);
w->InvalidateWidget(PCW_WIDGET_BUILD_VIEW_HQ); this->InvalidateWidget(PCW_WIDGET_BUILD_VIEW_HQ);
} else { } else {
if (_ctrl_pressed) { if (_ctrl_pressed) {
ShowExtraViewPortWindow(tile); ShowExtraViewPortWindow(tile);
@ -1281,82 +1288,79 @@ static void PlayerCompanyWndProc(Window *w, WindowEvent *e)
} }
case PCW_WIDGET_RELOCATE_HQ: case PCW_WIDGET_RELOCATE_HQ:
SetObjectToPlaceWnd(SPR_CURSOR_HQ, PAL_NONE, VHM_RECT, w); SetObjectToPlaceWnd(SPR_CURSOR_HQ, PAL_NONE, VHM_RECT, this);
SetTileSelectSize(2, 2); SetTileSelectSize(2, 2);
w->LowerWidget(PCW_WIDGET_RELOCATE_HQ); this->LowerWidget(PCW_WIDGET_RELOCATE_HQ);
w->InvalidateWidget(PCW_WIDGET_RELOCATE_HQ); this->InvalidateWidget(PCW_WIDGET_RELOCATE_HQ);
break; break;
case PCW_WIDGET_BUY_SHARE: case PCW_WIDGET_BUY_SHARE:
DoCommandP(0, w->window_number, 0, NULL, CMD_BUY_SHARE_IN_COMPANY | CMD_MSG(STR_707B_CAN_T_BUY_25_SHARE_IN_THIS)); DoCommandP(0, this->window_number, 0, NULL, CMD_BUY_SHARE_IN_COMPANY | CMD_MSG(STR_707B_CAN_T_BUY_25_SHARE_IN_THIS));
break; break;
case PCW_WIDGET_SELL_SHARE: case PCW_WIDGET_SELL_SHARE:
DoCommandP(0, w->window_number, 0, NULL, CMD_SELL_SHARE_IN_COMPANY | CMD_MSG(STR_707C_CAN_T_SELL_25_SHARE_IN)); DoCommandP(0, this->window_number, 0, NULL, CMD_SELL_SHARE_IN_COMPANY | CMD_MSG(STR_707C_CAN_T_SELL_25_SHARE_IN));
break; break;
#ifdef ENABLE_NETWORK #ifdef ENABLE_NETWORK
case PCW_WIDGET_COMPANY_PASSWORD: case PCW_WIDGET_COMPANY_PASSWORD:
if (w->window_number == _local_player) ShowNetworkCompanyPasswordWindow(); if (this->window_number == _local_player) ShowNetworkCompanyPasswordWindow();
break; break;
#endif /* ENABLE_NETWORK */ #endif /* ENABLE_NETWORK */
} }
break; }
case WE_TICK: virtual void OnTick()
{
/* redraw the window every now and then */ /* redraw the window every now and then */
if ((++w->vscroll.pos & 0x1F) == 0) w->SetDirty(); if ((++this->vscroll.pos & 0x1F) == 0) this->SetDirty();
break; }
case WE_PLACE_OBJ: virtual void OnPlaceObject(Point pt, TileIndex tile)
if (DoCommandP(e->we.place.tile, 0, 0, NULL, CMD_BUILD_COMPANY_HQ | CMD_NO_WATER | CMD_MSG(STR_7071_CAN_T_BUILD_COMPANY_HEADQUARTERS))) {
if (DoCommandP(tile, 0, 0, NULL, CMD_BUILD_COMPANY_HQ | CMD_NO_WATER | CMD_MSG(STR_7071_CAN_T_BUILD_COMPANY_HEADQUARTERS)))
ResetObjectToPlace(); ResetObjectToPlace();
w->widget[PCW_WIDGET_BUILD_VIEW_HQ].type = WWT_PUSHTXTBTN; // this button can now behave as a normal push button this->widget[PCW_WIDGET_BUILD_VIEW_HQ].type = WWT_PUSHTXTBTN; // this button can now behave as a normal push button
w->RaiseButtons(); this->RaiseButtons();
break; }
case WE_ABORT_PLACE_OBJ: virtual void OnPlaceObjectAbort()
w->RaiseButtons(); {
break; this->RaiseButtons();
}
case WE_DESTROY: virtual void OnQueryTextFinished(char *str)
DeleteWindowById(WC_PLAYER_FACE, w->window_number); {
if (w->window_number == _local_player) DeleteWindowById(WC_COMPANY_PASSWORD_WINDOW, 0); if (StrEmpty(str)) return;
break;
case WE_ON_EDIT_TEXT: _cmd_text = str;
if (StrEmpty(e->we.edittext.str)) break; switch (this->query_widget) {
default: NOT_REACHED();
_cmd_text = e->we.edittext.str; case PCW_WIDGET_PRESIDENT_NAME:
switch (WP(w, def_d).byte_1) {
case 0: /* Change president name */
DoCommandP(0, 0, 0, NULL, CMD_CHANGE_PRESIDENT_NAME | CMD_MSG(STR_700D_CAN_T_CHANGE_PRESIDENT)); DoCommandP(0, 0, 0, NULL, CMD_CHANGE_PRESIDENT_NAME | CMD_MSG(STR_700D_CAN_T_CHANGE_PRESIDENT));
break; break;
case 1: /* Change company name */
case PCW_WIDGET_COMPANY_NAME:
DoCommandP(0, 0, 0, NULL, CMD_CHANGE_COMPANY_NAME | CMD_MSG(STR_700C_CAN_T_CHANGE_COMPANY_NAME)); DoCommandP(0, 0, 0, NULL, CMD_CHANGE_COMPANY_NAME | CMD_MSG(STR_700C_CAN_T_CHANGE_COMPANY_NAME));
break; break;
} }
break;
} }
} };
static const WindowDesc _player_company_desc = { static const WindowDesc _player_company_desc = {
WDP_AUTO, WDP_AUTO, 360, 170, 360, 170, WDP_AUTO, WDP_AUTO, 360, 170, 360, 170,
WC_COMPANY, WC_NONE, WC_COMPANY, WC_NONE,
WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS, WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS,
_player_company_widgets, _player_company_widgets,
PlayerCompanyWndProc NULL
}; };
void ShowPlayerCompany(PlayerID player) void ShowPlayerCompany(PlayerID player)
{ {
Window *w;
if (!IsValidPlayer(player)) return; if (!IsValidPlayer(player)) return;
w = AllocateWindowDescFront<Window>(&_player_company_desc, player); AllocateWindowDescFront<PlayerCompanyWindow>(&_player_company_desc, player);
if (w != NULL) w->caption_color = w->window_number;
} }

View File

@ -527,10 +527,8 @@ struct menu_d {
assert_compile(WINDOW_CUSTOM_SIZE >= sizeof(menu_d)); assert_compile(WINDOW_CUSTOM_SIZE >= sizeof(menu_d));
struct def_d { struct def_d {
int16 data_1, data_2, data_3;
int16 data_4, data_5;
bool close; bool close;
byte byte_1; int16 data_1, data_2, data_3;
}; };
assert_compile(WINDOW_CUSTOM_SIZE >= sizeof(def_d)); assert_compile(WINDOW_CUSTOM_SIZE >= sizeof(def_d));