Skip to content
Extraits de code Groupes Projets
Sélectionner une révision Git
  • ddf975b1b749ec99506f43558ea9fdd0e75a3783
  • master par défaut
  • script
  • new-devel
  • devel
  • timingView-edit
  • fix-mpv
7 résultats

VivyDocumentView.cc

Blame
  • TimingScene.cc 4,04 Kio
    #include "TimingScene.hh"
    
    #include "../../Lib/Utils.hh"
    #include "../../Lib/Ass/Ass.hh"
    #include "../../Lib/Document/VivyDocument.hh"
    
    #include <QGraphicsLineItem>
    #include <QGraphicsPixmapItem>
    #include <QGraphicsView>
    #include <QLabel>
    #include <QMessageBox>
    #include <QMouseEvent>
    #include <QPainter>
    #include <QGraphicsSceneMouseEvent>
    #include <QScrollArea>
    #include <QScrollBar>
    #include <QVBoxLayout>
    
    using namespace Vivy;
    
    TimingScene::TimingScene(QWidget *parent) noexcept
        : QGraphicsScene(parent)
    {
    }
    
    TimingScene::TimingScene(QImage img_, AudioContext::StreamPtr stream, QWidget *parent) noexcept
        : QGraphicsScene(parent)
        , img(img_)
        , audioStream(stream)
    {
        QPixmap pixmap(QPixmap::fromImage(img));
        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
    TimingScene::mousePressEvent(QGraphicsSceneMouseEvent *event) noexcept
    {
        QPointF pos        = event->scenePos();
        QGraphicsItem *got = itemAt(pos, QTransform());
        Ass::LinePtr p     = currentLine.lock();