diff --git a/newelementwizard.cpp b/newelementwizard.cpp index d0fb0dd3c..9c643ed7f 100644 --- a/newelementwizard.cpp +++ b/newelementwizard.cpp @@ -1,12 +1,155 @@ #include "newelementwizard.h" #include "elementscategorieswidget.h" +#include "elementscategorieslist.h" NewElementWizard::NewElementWizard(QWidget *parent, Qt::WindowFlags f) : QDialog(parent, f) { QVBoxLayout *dialog_layout = new QVBoxLayout(); setLayout(dialog_layout); - // 1ere etape : dimensions - etape1 = new QWidget(this); + // chaines de caracteres utilisees sur les boutons + str_next = QString(tr("Suivant")); + str_previous = QString(tr("Pr\351c\351dent")); + str_finish = QString(tr("Valider")); + + buildStep1(); + buildStep2(); + buildStep3(); + buildStep4(); + buildStep5(); + + // dialogue itself + setWindowTitle(tr("Cr\351er un nouvel \351l\351ment : Assistant")); + + dialog_layout -> addWidget(step1); + dialog_layout -> addWidget(step2); + dialog_layout -> addWidget(step3); + dialog_layout -> addWidget(step4); + dialog_layout -> addWidget(step5); + step2 -> hide(); + step3 -> hide(); + step4 -> hide(); + step5 -> hide(); + + // boutons + QDialogButtonBox *boutons = new QDialogButtonBox(QDialogButtonBox::Cancel); + button_previous = new QPushButton(str_previous, this); + button_previous -> setEnabled(false); + button_next = new QPushButton(str_next, this); + boutons -> addButton(button_previous, QDialogButtonBox::ActionRole); + boutons -> addButton(button_next, QDialogButtonBox::ActionRole); + connect(button_previous, SIGNAL(released()), this, SLOT(previous())); + connect(button_next, SIGNAL(released()), this, SLOT(next())); + connect(boutons, SIGNAL(rejected()), this, SLOT(accept())); + dialog_layout -> addWidget(boutons); + current_state = Category; + +} + +NewElementWizard::~NewElementWizard() { +} + +void NewElementWizard::previous() { + switch(current_state) { + case Category: + return; + case Filename: + current_state = Category; + step1 -> show(); + step2 -> hide(); + button_previous -> setEnabled(false); + break; + case Names: + current_state = Filename; + step2 -> show(); + step3 -> hide(); + break; + case Dimensions: + current_state = Names; + step3 -> show(); + step4 -> hide(); + button_next -> setText(str_next); + break; + case Orientations: + current_state = Dimensions; + step4 -> show(); + step5 -> hide(); + button_next -> setText(str_next); + } +} + +void NewElementWizard::next() { + switch(current_state) { + case Category: + if (!validStep1()) return; + current_state = Filename; + step1 -> hide(); + step2 -> show(); + button_previous -> setEnabled(true); + break; + case Filename: + if (!validStep2()) return; + current_state = Names; + step2 -> hide(); + step3 -> show(); + break; + case Names: + if (!validStep3()) return; + current_state = Dimensions; + step3 -> hide(); + step4 -> show(); + break; + case Dimensions: + if (!validStep4()) return; + current_state = Orientations; + step4 -> hide(); + step5 -> show(); + button_next -> setText(str_finish); + button_previous -> setEnabled(true); + break; + case Orientations: + if (!validStep5()) return; + } +} + +/** + Met en place l'etape 1 : Categorie +*/ +void NewElementWizard::buildStep1() { + step1 = new QWidget(this); + QVBoxLayout *step1_layout = new QVBoxLayout(); + step1_layout -> addWidget(new QLabel(tr("\311tape 1/5 : S\351lectionnez une cat\351gorie dans laquelle enregistrer le nouvel \351l\351ment."))); + categories_list = new ElementsCategoriesWidget(); + step1_layout -> addWidget(categories_list); + step1 -> setLayout(step1_layout); +} + +/** + Met en place l'etape 2 : Nom du fichier +*/ +void NewElementWizard::buildStep2() { + step2 = new QWidget(this); + QVBoxLayout *step2_layout = new QVBoxLayout(); + step2_layout -> addWidget(new QLabel(tr("\311tape 2/5 : Indiquez le nom du fichier dans lequel enregistrer le nouvel \351l\351ment."))); + step2_layout -> addWidget(qle_filename = new QLineEdit()); + step2 -> setLayout(step2_layout); +} + +/** + Met en place l'etape 3 : Noms de l'element +*/ +void NewElementWizard::buildStep3() { + step3 = new QWidget(this); + QVBoxLayout *step3_layout = new QVBoxLayout(); + step3_layout -> addWidget(new QLabel(tr("\311tape 3/5 : Indiquez le ou les noms de l'\351l\351ment."))); + /// @todo + step3 -> setLayout(step3_layout); +} + +/** + Met en place l'etape 4 : Dimensions et Hotspot +*/ +void NewElementWizard::buildStep4() { + step4 = new QWidget(this); sb_largeur = new QSpinBox(); sb_largeur -> setMinimum(1); sb_hauteur = new QSpinBox(); @@ -20,79 +163,74 @@ NewElementWizard::NewElementWizard(QWidget *parent, Qt::WindowFlags f) : QDialog grid_layout -> addWidget(sb_hauteur, 1, 1); grid_layout -> addWidget(new QLabel(tr("\327 10 px")), 1, 2); - QVBoxLayout *etape1_layout = new QVBoxLayout(); - etape1_layout -> addWidget(new QLabel(tr("Saisissez la largeur et la hauteur du nouvel \351l\351ment"))); - etape1_layout -> addLayout(grid_layout); - etape1 -> setLayout(etape1_layout); - - // 2eme etape : Categorie - etape2 = new QWidget(this); - QVBoxLayout *etape2_layout = new QVBoxLayout(); - etape2_layout -> addWidget(new QLabel(tr("S\351lectionnez une cat\351gorie dans laquelle enregistrer le nouvel \351l\351ment."))); - categories_list = new ElementsCategoriesWidget(); - etape2_layout -> addWidget(categories_list); - etape2 -> setLayout(etape2_layout); - - - // dialogue itself - setWindowTitle(tr("Cr\351er un nouvel \351l\351ment : Assistant")); - - dialog_layout -> addWidget(etape1); - dialog_layout -> addWidget(etape2); - etape2 -> hide(); - - // boutons - QDialogButtonBox *boutons = new QDialogButtonBox(QDialogButtonBox::Cancel); - button_previous = new QPushButton(tr("Pr\351c\351dent"), this); - button_previous -> setEnabled(false); - button_next = new QPushButton(tr("Suivant"), this); - boutons -> addButton(button_previous, QDialogButtonBox::ActionRole); - boutons -> addButton(button_next, QDialogButtonBox::ActionRole); - connect(button_previous, SIGNAL(released()), this, SLOT(previous())); - connect(button_next, SIGNAL(released()), this, SLOT(next())); - connect(boutons, SIGNAL(rejected()), this, SLOT(accept())); - dialog_layout -> addWidget(boutons); - current_state = Dimensions; - + QVBoxLayout *step4_layout = new QVBoxLayout(); + step4_layout -> addWidget(new QLabel(tr("\311tape 4/5 : Saisissez la largeur et la hauteur du nouvel \351l\351ment"))); + step4_layout -> addLayout(grid_layout); + step4 -> setLayout(step4_layout); } -NewElementWizard::~NewElementWizard() { +/** + Met en place l'etape 5 : orientations possibles pour le nouvel element +*/ +void NewElementWizard::buildStep5() { + step5 = new QWidget(this); + QVBoxLayout *step5_layout = new QVBoxLayout(); + step5_layout -> addWidget(new QLabel(tr("\311tape 5/5 : Indiquez les orientations possibles pour le nouvel \351l\351ment."))); + /// @todo + step5 -> setLayout(step5_layout); } -void NewElementWizard::previous() { - switch(current_state) { - case Dimensions: - return; - case Category: - current_state = Dimensions; - etape1 -> show(); - etape2 -> hide(); - button_next -> setText(tr("Suivant")); - button_previous -> setEnabled(false); +bool NewElementWizard::validStep1() { + // il doit y avoir une categorie selectionnee + bool step1_ok = categories_list -> elementsCategoriesList().selectedCategoryPath() != QString(); + if (!step1_ok) { + QMessageBox::critical( + this, + tr("Erreur"), + tr("Vous devez s\351lectionner une cat\351gorie.") + ); } + return(step1_ok); } -void NewElementWizard::next() { - switch(current_state) { - case Dimensions: - current_state = Category; - etape1 -> hide(); - etape2 -> show(); - button_next -> setText(tr("Valider")); - button_previous -> setEnabled(true); - break; - case Category: - valid(); +bool NewElementWizard::validStep2() { + QString dir_path = categories_list -> elementsCategoriesList().selectedCategoryPath(); + QString file_name = qle_filename -> text(); + + // un nom doit avoir ete entre + if (file_name == QString()) { + QMessageBox::critical( + this, + tr("Erreur"), + tr("Vous devez entrer un nom de fichier") + ); + return(false); } + + // le fichier existe peut etre deja + if (QFileInfo(dir_path + "/" + file_name).exists()) { + QMessageBox::StandardButton answer = QMessageBox::question( + this, + "\311craser le fichier ?", + "Le fichier existe d\351j\340. Souhaitez-vous l'\351craser ?", + QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel, + QMessageBox::No + ); + return(answer == QMessageBox::Yes); + } + + return(true); } -void NewElementWizard::valid() { - return; - switch(current_state) { - case Dimensions: - - case Category: - current_state = Dimensions; - button_next -> setText(tr("Suivant")); - } +bool NewElementWizard::validStep3() { + return(true); } + +bool NewElementWizard::validStep4() { + return(true); +} + +bool NewElementWizard::validStep5() { + return(true); +} + diff --git a/newelementwizard.h b/newelementwizard.h index 7a2c12197..aeee5614a 100644 --- a/newelementwizard.h +++ b/newelementwizard.h @@ -19,23 +19,33 @@ class NewElementWizard : public QDialog { // attributs private: - enum WizardState { Dimensions, Category }; + enum WizardState { Category, Filename, Names, Dimensions, Orientations }; + QString str_next, str_previous, str_finish; + QWidget *step1, *step2, *step3, *step4, *step5; + ElementsCategoriesWidget* categories_list; + QLineEdit *qle_filename; QSpinBox *sb_largeur; QSpinBox *sb_hauteur; - QWidget *etape1; - QWidget *etape2; + QPushButton *button_previous; QPushButton *button_next; - ElementsCategoriesWidget* categories_list; WizardState current_state; // methodes - public: + private: + void buildStep1(); + void buildStep2(); + void buildStep3(); + void buildStep4(); + void buildStep5(); + bool validStep1(); + bool validStep2(); + bool validStep3(); + bool validStep4(); + bool validStep5(); - // slots public slots: void previous(); void next(); - void valid(); }; #endif