Files
qt5-legatus-legacy/Lts/Common/LtsScriptTimeline/script_timeline.h
T
2026-08-13 18:33:10 +02:00

126 lines
3.7 KiB
C++
Executable File

#pragma once
#include <LtsScriptTimeline/ltsscripttimeline_export.h>
#include "track_entry_painters.h"
#include <QWidget>
#include <QKeyEvent>
#include <QPointer>
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); // from dds
QString newTrackName() const;
int nextUniqueId() { return ++m_uniqueId; }
void setUniqueIdCounter(int uniqueId) { m_uniqueId = uniqueId; }
QVector<TrackEntry *> getTrackEntriesWithFiltersAsEntries(bool selectedEntriesOnly = false) const;
QMap<QString, QVector<TrackEntry *> > getTrackEntriesWithFilters(bool selectedEntriesOnly = false) const;
QVector<TrackEntry *> getTrackEntries(bool selectedEntriesOnly = false) const;
QVector<TrackEntry *> getSelectedEntriesWithFilterEntries() const;
QVector<TrackEntry *> getSelectedFilterEntries() const;
TrackEntry *getTrackEntry(int topicId);
TrackEntry *getTrackEntryWithFiltersAsEntries(int topicId);
void setIndicatorTime(int time);
int getCurrentScriptEndTime();
//void selectTrackEntry(int topicId);
void updateEverything();
void clear();
void setReadonly(bool readonly);
QList<TrackWidget *> getTrackWidgets() const;
void lockIndicator(bool lock = true);
int getFilterTrackEntryRealTime(TrackEntry *te);
bool checkNewLength(TrackEntry *te, int newLength);
bool importTrackEntries(const QVector<LtsScriptTimeline::TrackEntry *> &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<TrackEntry *> m_clipboard;
//QMap<QString, TrackWidget *> m_trackMap;
bool m_readonly;
int m_time;
Tools *m_tools;
TrackContentWidget *m_mlmsMaster;
QHash<TrackContentWidget *, bool> m_mlmsTCWStates;
bool m_ignoreChanges;
QHash<TrackWidget *, QByteArray> m_copyTopics;
struct RubberbandAction
{
QPoint origin;
QPointer<QRubberBand> 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); // only emitted on user change
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