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