diff --git a/CMakeLists.txt b/CMakeLists.txt index bc73970b37abf6bfa8ceca76ddf5616be52aa301..576c61967666eca9f7862575cde798f674be8f49 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -90,13 +90,10 @@ target_precompile_headers(Vivy PRIVATE # More options and warnings target_compile_options(Vivy PRIVATE -Wall -Wextra -Wshadow -pedantic - -Wcast-align -Wconversion -Wsign-conversion + -Wcast-align -Wconversion -Wsign-conversion -Wunused-variable -Wmisleading-indentation -Wnull-dereference -Wdouble-promotion -Wformat=2 - $<$<COMPILE_LANGUAGE:CXX>: - -Woverloaded-virtual - -Wnon-virtual-dtor - > + -Woverloaded-virtual -Wnon-virtual-dtor ) if (${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang") diff --git a/src/Document/CRTPSubDocument.cc b/src/Document/CRTPSubDocument.cc index 85983b5e5389a04d152ba1fe50efd10d09e387a7..0f293d92880e38ce0aa25e7c2641e1472cb8ccc7 100644 --- a/src/Document/CRTPSubDocument.cc +++ b/src/Document/CRTPSubDocument.cc @@ -1,5 +1,8 @@ #include "CRTPSubDocument.hh" +#include <QJsonObject> +#include <QJsonDocument> + using namespace Vivy; // AudioSubDocument implementation @@ -55,6 +58,24 @@ AudioSubDocument::initFromPath(const QString &path) qDebug() << "Audio OK for" << path; } +QString +AudioSubDocument::getElementName() const noexcept +{ + return "AudioSubDocument"; +} + +QJsonDocument +AudioSubDocument::getProperties() const noexcept +{ + QJsonDocument ret; + QJsonObject object; + const QJsonDocument contextDocument = contextPtr->getProperties(); + object.insert("File path", filePath); + object.insert("Audio context", contextDocument.object()); + ret.setObject(object); + return ret; +} + // VideoSubDocument implementation // Init a video sub-document from a file diff --git a/src/Document/CRTPSubDocument.hh b/src/Document/CRTPSubDocument.hh index 29b1c620eceb0e0c442b238a2d43ac37dd67cd13..8189e7b251d6d9c2724f3b83329a8d1e61b2e9e1 100644 --- a/src/Document/CRTPSubDocument.hh +++ b/src/Document/CRTPSubDocument.hh @@ -77,6 +77,9 @@ public: AudioContext::StreamPtr getDefaultStream() const noexcept; int getStreamCount() const noexcept; AudioContext::StreamPtr getStream(int index) const noexcept; + + QString getElementName() const noexcept; + QJsonDocument getProperties() const noexcept; }; // Video document diff --git a/src/UI/MainWindow.cc b/src/UI/MainWindow.cc index 5e870b9cfd5de51fce3d66b39533eb4926d0df89..f1ba85a1648b31a6541112a6a82da7d9c24e5ad7 100644 --- a/src/UI/MainWindow.cc +++ b/src/UI/MainWindow.cc @@ -1,11 +1,14 @@ #include "MainWindow.hh" #include "DialogHelp.hh" +#include "PropertyView.hh" #include "VivyDocumentView.hh" #include "../Lib/Utils.hh" #include "../VivyApplication.hh" #include <functional> +#include <QWindow> #include <optional> +#include <QTreeView> #include <QFileInfo> #include <QStandardPaths> #include <QPixmap> @@ -125,9 +128,40 @@ MainWindow::MainWindow(QWidget *parent) noexcept void MainWindow::openProperties(int index) noexcept { - if (index < 0) + if (index < 0) { + // TODO: May may want to do something when the user is clicking where + // no tab bar is openned (like open document?) return; + } + qDebug().nospace() << "Tab n°" << index << " was double clicked"; + VivyDocumentView *current = getTab(index); + if (auto document = current->getDocument().lock()) { + // FIXME: For now only display the audio document + if (auto audioDocuement = document->getAudioSubDocument()) { + QWidget *propertyWindow = new QWidget(this); + QVBoxLayout *layout = new QVBoxLayout(propertyWindow); + QTreeView *view = new QTreeView(); + const QJsonDocument doc = audioDocuement->getProperties(); + PropertyModel *model = new PropertyModel(&doc, view); + + view->setModel(model); + layout->addWidget(view); + propertyWindow->setWindowFlags(Qt::Window | Qt::Popup); + propertyWindow->setLayout(layout); + + propertyWindow->show(); + + // Wait until the window is closed + QEventLoop loop; + connect(propertyWindow, SIGNAL(destroyed()), &loop, SLOT(quit())); + loop.exec(); + } + } + + else { + qCritical().nospace() << "The document from the tab n°" << index << " was already deleted"; + } } std::weak_ptr<VivyDocument> diff --git a/src/UI/PropertyView.cc b/src/UI/PropertyView.cc index 43f42f9c622e447009df42b3ac2e3e135bd91753..ee01924632db446e93bd5899725b82ba741ef129 100644 --- a/src/UI/PropertyView.cc +++ b/src/UI/PropertyView.cc @@ -122,13 +122,13 @@ PropertyModel::PropertyModel(QObject *parent) noexcept headers.append("value"); } -PropertyModel::PropertyModel(const QJsonDocument *json, QObject *parent) noexcept +PropertyModel::PropertyModel(const QJsonDocument *properties, QObject *parent) noexcept : QAbstractItemModel(parent) { headers.append("key"); headers.append("value"); try { - loadJson(json); + loadJson(properties); } catch (const std::runtime_error &e) { qCritical() << "Failed to create the property model object:" << e.what(); }