7 #include "sequencetrackview.h"
8 #include "sequencecontrollerevent.h"
9 #include "sequencetracksegment.h"
10 #include "sequenceeditorguiclipboard.h"
11 #include "sequenceeventtrackview_guiactions.h"
12 #include "sequenceguiutils.h"
15 #include <imguiutils.h>
22 class SequenceEventTrackView;
23 class SequenceGUIService;
30 class NAPAPI SequenceEventTrackSegmentViewBase
37 SequenceEventTrackSegmentViewBase() = default;
42 virtual ~SequenceEventTrackSegmentViewBase() = default;
49 virtual
void handleEditPopupContent(sequenceguiactions::Action& action) = 0;
60 virtual
void drawEvent(const SequenceTrackSegment& segment, ImDrawList* drawList, const ImVec2& topLeft,
float x, ImU32 color) = 0;
69 virtual
void insertSegment(SequenceControllerEvent& controller, const std::
string& trackID,
double time) = 0;
79 virtual std::unique_ptr<sequenceguiactions::Action> createEditAction(const SequenceTrackSegmentEventBase* segment, const std::
string& trackID, const std::
string& segmentID) = 0;
118 void drawEvent(
const SequenceTrackSegment& segment, ImDrawList* drawList,
const ImVec2& topLeft,
float x, ImU32 color)
override;
137 std::unique_ptr<sequenceguiactions::Action>
167 void showInspectorContent(
const SequenceTrack& track)
override;
174 void showTrackContent(
const SequenceTrack& track,
const ImVec2& trackTopLeft)
override;
179 void handleInsertEventSegmentPopup();
185 void handleEditEventSegmentPopup();
195 bool pasteEventsFromClipboard(
const std::string& trackID,
double time,
utility::ErrorState& errorState);
217 drawSegmentHandler(
const SequenceTrack& track,
const SequenceTrackSegment& segment,
const ImVec2& trackTopLeft,
float segmentX,
float segmentWidth, ImDrawList* drawList);
222 void handleEditSegmentValuePopup();
229 void updateSegmentInClipboard(
const std::string& trackID,
const std::string& segmentID);
234 void handleAssignOutputIDToTrack();
239 void handleSegmentDrag();
244 void handleLoadPresetPopup();
248 std::unordered_map<rtti::TypeInfo, std::unique_ptr<SequenceEventTrackSegmentViewBase>> mSegmentViews;
256 namespace sequenceguiclipboard
264 :
Clipboard(type), mSequenceName(std::move(sequenceName))
271 std::string mSequenceName;
285 ImGui::OpenPopup(
"Edit Event");
288 ImGui::SetNextWindowPos(action->mWindowPos);
290 mState.mAction = sequenceguiactions::createAction<sequenceguiactions::EditingEventSegment<T>>(action->mTrackID, action->mSegmentID, action->mWindowPos, action->mValue, action->mStartTime);
298 if(ImGui::BeginPopup(
"Edit Event"))
302 assert(it != mSegmentViews.end());
303 it->second->handleEditPopupContent(*action);
308 bool edit_time =
false;
311 ImGui::PushItemWidth(100.0f * mState.mScale);
313 edit_time = ImGui::InputInt3(
"Time (mm:ss:ms)", &time_array[0]);
314 time_array[0] = math::clamp<int>(time_array[0], 0, 99999);
315 time_array[1] = math::clamp<int>(time_array[1], 0, 59);
316 time_array[2] = math::clamp<int>(time_array[2], 0, 99);
318 ImGui::PopItemWidth();
326 double time = event_controller.segmentEventStartTimeChange(action->mTrackID, action->mSegmentID, new_time);
327 updateSegmentInClipboard(action->mTrackID, action->mSegmentID);
328 action->mStartTime = time;
329 mState.mDirty =
true;
334 event_controller.
editEventSegment<T>(action->mTrackID, action->mSegmentID, action->mValue);
335 updateSegmentInClipboard(action->mTrackID, action->mSegmentID);
336 mState.mAction = sequenceguiactions::createAction<sequenceguiactions::None>();
337 ImGui::CloseCurrentPopup();
342 ImGui::CloseCurrentPopup();
343 mState.mAction = sequenceguiactions::createAction<sequenceguiactions::None>();
346 action->mWindowPos = ImGui::GetWindowPos();
352 mState.mAction = sequenceguiactions::createAction<sequenceguiactions::None>();
365 const auto *new_segment =
dynamic_cast<const T *
>(controller.insertEventSegment<T>(trackID,
368 assert(new_segment !=
nullptr);
371 const auto *event_upcast =
dynamic_cast<const T *
>(&baseEvent);
372 assert(event_upcast !=
nullptr);
375 controller.editEventSegment(trackID, new_segment->mID, event_upcast->mValue);
390 return sequenceguiactions::createAction<sequenceguiactions::OpenEditEventSegmentPopup<T>>(trackID, segmentID, ImGui::GetWindowPos(),
event->mValue, segment->
mStartTime);