Adds even more smites and a bunch of tools. (#9825)
* Adds three new smites, headstand, locker stuff, and reptilian species swap. * Localize all the smites. * save work * More smites... * Final tweaks. * oops * !PLEH * Adds disarm prone and improved hand removal options. * fix chances. * take out the trash. * Add some admin TRICKS instead of more smites. * oop * Implements the admin test arena and associated trick. * Tricks for granting/revoking access. * e * mfw * Implement quick dialogs, for when you don't want to spend 20 minutes writing a simple dialog prompt. * Forgot the rejuv icon. * E * docs * augh * Add rename/redescribe buttons. * Adds objects menu, implements a couple tricks for stations. * 1984 * Adds a trick for effectively infinite power. * fixes some icon uggo. * a * HALT! * Pause/unpause buttons. * Forgor the textures. * they broke every bone in their body. * i added more * more battery actions, touch up battery icon. * Address reviews.
This commit is contained in:
154
Content.Client/Administration/QuickDialogSystem.cs
Normal file
154
Content.Client/Administration/QuickDialogSystem.cs
Normal file
@@ -0,0 +1,154 @@
|
||||
using System.Linq;
|
||||
using Content.Client.UserInterface;
|
||||
using Content.Shared.Administration;
|
||||
using Robust.Client.UserInterface;
|
||||
using Robust.Client.UserInterface.Controls;
|
||||
|
||||
namespace Content.Client.Administration;
|
||||
|
||||
/// <summary>
|
||||
/// This handles the client portion of quick dialogs.
|
||||
/// </summary>
|
||||
public sealed class QuickDialogSystem : EntitySystem
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
public override void Initialize()
|
||||
{
|
||||
SubscribeNetworkEvent<QuickDialogOpenEvent>(OpenDialog);
|
||||
}
|
||||
|
||||
private void OpenDialog(QuickDialogOpenEvent ev)
|
||||
{
|
||||
var window = new FancyWindow()
|
||||
{
|
||||
Title = ev.Title
|
||||
};
|
||||
|
||||
var entryContainer = new BoxContainer()
|
||||
{
|
||||
Orientation = BoxContainer.LayoutOrientation.Vertical,
|
||||
Margin = new Thickness(8),
|
||||
};
|
||||
|
||||
var promptsDict = new Dictionary<string, LineEdit>();
|
||||
|
||||
foreach (var entry in ev.Prompts)
|
||||
{
|
||||
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};
|
||||
entryBox.AddChild(edit);
|
||||
switch (entry.Type)
|
||||
{
|
||||
case QuickDialogEntryType.Integer:
|
||||
edit.IsValid += VerifyInt;
|
||||
edit.PlaceHolder = "Integer..";
|
||||
break;
|
||||
case QuickDialogEntryType.Float:
|
||||
edit.IsValid += VerifyFloat;
|
||||
edit.PlaceHolder = "Float..";
|
||||
break;
|
||||
case QuickDialogEntryType.ShortText:
|
||||
edit.IsValid += VerifyShortText;
|
||||
edit.PlaceHolder = "Short text..";
|
||||
break;
|
||||
case QuickDialogEntryType.LongText:
|
||||
edit.IsValid += VerifyLongText;
|
||||
edit.PlaceHolder = "Long text..";
|
||||
break;
|
||||
default:
|
||||
throw new ArgumentOutOfRangeException();
|
||||
}
|
||||
promptsDict.Add(entry.FieldId, edit);
|
||||
entryContainer.AddChild(entryBox);
|
||||
}
|
||||
|
||||
var buttonsBox = new BoxContainer()
|
||||
{
|
||||
Orientation = BoxContainer.LayoutOrientation.Horizontal,
|
||||
HorizontalAlignment = Control.HAlignment.Center,
|
||||
};
|
||||
|
||||
var alreadyReplied = false;
|
||||
|
||||
if ((ev.Buttons & QuickDialogButtonFlag.OkButton) != 0)
|
||||
{
|
||||
var okButton = new Button()
|
||||
{
|
||||
Text = "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();
|
||||
};
|
||||
|
||||
buttonsBox.AddChild(okButton);
|
||||
}
|
||||
|
||||
if ((ev.Buttons & QuickDialogButtonFlag.OkButton) != 0)
|
||||
{
|
||||
var cancelButton = new Button()
|
||||
{
|
||||
Text = "Cancel",
|
||||
};
|
||||
|
||||
cancelButton.OnPressed += _ =>
|
||||
{
|
||||
RaiseNetworkEvent(new QuickDialogResponseEvent(ev.DialogId,
|
||||
new(),
|
||||
QuickDialogButtonFlag.CancelButton));
|
||||
alreadyReplied = true;
|
||||
window.Close();
|
||||
};
|
||||
|
||||
buttonsBox.AddChild(cancelButton);
|
||||
}
|
||||
|
||||
window.OnClose += () =>
|
||||
{
|
||||
if (!alreadyReplied)
|
||||
{
|
||||
RaiseNetworkEvent(new QuickDialogResponseEvent(ev.DialogId,
|
||||
new(),
|
||||
QuickDialogButtonFlag.CancelButton));
|
||||
}
|
||||
};
|
||||
|
||||
entryContainer.AddChild(buttonsBox);
|
||||
|
||||
window.ContentsContainer.AddChild(entryContainer);
|
||||
|
||||
window.MinWidth *= 2; // Just double it.
|
||||
|
||||
window.OpenCentered();
|
||||
}
|
||||
|
||||
private bool VerifyInt(string input)
|
||||
{
|
||||
return int.TryParse(input, out var _);
|
||||
}
|
||||
|
||||
private bool VerifyFloat(string input)
|
||||
{
|
||||
return float.TryParse(input, out var _);
|
||||
}
|
||||
|
||||
private bool VerifyShortText(string input)
|
||||
{
|
||||
return input.Length <= 100;
|
||||
}
|
||||
|
||||
private bool VerifyLongText(string input)
|
||||
{
|
||||
return input.Length <= 2000;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user