From: Pieter-Jan Briers Date: Sun, 14 Jan 2024 03:18:02 +0000 (+0100) Subject: Quick dialog fixes (#24046) X-Git-Url: https://git.smokeofanarchy.ru/gitweb.cgi?a=commitdiff_plain;h=8416fc746b08d943b26f220002087c667d9c2a00;p=space-station-14.git Quick dialog fixes (#24046) Pressing "enter" on the last dialog box now confirms the dialog. Localize. --- diff --git a/Content.Client/Administration/QuickDialogSystem.cs b/Content.Client/Administration/QuickDialogSystem.cs index 69a9218267..84236c5a3e 100644 --- a/Content.Client/Administration/QuickDialogSystem.cs +++ b/Content.Client/Administration/QuickDialogSystem.cs @@ -6,6 +6,8 @@ using Robust.Client.UserInterface.Controls; namespace Content.Client.Administration; +// mfw they ported input() from BYOND + /// /// This handles the client portion of quick dialogs. /// @@ -32,39 +34,48 @@ public sealed class QuickDialogSystem : EntitySystem var promptsDict = new Dictionary(); - foreach (var entry in ev.Prompts) + for (var index = 0; index < ev.Prompts.Count; index++) { + var entry = ev.Prompts[index]; var entryBox = new BoxContainer() { Orientation = BoxContainer.LayoutOrientation.Horizontal }; entryBox.AddChild(new Label { Text = entry.Prompt, HorizontalExpand = true, SizeFlagsStretchRatio = 0.5f }); - var edit = new LineEdit() { HorizontalExpand = true}; + var edit = new LineEdit() { HorizontalExpand = true }; entryBox.AddChild(edit); switch (entry.Type) { case QuickDialogEntryType.Integer: edit.IsValid += VerifyInt; - edit.PlaceHolder = "Integer.."; + edit.PlaceHolder = Loc.GetString("quick-dialog-ui-integer"); break; case QuickDialogEntryType.Float: edit.IsValid += VerifyFloat; - edit.PlaceHolder = "Float.."; + edit.PlaceHolder = Loc.GetString("quick-dialog-ui-float"); break; case QuickDialogEntryType.ShortText: edit.IsValid += VerifyShortText; - edit.PlaceHolder = "Short text.."; + edit.PlaceHolder = Loc.GetString("quick-dialog-ui-short-text"); break; case QuickDialogEntryType.LongText: edit.IsValid += VerifyLongText; - edit.PlaceHolder = "Long text.."; + edit.PlaceHolder = Loc.GetString("quick-dialog-ui-long-text"); break; default: throw new ArgumentOutOfRangeException(); } + promptsDict.Add(entry.FieldId, edit); entryContainer.AddChild(entryBox); + + if (index == ev.Prompts.Count - 1) + { + // Last text box gets enter confirmation. + // Only the last so you don't accidentally confirm early. + edit.OnTextEntered += _ => Confirm(); + } } var buttonsBox = new BoxContainer() @@ -79,17 +90,10 @@ public sealed class QuickDialogSystem : EntitySystem { var okButton = new Button() { - Text = "Ok", + Text = Loc.GetString("quick-dialog-ui-ok"), }; - okButton.OnPressed += _ => - { - RaiseNetworkEvent(new QuickDialogResponseEvent(ev.DialogId, - promptsDict.Select(x => (x.Key, x.Value.Text)).ToDictionary(x => x.Key, x => x.Text), - QuickDialogButtonFlag.OkButton)); - alreadyReplied = true; - window.Close(); - }; + okButton.OnPressed += _ => Confirm(); buttonsBox.AddChild(okButton); } @@ -98,7 +102,7 @@ public sealed class QuickDialogSystem : EntitySystem { var cancelButton = new Button() { - Text = "Cancel", + Text = Loc.GetString("quick-dialog-ui-cancel"), }; cancelButton.OnPressed += _ => @@ -130,6 +134,17 @@ public sealed class QuickDialogSystem : EntitySystem window.MinWidth *= 2; // Just double it. window.OpenCentered(); + + return; + + void Confirm() + { + RaiseNetworkEvent(new QuickDialogResponseEvent(ev.DialogId, + promptsDict.Select(x => (x.Key, x.Value.Text)).ToDictionary(x => x.Key, x => x.Text), + QuickDialogButtonFlag.OkButton)); + alreadyReplied = true; + window.Close(); + } } private bool VerifyInt(string input) diff --git a/Resources/Locale/en-US/quick-dialog/quick-dialog.ftl b/Resources/Locale/en-US/quick-dialog/quick-dialog.ftl new file mode 100644 index 0000000000..f2b6f7f9a9 --- /dev/null +++ b/Resources/Locale/en-US/quick-dialog/quick-dialog.ftl @@ -0,0 +1,6 @@ +quick-dialog-ui-integer = Integer.. +quick-dialog-ui-float = Float.. +quick-dialog-ui-short-text = Short text.. +quick-dialog-ui-long-text = Long text.. +quick-dialog-ui-ok = Ok +quick-dialog-ui-cancel = Cancel