StartPageView.cs 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. using System;
  2. using JetBrains.Annotations;
  3. using Unity.Cloud.Collaborate.Assets;
  4. using Unity.Cloud.Collaborate.Components;
  5. using Unity.Cloud.Collaborate.Presenters;
  6. using Unity.Cloud.Collaborate.UserInterface;
  7. using UnityEditor;
  8. using UnityEngine.UIElements;
  9. namespace Unity.Cloud.Collaborate.Views
  10. {
  11. internal class StartPageView : PageComponent, IStartView
  12. {
  13. public const string UssClassName = "start-page-view";
  14. public const string UssTitleClassName = UssClassName + "__title";
  15. public const string UssButtonClassName = UssClassName + "__button";
  16. static readonly string k_LayoutPath = $"{CollaborateWindow.LayoutPath}/{nameof(StartPageView)}.uxml";
  17. static readonly string k_StylePath = $"{CollaborateWindow.StylePath}/{nameof(StartPageView)}.uss";
  18. IStartPresenter m_Presenter;
  19. readonly Label m_Text;
  20. readonly Button m_Button;
  21. public StartPageView()
  22. {
  23. AddToClassList(UssClassName);
  24. AssetDatabase.LoadAssetAtPath<VisualTreeAsset>(k_LayoutPath).CloneTree(this);
  25. styleSheets.Add(AssetDatabase.LoadAssetAtPath<StyleSheet>(k_StylePath));
  26. m_Text = this.Q<Label>(className: UssTitleClassName);
  27. m_Button = this.Q<Button>(className: UssButtonClassName);
  28. }
  29. /// <inheritdoc />
  30. public IStartPresenter Presenter
  31. {
  32. set
  33. {
  34. m_Presenter = value;
  35. SetupEvents();
  36. // If page active before presenter has been added, call start once we have it.
  37. if (Active)
  38. {
  39. m_Presenter.Start();
  40. }
  41. }
  42. }
  43. /// <inheritdoc />
  44. protected override void SetActive()
  45. {
  46. m_Presenter?.Start();
  47. }
  48. /// <inheritdoc />
  49. protected override void SetInactive()
  50. {
  51. m_Presenter?.Stop();
  52. }
  53. void SetupEvents()
  54. {
  55. m_Button.clickable.clicked += m_Presenter.RequestStart;
  56. }
  57. /// <inheritdoc />
  58. public string Text
  59. {
  60. set => m_Text.text = value;
  61. }
  62. /// <inheritdoc />
  63. public string ButtonText
  64. {
  65. set => m_Button.text = value;
  66. }
  67. /// <inheritdoc />
  68. public void SetButtonVisible(bool isVisible)
  69. {
  70. if (isVisible)
  71. {
  72. m_Button.RemoveFromClassList(UiConstants.ussHidden);
  73. }
  74. else
  75. {
  76. m_Button.AddToClassList(UiConstants.ussHidden);
  77. }
  78. }
  79. [UsedImplicitly]
  80. public new class UxmlFactory : UxmlFactory<StartPageView> { }
  81. }
  82. }