NAP
All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Pages
sequenceeditorgui.h
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2  * License, v. 2.0. If a copy of the MPL was not distributed with this
3  * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4 
5 #pragma once
6 
7 // internal includes
8 #include "sequenceeditor.h"
9 #include "sequencetrackview.h"
10 #include "sequenceeditorguistate.h"
11 #include "sequenceeditorguiactions.h"
12 #include "sequenceeditorguiclipboard.h"
13 #include "sequenceguiservice.h"
14 
15 // external includes
16 #include <imgui/imgui.h>
17 #include <nap/resource.h>
18 #include <nap/resourceptr.h>
19 #include <renderwindow.h>
20 #include <rtti/objectptr.h>
21 #include <imagefromfile.h>
22 
23 namespace nap
24 {
25  // forward declares
26  class SequenceEditorGUIView;
27  class SequenceEditorView;
28  class SequenceTrackView;
29 
33  class NAPAPI SequenceEditorGUI : public Resource
34  {
35  RTTI_ENABLE(Resource)
36  public:
38 
43  bool init(utility::ErrorState& errorState) override;
44 
48  void onDestroy() override;
49 
54  virtual void show(bool newWindow = true);
55 
59  SequenceGUIService& getService() { return mService; }
60 
61  // properties
62  ResourcePtr<RenderWindow> mRenderWindow = nullptr;
63  ResourcePtr<SequenceEditor> mSequenceEditor = nullptr;
64  bool mDrawFullWindow = false;
65  bool mHideMarkerLabels = false;
66  protected:
67  // instantiated view
68  std::unique_ptr<SequenceEditorGUIView> mView = nullptr;
69 
70  // reference to service
72  };
73 
75 
80  class NAPAPI SequenceEditorGUIView
81  {
82  friend class SequenceTrackView;
83  public:
92  SequenceEditorGUIView(SequenceGUIService& service, SequenceEditor& editor, std::string id, RenderWindow* renderWindow, bool drawFullWindow);
93 
98  virtual void show(bool newWindow = true);
99 
100 
105  void hideMarkerLabels(bool hide){ mHideMarkerLabels = hide; }
106 
107 
108  SequenceGUIService& getService() { return mService; }
109 
110 
111  protected:
117  void drawTracks(const SequencePlayer& sequencePlayer, const Sequence& sequence);
118 
124  void drawInspectors(const SequencePlayer& sequencePlayer, const Sequence& sequence);
125 
131  void drawMarkers(const SequencePlayer& sequencePlayer, const Sequence& sequence);
132 
138  void drawMarkerLines(const Sequence& sequence, SequencePlayer& player) const;
139 
144  void drawPlayerController(SequencePlayer& player);
145 
151  void drawTimelinePlayerPosition(const Sequence& sequence, SequencePlayer& player) const;
152 
158  void drawEndOfSequence(const Sequence& sequence, SequencePlayer& player);
159 
163  void handleInsertTrackPopup();
164 
168  void handleLoadPopup();
169 
173  void handleSaveAsPopup();
174 
178  void handleSequenceDurationPopup();
179 
183  void handleEditMarkerPopup();
184 
188  void handleInsertMarkerPopup();
189 
193  void handleHorizontalZoom();
194 
198  void handleHelpPopup();
199 
203  void handleSaveClipboardPopup();
204 
208  void handleUndo();
209 
210  /*
211  * redo last action
212  */
213  void handleRedo();
214 
218  void handleHistoryPopup();
219 
225  void registerActionHandler(const rttr::type& actionType, const std::function<void()>& action);
226 
227  protected:
228  void handleHotKeys();
229 
230  void registerActionHandlers();
231 
232  // reference to editor
234 
235  // holds current gui state information
237 
238  // id
239  std::string mID;
240 
241  // set to true if we draw full window
242  bool mDrawFullWindow = false;
243 
244  // set to true when marker labels should be hidden when not hovered
245  bool mHideMarkerLabels = false;
246 
247  // pointer to render window
248  RenderWindow *mRenderWindow = nullptr;
249 
250  // map of action handlers
251  std::unordered_map<rttr::type, std::function<void()>> mActionHandlers;
252 
253  std::unordered_map<rttr::type, std::unique_ptr<SequenceTrackView>> mViews;
254 
255  // reference to service
257  };
258 }
nap::RenderWindow
Definition: renderwindow.h:43
nap::SequencePlayer
Definition: sequenceplayer.h:37
nap::SequenceEditorGUIState
Definition: sequenceeditorguistate.h:23
nap::SequenceEditor
Definition: sequenceeditor.h:49
nap::rtti::ObjectPtr
Definition: objectptr.h:154
nap::SequenceEditorGUIView::mService
SequenceGUIService & mService
Definition: sequenceeditorgui.h:256
nap::rtti::ObjectCreator
Definition: factory.h:49
nap::utility::ErrorState
Definition: errorstate.h:19
nap::SequenceEditorGUIView::hideMarkerLabels
void hideMarkerLabels(bool hide)
Definition: sequenceeditorgui.h:105
nap::SequenceEditorGUIView::getService
SequenceGUIService & getService()
Definition: sequenceeditorgui.h:108
nap::SequenceEditorGUIView::mEditor
SequenceEditor & mEditor
Definition: sequenceeditorgui.h:233
nap::SequenceGUIService
Definition: sequenceguiservice.h:63
nap::SequenceEditorGUIView::mState
SequenceEditorGUIState mState
Definition: sequenceeditorgui.h:236
nap::SequenceEditorGUIView::mActionHandlers
std::unordered_map< rttr::type, std::function< void()> > mActionHandlers
Definition: sequenceeditorgui.h:251
nap::SequenceEditorGUI
Definition: sequenceeditorgui.h:33
nap::SequenceTrackView
Definition: sequencetrackview.h:30
nap::SequenceEditorGUIView
Definition: sequenceeditorgui.h:80
nap::SequenceEditorGUIView::mID
std::string mID
Definition: sequenceeditorgui.h:239
nap::SequenceEditorGUI::mService
SequenceGUIService & mService
Definition: sequenceeditorgui.h:71
nap::SequenceEditorGUI::getService
SequenceGUIService & getService()
Definition: sequenceeditorgui.h:59
nap
Definition: templateapp.h:17
nap::Sequence
Definition: sequence.h:22
nap::Resource
Definition: resource.h:19
nap::SequenceEditorGUIView::mViews
std::unordered_map< rttr::type, std::unique_ptr< SequenceTrackView > > mViews
Definition: sequenceeditorgui.h:253