From 54f13a63adc08ecd2fa5bdcf37ba7866df066f7d Mon Sep 17 00:00:00 2001 From: Elliu <elliu@hashi.re> Date: Thu, 3 Feb 2022 18:07:02 +0100 Subject: [PATCH] WIP: connect timingLine to AssLinesModel --- src/Lib/Ass/Line.cc | 7 +++++++ src/Lib/Ass/Line.hh | 3 ++- src/UI/DocumentViews/AssLinesModel.cc | 18 ++++++++++++++++++ src/UI/DocumentViews/AssLinesModel.hh | 5 +++++ .../AudioVisualizer/TimingLine.cc | 7 ++++++- .../AudioVisualizer/TimingLine.hh | 6 +++++- .../AudioVisualizer/TimingScene.cc | 8 ++++++-- src/UI/VivyDocumentView.hh | 5 +++++ 8 files changed, 54 insertions(+), 5 deletions(-) diff --git a/src/Lib/Ass/Line.cc b/src/Lib/Ass/Line.cc index 18d2a983..652c3d64 100644 --- a/src/Lib/Ass/Line.cc +++ b/src/Lib/Ass/Line.cc @@ -59,6 +59,12 @@ Line::Line(AssFactory *const factory, const QString &lineString) initSylFromString(___contentAsText); } +void +Line::generateLineText() noexcept +{ + // TODO : generate ___contentAsText from content +} + void Line::initSylFromString(const QString &line) noexcept { @@ -163,4 +169,5 @@ void Line::setContent(const QVector<Syl> &syls) noexcept { content = syls; + generateLineText(); } diff --git a/src/Lib/Ass/Line.hh b/src/Lib/Ass/Line.hh index 3ec42714..8462b532 100644 --- a/src/Lib/Ass/Line.hh +++ b/src/Lib/Ass/Line.hh @@ -29,7 +29,7 @@ class Line final { AssFactory *const assFactory; public: - explicit Line(const Line &) = default; + //explicit Line(const Line &) = default; explicit Line(AssFactory *const, const QString &); Line &operator=(const Line &) = delete; @@ -53,5 +53,6 @@ public: private: void initSylFromString(const QString &) noexcept; + void generateLineText() noexcept; }; } diff --git a/src/UI/DocumentViews/AssLinesModel.cc b/src/UI/DocumentViews/AssLinesModel.cc index c02396a5..47c1febe 100644 --- a/src/UI/DocumentViews/AssLinesModel.cc +++ b/src/UI/DocumentViews/AssLinesModel.cc @@ -20,6 +20,9 @@ AssLinesModel::Item::getLineText() const noexcept if (auto ptr = line.lock()) { for (const auto &syl : ptr->getContent()) { ret.append(syl.getContent()); + ret.append("("); + ret.append(QString::number(syl.getDuration())); + ret.append(")"); ret.append("|"); } } @@ -46,6 +49,12 @@ AssLinesModel::Item::getLineStyle() const noexcept return ""; } +void +AssLinesModel::Item::setLine(Ass::LineWeakPtr l) noexcept +{ + line = l; +} + AssLinesModel::AssLinesModel(const QVector<Ass::LinePtr> &lines) noexcept : lineRealData(lines) { @@ -142,3 +151,12 @@ AssLinesModel::flags(const QModelIndex &index) const noexcept [[maybe_unused]] const Item *item = static_cast<const Item *>(index.internalPointer()); return Qt::ItemNeverHasChildren | Qt::ItemIsSelectable | QAbstractItemModel::flags(index); } + +void +AssLinesModel::updateLine(int lineIndex, Ass::LinePtr line) +{ + qDebug() << data(index(lineIndex, 0), Qt::DisplayRole); + childs[lineIndex]->setLine(line); + qDebug() << data(index(lineIndex, 0), Qt::DisplayRole); + qDebug() << ""; +} diff --git a/src/UI/DocumentViews/AssLinesModel.hh b/src/UI/DocumentViews/AssLinesModel.hh index 60cc550b..ad45d4bd 100644 --- a/src/UI/DocumentViews/AssLinesModel.hh +++ b/src/UI/DocumentViews/AssLinesModel.hh @@ -27,6 +27,8 @@ private: QString getLineText() const noexcept; QString getLineStyle() const noexcept; + void setLine(Ass::LineWeakPtr) noexcept; + private: Ass::LineWeakPtr line; }; @@ -52,5 +54,8 @@ public: private: QVector<Item *> childs; const QVector<Ass::LinePtr> &lineRealData; + +public slots: + void updateLine(int, Ass::LinePtr); }; } diff --git a/src/UI/DocumentViews/AudioVisualizer/TimingLine.cc b/src/UI/DocumentViews/AudioVisualizer/TimingLine.cc index 29cd6c30..752b8d40 100644 --- a/src/UI/DocumentViews/AudioVisualizer/TimingLine.cc +++ b/src/UI/DocumentViews/AudioVisualizer/TimingLine.cc @@ -12,9 +12,10 @@ using namespace Vivy; connect(sep, &TimingSeparator::enterPress, this, &TimingLine::sepEnterPress); \ connect(sep, &TimingSeparator::exitPress, this, &TimingLine::sepExitPress); -TimingLine::TimingLine(Ass::Line *lineptr, QGraphicsItem *parent) +TimingLine::TimingLine(Ass::Line *lineptr, int index, QGraphicsItem *parent) : QGraphicsObject(parent) , line(*lineptr) + , lineIndex(index) { setPos(TimingUtils::posFromMs(int(line.getStart()) * 10), TimingUtils::axisHeight()); int currentTime = 0; @@ -164,5 +165,9 @@ TimingLine::requestMove(int sepIndex, qreal x) line.setContent(syls); + if (given){ + emit lineChanged(lineIndex, std::make_shared<Ass::Line>(line)); + } + return given; } diff --git a/src/UI/DocumentViews/AudioVisualizer/TimingLine.hh b/src/UI/DocumentViews/AudioVisualizer/TimingLine.hh index 18e68323..cda92bd8 100644 --- a/src/UI/DocumentViews/AudioVisualizer/TimingLine.hh +++ b/src/UI/DocumentViews/AudioVisualizer/TimingLine.hh @@ -11,7 +11,7 @@ namespace Vivy class TimingLine final : public QGraphicsObject { Q_OBJECT public: - explicit TimingLine(Ass::Line *, QGraphicsItem * = nullptr); + explicit TimingLine(Ass::Line *, int, QGraphicsItem * = nullptr); QRectF boundingRect() const override; void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override; @@ -20,12 +20,16 @@ private: Ass::Line line; QVector<TimingSeparator *> seps; QVector<TimingSyl *> timingSyls; + int lineIndex; qreal tempOffset{ 0 }; public: qreal requestMove(int, qreal); +signals: + void lineChanged(int, Ass::LinePtr); + public slots: void timingSeparatorHasChanged(int, qreal); void sepEnterPress(int); diff --git a/src/UI/DocumentViews/AudioVisualizer/TimingScene.cc b/src/UI/DocumentViews/AudioVisualizer/TimingScene.cc index f602b328..e1ddba5e 100644 --- a/src/UI/DocumentViews/AudioVisualizer/TimingScene.cc +++ b/src/UI/DocumentViews/AudioVisualizer/TimingScene.cc @@ -90,11 +90,15 @@ TimingScene::rebuildScene() QVector<Ass::LinePtr> lines = assDocument->getLines(); for (int i = 0; i < lines.size(); ++i) { if (auto line = lines.at(i).get()) { - TimingLine *l = new TimingLine(line); + TimingLine *l = new TimingLine(line, i); l->setVisible(false); addItem(l); timingLines.append(l); - // TODO: Here connect timingLine.linechanged to lineassmodel or something + if (auto p = rootView.lock()) { + if (auto assLinesModel = p->getAssLinesModel()) { + connect(l, &TimingLine::lineChanged, assLinesModel, &AssLinesModel::updateLine); + } + } } } } diff --git a/src/UI/VivyDocumentView.hh b/src/UI/VivyDocumentView.hh index ea6b8bfd..72a3c025 100644 --- a/src/UI/VivyDocumentView.hh +++ b/src/UI/VivyDocumentView.hh @@ -63,5 +63,10 @@ public: { return assLines == nullptr ? nullptr : reinterpret_cast<AssLinesView *>(assLines->widget()); } + + AssLinesModel *getAssLinesModel() const noexcept + { + return assModel.get(); + } }; } -- GitLab