Skip to content
Snippets Groups Projects
Commit ebdb7a2d authored by Matthias's avatar Matthias
Browse files

fix "crash on save project"

The crash fix is to always create a new project (done in method ProjectManager::newProject())

Furthermore NewProjectDialog distinguishes now between "create" and "save", since  otherwise it would look ugly on the UI. Imagine these steps:

Open BA, edit something, click "create new project". Now first a dialog for saving is shown, then a dialog for creating. Without the done changes, two dialogs with title "Create project" would show up.
parent 8746dce8
No related branches found
No related tags found
No related merge requests found
......@@ -20,7 +20,7 @@
#include <QPushButton>
#include <QVBoxLayout>
NewProjectDialog::NewProjectDialog(QWidget* parent, const QString& workingDirectory,
NewProjectDialog::NewProjectDialog(QWidget* parent, Mode mode, const QString& workingDirectory,
const QString& projectName)
: QDialog(parent)
, m_projectNameEdit(0)
......@@ -34,7 +34,7 @@ NewProjectDialog::NewProjectDialog(QWidget* parent, const QString& workingDirect
{
setMinimumSize(480, 280);
setWindowTitle("New project");
setWindowTitle(mode == CREATE ? "New project" : "Save project");
QLabel* nameLabel = new QLabel("Project name:");
m_projectNameEdit = new QLineEdit;
......@@ -43,7 +43,7 @@ NewProjectDialog::NewProjectDialog(QWidget* parent, const QString& workingDirect
SLOT(checkIfProjectNameIsValid(QString)));
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->setText(QDir::homePath());
connect(m_workDirEdit, SIGNAL(textEdited(QString)), this,
......@@ -55,7 +55,7 @@ NewProjectDialog::NewProjectDialog(QWidget* parent, const QString& workingDirect
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()));
m_createButton->setDefault(true);
m_cancelButton = new QPushButton("Cancel");
......
......@@ -24,7 +24,9 @@ class QLabel;
class NewProjectDialog : public QDialog {
Q_OBJECT
public:
NewProjectDialog(QWidget* parent = 0, const QString& workingDirectory = "",
enum Mode { CREATE, SAVE };
NewProjectDialog(QWidget* parent, Mode mode, const QString& workingDirectory = "",
const QString& projectName = "");
QString getWorkingDirectory() const;
......
......@@ -175,12 +175,11 @@ void ProjectManager::newProject() {
if (!closeCurrentProject())
return;
QString projectFileName = acquireProjectFileName();
createNewProject();
if (!projectFileName.isEmpty()) {
createNewProject();
QString projectFileName = acquireProjectFileName(false);
if (!projectFileName.isEmpty())
saveProject(projectFileName);
}
}
//! Processes close current project request. Call save/discard/cancel dialog, if necessary.
......@@ -228,7 +227,7 @@ bool ProjectManager::saveProject(QString projectFileName) {
if (m_project_document->hasValidNameAndPath())
projectFileName = m_project_document->projectFileName();
else
projectFileName = acquireProjectFileName();
projectFileName = acquireProjectFileName(true);
}
if (projectFileName.isEmpty())
......@@ -255,7 +254,7 @@ bool ProjectManager::saveProject(QString projectFileName) {
//! Processes 'save project as' request.
bool ProjectManager::saveProjectAs() {
QString projectFileName = acquireProjectFileName();
QString projectFileName = acquireProjectFileName(true);
if (projectFileName.isEmpty())
return false;
......@@ -334,10 +333,12 @@ void ProjectManager::loadProject(const QString& projectFileName) {
QApplication::restoreOverrideCursor();
}
//! Returns project file name from dialog.
//! Returns project file name from dialog. Returns empty string if dialog was canceled.
QString ProjectManager::acquireProjectFileName() {
NewProjectDialog dialog(m_mainWindow, workingDirectory(), untitledProjectName());
QString ProjectManager::acquireProjectFileName(bool forSaveAs) {
NewProjectDialog dialog(m_mainWindow,
forSaveAs ? NewProjectDialog::SAVE : NewProjectDialog::CREATE,
workingDirectory(), untitledProjectName());
if (dialog.exec() != QDialog::Accepted)
return "";
......
......@@ -61,7 +61,7 @@ private:
void createNewProject();
void deleteCurrentProject();
void loadProject(const QString& projectFileName);
QString acquireProjectFileName();
QString acquireProjectFileName(bool forSaveAs);
void addToRecentProjects();
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