UIBuildComplete.cpp 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. // Copyright (c) 2014-2015, THUNDERBEAST GAMES LLC All rights reserved
  2. // Please see LICENSE.md in repository root for license information
  3. // https://github.com/AtomicGameEngine/AtomicGameEngine
  4. #include "AtomicEditor.h"
  5. #include <Atomic/Core/Context.h>
  6. #include "AEEvents.h"
  7. #include "UI/UIMainFrame.h"
  8. #include "UI/Modal/UIBuildComplete.h"
  9. #include <TurboBadger/tb_widgets_common.h>
  10. #include <TurboBadger/tb_window.h>
  11. #include <TurboBadger/tb_message_window.h>
  12. #include <TurboBadger/tb_editfield.h>
  13. #include <Atomic/UI/UI.h>
  14. #include <Build/BuildSystem.h>
  15. #include <Project/ProjectUtils.h>
  16. using namespace tb;
  17. namespace AtomicEditor
  18. {
  19. /// Construct.
  20. UIBuildComplete::UIBuildComplete(Context* context, const String &title, const String &message, const String &buildFolder, bool success) :
  21. AEWidget(context)
  22. , window_(0)
  23. , dimmer_(0)
  24. {
  25. buildFolder_ = buildFolder;
  26. success_ = success;
  27. UI* tbui = GetSubsystem<UI>();
  28. dimmer_ = new TBDimmer();
  29. window_ = new TBWindow();
  30. tbui->LoadResourceFile(window_->GetContentRoot(), "AtomicEditor/editor/ui/buildcomplete.tb.txt");
  31. window_->ResizeToFitContent();
  32. delegate_->AddChild(window_);
  33. message_ = delegate_->GetWidgetByIDAndType<TBTextField>(TBIDC("message"));
  34. assert(message_);
  35. TBButton* reveal = delegate_->GetWidgetByIDAndType<TBButton>(TBIDC("reveal"));
  36. assert(reveal);
  37. if (!success)
  38. reveal->SetState(WIDGET_STATE_DISABLED, true);
  39. message_->SetText(message.CString());
  40. window_->SetText(title.CString());
  41. Center();
  42. TBWidgetListener::AddGlobalListener(this);
  43. }
  44. /// Destruct.
  45. UIBuildComplete::~UIBuildComplete()
  46. {
  47. TBWidgetListener::RemoveGlobalListener(this);
  48. }
  49. bool UIBuildComplete::OnEvent(const TBWidgetEvent &ev)
  50. {
  51. BuildSystem* buildSystem = GetSubsystem<BuildSystem>();
  52. if (ev.type == EVENT_TYPE_CLICK)
  53. {
  54. if (ev.target->GetID() == TBIDC("ok"))
  55. {
  56. buildSystem->ClearBuildCompleteUI();
  57. return true;
  58. }
  59. else if (ev.target->GetID() == TBIDC("reveal"))
  60. {
  61. ProjectUtils* utils = GetSubsystem<ProjectUtils>();
  62. utils->RevealInFinder(buildFolder_);
  63. return true;
  64. }
  65. }
  66. return false;
  67. }
  68. void UIBuildComplete::SetMessage(const String& message)
  69. {
  70. message_->SetText(message.CString());
  71. }
  72. void UIBuildComplete::Center()
  73. {
  74. UI* tbui = GetSubsystem<UI>();
  75. TBRect rect = window_->GetRect();
  76. TBWidget* root = tbui->GetRootWidget();
  77. TBRect bounds(0, 0, root->GetRect().w, root->GetRect().h);
  78. window_->SetRect(rect.CenterIn(bounds).MoveIn(bounds).Clip(bounds));
  79. delegate_->SetRect(bounds);
  80. }
  81. void UIBuildComplete::Show()
  82. {
  83. assert(!dimmer_->GetParent());
  84. UI* tbui = GetSubsystem<UI>();
  85. TBWidget* root = tbui->GetRootWidget();
  86. root->AddChild(dimmer_);
  87. root->AddChild(delegate_);
  88. }
  89. void UIBuildComplete::Hide()
  90. {
  91. UI* tbui = GetSubsystem<UI>();
  92. tbui->GetRootWidget()->SetFocusRecursive(WIDGET_FOCUS_REASON_UNKNOWN);
  93. if (dimmer_->GetParent())
  94. dimmer_->GetParent()->RemoveChild(dimmer_);
  95. if (delegate_->GetParent())
  96. delegate_->GetParent()->RemoveChild(delegate_);
  97. }
  98. void UIBuildComplete::OnWidgetDelete(TBWidget *widget)
  99. {
  100. if (widget == window_)
  101. {
  102. BuildSystem* buildSystem = GetSubsystem<BuildSystem>();
  103. buildSystem->ClearBuildCompleteUI();
  104. }
  105. }
  106. bool UIBuildComplete::OnWidgetDying(TBWidget *widget)
  107. {
  108. return false;
  109. }
  110. }