From f78653813093dae6512992bd480513a099ba55f4 Mon Sep 17 00:00:00 2001 From: Kubat <mael.martin31@gmail.com> Date: Fri, 25 Jun 2021 18:46:51 +0200 Subject: [PATCH] DOCUMENT: The document store should not be in charge of constructing and caching the document views --- src/Document/VivyDocumentStore.cc | 22 --------------------- src/Document/VivyDocumentStore.hh | 4 +--- src/Document/VivyDocumentView.cc | 4 ++-- src/Document/VivyDocumentView.hh | 2 +- src/MainWindow.cc | 32 +++++++++++++------------------ 5 files changed, 17 insertions(+), 47 deletions(-) diff --git a/src/Document/VivyDocumentStore.cc b/src/Document/VivyDocumentStore.cc index badaa983..92342328 100644 --- a/src/Document/VivyDocumentStore.cc +++ b/src/Document/VivyDocumentStore.cc @@ -3,14 +3,6 @@ #include <stdexcept> -VivyDocumentStore::~VivyDocumentStore() noexcept -{ - for (VivyDocumentView *ptr : documentsViews) - delete ptr; - documents.clear(); - documentsViews.clear(); -} - std::weak_ptr<VivyDocument> VivyDocumentStore::loadDocument(const QString &file) { @@ -49,8 +41,6 @@ VivyDocumentStore::closeDocument(const QString &name) noexcept { qDebug() << "Store is closing the document " << name; documents.remove(name); - if (VivyDocumentView *__restrict docView = documentsViews.take(name)) - delete docView; } std::weak_ptr<VivyDocument> @@ -62,15 +52,3 @@ VivyDocumentStore::getDocument(const QString &name) const } return std::weak_ptr<VivyDocument>{documents.value(name)}; } - -VivyDocumentView * -VivyDocumentStore::getDocumentView(const QString &name) const -{ - if (!documents.contains(name)) { - qCritical() << "Can't get a view to a non-existant document " << name; - throw std::runtime_error("Can't find the document view"); - } - VivyDocumentView *ret = new VivyDocumentView(documents.value(name)); - documentsViews[name] = ret; - return ret; -} diff --git a/src/Document/VivyDocumentStore.hh b/src/Document/VivyDocumentStore.hh index de00b9a4..a4965c27 100644 --- a/src/Document/VivyDocumentStore.hh +++ b/src/Document/VivyDocumentStore.hh @@ -11,7 +11,7 @@ class VivyDocumentStore final { public: explicit VivyDocumentStore() noexcept = default; - ~VivyDocumentStore() noexcept; + ~VivyDocumentStore() noexcept = default; /* Don't move this object around */ VivyDocumentStore(const VivyDocumentStore &) = delete; // Copy @@ -32,11 +32,9 @@ public: /* Get stored documents */ std::weak_ptr<VivyDocument> getDocument(const QString &name) const; - [[nodiscard("raw-pointer")]] VivyDocumentView* getDocumentView(const QString &name) const; private: QMap<QString, std::shared_ptr<VivyDocument>> documents; - mutable QMap<QString, VivyDocumentView*> documentsViews; }; #endif // VIVY_DOCUMENTSTORE_H diff --git a/src/Document/VivyDocumentView.cc b/src/Document/VivyDocumentView.cc index e2184531..2a459ab5 100644 --- a/src/Document/VivyDocumentView.cc +++ b/src/Document/VivyDocumentView.cc @@ -4,8 +4,8 @@ #include <QVBoxLayout> -VivyDocumentView::VivyDocumentView(std::weak_ptr<VivyDocument> docWeak) noexcept - : document(docWeak) +VivyDocumentView::VivyDocumentView(std::weak_ptr<VivyDocument> docWeak, QWidget *parent) noexcept + : QWidget(parent), document(docWeak) { if (auto doc = document.lock()) { AudioDocument *const audioDocument = doc->getAudioSubDocument(); diff --git a/src/Document/VivyDocumentView.hh b/src/Document/VivyDocumentView.hh index 27dc2e88..266d6004 100644 --- a/src/Document/VivyDocumentView.hh +++ b/src/Document/VivyDocumentView.hh @@ -14,7 +14,7 @@ class VivyDocumentView final : public QWidget { Q_OBJECT public: - explicit VivyDocumentView(std::weak_ptr<VivyDocument>) noexcept; + explicit VivyDocumentView(std::weak_ptr<VivyDocument>, QWidget *parent = nullptr) noexcept; std::weak_ptr<VivyDocument> getDocument() const noexcept; diff --git a/src/MainWindow.cc b/src/MainWindow.cc index 5c9b4bff..4641010c 100644 --- a/src/MainWindow.cc +++ b/src/MainWindow.cc @@ -59,8 +59,6 @@ MainWindow::closeDocument(int index) noexcept const QWidget *widgetToClose = documents->widget(index); const VivyDocumentView *documentToClose = reinterpret_cast<const VivyDocumentView *>(widgetToClose); - documents->removeTab(index); - if (auto doc = documentToClose->getDocument().lock()) { const QString documentName = doc->getName(); documentStore.closeDocument(documentName); @@ -68,6 +66,8 @@ MainWindow::closeDocument(int index) noexcept } else { qCritical() << "The document at index" << index << "was already deleted from the store"; } + + documents->removeTab(index); } void @@ -79,31 +79,25 @@ MainWindow::openDocument() noexcept return; } + qDebug() << "Trying to open file" << filename; QFileInfo fileInfo(filename); const QString baseName = fileInfo.baseName(); + if (documentStore.isDocumentPresent(baseName)) { qWarning() << "The document" << baseName << "is already loaded"; return; } - qDebug() << "Trying to open file" << filename; - std::weak_ptr<VivyDocument> documentWeak = documentStore.loadDocument(filename); - - if (auto document = documentWeak.lock()) { - qDebug() << "Document" << filename << "was opened successfully, getting its view"; - try { - VivyDocumentView *documentView = documentStore.getDocumentView(document->getName()); - qDebug() << "View constructed successfully"; - documents->addTab(documentView, document->getName()); - } catch (const std::runtime_error &e) { - qCritical() << "Failed to create the document view for" << document->getName(); - throw; - } - } else { - qCritical() << "Failed to load the document" << filename << "!"; - return; - } + std::weak_ptr<VivyDocument> document = documentStore.loadDocument(filename); + try { + VivyDocumentView *documentView = new VivyDocumentView(document); + qDebug() << "View constructed successfully"; + documents->addTab(documentView, document.lock()->getName()); + } catch (const std::runtime_error &e) { + qCritical() << "Failed to create the document view for" << baseName << "with path" << filename; + throw; + } } void -- GitLab