(svn r13121) -Codechange: make a class of the PerformanceRatingDetailWindow.

This commit is contained in:
rubidium 2008-05-16 17:45:43 +00:00
parent 2da844b146
commit 3b97cc2e30

View File

@ -935,69 +935,95 @@ void ShowCompanyLeagueTable()
/* PERFORMANCE RATING DETAIL */ /* PERFORMANCE RATING DETAIL */
/*****************************/ /*****************************/
static void PerformanceRatingDetailWndProc(Window *w, WindowEvent *e) struct PerformanceRatingDetailWindow : Window {
{ static PlayerID player;
static PlayerID _performance_rating_detail_player = INVALID_PLAYER; int timeout;
switch (e->event) { PerformanceRatingDetailWindow(const WindowDesc *desc, WindowNumber window_number) : Window(desc, window_number)
case WE_PAINT: { {
/* Disable the players who are not active */
for (PlayerID i = PLAYER_FIRST; i < MAX_PLAYERS; i++) {
this->SetWidgetDisabledState(i + 13, !GetPlayer(i)->is_active);
}
this->UpdatePlayerStats();
if (player != INVALID_PLAYER) this->LowerWidget(player + 13);
this->SetDirty();
}
void UpdatePlayerStats()
{
/* Update all player stats with the current data
* (this is because _score_info is not saved to a savegame) */
Player *p;
FOR_ALL_PLAYERS(p) {
if (p->is_active) UpdateCompanyRatingAndValue(p, false);
}
this->timeout = DAY_TICKS * 5;
}
virtual void OnPaint()
{
byte x; byte x;
uint16 y = 14; uint16 y = 14;
int total_score = 0; int total_score = 0;
int color_done, color_notdone; int color_done, color_notdone;
/* Draw standard stuff */ /* Draw standard stuff */
DrawWindowWidgets(w); DrawWindowWidgets(this);
/* Check if the currently selected player is still active. */ /* Check if the currently selected player is still active. */
if (_performance_rating_detail_player == INVALID_PLAYER || !GetPlayer(_performance_rating_detail_player)->is_active) { if (player == INVALID_PLAYER || !GetPlayer(player)->is_active) {
if (_performance_rating_detail_player != INVALID_PLAYER) { if (player != INVALID_PLAYER) {
/* Raise and disable the widget for the previous selection. */ /* Raise and disable the widget for the previous selection. */
w->RaiseWidget(_performance_rating_detail_player + 13); this->RaiseWidget(player + 13);
w->DisableWidget(_performance_rating_detail_player + 13); this->DisableWidget(player + 13);
w->SetDirty(); this->SetDirty();
_performance_rating_detail_player = INVALID_PLAYER; player = INVALID_PLAYER;
} }
for (PlayerID i = PLAYER_FIRST; i < MAX_PLAYERS; i++) { for (PlayerID i = PLAYER_FIRST; i < MAX_PLAYERS; i++) {
if (GetPlayer(i)->is_active) { if (GetPlayer(i)->is_active) {
/* Lower the widget corresponding to this player. */ /* Lower the widget corresponding to this player. */
w->LowerWidget(i + 13); this->LowerWidget(i + 13);
w->SetDirty(); this->SetDirty();
_performance_rating_detail_player = i; player = i;
break; break;
} }
} }
} }
/* If there are no active players, don't display anything else. */ /* If there are no active players, don't display anything else. */
if (_performance_rating_detail_player == INVALID_PLAYER) break; if (player == INVALID_PLAYER) return;
/* Paint the player icons */ /* Paint the player icons */
for (PlayerID i = PLAYER_FIRST; i < MAX_PLAYERS; i++) { for (PlayerID i = PLAYER_FIRST; i < MAX_PLAYERS; i++) {
if (!GetPlayer(i)->is_active) { if (!GetPlayer(i)->is_active) {
/* Check if we have the player as an active player */ /* Check if we have the player as an active player */
if (!w->IsWidgetDisabled(i + 13)) { if (!this->IsWidgetDisabled(i + 13)) {
/* Bah, player gone :( */ /* Bah, player gone :( */
w->DisableWidget(i + 13); this->DisableWidget(i + 13);
/* We need a repaint */ /* We need a repaint */
w->SetDirty(); this->SetDirty();
} }
continue; continue;
} }
/* Check if we have the player marked as inactive */ /* Check if we have the player marked as inactive */
if (w->IsWidgetDisabled(i + 13)) { if (this->IsWidgetDisabled(i + 13)) {
/* New player! Yippie :p */ /* New player! Yippie :p */
w->EnableWidget(i + 13); this->EnableWidget(i + 13);
/* We need a repaint */ /* We need a repaint */
w->SetDirty(); this->SetDirty();
} }
x = (i == _performance_rating_detail_player) ? 1 : 0; x = (i == player) ? 1 : 0;
DrawPlayerIcon(i, i * 37 + 13 + x, 16 + x); DrawPlayerIcon(i, i * 37 + 13 + x, 16 + x);
} }
@ -1007,7 +1033,7 @@ static void PerformanceRatingDetailWndProc(Window *w, WindowEvent *e)
/* Draw all the score parts */ /* Draw all the score parts */
for (ScoreID i = SCORE_BEGIN; i < SCORE_END; i++) { for (ScoreID i = SCORE_BEGIN; i < SCORE_END; i++) {
int val = _score_part[_performance_rating_detail_player][i]; int val = _score_part[player][i];
int needed = _score_info[i].needed; int needed = _score_info[i].needed;
int score = _score_info[i].score; int score = _score_info[i].score;
@ -1065,66 +1091,36 @@ static void PerformanceRatingDetailWndProc(Window *w, WindowEvent *e)
DrawString(167, y, STR_PERFORMANCE_DETAIL_AMOUNT_INT, TC_FROMSTRING); DrawString(167, y, STR_PERFORMANCE_DETAIL_AMOUNT_INT, TC_FROMSTRING);
} }
} }
break;
} }
case WE_CLICK: virtual void OnClick(Point pt, int widget)
{
/* Check which button is clicked */ /* Check which button is clicked */
if (IsInsideMM(e->we.click.widget, 13, 21)) { if (IsInsideMM(widget, 13, 21)) {
/* Is it no on disable? */ /* Is it no on disable? */
if (!w->IsWidgetDisabled(e->we.click.widget)) { if (!this->IsWidgetDisabled(widget)) {
w->RaiseWidget(_performance_rating_detail_player + 13); this->RaiseWidget(player + 13);
_performance_rating_detail_player = (PlayerID)(e->we.click.widget - 13); player = (PlayerID)(widget - 13);
w->LowerWidget(_performance_rating_detail_player + 13); this->LowerWidget(player + 13);
w->SetDirty(); this->SetDirty();
} }
} }
break;
case WE_CREATE: {
Player *p2;
/* Disable the players who are not active */
for (PlayerID i = PLAYER_FIRST; i < MAX_PLAYERS; i++) {
w->SetWidgetDisabledState(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) */
FOR_ALL_PLAYERS(p2) {
if (p2->is_active) UpdateCompanyRatingAndValue(p2, false);
} }
w->custom[0] = DAY_TICKS; virtual void OnTick()
w->custom[1] = 5; {
if (_pause_game != 0) return;
if (_performance_rating_detail_player != INVALID_PLAYER) w->LowerWidget(_performance_rating_detail_player + 13);
w->SetDirty();
break;
}
case WE_TICK:
if (_pause_game != 0) break;
/* Update the player score every 5 days */ /* Update the player score every 5 days */
if (--w->custom[0] == 0) { if (--this->timeout == 0) {
w->custom[0] = DAY_TICKS; this->UpdatePlayerStats();
if (--w->custom[1] == 0) { this->SetDirty();
Player *p2; }
}
};
w->custom[1] = 5; PlayerID PerformanceRatingDetailWindow::player = INVALID_PLAYER;
FOR_ALL_PLAYERS(p2) {
/* Skip if player is not active */
if (p2->is_active) UpdateCompanyRatingAndValue(p2, false);
}
w->SetDirty();
}
}
break;
}
}
static const Widget _performance_rating_detail_widgets[] = { static const Widget _performance_rating_detail_widgets[] = {
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, { WWT_CLOSEBOX, RESIZE_NONE, 14, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
@ -1158,10 +1154,10 @@ static const WindowDesc _performance_rating_detail_desc = {
WC_PERFORMANCE_DETAIL, WC_NONE, WC_PERFORMANCE_DETAIL, WC_NONE,
WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET, WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET,
_performance_rating_detail_widgets, _performance_rating_detail_widgets,
PerformanceRatingDetailWndProc NULL
}; };
void ShowPerformanceRatingDetail() void ShowPerformanceRatingDetail()
{ {
AllocateWindowDescFront<Window>(&_performance_rating_detail_desc, 0); AllocateWindowDescFront<PerformanceRatingDetailWindow>(&_performance_rating_detail_desc, 0);
} }