AEEditorShortcuts.cpp 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  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 <rapidjson/document.h>
  6. #include "rapidjson/prettywriter.h"
  7. #include "rapidjson/filestream.h"
  8. #include <Atomic/Core/Context.h>
  9. #include <Atomic/IO/FileSystem.h>
  10. #include <Atomic/IO/Log.h>
  11. #include <Atomic/IO/File.h>
  12. #include <Atomic/Input/Input.h>
  13. #include <Atomic/Input/InputEvents.h>
  14. #include "UI/UIMainFrame.h"
  15. #include "UI/UIResourceFrame.h"
  16. #include "UI/Modal/UIModalOps.h"
  17. #include "AEEditor.h"
  18. #include "AEEvents.h"
  19. #include "AEEditorShortcuts.h"
  20. using namespace rapidjson;
  21. namespace AtomicEditor
  22. {
  23. EditorShortcuts::EditorShortcuts(Context* context) :
  24. Object(context)
  25. {
  26. SubscribeToEvent(E_KEYDOWN, HANDLER(EditorShortcuts, HandleKeyDown));
  27. SubscribeToEvent(E_KEYUP, HANDLER(EditorShortcuts, HandleKeyUp));
  28. SubscribeToEvent(E_EDITORSHUTDOWN, HANDLER(EditorShortcuts, HandleEditorShutdown));
  29. }
  30. EditorShortcuts::~EditorShortcuts()
  31. {
  32. }
  33. void EditorShortcuts::HandleEditorShutdown(StringHash eventType, VariantMap& eventData)
  34. {
  35. context_->RemoveSubsystem(GetType());
  36. }
  37. bool EditorShortcuts::IsProjectLoaded()
  38. {
  39. Editor* editor = context_->GetSubsystem<Editor>();
  40. return editor->GetProject() != NULL;
  41. }
  42. void EditorShortcuts::InvokePlayStop()
  43. {
  44. if (!IsProjectLoaded())
  45. return;
  46. Editor* editor = context_->GetSubsystem<Editor>();
  47. if (!editor->IsPlayingProject())
  48. {
  49. UIModalOps* ops = GetSubsystem<UIModalOps>();
  50. if (ops->ModalActive())
  51. return;
  52. VariantMap eventData;
  53. eventData[EditorPlayRequest::P_MODE] = (unsigned) AE_PLAYERMODE_WIDGET;
  54. SendEvent(E_EDITORPLAYREQUEST, eventData);
  55. }
  56. else
  57. {
  58. SendEvent(E_EDITORPLAYSTOP);
  59. }
  60. }
  61. void EditorShortcuts::InvokeResourceFrameShortcut(const String& id)
  62. {
  63. if (!IsProjectLoaded())
  64. return;
  65. MainFrame* frame = GetSubsystem<MainFrame>();
  66. ResourceFrame* resourceFrame = frame->GetResourceFrame();
  67. TBWidgetEvent ev(EVENT_TYPE_SHORTCUT);
  68. ev.ref_id = TBIDC(id.CString());
  69. resourceFrame->OnEvent(ev);
  70. }
  71. void EditorShortcuts::InvokeFileSave()
  72. {
  73. InvokeResourceFrameShortcut("save");
  74. }
  75. void EditorShortcuts::InvokeFileClose()
  76. {
  77. InvokeResourceFrameShortcut("close");
  78. }
  79. void EditorShortcuts::InvokeEditCut()
  80. {
  81. InvokeResourceFrameShortcut("cut");
  82. }
  83. void EditorShortcuts::InvokeEditCopy()
  84. {
  85. InvokeResourceFrameShortcut("copy");
  86. }
  87. void EditorShortcuts::InvokeEditPaste()
  88. {
  89. InvokeResourceFrameShortcut("paste");
  90. }
  91. void EditorShortcuts::InvokeEditSelectAll()
  92. {
  93. InvokeResourceFrameShortcut("selectall");
  94. }
  95. void EditorShortcuts::InvokeEditUndo()
  96. {
  97. InvokeResourceFrameShortcut("undo");
  98. }
  99. void EditorShortcuts::InvokeEditRedo()
  100. {
  101. InvokeResourceFrameShortcut("redo");
  102. }
  103. void EditorShortcuts::InvokeEditFind()
  104. {
  105. InvokeResourceFrameShortcut("find");
  106. }
  107. void EditorShortcuts::InvokeEditFindNext()
  108. {
  109. InvokeResourceFrameShortcut("findnext");
  110. }
  111. void EditorShortcuts::InvokeEditFindPrev()
  112. {
  113. InvokeResourceFrameShortcut("findprev");
  114. }
  115. void EditorShortcuts::InvokeEditFormatCode()
  116. {
  117. InvokeResourceFrameShortcut("beautify");
  118. }
  119. void EditorShortcuts::InvokeBuild()
  120. {
  121. if (!IsProjectLoaded())
  122. return;
  123. UIModalOps* ops = GetSubsystem<UIModalOps>();
  124. if (!ops->ModalActive())
  125. ops->ShowBuild();
  126. }
  127. void EditorShortcuts::InvokeBuildSettings()
  128. {
  129. if (!IsProjectLoaded())
  130. return;
  131. UIModalOps* ops = GetSubsystem<UIModalOps>();
  132. if (!ops->ModalActive())
  133. ops->ShowBuildSettings();
  134. }
  135. void EditorShortcuts::HandleKeyDown(StringHash eventType, VariantMap& eventData)
  136. {
  137. using namespace KeyDown;
  138. Input* input = context_->GetSubsystem<Input>();
  139. #ifdef ATOMIC_PLATFORM_WINDOWS
  140. bool cmdKey = (input->GetKeyDown(KEY_LCTRL) || input->GetKeyDown(KEY_RCTRL));
  141. #else
  142. bool cmdKey = (input->GetKeyDown(KEY_LGUI) || input->GetKeyDown(KEY_RGUI));
  143. #endif
  144. int keycode = eventData[P_KEY].GetInt();
  145. int qualifiers = eventData[P_QUALIFIERS].GetInt();
  146. if (cmdKey && keycode == KEY_P)
  147. {
  148. InvokePlayStop();
  149. }
  150. else if (cmdKey && (qualifiers & QUAL_SHIFT) && keycode == KEY_B)
  151. {
  152. InvokeBuildSettings();
  153. }
  154. else if (cmdKey && keycode == KEY_B)
  155. {
  156. InvokeBuild();
  157. }
  158. }
  159. void EditorShortcuts::HandleKeyUp(StringHash eventType, VariantMap& eventData)
  160. {
  161. using namespace KeyUp;
  162. }
  163. }