[qet] [4483] NewElementWizard class : remove the use of ElementsCategoriesWidget and ElementsCategory |
[ Thread Index |
Date Index
| More lists.tuxfamily.org/qet Archives
]
Revision: 4483
Author: blacksun
Date: 2016-05-14 19:10:03 +0200 (Sat, 14 May 2016)
Log Message:
-----------
NewElementWizard class : remove the use of ElementsCategoriesWidget and ElementsCategory
Modified Paths:
--------------
trunk/sources/ElementsCollection/elementscollectionwidget.cpp
trunk/sources/elementspanelwidget.cpp
trunk/sources/newelementwizard.cpp
trunk/sources/newelementwizard.h
trunk/sources/qet.cpp
trunk/sources/qet.h
Modified: trunk/sources/ElementsCollection/elementscollectionwidget.cpp
===================================================================
--- trunk/sources/ElementsCollection/elementscollectionwidget.cpp 2016-05-14 14:48:55 UTC (rev 4482)
+++ trunk/sources/ElementsCollection/elementscollectionwidget.cpp 2016-05-14 17:10:03 UTC (rev 4483)
@@ -378,7 +378,6 @@
if (!selected_category) return;
NewElementWizard elmt_wizard(this);
- elmt_wizard.preselectCategory(selected_category);
elmt_wizard.exec();
}
Modified: trunk/sources/elementspanelwidget.cpp
===================================================================
--- trunk/sources/elementspanelwidget.cpp 2016-05-14 14:48:55 UTC (rev 4482)
+++ trunk/sources/elementspanelwidget.cpp 2016-05-14 17:10:03 UTC (rev 4483)
@@ -376,13 +376,8 @@
/**
Appelle l'assistant de creation de nouvel element
*/
-void ElementsPanelWidget::newElement() {
- ElementsCategory *selected_category = writableSelectedCategory();
-
+void ElementsPanelWidget::newElement() {
NewElementWizard new_element_wizard(this);
- if (selected_category) {
- new_element_wizard.preselectCategory(selected_category);
- }
new_element_wizard.exec();
}
Modified: trunk/sources/newelementwizard.cpp
===================================================================
--- trunk/sources/newelementwizard.cpp 2016-05-14 14:48:55 UTC (rev 4482)
+++ trunk/sources/newelementwizard.cpp 2016-05-14 17:10:03 UTC (rev 4483)
@@ -16,17 +16,12 @@
along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
*/
#include "newelementwizard.h"
-#include "elementscategory.h"
-#include "elementscategorieswidget.h"
-#include "elementscategorieslist.h"
#include "nameslistwidget.h"
-#include "qetgraphicsitem/element.h"
#include "qetelementeditor.h"
-#include "qet.h"
-#include "qetapp.h"
-#include "elementscollectionitem.h"
#include "qfilenameedit.h"
#include "qetmessagebox.h"
+#include "elementscollectionmodel.h"
+#include "elementcollectionitem.h"
/**
Constructeur
@@ -34,8 +29,7 @@
@param f flags pour le dialogue
*/
NewElementWizard::NewElementWizard(QWidget *parent, Qt::WindowFlags f) :
- QWizard(parent, f),
- chosen_category(0)
+ QWizard(parent, f)
{
setOptions(options() & ~QWizard::NoCancelButton);
@@ -61,53 +55,32 @@
}
/**
- @return la categorie parente selectionnee, ou 0 si celle-ci n'a pas encore
- ete choisie.
-*/
-ElementsCategory *NewElementWizard::selectedCategory() const {
- return(chosen_category);
-}
-
-/**
- @param category Categorie d'elements dans laquelle le nouvel element sera
- place
- @return true si ce choix est possible et a ete pris en compte, false sinon
-*/
-bool NewElementWizard::preselectCategory(ElementsCategory *category) {
- // verifie si la categorie est utilisable
- if (!category || !category -> exists() || !category -> isWritable()) {
- return(false);
- }
-
- // selectionne la categorie ainsi demandee dans la liste
- if (categories_list -> elementsCategoriesList().selectLocation(category -> location())) {
- chosen_category = category;
- return(true);
- }
-
- return(false);
-}
-
-/**
- Met en place l'etape 1 : Categorie
-*/
+ * @brief NewElementWizard::buildStep1
+ * @return
+ */
QWizardPage *NewElementWizard::buildStep1() {
QWizardPage *page = new QWizardPage();
page -> setProperty("WizardState", Category);
page -> setTitle(tr("Étape 1/3 : Catégorie parente", "wizard page title"));
page -> setSubTitle(tr("Sélectionnez une catégorie dans laquelle enregistrer le nouvel élément.", "wizard page subtitle"));
QVBoxLayout *layout = new QVBoxLayout();
+
+ m_tree_view = new QTreeView(this);
+ ElementsCollectionModel *model_ = new ElementsCollectionModel(m_tree_view);
+ model_->addCustomCollection();
+ m_tree_view->setModel(model_);
+ m_tree_view->setHeaderHidden(true);
+ layout->addWidget(m_tree_view);
+
- categories_list = new ElementsCategoriesWidget();
- layout -> addWidget(categories_list);
-
page -> setLayout(layout);
return(page);
}
/**
- Met en place l'etape 2 : Nom du fichier
-*/
+ * @brief NewElementWizard::buildStep2
+ * @return
+ */
QWizardPage *NewElementWizard::buildStep2() {
QWizardPage *page = new QWizardPage();
page -> setProperty("WizardState", Filename);
@@ -115,12 +88,12 @@
page -> setSubTitle(tr("Indiquez le nom du fichier dans lequel enregistrer le nouvel élément.", "wizard page subtitle"));
QVBoxLayout *layout = new QVBoxLayout();
- qle_filename = new QFileNameEdit(tr("nouvel_element"));
- qle_filename -> selectAll();
+ m_qle_filename = new QFileNameEdit(tr("nouvel_element"));
+ m_qle_filename -> selectAll();
QLabel *explication2 = new QLabel(tr("Vous n'êtes pas obligé de préciser l'extension *.elmt. Elle sera ajoutée automatiquement."));
explication2 -> setAlignment(Qt::AlignJustify | Qt::AlignVCenter);
explication2 -> setWordWrap(true);
- layout -> addWidget(qle_filename);
+ layout -> addWidget(m_qle_filename);
layout -> addWidget(explication2);
layout -> addSpacing(100);
@@ -129,8 +102,9 @@
}
/**
- Met en place l'etape 3 : Noms de l'element
-*/
+ * @brief NewElementWizard::buildStep3
+ * @return
+ */
QWizardPage *NewElementWizard::buildStep3() {
QWizardPage *page = new QWizardPage();
page -> setProperty("WizardState", Names);
@@ -138,112 +112,107 @@
page -> setSubTitle(tr("Indiquez le ou les noms de l'élément.", "wizard page subtitle"));
QVBoxLayout *layout = new QVBoxLayout();
- element_names = new NamesListWidget();
+ m_names_list = new NamesListWidget();
NamesList hash_name;
hash_name.addName(QLocale::system().name().left(2), tr("Nom du nouvel élément", "default name when creating a new element"));
- element_names -> setNames(hash_name);
- layout -> addWidget(element_names);
+ m_names_list -> setNames(hash_name);
+ layout -> addWidget(m_names_list);
page -> setLayout(layout);
return(page);
}
-/// @return true si l'etape en cours est validee, false sinon
+/**
+ * @brief NewElementWizard::validateCurrentPage
+ * @return true if the current step is valid
+ */
bool NewElementWizard::validateCurrentPage() {
WizardState wizard_state = static_cast<WizardState>(currentPage() -> property("WizardState").toInt());
if (wizard_state == Category) return(validStep1());
else if (wizard_state == Filename) return(validStep2());
else if (wizard_state == Names) {
// must have one name minimum
- if (element_names -> checkOneName())
+ if (m_names_list -> checkOneName())
createNewElement();
return true;
-
}
else return(true);
}
/**
- Valide l'etape 1
- @return true si l'etape est validee, false sinon
-*/
-bool NewElementWizard::validStep1() {
- // il doit y avoir une categorie selectionnee
+ * @brief NewElementWizard::validStep1
+ * Valid the setp 1
+ * @return trie if the step is valid.
+ */
+bool NewElementWizard::validStep1()
+{
+ //They must be one directory selected
bool step1_ok = false;
- ElementsLocation selected_location = categories_list -> elementsCategoriesList().selectedLocation();
- if (ElementsCollectionItem *collection_item = QETApp::collectionItem(selected_location, false)) {
- if (collection_item -> isCategory()) {
- chosen_category = qobject_cast<ElementsCategory *>(collection_item);
- step1_ok = chosen_category;
+
+ QModelIndex index = m_tree_view->currentIndex();
+ if (index.isValid()) {
+
+ ElementCollectionItem *eci = static_cast<ElementCollectionItem*>(index.internalPointer());
+ if (eci && eci->isDir()) {
+ ElementsLocation loc(eci->collectionPath());
+ if (loc.exist()) {
+ m_chosen_location = loc;
+ step1_ok = true;
+ }
}
}
-
+
if (!step1_ok) {
- QET::QetMessageBox::critical(
- parentWidget(),
- tr("Erreur", "message box title"),
- tr("Vous devez sélectionner une catégorie.", "message box content")
- );
+ QET::QetMessageBox::critical(parentWidget(),
+ tr("Erreur", "message box title"),
+ tr("Vous devez sélectionner une catégorie.", "message box content"));
}
+
return(step1_ok);
}
/**
- Valide l'etape 2
- @return true si l'etape est validee, false sinon
-*/
+ * @brief NewElementWizard::validStep2
+ * Valid the step 2
+ * @return true if step is valid
+ */
bool NewElementWizard::validStep2() {
- // il doit y avoir une categorie selectionnee
- if (!chosen_category) return(false);
- QString file_name = qle_filename -> text();
-
- // un nom doit avoir ete entre
+ QString file_name = m_qle_filename -> text();
+
if (file_name.isEmpty()) {
- QET::QetMessageBox::critical(
- this,
- tr("Erreur", "message box title"),
- tr("Vous devez entrer un nom de fichier", "message box content")
- );
- return(false);
+ QET::QetMessageBox::critical(this,
+ tr("Erreur", "message box title"),
+ tr("Vous devez entrer un nom de fichier", "message box content"));
+ return false;
}
-
- if (!file_name.endsWith(".elmt")) file_name += ".elmt";
-
- // le nom de fichier contient peut etre des caracteres interdits
- if (QET::containsForbiddenCharacters(file_name)) {
- QET::QetMessageBox::critical(
- this,
- tr("Erreur", "message box title"),
- tr("Merci de ne pas utiliser les caractères suivants : \\ / : * ? \" < > |", "message box content")
- );
- return(false);
+
+ if (!file_name.endsWith(".elmt")) {
+ file_name += ".elmt";
}
-
- // le fichier existe peut etre deja
- if (chosen_category -> element(file_name)) {
- QMessageBox::StandardButton answer = QET::QetMessageBox::question(
- this,
- "Écraser le fichier ?",
- "Le fichier existe déjà. Souhaitez-vous l'écraser ?",
- QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel,
- QMessageBox::No
- );
- return(answer == QMessageBox::Yes);
+
+ ElementsLocation loc_ = m_chosen_location;
+ loc_.addToPath(file_name);
+ if (loc_.exist()) {
+ QET::QetMessageBox::critical(this,
+ tr("Erreur", "message box title"),
+ tr("Un élément portant le même nom existe déjà"));
+ return false;
}
-
- chosen_file = file_name;
+
+ m_chosen_file = file_name;
return(true);
}
/**
- Cree le nouvel element
-*/
+ * @brief NewElementWizard::createNewElement
+ * Lauch an element editor for create the new element
+ */
void NewElementWizard::createNewElement() {
QETElementEditor *edit_new_element = new QETElementEditor(parentWidget());
- edit_new_element -> setNames(element_names -> names());
-
- ElementsLocation new_element_location = chosen_category -> location();
- new_element_location.addToPath(chosen_file);
- edit_new_element -> setLocation(new_element_location);
+ edit_new_element -> setNames(m_names_list -> names());
+
+ ElementsLocation loc_ = m_chosen_location;
+ loc_.addToPath(m_chosen_file);
+ edit_new_element -> setLocation(loc_);
edit_new_element -> show();
}
Modified: trunk/sources/newelementwizard.h
===================================================================
--- trunk/sources/newelementwizard.h 2016-05-14 14:48:55 UTC (rev 4482)
+++ trunk/sources/newelementwizard.h 2016-05-14 17:10:03 UTC (rev 4483)
@@ -17,11 +17,14 @@
*/
#ifndef NEW_ELEMENT_WIZARD_H
#define NEW_ELEMENT_WIZARD_H
-#include <QtWidgets>
-class ElementsCategoriesWidget;
-class ElementsCategory;
+
+#include <QWizard>
+#include "elementslocation.h"
+
class NamesListWidget;
class QFileNameEdit;
+class QTreeView;
+
/**
This class provides a wizard dialog enabling users to to specify the basic
parameters of the electrical elements they intend to draw.
@@ -42,20 +45,14 @@
private:
NewElementWizard(const NewElementWizard &);
- // methods
- public:
- ElementsCategory *selectedCategory() const;
- bool preselectCategory(ElementsCategory *);
-
// attributes
private:
enum WizardState { Category, Filename, Names };
- ElementsCategoriesWidget *categories_list;
- QFileNameEdit *qle_filename;
- NamesListWidget *element_names;
- WizardState current_state;
- QString chosen_file;
- ElementsCategory *chosen_category;
+ QFileNameEdit *m_qle_filename;
+ NamesListWidget *m_names_list;
+ QString m_chosen_file;
+ QTreeView *m_tree_view = nullptr;
+ ElementsLocation m_chosen_location;
// methods
private:
Modified: trunk/sources/qet.cpp
===================================================================
--- trunk/sources/qet.cpp 2016-05-14 14:48:55 UTC (rev 4482)
+++ trunk/sources/qet.cpp 2016-05-14 17:10:03 UTC (rev 4483)
@@ -386,38 +386,6 @@
}
/**
- @return une chaine listant les caracteres interdits dans les noms de fichiers sous
- Windows
- @param escape true pour remplacer les caracteres < et > par leurs entites HTML
-*/
-QString QET::forbiddenCharactersString(bool escape) {
- QString result;
- foreach(QChar c, QET::forbiddenCharacters()) {
- if (escape) {
- if (c == '<') result += "<";
- else if (c == '>') result += ">";
- else result += QString(c);
- } else {
- result += QString(c);
- }
- result += " ";
- }
- return(result);
-}
-
-/**
- @param string une chaine de caracteres
- @return true si string contient un caractere interdit dans les noms de
- fichiers sous Windows
-*/
-bool QET::containsForbiddenCharacters(const QString &string) {
- foreach(QChar c, QET::forbiddenCharacters()) {
- if (string.contains(c)) return(true);
- }
- return(false);
-}
-
-/**
Cette fonction transforme une chaine de caracteres (typiquement : un nom de
schema, de projet, d'element) en un nom de fichier potable.
Par nom de fichier potable, on entend un nom :
Modified: trunk/sources/qet.h
===================================================================
--- trunk/sources/qet.h 2016-05-14 14:48:55 UTC (rev 4482)
+++ trunk/sources/qet.h 2016-05-14 17:10:03 UTC (rev 4483)
@@ -148,7 +148,6 @@
QList<QDomElement> findInDomElement(const QDomElement &, const QString &, const QString &);
QList<QChar> forbiddenCharacters();
QString forbiddenCharactersString(bool = false);
- bool containsForbiddenCharacters(const QString &);
QString stringToFileName(const QString &);
QString escapeSpaces(const QString &);
QString unescapeSpaces(const QString &);