#pragma once #include "ltsscripttimeline_export.h" #include "track_entry_painters.h" #include #include #include #include namespace Ui { class ScriptTimeline; } class QRubberBand; namespace LtsScriptTimeline { class TrackContentWidget; class TrackWidget; class TrackEntry; class Tools; class LTSSCRIPTTIMELINE_EXPORT ScriptTimeline : public QWidget { Q_OBJECT public: explicit ScriptTimeline(QWidget* parent = nullptr); ~ScriptTimeline(); TrackWidget* addTrack(const QString& name, bool filtersAllowed = true); void setScriptId(int scriptId) { m_scriptId = scriptId; } bool addTopic(TrackEntry* te); QString newTrackName() const; int nextUniqueId() { return ++m_uniqueId; } void setUniqueIdCounter(int uniqueId) { m_uniqueId = uniqueId; } QVector getTrackEntriesWithFiltersAsEntries(bool selectedEntriesOnly = false) const; QMap> getTrackEntriesWithFilters(bool selectedEntriesOnly = false) const; QVector getTrackEntries(bool selectedEntriesOnly = false) const; QVector getSelectedEntriesWithFilterEntries() const; QVector getSelectedFilterEntries() const; TrackEntry* getTrackEntry(int topicId); TrackEntry* getTrackEntryWithFiltersAsEntries(int topicId); void setIndicatorTime(int time); int getCurrentScriptEndTime(); void updateEverything(); void clear(); void setReadonly(bool readonly); QList getTrackWidgets() const; void lockIndicator(bool lock = true); int getFilterTrackEntryRealTime(TrackEntry* te); bool checkNewLength(TrackEntry* te, int newLength); bool importTrackEntries(const QVector& importTes); protected: void keyPressEvent(QKeyEvent* event) override; void mousePressEvent(QMouseEvent* event) override; void mouseMoveEvent(QMouseEvent*) override; void mouseReleaseEvent(QMouseEvent*) override; private: Ui::ScriptTimeline* ui; int m_uniqueId; int m_scriptId; int m_baseTrackWidgetWidth; QVector m_clipboard; bool m_readonly; int m_time; Tools* m_tools; TrackContentWidget* m_mlmsMaster; QHash m_mlmsTCWStates; bool m_ignoreChanges; QHash m_copyTopics; struct RubberbandAction { QPoint origin; QPointer rubberBand; } m_rubberbandAction; void resizeEvent(QResizeEvent* event) override; void updateAllTracks(); signals: void signalTrackEntrySelectionChanged(TrackEntry* te); void signalChangesMade(); void signalHeaderIndicatorTimeChanged(int time); void signalHeaderIndicatorTimeUserChanged(int time); void signalEditEntry(const int topicId); void signalTrackEntryDeleted(const int topicId); void signalTrackEntryAdded(TrackEntry* te); void signalSave(); public slots: void slotUnselectAll(); void slotEscapeRubberband(); void slotStopRubberband(); void slotStartRubberband(const QPoint& pos); void slotModifyRubberband(); void selectAll(); void slotCopyTopics(); void slotCutTopics(); void slotPasteTopics(); void slotDeleteSelectedTopics(); void slotMoveAll(int direction); void slotScroll(int incr); private slots: void slotScrollbarValueChanged(); void slotZoomValueChanged(int value); void slotDeleteTracks(); void slotSelectTrack(); void slotHeaderHandleResized(int newSize); void slotHeaderIndicatorTimeChanged(int time); void slotTrackEntrySelectionChanged(TrackEntry* te); void slotSetNewScrollBarMaximum(); }; } // namespace LtsScriptTimeline