git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@77 bfdf4180-ca20-0410-9c96-a3a8aa849046

This commit is contained in:
xavierqet
2007-04-04 02:13:14 +00:00
parent 1ddd93826c
commit b0ff172ee7
11 changed files with 410 additions and 8 deletions

View File

@@ -2,6 +2,7 @@
#include "conducer.h" #include "conducer.h"
#include "conducersegment.h" #include "conducersegment.h"
#include "element.h" #include "element.h"
#define PR(x) qDebug() << #x " = " << x;
bool Conducer::pen_and_brush_initialized = false; bool Conducer::pen_and_brush_initialized = false;
QPen Conducer::conducer_pen = QPen(); QPen Conducer::conducer_pen = QPen();

View File

@@ -423,6 +423,9 @@ void DiagramView::dialogPrint() {
qprin.setOutputFormat(QPrinter::PdfFormat); qprin.setOutputFormat(QPrinter::PdfFormat);
qprin.setOrientation(QPrinter::Landscape); qprin.setOrientation(QPrinter::Landscape);
qprin.setPageSize(QPrinter::A4); qprin.setPageSize(QPrinter::A4);
#ifdef Q_WS_X11
// qprin.setPrintProgram("lpr");
#endif
QPrintDialog qpd(&qprin, this); QPrintDialog qpd(&qprin, this);
if (qpd.exec() == QDialog::Accepted) { if (qpd.exec() == QDialog::Accepted) {

136
elementscategorieslist.cpp Normal file
View File

@@ -0,0 +1,136 @@
#include <QtXml>
#include "elementscategorieslist.h"
#include "qetapp.h"
/**
Constructeur
@param parent QWidget parent de ce widget
*/
ElementsCategoriesList::ElementsCategoriesList(QWidget *parent) : QTreeWidget(parent) {
// selection unique
setSelectionMode(QAbstractItemView::SingleSelection);
setColumnCount(1);
header() -> hide();
// charge les categories
reload();
}
/**
Destructeur
*/
ElementsCategoriesList::~ElementsCategoriesList() {
}
/**
Recharge l'arbre des categories
*/
void ElementsCategoriesList::reload() {
// vide l'arbre
while (takeTopLevelItem(0));
// chargement des elements de la collection utilisateur
addDir(invisibleRootItem(), QETApp::customElementsDir(), tr("Collection utilisateur"));
}
/**
Methode privee permettant d'ajouter un dossier au panel d'appareils
@param qtwi_parent QTreeWidgetItem parent sous lequel sera insere l'element
@param dossier Chemin absolu du dossier a inserer
@param nom Parametre facultatif permettant de forcer le nom du dossier.
S'il n'est pas precise, la fonction ouvre le fichier qet_directory situe
dans le dossier et y lit le nom du dossier ; si ce fichier n'existe pas ou
est invalide, la fonction utilise le nom du dossier.
*/
void ElementsCategoriesList::addDir(QTreeWidgetItem *qtwi_parent, QString adr_dossier, QString nom) {
QDir dossier(adr_dossier);
if (!dossier.exists()) return;
adr_dossier = dossier.canonicalPath() + "/";
// recupere le nom de la categorie
QString nom_categorie = (nom != QString()) ? nom : categoryName(dossier);
// creation du QTreeWidgetItem representant le dossier
QTreeWidgetItem *qtwi_dossier = new QTreeWidgetItem(qtwi_parent, QStringList(nom_categorie));
qtwi_dossier -> setData(0, Qt::UserRole, dossier.absolutePath());
qtwi_dossier -> setExpanded(true);
// ajout des sous-categories / sous-dossiers
QStringList dossiers = dossier.entryList(QStringList(), QDir::AllDirs | QDir::NoSymLinks | QDir::NoDotAndDotDot, QDir::Name);
foreach(QString dossier, dossiers) addDir(qtwi_dossier, adr_dossier + dossier);
}
/**
Methode permettant d'obtenir le nom affichable d'une categorie etant donne
son chemin (dossier).
@param directory le chemin du dossier representant la categorie
@return Le nom affichable de la categorie
*/
QString ElementsCategoriesList::categoryName(QDir &directory) {
// en cas d'echec de la lecture du fichier de configuration
// "qet_directory", le nom du dossier est retourne
QString category_name = directory.dirName();
// repere le chemin du fichier de configuration de la categorie
QFile directory_conf(directory.canonicalPath() + "/qet_directory");
// verifie l'existence du fichier
if (directory_conf.exists()) {
// ouvre le fichier
if (directory_conf.open(QIODevice::ReadOnly | QIODevice::Text)) {
// recupere les deux premiers caracteres de la locale en cours du systeme
QString system_language = QLocale::system().name().left(2);
// lit le contenu du fichier dans un QDomDocument XML
QDomDocument document;
if (document.setContent(&directory_conf)) {
/* parcourt le document XML a la recherche d'un nom
par ordre de preference, on prendra :
- le nom dans la langue du systeme
- le nom en anglais
- le nom du dossier
*/
QDomElement root = document.documentElement();
if (root.tagName() == "qet-directory") {
bool name_found = false;
// parcourt les "names"
for (QDomNode node = root.firstChild() ; !node.isNull() ; node = node.nextSibling()) {
QDomElement names = node.toElement();
if (names.isNull() || names.tagName() != "names") continue;
// parcourt les "name"
for (QDomNode n = names.firstChild() ; !n.isNull() ; n = n.nextSibling()) {
QDomElement name = n.toElement();
if (name.isNull() || name.tagName() != "name") continue;
if (name.attribute("lang") == system_language) {
category_name = name.text();
name_found = true;
break;
} else if (name.attribute("lang") == "en") {
category_name = name.text();
}
}
if (name_found) break;
}
}
}
directory_conf.close();
}
}
return(category_name);
}
/**
@return Le dossier de la categorie selectionnee
*/
QString ElementsCategoriesList::selectedCategoryPath() {
QTreeWidgetItem *qtwi = currentItem();
if (qtwi) return(qtwi -> data(0, Qt::UserRole).toString());
else return(NULL);
}
/**
@return Le nom de la categorie selectionnee
*/
QString ElementsCategoriesList::selectedCategoryName() {
QTreeWidgetItem *qtwi = currentItem();
if (qtwi) return(qtwi -> data(0, Qt::DisplayRole).toString());
else return(NULL);
}

30
elementscategorieslist.h Normal file
View File

@@ -0,0 +1,30 @@
#ifndef ELEMENTS_CATEGORIES_LIST_H
#define ELEMENTS_CATEGORIES_LIST_H
#include <QtGui>
/**
Cette classe fournit une liste graphique des categories d'elements de
l'utilisateur.
*/
class ElementsCategoriesList : public QTreeWidget {
Q_OBJECT
// Constructeur, destructeur
public:
ElementsCategoriesList(QWidget * = 0);
~ElementsCategoriesList();
// attributs
// methodes
private:
void addDir(QTreeWidgetItem *, QString, QString = QString());
QString categoryName(QDir &);
public:
QString selectedCategoryPath();
QString selectedCategoryName();
public slots:
void reload();
};
#endif

View File

@@ -0,0 +1,41 @@
#include "elementscategorieswidget.h"
#include "elementscategorieslist.h"
ElementsCategoriesWidget::ElementsCategoriesWidget() {
// initialise la liste des categories
elementscategorieslist = new ElementsCategoriesList(this);
// initialise la barre d'outils
toolbar = new QToolBar(this);
toolbar -> setMovable(false);
toolbar -> addAction(QIcon(":/ico/reload.png"), tr("Recharger les cat\351gories"), elementscategorieslist, SLOT(reload()) );
toolbar -> addAction(QIcon(":/ico/new.png"), tr("Nouvelle cat\351gorie"), this, SLOT(newCategory()) );
toolbar -> addAction(QIcon(":/ico/open.png"), tr("\311diter la cat\351gorie"), this, SLOT(editCategory()) );
toolbar -> addAction(QIcon(":/ico/editdelete.png"), tr("Supprimer la cat\351gorie"), this, SLOT(removeCategory()));
// disposition verticale
QVBoxLayout *vlayout = new QVBoxLayout(this);
vlayout -> setMargin(0);
vlayout -> setSpacing(0);
vlayout -> addWidget(toolbar);
vlayout -> addWidget(elementscategorieslist);
vlayout -> setStretchFactor(elementscategorieslist, 75000);
setLayout(vlayout);
}
ElementsCategoriesWidget::~ElementsCategoriesWidget() {
}
void ElementsCategoriesWidget::newCategory() {
}
void ElementsCategoriesWidget::editCategory() {
}
void ElementsCategoriesWidget::removeCategory() {
qDebug() << elementscategorieslist -> selectedCategoryName();
qDebug() << elementscategorieslist -> selectedCategoryPath();
}

View File

@@ -0,0 +1,30 @@
#ifndef ELEMENTS_CATEGORIES_WIDGET_H
#define ELEMENTS_CATEGORIES_WIDGET_H
#include <QtGui>
/**
Cette classe represente un widget integrant la liste des categories
de l'utilisteur surplombee de boutons permettant d'ajouter
*/
class ElementsCategoriesList;
class ElementsCategoriesWidget : public QWidget {
Q_OBJECT
// Constructeur, destructeur
public:
ElementsCategoriesWidget();
~ElementsCategoriesWidget();
// attributs
private:
ElementsCategoriesList *elementscategorieslist;
QToolBar *toolbar;
// methodes
public:
inline ElementsCategoriesList &elementsCategoriesList() const { return(*elementscategorieslist); }
public slots:
void newCategory();
void editCategory();
void removeCategory();
};
#endif

View File

@@ -1,4 +1,5 @@
#include "elementspanelwidget.h" #include "elementspanelwidget.h"
#include "newelementwizard.h"
ElementsPanelWidget::ElementsPanelWidget(QWidget *parent) : QWidget(parent) { ElementsPanelWidget::ElementsPanelWidget(QWidget *parent) : QWidget(parent) {
// initalise le panel d'elements // initalise le panel d'elements
@@ -8,6 +9,7 @@ ElementsPanelWidget::ElementsPanelWidget(QWidget *parent) : QWidget(parent) {
toolbar = new QToolBar(this); toolbar = new QToolBar(this);
toolbar -> setMovable(false); toolbar -> setMovable(false);
toolbar -> addAction(QIcon(":/ico/reload.png"), tr("Recharger les collections"), elements_panel, SLOT(reload())); toolbar -> addAction(QIcon(":/ico/reload.png"), tr("Recharger les collections"), elements_panel, SLOT(reload()));
toolbar -> addAction(QIcon(":/ico/new.png"), tr("Nouvel \351l\351ment"), this, SLOT(newElement()));
// disposition verticale // disposition verticale
QVBoxLayout *vlayout = new QVBoxLayout(this); QVBoxLayout *vlayout = new QVBoxLayout(this);
@@ -18,3 +20,8 @@ ElementsPanelWidget::ElementsPanelWidget(QWidget *parent) : QWidget(parent) {
vlayout -> setStretchFactor(elements_panel, 75000); vlayout -> setStretchFactor(elements_panel, 75000);
setLayout(vlayout); setLayout(vlayout);
} }
void ElementsPanelWidget::newElement() {
NewElementWizard *new_element_wizard = new NewElementWizard();
new_element_wizard -> exec();
}

View File

@@ -17,5 +17,8 @@
// methodes // methodes
public: public:
inline ElementsPanel &elementsPanel() const { return(*elements_panel); } inline ElementsPanel &elementsPanel() const { return(*elements_panel); }
public slots:
void newElement();
}; };
#endif #endif

103
newelementwizard.cpp Normal file
View File

@@ -0,0 +1,103 @@
#include "newelementwizard.h"
#include "elementscategorieswidget.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);
sb_largeur = new QSpinBox();
sb_largeur -> setMinimum(1);
sb_hauteur = new QSpinBox();
sb_hauteur -> setMinimum(1);
QGridLayout *grid_layout = new QGridLayout();
grid_layout -> addWidget(new QLabel(tr("Largeur :")), 0, 0);
grid_layout -> addWidget(sb_largeur, 0, 1);
grid_layout -> addWidget(new QLabel(tr("\327 10 px")), 0, 2);
grid_layout -> addWidget(new QLabel(tr("Hauteur :")), 1, 0);
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 : enregistrement
etape2 = new QWidget(this);
QVBoxLayout *etape2_layout = new QVBoxLayout();
etape2_layout -> addWidget(new QLabel(tr("Entrez un nom et une cat\351gorie dans laquelle enregistrer le nouvel \351l\351ment.")));
qle_nom_element = new QLineEdit();
etape2_layout -> addWidget(qle_nom_element);
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;
}
NewElementWizard::~NewElementWizard() {
}
void NewElementWizard::previous() {
switch(current_state) {
case Dimensions:
return;
case Enregistrement:
current_state = Dimensions;
etape1 -> show();
etape2 -> hide();
button_next -> setText(tr("Suivant"));
button_previous -> setEnabled(false);
}
}
void NewElementWizard::next() {
switch(current_state) {
case Dimensions:
current_state = Enregistrement;
etape1 -> hide();
etape2 -> show();
button_next -> setText(tr("Valider"));
button_previous -> setEnabled(true);
break;
case Enregistrement:
valid();
}
}
void NewElementWizard::valid() {
return;
switch(current_state) {
case Dimensions:
case Enregistrement:
current_state = Dimensions;
button_next -> setText(tr("Suivant"));
}
}

40
newelementwizard.h Normal file
View File

@@ -0,0 +1,40 @@
/**
Cette classe represente un dialogue qui permet a l'utilisateur de specifier
les premiers parametres de l'element qu'il va construire.
Ces parametres sont :
- la largeur
- la hauteur
- et euh... pleins de choses interessantes
*/
#include <QtGui>
class ElementsCategoriesWidget;
class NewElementWizard : public QDialog {
Q_OBJECT
// Constructeur, destructeur
public:
NewElementWizard(QWidget * = 0, Qt::WindowFlags = 0);
~NewElementWizard();
// attributs
private:
enum WizardState { Dimensions, Enregistrement };
QSpinBox *sb_largeur;
QSpinBox *sb_hauteur;
QWidget *etape1;
QWidget *etape2;
QLineEdit *qle_nom_element;
QPushButton *button_previous;
QPushButton *button_next;
ElementsCategoriesWidget* categories_list;
WizardState current_state;
// methodes
public:
// slots
public slots:
void previous();
void next();
void valid();
};

View File

@@ -1,5 +1,5 @@
###################################################################### ######################################################################
# Automatically generated by qmake (2.01a) sam. oct. 28 15:30:56 2006 # Automatically generated by qmake (2.01a) mer. avr. 4 03:03:56 2007
###################################################################### ######################################################################
TEMPLATE = app TEMPLATE = app
@@ -11,35 +11,43 @@ INCLUDEPATH += .
HEADERS += aboutqet.h \ HEADERS += aboutqet.h \
borderinset.h \ borderinset.h \
conducer.h \ conducer.h \
conducersegment.h \
customelement.h \ customelement.h \
diagram.h \ diagram.h \
diagramview.h \ diagramview.h \
element.h \ element.h \
elementscategorieslist.h \
elementscategorieswidget.h \
elementspanel.h \ elementspanel.h \
elementspanelwidget.h \
elementtextitem.h \
exportdialog.h \ exportdialog.h \
fixedelement.h \ fixedelement.h \
newelementwizard.h \
qetapp.h \ qetapp.h \
terminal.h \ terminal.h \
conducersegment.h \ ui_export_fichier.h
elementtextitem.h \
elementspanelwidget.h
SOURCES += aboutqet.cpp \ SOURCES += aboutqet.cpp \
borderinset.cpp \ borderinset.cpp \
conducer.cpp \ conducer.cpp \
conducersegment.cpp \
customelement.cpp \ customelement.cpp \
diagram.cpp \ diagram.cpp \
diagramview.cpp \ diagramview.cpp \
element.cpp \ element.cpp \
elementscategorieslist.cpp \
elementscategorieswidget.cpp \
elementspanel.cpp \ elementspanel.cpp \
elementspanelwidget.cpp \
elementtextitem.cpp \
exportdialog.cpp \ exportdialog.cpp \
fixedelement.cpp \ fixedelement.cpp \
main.cpp \ main.cpp \
newelementwizard.cpp \
qetapp.cpp \ qetapp.cpp \
terminal.cpp \ terminal.cpp
conducersegment.cpp \
elementtextitem.cpp \
elementspanelwidget.cpp
RESOURCES += qelectrotech.qrc RESOURCES += qelectrotech.qrc
TRANSLATIONS += lang/qet_en.ts lang/qt_fr.ts TRANSLATIONS += lang/qet_en.ts lang/qt_fr.ts
CONFIG += debug warn_on
QT += xml QT += xml