00001 #include "newprojectwizard.h"
00002 #include "../Data/project.h"
00003 #include "../Data/settings.h"
00004 #include "../IO/projectfile.h"
00005
00006 NewProjectWizard::NewProjectWizard(Settings &set, QWidget *parent) : QDialog(parent)
00007 {
00008 setupUi(this);
00009
00010 createActions();
00011 loadWorkspacePath(set);
00012 }
00013
00014 void NewProjectWizard::loadWorkspacePath(Settings &set)
00015 {
00016 if(!set.workspace().exists())
00017 {
00018 QMessageBox::information(this, tr("Arbeitsbereich festlegen"), tr("Sie haben noch keinen Arbeitsbereich festgelegt!\nOhne diesen können Sie keine Projekte erstellen!\nBitte wählen Sie im folgenden Dialog einen Pfad aus, in dem ihre zukünftigen Projekte gespeichert werden sollen!"));
00019 while(!set.workspace().exists())
00020 {
00021 set.setWorkspace(QDir(set.chooseWorkspacePath()));
00022 }
00023 }
00024 textWorkspace->setText(set.workspace().absolutePath());
00025 }
00026
00027 void NewProjectWizard::createActions()
00028 {
00029 connect(buttonBack, SIGNAL(clicked()), this, SLOT(previous()));
00030 connect(buttonForward, SIGNAL(clicked()), this, SLOT(next()));
00031 connect(buttonCancel, SIGNAL(clicked()), this, SLOT(cancel()));
00032 connect(buttonFinish, SIGNAL(clicked()), this, SLOT(finish()));
00033 connect(stepsList, SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)), this, SLOT(stepChanged(QListWidgetItem*, QListWidgetItem*)));
00034 }
00035
00036 void NewProjectWizard::stepChanged(QListWidgetItem *current, QListWidgetItem *previous)
00037 {
00038 if(current && previous)
00039 {
00040 if(stepsList->row(current) == 0 && stepsList->row(previous) == 1)
00041 {
00042 buttonBack->setEnabled(false);
00043 steps->setCurrentIndex(0);
00044 stepsList->setCurrentRow(0);
00045 }
00046 else if(stepsList->row(current) == 1 && stepsList->row(previous) == 0)
00047 {
00048 validate();
00049 }
00050 }
00051 }
00052
00053 void NewProjectWizard::displayHelp()
00054 {
00055 QMessageBox::information(this, tr("Hilfe"), tr("Irgendwann sollte hier mal eine Hilfe sein"));
00056 }
00057
00058 void NewProjectWizard::previous()
00059 {
00060 if(steps->currentIndex() == 1)
00061 {
00062 buttonBack->setEnabled(false);
00063 steps->setCurrentIndex(0);
00064 }
00065 }
00066
00067 void NewProjectWizard::next()
00068 {
00069 if(steps->currentIndex() == 0)
00070 {
00071 validate();
00072 }
00073 else if(steps->currentIndex() == 1)
00074 {
00075 create();
00076 }
00077 }
00078
00079 void NewProjectWizard::create()
00080 {
00081 createProject();
00082 done(0);
00083 }
00084
00085 bool NewProjectWizard::validate()
00086 {
00087 QFile file;
00088 if(!file.exists(textWorkspace->text() + QDir::separator() + textProjectName->text() + ".cst") && textProjectName->text() != "")
00089 {
00090 textFProjectName->setText(textProjectName->text());
00091 textFProjectDescription->setText(textProjectDescription->text());
00092 textFEmail->setText(textEmail->text());
00093 textFName->setText(textName->text());
00094 textFWorkspace->setText(textWorkspace->text());
00095
00096 buttonBack->setEnabled(true);
00097 buttonForward->setEnabled(false);
00098 steps->setCurrentIndex(1);
00099 stepsList->setCurrentRow(1);
00100 buttonFinish->setFocus();
00101 return true;
00102 }
00103 else
00104 {
00105 QMessageBox::warning(this, tr("Fehler"), tr("Ein Projekt mit dem angegebenen Namen existiert bereits oder eine Ihrer Eingaben ist inkorrekt!"));
00106 stepsList->setCurrentRow(0);
00107 return false;
00108 }
00109 }
00110
00111 void NewProjectWizard::createProject()
00112 {
00113 QDir path(textFWorkspace->text());
00114 Project::setPath(path.absolutePath() + QDir::separator() + textFProjectName->text() + ".cst");
00115 Project::setName(textFProjectName->text());
00116 Project::setDescription(textFProjectDescription->text());
00117 Project::setOwnerName(textFName->text());
00118 Project::setOwnerEmail(textFEmail->text());
00119 Project::setLocked(false);
00120
00121 QDateTime date;
00122 date = date.currentDateTime();
00123 Project::setDateCreation(date);
00124 Project::setDateModified(date);
00125
00126 emit createdProject();
00127 }
00128
00129 void NewProjectWizard::cancel()
00130 {
00131 done(1);
00132 }
00133
00134 void NewProjectWizard::finish()
00135 {
00136 if(validate())
00137 {
00138 create();
00139 }
00140 }