diff --git a/GUI/coregui/mainwindow/projectmanager.cpp b/GUI/coregui/mainwindow/projectmanager.cpp index 791efa118520888a361c7ed629a65f3eed126218..4e1914283bdfa5fe6f7373d0583d1c8dac0274a9 100644 --- a/GUI/coregui/mainwindow/projectmanager.cpp +++ b/GUI/coregui/mainwindow/projectmanager.cpp @@ -56,61 +56,95 @@ ProjectManager::~ProjectManager() delete m_messageService; } -//! Close current project. Call save/discard/cancel dialog, if necessary. -//! Returns false if saving was canceled. +//! Reads settings of ProjectManager from global settings. -bool ProjectManager::closeCurrentProject() +void ProjectManager::readSettings() { - bool projectWasClosed(true); + QSettings settings; + m_workingDirectory = QDir::homePath(); + if (settings.childGroups().contains(S_PROJECTMANAGER)) { + settings.beginGroup(S_PROJECTMANAGER); + m_workingDirectory = settings.value(S_DEFAULTPROJECTPATH).toString(); + m_recentProjects = settings.value(S_RECENTPROJECTS).toStringList(); - if (m_project_document && m_project_document->isModified()) { - QMessageBox msgBox; - msgBox.setText("The project has been modified."); - msgBox.setInformativeText("Do you want to save your changes?"); - msgBox.setStandardButtons(QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel); - msgBox.setDefaultButton(QMessageBox::Save); - int ret = msgBox.exec(); + if(settings.contains(S_LASTUSEDIMPORTDIR)) + m_importDirectory = settings.value(S_LASTUSEDIMPORTDIR, QString()).toString(); - switch (ret) { - case QMessageBox::Save: - if (!saveProject()) - projectWasClosed = false; - break; - case QMessageBox::Discard: - break; - case QMessageBox::Cancel: - projectWasClosed = false; - break; - default: - break; - } + settings.endGroup(); } +} - if (projectWasClosed) - deleteCurrentProject(); +//! Saves settings of ProjectManager in global settings. - return projectWasClosed; +void ProjectManager::writeSettings() +{ + QSettings settings; + settings.beginGroup(S_PROJECTMANAGER); + settings.setValue(S_DEFAULTPROJECTPATH, m_workingDirectory); + settings.setValue(S_RECENTPROJECTS, m_recentProjects); + + if(!m_importDirectory.isEmpty()) + settings.setValue(S_LASTUSEDIMPORTDIR, m_importDirectory); + + settings.endGroup(); } -//! Calls dialog window to define project path and name. +ProjectDocument* ProjectManager::document() +{ + return m_project_document; +} -void ProjectManager::createNewProject() +//! Returns list of recent projects, validates if projects still exists on disk. + +QStringList ProjectManager::recentProjects() { - if (m_project_document) - throw GUIHelpers::Error("ProjectManager::createNewProject() -> Project already exists"); + QStringList updatedList; + foreach (QString fileName, m_recentProjects) { + QFile fin(fileName); + if (fin.exists()) + updatedList.append(fileName); + } + m_recentProjects = updatedList; + return m_recentProjects; +} - m_messageService->clear(); +//! Returns name of the current project directory. - m_project_document = new ProjectDocument(); - connect(m_project_document, SIGNAL(modified()), this, SLOT(onDocumentModified())); - m_project_document->setProjectName("Untitled"); - m_project_document->setApplicationModels(m_mainWindow->models()); - m_project_document->setLogger(m_messageService); +QString ProjectManager::projectDir() const +{ + if (m_project_document && m_project_document->hasValidNameAndPath()) + return m_project_document->projectDir(); - if(m_autosaveService) - m_autosaveService->setDocument(m_project_document); + return QString(); +} + +//! Returns directory name suitable for saving plots. + +QString ProjectManager::userExportDir() const +{ + QString result = projectDir(); + if (result.isEmpty()) + result = QStandardPaths::writableLocation(QStandardPaths::HomeLocation); + + return result; +} + +//! Returns directory name which was used by the user to import files. + +QString ProjectManager::userImportDir() const +{ + return m_importDirectory.isEmpty() ? userExportDir() : m_importDirectory; } +//! Sets user import directory in system settings. + +void ProjectManager::setImportDir(const QString& dirname) +{ + m_importDirectory = dirname; +} + +//! Updates title of main window when the project was modified. + void ProjectManager::onDocumentModified() { qDebug() << "ProjectManager::onDocumentModified()" << m_project_document->isModified(); @@ -121,6 +155,16 @@ void ProjectManager::onDocumentModified() } } +//! Clears list of recent projects. + +void ProjectManager::clearRecentProjects() +{ + m_recentProjects.clear(); + modified(); +} + +//! Processes new project request (close old project, rise dialog for project name, create project). + void ProjectManager::newProject() { if (!closeCurrentProject()) @@ -134,6 +178,43 @@ void ProjectManager::newProject() } } +//! Processes close current project request. Call save/discard/cancel dialog, if necessary. +//! Returns false if saving was canceled. + +bool ProjectManager::closeCurrentProject() +{ + bool projectWasClosed(true); + + if (m_project_document && m_project_document->isModified()) { + QMessageBox msgBox; + msgBox.setText("The project has been modified."); + msgBox.setInformativeText("Do you want to save your changes?"); + msgBox.setStandardButtons(QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel); + msgBox.setDefaultButton(QMessageBox::Save); + int ret = msgBox.exec(); + + switch (ret) { + case QMessageBox::Save: + if (!saveProject()) + projectWasClosed = false; + break; + case QMessageBox::Discard: + break; + case QMessageBox::Cancel: + projectWasClosed = false; + break; + default: + break; + } + } + + if (projectWasClosed) + deleteCurrentProject(); + + return projectWasClosed; +} + +//! Processes save project request. bool ProjectManager::saveProject(QString projectFileName) { @@ -160,6 +241,8 @@ bool ProjectManager::saveProject(QString projectFileName) return true; } +//! Processes 'save project as' request. + bool ProjectManager::saveProjectAs() { QString projectFileName = acquireProjectFileName(); @@ -206,105 +289,58 @@ void ProjectManager::openProject(QString fileName) emit modified(); } -//! Add name of the current project to the name of recent projects - -void ProjectManager::addToRecentProjects() -{ - QString fileName = m_project_document->projectFileName(); - m_recentProjects.removeAll(fileName); - m_recentProjects.prepend(fileName); - while (m_recentProjects.size() > Constants::MAX_RECENT_PROJECTS) - m_recentProjects.removeLast(); -} - -//! Reads settings of ProjectManager from global settings. - -void ProjectManager::readSettings() -{ - QSettings settings; - m_workingDirectory = QDir::homePath(); - if (settings.childGroups().contains(S_PROJECTMANAGER)) { - settings.beginGroup(S_PROJECTMANAGER); - m_workingDirectory = settings.value(S_DEFAULTPROJECTPATH).toString(); - m_recentProjects = settings.value(S_RECENTPROJECTS).toStringList(); - - if(settings.contains(S_LASTUSEDIMPORTDIR)) - m_importDirectory = settings.value(S_LASTUSEDIMPORTDIR, QString()).toString(); - - settings.endGroup(); - } -} - -//! Saves settings of ProjectManager in global settings. +//! Calls dialog window to define project path and name. -void ProjectManager::writeSettings() +void ProjectManager::createNewProject() { - QSettings settings; - settings.beginGroup(S_PROJECTMANAGER); - settings.setValue(S_DEFAULTPROJECTPATH, m_workingDirectory); - settings.setValue(S_RECENTPROJECTS, m_recentProjects); - - if(!m_importDirectory.isEmpty()) - settings.setValue(S_LASTUSEDIMPORTDIR, m_importDirectory); + if (m_project_document) + throw GUIHelpers::Error("ProjectManager::createNewProject() -> Project already exists"); - settings.endGroup(); -} + m_messageService->clear(); -//! Returns list of recent projects, validates if projects still exists on disk. + m_project_document = new ProjectDocument(); + connect(m_project_document, SIGNAL(modified()), this, SLOT(onDocumentModified())); + m_project_document->setProjectName("Untitled"); + m_project_document->setApplicationModels(m_mainWindow->models()); + m_project_document->setLogger(m_messageService); -QStringList ProjectManager::recentProjects() -{ - QStringList updatedList; - foreach (QString fileName, m_recentProjects) { - QFile fin(fileName); - if (fin.exists()) - updatedList.append(fileName); - } - m_recentProjects = updatedList; - return m_recentProjects; + if(m_autosaveService) + m_autosaveService->setDocument(m_project_document); } -//! Returns name of the current project directory. - -QString ProjectManager::projectDir() const +void ProjectManager::deleteCurrentProject() { - if (m_project_document && m_project_document->hasValidNameAndPath()) - return m_project_document->projectDir(); + if(m_autosaveService) + m_autosaveService->removeAutosaveDir(); - return QString(); + delete m_project_document; + m_project_document = 0; + m_mainWindow->models()->resetModels(); } -//! Returns directory name suitable for saving plots. +//! Returns project file name from dialog. -QString ProjectManager::userExportDir() const +QString ProjectManager::acquireProjectFileName() { - QString result = projectDir(); - if (result.isEmpty()) - result = QStandardPaths::writableLocation(QStandardPaths::HomeLocation); - - return result; -} - -//! Returns directory name which was used by the user to import files. + NewProjectDialog dialog(m_mainWindow, workingDirectory(), untitledProjectName()); -QString ProjectManager::userImportDir() const -{ - return m_importDirectory.isEmpty() ? userExportDir() : m_importDirectory; -} + if (dialog.exec() != QDialog::Accepted) + return QString(); -//! Sets user import directory in system settings. + m_workingDirectory = dialog.getWorkingDirectory(); -void ProjectManager::setImportDir(const QString& dirname) -{ - m_importDirectory = dirname; + return dialog.getProjectFileName(); } -//! Clears list of recent projects. +//! Add name of the current project to the name of recent projects -void ProjectManager::clearRecentProjects() +void ProjectManager::addToRecentProjects() { - m_recentProjects.clear(); - modified(); + QString fileName = m_project_document->projectFileName(); + m_recentProjects.removeAll(fileName); + m_recentProjects.prepend(fileName); + while (m_recentProjects.size() > Constants::MAX_RECENT_PROJECTS) + m_recentProjects.removeLast(); } //! Returns default project path. @@ -352,27 +388,3 @@ void ProjectManager::riseProjectLoadWarningDialog() warningDialog->show(); warningDialog->raise(); } - -void ProjectManager::deleteCurrentProject() -{ - if(m_autosaveService) - m_autosaveService->removeAutosaveDir(); - - delete m_project_document; - m_project_document = 0; - m_mainWindow->models()->resetModels(); -} - -//! Returns project file name from dialog. - -QString ProjectManager::acquireProjectFileName() -{ - NewProjectDialog dialog(m_mainWindow, workingDirectory(), untitledProjectName()); - - if (dialog.exec() != QDialog::Accepted) - return QString(); - - m_workingDirectory = dialog.getWorkingDirectory(); - - return dialog.getProjectFileName(); -} diff --git a/GUI/coregui/mainwindow/projectmanager.h b/GUI/coregui/mainwindow/projectmanager.h index 575312cc4d1144a7ccebeae20dcd04febaa6dee3..1336a026cb1d41f5e758235075217f8a2ce8d207 100644 --- a/GUI/coregui/mainwindow/projectmanager.h +++ b/GUI/coregui/mainwindow/projectmanager.h @@ -35,16 +35,12 @@ public: ProjectManager(MainWindow* parent); virtual ~ProjectManager(); - void createNewProject(); - bool closeCurrentProject(); - void readSettings(); void writeSettings(); - QStringList recentProjects(); - - ProjectDocument* document() { return m_project_document; } + ProjectDocument* document(); + QStringList recentProjects(); QString projectDir() const; QString userExportDir() const; QString userImportDir() const; @@ -55,14 +51,18 @@ signals: void projectOpened(); public slots: - void clearRecentProjects(); void onDocumentModified(); + void clearRecentProjects(); + void newProject(); + bool closeCurrentProject(); bool saveProject(QString projectFileName = QString()); bool saveProjectAs(); void openProject(QString fileName = QString()); - void newProject(); private: + void createNewProject(); + void deleteCurrentProject(); + QString acquireProjectFileName(); void addToRecentProjects(); QString workingDirectory(); @@ -71,11 +71,6 @@ private: void riseProjectLoadFailedDialog(); void riseProjectLoadWarningDialog(); - void deleteCurrentProject(); - - QString acquireProjectFileName(); - - MainWindow* m_mainWindow; ProjectDocument* m_project_document;