Compare commits

..

1 Commits
0.11 ... 0.1

Author SHA1 Message Date
xavierqet
4d5a4fdf4f Tag de la version 0.1 finale
git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/tags/0.1@313 bfdf4180-ca20-0410-9c96-a3a8aa849046
2008-03-08 15:43:41 +00:00
180 changed files with 2594 additions and 8251 deletions

6
CREDIT
View File

@@ -7,11 +7,8 @@ project ( http://www.kde.org/ ).
Thanks to Loic for his mathematics-related explanations. Thanks to Loic for his mathematics-related explanations.
Thanks to Nicolas for the Mac OS X experimentations. Thanks to Nicolas for the Mac OS X experimentations.
Thanks to Remi Collet for the Fedora packaging. Thanks to Remi Collet for the Fedora packaging.
Thanks to Piotr SQLek Skólski for the Debian packaging.
Thanks to `trem' for the Mandriva packaging.
Thanks to TuxFamily ( http://tuxfamily.org ) for hosting the project. Thanks to TuxFamily ( http://tuxfamily.org ) for hosting the project.
Thanks to `Nishiki' for his elements and his support. Thanks to `Nishiki' for his elements and his support.
Thanks to qtcentre.org for their SingleApplication class.
[fr] [fr]
Merci à Trolltech pour la bibliothèque Qt ( http://trolltech.com/ ), sous Merci à Trolltech pour la bibliothèque Qt ( http://trolltech.com/ ), sous
@@ -22,8 +19,5 @@ http://www.kde.org/ ).
Merci à Loic pour ses explications d'ordre mathématique. Merci à Loic pour ses explications d'ordre mathématique.
Merci à Nicolas pour les expérimentations Mac OS X. Merci à Nicolas pour les expérimentations Mac OS X.
Merci à Remi Collet pour les paquets Fedora. Merci à Remi Collet pour les paquets Fedora.
Merci à Piotr SQLek Skólski pour les paquets Debian.
Merci à `trem' pour les paquets Mandriva.
Merci à TuxFamily ( http://tuxfamily.org ) pour l'hébergement du projet. Merci à TuxFamily ( http://tuxfamily.org ) pour l'hébergement du projet.
Merci à `Nishiki' pour ses éléments et son soutien. Merci à `Nishiki' pour ses éléments et son soutien.
Merci à qtcentre.org pour leur classe SingleApplication.

View File

@@ -1,14 +1,14 @@
# Doxyfile 1.5.5 # Doxyfile 1.5.1-KDevelop
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# Project related configuration options # Project related configuration options
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
DOXYFILE_ENCODING = UTF-8
PROJECT_NAME = QElectroTech PROJECT_NAME = QElectroTech
PROJECT_NUMBER = 0.1 PROJECT_NUMBER = 0.1
OUTPUT_DIRECTORY = OUTPUT_DIRECTORY =
CREATE_SUBDIRS = NO CREATE_SUBDIRS = NO
OUTPUT_LANGUAGE = French OUTPUT_LANGUAGE = French
USE_WINDOWS_ENCODING = NO
BRIEF_MEMBER_DESC = YES BRIEF_MEMBER_DESC = YES
REPEAT_BRIEF = YES REPEAT_BRIEF = YES
ABBREVIATE_BRIEF = "The $name class" \ ABBREVIATE_BRIEF = "The $name class" \
@@ -29,7 +29,6 @@ STRIP_FROM_PATH = /home/data/chaos/projets/qet/qelectrotech/
STRIP_FROM_INC_PATH = STRIP_FROM_INC_PATH =
SHORT_NAMES = NO SHORT_NAMES = NO
JAVADOC_AUTOBRIEF = NO JAVADOC_AUTOBRIEF = NO
QT_AUTOBRIEF = NO
MULTILINE_CPP_IS_BRIEF = NO MULTILINE_CPP_IS_BRIEF = NO
DETAILS_AT_TOP = NO DETAILS_AT_TOP = NO
INHERIT_DOCS = YES INHERIT_DOCS = YES
@@ -38,14 +37,9 @@ TAB_SIZE = 4
ALIASES = ALIASES =
OPTIMIZE_OUTPUT_FOR_C = NO OPTIMIZE_OUTPUT_FOR_C = NO
OPTIMIZE_OUTPUT_JAVA = NO OPTIMIZE_OUTPUT_JAVA = NO
OPTIMIZE_FOR_FORTRAN = NO
OPTIMIZE_OUTPUT_VHDL = NO
BUILTIN_STL_SUPPORT = NO BUILTIN_STL_SUPPORT = NO
CPP_CLI_SUPPORT = NO
SIP_SUPPORT = NO
DISTRIBUTE_GROUP_DOC = NO DISTRIBUTE_GROUP_DOC = NO
SUBGROUPING = YES SUBGROUPING = YES
TYPEDEF_HIDES_STRUCT = NO
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# Build related configuration options # Build related configuration options
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
@@ -54,7 +48,6 @@ EXTRACT_PRIVATE = NO
EXTRACT_STATIC = YES EXTRACT_STATIC = YES
EXTRACT_LOCAL_CLASSES = YES EXTRACT_LOCAL_CLASSES = YES
EXTRACT_LOCAL_METHODS = NO EXTRACT_LOCAL_METHODS = NO
EXTRACT_ANON_NSPACES = NO
HIDE_UNDOC_MEMBERS = NO HIDE_UNDOC_MEMBERS = NO
HIDE_UNDOC_CLASSES = NO HIDE_UNDOC_CLASSES = NO
HIDE_FRIEND_COMPOUNDS = NO HIDE_FRIEND_COMPOUNDS = NO
@@ -66,7 +59,6 @@ SHOW_INCLUDE_FILES = YES
INLINE_INFO = YES INLINE_INFO = YES
SORT_MEMBER_DOCS = YES SORT_MEMBER_DOCS = YES
SORT_BRIEF_DOCS = NO SORT_BRIEF_DOCS = NO
SORT_GROUP_NAMES = NO
SORT_BY_SCOPE_NAME = NO SORT_BY_SCOPE_NAME = NO
GENERATE_TODOLIST = NO GENERATE_TODOLIST = NO
GENERATE_TESTLIST = NO GENERATE_TESTLIST = NO
@@ -90,8 +82,7 @@ WARN_LOGFILE =
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# configuration options related to the input files # configuration options related to the input files
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
INPUT = INPUT = /home/data/chaos/projets/qet/qelectrotech
INPUT_ENCODING = UTF-8
FILE_PATTERNS = *.h \ FILE_PATTERNS = *.h \
*.cpp *.cpp
RECURSIVE = YES RECURSIVE = YES
@@ -101,7 +92,6 @@ EXCLUDE = moc_* \
debug debug
EXCLUDE_SYMLINKS = NO EXCLUDE_SYMLINKS = NO
EXCLUDE_PATTERNS = EXCLUDE_PATTERNS =
EXCLUDE_SYMBOLS =
EXAMPLE_PATH = EXAMPLE_PATH =
EXAMPLE_PATTERNS = * EXAMPLE_PATTERNS = *
EXAMPLE_RECURSIVE = NO EXAMPLE_RECURSIVE = NO
@@ -137,10 +127,6 @@ HTML_FOOTER =
HTML_STYLESHEET = HTML_STYLESHEET =
HTML_ALIGN_MEMBERS = YES HTML_ALIGN_MEMBERS = YES
GENERATE_HTMLHELP = NO GENERATE_HTMLHELP = NO
GENERATE_DOCSET = NO
DOCSET_FEEDNAME = "Doxygen generated docs"
DOCSET_BUNDLE_ID = org.doxygen.Project
HTML_DYNAMIC_SECTIONS = NO
CHM_FILE = CHM_FILE =
HHC_LOCATION = HHC_LOCATION =
GENERATE_CHI = NO GENERATE_CHI = NO
@@ -224,7 +210,6 @@ PERL_PATH = /usr/bin/perl
# Configuration options related to the dot tool # Configuration options related to the dot tool
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
CLASS_DIAGRAMS = YES CLASS_DIAGRAMS = YES
MSCGEN_PATH =
HIDE_UNDOC_RELATIONS = YES HIDE_UNDOC_RELATIONS = YES
HAVE_DOT = YES HAVE_DOT = YES
CLASS_GRAPH = YES CLASS_GRAPH = YES
@@ -241,7 +226,8 @@ DIRECTORY_GRAPH = YES
DOT_IMAGE_FORMAT = png DOT_IMAGE_FORMAT = png
DOT_PATH = DOT_PATH =
DOTFILE_DIRS = DOTFILE_DIRS =
DOT_GRAPH_MAX_NODES = 50 MAX_DOT_GRAPH_WIDTH = 1024
MAX_DOT_GRAPH_HEIGHT = 1024
MAX_DOT_GRAPH_DEPTH = 1000 MAX_DOT_GRAPH_DEPTH = 1000
DOT_TRANSPARENT = NO DOT_TRANSPARENT = NO
DOT_MULTI_TARGETS = NO DOT_MULTI_TARGETS = NO

View File

@@ -6,7 +6,6 @@ cupsys-bsd for printing
Howto compile : Howto compile :
$ qmake (qmake-qt4 for Debian-based systems) $ qmake (qmake-qt4 for Debian-based systems)
$ make $ make
# umask 0022
# make install # make install
[fr] [fr]
@@ -17,5 +16,4 @@ cupsys-bsd pour l'impression
Comment compiler : Comment compiler :
$ qmake (qmake-qt4 pour les systèmes basés sur Debian) $ qmake (qmake-qt4 pour les systèmes basés sur Debian)
$ make $ make
# umask 0022
# make install # make install

View File

@@ -15,7 +15,6 @@
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with QElectroTech. If not, see <http://www.gnu.org/licenses/>. along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
*/ */
#include <QtGui>
#include "aboutqet.h" #include "aboutqet.h"
#include "qet.h" #include "qet.h"

View File

@@ -17,7 +17,7 @@
*/ */
#ifndef ABOUTQET_H #ifndef ABOUTQET_H
#define ABOUTQET_H #define ABOUTQET_H
#include <QDialog> #include <QtGui>
/** /**
Cette classe represente la boite de dialogue Cette classe represente la boite de dialogue
« A propos de QElectroTech » « A propos de QElectroTech »

231
borderinset.cpp Normal file
View File

@@ -0,0 +1,231 @@
/*
Copyright 2006-2008 Xavier Guerrin
This file is part of QElectroTech.
QElectroTech is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
QElectroTech is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
*/
#include "borderinset.h"
#include "qetapp.h"
/**
Constructeur simple : construit une bordure de 15 colonnes de 50x500 avec
un cartouche de 400x50.
@param parent QObject parent de ce BorderInset
*/
BorderInset::BorderInset(QObject *parent) : QObject(parent) {
nb_columns = qMax(3, QETApp::settings().value("diagrameditor/defaultcols", 15).toInt());
min_nb_columns = 3;
columns_width = QETApp::settings().value("diagrameditor/defaultcolsize", 50.0).toDouble();
columns_height = QETApp::settings().value("diagrameditor/defaultheight", 500.0).toDouble();
min_columns_height = 80.0;
inset_width = nb_columns * columns_width;
inset_height = 50.0;
columns_header_height = 20.0;
display_inset = true;
display_columns = true;
display_border = true;
updateRectangles();
bi_author = QETApp::settings().value("diagrameditor/defaultauthor").toString();
bi_title = QETApp::settings().value("diagrameditor/defaulttitle").toString();
bi_folio = QETApp::settings().value("diagrameditor/defaultfolio").toString();
bi_filename = QETApp::settings().value("diagrameditor/defaultfilename").toString();
QString settings_date = QETApp::settings().value("diagrameditor/defaultdate").toString();
if (settings_date == "now") bi_date = QDate::currentDate();
else if (settings_date.isEmpty() || settings_date == "null") bi_date = QDate();
else bi_date = QDate::fromString(settings_date, "yyyyMMdd");
}
/**
Destructeur - ne fait rien
*/
BorderInset::~BorderInset() {
}
/**
Methode recalculant les rectangles composant le cadre et le cartouche en
fonction des attributs de taille
*/
void BorderInset::updateRectangles() {
// rectangle delimitant le schema
QRectF previous_border = border;
border = QRectF(0, 0, nb_columns * columns_width, columns_height);
if (border != previous_border) emit(borderChanged(previous_border, border));
// rectangles relatifs au cartouche
inset = QRectF(border.bottomLeft().x(), border.bottomLeft().y(), inset_width, inset_height);
inset_author = QRectF(inset.topLeft(), QSizeF(2.0 * inset_width / 9.0, 0.5 * inset_height));
inset_date = QRectF(inset_author.bottomLeft(), inset_author.size());
inset_title = QRectF(inset_author.topRight(), QSizeF(5.0 * inset_width / 9.0, inset_height));
inset_file = QRectF(inset_title.topRight(), inset_author.size());
inset_folio = QRectF(inset_file.bottomLeft(), inset_author.size());
}
/**
Dessine le cadre et le cartouche
@param qp QPainter a utiliser pour dessiner le cadre et le cartouche
@param x Abscisse du cadre
@param y Ordonnee du cadre
*/
void BorderInset::draw(QPainter *qp, qreal x, qreal y) {
// translate tous les rectangles
border .translate(x, y);
inset .translate(x, y);
inset_author.translate(x, y);
inset_date .translate(x, y);
inset_title .translate(x, y);
inset_file .translate(x, y);
inset_folio .translate(x, y);
// prepare le QPainter
qp -> save();
qp -> setPen(Qt::black);
qp -> setBrush(Qt::NoBrush);
// dessine le cadre
if (display_border) qp -> drawRect(border);
// dessine la numerotation des colonnes
if (display_columns) {
qp -> setBrush(Qt::white);
for (int i = 1 ; i <= nb_columns ; ++ i) {
QRectF numbered_rectangle = QRectF(
border.topLeft().x() + ((i - 1) * columns_width),
border.topLeft().y(),
columns_width,
columns_header_height
);
qp -> drawRect(numbered_rectangle);
qp -> drawText(numbered_rectangle, Qt::AlignVCenter | Qt::AlignCenter, QString("%1").arg(i));
}
}
// dessine le cartouche
if (display_inset) {
qp -> setBrush(Qt::white);
qp -> drawRect(inset);
qp -> drawRect(inset_author);
qp -> drawText(inset_author, Qt::AlignVCenter | Qt::AlignLeft, tr(" Auteur : ") + bi_author);
qp -> drawRect(inset_date);
qp -> drawText(inset_date, Qt::AlignVCenter | Qt::AlignLeft, tr(" Date : ") + bi_date.toString("dd/MM/yyyy"));
qp -> drawRect(inset_title);
qp -> drawText(inset_title, Qt::AlignVCenter | Qt::AlignCenter, tr("Titre du document : ") + bi_title);
qp -> drawRect(inset_file);
qp -> drawText(inset_file, Qt::AlignVCenter | Qt::AlignLeft, tr(" Fichier : ") + bi_filename);
qp -> drawRect(inset_folio);
qp -> drawText(inset_folio, Qt::AlignVCenter | Qt::AlignLeft, tr(" Folio : ") + bi_folio);
}
qp -> restore();
// annule la translation des rectangles
border .translate(-x, -y);
inset .translate(-x, -y);
inset_author.translate(-x, -y);
inset_date .translate(-x, -y);
inset_title .translate(-x, -y);
inset_file .translate(-x, -y);
inset_folio .translate(-x, -y);
}
/**
Ajoute une colonne.
*/
void BorderInset::addColumn() {
++ nb_columns;
setInsetWidth(nb_columns * columns_width);
updateRectangles();
}
/**
Enleve une colonne. Il doit rester au moins 3 colonnes.
*/
void BorderInset::removeColumn() {
if (nb_columns == min_nb_columns) return;
-- nb_columns;
setInsetWidth(nb_columns * columns_width);
updateRectangles();
}
/**
Permet de changer le nombre de colonnes.
Si ce nombre de colonnes est inferieur au minimum requis, cette fonction ne
fait rien
@param nb_c nouveau nombre de colonnes
@see minNbColumns()
*/
void BorderInset::setNbColumns(int nb_c) {
if (nb_c < min_nb_columns) return;
nb_columns = nb_c;
setInsetWidth(nb_columns * columns_width);
updateRectangles();
}
/**
Change la largeur des colonnes ; celle-ci doit rester comprise entre 10 et
200px.
*/
void BorderInset::setColumnsWidth(const qreal &new_cw) {
columns_width = qBound(10.0, new_cw, 200.0);
updateRectangles();
}
/**
Change la hauteur des en-tetes contenant les numeros de colonnes. Celle-ci
doit rester comprise entre 5 et 50 px.
*/
void BorderInset::setColumnsHeaderHeight(const qreal &new_chh) {
columns_header_height = qBound(5.0, new_chh, 50.0);
updateRectangles();
}
/**
Change la hauteur des colonnes (et donc du cadre). Cette hauteur doit
rester superieure a la hauteur des en-tetes de colonnes + 20px.
*/
void BorderInset::setColumnsHeight(const qreal &new_ch) {
columns_height = qMax(columns_header_height + min_columns_height, new_ch);
updateRectangles();
}
/**
Change la largeur du cartouche. Cette largeur doit rester comprise entre
100px et la largeur du cartouche
*/
void BorderInset::setInsetWidth(const qreal &new_iw) {
inset_width = qMax(100.0, qMin(nb_columns * columns_width, new_iw));
updateRectangles();
}
/**
Change la hauteur du cartouche. Cette largeur doit rester comprise entre
20px et la hauteur du cartouche.
*/
void BorderInset::setInsetHeight(const qreal &new_ih) {
inset_height = qMax(20.0, qMin(columns_height, new_ih));
updateRectangles();
}
/**
Ajuste la largeur du cartouche de facon a ce que celui-ci soit aussi large
que le schema
*/
void BorderInset::adjustInsetToColumns() {
setInsetWidth(nbColumn() * columnsWidth());
}

View File

@@ -18,11 +18,10 @@
#ifndef BORDERINSET_H #ifndef BORDERINSET_H
#define BORDERINSET_H #define BORDERINSET_H
#include "insetproperties.h" #include "insetproperties.h"
#include "borderproperties.h"
#include <QObject> #include <QObject>
#include <QRectF> #include <QRectF>
#include <QPainter>
#include <QDate> #include <QDate>
class QPainter;
/** /**
Cette classe represente l'ensemble bordure + cartouche qui encadre le Cette classe represente l'ensemble bordure + cartouche qui encadre le
schema electrique. schema electrique.
@@ -40,51 +39,29 @@ class BorderInset : public QObject {
// methodes // methodes
public: public:
static int minNbColumns();
static qreal minColumnsWidth();
static int minNbRows();
static qreal minRowsHeight();
void draw(QPainter *, qreal = 0.0, qreal = 0.0); void draw(QPainter *, qreal = 0.0, qreal = 0.0);
// methodes d'acces en lecture aux dimensions // methodes d'acces en lecture aux dimensions
// colonnes
/// @return le nombre de colonnes du schema /// @return le nombre de colonnes du schema
int nbColumns() const { return(nb_columns); } int nbColumn() const { return(nb_columns); }
/// @return la largeur des colonnes en pixels /// @return la taille des colonnes en pixels
qreal columnsWidth() const { return(columns_width); } qreal columnsWidth() const { return(columns_width); }
/// @return la taille de l'ensemble des colonnes, en-tete des lignes non inclus
qreal columnsTotalWidth() const { return(nb_columns * columns_width); }
/// @return la hauteur, en pixels, des en-tetes des colonnes /// @return la hauteur, en pixels, des en-tetes des colonnes
qreal columnsHeaderHeight() const { return(columns_header_height); } qreal columnsHeaderHeight() const { return(columns_header_height); }
/// @return la hauteur des colonnes, en-tetes inclus
// lignes qreal columnsHeight() const { return(columns_height); }
/// @return le nombre de lignes du schema /// @return la largeur de la bordure
int nbRows() const { return(nb_rows); } qreal borderWidth() const { return(nb_columns * columns_width); }
/// @return la hauteur des lignes en pixels /// @return la hauteur de la bordure
qreal rowsHeight() const { return(rows_height); } qreal borderHeight() const { return(columns_height + inset_height); }
/// @return la taille de l'ensemble des lignes, en-tete des colonnes non inclus
qreal rowsTotalHeight() const { return(nb_rows * rows_height); }
/// @return la largeur, en pixels, des en-tetes des lignes
qreal rowsHeaderWidth() const { return(rows_header_width); }
// cadre sans le cartouche = schema
/// @return la largeur du schema, c'est-a-dire du cadre sans le cartouche
qreal diagramWidth() const { return(columnsTotalWidth() + rowsHeaderWidth()); }
/// @return la hauteurdu schema, c'est-a-dire du cadre sans le cartouche
qreal diagramHeight() const { return(rowsTotalHeight() + columnsHeaderHeight()); }
// cartouche
/// @return la largeur du cartouche /// @return la largeur du cartouche
qreal insetWidth() const { return(inset_width); } qreal insetWidth() const { return(inset_width); }
/// @return la hauteur du cartouche /// @return la hauteur du cartouche
qreal insetHeight() const { return(inset_height); } qreal insetHeight() const { return(inset_height); }
/// @return la hauteur minimale acceptee des colonnes
// cadre avec le cartouche qreal minColumnsHeight() const { return(min_columns_height); }
/// @return la hauteur de la bordure /// @return le nombre minimum accepte de colonnes
qreal borderWidth() const { return(diagramWidth()); } int minNbColumns() const { return(min_nb_columns); }
/// @return la hauteur de la bordure
qreal borderHeight() const { return(diagramHeight() + insetHeight()); }
// methodes d'acces en lecture aux informations du cartouche // methodes d'acces en lecture aux informations du cartouche
/// @return le champ "Auteur" du cartouche /// @return le champ "Auteur" du cartouche
@@ -103,23 +80,16 @@ class BorderInset : public QObject {
bool insetIsDisplayed() const { return(display_inset); } bool insetIsDisplayed() const { return(display_inset); }
/// @return true si les entetes des colonnes sont affiches, false sinon /// @return true si les entetes des colonnes sont affiches, false sinon
bool columnsAreDisplayed() const { return(display_columns); } bool columnsAreDisplayed() const { return(display_columns); }
/// @return true si les entetes des lignes sont affiches, false sinon
bool rowsAreDisplayed() const { return(display_rows); }
/// @return true si la bordure est affichee, false sinon /// @return true si la bordure est affichee, false sinon
bool borderIsDisplayed() const { return(display_border); } bool borderIsDisplayed() const { return(display_border); }
// methodes d'acces en ecriture aux dimensions // methodes d'acces en ecriture aux dimensions
void addColumn (); void addColumn ();
void addRow ();
void removeColumn (); void removeColumn ();
void removeRow ();
void setNbColumns (int); void setNbColumns (int);
void setNbRows (int);
void setColumnsWidth (const qreal &); void setColumnsWidth (const qreal &);
void setRowsHeight (const qreal &);
void setColumnsHeaderHeight(const qreal &); void setColumnsHeaderHeight(const qreal &);
void setRowsHeaderWidth (const qreal &); void setColumnsHeight (const qreal &);
void setDiagramHeight (const qreal &);
void setInsetWidth (const qreal &); void setInsetWidth (const qreal &);
void setInsetHeight (const qreal &); void setInsetHeight (const qreal &);
void adjustInsetToColumns (); void adjustInsetToColumns ();
@@ -136,20 +106,36 @@ class BorderInset : public QObject {
/// @param filename le nouveau contenu du champ "Fichier" /// @param filename le nouveau contenu du champ "Fichier"
void setFileName (const QString &filename) { bi_filename = filename; } void setFileName (const QString &filename) { bi_filename = filename; }
InsetProperties exportInset(); /// @return les proprietes du cartouches
void importInset(const InsetProperties &); InsetProperties exportInset() {
BorderProperties exportBorder(); InsetProperties ip;
void importBorder(const BorderProperties &); ip.author = bi_author;
ip.date = bi_date;
ip.title = bi_title;
ip.folio = bi_folio;
ip.filename = bi_filename;
return(ip);
}
/// @param ip les nouvelles proprietes du cartouche
void importInset(const InsetProperties &ip) {
bi_author = ip.author;
bi_date = ip.date;
bi_title = ip.title;
bi_folio = ip.folio;
bi_filename = ip.filename;
}
// methodes d'acces en ecriture aux options // methodes d'acces en ecriture aux options
void displayInset(bool); /// @param di true pour afficher le cartouche, false sinon
void displayColumns(bool); void displayInset (bool di) { display_inset = di; }
void displayRows(bool); /// @param dc true pour afficher les entetes des colonnes, false sinon
void displayBorder(bool); void displayColumns (bool dc) { display_columns = dc; }
/// @param db true pour afficher la bordure du schema, false sinon
void displayBorder (bool db) { display_border = db; }
private: private:
void updateRectangles(); void updateRectangles();
QString incrementLetters(const QString &);
// signaux // signaux
signals: signals:
@@ -159,10 +145,6 @@ class BorderInset : public QObject {
@param new_border Nouvelle bordure @param new_border Nouvelle bordure
*/ */
void borderChanged(QRectF old_border, QRectF new_border); void borderChanged(QRectF old_border, QRectF new_border);
/**
Signal emise lorsque des options d'affichage change
*/
void displayChanged();
// attributs // attributs
private: private:
@@ -173,23 +155,18 @@ class BorderInset : public QObject {
QString bi_folio; QString bi_folio;
QString bi_filename; QString bi_filename;
// dimensions du cadre (lignes et colonnes) // dimensions du cadre et du cartouche
// colonnes : nombres et dimensions
int nb_columns; int nb_columns;
int min_nb_columns;
qreal columns_width; qreal columns_width;
qreal columns_header_height; qreal columns_header_height;
qreal columns_height;
// lignes : nombres et dimensions qreal min_columns_height;
int nb_rows;
qreal rows_height;
qreal rows_header_width;
// dimensions du cartouche
qreal inset_width; qreal inset_width;
qreal inset_height; qreal inset_height;
// rectangles utilises pour le dessin // rectangles utilises pour le dessin
QRectF diagram; QRectF border;
QRectF inset; QRectF inset;
QRectF inset_author; QRectF inset_author;
QRectF inset_date; QRectF inset_date;
@@ -200,7 +177,6 @@ class BorderInset : public QObject {
// booleens pour les options de dessin // booleens pour les options de dessin
bool display_inset; bool display_inset;
bool display_columns; bool display_columns;
bool display_rows;
bool display_border; bool display_border;
}; };
#endif #endif

View File

@@ -16,11 +16,9 @@
along with QElectroTech. If not, see <http://www.gnu.org/licenses/>. along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
*/ */
#include <QtDebug> #include <QtDebug>
#include <limits>
#include "conductor.h" #include "conductor.h"
#include "conductorsegment.h" #include "conductorsegment.h"
#include "conductorsegmentprofile.h" #include "conductorsegmentprofile.h"
#include "diagramtextitem.h"
#include "element.h" #include "element.h"
#include "diagram.h" #include "diagram.h"
#include "diagramcommands.h" #include "diagramcommands.h"
@@ -38,7 +36,6 @@ QBrush Conductor::square_brush = QBrush(Qt::darkGreen);
@param scene QGraphicsScene a laquelle appartient le conducteur @param scene QGraphicsScene a laquelle appartient le conducteur
*/ */
Conductor::Conductor(Terminal *p1, Terminal* p2, Element *parent, QGraphicsScene *scene) : Conductor::Conductor(Terminal *p1, Terminal* p2, Element *parent, QGraphicsScene *scene) :
QObject(),
QGraphicsPathItem(parent, scene), QGraphicsPathItem(parent, scene),
terminal1(p1), terminal1(p1),
terminal2(p2), terminal2(p2),
@@ -88,12 +85,6 @@ Conductor::Conductor(Terminal *p1, Terminal* p2, Element *parent, QGraphicsScene
text_item -> previous_text = properties_.text; text_item -> previous_text = properties_.text;
calculateTextItemPosition(); calculateTextItemPosition();
text_item -> setParentItem(this); text_item -> setParentItem(this);
connect(
text_item,
SIGNAL(diagramTextChanged(DiagramTextItem *, const QString &, const QString &)),
this,
SLOT(displayedTextChanged())
);
} }
/** /**
@@ -931,7 +922,7 @@ QDomElement Conductor::toXml(QDomDocument &d, QHash<Terminal *, int> &table_adr_
foreach(ConductorSegment *segment, segmentsList()) { foreach(ConductorSegment *segment, segmentsList()) {
current_segment = d.createElement("segment"); current_segment = d.createElement("segment");
current_segment.setAttribute("orientation", segment -> isHorizontal() ? "horizontal" : "vertical"); current_segment.setAttribute("orientation", segment -> isHorizontal() ? "horizontal" : "vertical");
current_segment.setAttribute("length", QString("%1").arg(segment -> length())); current_segment.setAttribute("length", segment -> length());
e.appendChild(current_segment); e.appendChild(current_segment);
} }
} }
@@ -1091,25 +1082,6 @@ void Conductor::readProperties() {
text_item -> setVisible(properties_.type == ConductorProperties::Multi); text_item -> setVisible(properties_.type == ConductorProperties::Multi);
} }
/**
Met a jour les proprietes du conducteur apres modification du champ de texte affiche
*/
void Conductor::displayedTextChanged() {
// verifie que le texte a reellement change
if (text_item -> toPlainText() == properties_.text) return;
// initialise l'objet UndoCommand correspondant
if (Diagram *my_diagram = diagram()) {
ConductorProperties new_properties(properties_);
new_properties.text = text_item -> toPlainText();
ChangeConductorPropertiesCommand *ccpc = new ChangeConductorPropertiesCommand(this);
ccpc -> setOldSettings(properties_);
ccpc -> setNewSettings(new_properties);
my_diagram -> undoStack().push(ccpc);
}
}
/** /**
@return les conducteurs avec lesquels ce conducteur partage des bornes @return les conducteurs avec lesquels ce conducteur partage des bornes
communes communes

View File

@@ -21,17 +21,15 @@
#include "terminal.h" #include "terminal.h"
#include "conductorprofile.h" #include "conductorprofile.h"
#include "conductorproperties.h" #include "conductorproperties.h"
#include "diagramtextitem.h"
class ConductorSegment; class ConductorSegment;
class DiagramTextItem;
class Element; class Element;
typedef QPair<QPointF, Qt::Corner> ConductorBend; typedef QPair<QPointF, Qt::Corner> ConductorBend;
typedef QHash<Qt::Corner, ConductorProfile> ConductorProfilesGroup; typedef QHash<Qt::Corner, ConductorProfile> ConductorProfilesGroup;
/** /**
Cette classe represente un conducteur. Un conducteur relie deux bornes d'element. Cette classe represente un conducteur. Un conducteur relie deux bornes d'element.
*/ */
class Conductor : public QObject, public QGraphicsPathItem { class Conductor : public QGraphicsPathItem {
Q_OBJECT
// constructeurs, destructeur // constructeurs, destructeur
public: public:
@@ -83,9 +81,6 @@ class Conductor : public QObject, public QGraphicsPathItem {
ConductorProfilesGroup profiles() const; ConductorProfilesGroup profiles() const;
void readProperties(); void readProperties();
public slots:
void displayedTextChanged();
protected: protected:
virtual void mousePressEvent(QGraphicsSceneMouseEvent *); virtual void mousePressEvent(QGraphicsSceneMouseEvent *);
virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *); virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *);

View File

@@ -16,7 +16,6 @@
along with QElectroTech. If not, see <http://www.gnu.org/licenses/>. along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
*/ */
#include "conductorpropertieswidget.h" #include "conductorpropertieswidget.h"
#include <QtGui>
#include "conductor.h" #include "conductor.h"
/** /**
@@ -47,7 +46,6 @@ void ConductorPropertiesWidget::buildInterface() {
setMinimumSize(380, 280); setMinimumSize(380, 280);
QVBoxLayout *main_layout = new QVBoxLayout(this); QVBoxLayout *main_layout = new QVBoxLayout(this);
main_layout -> setContentsMargins(0, 0, 0, 0);
QGroupBox *groupbox = new QGroupBox(tr("Type de conducteur")); QGroupBox *groupbox = new QGroupBox(tr("Type de conducteur"));
main_layout -> addWidget(groupbox); main_layout -> addWidget(groupbox);

View File

@@ -17,9 +17,8 @@
*/ */
#ifndef CONDUCTOR_PROPERTIES_WIDGET_H #ifndef CONDUCTOR_PROPERTIES_WIDGET_H
#define CONDUCTOR_PROPERTIES_WIDGET_H #define CONDUCTOR_PROPERTIES_WIDGET_H
#include "conductorproperties.h" #include "conductor.h"
#include <QWidget> #include <QtGui>
/** /**
Ce widget permet a l utilisateur d'editer les proprietes d'un conducteur. Ce widget permet a l utilisateur d'editer les proprietes d'un conducteur.
Par proprietes, on entend non pas le trajet effectue par le conducteur mais Par proprietes, on entend non pas le trajet effectue par le conducteur mais

View File

@@ -16,12 +16,7 @@
along with QElectroTech. If not, see <http://www.gnu.org/licenses/>. along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
*/ */
#include "configpages.h" #include "configpages.h"
#include "borderpropertieswidget.h"
#include "conductorpropertieswidget.h"
#include "insetpropertieswidget.h"
#include "qetapp.h" #include "qetapp.h"
#include "qetdiagrameditor.h"
#include "borderinset.h"
/** /**
Constructeur Constructeur
@@ -32,17 +27,10 @@ NewDiagramPage::NewDiagramPage(QWidget *parent) : ConfigPage(parent) {
// acces a la configuration de QElectroTech // acces a la configuration de QElectroTech
QSettings &settings = QETApp::settings(); QSettings &settings = QETApp::settings();
// dimensions par defaut d'un schema // recupere les dimensions du schema
bpw = new BorderPropertiesWidget(QETDiagramEditor::defaultBorderProperties()); int columns_count_value = settings.value("diagrameditor/defaultcols", 15).toInt();
int columns_width_value = qRound(settings.value("diagrameditor/defaultcolsize", 50.0).toDouble());
// proprietes par defaut d'un cartouche int columns_height_value = qRound(settings.value("diagrameditor/defaultheight", 500.0).toDouble());
ipw = new InsetPropertiesWidget(QETDiagramEditor::defaultInsetProperties(), true);
// proprietes par defaut des conducteurs
ConductorProperties cp;
cp.fromSettings(settings, "diagrameditor/defaultconductor");
cpw = new ConductorPropertiesWidget(cp);
cpw -> setContentsMargins(0, 0, 0, 0);
QVBoxLayout *vlayout1 = new QVBoxLayout(); QVBoxLayout *vlayout1 = new QVBoxLayout();
@@ -56,9 +44,45 @@ NewDiagramPage::NewDiagramPage(QWidget *parent) : ConfigPage(parent) {
QHBoxLayout *hlayout1 = new QHBoxLayout(); QHBoxLayout *hlayout1 = new QHBoxLayout();
QVBoxLayout *vlayout2 = new QVBoxLayout(); QVBoxLayout *vlayout2 = new QVBoxLayout();
vlayout2 -> addWidget(bpw); QGroupBox *diagram_size_box = new QGroupBox(tr("Dimensions du sch\351ma"));
diagram_size_box -> setMinimumWidth(300);
QGridLayout *diagram_size_box_layout = new QGridLayout(diagram_size_box);
QLabel *ds1 = new QLabel(tr("Colonnes :"));
columns_count = new QSpinBox(diagram_size_box);
columns_count -> setMinimum(3); /// @todo methode statique pour recuperer ca
columns_count -> setValue(columns_count_value);
columns_width = new QSpinBox(diagram_size_box);
columns_width -> setMinimum(1);
columns_width -> setSingleStep(10);
columns_width -> setValue(columns_width_value);
columns_width -> setPrefix(tr("\327"));
columns_width -> setSuffix(tr("px"));
QLabel *ds2 = new QLabel(tr("Hauteur :"));
columns_height = new QSpinBox(diagram_size_box);
columns_height -> setRange(80, 10000); /// @todo methode statique pour recuperer ca
columns_height -> setSingleStep(80);
columns_height -> setValue(columns_height_value);
diagram_size_box_layout -> addWidget(ds1, 0, 0);
diagram_size_box_layout -> addWidget(columns_count, 0, 1);
diagram_size_box_layout -> addWidget(columns_width, 0, 2);
diagram_size_box_layout -> addWidget(ds2, 1, 0);
diagram_size_box_layout -> addWidget(columns_height, 1, 1);
ipw = new InsetPropertiesWidget(QETDiagramEditor::defaultInsetProperties(), true, this);
// proprietes par defaut des conducteurs
ConductorProperties cp;
cp.fromSettings(settings, "diagrameditor/defaultconductor");
cpw = new ConductorPropertiesWidget(cp);
vlayout2 -> addWidget(diagram_size_box);
vlayout2 -> addWidget(ipw); vlayout2 -> addWidget(ipw);
vlayout2 -> setSpacing(5);
hlayout1 -> addLayout(vlayout2); hlayout1 -> addLayout(vlayout2);
hlayout1 -> addWidget(cpw); hlayout1 -> addWidget(cpw);
vlayout1 -> addLayout(hlayout1); vlayout1 -> addLayout(hlayout1);
@@ -78,13 +102,9 @@ void NewDiagramPage::applyConf() {
QSettings &settings = QETApp::settings(); QSettings &settings = QETApp::settings();
// dimensions des nouveaux schemas // dimensions des nouveaux schemas
BorderProperties border = bpw -> borderProperties(); settings.setValue("diagrameditor/defaultcols", columns_count -> value());
settings.setValue("diagrameditor/defaultcols", border.columns_count); settings.setValue("diagrameditor/defaultcolsize", columns_width -> value());
settings.setValue("diagrameditor/defaultcolsize", border.columns_width); settings.setValue("diagrameditor/defaultheight", columns_height -> value());
settings.setValue("diagrameditor/defaultdisplaycols", border.display_columns);
settings.setValue("diagrameditor/defaultrows", border.rows_count);
settings.setValue("diagrameditor/defaultrowsize", border.rows_height);
settings.setValue("diagrameditor/defaultdisplayrows", border.display_rows);
// proprietes du cartouche // proprietes du cartouche
InsetProperties inset = ipw-> insetProperties(); InsetProperties inset = ipw-> insetProperties();

View File

@@ -18,9 +18,8 @@
#ifndef CONFIG_PAGES_H #ifndef CONFIG_PAGES_H
#define CONFIG_PAGES_H #define CONFIG_PAGES_H
#include <QtGui> #include <QtGui>
class BorderPropertiesWidget; #include "conductorpropertieswidget.h"
class ConductorPropertiesWidget; #include "insetpropertieswidget.h"
class InsetPropertiesWidget;
/** /**
Cette classe abstraite contient les methodes que toutes les pages de Cette classe abstraite contient les methodes que toutes les pages de
@@ -64,7 +63,9 @@ class NewDiagramPage : public ConfigPage {
// attributs // attributs
public: public:
BorderPropertiesWidget *bpw; ///< Widget d'edition des dimensions du schema QSpinBox *columns_count; ///< Widget d'edition du nombre par defaut de colonnes
QSpinBox *columns_width; ///< Widget d'edition de la largeur par defaut des colonnes
QSpinBox *columns_height; ///< Widget d'edition de la hauteur par defaut des colonnes
InsetPropertiesWidget *ipw; ///< Widget d'edition des proprietes par defaut du cartouche InsetPropertiesWidget *ipw; ///< Widget d'edition des proprietes par defaut du cartouche
ConductorPropertiesWidget *cpw; ///< Widget d'edition des proprietes par defaut des conducteurs ConductorPropertiesWidget *cpw; ///< Widget d'edition des proprietes par defaut des conducteurs
}; };

View File

@@ -86,7 +86,7 @@ CustomElement::CustomElement(QString &nom_fichier, QGraphicsItem *qgi, Diagram *
QObject::tr("Avertissement : l'\351l\351ment ") + nom_fichier QObject::tr("Avertissement : l'\351l\351ment ") + nom_fichier
+ QObject::tr(" a \351t\351 enregistr\351 avec une version" + QObject::tr(" a \351t\351 enregistr\351 avec une version"
" ult\351rieure de QElectroTech.") " ult\351rieure de QElectroTech.")
) << std::endl; );
} }
} }
@@ -418,6 +418,7 @@ bool CustomElement::parseInput(QDomElement &e) {
) return(false); ) return(false);
ElementTextItem *eti = new ElementTextItem(e.attribute("text"), this); ElementTextItem *eti = new ElementTextItem(e.attribute("text"), this);
eti -> setFont(QFont(QETApp::diagramTextsFont(), size));
eti -> setPos(pos_x, pos_y); eti -> setPos(pos_x, pos_y);
eti -> setOriginalPos(QPointF(pos_x, pos_y)); eti -> setOriginalPos(QPointF(pos_x, pos_y));
if (e.attribute("rotate") == "true") eti -> setFollowParentRotations(true); if (e.attribute("rotate") == "true") eti -> setFollowParentRotations(true);

View File

@@ -37,10 +37,9 @@ Diagram::Diagram(QObject *parent) :
draw_grid(true), draw_grid(true),
use_border(true), use_border(true),
moved_elements_fetched(false), moved_elements_fetched(false),
qgi_manager(this),
draw_terminals(true) draw_terminals(true)
{ {
undo_stack = new QUndoStack();
qgi_manager = new QGIManager(this);
setBackgroundBrush(Qt::white); setBackgroundBrush(Qt::white);
conductor_setter = new QGraphicsLineItem(0, 0); conductor_setter = new QGraphicsLineItem(0, 0);
conductor_setter -> setZValue(1000000); conductor_setter -> setZValue(1000000);
@@ -60,23 +59,8 @@ Diagram::Diagram(QObject *parent) :
Destructeur Destructeur
*/ */
Diagram::~Diagram() { Diagram::~Diagram() {
// suppression de la liste des annulations - l'undo stack fait appel au qgimanager pour supprimer certains elements if (conductor_setter -> scene()) removeItem(conductor_setter);
delete undo_stack; delete conductor_setter;
// suppression du QGIManager - tous les elements qu'il connait sont supprimes
delete qgi_manager;
// recense les items supprimables
QList<QGraphicsItem *> deletable_items;
foreach(QGraphicsItem *qgi, items()) {
if (qgi -> parentItem()) continue;
if (qgraphicsitem_cast<Conductor *>(qgi)) continue;
deletable_items << qgi;
}
// suppression des items supprimables
foreach(QGraphicsItem *qgi_d, deletable_items) {
delete qgi_d;
}
} }
/** /**
@@ -247,14 +231,9 @@ QDomDocument Diagram::toXml(bool diagram) {
if (!border_and_inset.title().isNull()) racine.setAttribute("title", border_and_inset.title()); if (!border_and_inset.title().isNull()) racine.setAttribute("title", border_and_inset.title());
if (!border_and_inset.fileName().isNull()) racine.setAttribute("filename", border_and_inset.fileName()); if (!border_and_inset.fileName().isNull()) racine.setAttribute("filename", border_and_inset.fileName());
if (!border_and_inset.folio().isNull()) racine.setAttribute("folio", border_and_inset.folio()); if (!border_and_inset.folio().isNull()) racine.setAttribute("folio", border_and_inset.folio());
racine.setAttribute("cols", border_and_inset.nbColumns()); racine.setAttribute("cols", border_and_inset.nbColumn());
racine.setAttribute("colsize", QString("%1").arg(border_and_inset.columnsWidth())); racine.setAttribute("colsize", border_and_inset.columnsWidth());
racine.setAttribute("rows", border_and_inset.nbRows()); racine.setAttribute("height", border_and_inset.columnsHeight());
racine.setAttribute("rowsize", QString("%1").arg(border_and_inset.rowsHeight()));
// attribut datant de la version 0.1 - laisse pour retrocompatibilite
racine.setAttribute("height", QString("%1").arg(border_and_inset.diagramHeight()));
racine.setAttribute("displaycols", border_and_inset.columnsAreDisplayed() ? "true" : "false");
racine.setAttribute("displayrows", border_and_inset.rowsAreDisplayed() ? "true" : "false");
// type de conducteur par defaut // type de conducteur par defaut
QDomElement default_conductor = document.createElement("defaultconductor"); QDomElement default_conductor = document.createElement("defaultconductor");
@@ -358,24 +337,9 @@ bool Diagram::fromXml(QDomDocument &document, QPointF position, bool consider_in
double col_size = root.attribute("colsize").toDouble(&ok); double col_size = root.attribute("colsize").toDouble(&ok);
if (ok) border_and_inset.setColumnsWidth(col_size); if (ok) border_and_inset.setColumnsWidth(col_size);
// retrocompatibilite : les schemas enregistres avec la 0.1 ont un attribut "height" // hauteur du schema
if (root.hasAttribute("rows") && root.hasAttribute("rowsize")) { double height = root.attribute("height").toDouble(&ok);
// nombre de lignes if (ok) border_and_inset.setColumnsHeight(height);
int nb_rows = root.attribute("rows").toInt(&ok);
if (ok) border_and_inset.setNbRows(nb_rows);
// taille des lignes
double row_size = root.attribute("rowsize").toDouble(&ok);
if (ok) border_and_inset.setRowsHeight(row_size);
} else {
// hauteur du schema
double height = root.attribute("height").toDouble(&ok);
if (ok) border_and_inset.setDiagramHeight(height);
}
// affichage des lignes et colonnes
border_and_inset.displayColumns(root.attribute("displaycols") != "false");
border_and_inset.displayRows(root.attribute("displayrows") != "false");
border_and_inset.adjustInsetToColumns(); border_and_inset.adjustInsetToColumns();
@@ -497,17 +461,6 @@ bool Diagram::fromXml(QDomDocument &document, QPointF position, bool consider_in
return(true); return(true);
} }
/**
Gere le fait qu'un texte du schema ait ete modifie
@param text_item Texte modifie
@param old_text Ancien texte
@param new_text Nouveau texte
*/
void Diagram::diagramTextChanged(DiagramTextItem *text_item, const QString &old_text, const QString &new_text) {
if (!text_item) return;
undo_stack -> push(new ChangeDiagramTextCommand(text_item, old_text, new_text));
}
/** /**
Verifie si la selection est passe d'un etat ou elle est vide a un etat ou Verifie si la selection est passe d'un etat ou elle est vide a un etat ou
elle ne l'est pas, et inversement. Si c'est le cas, le signal elle ne l'est pas, et inversement. Si c'est le cas, le signal

View File

@@ -75,8 +75,8 @@ class Diagram : public QGraphicsScene {
QSet<Conductor *> conductors_to_move; QSet<Conductor *> conductors_to_move;
QHash<Conductor *, Terminal *> conductors_to_update; QHash<Conductor *, Terminal *> conductors_to_update;
QSet<DiagramTextItem *> texts_to_move; QSet<DiagramTextItem *> texts_to_move;
QGIManager *qgi_manager; QGIManager qgi_manager;
QUndoStack *undo_stack; QUndoStack undo_stack;
bool draw_terminals; bool draw_terminals;
// methodes // methodes
@@ -126,9 +126,6 @@ class Diagram : public QGraphicsScene {
QUndoStack &undoStack(); QUndoStack &undoStack();
QGIManager &qgiManager(); QGIManager &qgiManager();
public slots:
void diagramTextChanged(DiagramTextItem *, const QString &, const QString &);
private slots: private slots:
void slot_checkSelectionEmptinessChange(); void slot_checkSelectionEmptinessChange();
@@ -253,12 +250,12 @@ inline const QSet<DiagramTextItem *> &Diagram::textsToMove() {
/// @return la pile d'annulations de ce schema /// @return la pile d'annulations de ce schema
inline QUndoStack &Diagram::undoStack() { inline QUndoStack &Diagram::undoStack() {
return(*undo_stack); return(undo_stack);
} }
/// @return le egstionnaire de QGraphicsItem de ce schema /// @return le egstionnaire de QGraphicsItem de ce schema
inline QGIManager &Diagram::qgiManager() { inline QGIManager &Diagram::qgiManager() {
return(*qgi_manager); return(qgi_manager);
} }
/// @return true si les bornes sont affichees, false sinon /// @return true si les bornes sont affichees, false sinon

View File

@@ -81,23 +81,11 @@ AddTextCommand::~AddTextCommand() {
/// Annule l'ajout /// Annule l'ajout
void AddTextCommand::undo() { void AddTextCommand::undo() {
QObject::disconnect(
textitem,
SIGNAL(diagramTextChanged(DiagramTextItem *, const QString &, const QString &)),
diagram,
SLOT(diagramTextChanged(DiagramTextItem *, const QString &, const QString &))
);
diagram -> removeItem(textitem); diagram -> removeItem(textitem);
} }
/// Refait l'ajour /// Refait l'ajour
void AddTextCommand::redo() { void AddTextCommand::redo() {
QObject::connect(
textitem,
SIGNAL(diagramTextChanged(DiagramTextItem *, const QString &, const QString &)),
diagram,
SLOT(diagramTextChanged(DiagramTextItem *, const QString &, const QString &))
);
diagram -> addItem(textitem); diagram -> addItem(textitem);
textitem -> setPos(position); textitem -> setPos(position);
} }
@@ -536,11 +524,13 @@ void ChangeInsetCommand::redo() {
@param dia Schema modifie @param dia Schema modifie
@param parent QUndoCommand parent @param parent QUndoCommand parent
*/ */
ChangeBorderCommand::ChangeBorderCommand(Diagram *dia, const BorderProperties &old_bp, const BorderProperties &new_bp, QUndoCommand *parent) : ChangeBorderCommand::ChangeBorderCommand(Diagram *dia, QUndoCommand *parent) :
QUndoCommand(QObject::tr("modifier les dimensions du sch\351ma"), parent), QUndoCommand(QObject::tr("modifier les dimensions du sch\351ma"), parent),
diagram(dia), diagram(dia),
old_properties(old_bp), columnsCountDifference(0),
new_properties(new_bp) columnsHeightDifference(0.0),
columnsWidthDifference(0.0),
headersHeightDifference(0.0)
{ {
} }
@@ -548,14 +538,39 @@ ChangeBorderCommand::ChangeBorderCommand(Diagram *dia, const BorderProperties &o
ChangeBorderCommand::~ChangeBorderCommand() { ChangeBorderCommand::~ChangeBorderCommand() {
} }
/**
Applique les changements au schema
@param coeff comme les changements s'expriment sous forme de nombres dont
il suffit d'inverser le signe pour les annuler, ces valeurs sont ici
multipliees par le coefficient passe en parametre avant d'etre appliquees.
Pour resumer : 1 pour refaire, -1 pour annuler.
*/
void ChangeBorderCommand::applyChanges(int coeff) {
// reference vers l'objet border_and_inset du schema
BorderInset &border = diagram -> border_and_inset;
if (columnsCountDifference) {
border.setNbColumns(border.nbColumn() + (columnsCountDifference * coeff));
}
if (columnsHeightDifference) {
border.setColumnsHeight(border.columnsHeight() + (columnsHeightDifference * coeff));
}
if (columnsWidthDifference) {
border.setColumnsWidth(border.columnsWidth() + (columnsWidthDifference * coeff));
}
if (headersHeightDifference) {
border.setColumnsHeaderHeight(border.columnsHeaderHeight() + (headersHeightDifference * coeff));
}
border.adjustInsetToColumns();
}
/// Annule les changements apportes au schema /// Annule les changements apportes au schema
void ChangeBorderCommand::undo() { void ChangeBorderCommand::undo() {
diagram -> border_and_inset.importBorder(old_properties); applyChanges(-1);
} }
/// Refait les changements apportes au schema /// Refait les changements apportes au schema
void ChangeBorderCommand::redo() { void ChangeBorderCommand::redo() {
diagram -> border_and_inset.importBorder(new_properties); applyChanges(1);
} }
/** /**

View File

@@ -22,9 +22,7 @@
#include "diagramcontent.h" #include "diagramcontent.h"
#include "diagramtextitem.h" #include "diagramtextitem.h"
#include "conductor.h" #include "conductor.h"
#include "borderproperties.h"
#include "conductorproperties.h" #include "conductorproperties.h"
#include "insetproperties.h"
#include <QtGui> #include <QtGui>
/** /**
Cette classe represente l'action d'ajouter un element au schema Cette classe represente l'action d'ajouter un element au schema
@@ -327,12 +325,16 @@ class ChangeInsetCommand : public QUndoCommand {
}; };
/** /**
Cette classe represente l'action de modifier les dimensions d'un schema Cette classe represente l'action de modifier :
-le nombre de colonnes d'un schema
-la hauteur des colonnes
-la largeur des colonnes
-la hauteur des en-tetes des colonnes
*/ */
class ChangeBorderCommand : public QUndoCommand { class ChangeBorderCommand : public QUndoCommand {
// constructeurs, destructeur // constructeurs, destructeur
public: public:
ChangeBorderCommand(Diagram *, const BorderProperties &, const BorderProperties &, QUndoCommand * = 0); ChangeBorderCommand(Diagram *, QUndoCommand * = 0);
virtual ~ChangeBorderCommand(); virtual ~ChangeBorderCommand();
private: private:
ChangeBorderCommand(const ChangeBorderCommand &); ChangeBorderCommand(const ChangeBorderCommand &);
@@ -341,16 +343,22 @@ class ChangeBorderCommand : public QUndoCommand {
public: public:
virtual void undo(); virtual void undo();
virtual void redo(); virtual void redo();
private:
virtual void applyChanges(int = 1);
// attributs // attributs
private: private:
/// schema modifie /// schema modifie
Diagram *diagram; Diagram *diagram;
public: public:
/// anciennes dimensions du schema /// nombre de colonnes ajoutees / enlevees
BorderProperties old_properties; int columnsCountDifference;
/// nouvelles dimensions du schema /// delta pour la hauteur des colonnes
BorderProperties new_properties; qreal columnsHeightDifference;
/// delta pour la largeur des colonnes
qreal columnsWidthDifference;
/// delta pour la hauteur des entetes des colonnes
qreal headersHeightDifference;
}; };
/** /**

View File

@@ -119,15 +119,12 @@ QString DiagramContent::sentence(int filter) const {
@param d Object QDebug a utiliser pour l'affichage des informations de debug @param d Object QDebug a utiliser pour l'affichage des informations de debug
@param c Contenu de schema a debugger @param c Contenu de schema a debugger
*/ */
QDebug &operator<<(QDebug d, DiagramContent &) { QDebug &operator<<(QDebug d, DiagramContent &c) {
d << "DiagramContent {" << "\n"; d << "DiagramContent {" << "\n";
/*
FIXME Le double-heritage QObject / QGraphicsItem a casse cet operateur
d << " elements :" << c.elements << "\n"; d << " elements :" << c.elements << "\n";
d << " conductorsToUpdate :" << c.conductorsToUpdate.keys() << "\n"; d << " conductorsToUpdate :" << c.conductorsToUpdate.keys() << "\n";
d << " conductorsToMove :" << c.conductorsToMove << "\n"; d << " conductorsToMove :" << c.conductorsToMove << "\n";
d << " otherConductors :" << c.otherConductors << "\n"; d << " otherConductors :" << c.otherConductors << "\n";
*/
d << "}"; d << "}";
return(d.space()); return(d.space());
} }

View File

@@ -31,9 +31,6 @@ DiagramPrintDialog::DiagramPrintDialog(Diagram *dia, QWidget *parent) :
{ {
// initialise l'imprimante // initialise l'imprimante
printer = new QPrinter(); printer = new QPrinter();
// orientation paysage par defaut
printer -> setOrientation(QPrinter::Landscape);
} }
/** /**
@@ -58,35 +55,17 @@ QString DiagramPrintDialog::PDFName() const {
return(pdf_name); return(pdf_name);
} }
/**
Definit le nom du document
*/
void DiagramPrintDialog::setDocName(const QString &name) {
doc_name = name;
}
/**
@return le nom du document
*/
QString DiagramPrintDialog::docName() const {
return(doc_name);
}
/** /**
Execute le dialogue d'impression Execute le dialogue d'impression
*/ */
void DiagramPrintDialog::exec() { void DiagramPrintDialog::exec() {
// affichage du dialogue d'impression standard
QPrintDialog print_dialog(printer);
print_dialog.setEnabledOptions(QAbstractPrintDialog::PrintToFile);
#ifndef Q_OS_WIN32 #ifndef Q_OS_WIN32
if (!pdf_name.isEmpty()) printer -> setOutputFileName(pdf_name); if (!pdf_name.isEmpty()) printer -> setOutputFileName(pdf_name);
if (!doc_name.isEmpty()) printer -> setDocName(doc_name);
#endif #endif
// affichage du dialogue d'impression standard
QPrintDialog print_dialog(printer, parentWidget());
print_dialog.setWindowTitle(tr("Options d'impression"));
print_dialog.setEnabledOptions(QAbstractPrintDialog::PrintToFile | QAbstractPrintDialog::PrintShowPageSize);
if (print_dialog.exec() == QDialog::Rejected) return; if (print_dialog.exec() == QDialog::Rejected) return;
/* /*
@@ -145,28 +124,12 @@ int DiagramPrintDialog::verticalPagesCount(bool fullpage) const {
Construit un dialogue non standard pour demander les pages a imprimer a l'utilisateur Construit un dialogue non standard pour demander les pages a imprimer a l'utilisateur
*/ */
void DiagramPrintDialog::buildDialog() { void DiagramPrintDialog::buildDialog() {
dialog = new QDialog(parentWidget()); dialog = new QDialog();
dialog -> setMinimumWidth(460);
dialog -> setWindowTitle(tr("Options d'impression")); dialog -> setWindowTitle(tr("Options d'impression"));
options_label = new QLabel(); options_label = new QLabel();
use_full_page = new QCheckBox(tr("Utiliser toute la feuille")); use_full_page = new QCheckBox(tr("Utiliser toute la feuille"));
use_full_page_label_ = new QLabel(tr(
"Si cette option est coch\351e, les marges de la feuille seront "
"ignor\351es et toute sa surface sera utilis\351e pour l'impression. "
"Cela peut ne pas \352tre support\351 par votre imprimante."
));
use_full_page_label_ -> setWordWrap(true);
use_full_page_label_ -> setContentsMargins(20, 0, 0, 0);
fit_diagram_to_page = new QCheckBox(tr("Adapter le sch\351ma \340 la page")); fit_diagram_to_page = new QCheckBox(tr("Adapter le sch\351ma \340 la page"));
fit_diagram_to_page_label_ = new QLabel(tr( range_from_label = new QLabel(tr("Plage de "));
"Si cette option est coch\351e, le sch\351ma sera agrandi ou "
"r\351tr\351ci de fa\347on \340 remplir toute la surface imprimable "
"d'une et une seule page."
));
fit_diagram_to_page_label_ -> setWordWrap(true);
fit_diagram_to_page_label_ -> setContentsMargins(20, 0, 0, 0);
fit_diagram_to_page -> setChecked(true);
range_from_label = new QLabel(tr("Pages \340 imprimer : plage de "));
start_page = new QSpinBox(); start_page = new QSpinBox();
to_label = new QLabel(tr(" \340 ")); to_label = new QLabel(tr(" \340 "));
end_page = new QSpinBox(); end_page = new QSpinBox();
@@ -177,14 +140,11 @@ void DiagramPrintDialog::buildDialog() {
pages_layout -> addWidget(start_page); pages_layout -> addWidget(start_page);
pages_layout -> addWidget(to_label); pages_layout -> addWidget(to_label);
pages_layout -> addWidget(end_page); pages_layout -> addWidget(end_page);
pages_layout -> addStretch();
QVBoxLayout *dialog_layout = new QVBoxLayout(dialog); QVBoxLayout *dialog_layout = new QVBoxLayout(dialog);
dialog_layout -> addWidget(options_label); dialog_layout -> addWidget(options_label);
dialog_layout -> addWidget(use_full_page); dialog_layout -> addWidget(use_full_page);
dialog_layout -> addWidget(use_full_page_label_);
dialog_layout -> addWidget(fit_diagram_to_page); dialog_layout -> addWidget(fit_diagram_to_page);
dialog_layout -> addWidget(fit_diagram_to_page_label_);
dialog_layout -> addLayout(pages_layout); dialog_layout -> addLayout(pages_layout);
dialog_layout -> addStretch(); dialog_layout -> addStretch();
dialog_layout -> addWidget(buttons); dialog_layout -> addWidget(buttons);
@@ -267,7 +227,11 @@ void DiagramPrintDialog::print() {
// impression physique (!= fichier PDF) // impression physique (!= fichier PDF)
if (printer -> outputFileName().isEmpty()) { if (printer -> outputFileName().isEmpty()) {
// utiliser cette condition pour agir differemment en cas d'impression physique // lorsqu'on imprime en paysage sur imprimante reelle, il faut pivoter soi-meme le rendu
if (printer -> orientation() == QPrinter::Landscape) {
qp.rotate(90.0);
qp.translate(0.0, -printer -> pageRect().height());
}
} }
diagram -> setDisplayGrid(false); diagram -> setDisplayGrid(false);

View File

@@ -38,8 +38,6 @@ class DiagramPrintDialog : public QWidget {
public: public:
void setPDFName(const QString &); void setPDFName(const QString &);
QString PDFName() const; QString PDFName() const;
void setDocName(const QString &);
QString docName() const;
int pagesCount(bool = false) const; int pagesCount(bool = false) const;
int horizontalPagesCount(bool = false) const; int horizontalPagesCount(bool = false) const;
int verticalPagesCount(bool = false) const; int verticalPagesCount(bool = false) const;
@@ -59,16 +57,13 @@ class DiagramPrintDialog : public QWidget {
private: private:
Diagram *diagram; Diagram *diagram;
QPrinter *printer; QPrinter *printer;
QString doc_name;
QString pdf_name; QString pdf_name;
QDialog *dialog; QDialog *dialog;
QLabel *options_label; QLabel *options_label;
QLabel *range_from_label; QLabel *range_from_label;
QLabel *to_label; QLabel *to_label;
QCheckBox *use_full_page; QCheckBox *use_full_page;
QLabel *use_full_page_label_;
QCheckBox *fit_diagram_to_page; QCheckBox *fit_diagram_to_page;
QLabel *fit_diagram_to_page_label_;
QSpinBox *start_page; QSpinBox *start_page;
QSpinBox *end_page; QSpinBox *end_page;
QDialogButtonBox *buttons; QDialogButtonBox *buttons;

View File

@@ -17,7 +17,6 @@
*/ */
#include "diagramtextitem.h" #include "diagramtextitem.h"
#include "diagramcommands.h" #include "diagramcommands.h"
#include "qetapp.h"
/** /**
Constructeur Constructeur
@@ -28,7 +27,6 @@ DiagramTextItem::DiagramTextItem(QGraphicsItem *parent, QGraphicsScene *scene) :
QGraphicsTextItem(parent, scene) QGraphicsTextItem(parent, scene)
{ {
setDefaultTextColor(Qt::black); setDefaultTextColor(Qt::black);
setFont(QFont(QETApp::diagramTextsFont(), 9));
setFlags(QGraphicsItem::ItemIsSelectable|QGraphicsItem::ItemIsMovable); setFlags(QGraphicsItem::ItemIsSelectable|QGraphicsItem::ItemIsMovable);
connect(this, SIGNAL(lostFocus()), this, SLOT(setNonFocusable())); connect(this, SIGNAL(lostFocus()), this, SLOT(setNonFocusable()));
} }
@@ -44,7 +42,6 @@ DiagramTextItem::DiagramTextItem(const QString &text, QGraphicsItem *parent, QGr
previous_text(text) previous_text(text)
{ {
setDefaultTextColor(Qt::black); setDefaultTextColor(Qt::black);
setFont(QFont(QETApp::diagramTextsFont(), 9));
setFlags(QGraphicsItem::ItemIsSelectable|QGraphicsItem::ItemIsMovable); setFlags(QGraphicsItem::ItemIsSelectable|QGraphicsItem::ItemIsMovable);
connect(this, SIGNAL(lostFocus()), this, SLOT(setNonFocusable())); connect(this, SIGNAL(lostFocus()), this, SLOT(setNonFocusable()));
} }
@@ -63,10 +60,12 @@ Diagram *DiagramTextItem::diagram() const {
*/ */
void DiagramTextItem::focusOutEvent(QFocusEvent *e) { void DiagramTextItem::focusOutEvent(QFocusEvent *e) {
QGraphicsTextItem::focusOutEvent(e); QGraphicsTextItem::focusOutEvent(e);
// signale la modification du texte si besoin // si le texte a ete modifie
if (toPlainText() != previous_text) { if (toPlainText() != previous_text) {
emit(diagramTextChanged(this, previous_text, toPlainText())); if (Diagram *dia = diagram()) {
previous_text = toPlainText(); dia -> undoStack().push(new ChangeDiagramTextCommand(this, previous_text, toPlainText()));
previous_text = toPlainText();
}
} }
// deselectionne le texte // deselectionne le texte
@@ -99,8 +98,8 @@ void DiagramTextItem::fromXml(const QDomElement &e) {
*/ */
QDomElement DiagramTextItem::toXml(QDomDocument &document) const { QDomElement DiagramTextItem::toXml(QDomDocument &document) const {
QDomElement result = document.createElement("input"); QDomElement result = document.createElement("input");
result.setAttribute("x", QString("%1").arg(pos().x())); result.setAttribute("x", pos().x());
result.setAttribute("y", QString("%1").arg(pos().y())); result.setAttribute("y", pos().y());
result.setAttribute("text", toPlainText()); result.setAttribute("text", toPlainText());
return(result); return(result);
} }

View File

@@ -59,9 +59,7 @@ class DiagramTextItem : public QGraphicsTextItem {
signals: signals:
/// signal emis lorsque le champ de texte perd le focus /// signal emis lorsque le champ de texte perd le focus
void lostFocus(); void lostFocus();
/// signal emis lorsque le champ de texte a ete modifie
void diagramTextChanged(DiagramTextItem *, const QString &, const QString &);
// slots // slots
public slots: public slots:
void setNonFocusable(); void setNonFocusable();

View File

@@ -24,14 +24,12 @@
#include "diagramcommands.h" #include "diagramcommands.h"
#include "conductorpropertieswidget.h" #include "conductorpropertieswidget.h"
#include "insetpropertieswidget.h" #include "insetpropertieswidget.h"
#include "borderpropertieswidget.h"
/** /**
Constructeur Constructeur
@param parent Le QWidget parent de cette vue de schema @param parent Le QWidegt parent de cette vue de schema
*/ */
DiagramView::DiagramView(QWidget *parent) : QGraphicsView(parent), is_adding_text(false) { DiagramView::DiagramView(QWidget *parent) : QGraphicsView(parent), is_adding_text(false) {
setAttribute(Qt::WA_DeleteOnClose, true);
setInteractive(true); setInteractive(true);
setCacheMode(QGraphicsView::CacheBackground); setCacheMode(QGraphicsView::CacheBackground);
setOptimizationFlags(QGraphicsView::DontSavePainterState|QGraphicsView::DontAdjustForAntialiasing); setOptimizationFlags(QGraphicsView::DontSavePainterState|QGraphicsView::DontAdjustForAntialiasing);
@@ -58,7 +56,6 @@ DiagramView::DiagramView(QWidget *parent) : QGraphicsView(parent), is_adding_tex
connect(scene, SIGNAL(selectionEmptinessChanged()), this, SIGNAL(selectionChanged())); connect(scene, SIGNAL(selectionEmptinessChanged()), this, SIGNAL(selectionChanged()));
connect(&(scene -> border_and_inset), SIGNAL(borderChanged(QRectF, QRectF)), this, SLOT(adjustSceneRect())); connect(&(scene -> border_and_inset), SIGNAL(borderChanged(QRectF, QRectF)), this, SLOT(adjustSceneRect()));
connect(&(scene -> border_and_inset), SIGNAL(displayChanged()), this, SLOT(adjustSceneRect()));
connect(&(scene -> undoStack()), SIGNAL(cleanChanged(bool)), this, SLOT(updateWindowTitle())); connect(&(scene -> undoStack()), SIGNAL(cleanChanged(bool)), this, SLOT(updateWindowTitle()));
} }
@@ -69,7 +66,7 @@ DiagramView::~DiagramView() {
} }
/** /**
Appelle la methode select sur tous les elements de la liste d'elements appelle la methode select sur tous les elements de la liste d'elements
*/ */
void DiagramView::selectAll() { void DiagramView::selectAll() {
if (scene -> items().isEmpty()) return; if (scene -> items().isEmpty()) return;
@@ -119,7 +116,7 @@ void DiagramView::rotateSelection() {
} }
/** /**
Accepte ou refuse le drag'n drop en fonction du type de donnees entrant accepte ou refuse le drag'n drop en fonction du type de donnees entrant
@param e le QDragEnterEvent correspondant au drag'n drop tente @param e le QDragEnterEvent correspondant au drag'n drop tente
*/ */
void DiagramView::dragEnterEvent(QDragEnterEvent *e) { void DiagramView::dragEnterEvent(QDragEnterEvent *e) {
@@ -128,14 +125,14 @@ void DiagramView::dragEnterEvent(QDragEnterEvent *e) {
} }
/** /**
Gere les dragleaveevent gere les dragleaveevent
@param e le QDragEnterEvent correspondant au drag'n drop sortant @param e le QDragEnterEvent correspondant au drag'n drop sortant
*/ */
void DiagramView::dragLeaveEvent(QDragLeaveEvent *) { void DiagramView::dragLeaveEvent(QDragLeaveEvent *) {
} }
/** /**
Accepte ou refuse le drag'n drop en fonction du type de donnees entrant accepte ou refuse le drag'n drop en fonction du type de donnees entrant
@param e le QDragMoveEvent correspondant au drag'n drop tente @param e le QDragMoveEvent correspondant au drag'n drop tente
*/ */
void DiagramView::dragMoveEvent(QDragMoveEvent *e) { void DiagramView::dragMoveEvent(QDragMoveEvent *e) {
@@ -144,7 +141,7 @@ void DiagramView::dragMoveEvent(QDragMoveEvent *e) {
} }
/** /**
Gere les depots (drop) acceptes sur le Diagram gere les depots (drop) acceptes sur le Diagram
@param e le QDropEvent correspondant au drag'n drop effectue @param e le QDropEvent correspondant au drag'n drop effectue
*/ */
void DiagramView::dropEvent(QDropEvent *e) { void DiagramView::dropEvent(QDropEvent *e) {
@@ -212,7 +209,7 @@ void DiagramView::zoomReset() {
} }
/** /**
Copie les elements selectionnes du schema dans le presse-papier puis les supprime copie les elements selectionnes du schema dans le presse-papier puis les supprime
*/ */
void DiagramView::cut() { void DiagramView::cut() {
copy(); copy();
@@ -222,7 +219,7 @@ void DiagramView::cut() {
} }
/** /**
Copie les elements selectionnes du schema dans le presse-papier copie les elements selectionnes du schema dans le presse-papier
*/ */
void DiagramView::copy() { void DiagramView::copy() {
QClipboard *presse_papier = QApplication::clipboard(); QClipboard *presse_papier = QApplication::clipboard();
@@ -262,17 +259,20 @@ void DiagramView::pasteHere() {
} }
/** /**
Gere les clics et plus particulierement : gere les clics et plus particulierement le clic du milieu (= coller pour X11)
* le clic du milieu (= coller pour X11)
* le clic pour ajouter un champ de texte independant
*/ */
void DiagramView::mousePressEvent(QMouseEvent *e) { void DiagramView::mousePressEvent(QMouseEvent *e) {
if (e -> buttons() == Qt::MidButton) { if (e -> buttons() == Qt::MidButton) {
paste(mapToScene(e -> pos()), QClipboard::Selection); paste(mapToScene(e -> pos()), QClipboard::Selection);
} else { } else {
if (is_adding_text && e -> buttons() == Qt::LeftButton) { if (is_adding_text && e -> buttons() == Qt::LeftButton) {
addDiagramTextAtPos(mapToScene(e -> pos())); DiagramTextItem *dti = new DiagramTextItem();
dti -> setPlainText("_");
dti -> previous_text = "_";
scene -> undoStack().push(new AddTextCommand(scene, dti, e -> pos()));
adjustSceneRect();
is_adding_text = false; is_adding_text = false;
emit(textAdded(false));
} }
QGraphicsView::mousePressEvent(e); QGraphicsView::mousePressEvent(e);
} }
@@ -340,7 +340,7 @@ bool DiagramView::open(QString n_fichier, int *erreur) {
qreal diagram_version = root.attribute("version").toDouble(&conv_ok); qreal diagram_version = root.attribute("version").toDouble(&conv_ok);
if (conv_ok && QET::version.toDouble() < diagram_version) { if (conv_ok && QET::version.toDouble() < diagram_version) {
QMessageBox::warning( QMessageBox::warning(
this, 0,
tr("Avertissement"), tr("Avertissement"),
tr("Ce document semble avoir \351t\351 enregistr\351 avec une " tr("Ce document semble avoir \351t\351 enregistr\351 avec une "
"version ult\351rieure de QElectroTech. Il est possible que " "version ult\351rieure de QElectroTech. Il est possible que "
@@ -425,8 +425,10 @@ void DiagramView::closeEvent(QCloseEvent *event) {
default: retour = true; // l'utilisateur dit non ou ferme le dialogue: c'est reussi default: retour = true; // l'utilisateur dit non ou ferme le dialogue: c'est reussi
} }
} }
if (retour) event -> accept(); if (retour) {
else event -> ignore(); event -> accept();
delete this;
} else event -> ignore();
} }
@@ -521,7 +523,7 @@ bool DiagramView::saveDiagramToFile(QString &n_fichier) {
Exporte le schema. Exporte le schema.
*/ */
void DiagramView::dialogExport() { void DiagramView::dialogExport() {
ExportDialog ed(scene, diagramEditor()); ExportDialog ed(scene, this);
ed.exec(); ed.exec();
} }
@@ -530,21 +532,17 @@ void DiagramView::dialogExport() {
*/ */
void DiagramView::dialogPrint() { void DiagramView::dialogPrint() {
// determine un nom possible pour le document et le pdf // determine un nom possible pour le pdf
QString doc_name;
QString pdf_file_name; QString pdf_file_name;
if (!file_name.isEmpty()) { if (!file_name.isEmpty()) {
doc_name = QFileInfo(file_name).fileName();
pdf_file_name = file_name; pdf_file_name = file_name;
pdf_file_name.replace(QRegExp("\\.qet$", Qt::CaseInsensitive), ""); pdf_file_name.replace(QRegExp("\\.qet$", Qt::CaseInsensitive), "");
} else { } else {
doc_name = tr("schema"); pdf_file_name = QDir::homePath() + tr("schema");
pdf_file_name = QDir::toNativeSeparators(QDir::homePath() + "/" + tr("schema"));
} }
pdf_file_name += ".pdf"; pdf_file_name += ".pdf";
DiagramPrintDialog print_dialog(scene, this); DiagramPrintDialog print_dialog(scene, this);
print_dialog.setDocName(doc_name);
print_dialog.setPDFName(pdf_file_name); print_dialog.setPDFName(pdf_file_name);
print_dialog.exec(); print_dialog.exec();
} }
@@ -553,17 +551,53 @@ void DiagramView::dialogPrint() {
Edite les informations du schema. Edite les informations du schema.
*/ */
void DiagramView::dialogEditInfos() { void DiagramView::dialogEditInfos() {
// recupere le cartouche et les dimensions du schema // recupere le cartouche du schema
InsetProperties inset = scene -> border_and_inset.exportInset(); InsetProperties inset = scene -> border_and_inset.exportInset();
BorderProperties border = scene -> border_and_inset.exportBorder();
// recupere les dimensions du schema
int columns_count_value = scene -> border_and_inset.nbColumn();
int columns_width_value = qRound(scene -> border_and_inset.columnsWidth());
int columns_height_value = qRound(scene -> border_and_inset.columnsHeight());
// construit le dialogue // construit le dialogue
QDialog popup(diagramEditor()); QDialog popup;
popup.setMinimumWidth(400); popup.setMinimumWidth(400);
popup.setWindowTitle(tr("Propri\351t\351s du sch\351ma")); popup.setWindowTitle(tr("Propri\351t\351s du sch\351ma"));
BorderPropertiesWidget *border_infos = new BorderPropertiesWidget(border, &popup); QGroupBox *diagram_size_box = new QGroupBox(tr("Dimensions du sch\351ma"), &popup);
InsetPropertiesWidget *inset_infos = new InsetPropertiesWidget(inset, false, &popup); QGridLayout diagram_size_box_layout(diagram_size_box);
QLabel *ds1 = new QLabel(tr("Colonnes :"));
QSpinBox *columns_count = new QSpinBox(diagram_size_box);
columns_count -> setMinimum(scene -> border_and_inset.minNbColumns());
columns_count -> setValue(columns_count_value);
QSpinBox *columns_width = new QSpinBox(diagram_size_box);
columns_width -> setMinimum(1);
columns_width -> setSingleStep(10);
columns_width -> setValue(columns_width_value);
columns_width -> setPrefix(tr("\327"));
columns_width -> setSuffix(tr("px"));
QLabel *ds2 = new QLabel(tr("Hauteur :"));
QSpinBox *columns_height = new QSpinBox(diagram_size_box);
columns_height -> setRange(qRound(scene -> border_and_inset.minColumnsHeight()), 10000);
columns_height -> setSingleStep(80);
columns_height -> setValue(columns_height_value);
diagram_size_box_layout.addWidget(ds1, 0, 0);
diagram_size_box_layout.addWidget(columns_count, 0, 1);
diagram_size_box_layout.addWidget(columns_width, 0, 2);
diagram_size_box_layout.addWidget(ds2, 1, 0);
diagram_size_box_layout.addWidget(columns_height, 1, 1);
diagram_size_box_layout.setColumnStretch(0, 1);
diagram_size_box_layout.setColumnStretch(1, 1);
diagram_size_box_layout.setColumnStretch(2, 1);
diagram_size_box_layout.setColumnStretch(3, 500);
InsetPropertiesWidget *inset_infos = new InsetPropertiesWidget(inset, false, &popup);
// boutons // boutons
QDialogButtonBox boutons(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); QDialogButtonBox boutons(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
@@ -572,22 +606,30 @@ void DiagramView::dialogEditInfos() {
// ajout dans une disposition verticale // ajout dans une disposition verticale
QVBoxLayout layout_v(&popup); QVBoxLayout layout_v(&popup);
layout_v.addWidget(border_infos); layout_v.addWidget(diagram_size_box);
layout_v.addWidget(inset_infos); layout_v.addWidget(inset_infos);
layout_v.addStretch(); layout_v.addStretch();
layout_v.addWidget(&boutons); layout_v.addWidget(&boutons);
// si le dialogue est accepte // si le dialogue est accepte
if (popup.exec() == QDialog::Accepted) { if (popup.exec() == QDialog::Accepted) {
InsetProperties new_inset = inset_infos -> insetProperties(); InsetProperties new_inset = inset_infos -> insetProperties();
BorderProperties new_border = border_infos -> borderProperties();
// s'il y a des modifications au cartouche // s'il y a des modifications au cartouche
if (new_inset != inset) { if (new_inset != inset) {
scene -> undoStack().push(new ChangeInsetCommand(scene, inset, new_inset)); scene -> undoStack().push(new ChangeInsetCommand(scene, inset, new_inset));
} }
// s'il y a des modifications aux dimensions du schema // s'il y a des modifications aux dimensions du schema
if (new_border != border) { if (
scene -> undoStack().push(new ChangeBorderCommand(scene, border, new_border)); columns_count_value != columns_count -> value() ||\
columns_width_value != columns_width -> value() ||\
columns_height_value != columns_height -> value()
) {
ChangeBorderCommand *cbc = new ChangeBorderCommand(scene);
cbc -> columnsCountDifference = columns_count -> value() - columns_count_value;
cbc -> columnsWidthDifference = columns_width -> value() - columns_width_value;
cbc -> columnsHeightDifference = columns_height -> value() - columns_height_value;
scene -> undoStack().push(cbc);
} }
} }
} }
@@ -603,40 +645,36 @@ bool DiagramView::hasSelectedItems() {
Ajoute une colonne au schema. Ajoute une colonne au schema.
*/ */
void DiagramView::addColumn() { void DiagramView::addColumn() {
BorderProperties old_bp = scene -> border_and_inset.exportBorder(); ChangeBorderCommand *cbc = new ChangeBorderCommand(scene);
BorderProperties new_bp = scene -> border_and_inset.exportBorder(); cbc -> columnsCountDifference = 1;
new_bp.columns_count += 1; scene -> undoStack().push(cbc);
scene -> undoStack().push(new ChangeBorderCommand(scene, old_bp, new_bp));
} }
/** /**
Enleve une colonne au schema. Enleve une colonne au schema.
*/ */
void DiagramView::removeColumn() { void DiagramView::removeColumn() {
BorderProperties old_bp = scene -> border_and_inset.exportBorder(); ChangeBorderCommand *cbc = new ChangeBorderCommand(scene);
BorderProperties new_bp = scene -> border_and_inset.exportBorder(); cbc -> columnsCountDifference = -1;
new_bp.columns_count -= 1; scene -> undoStack().push(cbc);
scene -> undoStack().push(new ChangeBorderCommand(scene, old_bp, new_bp));
} }
/** /**
Agrandit le schema en hauteur Agrandit le schema en hauteur
*/ */
void DiagramView::addRow() { void DiagramView::expand() {
BorderProperties old_bp = scene -> border_and_inset.exportBorder(); ChangeBorderCommand *cbc = new ChangeBorderCommand(scene);
BorderProperties new_bp = scene -> border_and_inset.exportBorder(); cbc -> columnsHeightDifference = 80.0;
new_bp.rows_count += 1; scene -> undoStack().push(cbc);
scene -> undoStack().push(new ChangeBorderCommand(scene, old_bp, new_bp));
} }
/** /**
Retrecit le schema en hauteur Retrecit le schema en hauteur
*/ */
void DiagramView::removeRow() { void DiagramView::shrink() {
BorderProperties old_bp = scene -> border_and_inset.exportBorder(); ChangeBorderCommand *cbc = new ChangeBorderCommand(scene);
BorderProperties new_bp = scene -> border_and_inset.exportBorder(); cbc -> columnsHeightDifference = -80.0;
new_bp.rows_count -= 1; scene -> undoStack().push(cbc);
scene -> undoStack().push(new ChangeBorderCommand(scene, old_bp, new_bp));
} }
/** /**
@@ -725,7 +763,7 @@ void DiagramView::editConductor(Conductor *edited_conductor) {
ConductorPropertiesWidget *cpw = new ConductorPropertiesWidget(old_properties); ConductorPropertiesWidget *cpw = new ConductorPropertiesWidget(old_properties);
// l'insere dans un dialogue // l'insere dans un dialogue
QDialog conductor_dialog(diagramEditor()); QDialog conductor_dialog;
conductor_dialog.setWindowTitle(tr("\311diter les propri\351t\351s d'un conducteur")); conductor_dialog.setWindowTitle(tr("\311diter les propri\351t\351s d'un conducteur"));
QVBoxLayout *dialog_layout = new QVBoxLayout(&conductor_dialog); QVBoxLayout *dialog_layout = new QVBoxLayout(&conductor_dialog);
dialog_layout -> addWidget(cpw); dialog_layout -> addWidget(cpw);
@@ -784,7 +822,7 @@ void DiagramView::editDefaultConductorProperties() {
ConductorPropertiesWidget *cpw = new ConductorPropertiesWidget(scene -> defaultConductorProperties); ConductorPropertiesWidget *cpw = new ConductorPropertiesWidget(scene -> defaultConductorProperties);
// l'insere dans un dialogue // l'insere dans un dialogue
QDialog conductor_dialog(diagramEditor()); QDialog conductor_dialog;
conductor_dialog.setWindowTitle(tr("\311diter les propri\351t\351s par d\351faut des conducteurs")); conductor_dialog.setWindowTitle(tr("\311diter les propri\351t\351s par d\351faut des conducteurs"));
QVBoxLayout *dialog_layout = new QVBoxLayout(&conductor_dialog); QVBoxLayout *dialog_layout = new QVBoxLayout(&conductor_dialog);
dialog_layout -> addWidget(cpw); dialog_layout -> addWidget(cpw);
@@ -821,28 +859,6 @@ void DiagramView::addText() {
is_adding_text = true; is_adding_text = true;
} }
/**
Cree un nouveau champ de texte et le place a la position pos
en gerant l'annulation ; enfin, le signal textAdded est emis.
@param pos Position du champ de texte ajoute
@return le champ de texte ajoute
*/
DiagramTextItem *DiagramView::addDiagramTextAtPos(const QPointF &pos) {
// cree un nouveau champ de texte
DiagramTextItem *dti = new DiagramTextItem();
dti -> setPlainText("_");
dti -> previous_text = "_";
// le place a la position pos en gerant l'annulation
scene -> undoStack().push(new AddTextCommand(scene, dti, pos));
adjustSceneRect();
// emet le signal textAdded
emit(textAdded(false));
return(dti);
}
/** /**
Gere le menu contextuel Gere le menu contextuel
@param e Evenement decrivant la demande de menu contextuel @param e Evenement decrivant la demande de menu contextuel
@@ -863,8 +879,8 @@ void DiagramView::contextMenuEvent(QContextMenuEvent *e) {
context_menu -> addAction(qde -> infos_diagram); context_menu -> addAction(qde -> infos_diagram);
context_menu -> addAction(qde -> add_column); context_menu -> addAction(qde -> add_column);
context_menu -> addAction(qde -> remove_column); context_menu -> addAction(qde -> remove_column);
context_menu -> addAction(qde -> add_row); context_menu -> addAction(qde -> expand_diagram);
context_menu -> addAction(qde -> remove_row); context_menu -> addAction(qde -> shrink_diagram);
} else { } else {
context_menu -> addAction(qde -> cut); context_menu -> addAction(qde -> cut);
context_menu -> addAction(qde -> copy); context_menu -> addAction(qde -> copy);
@@ -902,7 +918,7 @@ void DiagramView::mouseDoubleClickEvent(QMouseEvent *e) {
// recupere le rectangle corespondant au cartouche // recupere le rectangle corespondant au cartouche
QRectF inset_rect( QRectF inset_rect(
Diagram::margin, Diagram::margin,
Diagram::margin + bi.diagramHeight(), Diagram::margin + bi.columnsHeight(),
bi.insetWidth(), bi.insetWidth(),
bi.insetHeight() bi.insetHeight()
); );
@@ -915,14 +931,6 @@ void DiagramView::mouseDoubleClickEvent(QMouseEvent *e) {
bi.columnsHeaderHeight() bi.columnsHeaderHeight()
); );
// recupere le rectangle correspondant aux en-tetes des lignes
QRectF rows_rect(
Diagram::margin,
Diagram::margin,
bi.rowsHeaderWidth(),
bi.diagramHeight()
);
// coordonnees du clic par rapport au schema // coordonnees du clic par rapport au schema
QPointF click_pos = viewportTransform().inverted().map(e -> pos()); QPointF click_pos = viewportTransform().inverted().map(e -> pos());
@@ -933,7 +941,7 @@ void DiagramView::mouseDoubleClickEvent(QMouseEvent *e) {
} else { } else {
QGraphicsView::mouseDoubleClickEvent(e); QGraphicsView::mouseDoubleClickEvent(e);
} }
} else if (inset_rect.contains(click_pos) || columns_rect.contains(click_pos) || rows_rect.contains(click_pos)) { } else if (inset_rect.contains(click_pos) || columns_rect.contains(click_pos)) {
// edite les proprietes du schema // edite les proprietes du schema
dialogEditInfos(); dialogEditInfos();
} else { } else {

View File

@@ -19,7 +19,6 @@
#define DIAGRAMVIEW_H #define DIAGRAMVIEW_H
#include <QtGui> #include <QtGui>
class Diagram; class Diagram;
class DiagramTextItem;
class QETDiagramEditor; class QETDiagramEditor;
class Conductor; class Conductor;
/** /**
@@ -59,14 +58,13 @@ class DiagramView : public QGraphicsView {
void dialogPrint(); void dialogPrint();
void addColumn(); void addColumn();
void removeColumn(); void removeColumn();
void addRow(); void expand();
void removeRow(); void shrink();
/// @return Le schema visualise par ce DiagramView /// @return Le schema visualise par ce DiagramView
Diagram *diagram() { return(scene); } Diagram *diagram() { return(scene); }
QETDiagramEditor *diagramEditor() const; QETDiagramEditor *diagramEditor() const;
bool hasSelectedItems(); bool hasSelectedItems();
void addText(); void addText();
DiagramTextItem *addDiagramTextAtPos(const QPointF &);
protected: protected:
virtual void mouseDoubleClickEvent(QMouseEvent *); virtual void mouseDoubleClickEvent(QMouseEvent *);

View File

@@ -536,8 +536,9 @@ void ElementScene::slot_delete() {
*/ */
void ElementScene::slot_editSizeHotSpot() { void ElementScene::slot_editSizeHotSpot() {
// cree un dialogue // cree un dialogue
QDialog dialog_sh(element_editor); QDialog dialog_sh;
dialog_sh.setModal(true); dialog_sh.setModal(true);
dialog_sh.setMinimumSize(400, 230);
dialog_sh.setWindowTitle(tr("\311diter la taille et le point de saisie")); dialog_sh.setWindowTitle(tr("\311diter la taille et le point de saisie"));
QVBoxLayout *dialog_layout = new QVBoxLayout(&dialog_sh); QVBoxLayout *dialog_layout = new QVBoxLayout(&dialog_sh);
@@ -575,7 +576,7 @@ void ElementScene::slot_editSizeHotSpot() {
void ElementScene::slot_editOrientations() { void ElementScene::slot_editOrientations() {
// cree un dialogue // cree un dialogue
QDialog dialog_ori(element_editor); QDialog dialog_ori;
dialog_ori.setModal(true); dialog_ori.setModal(true);
dialog_ori.setMinimumSize(400, 260); dialog_ori.setMinimumSize(400, 260);
dialog_ori.setWindowTitle(tr("\311diter les orientations")); dialog_ori.setWindowTitle(tr("\311diter les orientations"));
@@ -621,7 +622,7 @@ void ElementScene::slot_editOrientations() {
void ElementScene::slot_editNames() { void ElementScene::slot_editNames() {
// cree un dialogue // cree un dialogue
QDialog dialog(element_editor); QDialog dialog;
dialog.setModal(true); dialog.setModal(true);
dialog.setMinimumSize(400, 330); dialog.setMinimumSize(400, 330);
dialog.setWindowTitle(tr("\311diter les noms")); dialog.setWindowTitle(tr("\311diter les noms"));

View File

@@ -80,12 +80,12 @@ void PartArc::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget
const QDomElement PartArc::toXml(QDomDocument &xml_document) const { const QDomElement PartArc::toXml(QDomDocument &xml_document) const {
QDomElement xml_element = xml_document.createElement("arc"); QDomElement xml_element = xml_document.createElement("arc");
QPointF top_left(sceneTopLeft()); QPointF top_left(sceneTopLeft());
xml_element.setAttribute("x", QString("%1").arg(top_left.x())); xml_element.setAttribute("x", top_left.x());
xml_element.setAttribute("y", QString("%1").arg(top_left.y())); xml_element.setAttribute("y", top_left.y());
xml_element.setAttribute("width", QString("%1").arg(rect().width())); xml_element.setAttribute("width", rect().width());
xml_element.setAttribute("height", QString("%1").arg(rect().height())); xml_element.setAttribute("height", rect().height());
xml_element.setAttribute("start", QString("%1").arg(start_angle)); xml_element.setAttribute("start", start_angle);
xml_element.setAttribute("angle", QString("%1").arg(_angle)); xml_element.setAttribute("angle", _angle);
stylesToXml(xml_element); stylesToXml(xml_element);
return(xml_element); return(xml_element);
} }

View File

@@ -68,9 +68,9 @@ void PartCircle::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWid
const QDomElement PartCircle::toXml(QDomDocument &xml_document) const { const QDomElement PartCircle::toXml(QDomDocument &xml_document) const {
QDomElement xml_element = xml_document.createElement("circle"); QDomElement xml_element = xml_document.createElement("circle");
QPointF top_left(sceneTopLeft()); QPointF top_left(sceneTopLeft());
xml_element.setAttribute("x", QString("%1").arg(top_left.x())); xml_element.setAttribute("x", top_left.x());
xml_element.setAttribute("y", QString("%1").arg(top_left.y())); xml_element.setAttribute("y", top_left.y());
xml_element.setAttribute("diameter", QString("%1").arg(rect().width())); xml_element.setAttribute("diameter", rect().width());
stylesToXml(xml_element); stylesToXml(xml_element);
return(xml_element); return(xml_element);
} }

View File

@@ -68,10 +68,10 @@ void PartEllipse::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWi
const QDomElement PartEllipse::toXml(QDomDocument &xml_document) const { const QDomElement PartEllipse::toXml(QDomDocument &xml_document) const {
QDomElement xml_element = xml_document.createElement("ellipse"); QDomElement xml_element = xml_document.createElement("ellipse");
QPointF top_left(sceneTopLeft()); QPointF top_left(sceneTopLeft());
xml_element.setAttribute("x", QString("%1").arg(top_left.x())); xml_element.setAttribute("x", top_left.x());
xml_element.setAttribute("y", QString("%1").arg(top_left.y())); xml_element.setAttribute("y", top_left.y());
xml_element.setAttribute("width", QString("%1").arg(rect().width())); xml_element.setAttribute("width", rect().width());
xml_element.setAttribute("height", QString("%1").arg(rect().height())); xml_element.setAttribute("height", rect().height());
stylesToXml(xml_element); stylesToXml(xml_element);
return(xml_element); return(xml_element);
} }

View File

@@ -66,10 +66,10 @@ const QDomElement PartLine::toXml(QDomDocument &xml_document) const {
QPointF p2(sceneP2()); QPointF p2(sceneP2());
QDomElement xml_element = xml_document.createElement("line"); QDomElement xml_element = xml_document.createElement("line");
xml_element.setAttribute("x1", QString("%1").arg(p1.x())); xml_element.setAttribute("x1", p1.x());
xml_element.setAttribute("y1", QString("%1").arg(p1.y())); xml_element.setAttribute("y1", p1.y());
xml_element.setAttribute("x2", QString("%1").arg(p2.x())); xml_element.setAttribute("x2", p2.x());
xml_element.setAttribute("y2", QString("%1").arg(p2.y())); xml_element.setAttribute("y2", p2.y());
stylesToXml(xml_element); stylesToXml(xml_element);
return(xml_element); return(xml_element);
} }

View File

@@ -97,7 +97,7 @@ void PolygonEditor::updatePolygonClosedState() {
*/ */
void PolygonEditor::updateForm() { void PolygonEditor::updateForm() {
activeConnections(false); activeConnections(false);
while(points_list.takeTopLevelItem(0)) {} while(points_list.takeTopLevelItem(0));
foreach(QPointF point, part -> polygon()) { foreach(QPointF point, part -> polygon()) {
point = part -> mapToScene(point); point = part -> mapToScene(point);
QStringList qsl; QStringList qsl;

View File

@@ -22,7 +22,6 @@
#include "customelementpart.h" #include "customelementpart.h"
#include "newelementwizard.h" #include "newelementwizard.h"
#include "elementitemeditor.h" #include "elementitemeditor.h"
#include "recentfiles.h"
/** /**
Constructeur Constructeur
@@ -261,8 +260,6 @@ void QETElementEditor::setupMenus() {
file_menu -> addAction(new_element); file_menu -> addAction(new_element);
file_menu -> addAction(open); file_menu -> addAction(open);
file_menu -> addMenu(QETApp::elementsRecentFiles() -> menu());
connect(QETApp::elementsRecentFiles(), SIGNAL(fileOpeningRequested(const QString &)), this, SLOT(openRecentFile(const QString &)));
file_menu -> addAction(save); file_menu -> addAction(save);
file_menu -> addAction(save_as); file_menu -> addAction(save_as);
file_menu -> addSeparator(); file_menu -> addSeparator();
@@ -523,7 +520,6 @@ void QETElementEditor::fromFile(const QString &filepath) {
// memorise le fichier // memorise le fichier
setFileName(filepath); setFileName(filepath);
QETApp::elementsRecentFiles() -> fileWasOpened(filepath);
slot_updateMenus(); slot_updateMenus();
} }
@@ -582,12 +578,12 @@ bool QETElementEditor::isReadOnly() const {
Lance l'assistant de creation d'un nouvel element. Lance l'assistant de creation d'un nouvel element.
*/ */
void QETElementEditor::slot_new() { void QETElementEditor::slot_new() {
NewElementWizard new_element_wizard(this); NewElementWizard new_element_wizard;
new_element_wizard.exec(); new_element_wizard.exec();
} }
/** /**
Demande un fichier a l'utilisateur et ouvre ce fichier Ouvre un fichier
*/ */
void QETElementEditor::slot_open() { void QETElementEditor::slot_open() {
// demande un nom de fichier a ouvrir a l'utilisateur // demande un nom de fichier a ouvrir a l'utilisateur
@@ -597,30 +593,9 @@ void QETElementEditor::slot_open() {
_filename.isEmpty() ? QETApp::customElementsDir() : QDir(_filename).absolutePath(), _filename.isEmpty() ? QETApp::customElementsDir() : QDir(_filename).absolutePath(),
tr("\311l\351ments QElectroTech (*.elmt);;Fichiers XML (*.xml);;Tous les fichiers (*)") tr("\311l\351ments QElectroTech (*.elmt);;Fichiers XML (*.xml);;Tous les fichiers (*)")
); );
openElement(user_filename); if (user_filename.isEmpty()) return;
}
/**
Slot utilise pour ouvrir un fichier recent.
Transfere filepath au slot openElement seulement si cet editeur est actif
@param filepath Fichier a ouvrir
@see openElement
*/
void QETElementEditor::openRecentFile(const QString &filepath) {
if (qApp -> activeWindow() != this) return;
openElement(filepath);
}
/**
Ouvre un fichier element dans un nouvel editeur
Cette methode ne controle pas si le fichier est deja ouvert
@param filepath Fichier a ouvrir
@see fromFile
*/
void QETElementEditor::openElement(const QString &filepath) {
if (filepath.isEmpty()) return;
QETElementEditor *cee = new QETElementEditor(); QETElementEditor *cee = new QETElementEditor();
cee -> fromFile(filepath); cee -> fromFile(user_filename);
cee -> show(); cee -> show();
} }
@@ -684,7 +659,6 @@ bool QETElementEditor::slot_saveAs() {
// si l'enregistrement reussit, le nom du fichier est conserve // si l'enregistrement reussit, le nom du fichier est conserve
if (result_save) { if (result_save) {
setFileName(fn); setFileName(fn);
QETApp::elementsRecentFiles() -> fileWasOpened(fn);
ce_scene -> undoStack().setClean(); ce_scene -> undoStack().setClean();
} }
// retourne un booleen representatif de la reussite de l'enregistrement // retourne un booleen representatif de la reussite de l'enregistrement

View File

@@ -106,8 +106,6 @@ class QETElementEditor : public QMainWindow {
public slots: public slots:
void slot_new(); void slot_new();
void slot_open(); void slot_open();
void openRecentFile(const QString &);
void openElement(const QString &);
void slot_reload(); void slot_reload();
bool slot_save(); bool slot_save();
bool slot_saveAs(); bool slot_saveAs();

View File

@@ -27,7 +27,6 @@
Constructeur pour un element sans scene ni parent Constructeur pour un element sans scene ni parent
*/ */
Element::Element(QGraphicsItem *parent, Diagram *scene) : Element::Element(QGraphicsItem *parent, Diagram *scene) :
QObject(),
QGraphicsItem(parent, scene), QGraphicsItem(parent, scene),
internal_connections(false) internal_connections(false)
{ {
@@ -50,7 +49,7 @@ void Element::paint(QPainter *painter, const QStyleOptionGraphicsItem *options,
#ifdef Q_WS_X11 #ifdef Q_WS_X11
// corrige un bug de rendu ne se produisant que lors du rendu sur QGraphicsScene sous X11 au zoom par defaut // corrige un bug de rendu ne se produisant que lors du rendu sur QGraphicsScene sous X11 au zoom par defaut
static bool must_correct_rendering_bug = QETApp::settings().value("correct-rendering", false).toBool(); static bool must_correct_rendering_bug = QETApp::settings().value("correct-rendering", true).toBool();
if (must_correct_rendering_bug) { if (must_correct_rendering_bug) {
Diagram *dia = diagram(); Diagram *dia = diagram();
if (dia && options -> levelOfDetail == 1.0 && widget) { if (dia && options -> levelOfDetail == 1.0 && widget) {
@@ -156,7 +155,7 @@ bool Element::setOrientation(QET::Orientation o) {
rotate(rotation_value); rotate(rotation_value);
ori.setCurrent(o); ori.setCurrent(o);
update(); update();
foreach(QGraphicsItem *qgi, childItems()) { foreach(QGraphicsItem *qgi, children()) {
if (Terminal *p = qgraphicsitem_cast<Terminal *>(qgi)) p -> updateConductor(); if (Terminal *p = qgraphicsitem_cast<Terminal *>(qgi)) p -> updateConductor();
else if (ElementTextItem *eti = qgraphicsitem_cast<ElementTextItem *>(qgi)) { else if (ElementTextItem *eti = qgraphicsitem_cast<ElementTextItem *>(qgi)) {
// applique une rotation contraire si besoin // applique une rotation contraire si besoin
@@ -355,7 +354,7 @@ bool Element::fromXml(QDomElement &e, QHash<int, Terminal *> &table_id_adr) {
QHash<int, Terminal *> priv_id_adr; QHash<int, Terminal *> priv_id_adr;
int terminals_non_trouvees = 0; int terminals_non_trouvees = 0;
foreach(QGraphicsItem *qgi, childItems()) { foreach(QGraphicsItem *qgi, children()) {
if (Terminal *p = qgraphicsitem_cast<Terminal *>(qgi)) { if (Terminal *p = qgraphicsitem_cast<Terminal *>(qgi)) {
bool terminal_trouvee = false; bool terminal_trouvee = false;
foreach(QDomElement qde, liste_terminals) { foreach(QDomElement qde, liste_terminals) {
@@ -387,7 +386,7 @@ bool Element::fromXml(QDomElement &e, QHash<int, Terminal *> &table_id_adr) {
// importe les valeurs des champs de texte // importe les valeurs des champs de texte
QList<QDomElement> inputs = QET::findInDomElement(e, "inputs", "input"); QList<QDomElement> inputs = QET::findInDomElement(e, "inputs", "input");
foreach(QGraphicsItem *qgi, childItems()) { foreach(QGraphicsItem *qgi, children()) {
if (ElementTextItem *eti = qgraphicsitem_cast<ElementTextItem *>(qgi)) { if (ElementTextItem *eti = qgraphicsitem_cast<ElementTextItem *>(qgi)) {
foreach(QDomElement input, inputs) eti -> fromXml(input); foreach(QDomElement input, inputs) eti -> fromXml(input);
} }
@@ -421,8 +420,8 @@ QDomElement Element::toXml(QDomDocument &document, QHash<Terminal *, int> &table
element.setAttribute("type", type_elmt); element.setAttribute("type", type_elmt);
// position, selection et orientation // position, selection et orientation
element.setAttribute("x", QString("%1").arg(pos().x())); element.setAttribute("x", pos().x());
element.setAttribute("y", QString("%1").arg(pos().y())); element.setAttribute("y", pos().y());
element.setAttribute("orientation", QString("%1").arg(ori.current())); element.setAttribute("orientation", QString("%1").arg(ori.current()));
/* recupere le premier id a utiliser pour les bornes de cet element */ /* recupere le premier id a utiliser pour les bornes de cet element */
@@ -439,7 +438,7 @@ QDomElement Element::toXml(QDomDocument &document, QHash<Terminal *, int> &table
// enregistrement des bornes de l'appareil // enregistrement des bornes de l'appareil
QDomElement terminals = document.createElement("terminals"); QDomElement terminals = document.createElement("terminals");
// pour chaque enfant de l'element // pour chaque enfant de l'element
foreach(QGraphicsItem *child, childItems()) { foreach(QGraphicsItem *child, children()) {
// si cet enfant est une borne // si cet enfant est une borne
if (Terminal *t = qgraphicsitem_cast<Terminal *>(child)) { if (Terminal *t = qgraphicsitem_cast<Terminal *>(child)) {
// alors on enregistre la borne // alors on enregistre la borne
@@ -454,7 +453,7 @@ QDomElement Element::toXml(QDomDocument &document, QHash<Terminal *, int> &table
// enregistrement des champ de texte de l'appareil // enregistrement des champ de texte de l'appareil
QDomElement inputs = document.createElement("inputs"); QDomElement inputs = document.createElement("inputs");
// pour chaque enfant de l'element // pour chaque enfant de l'element
foreach(QGraphicsItem *child, childItems()) { foreach(QGraphicsItem *child, children()) {
// si cet enfant est un champ de texte // si cet enfant est un champ de texte
if (ElementTextItem *eti = qgraphicsitem_cast<ElementTextItem *>(child)) { if (ElementTextItem *eti = qgraphicsitem_cast<ElementTextItem *>(child)) {
// alors on enregistre le champ de texte // alors on enregistre le champ de texte

View File

@@ -24,9 +24,7 @@ class Diagram;
/** /**
Cette classe abstraite represente un element electrique. Cette classe abstraite represente un element electrique.
*/ */
class Element : public QObject, public QGraphicsItem { class Element : public QGraphicsItem {
Q_OBJECT
// constructeurs, destructeur // constructeurs, destructeur
public: public:

View File

@@ -1,4 +1,4 @@
<definition width="50" version="0.1" hotspot_x="10" hotspot_y="25" height="50" type="element" ic="true" orientation="dnny" > <definition width="50" version="0.1" hotspot_x="10" hotspot_y="25" height="50" type="element" orientation="dnny" >
<names> <names>
<name lang="en" >Contact power contactor (NC)</name> <name lang="en" >Contact power contactor (NC)</name>
<name lang="fr" >Contact puissance contacteur (NF)</name> <name lang="fr" >Contact puissance contacteur (NF)</name>

View File

@@ -1,4 +1,4 @@
<definition width="60" version="0.1" hotspot_x="10" hotspot_y="25" height="50" type="element" ic="true" orientation="dnny" > <definition width="60" version="0.1" hotspot_x="10" hotspot_y="25" height="50" type="element" orientation="dnny" >
<names> <names>
<name lang="en" >Contact power contactor (NC)</name> <name lang="en" >Contact power contactor (NC)</name>
<name lang="fr" >Contact puissance contacteur (NF)</name> <name lang="fr" >Contact puissance contacteur (NF)</name>

View File

@@ -1,4 +1,4 @@
<definition width="70" version="0.1" hotspot_x="10" hotspot_y="25" height="50" type="element" ic="true" orientation="dnny" > <definition width="70" version="0.1" hotspot_x="10" hotspot_y="25" height="50" type="element" orientation="dnny" >
<names> <names>
<name lang="en" >Contact power contactor (NC)</name> <name lang="en" >Contact power contactor (NC)</name>
<name lang="fr" >Contact puissance contacteur (NF)</name> <name lang="fr" >Contact puissance contacteur (NF)</name>

View File

@@ -1,4 +1,4 @@
<definition width="70" version="0.1" hotspot_x="10" hotspot_y="25" height="50" type="element" ic="true" orientation="dnny" > <definition width="70" version="0.1" hotspot_x="10" hotspot_y="25" height="50" type="element" orientation="dnny" >
<names> <names>
<name lang="en" >Contact power contactor (NC)</name> <name lang="en" >Contact power contactor (NC)</name>
<name lang="fr" >Contact puissance contacteur (NF)</name> <name lang="fr" >Contact puissance contacteur (NF)</name>

View File

@@ -1,4 +1,4 @@
<definition width="40" version="0.1" hotspot_x="10" hotspot_y="25" height="50" type="element" ic="true" orientation="dnny" > <definition width="40" version="0.1" hotspot_x="10" hotspot_y="25" height="50" type="element" orientation="dnny" >
<names> <names>
<name lang="en" >Contact power contactor</name> <name lang="en" >Contact power contactor</name>
<name lang="fr" >Contact puissance contacteur</name> <name lang="fr" >Contact puissance contacteur</name>

View File

@@ -1,4 +1,4 @@
<definition width="60" version="0.1" hotspot_x="10" hotspot_y="25" height="50" type="element" ic="true" orientation="dnny" > <definition width="60" version="0.1" hotspot_x="10" hotspot_y="25" height="50" type="element" orientation="dnny" >
<names> <names>
<name lang="en" >Contact power contactor</name> <name lang="en" >Contact power contactor</name>
<name lang="fr" >Contact puissance contacteur</name> <name lang="fr" >Contact puissance contacteur</name>

View File

@@ -1,4 +1,4 @@
<definition width="70" version="0.1" hotspot_x="10" hotspot_y="25" height="50" type="element" ic="true" orientation="dnny" > <definition width="70" version="0.1" hotspot_x="10" hotspot_y="25" height="50" type="element" orientation="dnny" >
<names> <names>
<name lang="en" >Contact power contactor</name> <name lang="en" >Contact power contactor</name>
<name lang="fr" >Contact puissance contacteur</name> <name lang="fr" >Contact puissance contacteur</name>

View File

@@ -1,4 +1,4 @@
<definition width="70" version="0.1" hotspot_x="10" hotspot_y="25" height="50" type="element" ic="true" orientation="dnny" > <definition width="70" version="0.1" hotspot_x="10" hotspot_y="25" height="50" type="element" orientation="dnny" >
<names> <names>
<name lang="en" >Contact power contactor</name> <name lang="en" >Contact power contactor</name>
<name lang="fr" >Contact puissance contacteur</name> <name lang="fr" >Contact puissance contacteur</name>

View File

@@ -46,7 +46,7 @@ ElementsCategoriesList::~ElementsCategoriesList() {
*/ */
void ElementsCategoriesList::reload() { void ElementsCategoriesList::reload() {
// vide l'arbre // vide l'arbre
while (takeTopLevelItem(0)) {}; while (takeTopLevelItem(0));
// chargement des elements de la collection commune si droits d'ecriture // chargement des elements de la collection commune si droits d'ecriture
QFileInfo common_collection_info(QETApp::commonElementsDir()); QFileInfo common_collection_info(QETApp::commonElementsDir());

Some files were not shown because too many files have changed in this diff Show More