changeset 15413:82101d8a3502 draft

(svn r20056) -Feature: customizable hotkeys for the terraform toolbar
author yexo <yexo@openttd.org>
date Sat, 03 Jul 2010 13:28:48 +0000
parents 70fe94392d25
children fab2c58e97ec
files src/hotkeys.cpp src/terraform_gui.cpp
diffstat 2 files changed, 21 insertions(+), 17 deletions(-) [+]
line wrap: on
line diff
--- a/src/hotkeys.cpp
+++ b/src/hotkeys.cpp
@@ -227,6 +227,7 @@
 	}
 }
 
+struct TerraformToolbarWindow;
 
 static void SaveLoadHotkeys(bool save)
 {
@@ -240,6 +241,7 @@
 	group = ini->GetGroup(#name);\
 	SaveLoadHotkeyGroup(group, _##name##_hotkeys, save);
 
+	SL_HOTKEYS(terraform, TerraformToolbarWindow);
 
 
 #undef SL_HOTKEYS
--- a/src/terraform_gui.cpp
+++ b/src/terraform_gui.cpp
@@ -30,6 +30,7 @@
 #include "landscape_type.h"
 #include "tilehighlight_func.h"
 #include "strings_func.h"
+#include "hotkeys.h"
 
 #include "table/sprites.h"
 #include "table/strings.h"
@@ -133,16 +134,6 @@
 
 typedef void OnButtonClick(Window *w);
 
-static const uint16 _terraform_keycodes[] = {
-	'Q',
-	'W',
-	'E',
-	'D',
-	'U',
-	'I',
-	'O',
-};
-
 static void PlaceProc_BuyLand(TileIndex tile)
 {
 	DoCommandP(tile, 0, 0, CMD_PURCHASE_LAND_AREA | CMD_MSG(STR_ERROR_CAN_T_PURCHASE_THIS_LAND), CcPlaySound1E);
@@ -248,13 +239,10 @@
 
 	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;
-			}
-		}
-		return ES_NOT_HANDLED;
+		int num = CheckHotkeyMatch(terraform_hotkeys, keycode, this);
+		if (num == -1) return ES_NOT_HANDLED;
+		this->OnClick(Point(), num, 1);
+		return ES_HANDLED;
 	}
 
 	virtual void OnPlaceObject(Point pt, TileIndex tile)
@@ -293,8 +281,22 @@
 	{
 		this->RaiseButtons();
 	}
+
+	static Hotkey<TerraformToolbarWindow> terraform_hotkeys[];
 };
 
+Hotkey<TerraformToolbarWindow> TerraformToolbarWindow::terraform_hotkeys[] = {
+	Hotkey<TerraformToolbarWindow>('Q', "lower", TTW_LOWER_LAND),
+	Hotkey<TerraformToolbarWindow>('W', "raise", TTW_RAISE_LAND),
+	Hotkey<TerraformToolbarWindow>('E', "level", TTW_LEVEL_LAND),
+	Hotkey<TerraformToolbarWindow>('D', "dynamite", TTW_DEMOLISH),
+	Hotkey<TerraformToolbarWindow>('U', "buyland", TTW_BUY_LAND),
+	Hotkey<TerraformToolbarWindow>('I', "trees", TTW_PLANT_TREES),
+	Hotkey<TerraformToolbarWindow>('O', "placesign", TTW_PLACE_SIGN),
+	HOTKEY_LIST_END(TerraformToolbarWindow)
+};
+Hotkey<TerraformToolbarWindow> *_terraform_hotkeys = TerraformToolbarWindow::terraform_hotkeys;
+
 static const NWidgetPart _nested_terraform_widgets[] = {
 	NWidget(NWID_HORIZONTAL),
 		NWidget(WWT_CLOSEBOX, COLOUR_DARK_GREEN),