From dbba73f598ac319ad2a64453eadebc5d391a3983 Mon Sep 17 00:00:00 2001
From: jsalmon3 <>
Date: Sat, 23 Nov 2002 22:19:36 +0000
Subject: [PATCH] Added ErrorMenu and NetErrorMenu

---
 src/include/menus.h |  3 ++
 src/ui/menus.cpp    | 96 ++++++++++++++++++++++++---------------------
 2 files changed, 54 insertions(+), 45 deletions(-)

diff --git a/src/include/menus.h b/src/include/menus.h
index d4bb04a36..cf51dfe51 100644
--- a/src/include/menus.h
+++ b/src/include/menus.h
@@ -342,6 +342,9 @@ extern void EditorEditAiProperties(void);
     /// Save map from the editor
 extern int EditorSave(void);
 
+    /// Error menu
+extern void ErrorMenu(char *);
+
 //@}
 
 #endif	// !__MENUS_H__
diff --git a/src/ui/menus.cpp b/src/ui/menus.cpp
index 157998a17..b8922eb23 100644
--- a/src/ui/menus.cpp
+++ b/src/ui/menus.cpp
@@ -304,6 +304,7 @@ local void ReplayGameCancel(void);
 local void DiplomacyWait(Menuitem *mi);
 local void DiplomacyOk(void);
 
+local void NetErrorMenu(char *error);
 
 /*----------------------------------------------------------------------------
 --	Variables
@@ -2655,10 +2656,7 @@ local void JoinNetGameMenu(void)
     // Now finally here is the address
     server_host_buffer[menu->items[1].d.input.nch] = 0;
     if (NetworkSetupServerAddress(server_host_buffer)) {
-	menu = FindMenu("menu-net-error");
-	menu->items[1].d.text.text = "Unable to lookup host.";
-	ProcessMenu("menu-net-error", 1);
-	menu->items[1].d.text.text = NULL;
+	NetErrorMenu("Unable to lookup host.");
 	VideoLockScreen();
 	MenusSetBackground();
 	VideoUnlockScreen();
@@ -2716,59 +2714,38 @@ local void NetConnectingCancel(void)
 */
 local void TerminateNetConnect(void)
 {
-    Menu *menu;
-
-    menu = FindMenu("menu-net-error");
     switch (NetLocalState) {
 	case ccs_unreachable:
-	    menu->items[1].d.text.text = "Cannot reach server.";
-	    ProcessMenu("menu-net-error", 1);
-	    menu->items[1].d.text.text = NULL;
-
+	    NetErrorMenu("Cannot reach server.");
 	    NetConnectingCancel();
 	    return;
 	case ccs_nofreeslots:
-	    menu->items[1].d.text.text = "Server is full.";
-	    ProcessMenu("menu-net-error", 1);
-	    menu->items[1].d.text.text = NULL;
-
+	    NetErrorMenu("Server is full.");
 	    NetConnectingCancel();
 	    return;
 	case ccs_serverquits:
-	    menu->items[1].d.text.text = "Server gone.";
-	    ProcessMenu("menu-net-error", 1);
-	    menu->items[1].d.text.text = NULL;
-
+	    NetErrorMenu("Server gone.");
 	    NetConnectingCancel();
 	    return;
 	case ccs_incompatibleengine:
-	    menu->items[1].d.text.text = "Incompatible engine version.";
-	    ProcessMenu("menu-net-error", 1);
-	    menu->items[1].d.text.text = NULL;
-
+	    NetErrorMenu("Incompatible engine version.");
 	    NetConnectingCancel();
 	    return;
 	case ccs_badmap:
-	    menu->items[1].d.text.text = "Map not available.";
-	    ProcessMenu("menu-net-error", 1);
-	    menu->items[1].d.text.text = NULL;
-
+	    NetErrorMenu("Map not available.");
 	    NetConnectingCancel();
 	    return;
 	case ccs_incompatiblenetwork:
-	    menu->items[1].d.text.text = "Incompatible network version.";
-	    ProcessMenu("menu-net-error", 1);
-	    menu->items[1].d.text.text = NULL;
-
+	    NetErrorMenu("Incompatible network version.");
+	    NetConnectingCancel();
+	    return;
 	case ccs_usercanceled:
 	    NetConnectingCancel();
 	    return;
-
 	case ccs_started:
 	    NetworkGamePrepareGameSettings();
 	    CustomGameStart();
 	    return;
-
 	default:
 	    break;
     }
@@ -4785,10 +4762,7 @@ local void EditorNewOk(void)
 	    sprintf(menu->items[5].d.input.buffer, "32~!_");
 	    menu->items[5].d.input.nch = strlen(menu->items[5].d.text.text) - 3;
 	}
-	menu = FindMenu("menu-net-error");
-	menu->items[1].d.text.text = "Size smaller than 32";
-	ProcessMenu("menu-net-error", 1);
-	menu->items[1].d.text.text = NULL;
+	ErrorMenu("Size smaller than 32");
     } else if (value1 > 1024 || value2 > 1024) {
 	if (value1 == 0) {
 	    sprintf(menu->items[4].d.input.buffer, "1024~!_");
@@ -4798,10 +4772,7 @@ local void EditorNewOk(void)
 	    sprintf(menu->items[5].d.input.buffer, "1024~!_");
 	    menu->items[5].d.input.nch = strlen(menu->items[5].d.text.text) - 3;
 	}
-	menu = FindMenu("menu-net-error");
-	menu->items[1].d.text.text = "Size larger than 1024";
-	ProcessMenu("menu-net-error", 1);
-	menu->items[1].d.text.text = NULL;
+	ErrorMenu("Size larger than 1024");
     } else if (value1/32*32 != value1 || value2/32*32 != value2) {
 	if (value1/32*32 != value1) {
 	    sprintf(menu->items[4].d.input.buffer, "%d~!_", (value1+16)/32*32);
@@ -4811,10 +4782,7 @@ local void EditorNewOk(void)
 	    sprintf(menu->items[5].d.input.buffer, "%d~!_", (value2+16)/32*32);
 	    menu->items[5].d.input.nch = strlen(menu->items[5].d.text.text) - 3;
 	}
-	menu = FindMenu("menu-net-error");
-	menu->items[1].d.text.text = "Size must be a multiple of 32";
-	ProcessMenu("menu-net-error", 1);
-	menu->items[1].d.text.text = NULL;
+	ErrorMenu("Size must be a multiple of 32");
     }
     else {
 	EndMenu();
@@ -6621,6 +6589,44 @@ local void ReplayGameCancel(void)
     menu->items[5].d.button.text = NULL;
 }
 
+/**
+**	Net error menu
+**
+**	@param error	    Error message
+*/
+local void NetErrorMenu(char *error)
+{
+    Menu *menu;
+
+    menu = FindMenu("menu-net-error");
+    menu->items[1].d.text.text = error;
+    ProcessMenu("menu-net-error", 1);
+    menu->items[1].d.text.text = NULL;
+}
+
+/**
+**	Error menu
+**
+**	@param error	    Error message
+*/
+global void ErrorMenu(char *error)
+{
+    Menu *menu;
+    int oldx;
+    int oldy;
+
+    menu = FindMenu("menu-net-error");
+    oldx = menu->x;
+    oldy = menu->y;
+    menu->x = (VideoWidth - menu->xsize) / 2;
+    menu->y = (VideoHeight - menu->ysize) / 2;
+    menu->items[1].d.text.text = error;
+    ProcessMenu("menu-net-error", 1);
+    menu->items[1].d.text.text = NULL;
+    menu->x = oldx;
+    menu->y = oldy;
+}
+
 /*----------------------------------------------------------------------------
 --	Init functions
 ----------------------------------------------------------------------------*/