diff --git a/src/Document/VivyDocumentStore.cc b/src/Document/VivyDocumentStore.cc index d7f6946c4cdabfb3e9c2ea668618570944548bc2..9cdbcaa8dc9be54d3a1efee5fe0fd23a009bcd42 100644 --- a/src/Document/VivyDocumentStore.cc +++ b/src/Document/VivyDocumentStore.cc @@ -31,19 +31,11 @@ VivyDocumentStore::isDocumentPresent(const QString &name) noexcept } -#define NEW_DOCUMENT_BASENAME "Untitled " std::weak_ptr<VivyDocument> -VivyDocumentStore::newDocument(QString &name) +VivyDocumentStore::newDocument() { - uint docNumber{1}; - QString newDocName; + QString newDocName = newDocumentBaseName + QString::number(newDocumentNumber++); - do { - newDocName = NEW_DOCUMENT_BASENAME + QString::number(docNumber); - docNumber++; - } while (documents.contains(newDocName)); - - name = newDocName; if (auto ret = std::make_shared<VivyDocument>(newDocName)) { qDebug() << "Create new document " << newDocName; documents[newDocName] = ret; diff --git a/src/Document/VivyDocumentStore.hh b/src/Document/VivyDocumentStore.hh index e4495ab65dca3902921957314213926bf8217bb0..3781f7ed609dc644e73bfffa483cb6177138379d 100644 --- a/src/Document/VivyDocumentStore.hh +++ b/src/Document/VivyDocumentStore.hh @@ -20,7 +20,7 @@ public: /* Create/load documents */ std::weak_ptr<VivyDocument> loadDocument(const QString &file); - std::weak_ptr<VivyDocument> newDocument(QString &name); + std::weak_ptr<VivyDocument> newDocument(); /* Get to see if a document is already present or not */ [[nodiscard("handle-it")]] bool isDocumentPresent(const QString &name) noexcept; @@ -34,6 +34,8 @@ public: private: QMap<QString, std::shared_ptr<VivyDocument>> documents; + uint newDocumentNumber{1}; + static inline const QString newDocumentBaseName = "Untitled "; }; #endif // VIVY_DOCUMENTSTORE_H diff --git a/src/MainWindow.cc b/src/MainWindow.cc index 85c062f6500615c5d17a7b1ed13806e7aed0873d..de27dce688bdf104fdc2b69da7c0bea4e15911a1 100644 --- a/src/MainWindow.cc +++ b/src/MainWindow.cc @@ -89,16 +89,17 @@ MainWindow::closeDocument(int index) noexcept void MainWindow::newDocument() noexcept { - QString baseName; - std::weak_ptr<VivyDocument> document = vivyApp->documentStore.newDocument(baseName); + std::weak_ptr<VivyDocument> document = vivyApp->documentStore.newDocument(); try { VivyDocumentView *documentView = new VivyDocumentView(document); - qDebug() << "View constructed successfully"; documents->addTab(documentView, document.lock()->getName()); + qDebug() << "View constructed successfully"; } catch (const std::runtime_error &e) { - qCritical() << "Failed to create the document view for the new document " << baseName; - throw; + qCritical() << "Failed to create a new empty document"; + if (auto locked = document.lock()) { + vivyApp->documentStore.closeDocument(locked->getName()); + } } } @@ -128,7 +129,7 @@ MainWindow::openDocument() noexcept 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 std::runtime_error("failed to create a document view"); + vivyApp->documentStore.closeDocument(baseName); } }