NewsWriterBoundUserInterface.cs 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. using JetBrains.Annotations;
  2. using Content.Shared.MassMedia.Systems;
  3. using Content.Shared.MassMedia.Components;
  4. using Robust.Client.UserInterface;
  5. using Robust.Shared.Timing;
  6. using Robust.Shared.Utility;
  7. namespace Content.Client.MassMedia.Ui;
  8. [UsedImplicitly]
  9. public sealed class NewsWriterBoundUserInterface : BoundUserInterface
  10. {
  11. [ViewVariables]
  12. private NewsWriterMenu? _menu;
  13. public NewsWriterBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey)
  14. {
  15. }
  16. protected override void Open()
  17. {
  18. base.Open();
  19. _menu = this.CreateWindow<NewsWriterMenu>();
  20. _menu.ArticleEditorPanel.PublishButtonPressed += OnPublishButtonPressed;
  21. _menu.DeleteButtonPressed += OnDeleteButtonPressed;
  22. _menu.CreateButtonPressed += OnCreateButtonPressed;
  23. _menu.ArticleEditorPanel.ArticleDraftUpdated += OnArticleDraftUpdated;
  24. SendMessage(new NewsWriterArticlesRequestMessage());
  25. }
  26. protected override void UpdateState(BoundUserInterfaceState state)
  27. {
  28. base.UpdateState(state);
  29. if (state is not NewsWriterBoundUserInterfaceState cast)
  30. return;
  31. _menu?.UpdateUI(cast.Articles, cast.PublishEnabled, cast.NextPublish, cast.DraftTitle, cast.DraftContent);
  32. }
  33. private void OnPublishButtonPressed()
  34. {
  35. var title = _menu?.ArticleEditorPanel.TitleField.Text.Trim() ?? "";
  36. if (_menu == null || title.Length == 0)
  37. return;
  38. var stringContent = Rope.Collapse(_menu.ArticleEditorPanel.ContentField.TextRope).Trim();
  39. if (stringContent.Length == 0)
  40. return;
  41. var name = title.Length <= SharedNewsSystem.MaxTitleLength
  42. ? title
  43. : $"{title[..(SharedNewsSystem.MaxTitleLength - 3)]}...";
  44. var content = stringContent.Length <= SharedNewsSystem.MaxContentLength
  45. ? stringContent
  46. : $"{stringContent[..(SharedNewsSystem.MaxContentLength - 3)]}...";
  47. SendMessage(new NewsWriterPublishMessage(name, content));
  48. }
  49. private void OnDeleteButtonPressed(int articleNum)
  50. {
  51. if (_menu == null)
  52. return;
  53. SendMessage(new NewsWriterDeleteMessage(articleNum));
  54. }
  55. private void OnCreateButtonPressed()
  56. {
  57. SendMessage(new NewsWriterRequestDraftMessage());
  58. }
  59. private void OnArticleDraftUpdated(string title, string content)
  60. {
  61. SendMessage(new NewsWriterSaveDraftMessage(title, content));
  62. }
  63. }