diff --git a/src/lib/Project.cpp b/src/lib/Project.cpp index 7d64f09f..2f30deca 100644 --- a/src/lib/Project.cpp +++ b/src/lib/Project.cpp @@ -14,7 +14,6 @@ std::shared_ptr Project::create(StorageAccessProxy* storageAccessProxy) { std::shared_ptr ptr(new Project(storageAccessProxy)); - ptr->clearStorage(); return ptr; } @@ -27,7 +26,7 @@ bool Project::loadProjectSettings(const FilePath& projectSettingsFile) bool success = ProjectSettings::getInstance()->load(projectSettingsFile); if (success) { - m_projectSettingsFilepath = projectSettingsFile; + setProjectSettingsFilePath(projectSettingsFile); //m_fileManager.reset(); updateFileManager(); @@ -39,7 +38,7 @@ bool Project::saveProjectSettings(const FilePath& projectSettingsFile) { if (!projectSettingsFile.empty()) { - m_projectSettingsFilepath = projectSettingsFile; + setProjectSettingsFilePath(projectSettingsFile); } if (m_projectSettingsFilepath.empty()) @@ -56,7 +55,7 @@ bool Project::saveProjectSettings(const FilePath& projectSettingsFile) void Project::clearProjectSettings() { - m_projectSettingsFilepath = FilePath(); + setProjectSettingsFilePath(FilePath()); ProjectSettings::getInstance()->clear(); //m_fileManager.reset(); @@ -71,12 +70,6 @@ void Project::reloadProjectSettings() } } -void Project::clearStorage() -{ - m_storage = std::make_shared(); - m_storageAccessProxy->setSubject(m_storage.get()); -} - void Project::parseCode() { if (m_projectSettingsFilepath.empty()) @@ -124,6 +117,21 @@ void Project::logStats() const m_storage->logStats(); } +void Project::setProjectSettingsFilePath(const FilePath& path) +{ + if (path.empty()) + { + m_storage.reset(); + } + else if (m_projectSettingsFilepath != path) + { + m_storage = std::make_shared(FilePath(path).replaceExtension("sqlite")); + } + + m_storageAccessProxy->setSubject(m_storage.get()); + m_projectSettingsFilepath = path; +} + void Project::updateFileManager() { std::shared_ptr projSettings = ProjectSettings::getInstance(); diff --git a/src/lib/Project.h b/src/lib/Project.h index 725190cb..88e48574 100644 --- a/src/lib/Project.h +++ b/src/lib/Project.h @@ -19,10 +19,10 @@ public: bool loadProjectSettings(const FilePath& projectSettingsFile); bool saveProjectSettings(const FilePath& projectSettingsFile); + void clearProjectSettings(); void reloadProjectSettings(); - void clearStorage(); void parseCode(); void logStats() const; @@ -32,6 +32,7 @@ private: Project(const Project&); Project operator=(const Project&); + void setProjectSettingsFilePath(const FilePath& path); void updateFileManager(); Parser::Arguments getParserArguments() const; diff --git a/src/lib/component/controller/GraphController.cpp b/src/lib/component/controller/GraphController.cpp index c967b5ca..d7723103 100644 --- a/src/lib/component/controller/GraphController.cpp +++ b/src/lib/component/controller/GraphController.cpp @@ -47,11 +47,6 @@ void GraphController::handleMessage(MessageActivateTokens* message) buildGraph(message); } -void GraphController::handleMessage(MessageFinishedParsing* message) -{ - getView()->clear(); -} - void GraphController::handleMessage(MessageFlushUpdates* message) { buildGraph(message); diff --git a/src/lib/component/controller/GraphController.h b/src/lib/component/controller/GraphController.h index 00ac58f6..1824c491 100644 --- a/src/lib/component/controller/GraphController.h +++ b/src/lib/component/controller/GraphController.h @@ -5,7 +5,6 @@ #include "utility/messaging/MessageListener.h" #include "utility/messaging/type/MessageActivateTokens.h" -#include "utility/messaging/type/MessageFinishedParsing.h" #include "utility/messaging/type/MessageFlushUpdates.h" #include "utility/messaging/type/MessageFocusIn.h" #include "utility/messaging/type/MessageFocusOut.h" @@ -28,7 +27,6 @@ class StorageAccess; class GraphController : public Controller , public MessageListener - , public MessageListener , public MessageListener , public MessageListener , public MessageListener @@ -42,7 +40,6 @@ public: private: virtual void handleMessage(MessageActivateTokens* message); - virtual void handleMessage(MessageFinishedParsing* message); virtual void handleMessage(MessageFlushUpdates* message); virtual void handleMessage(MessageFocusIn* message); virtual void handleMessage(MessageFocusOut* message); diff --git a/src/lib/component/controller/SearchController.cpp b/src/lib/component/controller/SearchController.cpp index 59ee2a8e..d111e2d1 100644 --- a/src/lib/component/controller/SearchController.cpp +++ b/src/lib/component/controller/SearchController.cpp @@ -55,11 +55,6 @@ void SearchController::handleMessage(MessageFind* message) getView()->setFocus(); } -void SearchController::handleMessage(MessageFinishedParsing* message) -{ - getView()->setMatches(std::vector()); -} - void SearchController::handleMessage(MessageSearch* message) { getView()->setMatches(message->getMatches()); diff --git a/src/lib/component/controller/SearchController.h b/src/lib/component/controller/SearchController.h index 454c30d2..dde7ab87 100644 --- a/src/lib/component/controller/SearchController.h +++ b/src/lib/component/controller/SearchController.h @@ -9,7 +9,6 @@ #include "utility/messaging/type/MessageActivateFile.h" #include "utility/messaging/type/MessageActivateNodes.h" #include "utility/messaging/type/MessageFind.h" -#include "utility/messaging/type/MessageFinishedParsing.h" #include "utility/messaging/type/MessageSearch.h" #include "utility/messaging/type/MessageSearchAutocomplete.h" @@ -22,7 +21,6 @@ class SearchController , public MessageListener , public MessageListener , public MessageListener - , public MessageListener , public MessageListener , public MessageListener { @@ -35,7 +33,6 @@ private: virtual void handleMessage(MessageActivateFile* message); virtual void handleMessage(MessageActivateNodes* message); virtual void handleMessage(MessageFind* message); - virtual void handleMessage(MessageFinishedParsing* message); virtual void handleMessage(MessageSearch* message); virtual void handleMessage(MessageSearchAutocomplete* message); diff --git a/src/lib/data/SqliteStorage.cpp b/src/lib/data/SqliteStorage.cpp index 5236ea5c..19b4daff 100644 --- a/src/lib/data/SqliteStorage.cpp +++ b/src/lib/data/SqliteStorage.cpp @@ -7,7 +7,7 @@ SqliteStorage::SqliteStorage(const std::string& dbFilePath) { m_database.open(dbFilePath.c_str()); - clear(); + setup(); } SqliteStorage::~SqliteStorage() @@ -15,12 +15,16 @@ SqliteStorage::~SqliteStorage() m_database.close(); } +void SqliteStorage::setup() +{ + m_database.execDML("PRAGMA foreign_keys=ON;"); + setupTables(); +} + void SqliteStorage::clear() { m_database.execDML("PRAGMA foreign_keys=OFF;"); clearTables(); - m_database.execDML("PRAGMA foreign_keys=ON;"); - setupTables(); } void SqliteStorage::beginTransaction() diff --git a/src/lib/data/SqliteStorage.h b/src/lib/data/SqliteStorage.h index f0d3a421..ae370202 100644 --- a/src/lib/data/SqliteStorage.h +++ b/src/lib/data/SqliteStorage.h @@ -20,6 +20,7 @@ public: SqliteStorage(const std::string& dbFilePath); ~SqliteStorage(); + void setup(); void clear(); void beginTransaction(); diff --git a/src/lib/data/Storage.cpp b/src/lib/data/Storage.cpp index 36770e92..598cfe38 100644 --- a/src/lib/data/Storage.cpp +++ b/src/lib/data/Storage.cpp @@ -21,8 +21,8 @@ #include "data/type/DataType.h" #include "settings/ApplicationSettings.h" -Storage::Storage() - : m_sqliteStorage("data/test.sqlite") +Storage::Storage(const FilePath& dbPath) + : m_sqliteStorage(dbPath.str()) { } diff --git a/src/lib/data/Storage.h b/src/lib/data/Storage.h index 2cac3787..1ada2f90 100644 --- a/src/lib/data/Storage.h +++ b/src/lib/data/Storage.h @@ -19,7 +19,7 @@ class Storage , public StorageAccess { public: - Storage(); + Storage(const FilePath& dbPath); virtual ~Storage(); void clear(); diff --git a/src/lib/utility/file/FilePath.cpp b/src/lib/utility/file/FilePath.cpp index 23230a3b..a393826c 100644 --- a/src/lib/utility/file/FilePath.cpp +++ b/src/lib/utility/file/FilePath.cpp @@ -135,6 +135,11 @@ FilePath FilePath::withoutExtension() const return FilePath(boost::filesystem::path(m_path).replace_extension()); } +FilePath FilePath::replaceExtension(const std::string& extension) +{ + return FilePath(boost::filesystem::path(m_path).replace_extension(extension)); +} + bool FilePath::hasExtension(const std::vector& extensions) const { std::string e = extension(); diff --git a/src/lib/utility/file/FilePath.h b/src/lib/utility/file/FilePath.h index 5c0e8c06..c44985b0 100644 --- a/src/lib/utility/file/FilePath.h +++ b/src/lib/utility/file/FilePath.h @@ -32,6 +32,7 @@ public: std::string extension() const; FilePath withoutExtension() const; + FilePath replaceExtension(const std::string& extension); bool hasExtension(const std::vector& extensions) const; bool operator==(const FilePath& other) const;