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

VivyDocumentView.cc

Blame
  • VivyDocumentView.cc 3,94 Kio
    #include "VivyDocumentView.hh"
    #include "PropertyModel.hh"
    #include "DocumentViews/AudioVisualizer.hh"
    #include "../VivyApplication.hh"
    #include "../Lib/Document/VivyDocument.hh"
    
    #include <QHeaderView>
    #include <QTreeView>
    #include <QVBoxLayout>
    
    using namespace Vivy;
    
    VivyDocumentView::VivyDocumentView(std::shared_ptr<VivyDocument> doc, QWidget *parent) noexcept
        : DocumentView(parent)
        , document(doc)
    {
        qDebug() << "Create view for document" << doc->getName() << "with capabilities"
                 << doc->getDocumentCapabilitiesString();
        loadAudioView();
    }
    
    VivyDocumentView::~VivyDocumentView() noexcept
    {
        qDebug()
            << "Deleting the document view: ref count on document" << document->getName() << "is"
            << document.use_count() << "and" << (visualizer ? "has visualizer" : "without visualizer");
        closeDocument();
    }
    
    std::shared_ptr<VivyDocument>
    VivyDocumentView::getDocument() const noexcept
    {
        return document;
    }
    
    QString
    VivyDocumentView::getDocumentTabName() const noexcept
    {
        return (document->checkDocumentOption(VivyDocument::UntouchedByDefault) ? "(*) " : "") +
               document->getName();
    }
    
    QString
    VivyDocumentView::getDocumentTabToolTip() const noexcept
    {
        return "UUID: " + document->getUuid().toString() + "\nCapabilities: [" +
               document->getDocumentCapabilitiesString() + "]" +
               (document->checkDocumentOption(VivyDocument::UntouchedByDefault) ? "\nUntouched document"
                                                                                : "");
    }
    
    void
    VivyDocumentView::loadAudioView() noexcept
    {
        if (document->checkDocumentCapabilities(VivyDocument::AudioAble)) {
            std::shared_ptr<AudioSubDocument> audioDocument = document->getAudioSubDocument();
            qDebug() << "Create an audio vizualizer for the audio sub document"
                     << audioDocument->getFilePath();
    
            AudioContext::StreamPtr stream = audioDocument->getDefaultStream();
            if (stream == nullptr) {
                qCritical() << "Failed to get default audio stream";
                return;
            }
    
            if (visualizer)
                delete visualizer;
            visualizer = new QDockWidget("Visualizer", this);
    
            AudioVisualizer *visualizerInner = new AudioVisualizer(stream, visualizer);
            if (visualizerInner == nullptr) {
                qCritical() << "Failed to create visualizer for" << audioDocument->getFilePath();
                return;
            }
    
            visualizer->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Expanding);
            visualizer->setWidget(visualizerInner);
            visualizer->setFeatures(QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetClosable);
            addDockWidget(Qt::LeftDockWidgetArea, visualizer, Qt::Horizontal);
        }
    
        else {
            qDebug() << "The document" << document->getName() << "is not AudioAble";
        }
    }
    
    DocumentView::Type
    VivyDocumentView::getType() const noexcept
    {
        return DocumentView::Type::Vivy;
    }
    
    void
    VivyDocumentView::closeDocument() noexcept
    {
        qDebug() << "Closing the document:" << document->getName() << "( ref count is"
                 << document.use_count() << ")";
        vivyApp->documentStore.closeDocument(document->getUuid());
    
        // The visualizer pointer should have been deleted by the
        // deleteAllContent() call if it was created.
        deleteAllContent();
        visualizer = nullptr;
    }
    
    QIcon
    VivyDocumentView::getDocumentTabIcon() const noexcept
    {
        return QIcon(":/icons/vivy.png");
    }
    
    void
    VivyDocumentView::openProperties() noexcept
    {
        if (property) {
            removeDockWidget(property);
            delete property;
        }
    
        propertyModel.reset(new PropertyModel(*document.get()));
        property        = new QDockWidget("Properties", this);
        QTreeView *view = new QTreeView(property);
        view->setModel(propertyModel.get());
        view->header()->setSectionResizeMode(QHeaderView::ResizeToContents);
        view->expandAll();
        property->setWidget(view);
        addDockWidget(Qt::RightDockWidgetArea, property, Qt::Vertical);
    }