diff --git a/src/Lib/Document/VivyDocument.cc b/src/Lib/Document/VivyDocument.cc index be9bc9fbbf57c6cf2c35d33a9e315ca40fd429ba..2baee52bb193ae1559aea0c12460988f46eeaaba 100644 --- a/src/Lib/Document/VivyDocument.cc +++ b/src/Lib/Document/VivyDocument.cc @@ -86,19 +86,18 @@ VivyDocument::detectDocumentType(const QFileInfo &file, Capabilities *ableType) Vivy::Utils::DocumentType docType; bool rc = Vivy::Utils::detectDocumentType(file, &docType); - switch (docType) { - case Vivy::Utils::DocumentType::Video: + if (docType == Utils::DocumentType::Video) *ableType = Capabilities::VideoAble; - break; - case Vivy::Utils::DocumentType::Audio: + + else if (docType == Utils::DocumentType::Audio) *ableType = Capabilities::AudioAble; - break; - case Vivy::Utils::DocumentType::ASS: + + else if (docType == Utils::DocumentType::ASS) *ableType = Capabilities::AssAble; - break; - default: + + // Invalid document type + else return false; - } return rc; } diff --git a/src/UI/DocumentViews/TimingScene.cc b/src/UI/DocumentViews/TimingScene.cc index 3c916fd0868d3364b69b0822c233357dd9667f94..e9db17e38c240717c21e814c98139e7585a80f16 100644 --- a/src/UI/DocumentViews/TimingScene.cc +++ b/src/UI/DocumentViews/TimingScene.cc @@ -32,36 +32,44 @@ TimingScene::TimingScene(QImage img_, quint64 soundLength_, QWidget *parent) noe void TimingScene::mousePressEvent(QGraphicsSceneMouseEvent *event) noexcept { - QPointF pos = event->scenePos(); - fprintf(stderr, "%f,%f\n", pos.x(), pos.y()); + QPointF pos = event->scenePos(); + QGraphicsItem *got = itemAt(pos, QTransform()); + Ass::LinePtr p = currentLine.lock(); - QGraphicsItem *got; - if ((got = itemAt(pos, QTransform())) == nullptr || got == backgroundImg) { - if (auto p = currentLine.lock()) { - quint64 time = timeFromPos(pos.x()); - switch (timingMode) { - case TimingMode::Line: - switch (event->button()) { - case Qt::LeftButton: - p->setStart(time); - break; + if (p && (got == nullptr || got == backgroundImg)) [[likely]] { + // Handle the different cases + if (timingMode == TimingMode::Line) + handleMousePressEventLine(event, p); + else if (timingMode == TimingMode::Syl) + handleMousePressEventSyl(event, p); + else if (timingMode == TimingMode::Char) + handleMousePressEventChar(event, p); + } - case Qt::RightButton: - p->setEnd(time); - break; + QGraphicsScene::mousePressEvent(event); +} - default: - break; - } - break; +void +TimingScene::handleMousePressEventLine(QGraphicsSceneMouseEvent *event, Ass::LinePtr p) noexcept +{ + QPointF pos = event->scenePos(); + quint64 time = timeFromPos(pos.x()); - default: - break; - } - } + if (const auto &btn = event->button(); btn == Qt::LeftButton) { + p->setStart(time); + } else if (btn == Qt::RightButton) { + p->setEnd(time); } +} - QGraphicsScene::mousePressEvent(event); +void +TimingScene::handleMousePressEventSyl(QGraphicsSceneMouseEvent *, Ass::LinePtr) noexcept +{ +} + +void +TimingScene::handleMousePressEventChar(QGraphicsSceneMouseEvent *, Ass::LinePtr) noexcept +{ } quint64 diff --git a/src/UI/DocumentViews/TimingScene.hh b/src/UI/DocumentViews/TimingScene.hh index fba8958f33ab0587d326ccac30847254ef5d7255..02f20e90904772202d507760dbb6a119ab40ff00 100644 --- a/src/UI/DocumentViews/TimingScene.hh +++ b/src/UI/DocumentViews/TimingScene.hh @@ -18,7 +18,7 @@ class TimingScene final : public QGraphicsScene { Q_OBJECT public: - enum class TimingMode { Line = 0x0, Syl = 0x1, Char = 0x2 }; + enum class TimingMode { Line = 0, Syl = (1 << 1), Char = (1 << 2) }; Q_DECLARE_FLAGS(TimingModes, TimingMode) public: @@ -27,7 +27,6 @@ public: explicit TimingScene(QWidget *parent = nullptr) noexcept; explicit TimingScene(QImage, quint64, QWidget * = nullptr) noexcept; - ~TimingScene() noexcept = default; private: QGraphicsPixmapItem *backgroundImg{ nullptr }; @@ -42,6 +41,9 @@ public: private: quint64 timeFromPos(qreal x); + void handleMousePressEventLine(QGraphicsSceneMouseEvent *, Ass::LinePtr) noexcept; + void handleMousePressEventSyl(QGraphicsSceneMouseEvent *, Ass::LinePtr) noexcept; + void handleMousePressEventChar(QGraphicsSceneMouseEvent *, Ass::LinePtr) noexcept; public slots: };