Skip to content
Snippets Groups Projects
Unverified Commit 43c9f03c authored by mpuchner's avatar mpuchner Committed by GitHub
Browse files

Merge pull request #1132 from mpuchner/issue-1117-crash-on-save-project

Issue 1117 crash on save project
parents 8746dce8 a5de779f
No related branches found
No related tags found
No related merge requests found
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
#include <QPushButton> #include <QPushButton>
#include <QVBoxLayout> #include <QVBoxLayout>
NewProjectDialog::NewProjectDialog(QWidget* parent, const QString& workingDirectory, NewProjectDialog::NewProjectDialog(QWidget* parent, Mode mode, const QString& workingDirectory,
const QString& projectName) const QString& projectName)
: QDialog(parent) : QDialog(parent)
, m_projectNameEdit(0) , m_projectNameEdit(0)
...@@ -34,7 +34,7 @@ NewProjectDialog::NewProjectDialog(QWidget* parent, const QString& workingDirect ...@@ -34,7 +34,7 @@ NewProjectDialog::NewProjectDialog(QWidget* parent, const QString& workingDirect
{ {
setMinimumSize(480, 280); setMinimumSize(480, 280);
setWindowTitle("New project"); setWindowTitle(mode == CREATE ? "New project" : "Save project");
QLabel* nameLabel = new QLabel("Project name:"); QLabel* nameLabel = new QLabel("Project name:");
m_projectNameEdit = new QLineEdit; m_projectNameEdit = new QLineEdit;
...@@ -43,7 +43,7 @@ NewProjectDialog::NewProjectDialog(QWidget* parent, const QString& workingDirect ...@@ -43,7 +43,7 @@ NewProjectDialog::NewProjectDialog(QWidget* parent, const QString& workingDirect
SLOT(checkIfProjectNameIsValid(QString))); SLOT(checkIfProjectNameIsValid(QString)));
nameLabel->setBuddy(m_projectNameEdit); nameLabel->setBuddy(m_projectNameEdit);
QLabel* parentDirLabel = new QLabel("Create in:"); QLabel* parentDirLabel = new QLabel(mode == CREATE ? "Create in:" : "Save in:");
m_workDirEdit = new QLineEdit; m_workDirEdit = new QLineEdit;
m_workDirEdit->setText(QDir::homePath()); m_workDirEdit->setText(QDir::homePath());
connect(m_workDirEdit, SIGNAL(textEdited(QString)), this, connect(m_workDirEdit, SIGNAL(textEdited(QString)), this,
...@@ -55,7 +55,7 @@ NewProjectDialog::NewProjectDialog(QWidget* parent, const QString& workingDirect ...@@ -55,7 +55,7 @@ NewProjectDialog::NewProjectDialog(QWidget* parent, const QString& workingDirect
m_warningLabel = new QLabel(); m_warningLabel = new QLabel();
m_createButton = new QPushButton("Create"); m_createButton = new QPushButton(mode == CREATE ? "Create" : "Save");
connect(m_createButton, SIGNAL(clicked()), this, SLOT(createProjectDir())); connect(m_createButton, SIGNAL(clicked()), this, SLOT(createProjectDir()));
m_createButton->setDefault(true); m_createButton->setDefault(true);
m_cancelButton = new QPushButton("Cancel"); m_cancelButton = new QPushButton("Cancel");
......
...@@ -24,7 +24,9 @@ class QLabel; ...@@ -24,7 +24,9 @@ class QLabel;
class NewProjectDialog : public QDialog { class NewProjectDialog : public QDialog {
Q_OBJECT Q_OBJECT
public: public:
NewProjectDialog(QWidget* parent = 0, const QString& workingDirectory = "", enum Mode { CREATE, SAVE };
NewProjectDialog(QWidget* parent, Mode mode, const QString& workingDirectory = "",
const QString& projectName = ""); const QString& projectName = "");
QString getWorkingDirectory() const; QString getWorkingDirectory() const;
......
...@@ -175,12 +175,11 @@ void ProjectManager::newProject() { ...@@ -175,12 +175,11 @@ void ProjectManager::newProject() {
if (!closeCurrentProject()) if (!closeCurrentProject())
return; return;
QString projectFileName = acquireProjectFileName(); createNewProject();
if (!projectFileName.isEmpty()) { QString projectFileName = acquireProjectFileName(false);
createNewProject(); if (!projectFileName.isEmpty())
saveProject(projectFileName); saveProject(projectFileName);
}
} }
//! Processes close current project request. Call save/discard/cancel dialog, if necessary. //! Processes close current project request. Call save/discard/cancel dialog, if necessary.
...@@ -228,7 +227,7 @@ bool ProjectManager::saveProject(QString projectFileName) { ...@@ -228,7 +227,7 @@ bool ProjectManager::saveProject(QString projectFileName) {
if (m_project_document->hasValidNameAndPath()) if (m_project_document->hasValidNameAndPath())
projectFileName = m_project_document->projectFileName(); projectFileName = m_project_document->projectFileName();
else else
projectFileName = acquireProjectFileName(); projectFileName = acquireProjectFileName(true);
} }
if (projectFileName.isEmpty()) if (projectFileName.isEmpty())
...@@ -255,7 +254,7 @@ bool ProjectManager::saveProject(QString projectFileName) { ...@@ -255,7 +254,7 @@ bool ProjectManager::saveProject(QString projectFileName) {
//! Processes 'save project as' request. //! Processes 'save project as' request.
bool ProjectManager::saveProjectAs() { bool ProjectManager::saveProjectAs() {
QString projectFileName = acquireProjectFileName(); QString projectFileName = acquireProjectFileName(true);
if (projectFileName.isEmpty()) if (projectFileName.isEmpty())
return false; return false;
...@@ -269,6 +268,8 @@ void ProjectManager::openProject(QString fileName) { ...@@ -269,6 +268,8 @@ void ProjectManager::openProject(QString fileName) {
if (!closeCurrentProject()) if (!closeCurrentProject())
return; return;
createNewProject();
if (fileName.isEmpty()) { if (fileName.isEmpty()) {
fileName = fileName =
QFileDialog::getOpenFileName(m_mainWindow, "Open project file", workingDirectory(), QFileDialog::getOpenFileName(m_mainWindow, "Open project file", workingDirectory(),
...@@ -276,7 +277,7 @@ void ProjectManager::openProject(QString fileName) { ...@@ -276,7 +277,7 @@ void ProjectManager::openProject(QString fileName) {
if (fileName.isEmpty()) if (fileName.isEmpty())
return; return;
} }
createNewProject();
loadProject(fileName); loadProject(fileName);
if (m_project_document->isReady()) { if (m_project_document->isReady()) {
...@@ -334,10 +335,12 @@ void ProjectManager::loadProject(const QString& projectFileName) { ...@@ -334,10 +335,12 @@ void ProjectManager::loadProject(const QString& projectFileName) {
QApplication::restoreOverrideCursor(); QApplication::restoreOverrideCursor();
} }
//! Returns project file name from dialog. //! Returns project file name from dialog. Returns empty string if dialog was canceled.
QString ProjectManager::acquireProjectFileName() { QString ProjectManager::acquireProjectFileName(bool forSaveAs) {
NewProjectDialog dialog(m_mainWindow, workingDirectory(), untitledProjectName()); NewProjectDialog dialog(m_mainWindow,
forSaveAs ? NewProjectDialog::SAVE : NewProjectDialog::CREATE,
workingDirectory(), untitledProjectName());
if (dialog.exec() != QDialog::Accepted) if (dialog.exec() != QDialog::Accepted)
return ""; return "";
......
...@@ -61,7 +61,7 @@ private: ...@@ -61,7 +61,7 @@ private:
void createNewProject(); void createNewProject();
void deleteCurrentProject(); void deleteCurrentProject();
void loadProject(const QString& projectFileName); void loadProject(const QString& projectFileName);
QString acquireProjectFileName(); QString acquireProjectFileName(bool forSaveAs);
void addToRecentProjects(); void addToRecentProjects();
QString workingDirectory(); QString workingDirectory();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment