diff --git a/AUTHORS b/AUTHORS
index fe3de9cc40..e69e5760d2 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -58,6 +58,7 @@ Also thanks to:
* Olaf van der Spek
* Paolo Chiodi (paolochiodi)
* Paul Dovydaitis (pdovy)
+ * Pavlos Touboulidis (pav)
* Pizzaoverhead
* Psydev
* Raymond Martineau (mart0258)
diff --git a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj
index ab8bb3ebb8..97ac3bedb6 100644
--- a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj
+++ b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj
@@ -497,6 +497,7 @@
+
diff --git a/OpenRA.Mods.RA/Widgets/ConfirmationDialogs.cs b/OpenRA.Mods.RA/Widgets/ConfirmationDialogs.cs
new file mode 100644
index 0000000000..430827b1df
--- /dev/null
+++ b/OpenRA.Mods.RA/Widgets/ConfirmationDialogs.cs
@@ -0,0 +1,42 @@
+#region Copyright & License Information
+/*
+ * Copyright 2007-2011 The OpenRA Developers (see AUTHORS)
+ * This file is part of OpenRA, which is free software. It is made
+ * available to you under the terms of the GNU General Public License
+ * as published by the Free Software Foundation. For more information,
+ * see COPYING.
+ */
+#endregion
+
+using System;
+using OpenRA.Widgets;
+
+namespace OpenRA.Mods.RA.Widgets
+{
+ public static class ConfirmationDialogs
+ {
+ public static void PromptConfirmAction(string title, string text, Action onConfirm, Action onCancel = null, string confirmText = null, string cancelText = null)
+ {
+ var prompt = Ui.OpenWindow("CONFIRM_PROMPT");
+ prompt.Get("PROMPT_TITLE").GetText = () => title;
+ prompt.Get("PROMPT_TEXT").GetText = () => text;
+ if (!string.IsNullOrEmpty(confirmText))
+ prompt.Get("CONFIRM_BUTTON").GetText = () => confirmText;
+ if (!string.IsNullOrEmpty(cancelText))
+ prompt.Get("CANCEL_BUTTON").GetText = () => cancelText;
+
+ prompt.Get("CONFIRM_BUTTON").OnClick = () =>
+ {
+ Ui.CloseWindow();
+ onConfirm();
+ };
+
+ prompt.Get("CANCEL_BUTTON").OnClick = () =>
+ {
+ Ui.CloseWindow();
+ if (onCancel != null)
+ onCancel();
+ };
+ }
+ }
+}
diff --git a/OpenRA.Mods.RA/Widgets/Logic/IngameMenuLogic.cs b/OpenRA.Mods.RA/Widgets/Logic/IngameMenuLogic.cs
index d2e44b17fe..6a3b4010a1 100644
--- a/OpenRA.Mods.RA/Widgets/Logic/IngameMenuLogic.cs
+++ b/OpenRA.Mods.RA/Widgets/Logic/IngameMenuLogic.cs
@@ -21,8 +21,16 @@ namespace OpenRA.Mods.RA.Widgets.Logic
{
widget.Get("DISCONNECT").OnClick = () =>
{
- onExit();
- LeaveGame(world);
+ ConfirmationDialogs.PromptConfirmAction(
+ "Abort Mission",
+ "Leave this game and return to the menu?",
+ () =>
+ {
+ onExit();
+ LeaveGame(world);
+ },
+ null,
+ "Abort");
};
widget.Get("SETTINGS").OnClick = () =>
@@ -44,8 +52,16 @@ namespace OpenRA.Mods.RA.Widgets.Logic
widget.Get("SURRENDER").OnClick = () =>
{
- world.IssueOrder(new Order("Surrender", world.LocalPlayer.PlayerActor, false));
- onExit();
+ ConfirmationDialogs.PromptConfirmAction(
+ "Surrender",
+ "Are you sure you want to surrender?",
+ () =>
+ {
+ world.IssueOrder(new Order("Surrender", world.LocalPlayer.PlayerActor, false));
+ onExit();
+ },
+ null,
+ "Surrender");
};
widget.Get("SURRENDER").IsVisible = () => world.LocalPlayer != null && world.LocalPlayer.WinState == WinState.Undefined;
}
diff --git a/mods/ra/chrome/confirmation-dialogs.yaml b/mods/ra/chrome/confirmation-dialogs.yaml
new file mode 100644
index 0000000000..972067af83
--- /dev/null
+++ b/mods/ra/chrome/confirmation-dialogs.yaml
@@ -0,0 +1,34 @@
+Background@CONFIRM_PROMPT:
+ X: (WINDOW_RIGHT - WIDTH)/2
+ Y: (WINDOW_BOTTOM - 90)/2
+ Width: 370
+ Height: 175
+ Children:
+ Label@PROMPT_TITLE:
+ Width: PARENT_RIGHT
+ Y: 20
+ Height: 25
+ Font: Bold
+ Align: Center
+ Label@PROMPT_TEXT:
+ X: 15
+ Y: 50
+ Width: PARENT_RIGHT - 30
+ Height: 65
+ Align: Center
+ Button@CONFIRM_BUTTON:
+ X: 20
+ Y: PARENT_BOTTOM - 45
+ Width: 160
+ Height: 25
+ Text: Confirm
+ Font: Bold
+ Key: return
+ Button@CANCEL_BUTTON:
+ X: PARENT_RIGHT - 180
+ Y: PARENT_BOTTOM - 45
+ Width: 160
+ Height: 25
+ Text: Cancel
+ Font: Bold
+ Key: escape
diff --git a/mods/ra/mod.yaml b/mods/ra/mod.yaml
index d1c158812c..b9100eb0e0 100644
--- a/mods/ra/mod.yaml
+++ b/mods/ra/mod.yaml
@@ -100,6 +100,7 @@ ChromeLayout:
mods/ra/chrome/assetbrowser.yaml
mods/ra/chrome/irc.yaml
mods/ra/chrome/missionbrowser.yaml
+ mods/ra/chrome/confirmation-dialogs.yaml
Weapons:
mods/ra/weapons.yaml