summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/terraform_gui.cpp272
1 files changed, 144 insertions, 128 deletions
diff --git a/src/terraform_gui.cpp b/src/terraform_gui.cpp
index d0e2d3ef0..9b6c5d6b9 100644
--- a/src/terraform_gui.cpp
+++ b/src/terraform_gui.cpp
@@ -229,57 +229,67 @@ static OnButtonClick * const _terraform_button_proc[] = {
TerraformClick_PlaceSign,
};
-static void TerraformToolbWndProc(Window *w, WindowEvent *e)
-{
- switch (e->event) {
- case WE_PAINT:
- w->DrawWidgets();
- break;
+struct TerraformToolbarWindow : Window {
+ TerraformToolbarWindow(const WindowDesc *desc, WindowNumber window_number) : Window(desc, window_number)
+ {
+ this->FindWindowPlacementAndResize(desc);
+ }
- case WE_CLICK:
- if (e->we.click.widget >= 4) _terraform_button_proc[e->we.click.widget - 4](w);
- break;
+ ~TerraformToolbarWindow()
+ {
+ }
- case WE_KEYPRESS: {
- uint i;
+ virtual void OnPaint()
+ {
+ this->DrawWidgets();
+ }
- for (i = 0; i != lengthof(_terraform_keycodes); i++) {
- if (e->we.keypress.keycode == _terraform_keycodes[i]) {
- e->we.keypress.cont = false;
- _terraform_button_proc[i](w);
- break;
+ virtual void OnClick(Point pt, int widget)
+ {
+ if (widget >= 4) _terraform_button_proc[widget - 4](this);
+ }
+
+ virtual EventState OnKeyPress(uint16 key, uint16 keycode)
+ {
+ for (uint i = 0; i != lengthof(_terraform_keycodes); i++) {
+ if (keycode == _terraform_keycodes[i]) {
+ _terraform_button_proc[i](this);
+ return ES_HANDLED;
}
}
- break;
+ return ES_NOT_HANDLED;
}
- case WE_PLACE_OBJ:
- _place_proc(e->we.place.tile);
- return;
+ virtual void OnPlaceObject(Point pt, TileIndex tile)
+ {
+ _place_proc(tile);
+ }
- case WE_PLACE_DRAG:
- VpSelectTilesWithMethod(e->we.place.pt.x, e->we.place.pt.y, e->we.place.select_method);
- break;
+ virtual void OnPlaceDrag(ViewportPlaceMethod select_method, ViewportDragDropSelectionProcess select_proc, Point pt)
+ {
+ VpSelectTilesWithMethod(pt.x, pt.y, select_method);
+ }
- case WE_PLACE_MOUSEUP:
- if (e->we.place.pt.x != -1) {
- switch (e->we.place.select_proc) {
+ virtual void OnPlaceMouseUp(ViewportPlaceMethod select_method, ViewportDragDropSelectionProcess select_proc, Point pt, TileIndex start_tile, TileIndex end_tile)
+ {
+ if (pt.x != -1) {
+ switch (select_proc) {
default: NOT_REACHED();
case DDSP_DEMOLISH_AREA:
case DDSP_RAISE_AND_LEVEL_AREA:
case DDSP_LOWER_AND_LEVEL_AREA:
case DDSP_LEVEL_AREA:
- GUIPlaceProcDragXY(e->we.place.select_proc, e->we.place.starttile, e->we.place.tile);
+ GUIPlaceProcDragXY(select_proc, start_tile, end_tile);
break;
}
}
- break;
+ }
- case WE_ABORT_PLACE_OBJ:
- w->RaiseButtons();
- break;
+ virtual void OnPlaceObjectAbort()
+ {
+ this->RaiseButtons();
}
-}
+};
static const Widget _terraform_widgets[] = {
{ WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
@@ -303,13 +313,13 @@ static const WindowDesc _terraform_desc = {
WC_SCEN_LAND_GEN, WC_NONE,
WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_STICKY_BUTTON,
_terraform_widgets,
- TerraformToolbWndProc
+ NULL
};
void ShowTerraformToolbar(Window *link)
{
if (!IsValidPlayer(_current_player)) return;
- Window *w = AllocateWindowDescFront<Window>(&_terraform_desc, 0);
+ Window *w = AllocateWindowDescFront<TerraformToolbarWindow>(&_terraform_desc, 0);
if (w != NULL && link != NULL) {
/* Align the terraform toolbar under the main toolbar and put the linked
* toolbar to left of it
@@ -567,123 +577,129 @@ static void ResetLandscapeConfirmationCallback(Window *w, bool confirmed)
}
}
-static void ScenEditLandGenWndProc(Window *w, WindowEvent *e)
-{
- switch (e->event) {
- case WE_CREATE:
- /* XXX - lighthouse button is widget 11!! Don't forget when changing */
- w->widget[11].tooltips = (_opt.landscape == LT_TROPIC) ? STR_028F_DEFINE_DESERT_AREA : STR_028D_PLACE_LIGHTHOUSE;
- break;
-
- case WE_PAINT: {
- w->DrawWidgets();
+struct ScenarioEditorLandscapeGenerationWindow : Window {
+ ScenarioEditorLandscapeGenerationWindow(const WindowDesc *desc, WindowNumber window_number) : Window(desc, window_number)
+ {
+ /* XXX - lighthouse button is widget 11!! Don't forget when changing */
+ this->widget[11].tooltips = (_opt.landscape == LT_TROPIC) ? STR_028F_DEFINE_DESERT_AREA : STR_028D_PLACE_LIGHTHOUSE;
+ this->FindWindowPlacementAndResize(desc);
+ }
- int n = _terraform_size * _terraform_size;
- const int8 *coords = &_multi_terraform_coords[0][0];
+ virtual void OnPaint() {
+ this->DrawWidgets();
- assert(n != 0);
- do {
- DrawSprite(SPR_WHITE_POINT, PAL_NONE, 88 + coords[0], 55 + coords[1]);
- coords += 2;
- } while (--n);
+ int n = _terraform_size * _terraform_size;
+ const int8 *coords = &_multi_terraform_coords[0][0];
- if (w->IsWidgetLowered(5) || w->IsWidgetLowered(6)) // change area-size if raise/lower corner is selected
- SetTileSelectSize(_terraform_size, _terraform_size);
+ assert(n != 0);
+ do {
+ DrawSprite(SPR_WHITE_POINT, PAL_NONE, 88 + coords[0], 55 + coords[1]);
+ coords += 2;
+ } while (--n);
- } break;
+ if (this->IsWidgetLowered(5) || this->IsWidgetLowered(6)) { // change area-size if raise/lower corner is selected
+ SetTileSelectSize(_terraform_size, _terraform_size);
+ }
+ }
- case WE_KEYPRESS:
- for (uint i = 0; i != lengthof(_editor_terraform_keycodes); i++) {
- if (e->we.keypress.keycode == _editor_terraform_keycodes[i]) {
- e->we.keypress.cont = false;
- _editor_terraform_button_proc[i](w);
- break;
- }
+ virtual EventState OnKeyPress(uint16 key, uint16 keycode)
+ {
+ for (uint i = 0; i != lengthof(_editor_terraform_keycodes); i++) {
+ if (keycode == _editor_terraform_keycodes[i]) {
+ _editor_terraform_button_proc[i](this);
+ return ES_HANDLED;
}
- break;
+ }
+ return ES_NOT_HANDLED;
+ }
- case WE_CLICK:
- switch (e->we.click.widget) {
- case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 11: case 12:
- _editor_terraform_button_proc[e->we.click.widget - 4](w);
- break;
- case 13: case 14: { // Increase/Decrease terraform size
- int size = (e->we.click.widget == 13) ? 1 : -1;
- w->HandleButtonClick(e->we.click.widget);
- size += _terraform_size;
-
- if (!IsInsideMM(size, 1, 8 + 1)) return;
- _terraform_size = size;
-
- SndPlayFx(SND_15_BEEP);
- w->SetDirty();
- } break;
- case 15: // gen random land
- w->HandleButtonClick(15);
- ShowCreateScenario();
- break;
- case 16: // Reset landscape
- ShowQuery(
- STR_022C_RESET_LANDSCAPE,
- STR_RESET_LANDSCAPE_CONFIRMATION_TEXT,
- NULL,
- ResetLandscapeConfirmationCallback);
- break;
- }
- break;
+ virtual void OnClick(Point pt, int widget)
+ {
+ switch (widget) {
+ case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 11: case 12:
+ _editor_terraform_button_proc[widget - 4](this);
+ break;
+ case 13: case 14: { // Increase/Decrease terraform size
+ int size = (widget == 13) ? 1 : -1;
+ this->HandleButtonClick(widget);
+ size += _terraform_size;
+
+ if (!IsInsideMM(size, 1, 8 + 1)) return;
+ _terraform_size = size;
+
+ SndPlayFx(SND_15_BEEP);
+ this->SetDirty();
+ } break;
+ case 15: // gen random land
+ this->HandleButtonClick(15);
+ ShowCreateScenario();
+ break;
+ case 16: // Reset landscape
+ ShowQuery(
+ STR_022C_RESET_LANDSCAPE,
+ STR_RESET_LANDSCAPE_CONFIRMATION_TEXT,
+ NULL,
+ ResetLandscapeConfirmationCallback);
+ break;
+ }
+ }
- case WE_TIMEOUT:
- for (uint i = 0; i < w->widget_count; i++) {
- if (w->IsWidgetLowered(i)) {
- w->RaiseWidget(i);
- w->InvalidateWidget(i);
- }
- if (i == 3) i = 12;
+ virtual void OnTimeout()
+ {
+ for (uint i = 0; i < this->widget_count; i++) {
+ if (this->IsWidgetLowered(i)) {
+ this->RaiseWidget(i);
+ this->InvalidateWidget(i);
}
- break;
+ if (i == 3) i = 12;
+ }
+ }
- case WE_PLACE_OBJ:
- _place_proc(e->we.place.tile);
- break;
+ virtual void OnPlaceObject(Point pt, TileIndex tile)
+ {
+ _place_proc(tile);
+ }
- case WE_PLACE_DRAG:
- VpSelectTilesWithMethod(e->we.place.pt.x, e->we.place.pt.y, e->we.place.select_method);
- break;
+ virtual void OnPlaceDrag(ViewportPlaceMethod select_method, ViewportDragDropSelectionProcess select_proc, Point pt)
+ {
+ VpSelectTilesWithMethod(pt.x, pt.y, select_method);
+ }
- case WE_PLACE_MOUSEUP:
- if (e->we.place.pt.x != -1) {
- switch (e->we.place.select_proc) {
- default: NOT_REACHED();
- case DDSP_CREATE_ROCKS:
- case DDSP_CREATE_DESERT:
- case DDSP_CREATE_WATER:
- case DDSP_CREATE_RIVER:
- case DDSP_RAISE_AND_LEVEL_AREA:
- case DDSP_LOWER_AND_LEVEL_AREA:
- case DDSP_LEVEL_AREA:
- case DDSP_DEMOLISH_AREA:
- GUIPlaceProcDragXY(e->we.place.select_proc, e->we.place.starttile, e->we.place.tile);
- break;
- }
+ virtual void OnPlaceMouseUp(ViewportPlaceMethod select_method, ViewportDragDropSelectionProcess select_proc, Point pt, TileIndex start_tile, TileIndex end_tile)
+ {
+ if (pt.x != -1) {
+ switch (select_proc) {
+ default: NOT_REACHED();
+ case DDSP_CREATE_ROCKS:
+ case DDSP_CREATE_DESERT:
+ case DDSP_CREATE_WATER:
+ case DDSP_CREATE_RIVER:
+ case DDSP_RAISE_AND_LEVEL_AREA:
+ case DDSP_LOWER_AND_LEVEL_AREA:
+ case DDSP_LEVEL_AREA:
+ case DDSP_DEMOLISH_AREA:
+ GUIPlaceProcDragXY(select_proc, start_tile, end_tile);
+ break;
}
- break;
+ }
+ }
- case WE_ABORT_PLACE_OBJ:
- w->RaiseButtons();
- w->SetDirty();
- break;
+ virtual void OnPlaceObjectAbort()
+ {
+ this->RaiseButtons();
+ this->SetDirty();
}
-}
+};
static const WindowDesc _scen_edit_land_gen_desc = {
WDP_AUTO, WDP_AUTO, 204, 103, 204, 103,
WC_SCEN_LAND_GEN, WC_NONE,
WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_STICKY_BUTTON,
_scen_edit_land_gen_widgets,
- ScenEditLandGenWndProc,
+ NULL,
};
void ShowEditorTerraformToolbar()
{
- AllocateWindowDescFront<Window>(&_scen_edit_land_gen_desc, 0);
+ AllocateWindowDescFront<ScenarioEditorLandscapeGenerationWindow>(&_scen_edit_land_gen_desc, 0);
}