qelectrotech-source-mirror/newelementwizard.cpp
xavierqet 5210bd7a1d Classe CustomElementEditor renommee en QETElementEditor.
Classe EditorScene renommee en ElementScene.
Ajout de la classe ElementView.
Ajout de la classe ElementItemeditor, classe parente des widgets d'edition.
Modification des classes relatives a l'editeur afin que toutes aient acces a l'editeur, a la scene et au QUndoStack. Tous les widgets d'edition heritent donc de ElementItemEditor.
Ajout des methodes abstraites property() et setproperty() dans la classe CustomElementPart et de leur implementation dans les classes qui en derivent.
Sont desormais annulables les modifications : de style, sur les arcs, sur les bornes, sur les ellipses, sur les cercles, sur les champs de texte, sur les textes et sur les lignes.


git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@104 bfdf4180-ca20-0410-9c96-a3a8aa849046
2007-08-25 03:43:05 +00:00

320 lines
9.2 KiB
C++

#include "newelementwizard.h"
#include "elementscategorieswidget.h"
#include "elementscategorieslist.h"
#include "nameslistwidget.h"
#include "orientationsetwidget.h"
#include "hotspoteditor.h"
#include "element.h"
#include "qetelementeditor.h"
/**
Constructeur
@param parent QWidget parent de ce dialogue
@param f flags pour le dialogue
*/
NewElementWizard::NewElementWizard(QWidget *parent, Qt::WindowFlags f) : QDialog(parent, f) {
setFixedSize(480, 280);
QVBoxLayout *dialog_layout = new QVBoxLayout();
setLayout(dialog_layout);
// 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;
}
/**
Destructeur
*/
NewElementWizard::~NewElementWizard() {
}
/**
Passe a l'etape precedente
*/
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();
qle_filename -> setFocus();
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);
}
}
/**
Passe a l'etape suivante
*/
void NewElementWizard::next() {
switch(current_state) {
case Category:
if (!validStep1()) return;
current_state = Filename;
step1 -> hide();
step2 -> show();
qle_filename -> setFocus();
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;
createNewElement();
}
}
/**
Met en place l'etape 1 : Categorie
*/
void NewElementWizard::buildStep1() {
step1 = new QWidget(this);
QVBoxLayout *step1_layout = new QVBoxLayout();
QLabel *explication = new QLabel(tr("\311tape 1/5 : S\351lectionnez une cat\351gorie dans laquelle enregistrer le nouvel \351l\351ment."));
explication -> setAlignment(Qt::AlignJustify | Qt::AlignVCenter);
explication -> setWordWrap(true);
step1_layout -> addWidget(explication);
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();
QLabel *explication1 = new QLabel(tr("\311tape 2/5 : Indiquez le nom du fichier dans lequel enregistrer le nouvel \351l\351ment."));
explication1 -> setAlignment(Qt::AlignJustify | Qt::AlignVCenter);
explication1 -> setWordWrap(true);
QLabel *explication2 = new QLabel(tr("Vous n'\352tes pas oblig\351 de pr\351ciser l'extension *.elmt. Elle sera ajout\351e automatiquement."));
explication2 -> setAlignment(Qt::AlignJustify | Qt::AlignVCenter);
explication2 -> setWordWrap(true);
step2_layout -> addWidget(explication1);
qle_filename = new QLineEdit(tr("nouvel_element"));
qle_filename -> selectAll();
step2_layout -> addWidget(qle_filename);
step2_layout -> addWidget(explication2);
step2_layout -> addSpacing(100);
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();
QLabel *explication = new QLabel(tr("\311tape 3/5 : Indiquez le ou les noms de l'\351l\351ment."));
explication -> setAlignment(Qt::AlignJustify | Qt::AlignVCenter);
explication -> setWordWrap(true);
step3_layout -> addWidget(explication);
element_names = new NamesListWidget();
NamesList hash_name;
hash_name.addName(QLocale::system().name().left(2), tr("Nom du nouvel \351l\351ment"));
element_names -> setNames(hash_name);
step3_layout -> addWidget(element_names);
step3 -> setLayout(step3_layout);
}
/**
Met en place l'etape 4 : Dimensions et Hotspot
*/
void NewElementWizard::buildStep4() {
step4 = new QWidget(this);
QVBoxLayout *step4_layout = new QVBoxLayout(step4);
QLabel *explication = new QLabel(tr("\311tape 4/5 : Saisissez les dimensions du nouvel \351l\351ment ainsi que la position du hotspot (point de saisie de l'\351l\351ment \340 la souris) en consid\351rant que l'\351l\351ment est dans son orientation par d\351faut."));
explication -> setAlignment(Qt::AlignJustify | Qt::AlignVCenter);
explication -> setWordWrap(true);
step4_layout -> addWidget(explication);
hotspot_editor = new HotspotEditor();
step4_layout -> addWidget(hotspot_editor, 0);
step4_layout -> setSpacing(0);
}
/**
Met en place l'etape 5 : orientations possibles pour le nouvel element
*/
void NewElementWizard::buildStep5() {
step5 = new QWidget(this);
QLabel *explication = new QLabel(tr("\311tape 5/5 : Indiquez les orientations possibles pour le nouvel \351l\351ment."));
explication -> setAlignment(Qt::AlignJustify | Qt::AlignVCenter);
explication -> setWordWrap(true);
orientation_set = new OrientationSetWidget();
QVBoxLayout *step5_layout = new QVBoxLayout();
step5_layout -> addWidget(explication);
step5_layout -> addWidget(orientation_set);
step5_layout -> addSpacing(25);
step5 -> setLayout(step5_layout);
}
/**
Valide l'etape 1
@return true si l'etape est validee, false sinon
*/
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);
}
/**
Valide l'etape 2
@return true si l'etape est validee, false sinon
*/
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);
}
if (!file_name.endsWith(".elmt")) file_name += ".elmt";
// 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);
}
chosen_file = dir_path + "/" + file_name;
return(true);
}
/**
Valide l'etape 3
@return true si l'etape est validee, false sinon
*/
bool NewElementWizard::validStep3() {
// il doit y avoir au moins un nom
return(element_names -> checkOneName());
}
/**
Valide l'etape 4
@return true si l'etape est validee, false sinon
*/
bool NewElementWizard::validStep4() {
// l'editeur de hotspot se charge deja de valider tout ca
return(true);
}
/**
Valide l'etape 5
Cette fonction s'assure qu'il y ait toujours exactement une orientation
"par defaut"
@return true si l'etape est validee, false sinon
*/
bool NewElementWizard::validStep5() {
// l'editeur d'orientations se charge deja de valider tout ca
return(true);
}
/**
Cree le nouvel element
*/
void NewElementWizard::createNewElement() {
QETElementEditor *edit_new_element = new QETElementEditor(parentWidget());
edit_new_element -> setSize(hotspot_editor -> elementSize());
edit_new_element -> setHotspot(hotspot_editor -> hotspot());
edit_new_element -> setNames(element_names -> names());
edit_new_element -> setOrientations(orientation_set -> orientationSet());
edit_new_element -> setFileName(chosen_file);
edit_new_element -> show();
accept();
}