#pragma once #include #include "track_entry_painters.h" #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(); }; }