NAP
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 
56 
60  SequenceGUIService& getService() { return mService; }
61 
62 
63  // properties
64  ResourcePtr<RenderWindow> mRenderWindow = nullptr;
65  ResourcePtr<SequenceEditor> mSequenceEditor = nullptr;
66  bool mDrawFullWindow = false;
67  bool mHideMarkerLabels = false;
68  protected:
69  // instantiated view
70  std::unique_ptr<SequenceEditorGUIView> mView = nullptr;
71 
72  // reference to service
74  };
75 
77 
82  class NAPAPI SequenceEditorGUIView
83  {
84  friend class SequenceTrackView;
85  public:
94  SequenceEditorGUIView(SequenceGUIService& service, SequenceEditor& editor, std::string id, RenderWindow* renderWindow, bool drawFullWindow);
95 
100  virtual void show(bool newWindow = true);
101 
102 
107  void hideMarkerLabels(bool hide){ mHideMarkerLabels = hide; }
108 
109 
110  SequenceGUIService& getService() { return mService; }
111 
112 
113  protected:
119  void drawTracks(const SequencePlayer& sequencePlayer, const Sequence& sequence);
120 
126  void drawInspectors(const SequencePlayer& sequencePlayer, const Sequence& sequence);
127 
133  void drawMarkers(const SequencePlayer& sequencePlayer, const Sequence& sequence);
134 
140  void drawMarkerLines(const Sequence& sequence, SequencePlayer& player) const;
141 
146  void drawPlayerController(SequencePlayer& player);
147 
153  void drawTimelinePlayerPosition(const Sequence& sequence, SequencePlayer& player) const;
154 
160  void drawEndOfSequence(const Sequence& sequence, SequencePlayer& player);
161 
165  void handleInsertTrackPopup();
166 
170  void handleLoadPopup();
171 
175  void handleSaveAsPopup();
176 
180  void handleSequenceDurationPopup();
181 
185  void handleEditMarkerPopup();
186 
190  void handleInsertMarkerPopup();
191 
195  void handleHorizontalZoom();
196 
200  void handleHelpPopup();
201 
205  void handleSaveClipboardPopup();
206 
212  void registerActionHandler(const rttr::type& actionType, const std::function<void()>& action);
213 
214  protected:
215  void registerActionHandlers();
216 
217  // reference to editor
219 
220  // holds current gui state information
222 
223  // id
224  std::string mID;
225 
226  // set to true if we draw full window
227  bool mDrawFullWindow = false;
228 
229  // set to true when marker labels should be hidden when not hovered
230  bool mHideMarkerLabels = false;
231 
232  // pointer to render window
233  RenderWindow *mRenderWindow = nullptr;
234 
235  // map of action handlers
236  std::unordered_map<rttr::type, std::function<void()>> mActionHandlers;
237 
238  std::unordered_map<rttr::type, std::unique_ptr<SequenceTrackView>> mViews;
239 
240  // reference to service
242  };
243 }
nap::RenderWindow
Definition: renderwindow.h:43
nap::SequencePlayer
Definition: sequenceplayer.h:36
nap::SequenceEditorGUIState
Definition: sequenceeditorguistate.h:23
nap::SequenceEditor
Definition: sequenceeditor.h:32
nap::rtti::ObjectPtr
Definition: objectptr.h:154
nap::SequenceEditorGUIView::mService
SequenceGUIService & mService
Definition: sequenceeditorgui.h:241
nap::rtti::ObjectCreator
Definition: factory.h:49
nap::utility::ErrorState
Definition: errorstate.h:19
nap::SequenceEditorGUIView::hideMarkerLabels
void hideMarkerLabels(bool hide)
Definition: sequenceeditorgui.h:107
nap::SequenceEditorGUIView::getService
SequenceGUIService & getService()
Definition: sequenceeditorgui.h:110
nap::SequenceEditorGUIView::mEditor
SequenceEditor & mEditor
Definition: sequenceeditorgui.h:218
nap::SequenceGUIService
Definition: sequenceguiservice.h:59
nap::SequenceEditorGUIView::mState
SequenceEditorGUIState mState
Definition: sequenceeditorgui.h:221
nap::SequenceEditorGUIView::mActionHandlers
std::unordered_map< rttr::type, std::function< void()> > mActionHandlers
Definition: sequenceeditorgui.h:236
nap::SequenceEditorGUI
Definition: sequenceeditorgui.h:33
nap::SequenceTrackView
Definition: sequencetrackview.h:30
nap::SequenceEditorGUIView
Definition: sequenceeditorgui.h:82
nap::SequenceEditorGUIView::mID
std::string mID
Definition: sequenceeditorgui.h:224
nap::SequenceEditorGUI::mService
SequenceGUIService & mService
Definition: sequenceeditorgui.h:73
nap::SequenceEditorGUI::getService
SequenceGUIService & getService()
Definition: sequenceeditorgui.h:60
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:238