(svn r13153) -Codechange: make classes of the TownViewWindow and the ScenarioEditorTownGenerationWindow.

pull/155/head
rubidium 16 years ago
parent 37386287f8
commit 4268afe340

@ -283,87 +283,96 @@ enum TownViewWidget {
TVW_DELETE,
};
static void TownViewWndProc(Window *w, WindowEvent *e)
{
Town *t = GetTown(w->window_number);
struct TownViewWindow : Window {
TownViewWindow(const WindowDesc *desc, WindowNumber window_number) : Window(desc, window_number)
{
const Town *t = GetTown(this->window_number);
switch (e->event) {
case WE_CREATE: {
bool ingame = _game_mode != GM_EDITOR;
if (t->larger_town) w->widget[TVW_CAPTION].data = STR_CITY;
w->SetWidgetHiddenState(TVW_DELETE, ingame); // hide delete button on game mode
w->SetWidgetHiddenState(TVW_EXPAND, ingame); // hide expand button on game mode
w->SetWidgetHiddenState(TVW_SHOWAUTORITY, !ingame); // hide autority button on editor mode
if (ingame) {
/* resize caption bar */
w->widget[TVW_CAPTION].right = w->widget[TVW_STICKY].left -1;
/* move the rename from top on scenario to bottom in game */
w->widget[TVW_CHANGENAME].top = w->widget[TVW_EXPAND].top;
w->widget[TVW_CHANGENAME].bottom = w->widget[TVW_EXPAND].bottom;
w->widget[TVW_CHANGENAME].right = w->widget[TVW_STICKY].right;
}
} break;
this->flags4 |= WF_DISABLE_VP_SCROLL;
InitializeWindowViewport(this, 3, 17, 254, 86, t->xy, ZOOM_LVL_TOWN);
bool ingame = _game_mode != GM_EDITOR;
if (t->larger_town) this->widget[TVW_CAPTION].data = STR_CITY;
this->SetWidgetHiddenState(TVW_DELETE, ingame); // hide delete button on game mode
this->SetWidgetHiddenState(TVW_EXPAND, ingame); // hide expand button on game mode
this->SetWidgetHiddenState(TVW_SHOWAUTORITY, !ingame); // hide autority button on editor mode
if (ingame) {
/* resize caption bar */
this->widget[TVW_CAPTION].right = this->widget[TVW_STICKY].left -1;
/* move the rename from top on scenario to bottom in game */
this->widget[TVW_CHANGENAME].top = this->widget[TVW_EXPAND].top;
this->widget[TVW_CHANGENAME].bottom = this->widget[TVW_EXPAND].bottom;
this->widget[TVW_CHANGENAME].right = this->widget[TVW_STICKY].right;
}
}
case WE_PAINT:
/* disable renaming town in network games if you are not the server */
w->SetWidgetDisabledState(TVW_CHANGENAME, _networking && !_network_server);
virtual void OnPaint()
{
const Town *t = GetTown(this->window_number);
SetDParam(0, t->index);
w->DrawWidgets();
/* disable renaming town in network games if you are not the server */
this->SetWidgetDisabledState(TVW_CHANGENAME, _networking && !_network_server);
SetDParam(0, t->population);
SetDParam(1, t->num_houses);
DrawString(2, 107, STR_2006_POPULATION, TC_FROMSTRING);
SetDParam(0, t->index);
this->DrawWidgets();
SetDParam(0, t->act_pass);
SetDParam(1, t->max_pass);
DrawString(2, 117, STR_200D_PASSENGERS_LAST_MONTH_MAX, TC_FROMSTRING);
SetDParam(0, t->population);
SetDParam(1, t->num_houses);
DrawString(2, 107, STR_2006_POPULATION, TC_FROMSTRING);
SetDParam(0, t->act_mail);
SetDParam(1, t->max_mail);
DrawString(2, 127, STR_200E_MAIL_LAST_MONTH_MAX, TC_FROMSTRING);
SetDParam(0, t->act_pass);
SetDParam(1, t->max_pass);
DrawString(2, 117, STR_200D_PASSENGERS_LAST_MONTH_MAX, TC_FROMSTRING);
w->DrawViewport();
break;
SetDParam(0, t->act_mail);
SetDParam(1, t->max_mail);
DrawString(2, 127, STR_200E_MAIL_LAST_MONTH_MAX, TC_FROMSTRING);
case WE_CLICK:
switch (e->we.click.widget) {
case TVW_CENTERVIEW: /* scroll to location */
if (_ctrl_pressed) {
ShowExtraViewPortWindow(t->xy);
} else {
ScrollMainWindowToTile(t->xy);
}
break;
this->DrawViewport();
}
case TVW_SHOWAUTORITY: /* town authority */
ShowTownAuthorityWindow(w->window_number);
break;
virtual void OnClick(Point pt, int widget)
{
Town *t = GetTown(this->window_number);
case TVW_CHANGENAME: /* rename */
SetDParam(0, w->window_number);
ShowQueryString(STR_TOWN, STR_2007_RENAME_TOWN, 31, 130, w, CS_ALPHANUMERAL);
break;
switch (widget) {
case TVW_CENTERVIEW: /* scroll to location */
if (_ctrl_pressed) {
ShowExtraViewPortWindow(t->xy);
} else {
ScrollMainWindowToTile(t->xy);
}
break;
case TVW_EXPAND: /* expand town - only available on Scenario editor */
ExpandTown(t);
break;
case TVW_SHOWAUTORITY: /* town authority */
ShowTownAuthorityWindow(this->window_number);
break;
case TVW_DELETE: /* delete town - only available on Scenario editor */
delete t;
break;
} break;
case TVW_CHANGENAME: /* rename */
SetDParam(0, this->window_number);
ShowQueryString(STR_TOWN, STR_2007_RENAME_TOWN, 31, 130, this, CS_ALPHANUMERAL);
break;
case WE_ON_EDIT_TEXT:
if (!StrEmpty(e->we.edittext.str)) {
_cmd_text = e->we.edittext.str;
DoCommandP(0, w->window_number, 0, NULL,
CMD_RENAME_TOWN | CMD_MSG(STR_2008_CAN_T_RENAME_TOWN));
}
break;
case TVW_EXPAND: /* expand town - only available on Scenario editor */
ExpandTown(t);
break;
case TVW_DELETE: /* delete town - only available on Scenario editor */
delete t;
break;
}
}
}
virtual void OnQueryTextFinished(char *str)
{
if (!StrEmpty(str)) {
_cmd_text = str;
DoCommandP(0, this->window_number, 0, NULL,
CMD_RENAME_TOWN | CMD_MSG(STR_2008_CAN_T_RENAME_TOWN));
}
}
};
static const Widget _town_view_widgets[] = {
@ -386,19 +395,12 @@ static const WindowDesc _town_view_desc = {
WC_TOWN_VIEW, WC_NONE,
WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_STICKY_BUTTON,
_town_view_widgets,
TownViewWndProc
NULL
};
void ShowTownViewWindow(TownID town)
{
Window *w;
w = AllocateWindowDescFront<Window>(&_town_view_desc, town);
if (w != NULL) {
w->flags4 |= WF_DISABLE_VP_SCROLL;
InitializeWindowViewport(w, 3, 17, 254, 86, GetTown(town)->xy, ZOOM_LVL_TOWN);
}
AllocateWindowDescFront<TownViewWindow>(&_town_view_desc, town);
}
enum TownDirectoryWidget {
@ -622,85 +624,90 @@ static const Widget _scen_edit_town_gen_widgets[] = {
{ WIDGETS_END},
};
static void ScenEditTownGenWndProc(Window *w, WindowEvent *e)
struct ScenarioEditorTownGenerationWindow : Window
{
switch (e->event) {
case WE_PAINT:
w->DrawWidgets();
break;
ScenarioEditorTownGenerationWindow(const WindowDesc *desc, WindowNumber window_number) : Window(desc, window_number)
{
this->LowerWidget(_scengen_town_size + TSEW_SMALLTOWN);
}
case WE_CREATE:
w->LowerWidget(_scengen_town_size + TSEW_SMALLTOWN);
break;
virtual void OnPaint()
{
this->DrawWidgets();
}
case WE_CLICK:
switch (e->we.click.widget) {
case TSEW_NEWTOWN:
HandlePlacePushButton(w, TSEW_NEWTOWN, SPR_CURSOR_TOWN, VHM_RECT, PlaceProc_Town);
break;
virtual void OnClick(Point pt, int widget)
{
switch (widget) {
case TSEW_NEWTOWN:
HandlePlacePushButton(this, TSEW_NEWTOWN, SPR_CURSOR_TOWN, VHM_RECT, PlaceProc_Town);
break;
case TSEW_RANDOMTOWN: {
Town *t;
uint size = min(_scengen_town_size, (int)TSM_CITY);
TownSizeMode mode = _scengen_town_size > TSM_CITY ? TSM_CITY : TSM_FIXED;
case TSEW_RANDOMTOWN: {
Town *t;
uint size = min(_scengen_town_size, (int)TSM_CITY);
TownSizeMode mode = _scengen_town_size > TSM_CITY ? TSM_CITY : TSM_FIXED;
w->HandleButtonClick(TSEW_RANDOMTOWN);
_generating_world = true;
t = CreateRandomTown(20, mode, size);
_generating_world = false;
this->HandleButtonClick(TSEW_RANDOMTOWN);
_generating_world = true;
t = CreateRandomTown(20, mode, size);
_generating_world = false;
if (t == NULL) {
ShowErrorMessage(STR_NO_SPACE_FOR_TOWN, STR_CANNOT_GENERATE_TOWN, 0, 0);
} else {
ScrollMainWindowToTile(t->xy);
}
} break;
if (t == NULL) {
ShowErrorMessage(STR_NO_SPACE_FOR_TOWN, STR_CANNOT_GENERATE_TOWN, 0, 0);
} else {
ScrollMainWindowToTile(t->xy);
}
} break;
case TSEW_MANYRANDOMTOWNS:
w->HandleButtonClick(TSEW_MANYRANDOMTOWNS);
case TSEW_MANYRANDOMTOWNS:
this->HandleButtonClick(TSEW_MANYRANDOMTOWNS);
_generating_world = true;
if (!GenerateTowns()) ShowErrorMessage(STR_NO_SPACE_FOR_TOWN, STR_CANNOT_GENERATE_TOWN, 0, 0);
_generating_world = false;
break;
_generating_world = true;
if (!GenerateTowns()) ShowErrorMessage(STR_NO_SPACE_FOR_TOWN, STR_CANNOT_GENERATE_TOWN, 0, 0);
_generating_world = false;
break;
case TSEW_SMALLTOWN: case TSEW_MEDIUMTOWN: case TSEW_LARGETOWN: case TSEW_CITY:
w->RaiseWidget(_scengen_town_size + TSEW_SMALLTOWN);
_scengen_town_size = e->we.click.widget - TSEW_SMALLTOWN;
w->LowerWidget(_scengen_town_size + TSEW_SMALLTOWN);
w->SetDirty();
break;
} break;
case TSEW_SMALLTOWN: case TSEW_MEDIUMTOWN: case TSEW_LARGETOWN: case TSEW_CITY:
this->RaiseWidget(_scengen_town_size + TSEW_SMALLTOWN);
_scengen_town_size = widget - TSEW_SMALLTOWN;
this->LowerWidget(_scengen_town_size + TSEW_SMALLTOWN);
this->SetDirty();
break;
}
}
case WE_TIMEOUT:
w->RaiseWidget(TSEW_RANDOMTOWN);
w->RaiseWidget(TSEW_MANYRANDOMTOWNS);
w->SetDirty();
break;
virtual void OnTimeout()
{
this->RaiseWidget(TSEW_RANDOMTOWN);
this->RaiseWidget(TSEW_MANYRANDOMTOWNS);
this->SetDirty();
}
case WE_PLACE_OBJ:
_place_proc(e->we.place.tile);
break;
virtual void OnPlaceObject(Point pt, TileIndex tile)
{
_place_proc(tile);
}
case WE_ABORT_PLACE_OBJ:
w->RaiseButtons();
w->LowerWidget(_scengen_town_size + TSEW_SMALLTOWN);
w->SetDirty();
break;
virtual void OnPlaceObjectAbort()
{
this->RaiseButtons();
this->LowerWidget(_scengen_town_size + TSEW_SMALLTOWN);
this->SetDirty();
}
}
};
static const WindowDesc _scen_edit_town_gen_desc = {
WDP_AUTO, WDP_AUTO, 160, 95, 160, 95,
WC_SCEN_TOWN_GEN, WC_NONE,
WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_STICKY_BUTTON,
_scen_edit_town_gen_widgets,
ScenEditTownGenWndProc,
NULL,
};
void ShowBuildTownWindow()
{
if (_game_mode != GM_EDITOR && !IsValidPlayer(_current_player)) return;
AllocateWindowDescFront<Window>(&_scen_edit_town_gen_desc, 0);
AllocateWindowDescFront<ScenarioEditorTownGenerationWindow>(&_scen_edit_town_gen_desc, 0);
}

Loading…
Cancel
Save