mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2025-12-19 06:20:53 +01:00
git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@77 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
#include "conducer.h"
|
||||
#include "conducersegment.h"
|
||||
#include "element.h"
|
||||
#define PR(x) qDebug() << #x " = " << x;
|
||||
|
||||
bool Conducer::pen_and_brush_initialized = false;
|
||||
QPen Conducer::conducer_pen = QPen();
|
||||
|
||||
@@ -423,6 +423,9 @@ void DiagramView::dialogPrint() {
|
||||
qprin.setOutputFormat(QPrinter::PdfFormat);
|
||||
qprin.setOrientation(QPrinter::Landscape);
|
||||
qprin.setPageSize(QPrinter::A4);
|
||||
#ifdef Q_WS_X11
|
||||
// qprin.setPrintProgram("lpr");
|
||||
#endif
|
||||
QPrintDialog qpd(&qprin, this);
|
||||
|
||||
if (qpd.exec() == QDialog::Accepted) {
|
||||
|
||||
136
elementscategorieslist.cpp
Normal file
136
elementscategorieslist.cpp
Normal 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
30
elementscategorieslist.h
Normal 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
|
||||
41
elementscategorieswidget.cpp
Normal file
41
elementscategorieswidget.cpp
Normal 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();
|
||||
}
|
||||
30
elementscategorieswidget.h
Normal file
30
elementscategorieswidget.h
Normal 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
|
||||
@@ -1,4 +1,5 @@
|
||||
#include "elementspanelwidget.h"
|
||||
#include "newelementwizard.h"
|
||||
|
||||
ElementsPanelWidget::ElementsPanelWidget(QWidget *parent) : QWidget(parent) {
|
||||
// initalise le panel d'elements
|
||||
@@ -8,6 +9,7 @@ ElementsPanelWidget::ElementsPanelWidget(QWidget *parent) : QWidget(parent) {
|
||||
toolbar = new QToolBar(this);
|
||||
toolbar -> setMovable(false);
|
||||
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
|
||||
QVBoxLayout *vlayout = new QVBoxLayout(this);
|
||||
@@ -18,3 +20,8 @@ ElementsPanelWidget::ElementsPanelWidget(QWidget *parent) : QWidget(parent) {
|
||||
vlayout -> setStretchFactor(elements_panel, 75000);
|
||||
setLayout(vlayout);
|
||||
}
|
||||
|
||||
void ElementsPanelWidget::newElement() {
|
||||
NewElementWizard *new_element_wizard = new NewElementWizard();
|
||||
new_element_wizard -> exec();
|
||||
}
|
||||
|
||||
@@ -17,5 +17,8 @@
|
||||
// methodes
|
||||
public:
|
||||
inline ElementsPanel &elementsPanel() const { return(*elements_panel); }
|
||||
|
||||
public slots:
|
||||
void newElement();
|
||||
};
|
||||
#endif
|
||||
|
||||
103
newelementwizard.cpp
Normal file
103
newelementwizard.cpp
Normal 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
40
newelementwizard.h
Normal 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();
|
||||
};
|
||||
@@ -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
|
||||
@@ -11,35 +11,43 @@ INCLUDEPATH += .
|
||||
HEADERS += aboutqet.h \
|
||||
borderinset.h \
|
||||
conducer.h \
|
||||
conducersegment.h \
|
||||
customelement.h \
|
||||
diagram.h \
|
||||
diagramview.h \
|
||||
element.h \
|
||||
elementscategorieslist.h \
|
||||
elementscategorieswidget.h \
|
||||
elementspanel.h \
|
||||
elementspanelwidget.h \
|
||||
elementtextitem.h \
|
||||
exportdialog.h \
|
||||
fixedelement.h \
|
||||
newelementwizard.h \
|
||||
qetapp.h \
|
||||
terminal.h \
|
||||
conducersegment.h \
|
||||
elementtextitem.h \
|
||||
elementspanelwidget.h
|
||||
ui_export_fichier.h
|
||||
SOURCES += aboutqet.cpp \
|
||||
borderinset.cpp \
|
||||
conducer.cpp \
|
||||
conducersegment.cpp \
|
||||
customelement.cpp \
|
||||
diagram.cpp \
|
||||
diagramview.cpp \
|
||||
element.cpp \
|
||||
elementscategorieslist.cpp \
|
||||
elementscategorieswidget.cpp \
|
||||
elementspanel.cpp \
|
||||
elementspanelwidget.cpp \
|
||||
elementtextitem.cpp \
|
||||
exportdialog.cpp \
|
||||
fixedelement.cpp \
|
||||
main.cpp \
|
||||
newelementwizard.cpp \
|
||||
qetapp.cpp \
|
||||
terminal.cpp \
|
||||
conducersegment.cpp \
|
||||
elementtextitem.cpp \
|
||||
elementspanelwidget.cpp
|
||||
terminal.cpp
|
||||
RESOURCES += qelectrotech.qrc
|
||||
TRANSLATIONS += lang/qet_en.ts lang/qt_fr.ts
|
||||
CONFIG += debug warn_on
|
||||
QT += xml
|
||||
|
||||
|
||||
Reference in New Issue
Block a user