NAP
sequenceeditorguiactions.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 // Local Includes
8 #include "sequencecurveenums.h"
9 
10 // External Includes
11 #include <rtti/rtti.h>
12 #include <imgui/imgui.h>
13 #include <utility>
14 
15 namespace nap
16 {
21  namespace sequenceguiactions
22  {
26  class NAPAPI Action
27  {
28  RTTI_ENABLE()
29  public:
30  virtual ~Action() = default;
31 
35  template<typename T>
36  bool isAction(){ return this->get_type() == RTTI_OF(T); }
37 
41  template<typename T>
43  {
44  assert(isAction<T>());
45  return static_cast<T *>(this);
46  }
47  };
48 
49  // shortcut to unique ptr of action class
50  using SequenceActionPtr = std::unique_ptr<Action>;
51 
52 
53  // use this method to create an action
54  template<typename T, typename... Args>
55  static SequenceActionPtr createAction(Args &&... args)
56  {
57  return std::make_unique<T>(std::forward<Args>(args)...);
58  }
59 
60 
65  class NAPAPI None : public Action
66  {
67  RTTI_ENABLE()
68  };
69 
70 
76  class NAPAPI NonePressed : public Action
77  {
78  RTTI_ENABLE()
79  };
80 
81 
86  class NAPAPI TrackAction : public Action
87  {
88  RTTI_ENABLE(Action)
89  public:
90  explicit TrackAction(std::string trackID) : mTrackID(std::move(trackID))
91  {}
92 
93 
94  std::string mTrackID;
95  };
96 
97 
101  class NAPAPI DraggingSegment : public TrackAction
102  {
103  RTTI_ENABLE(TrackAction)
104  public:
111  DraggingSegment(std::string trackId, std::string segmentID, double newDuration)
112  : TrackAction(std::move(trackId)), mSegmentID(std::move(segmentID)), mNewDuration(newDuration)
113  {}
114 
115 
116  std::string mSegmentID;
117  double mNewDuration;
118  };
119 
120 
124  class NAPAPI StartDraggingSegment : public TrackAction
125  {
126  RTTI_ENABLE(TrackAction)
127  public:
134  StartDraggingSegment(std::string trackId, std::string segmentID, double startDuration)
135  : TrackAction(std::move(trackId)), mSegmentID(std::move(segmentID)), mStartDuration(startDuration)
136  {}
137 
138 
139  std::string mSegmentID;
141  };
142 
143 
147  class NAPAPI InsertingSegmentPopup : public TrackAction
148  {
149  RTTI_ENABLE(TrackAction)
150  public:
157  InsertingSegmentPopup(std::string trackID, double time, const rttr::type &trackType)
158  : TrackAction(std::move(trackID)), mTime(time), mTrackType(trackType)
159  {}
160 
161  bool mOpened = false;
162  double mTime;
163  rttr::type mTrackType;
164  std::string mErrorString;
165  };
166 
167 
171  class NAPAPI EditSegmentPopup : public TrackAction
172  {
173  RTTI_ENABLE(TrackAction)
174  public:
181  EditSegmentPopup(std::string trackID, std::string segmentID, const rttr::type &segmentType)
182  : TrackAction(std::move(trackID)), mSegmentID(std::move(segmentID)), mSegmentType(segmentType)
183  {}
184 
185  bool mOpened = false;
186  std::string mSegmentID;
187  rttr::type mSegmentType;
188  };
189 
190 
194  class NAPAPI HoveringSegment : public TrackAction
195  {
196  RTTI_ENABLE(TrackAction)
197  public:
203  HoveringSegment(std::string trackID, std::string segmentID)
204  : TrackAction(std::move(trackID)), mSegmentID(std::move(segmentID))
205  {}
206 
207 
208  std::string mSegmentID;
209  };
210 
211 
215  class NAPAPI HoveringPlayerTime : public Action
216  {
217  RTTI_ENABLE(Action)
218  };
219 
220 
224  class NAPAPI DraggingPlayerTime : public Action
225  {
226  RTTI_ENABLE(Action)
227  public:
233  DraggingPlayerTime(bool wasPlaying, bool wasPaused)
234  : mWasPlaying(wasPlaying), mWasPaused(wasPaused)
235  {}
236 
237 
240  };
241 
242 
246  class NAPAPI InsertTrackPopup : public Action
247  {
248  RTTI_ENABLE(Action)
249  public:
250  // indicates whether the handler should open the popup
251  bool mOpened = false;
252  };
253 
254 
258  class LoadPopup : public Action
259  {
260  RTTI_ENABLE(Action)
261  public:
263  std::string mErrorString;
264  };
265 
266 
270  class NAPAPI SaveAsPopup : public Action
271  {
272  RTTI_ENABLE(Action)
273  public:
274  int mSelectedShowIndex = 0;
275  std::string mErrorString;
276  };
277 
278 
282  class NAPAPI HoveringSequenceDuration : public Action
283  {
284  RTTI_ENABLE(Action)
285  public:
286  };
287 
288 
292  class NAPAPI DraggingSequenceDuration : public Action
293  {
294  RTTI_ENABLE(Action)
295  public:
296  };
297 
298 
302  class NAPAPI EditSequenceDurationPopup : public Action
303  {
304  RTTI_ENABLE(Action)
305  public:
306  // indicates whether the handler should open the popup
307  bool mOpened = false;
308  };
309 
310 
314  class NAPAPI EditSequenceMarkerPopup : public Action
315  {
316  RTTI_ENABLE(Action)
317  public:
324  EditSequenceMarkerPopup(std::string id, std::string message, double time)
325  : mID(std::move(id)), mMessage(std::move(message)), mTime(time)
326  {}
327 
328  // marker id
329  std::string mID;
330  // indicates whether the handler should open the popup
331  bool mOpened = false;
332  // time of the marker
333  double mTime;
334  // marker message content
335  std::string mMessage = "Message";
336  };
337 
338 
342  class NAPAPI InsertingSequenceMarkerPopup : public Action
343  {
344  RTTI_ENABLE(Action)
345  public:
351  : mTime(time)
352  {}
353 
354  // indicates whether the handler should open the popup
355  bool mOpened = false;
356  // time of the marker
357  double mTime;
358  // marker message content
359  std::string mMessage = "Message";
360  };
361 
362 
366  class NAPAPI DragSequenceMarker : public Action
367  {
368  RTTI_ENABLE(Action)
369  public:
374  explicit DragSequenceMarker(std::string id) : mID(std::move(id))
375  {}
376 
377 
378  std::string mID;
379  };
380 
381 
385  class NAPAPI AssignOutputIDToTrack : public TrackAction
386  {
387  RTTI_ENABLE(TrackAction)
388  public:
394  AssignOutputIDToTrack(const std::string& trackID, std::string outputID)
395  : TrackAction(trackID), mOutputID(std::move(outputID))
396  {}
397 
398 
399  std::string mOutputID;
400 
401  };
402 
403 
407  class NAPAPI HelpPopup : public Action
408  {
409  RTTI_ENABLE(Action)
410  public:
411  // indicates whether the handler should open the popup
412  bool mOpened = false;
413  };
414 
419  {
420  RTTI_ENABLE(Action)
421  public:
426  ChangeHorizontalResolution(float newResolution) : mHorizontalResolution(newResolution)
427  {}
428 
429 
431  };
432 
437  {
438  RTTI_ENABLE(TrackAction)
439  public:
440  ChangeTrackName(const std::string& id, const std::string& newName) : TrackAction(id), mNewTrackName(newName)
441  {}
442 
443 
444  std::string mNewTrackName;
445  };
446 
451  {
452  RTTI_ENABLE(TrackAction)
453  public:
458  HoveringTrackExtensionHandler(std::string trackId) : TrackAction(std::move(trackId))
459  {}
460  };
461 
466  {
467  RTTI_ENABLE(TrackAction)
468  public:
473  DraggingTrackExtensionHandler(std::string trackId) : TrackAction(std::move(trackId))
474  {}
475  };
476 
480  class SavePresetPopup : public Action
481  {
482  RTTI_ENABLE(Action)
483  public:
484  SavePresetPopup(const std::string& filePath)
485  : mFilePath(filePath)
486  {}
487 
488 
489  std::string mFilePath;
491  std::string mErrorString;
492  };
493 
498  {
499  RTTI_ENABLE(TrackAction)
500  public:
501  LoadPresetPopup(const std::string& id, double time, rtti::TypeInfo trackType)
502  : TrackAction(id), mTime(time), mTrackType(trackType)
503  {}
504 
505 
506  std::string mFilePath;
509  std::string mErrorString;
510  double mTime;
511  };
512 
517  {
518  RTTI_ENABLE(TrackAction)
519  public:
520  TrackOptionsPopup(const std::string& trackID, ImVec2 pos)
521  : TrackAction(trackID), mPos(std::move(pos))
522  {}
523 
524  // indicates whether the handler should open the popup
525  bool mPopupOpened = false;
526  // position of the popup in screen coordinates
527  ImVec2 mPos;
528  // scroll at the moment of opening, popup closes when the user scrolls within the sequence editor gui
529  float mScrollY = 0.0f;
530  };
531  }
532 }
nap::sequenceguiactions::DraggingSegment::DraggingSegment
DraggingSegment(std::string trackId, std::string segmentID, double newDuration)
Definition: sequenceeditorguiactions.h:111
nap::sequenceguiactions::HoveringTrackExtensionHandler
Definition: sequenceeditorguiactions.h:450
nap::sequenceguiactions::HoveringSegment
Definition: sequenceeditorguiactions.h:194
nap::sequenceguiactions::LoadPresetPopup::mFilePath
std::string mFilePath
Definition: sequenceeditorguiactions.h:506
nap::sequenceguiactions::TrackOptionsPopup::TrackOptionsPopup
TrackOptionsPopup(const std::string &trackID, ImVec2 pos)
Definition: sequenceeditorguiactions.h:520
nap::sequenceguiactions::HoveringSegment::mSegmentID
std::string mSegmentID
Definition: sequenceeditorguiactions.h:208
nap::sequenceguiactions::InsertTrackPopup
Definition: sequenceeditorguiactions.h:246
nap::sequenceguiactions::NonePressed
Definition: sequenceeditorguiactions.h:76
nap::sequenceguiactions::LoadPopup::mErrorString
std::string mErrorString
Definition: sequenceeditorguiactions.h:263
nap::sequenceguiactions::DraggingPlayerTime::DraggingPlayerTime
DraggingPlayerTime(bool wasPlaying, bool wasPaused)
Definition: sequenceeditorguiactions.h:233
nap::sequenceguiactions::EditSequenceMarkerPopup::mID
std::string mID
Definition: sequenceeditorguiactions.h:329
nap::sequenceguiactions::SaveAsPopup::mErrorString
std::string mErrorString
Definition: sequenceeditorguiactions.h:275
nap::sequenceguiactions::AssignOutputIDToTrack
Definition: sequenceeditorguiactions.h:385
nap::sequenceguiactions::DraggingTrackExtensionHandler
Definition: sequenceeditorguiactions.h:465
nap::sequenceguiactions::ChangeHorizontalResolution::mHorizontalResolution
float mHorizontalResolution
Definition: sequenceeditorguiactions.h:430
nap::sequenceguiactions::StartDraggingSegment::StartDraggingSegment
StartDraggingSegment(std::string trackId, std::string segmentID, double startDuration)
Definition: sequenceeditorguiactions.h:134
nap::sequenceguiactions::EditSequenceMarkerPopup::EditSequenceMarkerPopup
EditSequenceMarkerPopup(std::string id, std::string message, double time)
Definition: sequenceeditorguiactions.h:324
nap::sequenceguiactions::DraggingPlayerTime
Definition: sequenceeditorguiactions.h:224
nap::sequenceguiactions::SavePresetPopup::mSelectedPresetIndex
int mSelectedPresetIndex
Definition: sequenceeditorguiactions.h:490
nap::sequenceguiactions::EditSegmentPopup::mSegmentID
std::string mSegmentID
Definition: sequenceeditorguiactions.h:186
nap::sequenceguiactions::EditSegmentPopup::EditSegmentPopup
EditSegmentPopup(std::string trackID, std::string segmentID, const rttr::type &segmentType)
Definition: sequenceeditorguiactions.h:181
nap::sequenceguiactions::StartDraggingSegment::mSegmentID
std::string mSegmentID
Definition: sequenceeditorguiactions.h:139
nap::sequenceguiactions::DraggingSegment
Definition: sequenceeditorguiactions.h:101
nap::sequenceguiactions::ChangeHorizontalResolution
Definition: sequenceeditorguiactions.h:418
nap::sequenceguiactions::EditSequenceDurationPopup
Definition: sequenceeditorguiactions.h:302
nap::sequenceguiactions::LoadPresetPopup::mTrackType
rtti::TypeInfo mTrackType
Definition: sequenceeditorguiactions.h:507
nap::sequenceguiactions::DraggingPlayerTime::mWasPlaying
bool mWasPlaying
Definition: sequenceeditorguiactions.h:238
nap::sequenceguiactions::SavePresetPopup
Definition: sequenceeditorguiactions.h:480
nap::sequenceguiactions::HoveringSequenceDuration
Definition: sequenceeditorguiactions.h:282
nap::sequenceguiactions::TrackOptionsPopup::mPos
ImVec2 mPos
Definition: sequenceeditorguiactions.h:527
nap::sequenceguiactions::DraggingSegment::mNewDuration
double mNewDuration
Definition: sequenceeditorguiactions.h:117
nap::sequenceguiactions::LoadPresetPopup::mSelectedPresetIndex
int mSelectedPresetIndex
Definition: sequenceeditorguiactions.h:508
nap::sequenceguiactions::EditSegmentPopup::mSegmentType
rttr::type mSegmentType
Definition: sequenceeditorguiactions.h:187
nap::sequenceguiactions::InsertingSegmentPopup::InsertingSegmentPopup
InsertingSegmentPopup(std::string trackID, double time, const rttr::type &trackType)
Definition: sequenceeditorguiactions.h:157
nap::sequenceguiactions::TrackOptionsPopup::mPopupOpened
bool mPopupOpened
Definition: sequenceeditorguiactions.h:525
nap::sequenceguiactions::DragSequenceMarker::DragSequenceMarker
DragSequenceMarker(std::string id)
Definition: sequenceeditorguiactions.h:374
nap::sequenceguiactions::InsertingSegmentPopup
Definition: sequenceeditorguiactions.h:147
nap::sequenceguiactions::LoadPopup
Definition: sequenceeditorguiactions.h:258
nap::sequenceguiactions::LoadPopup::mSelectedShowIndex
int mSelectedShowIndex
Definition: sequenceeditorguiactions.h:262
nap::sequenceguiactions::ChangeTrackName::mNewTrackName
std::string mNewTrackName
Definition: sequenceeditorguiactions.h:444
nap::sequenceguiactions::SequenceActionPtr
std::unique_ptr< Action > SequenceActionPtr
Definition: sequenceeditorguiactions.h:50
nap::sequenceguiactions::ChangeTrackName
Definition: sequenceeditorguiactions.h:436
nap::sequenceguiactions::HoveringSegment::HoveringSegment
HoveringSegment(std::string trackID, std::string segmentID)
Definition: sequenceeditorguiactions.h:203
nap::sequenceguiactions::LoadPresetPopup::mTime
double mTime
Definition: sequenceeditorguiactions.h:510
nap::sequenceguiactions::InsertingSegmentPopup::mTrackType
rttr::type mTrackType
Definition: sequenceeditorguiactions.h:163
nap::sequenceguiactions::DraggingPlayerTime::mWasPaused
bool mWasPaused
Definition: sequenceeditorguiactions.h:239
nap::sequenceguiactions::HoveringPlayerTime
Definition: sequenceeditorguiactions.h:215
nap::sequenceguiactions::HelpPopup
Definition: sequenceeditorguiactions.h:407
nap::sequenceguiactions::TrackOptionsPopup
Definition: sequenceeditorguiactions.h:516
nap::sequenceguiactions::EditSequenceMarkerPopup::mTime
double mTime
Definition: sequenceeditorguiactions.h:333
nap::sequenceguiactions::StartDraggingSegment::mStartDuration
double mStartDuration
Definition: sequenceeditorguiactions.h:140
nap::sequenceguiactions::TrackAction::mTrackID
std::string mTrackID
Definition: sequenceeditorguiactions.h:94
nap::sequenceguiactions::InsertingSequenceMarkerPopup::mTime
double mTime
Definition: sequenceeditorguiactions.h:357
nap::sequenceguiactions::AssignOutputIDToTrack::AssignOutputIDToTrack
AssignOutputIDToTrack(const std::string &trackID, std::string outputID)
Definition: sequenceeditorguiactions.h:394
nap::sequenceguiactions::SaveAsPopup
Definition: sequenceeditorguiactions.h:270
nap::sequenceguiactions::Action
Definition: sequenceeditorguiactions.h:26
nap::sequenceguiactions::LoadPresetPopup::mErrorString
std::string mErrorString
Definition: sequenceeditorguiactions.h:509
nap::sequenceguiactions::AssignOutputIDToTrack::mOutputID
std::string mOutputID
Definition: sequenceeditorguiactions.h:399
nap::sequenceguiactions::TrackAction
Definition: sequenceeditorguiactions.h:86
nap::sequenceguiactions::InsertingSequenceMarkerPopup
Definition: sequenceeditorguiactions.h:342
nap::sequenceguiactions::Action::isAction
bool isAction()
Definition: sequenceeditorguiactions.h:36
nap::sequenceguiactions::SavePresetPopup::SavePresetPopup
SavePresetPopup(const std::string &filePath)
Definition: sequenceeditorguiactions.h:484
nap
Definition: templateapp.h:17
nap::sequenceguiactions::DragSequenceMarker
Definition: sequenceeditorguiactions.h:366
nap::sequenceguiactions::HoveringTrackExtensionHandler::HoveringTrackExtensionHandler
HoveringTrackExtensionHandler(std::string trackId)
Definition: sequenceeditorguiactions.h:458
nap::sequenceguiactions::DraggingSequenceDuration
Definition: sequenceeditorguiactions.h:292
nap::sequenceguiactions::InsertingSegmentPopup::mTime
double mTime
Definition: sequenceeditorguiactions.h:162
nap::sequenceguiactions::ChangeHorizontalResolution::ChangeHorizontalResolution
ChangeHorizontalResolution(float newResolution)
Definition: sequenceeditorguiactions.h:426
nap::sequenceguiactions::SavePresetPopup::mErrorString
std::string mErrorString
Definition: sequenceeditorguiactions.h:491
nap::sequenceguiactions::Action::getDerived
T * getDerived()
Definition: sequenceeditorguiactions.h:42
nap::sequenceguiactions::LoadPresetPopup::LoadPresetPopup
LoadPresetPopup(const std::string &id, double time, rtti::TypeInfo trackType)
Definition: sequenceeditorguiactions.h:501
nap::sequenceguiactions::SavePresetPopup::mFilePath
std::string mFilePath
Definition: sequenceeditorguiactions.h:489
nap::sequenceguiactions::DraggingSegment::mSegmentID
std::string mSegmentID
Definition: sequenceeditorguiactions.h:116
nap::sequenceguiactions::StartDraggingSegment
Definition: sequenceeditorguiactions.h:124
nap::sequenceguiactions::TrackOptionsPopup::mScrollY
float mScrollY
Definition: sequenceeditorguiactions.h:529
nap::rtti::TypeInfo
rttr::type TypeInfo
Definition: typeinfo.h:140
nap::sequenceguiactions::EditSequenceMarkerPopup
Definition: sequenceeditorguiactions.h:314
nap::sequenceguiactions::InsertingSegmentPopup::mErrorString
std::string mErrorString
Definition: sequenceeditorguiactions.h:164
nap::sequenceguiactions::InsertingSequenceMarkerPopup::InsertingSequenceMarkerPopup
InsertingSequenceMarkerPopup(double time)
Definition: sequenceeditorguiactions.h:350
nap::sequenceguiactions::DragSequenceMarker::mID
std::string mID
Definition: sequenceeditorguiactions.h:378
nap::sequenceguiactions::TrackAction::TrackAction
TrackAction(std::string trackID)
Definition: sequenceeditorguiactions.h:90
nap::sequenceguiactions::None
Definition: sequenceeditorguiactions.h:65
nap::sequenceguiactions::LoadPresetPopup
Definition: sequenceeditorguiactions.h:497
nap::sequenceguiactions::EditSegmentPopup
Definition: sequenceeditorguiactions.h:171
nap::sequenceguiactions::ChangeTrackName::ChangeTrackName
ChangeTrackName(const std::string &id, const std::string &newName)
Definition: sequenceeditorguiactions.h:440
nap::sequenceguiactions::DraggingTrackExtensionHandler::DraggingTrackExtensionHandler
DraggingTrackExtensionHandler(std::string trackId)
Definition: sequenceeditorguiactions.h:473