UIFindTextWidget.cpp 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  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 <Atomic/IO/Log.h>
  7. #include <Atomic/UI/UI.h>
  8. #include <TurboBadger/tb_editfield.h>
  9. #include "../AEEvents.h"
  10. #include "UIFindTextWidget.h"
  11. namespace AtomicEditor
  12. {
  13. FindTextWidget::FindTextWidget(Context* context) :
  14. AEWidget(context),
  15. findtextedit_(0)
  16. {
  17. context_->RegisterSubsystem(this);
  18. UI* tbui = GetSubsystem<UI>();
  19. tbui->LoadResourceFile(delegate_, "AtomicEditor/editor/ui/findtextwidget.tb.txt");
  20. tbui->GetRootWidget()->AddChild(delegate_);
  21. findtextedit_ = delegate_->GetWidgetByIDAndType<TBEditField>(TBIDC("findtextedit"));
  22. assert(findtextedit_);
  23. delegate_->SetVisibilility(WIDGET_VISIBILITY_INVISIBLE);
  24. SubscribeToEvent(E_FINDTEXTOPEN, HANDLER(FindTextWidget, HandleFindTextOpen));
  25. SubscribeToEvent(E_FINDTEXTCLOSE, HANDLER(FindTextWidget, HandleFindTextClose));
  26. SubscribeToEvent(E_EDITORSHUTDOWN, HANDLER(FindTextWidget, HandleEditorShutdown));
  27. }
  28. FindTextWidget::~FindTextWidget()
  29. {
  30. }
  31. void FindTextWidget::SetUISize(int uiWidth, int uiHeight)
  32. {
  33. TBContainer* findcontainer = delegate_->GetWidgetByIDAndType<TBContainer>(TBIDC("findcontainer"));
  34. assert(findcontainer);
  35. PreferredSize psize = delegate_->GetPreferredSize();
  36. int height = psize.min_h + 16;
  37. delegate_->SetSize(uiWidth, height);
  38. findcontainer->SetSize(uiWidth, height);
  39. delegate_->SetPosition(TBPoint(0, uiHeight - height));
  40. }
  41. void FindTextWidget::HandleFindTextOpen(StringHash eventType, VariantMap& eventData)
  42. {
  43. if (delegate_->GetVisibility() == WIDGET_VISIBILITY_VISIBLE)
  44. {
  45. findtextedit_->SetFocus(WIDGET_FOCUS_REASON_UNKNOWN);
  46. return;
  47. }
  48. delegate_->SetVisibilility(WIDGET_VISIBILITY_VISIBLE);
  49. findtextedit_->SetFocus(WIDGET_FOCUS_REASON_UNKNOWN);
  50. TBStyleEdit* styleEdit = findtextedit_->GetStyleEdit();
  51. styleEdit->selection.SelectAll();
  52. }
  53. void FindTextWidget::HandleFindTextClose(StringHash eventType, VariantMap& eventData)
  54. {
  55. delegate_->SetVisibilility(WIDGET_VISIBILITY_INVISIBLE);
  56. }
  57. void FindTextWidget::GetFindText(String& text)
  58. {
  59. TBStr _text;
  60. findtextedit_->GetText(_text);
  61. text = _text.CStr();
  62. }
  63. void FindTextWidget::Find(const String& findText, unsigned flags)
  64. {
  65. using namespace FindText;
  66. VariantMap eventData;
  67. eventData[P_TEXT] = findText;
  68. eventData[P_FLAGS] = flags;
  69. SendEvent(E_FINDTEXT, eventData);
  70. }
  71. bool FindTextWidget::OnEvent(const TBWidgetEvent &ev)
  72. {
  73. bool findnext = false;
  74. if (ev.type == EVENT_TYPE_KEY_DOWN)
  75. {
  76. if (ev.special_key == TB_KEY_ESC)
  77. {
  78. SendEvent(E_FINDTEXTCLOSE);
  79. }
  80. else if (ev.special_key == TB_KEY_ENTER)
  81. {
  82. findnext = true;
  83. }
  84. }
  85. if (ev.type == EVENT_TYPE_CHANGED)
  86. {
  87. TBStr _text;
  88. findtextedit_->GetText(_text);
  89. using namespace FindText;
  90. VariantMap eventData;
  91. int flags = FINDTEXT_FLAG_NONE;
  92. flags |= FINDTEXT_FLAG_WRAP;
  93. eventData[P_TEXT] = _text.CStr();
  94. eventData[P_FLAGS] = flags;
  95. SendEvent(E_FINDTEXT, eventData);
  96. }
  97. if (findnext || ev.type == EVENT_TYPE_SHORTCUT)
  98. {
  99. if (findnext || ev.ref_id == TBIDC("findnext") || ev.ref_id == TBIDC("findprev"))
  100. {
  101. TBStr _text;
  102. findtextedit_->GetText(_text);
  103. unsigned flags = FINDTEXT_FLAG_NONE;
  104. if (findnext || ev.ref_id == TBIDC("findnext"))
  105. flags |= FINDTEXT_FLAG_NEXT;
  106. else if (ev.ref_id == TBIDC("findprev"))
  107. flags |= FINDTEXT_FLAG_PREV;
  108. flags |= FINDTEXT_FLAG_WRAP;
  109. Find(_text.CStr(), flags);
  110. }
  111. }
  112. return false;
  113. }
  114. void FindTextWidget::HandleEditorShutdown(StringHash eventType, VariantMap& eventData)
  115. {
  116. context_->RemoveSubsystem(GetType());
  117. }
  118. }