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  // bool that tells the gui to take a snapshot of the current state
49  bool mTakeSnapshot = true;
50  };
51 
52  // shortcut to unique ptr of action class
53  using SequenceActionPtr = std::unique_ptr<Action>;
54 
55 
56  // use this method to create an action
57  template<typename T, typename... Args>
58  static SequenceActionPtr createAction(Args &&... args)
59  {
60  return std::make_unique<T>(std::forward<Args>(args)...);
61  }
62 
63 
68  class NAPAPI None : public Action
69  {
70  RTTI_ENABLE()
71  };
72 
73 
79  class NAPAPI NonePressed : public Action
80  {
81  RTTI_ENABLE()
82  };
83 
84 
89  class NAPAPI TrackAction : public Action
90  {
91  RTTI_ENABLE(Action)
92  public:
93  explicit TrackAction(std::string trackID) : mTrackID(std::move(trackID))
94  {}
95 
96  std::string mTrackID;
97  };
98 
99 
103  class NAPAPI DraggingSegment : public TrackAction
104  {
105  RTTI_ENABLE(TrackAction)
106  public:
114  DraggingSegment(std::string trackId, std::string segmentID, double newDuration, bool moveNextSegments)
115  : TrackAction(std::move(trackId)), mSegmentID(std::move(segmentID)), mNewDuration(newDuration), mMoveNextSegments(moveNextSegments)
116  {}
117 
118 
119  std::string mSegmentID;
120  double mNewDuration;
121  bool mMoveNextSegments = false;
122  };
123 
124 
128  class NAPAPI StartDraggingSegment : public TrackAction
129  {
130  RTTI_ENABLE(TrackAction)
131  public:
139  StartDraggingSegment(std::string trackId, std::string segmentID, double startDuration, bool moveNextSegments)
140  : TrackAction(std::move(trackId)), mSegmentID(std::move(segmentID)), mStartDuration(startDuration), mMoveNextSegments(moveNextSegments)
141  {}
142 
143 
144  std::string mSegmentID;
146  bool mMoveNextSegments = false;
147  };
148 
149 
153  class NAPAPI InsertingSegmentPopup : public TrackAction
154  {
155  RTTI_ENABLE(TrackAction)
156  public:
163  InsertingSegmentPopup(std::string trackID, double time, const rttr::type &trackType)
164  : TrackAction(std::move(trackID)), mTime(time), mTrackType(trackType)
165  {}
166 
167  bool mOpened = false;
168  double mTime;
169  rttr::type mTrackType;
170  std::string mErrorString;
171  };
172 
173 
177  class NAPAPI EditSegmentPopup : public TrackAction
178  {
179  RTTI_ENABLE(TrackAction)
180  public:
187  EditSegmentPopup(std::string trackID, std::string segmentID, const rttr::type &segmentType)
188  : TrackAction(std::move(trackID)), mSegmentID(std::move(segmentID)), mSegmentType(segmentType)
189  {}
190 
191  bool mOpened = false;
192  std::string mSegmentID;
193  rttr::type mSegmentType;
194  };
195 
196 
200  class NAPAPI HoveringSegment : public TrackAction
201  {
202  RTTI_ENABLE(TrackAction)
203  public:
209  HoveringSegment(std::string trackID, std::string segmentID)
210  : TrackAction(std::move(trackID)), mSegmentID(std::move(segmentID))
211  {}
212 
213 
214  std::string mSegmentID;
215  };
216 
217 
221  class NAPAPI HoveringPlayerTime : public Action
222  {
223  RTTI_ENABLE(Action)
224  };
225 
226 
230  class NAPAPI DraggingPlayerTime : public Action
231  {
232  RTTI_ENABLE(Action)
233  public:
239  DraggingPlayerTime(bool wasPlaying, bool wasPaused)
240  : mWasPlaying(wasPlaying), mWasPaused(wasPaused)
241  {}
242 
243 
246  };
247 
248 
252  class NAPAPI InsertTrackPopup : public Action
253  {
254  RTTI_ENABLE(Action)
255  public:
256  // indicates whether the handler should open the popup
257  bool mOpened = false;
258  };
259 
260 
264  class LoadPopup : public Action
265  {
266  RTTI_ENABLE(Action)
267  public:
269  std::string mErrorString;
270  };
271 
272 
276  class NAPAPI SaveAsPopup : public Action
277  {
278  RTTI_ENABLE(Action)
279  public:
280  int mSelectedShowIndex = 0;
281  std::string mErrorString;
282  };
283 
284 
288  class NAPAPI HoveringSequenceDuration : public Action
289  {
290  RTTI_ENABLE(Action)
291  public:
292  };
293 
294 
298  class NAPAPI DraggingSequenceDuration : public Action
299  {
300  RTTI_ENABLE(Action)
301  public:
302  };
303 
304 
308  class NAPAPI EditSequenceDurationPopup : public Action
309  {
310  RTTI_ENABLE(Action)
311  public:
312  // indicates whether the handler should open the popup
313  bool mOpened = false;
314  };
315 
316 
320  class NAPAPI EditSequenceMarkerPopup : public Action
321  {
322  RTTI_ENABLE(Action)
323  public:
330  EditSequenceMarkerPopup(std::string id, std::string message, double time)
331  : mID(std::move(id)), mMessage(std::move(message)), mTime(time)
332  {}
333 
334  // marker id
335  std::string mID;
336  // indicates whether the handler should open the popup
337  bool mOpened = false;
338  // time of the marker
339  double mTime;
340  // marker message content
341  std::string mMessage = "Message";
342  };
343 
344 
348  class NAPAPI InsertingSequenceMarkerPopup : public Action
349  {
350  RTTI_ENABLE(Action)
351  public:
357  : mTime(time)
358  {}
359 
360  // indicates whether the handler should open the popup
361  bool mOpened = false;
362  // time of the marker
363  double mTime;
364  // marker message content
365  std::string mMessage = "Message";
366  };
367 
368 
372  class NAPAPI DragSequenceMarker : public Action
373  {
374  RTTI_ENABLE(Action)
375  public:
380  explicit DragSequenceMarker(std::string id) : mID(std::move(id))
381  {}
382 
383 
384  std::string mID;
385  };
386 
387 
391  class NAPAPI AssignOutputIDToTrack : public TrackAction
392  {
393  RTTI_ENABLE(TrackAction)
394  public:
400  AssignOutputIDToTrack(const std::string& trackID, std::string outputID)
401  : TrackAction(trackID), mOutputID(std::move(outputID))
402  {}
403 
404 
405  std::string mOutputID;
406 
407  };
408 
409 
413  class NAPAPI HelpPopup : public Action
414  {
415  RTTI_ENABLE(Action)
416  public:
417  // indicates whether the handler should open the popup
418  bool mOpened = false;
419  };
420 
425  {
426  RTTI_ENABLE(Action)
427  public:
432  ChangeHorizontalResolution(float newResolution) : mHorizontalResolution(newResolution)
433  {}
434 
435 
437  };
438 
443  {
444  RTTI_ENABLE(TrackAction)
445  public:
446  ChangeTrackName(const std::string& id, const std::string& newName) : TrackAction(id), mNewTrackName(newName)
447  {}
448 
449 
450  std::string mNewTrackName;
451  };
452 
457  {
458  RTTI_ENABLE(TrackAction)
459  public:
464  HoveringTrackExtensionHandler(std::string trackId) : TrackAction(std::move(trackId))
465  {}
466  };
467 
472  {
473  RTTI_ENABLE(TrackAction)
474  public:
479  DraggingTrackExtensionHandler(std::string trackId) : TrackAction(std::move(trackId))
480  {}
481  };
482 
486  class SavePresetPopup : public Action
487  {
488  RTTI_ENABLE(Action)
489  public:
490  SavePresetPopup(const std::string& filePath)
491  : mFilePath(filePath)
492  {}
493 
494 
495  std::string mFilePath;
497  std::string mErrorString;
498  };
499 
504  {
505  RTTI_ENABLE(TrackAction)
506  public:
507  LoadPresetPopup(const std::string& id, double time, rtti::TypeInfo trackType)
508  : TrackAction(id), mTime(time), mTrackType(trackType)
509  {}
510 
511 
512  std::string mFilePath;
515  std::string mErrorString;
516  double mTime;
517  };
518 
523  {
524  RTTI_ENABLE(TrackAction)
525  public:
526  TrackOptionsPopup(const std::string& trackID, ImVec2 pos)
527  : TrackAction(trackID), mPos(std::move(pos))
528  {}
529 
530  // indicates whether the handler should open the popup
531  bool mPopupOpened = false;
532  // position of the popup in screen coordinates
533  ImVec2 mPos;
534  // scroll at the moment of opening, popup closes when the user scrolls within the sequence editor gui
535  float mScrollY = 0.0f;
536  };
537 
538 
542  class NAPAPI OpenHistoryPopup : public Action
543  {
544  RTTI_ENABLE(Action)
545  };
546 
550  class NAPAPI SelectHistoryPopup : public Action
551  {
552  RTTI_ENABLE(Action)
553  };
554 
558  class PerformUndo : public Action
559  {
560  RTTI_ENABLE(Action)
561  public:
563  };
564 
568  class PerformRedo : public Action
569  {
570  RTTI_ENABLE(Action)
571  public:
573  };
574  }
575 }
nap::sequenceguiactions::HoveringTrackExtensionHandler
Definition: sequenceeditorguiactions.h:456
nap::sequenceguiactions::HoveringSegment
Definition: sequenceeditorguiactions.h:200
nap::sequenceguiactions::LoadPresetPopup::mFilePath
std::string mFilePath
Definition: sequenceeditorguiactions.h:512
nap::sequenceguiactions::TrackOptionsPopup::TrackOptionsPopup
TrackOptionsPopup(const std::string &trackID, ImVec2 pos)
Definition: sequenceeditorguiactions.h:526
nap::sequenceguiactions::HoveringSegment::mSegmentID
std::string mSegmentID
Definition: sequenceeditorguiactions.h:214
nap::sequenceguiactions::InsertTrackPopup
Definition: sequenceeditorguiactions.h:252
nap::sequenceguiactions::NonePressed
Definition: sequenceeditorguiactions.h:79
nap::sequenceguiactions::LoadPopup::mErrorString
std::string mErrorString
Definition: sequenceeditorguiactions.h:269
nap::sequenceguiactions::DraggingPlayerTime::DraggingPlayerTime
DraggingPlayerTime(bool wasPlaying, bool wasPaused)
Definition: sequenceeditorguiactions.h:239
nap::sequenceguiactions::EditSequenceMarkerPopup::mID
std::string mID
Definition: sequenceeditorguiactions.h:335
nap::sequenceguiactions::SaveAsPopup::mErrorString
std::string mErrorString
Definition: sequenceeditorguiactions.h:281
nap::sequenceguiactions::AssignOutputIDToTrack
Definition: sequenceeditorguiactions.h:391
nap::sequenceguiactions::SelectHistoryPopup
Definition: sequenceeditorguiactions.h:550
nap::sequenceguiactions::DraggingTrackExtensionHandler
Definition: sequenceeditorguiactions.h:471
nap::sequenceguiactions::ChangeHorizontalResolution::mHorizontalResolution
float mHorizontalResolution
Definition: sequenceeditorguiactions.h:436
nap::sequenceguiactions::EditSequenceMarkerPopup::EditSequenceMarkerPopup
EditSequenceMarkerPopup(std::string id, std::string message, double time)
Definition: sequenceeditorguiactions.h:330
nap::sequenceguiactions::DraggingPlayerTime
Definition: sequenceeditorguiactions.h:230
nap::sequenceguiactions::SavePresetPopup::mSelectedPresetIndex
int mSelectedPresetIndex
Definition: sequenceeditorguiactions.h:496
nap::sequenceguiactions::EditSegmentPopup::mSegmentID
std::string mSegmentID
Definition: sequenceeditorguiactions.h:192
nap::sequenceguiactions::EditSegmentPopup::EditSegmentPopup
EditSegmentPopup(std::string trackID, std::string segmentID, const rttr::type &segmentType)
Definition: sequenceeditorguiactions.h:187
nap::sequenceguiactions::StartDraggingSegment::mSegmentID
std::string mSegmentID
Definition: sequenceeditorguiactions.h:144
nap::sequenceguiactions::DraggingSegment
Definition: sequenceeditorguiactions.h:103
nap::sequenceguiactions::ChangeHorizontalResolution
Definition: sequenceeditorguiactions.h:424
nap::sequenceguiactions::EditSequenceDurationPopup
Definition: sequenceeditorguiactions.h:308
nap::sequenceguiactions::LoadPresetPopup::mTrackType
rtti::TypeInfo mTrackType
Definition: sequenceeditorguiactions.h:513
nap::sequenceguiactions::DraggingPlayerTime::mWasPlaying
bool mWasPlaying
Definition: sequenceeditorguiactions.h:244
nap::sequenceguiactions::SavePresetPopup
Definition: sequenceeditorguiactions.h:486
nap::sequenceguiactions::HoveringSequenceDuration
Definition: sequenceeditorguiactions.h:288
nap::sequenceguiactions::TrackOptionsPopup::mPos
ImVec2 mPos
Definition: sequenceeditorguiactions.h:533
nap::sequenceguiactions::PerformUndo::PerformUndo
PerformUndo()
Definition: sequenceeditorguiactions.h:562
nap::sequenceguiactions::DraggingSegment::mNewDuration
double mNewDuration
Definition: sequenceeditorguiactions.h:120
nap::sequenceguiactions::LoadPresetPopup::mSelectedPresetIndex
int mSelectedPresetIndex
Definition: sequenceeditorguiactions.h:514
nap::sequenceguiactions::EditSegmentPopup::mSegmentType
rttr::type mSegmentType
Definition: sequenceeditorguiactions.h:193
nap::sequenceguiactions::InsertingSegmentPopup::InsertingSegmentPopup
InsertingSegmentPopup(std::string trackID, double time, const rttr::type &trackType)
Definition: sequenceeditorguiactions.h:163
nap::sequenceguiactions::StartDraggingSegment::StartDraggingSegment
StartDraggingSegment(std::string trackId, std::string segmentID, double startDuration, bool moveNextSegments)
Definition: sequenceeditorguiactions.h:139
nap::sequenceguiactions::TrackOptionsPopup::mPopupOpened
bool mPopupOpened
Definition: sequenceeditorguiactions.h:531
nap::sequenceguiactions::DragSequenceMarker::DragSequenceMarker
DragSequenceMarker(std::string id)
Definition: sequenceeditorguiactions.h:380
nap::sequenceguiactions::InsertingSegmentPopup
Definition: sequenceeditorguiactions.h:153
nap::sequenceguiactions::LoadPopup
Definition: sequenceeditorguiactions.h:264
nap::sequenceguiactions::PerformRedo::PerformRedo
PerformRedo()
Definition: sequenceeditorguiactions.h:572
nap::sequenceguiactions::LoadPopup::mSelectedShowIndex
int mSelectedShowIndex
Definition: sequenceeditorguiactions.h:268
nap::sequenceguiactions::ChangeTrackName::mNewTrackName
std::string mNewTrackName
Definition: sequenceeditorguiactions.h:450
nap::sequenceguiactions::SequenceActionPtr
std::unique_ptr< Action > SequenceActionPtr
Definition: sequenceeditorguiactions.h:53
nap::sequenceguiactions::ChangeTrackName
Definition: sequenceeditorguiactions.h:442
nap::sequenceguiactions::HoveringSegment::HoveringSegment
HoveringSegment(std::string trackID, std::string segmentID)
Definition: sequenceeditorguiactions.h:209
nap::sequenceguiactions::LoadPresetPopup::mTime
double mTime
Definition: sequenceeditorguiactions.h:516
nap::sequenceguiactions::InsertingSegmentPopup::mTrackType
rttr::type mTrackType
Definition: sequenceeditorguiactions.h:169
nap::sequenceguiactions::DraggingPlayerTime::mWasPaused
bool mWasPaused
Definition: sequenceeditorguiactions.h:245
nap::sequenceguiactions::HoveringPlayerTime
Definition: sequenceeditorguiactions.h:221
nap::sequenceguiactions::HelpPopup
Definition: sequenceeditorguiactions.h:413
nap::sequenceguiactions::TrackOptionsPopup
Definition: sequenceeditorguiactions.h:522
nap::sequenceguiactions::EditSequenceMarkerPopup::mTime
double mTime
Definition: sequenceeditorguiactions.h:339
nap::sequenceguiactions::StartDraggingSegment::mStartDuration
double mStartDuration
Definition: sequenceeditorguiactions.h:145
nap::sequenceguiactions::TrackAction::mTrackID
std::string mTrackID
Definition: sequenceeditorguiactions.h:96
nap::sequenceguiactions::InsertingSequenceMarkerPopup::mTime
double mTime
Definition: sequenceeditorguiactions.h:363
nap::sequenceguiactions::AssignOutputIDToTrack::AssignOutputIDToTrack
AssignOutputIDToTrack(const std::string &trackID, std::string outputID)
Definition: sequenceeditorguiactions.h:400
nap::sequenceguiactions::SaveAsPopup
Definition: sequenceeditorguiactions.h:276
nap::sequenceguiactions::Action
Definition: sequenceeditorguiactions.h:26
nap::sequenceguiactions::LoadPresetPopup::mErrorString
std::string mErrorString
Definition: sequenceeditorguiactions.h:515
nap::sequenceguiactions::AssignOutputIDToTrack::mOutputID
std::string mOutputID
Definition: sequenceeditorguiactions.h:405
nap::sequenceguiactions::PerformUndo
Definition: sequenceeditorguiactions.h:558
nap::sequenceguiactions::TrackAction
Definition: sequenceeditorguiactions.h:89
nap::sequenceguiactions::InsertingSequenceMarkerPopup
Definition: sequenceeditorguiactions.h:348
nap::sequenceguiactions::Action::isAction
bool isAction()
Definition: sequenceeditorguiactions.h:36
nap::sequenceguiactions::SavePresetPopup::SavePresetPopup
SavePresetPopup(const std::string &filePath)
Definition: sequenceeditorguiactions.h:490
nap::sequenceguiactions::OpenHistoryPopup
Definition: sequenceeditorguiactions.h:542
nap
Definition: templateapp.h:17
nap::sequenceguiactions::DragSequenceMarker
Definition: sequenceeditorguiactions.h:372
nap::sequenceguiactions::HoveringTrackExtensionHandler::HoveringTrackExtensionHandler
HoveringTrackExtensionHandler(std::string trackId)
Definition: sequenceeditorguiactions.h:464
nap::sequenceguiactions::DraggingSequenceDuration
Definition: sequenceeditorguiactions.h:298
nap::sequenceguiactions::DraggingSegment::DraggingSegment
DraggingSegment(std::string trackId, std::string segmentID, double newDuration, bool moveNextSegments)
Definition: sequenceeditorguiactions.h:114
nap::sequenceguiactions::InsertingSegmentPopup::mTime
double mTime
Definition: sequenceeditorguiactions.h:168
nap::sequenceguiactions::ChangeHorizontalResolution::ChangeHorizontalResolution
ChangeHorizontalResolution(float newResolution)
Definition: sequenceeditorguiactions.h:432
nap::sequenceguiactions::SavePresetPopup::mErrorString
std::string mErrorString
Definition: sequenceeditorguiactions.h:497
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:507
nap::sequenceguiactions::SavePresetPopup::mFilePath
std::string mFilePath
Definition: sequenceeditorguiactions.h:495
nap::sequenceguiactions::DraggingSegment::mSegmentID
std::string mSegmentID
Definition: sequenceeditorguiactions.h:119
nap::sequenceguiactions::StartDraggingSegment
Definition: sequenceeditorguiactions.h:128
nap::sequenceguiactions::TrackOptionsPopup::mScrollY
float mScrollY
Definition: sequenceeditorguiactions.h:535
nap::rtti::TypeInfo
rttr::type TypeInfo
Definition: typeinfo.h:140
nap::sequenceguiactions::EditSequenceMarkerPopup
Definition: sequenceeditorguiactions.h:320
nap::sequenceguiactions::InsertingSegmentPopup::mErrorString
std::string mErrorString
Definition: sequenceeditorguiactions.h:170
nap::sequenceguiactions::InsertingSequenceMarkerPopup::InsertingSequenceMarkerPopup
InsertingSequenceMarkerPopup(double time)
Definition: sequenceeditorguiactions.h:356
nap::sequenceguiactions::DragSequenceMarker::mID
std::string mID
Definition: sequenceeditorguiactions.h:384
nap::sequenceguiactions::TrackAction::TrackAction
TrackAction(std::string trackID)
Definition: sequenceeditorguiactions.h:93
nap::sequenceguiactions::None
Definition: sequenceeditorguiactions.h:68
nap::sequenceguiactions::LoadPresetPopup
Definition: sequenceeditorguiactions.h:503
nap::sequenceguiactions::EditSegmentPopup
Definition: sequenceeditorguiactions.h:177
nap::sequenceguiactions::PerformRedo
Definition: sequenceeditorguiactions.h:568
nap::sequenceguiactions::ChangeTrackName::ChangeTrackName
ChangeTrackName(const std::string &id, const std::string &newName)
Definition: sequenceeditorguiactions.h:446
nap::sequenceguiactions::DraggingTrackExtensionHandler::DraggingTrackExtensionHandler
DraggingTrackExtensionHandler(std::string trackId)
Definition: sequenceeditorguiactions.h:479