1
0

AddStepWindow.xaml.cs 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. // SPDX-FileCopyrightText: 2024 Piras314 <p1r4s@proton.me>
  2. // SPDX-FileCopyrightText: 2024 deltanedas <39013340+deltanedas@users.noreply.github.com>
  3. // SPDX-FileCopyrightText: 2024 deltanedas <@deltanedas:kde.org>
  4. // SPDX-FileCopyrightText: 2025 Aiden <28298836+Aidenkrz@users.noreply.github.com>
  5. //
  6. // SPDX-License-Identifier: AGPL-3.0-or-later
  7. using Content.Client.UserInterface.Controls;
  8. using Content.Shared.Administration;
  9. using Content.Shared._Shitmed.Autodoc;
  10. using Robust.Client.AutoGenerated;
  11. using Robust.Client.UserInterface.XAML;
  12. namespace Content.Client._Shitmed.Autodoc;
  13. [GenerateTypedNameReferences]
  14. public sealed partial class AddStepWindow : FancyWindow
  15. {
  16. public event Action<IAutodocStep>? OnAddStep;
  17. private PickSurgeryWindow? _surgery;
  18. private DialogWindow? _grab;
  19. private DialogWindow? _label;
  20. private DialogWindow? _wait;
  21. public AddStepWindow()
  22. {
  23. RobustXamlLoader.Load(this);
  24. // close the window once any step is added
  25. OnAddStep += _ => Close();
  26. OnClose += () =>
  27. {
  28. _surgery?.Close();
  29. _grab?.Close();
  30. _label?.Close();
  31. _wait?.Close();
  32. };
  33. // dedicated ui to pick the enum values and surgery type
  34. SurgeryButton.OnPressed += _ =>
  35. {
  36. if (_surgery is {} window)
  37. {
  38. window.MoveToFront();
  39. return;
  40. }
  41. _surgery = new PickSurgeryWindow();
  42. _surgery.OnAddStep += step => OnAddStep?.Invoke(step);
  43. _surgery.OnClose += () => _surgery = null;
  44. _surgery.OpenCentered();
  45. };
  46. // just picking a string, use a dialog
  47. GrabItemButton.OnPressed += _ =>
  48. {
  49. if (_grab is {} dialog)
  50. {
  51. dialog.MoveToFront();
  52. return;
  53. }
  54. var field = "name";
  55. var prompt = Loc.GetString("autodoc-add-step-grab-item-prompt");
  56. var placeholder = Loc.GetString("autodoc-add-step-grab-item-placeholder");
  57. var entry = new QuickDialogEntry(field, QuickDialogEntryType.ShortText, prompt, placeholder);
  58. var entries = new List<QuickDialogEntry> { entry };
  59. _grab = new DialogWindow(GrabItemButton.Text!, entries);
  60. _grab.OnConfirmed += responses =>
  61. {
  62. var name = responses[field].Trim();
  63. if (name.Length < 1 || name.Length > 100)
  64. return;
  65. OnAddStep?.Invoke(new GrabItemAutodocStep()
  66. {
  67. Name = name
  68. });
  69. };
  70. _grab.OnClose += () => _grab = null;
  71. };
  72. // no arguments so these are trivial
  73. GrabOrganButton.OnPressed += _ => OnAddStep?.Invoke(new GrabAnyOrganAutodocStep());
  74. GrabPartButton.OnPressed += _ => OnAddStep?.Invoke(new GrabAnyBodyPartAutodocStep());
  75. StoreItemButton.OnPressed += _ => OnAddStep?.Invoke(new StoreItemAutodocStep());
  76. SetLabelButton.OnPressed += _ =>
  77. {
  78. if (_label is {} dialog)
  79. {
  80. dialog.MoveToFront();
  81. return;
  82. }
  83. var field = "label";
  84. var prompt = Loc.GetString("autodoc-add-step-set-label-prompt");
  85. var entry = new QuickDialogEntry(field, QuickDialogEntryType.ShortText, prompt);
  86. var entries = new List<QuickDialogEntry> { entry };
  87. _label = new DialogWindow(SetLabelButton.Text!, entries);
  88. _label.OnConfirmed += responses =>
  89. {
  90. var label = responses[field].Trim();
  91. if (label.Length < 1 || label.Length > 20)
  92. return;
  93. OnAddStep?.Invoke(new SetLabelAutodocStep()
  94. {
  95. Label = label
  96. });
  97. };
  98. _label.OnClose += () => _label = null;
  99. };
  100. WaitButton.OnPressed += _ =>
  101. {
  102. if (_wait is {} dialog)
  103. {
  104. dialog.MoveToFront();
  105. return;
  106. }
  107. var field = "length";
  108. var prompt = Loc.GetString("autodoc-add-step-wait-prompt");
  109. var entry = new QuickDialogEntry(field, QuickDialogEntryType.Integer, prompt);
  110. var entries = new List<QuickDialogEntry> { entry };
  111. _wait = new DialogWindow(WaitButton.Text!, entries);
  112. _wait.OnConfirmed += responses =>
  113. {
  114. var length = int.Parse(responses[field].Trim());
  115. if (length < 1 || length > 30)
  116. return;
  117. OnAddStep?.Invoke(new WaitAutodocStep()
  118. {
  119. Length = length
  120. });
  121. };
  122. _wait.OnClose += () => _wait = null;
  123. };
  124. }
  125. }