Sélectionner une révision Git
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);
}