From 7b548cd2b53a6ce834c869f818fb74a5b96680a5 Mon Sep 17 00:00:00 2001
From: Mushiden <mushiden@hotmail.com>
Date: Sun, 21 Sep 2014 00:21:11 -0300
Subject: [PATCH] Add in-game key change menu

---
 src/game.cpp          | 16 ++++++++++++++++
 src/mainmenumanager.h |  9 +++++++++
 2 files changed, 25 insertions(+)

diff --git a/src/game.cpp b/src/game.cpp
index 12bc695a6..774d8f03e 100644
--- a/src/game.cpp
+++ b/src/game.cpp
@@ -30,6 +30,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "server.h"
 #include "guiPasswordChange.h"
 #include "guiVolumeChange.h"
+#include "guiKeyChangeMenu.h"
 #include "guiFormSpecMenu.h"
 #include "tool.h"
 #include "guiChatConsole.h"
@@ -151,6 +152,11 @@ struct LocalFormspecHandler : public TextDest
 				return;
 			}
 
+			if (fields.find("btn_key_config") != fields.end()) {
+				g_gamecallback->keyConfig();
+				return;
+			}
+
 			if (fields.find("btn_exit_menu") != fields.end()) {
 				g_gamecallback->disconnect();
 				return;
@@ -1044,6 +1050,8 @@ static void show_pause_menu(GUIFormSpecMenu** cur_formspec,
 
 	os		<< "button_exit[4," << (ypos++) << ";3,0.5;btn_sound;"
 					<< wide_to_narrow(wstrgettext("Sound Volume")) << "]";
+	os		<< "button_exit[4," << (ypos++) << ";3,0.5;btn_key_config;"
+					<< wide_to_narrow(wstrgettext("Change Keys"))  << "]";
 	os		<< "button_exit[4," << (ypos++) << ";3,0.5;btn_exit_menu;"
 					<< wide_to_narrow(wstrgettext("Exit to Menu")) << "]";
 	os		<< "button_exit[4," << (ypos++) << ";3,0.5;btn_exit_os;"
@@ -1877,6 +1885,14 @@ void the_game(bool &kill, bool random_input, InputHandler *input,
 			g_gamecallback->changevolume_requested = false;
 		}
 
+		if(g_gamecallback->keyconfig_requested)
+		{
+			(new GUIKeyChangeMenu(guienv, guiroot, -1,
+				&g_menumgr))->drop();
+			g_gamecallback->keyconfig_requested = false;
+		}
+
+
 		/* Process TextureSource's queue */
 		tsrc->processQueue();
 
diff --git a/src/mainmenumanager.h b/src/mainmenumanager.h
index 28fe1ac11..56ba40129 100644
--- a/src/mainmenumanager.h
+++ b/src/mainmenumanager.h
@@ -31,6 +31,7 @@ class IGameCallback
 {
 public:
 	virtual void exitToOS() = 0;
+	virtual void keyConfig() = 0;
 	virtual void disconnect() = 0;
 	virtual void changePassword() = 0;
 	virtual void changeVolume() = 0;
@@ -124,6 +125,7 @@ class MainGameCallback : public IGameCallback
 		disconnect_requested(false),
 		changepassword_requested(false),
 		changevolume_requested(false),
+		keyconfig_requested(false),
 		shutdown_requested(false),
 		device(a_device)
 	{
@@ -151,10 +153,17 @@ class MainGameCallback : public IGameCallback
 	{
 		changevolume_requested = true;
 	}
+
+	virtual void keyConfig()
+	{
+		keyconfig_requested = true;
+	}
+
 	
 	bool disconnect_requested;
 	bool changepassword_requested;
 	bool changevolume_requested;
+	bool keyconfig_requested;
 	bool shutdown_requested;
 	IrrlichtDevice *device;
 };
-- 
GitLab