NAP
sequenceguiservice.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 // External Includes
8 #include <nap/service.h>
9 #include <entity.h>
10 #include <nap/datetime.h>
11 #include <rtti/factory.h>
12 #include <imguiservice.h>
13 
14 namespace nap
15 {
17 
18  // forward declares
19  class SequenceEventTrackSegmentViewBase;
20  class SequenceEventTrackView;
21  class SequenceTrackSegmentEventBase;
22  class SequenceTrackView;
23  class SequenceGUIService;
24  class SequenceEditorGUIView;
25  class SequenceEditorGUIState;
26 
27  // shortcuts
28  using SequenceEventTrackSegmentViewFactoryFunc = std::function<std::unique_ptr<SequenceEventTrackSegmentViewBase>()>;
29  using SequenceEventTrackSegmentViewFactoryMap = std::unordered_map<rtti::TypeInfo, SequenceEventTrackSegmentViewFactoryFunc>;
30  using SequenceTrackViewFactoryFunc = std::function<std::unique_ptr<SequenceTrackView>(SequenceGUIService &, SequenceEditorGUIView &, SequenceEditorGUIState &)>;
31  using SequenceTrackViewFactoryMap = std::unordered_map<rtti::TypeInfo, SequenceTrackViewFactoryFunc>;
32  using SequenceTrackTypeForViewTypeMap = std::unordered_map<rtti::TypeInfo, rtti::TypeInfo>;
33  using SequenceEventTrackPasteFunc = std::function<void(SequenceEventTrackView &, const std::string &, const SequenceTrackSegmentEventBase &, double)>;
34  using SequenceEventTrackEditFunc = std::function<void(SequenceEventTrackView &)>;
35 
36  namespace icon
37  {
38  namespace sequencer
39  {
40  inline constexpr const char *play = "seq_play.png";
41  inline constexpr const char *stop = "seq_stop.png";
42  inline constexpr const char *rewind = "seq_replay.png";
43  inline constexpr const char *up = "seq_up-arrow.png";
44  inline constexpr const char *down = "seq_down-arrow.png";
45  inline constexpr const char *pause = "seq_pause.png";
46  inline constexpr const char *unpause = "seq_unpause.png";
47  inline constexpr const char *lock = "seq_lock.png";
48  inline constexpr const char *undo = "seq_undo.png";
49  inline constexpr const char *redo = "seq_redo.png";
50  inline constexpr const char *history = "seq_history.png";
51  }
52  }
53 
63  class NAPAPI SequenceGUIService final : public Service
64  {
65  friend class SequencePlayerOutput;
66 
67  RTTI_ENABLE(Service)
68  public:
69 
73  struct Colors
74  {
79  void init(const gui::ColorPalette& palette);
80 
81  ImU32 mHigh1 = 0;
82  ImU32 mHigh2 = 0;
83  ImU32 mHigh3 = 0;
84  ImU32 mHigh4 = 0;
85  ImU32 mDark = 0;
86  ImU32 mBack = 0;
87  ImU32 mFro1 = 0;
88  ImU32 mFro2 = 0;
89  ImU32 mFro3 = 0;
90  ImU32 mFro4 = 0;
91 
92  ImU32 mCurveColors[4] = {4285098440, 4278255360, 4294901760, 4278255615};
93  };
94 
96 
97  ~SequenceGUIService() override;
98 
103  static bool registerObjectCreator(std::unique_ptr<rtti::IObjectCreator>(* objectCreator)(SequenceGUIService*));
104 
111  template<typename T>
112  bool registerEventView();
113 
120  bool registerTrackViewFactory(rtti::TypeInfo trackType, SequenceTrackViewFactoryFunc factory);
121 
128  bool registerTrackTypeForView(rtti::TypeInfo trackType, rtti::TypeInfo viewType);
129 
137  std::unique_ptr<SequenceTrackView> invokeTrackViewFactory(rtti::TypeInfo viewType, SequenceEditorGUIView& view, SequenceEditorGUIState& state);
138 
144  std::unique_ptr<SequenceEventTrackSegmentViewBase> invokeEventTrackSegmentViewFactory(rtti::TypeInfo eventType);
145 
151  rtti::TypeInfo getViewTypeForTrackType(rtti::TypeInfo trackType) const;
152 
157  const std::vector<rtti::TypeInfo>& getRegisteredSegmentEventTypes() const;
158 
164  void invokeEditEventHandler(rtti::TypeInfo actionType, SequenceEventTrackView& view) const;
165 
166 
175  void invokePasteEvent(rtti::TypeInfo eventType, SequenceEventTrackView& view, const std::string& trackID,
176  const SequenceTrackSegmentEventBase& eventBase, double time) const;
177 
182  std::vector<rtti::TypeInfo> getAllTrackTypes() const;
183 
188  std::vector<rtti::TypeInfo> getAllRegisteredEventActions() const;
189 
193  nap::IMGuiService& getGui();
194 
198  const nap::IMGuiService& getGui() const;
199 
200 
205  const Colors &getColors() const{ return mColors; }
206 
207  protected:
212  void registerObjectCreators(rtti::Factory& factory) override;
213 
219  bool init(nap::utility::ErrorState& errorState) override;
220 
228  virtual void getDependentServices(std::vector<rtti::TypeInfo>& dependencies);
229 
230  private:
231  // map of segment view types
232  SequenceEventTrackSegmentViewFactoryMap mEventSegmentViewFactoryMap;
233 
234  // map of view factory functions
235  SequenceTrackViewFactoryMap mTrackViewFactoryMap;
236 
237  // map of segment edit event handlers
238  std::unordered_map<rtti::TypeInfo, SequenceEventTrackEditFunc> mEditEventHandlerMap;
239 
240  // map of segment paste handlers
241  std::unordered_map<rtti::TypeInfo, SequenceEventTrackPasteFunc> mPasteEventMap;
242 
243  // list of event types
244  std::vector<rtti::TypeInfo> mSegmentEventTypes;
245 
246  // which view type belongs to which track type
247  SequenceTrackTypeForViewTypeMap mTrackViewTypeMap;
248 
249  // Link to the gui service
250  IMGuiService* mGuiService = nullptr;
251 
252  // Colors
253  Colors mColors;
254  };
255 }
nap::SequenceTrackTypeForViewTypeMap
std::unordered_map< rtti::TypeInfo, rtti::TypeInfo > SequenceTrackTypeForViewTypeMap
Definition: sequenceguiservice.h:32
nap::SequenceGUIService::getColors
const Colors & getColors() const
Definition: sequenceguiservice.h:205
nap::icon::sequencer::up
constexpr const char * up
Definition: sequenceguiservice.h:43
nap::SequenceEditorGUIState
Definition: sequenceeditorguistate.h:23
nap::icon::sequencer::pause
constexpr const char * pause
Definition: sequenceguiservice.h:45
nap::icon::sequencer::lock
constexpr const char * lock
Definition: sequenceguiservice.h:47
nap::utility::ErrorState
Definition: errorstate.h:19
nap::icon::sequencer::down
constexpr const char * down
Definition: sequenceguiservice.h:44
nap::SequenceGUIService::Colors
Definition: sequenceguiservice.h:73
nap::icon::sequencer::play
constexpr const char * play
Definition: sequenceguiservice.h:40
nap::ServiceConfiguration
Definition: service.h:28
nap::gui::ColorPalette
Definition: imguiservice.h:90
nap::icon::sequencer::stop
constexpr const char * stop
Definition: sequenceguiservice.h:41
nap::icon::sequencer::undo
constexpr const char * undo
Definition: sequenceguiservice.h:48
nap::SequenceGUIService
Definition: sequenceguiservice.h:63
nap::SequenceEventTrackView
Definition: sequenceeventtrackview.h:146
nap::SequencePlayerOutput
Definition: sequenceplayeroutput.h:23
nap::SequenceEventTrackSegmentViewFactoryMap
std::unordered_map< rtti::TypeInfo, SequenceEventTrackSegmentViewFactoryFunc > SequenceEventTrackSegmentViewFactoryMap
Definition: sequenceguiservice.h:29
nap::icon::sequencer::redo
constexpr const char * redo
Definition: sequenceguiservice.h:49
nap::SequenceTrackViewFactoryFunc
std::function< std::unique_ptr< SequenceTrackView >(SequenceGUIService &, SequenceEditorGUIView &, SequenceEditorGUIState &)> SequenceTrackViewFactoryFunc
Definition: sequenceguiservice.h:30
nap::Service
Definition: templateservice.h:8
nap::SequenceEventTrackEditFunc
std::function< void(SequenceEventTrackView &)> SequenceEventTrackEditFunc
Definition: sequenceguiservice.h:34
nap::SequenceEditorGUIView
Definition: sequenceeditorgui.h:80
nap::SequenceTrackSegmentEventBase
Definition: sequencetracksegmentevent.h:21
nap::IMGuiService
Definition: imguiservice.h:165
nap::rtti::Factory
Definition: factory.h:78
nap
Definition: templateapp.h:17
nap::SequenceTrackViewFactoryMap
std::unordered_map< rtti::TypeInfo, SequenceTrackViewFactoryFunc > SequenceTrackViewFactoryMap
Definition: sequenceguiservice.h:31
nap::SequenceEventTrackSegmentViewFactoryFunc
std::function< std::unique_ptr< SequenceEventTrackSegmentViewBase >()> SequenceEventTrackSegmentViewFactoryFunc
Definition: sequenceguiservice.h:28
nap::icon::sequencer::history
constexpr const char * history
Definition: sequenceguiservice.h:50
nap::icon::sequencer::rewind
constexpr const char * rewind
Definition: sequenceguiservice.h:42
nap::rtti::TypeInfo
rttr::type TypeInfo
Definition: typeinfo.h:140
nap::icon::sequencer::unpause
constexpr const char * unpause
Definition: sequenceguiservice.h:46
nap::SequenceEventTrackPasteFunc
std::function< void(SequenceEventTrackView &, const std::string &, const SequenceTrackSegmentEventBase &, double)> SequenceEventTrackPasteFunc
Definition: sequenceguiservice.h:33