UIFindTextWidget.cpp 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  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/AtomicEditor
  4. #include "AtomicEditor.h"
  5. #include <Atomic/Core/Context.h>
  6. #include <Atomic/IO/Log.h>
  7. #include <Atomic/UI/TBUI.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. TBUI* tbui = GetSubsystem<TBUI>();
  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. }
  27. FindTextWidget::~FindTextWidget()
  28. {
  29. }
  30. void FindTextWidget::SetUISize(int uiWidth, int uiHeight)
  31. {
  32. TBContainer* findcontainer = delegate_->GetWidgetByIDAndType<TBContainer>(TBIDC("findcontainer"));
  33. assert(findcontainer);
  34. PreferredSize psize = delegate_->GetPreferredSize();
  35. int height = psize.min_h + 16;
  36. delegate_->SetSize(uiWidth, height);
  37. findcontainer->SetSize(uiWidth, height);
  38. delegate_->SetPosition(TBPoint(0, uiHeight - height));
  39. }
  40. void FindTextWidget::HandleFindTextOpen(StringHash eventType, VariantMap& eventData)
  41. {
  42. if (delegate_->GetVisibility() == WIDGET_VISIBILITY_VISIBLE)
  43. {
  44. findtextedit_->SetFocus(WIDGET_FOCUS_REASON_UNKNOWN);
  45. return;
  46. }
  47. delegate_->SetVisibilility(WIDGET_VISIBILITY_VISIBLE);
  48. findtextedit_->SetFocus(WIDGET_FOCUS_REASON_UNKNOWN);
  49. TBStyleEdit* styleEdit = findtextedit_->GetStyleEdit();
  50. styleEdit->selection.SelectAll();
  51. }
  52. void FindTextWidget::HandleFindTextClose(StringHash eventType, VariantMap& eventData)
  53. {
  54. delegate_->SetVisibilility(WIDGET_VISIBILITY_INVISIBLE);
  55. }
  56. void FindTextWidget::GetFindText(String& text)
  57. {
  58. TBStr _text;
  59. findtextedit_->GetText(_text);
  60. text = _text.CStr();
  61. }
  62. void FindTextWidget::Find(const String& findText, unsigned flags)
  63. {
  64. using namespace FindText;
  65. VariantMap eventData;
  66. eventData[P_TEXT] = findText;
  67. eventData[P_FLAGS] = flags;
  68. SendEvent(E_FINDTEXT, eventData);
  69. }
  70. bool FindTextWidget::OnEvent(const TBWidgetEvent &ev)
  71. {
  72. bool findnext = false;
  73. if (ev.type == EVENT_TYPE_KEY_DOWN)
  74. {
  75. if (ev.special_key == TB_KEY_ESC)
  76. {
  77. SendEvent(E_FINDTEXTCLOSE);
  78. }
  79. else if (ev.special_key == TB_KEY_ENTER)
  80. {
  81. findnext = true;
  82. }
  83. }
  84. if (ev.type == EVENT_TYPE_CHANGED)
  85. {
  86. TBStr _text;
  87. findtextedit_->GetText(_text);
  88. using namespace FindText;
  89. VariantMap eventData;
  90. int flags = FINDTEXT_FLAG_NONE;
  91. flags |= FINDTEXT_FLAG_WRAP;
  92. eventData[P_TEXT] = _text.CStr();
  93. eventData[P_FLAGS] = flags;
  94. SendEvent(E_FINDTEXT, eventData);
  95. }
  96. if (findnext || ev.type == EVENT_TYPE_SHORTCUT)
  97. {
  98. if (findnext || ev.ref_id == TBIDC("findnext") || ev.ref_id == TBIDC("findprev"))
  99. {
  100. TBStr _text;
  101. findtextedit_->GetText(_text);
  102. unsigned flags = FINDTEXT_FLAG_NONE;
  103. if (findnext || ev.ref_id == TBIDC("findnext"))
  104. flags |= FINDTEXT_FLAG_NEXT;
  105. else if (ev.ref_id == TBIDC("findprev"))
  106. flags |= FINDTEXT_FLAG_PREV;
  107. flags |= FINDTEXT_FLAG_WRAP;
  108. Find(_text.CStr(), flags);
  109. }
  110. }
  111. return false;
  112. }
  113. }