diff --git a/src/Lib/Ass/Line.cc b/src/Lib/Ass/Line.cc index 046e313168aeaaf52a917bafc7e0a00d0f7ea718..71eafe81220b7297af8db8067a22496d6e7418c8 100644 --- a/src/Lib/Ass/Line.cc +++ b/src/Lib/Ass/Line.cc @@ -134,3 +134,21 @@ Line::getIsComment() const noexcept { return isComment; } + +quint64 +Line::getStart() const noexcept +{ + return start; +} + +quint64 +Line::getEnd() const noexcept +{ + return end; +} + +QString +Line::getContentAsText() const noexcept +{ + return ___contentAsText; +} diff --git a/src/Lib/Ass/Line.hh b/src/Lib/Ass/Line.hh index 11f91de64ed4c0c204b096080b16ec453f97eb63..f24b2e9e48005a850d7fe2c429a5bdc015ff4276 100644 --- a/src/Lib/Ass/Line.hh +++ b/src/Lib/Ass/Line.hh @@ -44,6 +44,10 @@ public: StyleWeakPtr getStyle() const noexcept; const QVector<Syl> &getContent() const noexcept; + quint64 getStart() const noexcept; + quint64 getEnd() const noexcept; + QString getContentAsText() const noexcept; + private: void initSylFromString(const QString &) noexcept; }; diff --git a/src/UI/DocumentViews/TimingAxis.cc b/src/UI/DocumentViews/TimingAxis.cc index f7bdb827cd322f72df84fab3f6c085fbf12620f2..7183b82614d46b08ad7fc57d9f16db4e2721df62 100644 --- a/src/UI/DocumentViews/TimingAxis.cc +++ b/src/UI/DocumentViews/TimingAxis.cc @@ -25,7 +25,7 @@ TimingAxis::TimingAxis(AudioContext::StreamPtr stream, int x0_, int x1_, int y_) QRectF TimingAxis::boundingRect() const { - return QRectF(x0, y - penWidth, x1, y + penWidth); + return QRectF(x0, 0, x1, y + ticksBase + penWidth*2); } /* diff --git a/src/UI/DocumentViews/TimingScene.cc b/src/UI/DocumentViews/TimingScene.cc index 9a87e6505501d4a3973b15b8641367cba73ff31d..af78ff7a2bb7699a0ae2936a48e47ab3b313d0e8 100644 --- a/src/UI/DocumentViews/TimingScene.cc +++ b/src/UI/DocumentViews/TimingScene.cc @@ -1,5 +1,8 @@ #include "TimingScene.hh" + #include "../../Lib/Utils.hh" +#include "../../Lib/Ass/Ass.hh" +#include "../../Lib/Document/VivyDocument.hh" #include <QGraphicsLineItem> #include <QGraphicsPixmapItem> @@ -29,7 +32,33 @@ TimingScene::TimingScene(QImage img_, AudioContext::StreamPtr stream, QWidget *p backgroundImg = addPixmap(pixmap); ax = new TimingAxis(stream, 0, pixmap.width(), 10); addItem(ax); + ax->refreshTicks(); + + if (auto assDocument = currentVivyDocument->getAssSubDocument()){ + QVector<Ass::LinePtr> lines = assDocument->getLines(); + for (int i = 0; i < lines.size(); ++i) { + if (auto line = lines.at(i).get()){ + qreal xstart = posFromTime(line->getStart()); + TimingBar* bar = new TimingBar(QLine(int(xstart), 30, int(xstart), int(height())), QColor(127,0,0)); + bar->setZValue(10); + addItem(bar); + qreal xend = posFromTime(line->getEnd()); + bar = new TimingBar(QLine(int(xend), 30, int(xend), int(height())), QColor(127,0,0)); + bar->setZValue(10); + addItem(bar); + QGraphicsRectItem* rect = new QGraphicsRectItem(xstart, 30, xend-xstart, int(height())-30); + addItem(rect); + rect->setBrush(Qt::blue); + rect->setOpacity(0.1); + QGraphicsTextItem* text = new QGraphicsTextItem(line->getContentAsText()); + addItem(text); + text->setZValue(5); + text->setTextWidth(xend-xstart-10); + text->setPos(xstart+5, 30+(height()-30)/2); + } + } + } } void @@ -76,13 +105,13 @@ TimingScene::handleMousePressEventChar(QGraphicsSceneMouseEvent *, Ass::LinePtr) } quint64 -TimingScene::timeFromPos(qreal x) const +TimingScene::timeFromPos(qreal x) const noexcept { return timeFromPos(quint64(x)); } quint64 -TimingScene::timeFromPos(quint64 x) const +TimingScene::timeFromPos(quint64 x) const noexcept { if (const quint64 w = quint64(width()); x <= 0 || w <= 0) { qCritical() << "Try avoid possible divide by zero in the time from position"; @@ -92,6 +121,17 @@ TimingScene::timeFromPos(quint64 x) const } } +qreal +TimingScene::posFromTime(quint64 t) const noexcept +{ + if (const quint64 w = quint64(width()); t <= 0 || w <= 0) { + qCritical() << "Try avoid possible divide by zero in the position from time"; + return 0; + } else { + return 10 * t * w / audioStream->getLength(); + } +} + QGraphicsPixmapItem * TimingScene::bg() noexcept { diff --git a/src/UI/DocumentViews/TimingScene.hh b/src/UI/DocumentViews/TimingScene.hh index 86b1be9bde029b5e7bf25a25f889a213c5afd97b..95d000b2fb8282340a47e50dc07e717f690398b1 100644 --- a/src/UI/DocumentViews/TimingScene.hh +++ b/src/UI/DocumentViews/TimingScene.hh @@ -37,8 +37,9 @@ public: TimingAxis *getAxis(); private: - quint64 timeFromPos(qreal x) const; - quint64 timeFromPos(quint64 x) const; + quint64 timeFromPos(qreal x) const noexcept; + quint64 timeFromPos(quint64 x) const noexcept; + qreal posFromTime(quint64 t) const noexcept; void handleMousePressEventLine(QGraphicsSceneMouseEvent *, Ass::LinePtr) noexcept; void handleMousePressEventSyl(QGraphicsSceneMouseEvent *, Ass::LinePtr) noexcept; void handleMousePressEventChar(QGraphicsSceneMouseEvent *, Ass::LinePtr) noexcept;