Rapatriement dans la branche 0.3 de toutes les modifications effectuees dans le trunk depuis la creation de la branche 0.3.

git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/branches/0.3@793 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
xavier
2009-11-22 16:12:22 +00:00
parent 22ebec4dad
commit 121bd1f432
247 changed files with 17529 additions and 3671 deletions

View File

@@ -120,6 +120,7 @@ QWidget *AboutQET::translatorsTab() const {
addAuthor(translators, "Youssef Oualmakran", "youssefsan@qelectrotech.org", tr("Traduction en espagnol"));
addAuthor(translators, "Yuriy Litkevich", "yuriy@qelectrotech.org", tr("Traduction en russe"));
addAuthor(translators, "Jos\351 Carlos Martins", "jose@qelectrotech.org", tr("Traduction en portugais"));
addAuthor(translators, "Pavel Fric", "pavelfric@seznam.cz", tr("Traduction en tch\350que"));
/*
addAuthor(translators, "Luca Pedrazzi", "pedro@iworks.it", tr("Traduction en italien"));
*/

View File

@@ -118,7 +118,7 @@ BorderProperties BorderInset::exportBorder() {
}
/**
@param ip les nouvelles proprietes de la bordure
@param bp les nouvelles proprietes de la bordure
*/
void BorderInset::importBorder(const BorderProperties &bp) {
setColumnsHeaderHeight(bp.columns_header_height);
@@ -373,7 +373,7 @@ void BorderInset::setNbRows(int nb_r) {
Change la hauteur des lignes.
Si la hauteur indiquee est inferieure au minimum requis, c'est ce minimum
qui est utilise.
@param rh nouvelle hauteur des lignes
@param new_rh nouvelle hauteur des lignes
@see minRowsHeight()
*/
void BorderInset::setRowsHeight(const qreal &new_rh) {

View File

@@ -186,13 +186,15 @@ void Conductor::segmentsToPath() {
}
/**
Gere les updates
Gere les updates
@param p1 Coordonnees du point d'amarrage de la borne 1
@param o1 Orientation de la borne 1
@param p2 Coordonnees du point d'amarrage de la borne 2
@param o2 Orientation de la borne 2
*/
void Conductor::priv_modifieConductor(const QPointF &p1, QET::Orientation, const QPointF &p2, QET::Orientation) {
void Conductor::priv_modifieConductor(const QPointF &p1, QET::Orientation o1, const QPointF &p2, QET::Orientation o2) {
Q_UNUSED(o1);
Q_UNUSED(o2);
ConductorProfile &conductor_profile = conductor_profiles[currentPathType()];
@@ -447,30 +449,43 @@ QPointF Conductor::extendTerminal(const QPointF &terminal, QET::Orientation term
@param options Les options de style pour le conducteur
@param qw Le QWidget sur lequel on dessine
*/
void Conductor::paint(QPainter *qp, const QStyleOptionGraphicsItem *options, QWidget */*qw*/) {
void Conductor::paint(QPainter *qp, const QStyleOptionGraphicsItem *options, QWidget *qw) {
Q_UNUSED(qw);
qp -> save();
qp -> setRenderHint(QPainter::Antialiasing, false);
// determine la couleur du conducteur
QColor final_conductor_color(properties_.color);
if (isSelected()) {
final_conductor_color = Qt::red;
} else {
if (Diagram *parent_diagram = diagram()) {
if (!parent_diagram -> drawColoredConductors()) {
final_conductor_color = Qt::black;
}
}
}
// affectation du QPen et de la QBrush modifies au QPainter
qp -> setBrush(conductor_brush);
qp -> setPen(conductor_pen);
if (isSelected()) {
QPen tmp = qp -> pen();
tmp.setColor(Qt::red);
qp -> setPen(tmp);
}
QPen final_conductor_pen = conductor_pen;
// modification du QPen generique pour lui affecter la couleur et le style adequats
final_conductor_pen.setColor(final_conductor_color);
final_conductor_pen.setStyle(properties_.style);
final_conductor_pen.setJoinStyle(Qt::SvgMiterJoin); // meilleur rendu des pointilles
// utilisation d'un trait "cosmetique" en-dessous d'un certain zoom
if (options && options -> levelOfDetail < 1.0) {
QPen tmp = qp -> pen();
tmp.setCosmetic(true);
qp -> setPen(tmp);
final_conductor_pen.setCosmetic(true);
}
qp -> setPen(final_conductor_pen);
// dessin du conducteur
qp -> drawPath(path());
if (properties_.type == ConductorProperties::Single) {
if (isSelected()) qp -> setBrush(Qt::red);
qp -> setBrush(final_conductor_color);
properties_.singleLineProperties.draw(
qp,
middleSegment() -> isHorizontal() ? QET::Horizontal : QET::Vertical,
@@ -508,8 +523,9 @@ void Conductor::paint(QPainter *qp, const QStyleOptionGraphicsItem *options, QWi
// dessine les eventuelles jonctions
QList<QPointF> junctions_list = junctions();
if (!junctions_list.isEmpty()) {
QBrush junction_brush(Qt::SolidPattern);
junction_brush.setColor(isSelected() ? Qt::red : Qt::black);
final_conductor_pen.setStyle(Qt::SolidLine);
QBrush junction_brush(final_conductor_color, Qt::SolidPattern);
qp -> setPen(final_conductor_pen);
qp -> setBrush(junction_brush);
qp -> setRenderHint(QPainter::Antialiasing, true);
foreach(QPointF point, junctions_list) {
@@ -751,6 +767,7 @@ QPainterPath Conductor::shape() const {
@param tobound valeur a borner
@param bound1 borne 1
@param bound2 borne 2
@param space marge interne ajoutee
@return La valeur bornee
*/
qreal Conductor::conductor_bound(qreal tobound, qreal bound1, qreal bound2, qreal space) {
@@ -1100,6 +1117,7 @@ ConductorProperties Conductor::properties() const {
Relit les proprietes et les applique
*/
void Conductor::readProperties() {
// la couleur n'est vraiment applicable que lors du rendu du conducteur
setText(properties_.text);
text_item -> setVisible(properties_.type == ConductorProperties::Multi);
}

View File

@@ -140,7 +140,8 @@ void SingleLineProperties::drawGround(QPainter *painter, QET::ConductorSegmentTy
@param center centre du cercle
@param size diametre du cercle
*/
void SingleLineProperties::drawNeutral(QPainter *painter, QET::ConductorSegmentType, QPointF center, qreal size) {
void SingleLineProperties::drawNeutral(QPainter *painter, QET::ConductorSegmentType direction, QPointF center, qreal size) {
Q_UNUSED(direction);
painter -> save();
// prepare le QPainter
@@ -180,6 +181,24 @@ void SingleLineProperties::fromXml(QDomElement &e) {
setPhasesCount(e.attribute("phase").toInt());
}
/**
Constructeur : par defaut, les proprietes font un conducteur
multifilaire noir dont le texte est "_"
*/
ConductorProperties::ConductorProperties() :
type(Multi),
color(Qt::black),
text("_"),
style(Qt::SolidLine)
{
}
/**
Destructeur
*/
ConductorProperties::~ConductorProperties() {
}
/**
Exporte les parametres du conducteur sous formes d'attributs XML
ajoutes a l'element e.
@@ -187,11 +206,21 @@ void SingleLineProperties::fromXml(QDomElement &e) {
*/
void ConductorProperties::toXml(QDomElement &e) const {
e.setAttribute("type", typeToString(type));
if (color != QColor(Qt::black)) {
e.setAttribute("color", color.name());
}
if (type == Single) {
singleLineProperties.toXml(e);
} else if (type == Multi) {
e.setAttribute("num", text);
}
QString conductor_style = writeStyle();
if (!conductor_style.isEmpty()) {
e.setAttribute("style", conductor_style);
}
}
/**
@@ -200,6 +229,17 @@ void ConductorProperties::toXml(QDomElement &e) const {
@param e Element XML dont les attributs seront lus
*/
void ConductorProperties::fromXml(QDomElement &e) {
// recupere la couleur du conducteur
QColor xml_color= QColor(e.attribute("color"));
if (xml_color.isValid()) {
color = xml_color;
} else {
color = QColor(Qt::black);
}
// lit le style du conducteur
readStyle(e.attribute("style"));
if (e.attribute("type") == typeToString(Single)) {
// recupere les parametres specifiques a un conducteur unifilaire
singleLineProperties.fromXml(e);
@@ -218,6 +258,8 @@ void ConductorProperties::fromXml(QDomElement &e) {
@param prefix prefixe a ajouter devant les noms des parametres
*/
void ConductorProperties::toSettings(QSettings &settings, const QString &prefix) const {
settings.setValue(prefix + "color", color.name());
settings.setValue(prefix + "style", writeStyle());
settings.setValue(prefix + "type", typeToString(type));
settings.setValue(prefix + "text", text);
singleLineProperties.toSettings(settings, prefix);
@@ -228,6 +270,14 @@ void ConductorProperties::toSettings(QSettings &settings, const QString &prefix)
@param prefix prefixe a ajouter devant les noms des parametres
*/
void ConductorProperties::fromSettings(QSettings &settings, const QString &prefix) {
// recupere la couleur dans les parametres
QColor settings_color = QColor(settings.value(prefix + "color").toString());
if (settings_color.isValid()) {
color = settings_color;
} else {
color = QColor(Qt::black);
}
QString setting_type = settings.value(prefix + "type", typeToString(Multi)).toString();
if (setting_type == typeToString(Single)) {
type = Single;
@@ -238,6 +288,9 @@ void ConductorProperties::fromSettings(QSettings &settings, const QString &prefi
}
singleLineProperties.fromSettings(settings, prefix);
text = settings.value(prefix + "text", "_").toString();
// lit le style du conducteur
readStyle(settings.value(prefix + "style").toString());
}
/**
@@ -259,6 +312,8 @@ QString ConductorProperties::typeToString(ConductorType t) {
int ConductorProperties::operator==(const ConductorProperties &other) {
return(
other.type == type &&\
other.color == color &&\
other.color == style &&\
other.text == text &&\
other.singleLineProperties == singleLineProperties
);
@@ -271,11 +326,50 @@ int ConductorProperties::operator==(const ConductorProperties &other) {
int ConductorProperties::operator!=(const ConductorProperties &other) {
return(
other.type != type ||\
other.color != color ||\
other.color != style ||\
other.text != text ||\
other.singleLineProperties != singleLineProperties
);
}
/**
Applique les styles passes en parametre dans cet objet
@param style_string Chaine decrivant le style du conducteur
*/
void ConductorProperties::readStyle(const QString &style_string) {
style = Qt::SolidLine; // style par defaut
if (style_string.isEmpty()) return;
// recupere la liste des couples style / valeur
QStringList styles = style_string.split(";", QString::SkipEmptyParts);
QRegExp rx("^\\s*([a-z-]+)\\s*:\\s*([a-z-]+)\\s*$");
foreach (QString style_str, styles) {
if (rx.exactMatch(style_str)) {
QString style_name = rx.cap(1);
QString style_value = rx.cap(2);
if (style_name == "line-style") {
if (style_value == "dashed") style = Qt::DashLine;
else if (style_value == "normal") style = Qt::SolidLine;
}
}
}
}
/**
Exporte le style du conducteur sous forme d'une chaine de caracteres
@return une chaine de caracteres decrivant le style du conducteur
*/
QString ConductorProperties::writeStyle() const {
if (style == Qt::DashLine) {
return("line-style: dashed;");
} else {
return(QString());
}
}
/**
@param other l'autre ensemble de proprietes avec lequel il faut effectuer la comparaison
@return true si les deux ensembles de proprietes sont identiques, false sinon

View File

@@ -57,16 +57,8 @@ class SingleLineProperties {
class ConductorProperties {
// constructeurs, destructeur
public:
/**
Constructeur : par defaut, les proprietes font un conducteur
multifilaire dont le texte est "_"
*/
ConductorProperties() : type(Multi), text("_") {
}
/// Destructeur
virtual ~ConductorProperties() {
}
ConductorProperties();
virtual ~ConductorProperties();
/**
Represente le type d'un conducteur :
@@ -79,9 +71,12 @@ class ConductorProperties {
// attributs
/// type du conducteur
ConductorType type;
/// couleur du conducteur
QColor color;
/// texte affiche si le conducteur est multifilaire
QString text;
/// style du conducteur (Qt::SolidLine ou Qt::DashLine)
Qt::PenStyle style;
/// proprietes si le conducteur est unifilaire
SingleLineProperties singleLineProperties;
@@ -96,5 +91,9 @@ class ConductorProperties {
// operateurs
int operator==(const ConductorProperties &);
int operator!=(const ConductorProperties &);
private:
void readStyle(const QString &);
QString writeStyle() const;
};
#endif

View File

@@ -45,7 +45,7 @@ ConductorPropertiesWidget::ConductorPropertiesWidget(const ConductorProperties &
/// construit l'interface du widget
void ConductorPropertiesWidget::buildInterface() {
setMinimumSize(380, 280);
setMinimumSize(380, 350);
QVBoxLayout *main_layout = new QVBoxLayout(this);
main_layout -> setContentsMargins(0, 0, 0, 0);
@@ -93,12 +93,32 @@ void ConductorPropertiesWidget::buildInterface() {
singleline_layout1 -> addWidget(preview);
singleline_layout1 -> addLayout(singleline_layout2);
QGroupBox *groupbox2 = new QGroupBox(tr("Apparence du conducteur"));
main_layout -> addWidget(groupbox2);
QVBoxLayout *groupbox2_layout = new QVBoxLayout();
groupbox2 -> setLayout(groupbox2_layout);
QHBoxLayout *color_layout = new QHBoxLayout();
QLabel *text1 = new QLabel(tr("Couleur :"));
color_button = new QPushButton("");
dashed_checkbox = new QCheckBox(tr("Trait en pointill\351s"));
color_layout -> addWidget(text1);
color_layout -> addWidget(color_button);
setColorButton(properties_.color);
dashed_checkbox -> setChecked(properties_.style == Qt::DashLine);
groupbox_layout -> addWidget(simple);
groupbox_layout -> addWidget(multiline);
groupbox_layout -> addLayout(multiline_layout);
groupbox_layout -> addWidget(singleline);
groupbox_layout -> addLayout(singleline_layout1);
groupbox2_layout -> addLayout(color_layout);
groupbox2_layout -> addWidget(dashed_checkbox);
radio_buttons = new QButtonGroup(this);
radio_buttons -> addButton(simple, ConductorProperties::Simple);
radio_buttons -> addButton(multiline, ConductorProperties::Multi);
@@ -118,6 +138,37 @@ void ConductorPropertiesWidget::buildConnections() {
connect(phase_slider, SIGNAL(valueChanged(int)), this, SLOT(updateConfig()));
connect(radio_buttons, SIGNAL(buttonClicked(int)), this, SLOT(updateConfig()));
connect(text_field, SIGNAL(textChanged(const QString &)), this, SLOT(updateConfig()));
connect(dashed_checkbox, SIGNAL(toggled(bool)), this, SLOT(updateConfig()));
connect(color_button, SIGNAL(clicked()), this, SLOT(chooseColor()));
}
/**
Demande a l'utilisateur de choisir une couleur via un dialogue approprie.
*/
void ConductorPropertiesWidget::chooseColor() {
QColor user_chosen_color = QColorDialog::getColor(properties_.color);
if (user_chosen_color.isValid()) {
setColorButton(user_chosen_color);
updateConfig();
}
}
/**
@return la couleur actuelle du bouton permettant de choisir la couleur du
conducteur
*/
QColor ConductorPropertiesWidget::colorButton() const {
return(color_button -> palette().color(QPalette::Button));
}
/**
Change la couleur du bouton permettant de choisir la couleur du conducteur
@param color Nouvelle couleur a afficher
*/
void ConductorPropertiesWidget::setColorButton(const QColor &color) {
QPalette palette;
palette.setColor(QPalette::Button, color);
color_button -> setPalette(palette);
}
/// Enleve les connexions signaux/slots
@@ -130,6 +181,8 @@ void ConductorPropertiesWidget::destroyConnections() {
disconnect(phase_slider, SIGNAL(valueChanged(int)), this, SLOT(updateConfig()));
disconnect(radio_buttons, SIGNAL(buttonClicked(int)), this, SLOT(updateConfig()));
disconnect(text_field, SIGNAL(textChanged(const QString &)), this, SLOT(updateConfig()));
disconnect(color_button, SIGNAL(clicked()), this, SLOT(chooseColor()));
disconnect(dashed_checkbox, SIGNAL(toggled(bool)), this, SLOT(updateConfig()));
}
/// Destructeur
@@ -139,6 +192,8 @@ ConductorPropertiesWidget::~ConductorPropertiesWidget() {
/// Met a jour les proprietes
void ConductorPropertiesWidget::updateConfig() {
properties_.type = static_cast<ConductorProperties::ConductorType>(radio_buttons -> checkedId());
properties_.color = colorButton();
properties_.style = dashed_checkbox -> isChecked() ? Qt::DashLine : Qt::SolidLine;
properties_.text = text_field -> text();
properties_.singleLineProperties.hasGround = ground_checkbox -> isChecked();
properties_.singleLineProperties.hasNeutral = neutral_checkbox -> isChecked();
@@ -152,6 +207,8 @@ void ConductorPropertiesWidget::updateDisplay() {
destroyConnections();
setConductorType(properties_.type);
setColorButton(properties_.color);
dashed_checkbox -> setChecked(properties_.style == Qt::DashLine);
text_field -> setText(properties_.text);
ground_checkbox -> setChecked(properties_.singleLineProperties.hasGround);
neutral_checkbox -> setChecked(properties_.singleLineProperties.hasNeutral);

View File

@@ -43,11 +43,14 @@ class ConductorPropertiesWidget : public QWidget {
private:
void setConductorType(ConductorProperties::ConductorType);
void setColorButton(const QColor &);
QColor colorButton() const;
public slots:
void updatePreview();
void updateConfig();
void updateDisplay();
void chooseColor();
// attributs prives
private:
@@ -62,6 +65,8 @@ class ConductorPropertiesWidget : public QWidget {
QCheckBox *ground_checkbox;
QCheckBox *neutral_checkbox;
QLabel *preview;
QPushButton *color_button;
QCheckBox *dashed_checkbox;
ConductorProperties properties_;

View File

@@ -31,8 +31,8 @@ ConfigDialog::ConfigDialog(QWidget *parent) : QDialog(parent) {
pages_list -> setViewMode(QListView::IconMode);
pages_list -> setIconSize(QSize(110, 110));
pages_list -> setMovement(QListView::Static);
pages_list -> setMinimumWidth(135);
pages_list -> setMaximumWidth(135);
pages_list -> setMinimumWidth(150);
pages_list -> setMaximumWidth(150);
pages_list -> setSpacing(4);
// pages
@@ -40,6 +40,7 @@ ConfigDialog::ConfigDialog(QWidget *parent) : QDialog(parent) {
addPage(new GeneralConfigurationPage());
addPage(new NewDiagramPage());
addPage(new ExportConfigPage());
addPage(new PrintConfigPage());
buildPagesList();
// boutons

View File

@@ -191,7 +191,6 @@ QString GeneralConfigurationPage::title() const {
return(tr("G\351n\351ral", "configuration page title"));
}
/**
Constructeur
@param parent QWidget parent
@@ -210,6 +209,7 @@ ExportConfigPage::ExportConfigPage(QWidget *parent) : ConfigPage(parent) {
horiz_line -> setFrameShape(QFrame::HLine);
vlayout1 -> addWidget(horiz_line);
vlayout1 -> addWidget(epw);
vlayout1 -> addStretch();
// activation du layout
setLayout(vlayout1);
@@ -237,3 +237,56 @@ QString ExportConfigPage::title() const {
return(tr("Export", "configuration page title"));
}
/**
Constructeur
@param parent QWidget parent
*/
PrintConfigPage::PrintConfigPage(QWidget *parent) : ConfigPage(parent) {
// epw contient les options d'export
epw = new ExportPropertiesWidget(QETDiagramEditor::defaultPrintProperties());
epw -> setPrintingMode(true);
// layout vertical contenant le titre, une ligne horizontale et epw
QVBoxLayout *vlayout1 = new QVBoxLayout();
QLabel *title = new QLabel(this -> title());
vlayout1 -> addWidget(title);
QFrame *horiz_line = new QFrame();
horiz_line -> setFrameShape(QFrame::HLine);
vlayout1 -> addWidget(horiz_line);
vlayout1 -> addWidget(epw);
vlayout1 -> addStretch();
// activation du layout
setLayout(vlayout1);
}
/// Destructeur
PrintConfigPage::~PrintConfigPage() {
}
/**
Applique la configuration de cette page
*/
void PrintConfigPage::applyConf() {
QString prefix = "print/default";
QSettings &settings = QETApp::settings();
epw -> exportProperties().toSettings(settings, prefix);
// annule l'enregistrement de certaines proprietes non pertinentes
settings.remove(prefix + "path");
settings.remove(prefix + "format");
settings.remove(prefix + "area");
}
/// @return l'icone de cette page
QIcon PrintConfigPage::icon() const {
return(QET::Icons::Printer);
}
/// @return le titre de cette page
QString PrintConfigPage::title() const {
return(tr("Impression", "configuration page title"));
}

View File

@@ -123,4 +123,27 @@ class ExportConfigPage : public ConfigPage {
public:
ExportPropertiesWidget *epw;
};
/**
Cette classe represente la page de configuration du dialogue d'impression
*/
class PrintConfigPage : public ConfigPage {
Q_OBJECT
// constructeurs, destructeur
public:
PrintConfigPage(QWidget * = 0);
virtual ~PrintConfigPage();
private:
PrintConfigPage(const PrintConfigPage &);
// methodes
public:
void applyConf();
QString title() const;
QIcon icon() const;
// attributs
public:
ExportPropertiesWidget *epw;
};
#endif

View File

@@ -255,7 +255,6 @@ void CustomElement::paint(QPainter *qp, const QStyleOptionGraphicsItem *options)
formes peuvent avoir un attribut style. @see setPainterStyle
@param e L'element XML a analyser
@param qp Le QPainter a utiliser pour dessiner l'element perso
@param s Le schema sur lequel sera affiche l'element perso
@return true si l'analyse reussit, false sinon
*/
bool CustomElement::parseElement(QDomElement &e, QPainter &qp) {

View File

@@ -41,6 +41,7 @@ Diagram::Diagram(QObject *parent) :
use_border(true),
moved_elements_fetched(false),
draw_terminals(true),
draw_colored_conductors_(true),
project_(0),
read_only_(false)
{
@@ -897,6 +898,34 @@ bool Diagram::usesElement(const ElementsLocation &location) {
return(false);
}
/**
Cette methode permet d'appliquer de nouvelles options de rendu tout en
accedant aux proprietes de rendu en cours.
@param new_properties Nouvelles options de rendu a appliquer
@return les options de rendu avant l'application de new_properties
*/
ExportProperties Diagram::applyProperties(const ExportProperties &new_properties) {
// exporte les options de rendu en cours
ExportProperties old_properties;
old_properties.draw_grid = displayGrid();
old_properties.draw_border = border_and_inset.borderIsDisplayed();
old_properties.draw_inset = border_and_inset.insetIsDisplayed();
old_properties.draw_terminals = drawTerminals();
old_properties.draw_colored_conductors = drawColoredConductors();
old_properties.exported_area = useBorder() ? QET::BorderArea : QET::ElementsArea;
// applique les nouvelles options de rendu
setUseBorder (new_properties.exported_area == QET::BorderArea);
setDrawTerminals (new_properties.draw_terminals);
setDrawColoredConductors (new_properties.draw_colored_conductors);
setDisplayGrid (new_properties.draw_grid);
border_and_inset.displayBorder(new_properties.draw_border);
border_and_inset.displayInset (new_properties.draw_inset);
// retourne les anciennes options de rendu
return(old_properties);
}
/**
@param pos Position cartesienne (ex : 10.3, 45.2) a transformer en position
dans la grille (ex : B2)
@@ -927,6 +956,15 @@ void Diagram::setDrawTerminals(bool dt) {
}
}
/**
Definit s'il faut respecter ou non les couleurs des conducteurs.
Si non, les conducteurs sont tous dessines en noir.
@param dcc true pour respecter les couleurs, false sinon
*/
void Diagram::setDrawColoredConductors(bool dcc) {
draw_colored_conductors_ = dcc;
}
/**
@return la liste des conducteurs selectionnes sur le schema
*/

View File

@@ -22,6 +22,7 @@
#include "borderinset.h"
#include "qgimanager.h"
#include "conductorproperties.h"
#include "exportproperties.h"
class Element;
class CustomElement;
class Terminal;
@@ -81,6 +82,7 @@ class Diagram : public QGraphicsScene {
QGIManager *qgi_manager;
QUndoStack *undo_stack;
bool draw_terminals;
bool draw_colored_conductors_;
QDomDocument xml_document;
QETProject *project_;
bool read_only_;
@@ -127,6 +129,7 @@ class Diagram : public QGraphicsScene {
void removeDiagramTextItem(DiagramTextItem *);
// fonctions relatives aux options graphiques
ExportProperties applyProperties(const ExportProperties &);
void setDisplayGrid(bool);
bool displayGrid();
void setUseBorder(bool);
@@ -137,6 +140,8 @@ class Diagram : public QGraphicsScene {
bool drawTerminals() const;
void setDrawTerminals(bool);
bool drawColoredConductors() const;
void setDrawColoredConductors(bool);
QRectF border() const;
QString title() const;
@@ -300,4 +305,9 @@ inline bool Diagram::drawTerminals() const {
return(draw_terminals);
}
/// @return true si les couleurs des conducteurs sont respectees, false sinon
inline bool Diagram::drawColoredConductors() const {
return(draw_colored_conductors_);
}
#endif

View File

@@ -556,6 +556,8 @@ void ChangeInsetCommand::redo() {
/**
Constructeur
@param dia Schema modifie
@param old_bp Anciennes proprietes du cadre du schema
@param new_bp Nouvelles proprietes du cadre du schema
@param parent QUndoCommand parent
*/
ChangeBorderCommand::ChangeBorderCommand(Diagram *dia, const BorderProperties &old_bp, const BorderProperties &new_bp, QUndoCommand *parent) :

View File

@@ -135,9 +135,10 @@ QString DiagramContent::sentence(int filter) const {
/**
Permet de debugger un contenu de schema
@param d Object QDebug a utiliser pour l'affichage des informations de debug
@param c Contenu de schema a debugger
@param content Contenu de schema a debugger
*/
QDebug &operator<<(QDebug d, DiagramContent &) {
QDebug &operator<<(QDebug d, DiagramContent &content) {
Q_UNUSED(content);
d << "DiagramContent {" << "\n";
/*
FIXME Le double-heritage QObject / QGraphicsItem a casse cet operateur

View File

@@ -19,13 +19,13 @@
#include "qetprintpreviewdialog.h"
#include <math.h>
#include "diagramschooser.h"
#include "exportproperties.h"
#include "qeticons.h"
#include "qetmessagebox.h"
/**
Constructeur
@param dia Schema a imprimer
@param printer Imprimante a utiliser
@param project Schema a imprimer
@param parent Widget parent du dialogue
*/
DiagramPrintDialog::DiagramPrintDialog(QETProject *project, QWidget *parent) :
@@ -122,17 +122,27 @@ void DiagramPrintDialog::exec() {
// Apercu avant impression
QETPrintPreviewDialog preview_dialog(project_, printer_, parentWidget());
connect(&preview_dialog, SIGNAL(paintRequested(const QList<Diagram *> &, bool, QPrinter *)), this, SLOT(print(const QList<Diagram *> &, bool, QPrinter *)));
connect(
&preview_dialog,
SIGNAL(paintRequested(const QList<Diagram *> &, bool, const ExportProperties, QPrinter *)),
this,
SLOT(print(const QList<Diagram *> &, bool, const ExportProperties))
);
DiagramsChooser *dc = preview_dialog.diagramsChooser();
dc -> setSelectedAllDiagrams();
if (preview_dialog.exec() == QDialog::Rejected) return;
// effectue l'impression en elle-meme
print(dc -> selectedDiagrams(), preview_dialog.fitDiagramsToPages(), printer_);
print(
dc -> selectedDiagrams(),
preview_dialog.fitDiagramsToPages(),
preview_dialog.exportProperties()
);
}
/**
@param fullPage true pour utiliser toute la feuille dans le calcul
@param diagram Schema a imprimer
@param fullpage true pour utiliser toute la feuille dans le calcul
@return Le nombre de pages necessaires pour imprimer le schema
avec l'orientation et le format papier utilise dans l'imprimante en cours.
*/
@@ -141,7 +151,8 @@ int DiagramPrintDialog::pagesCount(Diagram *diagram, bool fullpage) const {
}
/**
@param fullPage true pour utiliser toute la feuille dans le calcul
@param diagram Schema a imprimer
@param fullpage true pour utiliser toute la feuille dans le calcul
@return La largeur du "poster" en nombre de pages pour imprimer le schema
avec l'orientation et le format papier utilise dans l'imprimante en cours.
*/
@@ -155,7 +166,8 @@ int DiagramPrintDialog::horizontalPagesCount(Diagram *diagram, bool fullpage) co
}
/**
@param fullPage true pour utiliser toute la feuille dans le calcul
@param diagram Schema a imprimer
@param fullpage true pour utiliser toute la feuille dans le calcul
@return La largeur du "poster" en nombre de pages pour imprimer le schema
avec l'orientation et le format papier utilise dans l'imprimante en cours.
*/
@@ -317,9 +329,9 @@ void DiagramPrintDialog::browseFilePrintTypeDialog() {
@param diagrams Schemas a imprimer
@param fit_page Booleen indiquant s'il faut adapter les schemas aux pages
ou non
@param printer L'imprimante a utiliser
@param options Options de rendu
*/
void DiagramPrintDialog::print(const QList<Diagram *> &diagrams, bool fit_page, QPrinter */*printer*/) {
void DiagramPrintDialog::print(const QList<Diagram *> &diagrams, bool fit_page, const ExportProperties options) {
//qDebug() << "Demande d'impression de " << diagrams.count() << "schemas.";
// QPainter utiliser pour effectuer le rendu
@@ -333,7 +345,7 @@ void DiagramPrintDialog::print(const QList<Diagram *> &diagrams, bool fit_page,
// imprime les schemas
for (int i = 0 ; i < diagrams.count() ; ++ i) {
printDiagram(diagrams[i], fit_page, &qp, printer_);
printDiagram(diagrams[i], fit_page, options, &qp, printer_);
if (i != diagrams.count() - 1) {
printer_ -> newPage();
}
@@ -344,10 +356,11 @@ void DiagramPrintDialog::print(const QList<Diagram *> &diagrams, bool fit_page,
Imprime un schema
@param diagram Schema a imprimer
@param fit_page True pour adapter les schemas aux pages, false sinon
@param options Options de rendu a appliquer pour l'impression
@param qp QPainter a utiliser (deja initialise sur printer)
@param printer Imprimante a utiliser
*/
void DiagramPrintDialog::printDiagram(Diagram *diagram, bool fit_page, QPainter *qp, QPrinter *printer) {
void DiagramPrintDialog::printDiagram(Diagram *diagram, bool fit_page, const ExportProperties options, QPainter *qp, QPrinter *printer) {
//qDebug() << printer -> paperSize() << printer -> paperRect() << diagram -> title();
// l'imprimante utilise-t-elle toute la feuille ?
bool full_page = printer -> fullPage ();
@@ -357,8 +370,7 @@ void DiagramPrintDialog::printDiagram(Diagram *diagram, bool fit_page, QPainter
// utiliser cette condition pour agir differemment en cas d'impression physique
}
diagram -> setDisplayGrid(false);
diagram -> setDrawTerminals(false);
saveReloadDiagramParameters(diagram, options, true);
if (fit_page) {
// impression adaptee sur une seule page
@@ -426,6 +438,24 @@ void DiagramPrintDialog::printDiagram(Diagram *diagram, bool fit_page, QPainter
}
}
}
diagram -> setDrawTerminals(true);
diagram -> setDisplayGrid(true);
saveReloadDiagramParameters(diagram, options, false);
}
/**
Sauve ou restaure les parametres du schema
@param diagram Schema dont on sauve ou restaure les parametres
@param options Parametres a appliquer
@param save true pour memoriser les parametres du schema et appliquer ceux
definis dans options, false pour restaurer les parametres
*/
void DiagramPrintDialog::saveReloadDiagramParameters(Diagram *diagram, const ExportProperties options, bool save) {
static ExportProperties state_exportProperties;
if (save) {
// memorise les parametres relatifs au schema tout en appliquant les nouveaux
state_exportProperties = diagram -> applyProperties(options);
} else {
// restaure les parametres relatifs au schema
diagram -> applyProperties(state_exportProperties);
}
}

View File

@@ -20,6 +20,7 @@
#include <QtGui>
#include "qetproject.h"
#include "diagram.h"
#include "exportproperties.h"
/**
Cette classe represente le dialogue de configuration de l'impression d'un
schema electrique.
@@ -49,10 +50,11 @@ class DiagramPrintDialog : public QWidget {
private:
void buildPrintTypeDialog();
void buildDialog();
void saveReloadDiagramParameters(Diagram *, const ExportProperties, bool);
private slots:
void print(const QList<Diagram *> &, bool, QPrinter *);
void printDiagram(Diagram *, bool, QPainter *, QPrinter * = 0);
void print(const QList<Diagram *> &, bool, const ExportProperties);
void printDiagram(Diagram *, bool, const ExportProperties, QPainter *, QPrinter * = 0);
void updatePrintTypeDialog();
void acceptPrintTypeDialog();
void browseFilePrintTypeDialog();

View File

@@ -34,12 +34,12 @@
/**
Constructeur
@param diagram Schema a afficher ; si diagram vaut 0, un nouveau Diagram est utilise
@param parent Le QWidget parent de cette vue de schema
*/
DiagramView::DiagramView(Diagram *diagram, QWidget *parent) : QGraphicsView(parent), is_adding_text(false) {
setAttribute(Qt::WA_DeleteOnClose, true);
setInteractive(true);
setCacheMode(QGraphicsView::CacheBackground);
// active l'antialiasing
setRenderHint(QPainter::Antialiasing, true);
@@ -140,7 +140,8 @@ void DiagramView::dragEnterEvent(QDragEnterEvent *e) {
Gere les dragleaveevent
@param e le QDragEnterEvent correspondant au drag'n drop sortant
*/
void DiagramView::dragLeaveEvent(QDragLeaveEvent *) {
void DiagramView::dragLeaveEvent(QDragLeaveEvent *e) {
Q_UNUSED(e);
}
/**
@@ -633,6 +634,7 @@ void DiagramView::editElement(Element *element) {
QString description_title = tr("Propri\351t\351s de l'\351l\351ment s\351lectionn\351");
QPushButton *find_in_panel = new QPushButton(tr("Retrouver dans le panel"));
QPushButton *edit_element = new QPushButton(tr("\311diter l'\351l\351ment"));
edit_element->setIcon(QET::Icons::ElementEdit);
// dialogue en lui-meme
QMessageBox edit_element_dialog(diagramEditor());
@@ -923,8 +925,6 @@ void DiagramView::mouseDoubleClickEvent(QMouseEvent *e) {
Cette methode ajoute l'element deisgne par l'emplacement location a la
position pos. Si necessaire, elle demande l'integration de l'element au
projet.
@param location emplacement d'un element a ajouter sur le schema
@param pos position voulue de l'element sur le schema
@see mustIntegrateElement
*/
void DiagramView::addDroppedElement() {

View File

@@ -62,8 +62,8 @@ void DeletePartsCommand::redo() {
/*** CutPartsCommand ***/
/**
Constructeur
@param scene ElementScene concernee
@param parts Liste des parties collees
@param view ElementView concernee
@param c Liste des parties collees
@param parent QUndoCommand parent
*/
PastePartsCommand::PastePartsCommand(

View File

@@ -427,9 +427,10 @@ void ElementScene::drawBackground(QPainter *p, const QRectF &r) {
/**
Dessine l'arriere-plan de l'editeur, cad l'indicateur de hotspot.
@param p Le QPainter a utiliser pour dessiner
@param r Le rectangle de la zone a dessiner
@param rect Le rectangle de la zone a dessiner
*/
void ElementScene::drawForeground(QPainter *p, const QRectF &) {
void ElementScene::drawForeground(QPainter *p, const QRectF &rect) {
Q_UNUSED(rect);
p -> save();
// desactive tout antialiasing, sauf pour le texte
@@ -448,7 +449,7 @@ void ElementScene::drawForeground(QPainter *p, const QRectF &) {
A partir d'un evenement souris, cette methode regarde si la touche shift est
enfoncee ou non. Si oui, elle laisse le comportement en cours (cercle,
texte, polygone, ...). Si non, elle repasse en mode normal / selection.
@param e objet decrivant l'evenement souris
@param event objet decrivant l'evenement souris
*/
void ElementScene::endCurrentBehavior(const QGraphicsSceneMouseEvent *event) {
if (!(event -> modifiers() & Qt::ShiftModifier)) {
@@ -473,8 +474,8 @@ int ElementScene::yGrid() const {
}
/**
@param x_grid Taille horizontale de la grille
@param y_grid Taille verticale de la grille
@param x_g Taille horizontale de la grille
@param y_g Taille verticale de la grille
*/
void ElementScene::setGrid(int x_g, int y_g) {
x_grid = x_g ? x_g : 1;
@@ -483,7 +484,7 @@ void ElementScene::setGrid(int x_g, int y_g) {
/**
Exporte l'element en XML
@param diagram Booleen (a vrai par defaut) indiquant si le XML genere doit
@param all_parts Booleen (a vrai par defaut) indiquant si le XML genere doit
representer tout l'element ou seulement les elements selectionnes
@return un document XML decrivant l'element
*/
@@ -1102,7 +1103,8 @@ ElementContent ElementScene::loadContent(const QDomDocument &xml_document, QStri
different de 0, un message d'erreur sera stocke dedans si necessaire
@return Le contenu ajoute
*/
ElementContent ElementScene::addContent(const ElementContent &content, QString */*error_message*/) {
ElementContent ElementScene::addContent(const ElementContent &content, QString *error_message) {
Q_UNUSED(error_message);
foreach(QGraphicsItem *part, content) {
addItem(part);
}
@@ -1117,7 +1119,8 @@ ElementContent ElementScene::addContent(const ElementContent &content, QString *
different de 0, un message d'erreur sera stocke dedans si necessaire
@return Le contenu ajoute
*/
ElementContent ElementScene::addContentAtPos(const ElementContent &content, const QPointF &pos, QString */*error_message*/) {
ElementContent ElementScene::addContentAtPos(const ElementContent &content, const QPointF &pos, QString *error_message) {
Q_UNUSED(error_message);
// calcule le boundingRect du contenu a ajouter
QRectF bounding_rect = elementContentBoundingRect(content);

View File

@@ -48,7 +48,8 @@ PartArc::~PartArc() {
@param options Options pour affiner le rendu
@param widget Widget sur lequel le rendu est effectue
*/
void PartArc::paint(QPainter *painter, const QStyleOptionGraphicsItem *options, QWidget *) {
void PartArc::paint(QPainter *painter, const QStyleOptionGraphicsItem *options, QWidget *widget) {
Q_UNUSED(widget);
applyStylesToQPainter(*painter);
// enleve systematiquement la couleur de fond
painter -> setBrush(Qt::NoBrush);

View File

@@ -43,7 +43,8 @@ PartCircle::~PartCircle() {
@param options Options pour affiner le rendu
@param widget Widget sur lequel le rendu est effectue
*/
void PartCircle::paint(QPainter *painter, const QStyleOptionGraphicsItem *options, QWidget *) {
void PartCircle::paint(QPainter *painter, const QStyleOptionGraphicsItem *options, QWidget *widget) {
Q_UNUSED(widget);
applyStylesToQPainter(*painter);
QPen t = painter -> pen();
t.setCosmetic(options && options -> levelOfDetail < 1.0);

View File

@@ -43,7 +43,8 @@ PartEllipse::~PartEllipse() {
@param options Options pour affiner le rendu
@param widget Widget sur lequel le rendu est effectue
*/
void PartEllipse::paint(QPainter *painter, const QStyleOptionGraphicsItem *options, QWidget *) {
void PartEllipse::paint(QPainter *painter, const QStyleOptionGraphicsItem *options, QWidget *widget) {
Q_UNUSED(widget);
applyStylesToQPainter(*painter);
QPen t = painter -> pen();
t.setCosmetic(options && options -> levelOfDetail < 1.0);

View File

@@ -65,7 +65,8 @@ uint PartLine::requiredLengthForEndType(const QET::EndType &end_type) {
@param options Options pour affiner le rendu
@param widget Widget sur lequel le rendu est effectue
*/
void PartLine::paint(QPainter *painter, const QStyleOptionGraphicsItem *options, QWidget */*w*/) {
void PartLine::paint(QPainter *painter, const QStyleOptionGraphicsItem *options, QWidget *widget) {
Q_UNUSED(widget);
// inutile de dessiner une ligne nulle
if (line().p1() == line().p2()) return;
applyStylesToQPainter(*painter);

View File

@@ -94,7 +94,8 @@ const QDomElement PartPolygon::toXml(QDomDocument &xml_document) const {
@param options Options pour affiner le rendu
@param widget Widget sur lequel le rendu est effectue
*/
void PartPolygon::paint(QPainter *painter, const QStyleOptionGraphicsItem *options, QWidget *) {
void PartPolygon::paint(QPainter *painter, const QStyleOptionGraphicsItem *options, QWidget *widget) {
Q_UNUSED(widget);
applyStylesToQPainter(*painter);
QPen t = painter -> pen();
t.setCosmetic(options && options -> levelOfDetail < 1.0);

View File

@@ -43,7 +43,8 @@ PartRectangle::~PartRectangle() {
@param options Options pour affiner le rendu
@param widget Widget sur lequel le rendu est effectue
*/
void PartRectangle::paint(QPainter *painter, const QStyleOptionGraphicsItem *options, QWidget *) {
void PartRectangle::paint(QPainter *painter, const QStyleOptionGraphicsItem *options, QWidget *widget) {
Q_UNUSED(widget);
applyStylesToQPainter(*painter);
QPen t = painter -> pen();
t.setCosmetic(options && options -> levelOfDetail < 1.0);

View File

@@ -86,11 +86,12 @@ QWidget *PartTerminal::elementInformations() {
/**
Dessine la borne
@param painter QPainter a utiliser pour rendre le dessin
@param p QPainter a utiliser pour rendre le dessin
@param options Options pour affiner le rendu
@param widget Widget sur lequel le rendu est effectue
*/
void PartTerminal::paint(QPainter *p, const QStyleOptionGraphicsItem *options, QWidget *) {
void PartTerminal::paint(QPainter *p, const QStyleOptionGraphicsItem *options, QWidget *widget) {
Q_UNUSED(widget);
p -> save();
// annulation des renderhints

View File

@@ -71,48 +71,50 @@ QETElementEditor::~QETElementEditor() {
Met en place les actions
*/
void QETElementEditor::setupActions() {
new_element = new QAction(QET::Icons::DocumentNew, tr("&Nouveau"), this);
open = new QAction(QET::Icons::DocumentOpen, tr("&Ouvrir"), this);
open_file = new QAction(QET::Icons::DocumentOpen, tr("&Ouvrir depuis un fichier"), this);
save = new QAction(QET::Icons::DocumentSave, tr("&Enregistrer"), this);
save_as = new QAction(QET::Icons::DocumentSaveAs, tr("Enregistrer sous"), this);
save_as_file = new QAction(QET::Icons::DocumentSaveAs, tr("Enregistrer dans un fichier"), this);
reload = new QAction(QET::Icons::ViewRefresh, tr("Recharger"), this);
quit = new QAction(QET::Icons::ApplicationExit, tr("&Quitter"), this);
selectall = new QAction(QET::Icons::EditSelectAll, tr("Tout s\351lectionner"), this);
deselectall = new QAction( tr("D\351s\351lectionner tout"), this);
cut = new QAction(QET::Icons::EditCut, tr("Co&uper"), this);
copy = new QAction(QET::Icons::EditCopy, tr("Cop&ier"), this);
paste = new QAction(QET::Icons::EditPaste, tr("C&oller"), this);
paste_in_area = new QAction(QET::Icons::EditPaste, tr("C&oller dans la zone..."), this);
inv_select = new QAction( tr("Inverser la s\351lection"), this);
edit_delete = new QAction(QET::Icons::EditDelete, tr("&Supprimer"), this);
zoom_in = new QAction(QET::Icons::ZoomIn, tr("Zoom avant"), this);
zoom_out = new QAction(QET::Icons::ZoomOut, tr("Zoom arri\350re"), this);
zoom_fit = new QAction(QET::Icons::ZoomFitBest, tr("Zoom adapt\351"), this);
zoom_reset = new QAction(QET::Icons::ZoomOriginal, tr("Pas de zoom"), this);
edit_size_hs = new QAction(QET::Icons::HotSpot, tr("\311diter la taille et le point de saisie"), this);
edit_names = new QAction(QET::Icons::Names, tr("\311diter les noms"), this);
edit_ori = new QAction(QET::Icons::Orientations, tr("\311diter les orientations"), this);
edit_raise = new QAction(QET::Icons::Raise, tr("Rapprocher"), this);
edit_lower = new QAction(QET::Icons::Lower, tr("\311loigner"), this);
edit_backward = new QAction(QET::Icons::SendBackward, tr("Envoyer au fond"), this);
edit_forward = new QAction(QET::Icons::BringForward, tr("Amener au premier plan"), this);
move = new QAction(QET::Icons::PartSelect, tr("D\351placer un objet"), this);
add_line = new QAction(QET::Icons::PartLine, tr("Ajouter une ligne"), this);
add_rectangle = new QAction(QET::Icons::PartRectangle, tr("Ajouter un rectangle"), this);
add_ellipse = new QAction(QET::Icons::PartEllipse, tr("Ajouter une ellipse"), this);
add_circle = new QAction(QET::Icons::PartCircle, tr("Ajouter un cercle"), this);
add_polygon = new QAction(QET::Icons::PartPolygon, tr("Ajouter un polygone"), this);
add_text = new QAction(QET::Icons::PartText, tr("Ajouter du texte"), this);
add_arc = new QAction(QET::Icons::PartArc, tr("Ajouter un arc de cercle"), this);
add_terminal = new QAction(QET::Icons::Terminal, tr("Ajouter une borne"), this);
add_textfield = new QAction(QET::Icons::PartTextField, tr("Ajouter un champ de texte"), this);
fullscreen = new QAction(this);
new_element = new QAction(QET::Icons::DocumentNew, tr("&Nouveau"), this);
open = new QAction(QET::Icons::DocumentOpen, tr("&Ouvrir"), this);
open_file = new QAction(QET::Icons::DocumentOpen, tr("&Ouvrir depuis un fichier"), this);
save = new QAction(QET::Icons::DocumentSave, tr("&Enregistrer"), this);
save_as = new QAction(QET::Icons::DocumentSaveAs, tr("Enregistrer sous"), this);
save_as_file = new QAction(QET::Icons::DocumentSaveAs, tr("Enregistrer dans un fichier"), this);
reload = new QAction(QET::Icons::ViewRefresh, tr("Recharger"), this);
quit = new QAction(QET::Icons::ApplicationExit, tr("&Quitter"), this);
selectall = new QAction(QET::Icons::EditSelectAll, tr("Tout s\351lectionner"), this);
deselectall = new QAction( tr("D\351s\351lectionner tout"), this);
cut = new QAction(QET::Icons::EditCut, tr("Co&uper"), this);
copy = new QAction(QET::Icons::EditCopy, tr("Cop&ier"), this);
paste = new QAction(QET::Icons::EditPaste, tr("C&oller"), this);
paste_in_area = new QAction(QET::Icons::EditPaste, tr("C&oller dans la zone..."), this);
paste_from_file = new QAction(QET::Icons::XmlTextFile, tr("un fichier"), this);
paste_from_elmt = new QAction(QET::Icons::Element, tr("un \351l\351ment"), this);
inv_select = new QAction( tr("Inverser la s\351lection"), this);
edit_delete = new QAction(QET::Icons::EditDelete, tr("&Supprimer"), this);
zoom_in = new QAction(QET::Icons::ZoomIn, tr("Zoom avant"), this);
zoom_out = new QAction(QET::Icons::ZoomOut, tr("Zoom arri\350re"), this);
zoom_fit = new QAction(QET::Icons::ZoomFitBest, tr("Zoom adapt\351"), this);
zoom_reset = new QAction(QET::Icons::ZoomOriginal, tr("Pas de zoom"), this);
edit_size_hs = new QAction(QET::Icons::HotSpot, tr("\311diter la taille et le point de saisie"), this);
edit_names = new QAction(QET::Icons::Names, tr("\311diter les noms"), this);
edit_ori = new QAction(QET::Icons::Orientations, tr("\311diter les orientations"), this);
edit_raise = new QAction(QET::Icons::Raise, tr("Rapprocher"), this);
edit_lower = new QAction(QET::Icons::Lower, tr("\311loigner"), this);
edit_backward = new QAction(QET::Icons::SendBackward, tr("Envoyer au fond"), this);
edit_forward = new QAction(QET::Icons::BringForward, tr("Amener au premier plan"), this);
move = new QAction(QET::Icons::PartSelect, tr("D\351placer un objet"), this);
add_line = new QAction(QET::Icons::PartLine, tr("Ajouter une ligne"), this);
add_rectangle = new QAction(QET::Icons::PartRectangle, tr("Ajouter un rectangle"), this);
add_ellipse = new QAction(QET::Icons::PartEllipse, tr("Ajouter une ellipse"), this);
add_circle = new QAction(QET::Icons::PartCircle, tr("Ajouter un cercle"), this);
add_polygon = new QAction(QET::Icons::PartPolygon, tr("Ajouter un polygone"), this);
add_text = new QAction(QET::Icons::PartText, tr("Ajouter du texte"), this);
add_arc = new QAction(QET::Icons::PartArc, tr("Ajouter un arc de cercle"), this);
add_terminal = new QAction(QET::Icons::Terminal, tr("Ajouter une borne"), this);
add_textfield = new QAction(QET::Icons::PartTextField, tr("Ajouter un champ de texte"), this);
fullscreen = new QAction(this);
slot_updateFullScreenAction();
configure = new QAction(QET::Icons::Configure, tr("&Configurer QElectroTech"), this);
about_qet = new QAction(QET::Icons::QETLogo, tr("\300 &propos de QElectroTech"), this);
about_qt = new QAction(QET::Icons::QtLogo, tr("\300 propos de &Qt"), this);
configure = new QAction(QET::Icons::Configure, tr("&Configurer QElectroTech"), this);
about_qet = new QAction(QET::Icons::QETLogo, tr("\300 &propos de QElectroTech"), this);
about_qt = new QAction(QET::Icons::QtLogo, tr("\300 propos de &Qt"), this);
QString add_status_tip = tr("Maintenez la touche Shift enfonc\351e pour effectuer plusieurs ajouts d'affil\351e");
add_line -> setStatusTip(add_status_tip);
@@ -173,61 +175,63 @@ void QETElementEditor::setupActions() {
QETApp *qet_app = QETApp::instance();
connect(new_element, SIGNAL(triggered()), this, SLOT(slot_new()));
connect(open, SIGNAL(triggered()), this, SLOT(slot_open()));
connect(open_file, SIGNAL(triggered()), this, SLOT(slot_openFile()));
connect(save, SIGNAL(triggered()), this, SLOT(slot_save()));
connect(save_as, SIGNAL(triggered()), this, SLOT(slot_saveAs()));
connect(save_as_file, SIGNAL(triggered()), this, SLOT(slot_saveAsFile()));
connect(reload, SIGNAL(triggered()), this, SLOT(slot_reload()));
connect(quit, SIGNAL(triggered()), this, SLOT(close()));
connect(selectall, SIGNAL(triggered()), ce_scene, SLOT(slot_selectAll()));
connect(deselectall, SIGNAL(triggered()), ce_scene, SLOT(slot_deselectAll()));
connect(inv_select, SIGNAL(triggered()), ce_scene, SLOT(slot_invertSelection()));
connect(cut, SIGNAL(triggered()), ce_view, SLOT(cut()));
connect(copy, SIGNAL(triggered()), ce_view, SLOT(copy()));
connect(paste, SIGNAL(triggered()), ce_view, SLOT(paste()));
connect(paste_in_area, SIGNAL(triggered()), ce_view, SLOT(pasteInArea()));
connect(zoom_in, SIGNAL(triggered()), ce_view, SLOT(zoomIn()));
connect(zoom_out, SIGNAL(triggered()), ce_view, SLOT(zoomOut()));
connect(zoom_fit, SIGNAL(triggered()), ce_view, SLOT(zoomFit()));
connect(zoom_reset, SIGNAL(triggered()), ce_view, SLOT(zoomReset()));
connect(edit_delete, SIGNAL(triggered()), ce_scene, SLOT(slot_delete()));
connect(edit_size_hs, SIGNAL(triggered()), ce_scene, SLOT(slot_editSizeHotSpot()));
connect(edit_names, SIGNAL(triggered()), ce_scene, SLOT(slot_editNames()));
connect(fullscreen, SIGNAL(triggered()), this, SLOT(toggleFullScreen()));
connect(configure, SIGNAL(triggered()), qet_app, SLOT(configureQET()));
connect(edit_ori, SIGNAL(triggered()), ce_scene, SLOT(slot_editOrientations()));
connect(edit_forward, SIGNAL(triggered()), ce_scene, SLOT(slot_bringForward()));
connect(edit_raise, SIGNAL(triggered()), ce_scene, SLOT(slot_raise()));
connect(edit_lower, SIGNAL(triggered()), ce_scene, SLOT(slot_lower()));
connect(edit_backward, SIGNAL(triggered()), ce_scene, SLOT(slot_sendBackward()));
connect(move, SIGNAL(triggered()), ce_scene, SLOT(slot_move()));
connect(add_line, SIGNAL(triggered()), ce_scene, SLOT(slot_addLine()));
connect(add_rectangle, SIGNAL(triggered()), ce_scene, SLOT(slot_addRectangle()));
connect(add_ellipse, SIGNAL(triggered()), ce_scene, SLOT(slot_addEllipse()));
connect(add_circle, SIGNAL(triggered()), ce_scene, SLOT(slot_addCircle()));
connect(add_polygon, SIGNAL(triggered()), ce_scene, SLOT(slot_addPolygon()));
connect(add_text, SIGNAL(triggered()), ce_scene, SLOT(slot_addText()));
connect(add_arc, SIGNAL(triggered()), ce_scene, SLOT(slot_addArc()));
connect(add_terminal, SIGNAL(triggered()), ce_scene, SLOT(slot_addTerminal()));
connect(add_textfield, SIGNAL(triggered()), ce_scene, SLOT(slot_addTextField()));
connect(new_element, SIGNAL(triggered()), this, SLOT(slot_new()));
connect(open, SIGNAL(triggered()), this, SLOT(slot_open()));
connect(open_file, SIGNAL(triggered()), this, SLOT(slot_openFile()));
connect(save, SIGNAL(triggered()), this, SLOT(slot_save()));
connect(save_as, SIGNAL(triggered()), this, SLOT(slot_saveAs()));
connect(save_as_file, SIGNAL(triggered()), this, SLOT(slot_saveAsFile()));
connect(reload, SIGNAL(triggered()), this, SLOT(slot_reload()));
connect(quit, SIGNAL(triggered()), this, SLOT(close()));
connect(selectall, SIGNAL(triggered()), ce_scene, SLOT(slot_selectAll()));
connect(deselectall, SIGNAL(triggered()), ce_scene, SLOT(slot_deselectAll()));
connect(inv_select, SIGNAL(triggered()), ce_scene, SLOT(slot_invertSelection()));
connect(cut, SIGNAL(triggered()), ce_view, SLOT(cut()));
connect(copy, SIGNAL(triggered()), ce_view, SLOT(copy()));
connect(paste, SIGNAL(triggered()), ce_view, SLOT(paste()));
connect(paste_in_area, SIGNAL(triggered()), ce_view, SLOT(pasteInArea()));
connect(paste_from_file, SIGNAL(triggered()), this, SLOT(pasteFromFile()));
connect(paste_from_elmt, SIGNAL(triggered()), this, SLOT(pasteFromElement()));
connect(zoom_in, SIGNAL(triggered()), ce_view, SLOT(zoomIn()));
connect(zoom_out, SIGNAL(triggered()), ce_view, SLOT(zoomOut()));
connect(zoom_fit, SIGNAL(triggered()), ce_view, SLOT(zoomFit()));
connect(zoom_reset, SIGNAL(triggered()), ce_view, SLOT(zoomReset()));
connect(edit_delete, SIGNAL(triggered()), ce_scene, SLOT(slot_delete()));
connect(edit_size_hs, SIGNAL(triggered()), ce_scene, SLOT(slot_editSizeHotSpot()));
connect(edit_names, SIGNAL(triggered()), ce_scene, SLOT(slot_editNames()));
connect(fullscreen, SIGNAL(triggered()), this, SLOT(toggleFullScreen()));
connect(configure, SIGNAL(triggered()), qet_app, SLOT(configureQET()));
connect(edit_ori, SIGNAL(triggered()), ce_scene, SLOT(slot_editOrientations()));
connect(edit_forward, SIGNAL(triggered()), ce_scene, SLOT(slot_bringForward()));
connect(edit_raise, SIGNAL(triggered()), ce_scene, SLOT(slot_raise()));
connect(edit_lower, SIGNAL(triggered()), ce_scene, SLOT(slot_lower()));
connect(edit_backward, SIGNAL(triggered()), ce_scene, SLOT(slot_sendBackward()));
connect(move, SIGNAL(triggered()), ce_scene, SLOT(slot_move()));
connect(add_line, SIGNAL(triggered()), ce_scene, SLOT(slot_addLine()));
connect(add_rectangle, SIGNAL(triggered()), ce_scene, SLOT(slot_addRectangle()));
connect(add_ellipse, SIGNAL(triggered()), ce_scene, SLOT(slot_addEllipse()));
connect(add_circle, SIGNAL(triggered()), ce_scene, SLOT(slot_addCircle()));
connect(add_polygon, SIGNAL(triggered()), ce_scene, SLOT(slot_addPolygon()));
connect(add_text, SIGNAL(triggered()), ce_scene, SLOT(slot_addText()));
connect(add_arc, SIGNAL(triggered()), ce_scene, SLOT(slot_addArc()));
connect(add_terminal, SIGNAL(triggered()), ce_scene, SLOT(slot_addTerminal()));
connect(add_textfield, SIGNAL(triggered()), ce_scene, SLOT(slot_addTextField()));
connect(move, SIGNAL(triggered()), this, SLOT(slot_setRubberBandToView()));
connect(add_line, SIGNAL(triggered()), this, SLOT(slot_setNoDragToView()));
connect(add_rectangle, SIGNAL(triggered()), this, SLOT(slot_setNoDragToView()));
connect(add_ellipse, SIGNAL(triggered()), this, SLOT(slot_setNoDragToView()));
connect(add_circle, SIGNAL(triggered()), this, SLOT(slot_setNoDragToView()));
connect(add_polygon, SIGNAL(triggered()), this, SLOT(slot_setNoDragToView()));
connect(add_text, SIGNAL(triggered()), this, SLOT(slot_setNoDragToView()));
connect(add_arc, SIGNAL(triggered()), this, SLOT(slot_setNoDragToView()));
connect(add_terminal, SIGNAL(triggered()), this, SLOT(slot_setNoDragToView()));
connect(add_textfield, SIGNAL(triggered()), this, SLOT(slot_setNoDragToView()));
connect(move, SIGNAL(triggered()), this, SLOT(slot_setRubberBandToView()));
connect(add_line, SIGNAL(triggered()), this, SLOT(slot_setNoDragToView()));
connect(add_rectangle, SIGNAL(triggered()), this, SLOT(slot_setNoDragToView()));
connect(add_ellipse, SIGNAL(triggered()), this, SLOT(slot_setNoDragToView()));
connect(add_circle, SIGNAL(triggered()), this, SLOT(slot_setNoDragToView()));
connect(add_polygon, SIGNAL(triggered()), this, SLOT(slot_setNoDragToView()));
connect(add_text, SIGNAL(triggered()), this, SLOT(slot_setNoDragToView()));
connect(add_arc, SIGNAL(triggered()), this, SLOT(slot_setNoDragToView()));
connect(add_terminal, SIGNAL(triggered()), this, SLOT(slot_setNoDragToView()));
connect(add_textfield, SIGNAL(triggered()), this, SLOT(slot_setNoDragToView()));
connect(about_qet, SIGNAL(triggered()), qet_app, SLOT(aboutQET()));
connect(about_qt, SIGNAL(triggered()), qet_app, SLOT(aboutQt()));
connect(about_qet, SIGNAL(triggered()), qet_app, SLOT(aboutQET()));
connect(about_qt, SIGNAL(triggered()), qet_app, SLOT(aboutQt()));
connect(ce_scene, SIGNAL(needNormalMode()), this, SLOT(slot_setNormalMode()));
connect(ce_scene, SIGNAL(needNormalMode()), this, SLOT(slot_setNormalMode()));
move -> setCheckable(true);
add_line -> setCheckable(true);
@@ -341,6 +345,11 @@ void QETElementEditor::setupMenus() {
file_menu -> addSeparator();
file_menu -> addAction(quit);
paste_from_menu = new QMenu(tr("Coller depuis..."));
paste_from_menu -> setIcon(QET::Icons::EditPaste);
paste_from_menu -> addAction(paste_from_file);
paste_from_menu -> addAction(paste_from_elmt);
edit_menu -> addAction(undo);
edit_menu -> addAction(redo);
edit_menu -> addSeparator();
@@ -352,6 +361,7 @@ void QETElementEditor::setupMenus() {
edit_menu -> addAction(copy);
edit_menu -> addAction(paste);
edit_menu -> addAction(paste_in_area);
edit_menu -> addMenu(paste_from_menu);
edit_menu -> addSeparator();
edit_menu -> addAction(edit_delete);
edit_menu -> addSeparator();
@@ -819,18 +829,13 @@ void QETElementEditor::slot_open() {
Demande un fichier a l'utilisateur et ouvre ce fichier
*/
void QETElementEditor::slot_openFile() {
// repertoire a afficher initialement dans le dialogue
QString open_dir = filename_.isEmpty() ? QETApp::customElementsDir() : QDir(filename_).absolutePath();
// demande un nom de fichier a ouvrir a l'utilisateur
QString user_filename = QFileDialog::getOpenFileName(
this,
tr("Ouvrir un fichier", "dialog title"),
filename_.isEmpty() ? QETApp::customElementsDir() : QDir(filename_).absolutePath(),
tr(
"\311l\351ments QElectroTech (*.elmt);;"
"Fichiers XML (*.xml);;"
"Tous les fichiers (*)",
"filetypes allowed when opening an element file"
)
);
QString user_filename = QETElementEditor::getOpenElementFileName(this, open_dir);
// ouvre l'element
openElement(user_filename);
}
@@ -1010,6 +1015,28 @@ QWidget *QETElementEditor::clearToolsDock() {
return(0);
}
/**
Exporte le document XML xml_document vers le presse-papier puis declenche
son collage dans l'editeur courant, avec selection de la zone de collage
@param xml_document Document XML a copier/coller
@see ElementView::pasteInArea
*/
void QETElementEditor::copyAndPasteXml(const QDomDocument &xml_document) {
// accede au presse-papier
QClipboard *clipboard = QApplication::clipboard();
// genere la description XML de la selection
QString clipboard_content = xml_document.toString(4);
// met la description XML dans le presse-papier
if (clipboard -> supportsSelection()) {
clipboard -> setText(clipboard_content, QClipboard::Selection);
}
clipboard -> setText(clipboard_content);
ce_view -> pasteInArea();
}
/**
Permet de quitter l'editeur lors de la fermeture de la fenetre principale
@param qce Le QCloseEvent correspondant a l'evenement de fermeture
@@ -1141,6 +1168,31 @@ QET::OrientedMovement QETElementEditor::pasteMovement() {
return(QET::ToEast);
}
/**
Demande a l'utilisateur d'ouvrir un fichier sense etre un element.
@param parent QWidget parent du dialogue d'ouverture de fichier
@param initial_dir Repertoire a afficher initialement - si une chaine vide
est fournie, QETApp::customElementsDir() sera utilise.
@return Le chemin du fichier choisi ou une chaine vide si l'utilisateur a
clique sur le bouton "Annuler".
@see QETApp::customElementsDir()
*/
QString QETElementEditor::getOpenElementFileName(QWidget *parent, const QString &initial_dir) {
// demande un nom de fichier a ouvrir a l'utilisateur
QString user_filename = QFileDialog::getOpenFileName(
parent,
tr("Ouvrir un fichier", "dialog title"),
initial_dir.isEmpty() ? QETApp::customElementsDir() : initial_dir,
tr(
"\311l\351ments QElectroTech (*.elmt);;"
"Fichiers XML (*.xml);;"
"Tous les fichiers (*)",
"filetypes allowed when opening an element file"
)
);
return(user_filename);
}
/**
@param location Emplacement de l'element a editer
*/
@@ -1190,3 +1242,70 @@ void QETElementEditor::fromLocation(const ElementsLocation &location) {
setLocation(location);
slot_updateMenus();
}
/**
Demande un fichier a l'utilisateur, l'ouvre en tant que fichier element,
met son contenu dans le presse-papiers, et appelle ElementView::PasteInArea
*/
void QETElementEditor::pasteFromFile() {
// demande le chemin du fichier a ouvrir a l'utilisateur
QString element_file_path = getOpenElementFileName(this);
if (element_file_path.isEmpty()) return;
QString error_message;
QDomDocument xml_document;
QFile element_file(element_file_path);
// le fichier doit etre lisible
if (!element_file.open(QIODevice::ReadOnly)) {
error_message = QString(tr("Impossible d'ouvrir le fichier %1.", "message box content")).arg(element_file_path);
} else {
// le fichier doit etre un document XML
if (!xml_document.setContent(&element_file)) {
error_message = tr("Ce fichier n'est pas un document XML valide", "message box content");
}
element_file.close();
}
if (!error_message.isEmpty()) {
QET::MessageBox::critical(this, tr("Erreur", "toolbar title"), error_message);
}
copyAndPasteXml(xml_document);
}
/**
Denande un element a l'utilisateur, met son contenu dans le presse-papiers,
et appelle ElementView::PasteInArea
*/
void QETElementEditor::pasteFromElement() {
// demande le chemin virtuel de l'element a ouvrir a l'utilisateur
ElementsLocation location = ElementDialog::getOpenElementLocation(this);
if (location.isNull()) return;
// verifie l'existence de l'element choisi
ElementsCollectionItem *item = QETApp::collectionItem(location);
ElementDefinition *element = 0;
if (!item) {
QET::MessageBox::critical(
this,
tr("\311l\351ment inexistant.", "message box title"),
tr("L'\351l\351ment n'existe pas.", "message box content")
);
return;
}
if (!item -> isElement() || !(element = qobject_cast<ElementDefinition *>(item)) || element -> isNull()) {
QET::MessageBox::critical(
this,
tr("\311l\351ment inexistant.", "message box title"),
tr("Le chemin virtuel choisi ne correspond pas \340 un \351l\351ment.", "message box content")
);
return;
}
// creation d'un document XML a partir de la description XML de l'element
QDomDocument document_xml;
QDomNode node = document_xml.importNode(element -> xml(), true);
document_xml.appendChild(node);
copyAndPasteXml(document_xml);
}

View File

@@ -43,7 +43,7 @@ class QETElementEditor : public QMainWindow {
/// booleen indiquant si l'editeur est en mode "lecture seule" ou non
bool read_only;
/// menus
QMenu *file_menu, *edit_menu, *display_menu, *tools_menu, *config_menu, *help_menu;
QMenu *file_menu, *edit_menu, *paste_from_menu, *display_menu, *tools_menu, *config_menu, *help_menu;
/// vue sur la scene d'edition
ElementView *ce_view;
/// scene d'edition
@@ -66,7 +66,7 @@ class QETElementEditor : public QMainWindow {
QAction *new_element, *open, *open_file, *save, *save_as, *save_as_file, *reload, *quit;
/// actions du menu edition
QAction *selectall, *deselectall, *inv_select;
QAction *cut, *copy, *paste, *paste_in_area;
QAction *cut, *copy, *paste, *paste_in_area, *paste_from_file, *paste_from_elmt;
QAction *undo, *redo;
QAction *edit_delete, *edit_size_hs, *edit_names, *edit_ori;
QAction *edit_raise, *edit_lower, *edit_backward, *edit_forward;
@@ -117,6 +117,7 @@ class QETElementEditor : public QMainWindow {
void writeSettings();
static QPointF pasteOffset();
static QET::OrientedMovement pasteMovement();
static QString getOpenElementFileName(QWidget * = 0, const QString & = QString());
protected:
void closeEvent(QCloseEvent *);
@@ -128,6 +129,7 @@ class QETElementEditor : public QMainWindow {
void setupInterface();
bool canClose();
QWidget *clearToolsDock();
void copyAndPasteXml(const QDomDocument &);
public slots:
void slot_new();
@@ -152,6 +154,8 @@ class QETElementEditor : public QMainWindow {
void toggleFullScreen();
void xmlPreview();
bool checkElement();
void pasteFromFile();
void pasteFromElement();
};
/**

View File

@@ -188,7 +188,8 @@ bool Element::setOrientation(QET::Orientation o) {
@param painter Le QPainter a utiliser pour dessiner les axes
@param options Les options de style a prendre en compte
*/
void Element::drawAxes(QPainter *painter, const QStyleOptionGraphicsItem *) {
void Element::drawAxes(QPainter *painter, const QStyleOptionGraphicsItem *options) {
Q_UNUSED(options);
painter -> setPen(Qt::blue);
painter -> drawLine(0, 0, 10, 0);
painter -> drawLine(7,-3, 10, 0);
@@ -203,10 +204,11 @@ void Element::drawAxes(QPainter *painter, const QStyleOptionGraphicsItem *) {
/**
Dessine le cadre de selection de l'element de maniere systematiquement non antialiasee.
@param qp Le QPainter a utiliser pour dessiner les bornes.
@param painter Le QPainter a utiliser pour dessiner les bornes.
@param options Les options de style a prendre en compte
*/
void Element::drawSelection(QPainter *painter, const QStyleOptionGraphicsItem *) {
void Element::drawSelection(QPainter *painter, const QStyleOptionGraphicsItem *options) {
Q_UNUSED(options);
painter -> save();
// Annulation des renderhints
painter -> setRenderHint(QPainter::Antialiasing, false);

View File

@@ -231,7 +231,8 @@ bool ElementDefinition::equals(ElementDefinition &other) {
@param deep_copy Argument ignore - une copie "recursive" n'a pas de sens pour un element
@return La copie de l'element ou 0 si le processus a echoue
*/
ElementsCollectionItem *ElementDefinition::copy(ElementsCategory *target_category, MoveElementsHandler *handler, bool) {
ElementsCollectionItem *ElementDefinition::copy(ElementsCategory *target_category, MoveElementsHandler *handler, bool deep_copy) {
Q_UNUSED(deep_copy);
if (!target_category) return(0);
// echec si le path name de cet element est vide

View File

@@ -51,7 +51,7 @@ class ElementDefinition : public ElementsCollectionItem {
@param xml_element Nouvelle definition XML de l'element
@return true si l'operation s'est bien passee, false sinon
*/
virtual bool setXml(const QDomElement &) = 0;
virtual bool setXml(const QDomElement &xml_element) = 0;
/**
@return true si la definition n'est pas disponible

View File

@@ -100,7 +100,7 @@ QTreeWidgetItem *ElementsCategoriesList::addCollection(QTreeWidgetItem *qtwi_par
Methode privee permettant d'ajouter une categorie
@param qtwi_parent QTreeWidgetItem parent sous lequel sera insere la categorie
@param category Categorie d'elements a inserer
@param name Parametre facultatif permettant de forcer le nom affiche
@param cat_name Parametre facultatif permettant de forcer le nom affiche
S'il n'est pas precise, la methode utilise le nom declare par la categorie.
@param icon Icone a utiliser pour l'affichage de la categorie
Si elle n'est pas precisee, une icone par defaut est utilisee
@@ -133,9 +133,9 @@ QTreeWidgetItem *ElementsCategoriesList::addCategory(QTreeWidgetItem *qtwi_paren
Methode privee permettant d'ajouter un element
@param qtwi_parent QTreeWidgetItem parent sous lequel sera insere l'element
@param element Element a inserer
@param name Parametre facultatif permettant de forcer le nom affiche
@param elmt_name Parametre facultatif permettant de forcer le nom affiche
S'il n'est pas precise, la methode utilise le nom declare par la categorie.
Une icone sera generee a partir de l'element.
@param icon Icone a utiliser pour l'affichage de l'element
@return Le QTreeWidgetItem insere
*/
QTreeWidgetItem *ElementsCategoriesList::addElement(QTreeWidgetItem *qtwi_parent, ElementDefinition *element, const QString &elmt_name, const QIcon &icon) {
@@ -197,7 +197,8 @@ bool ElementsCategoriesList::selectLocation(const ElementsLocation &location) {
@param current QTreeWidgetItem selectionne
@param previous QTreeWidgetItem precedemment selectionne
*/
void ElementsCategoriesList::selectionChanged(QTreeWidgetItem *current, QTreeWidgetItem */*previous*/) {
void ElementsCategoriesList::selectionChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous) {
Q_UNUSED(previous);
ElementsLocation emited_location;
if (current) {
emited_location = locations_[current];

View File

@@ -460,7 +460,7 @@ ElementsCollectionItem *ElementsCategory::move(ElementsCategory *target_category
/**
Methode privee effectuant le deplacement de cette categorie a partir d'une
description du mouvement
@param mvt_dsc Description du mouvement
@param mvt_desc Description du mouvement
*/
void ElementsCategory::move(MoveElementsDescription *mvt_desc) {
// quelques pointeurs pour simplifier l'ecriture de la methode

View File

@@ -149,7 +149,7 @@ class ElementsCollectionItem : public QObject {
@param other_item Autre item
@return true si other_item est parent (direct ou indirect) de other_item, false sinon
*/
virtual bool isChildOf(ElementsCollectionItem *) = 0;
virtual bool isChildOf(ElementsCollectionItem *other_item) = 0;
/**
@return le nom de cet item dans l'arborescence
*/

View File

@@ -406,7 +406,8 @@ void ElementsPanel::dropEvent(QDropEvent *e) {
Gere le debut des drag'n drop
@param supportedActions Les actions supportees
*/
void ElementsPanel::startDrag(Qt::DropActions) {
void ElementsPanel::startDrag(Qt::DropActions supportedActions) {
Q_UNUSED(supportedActions);
// recupere l'emplacement selectionne
ElementsLocation location = selectedLocation();
if (location.isNull()) return;
@@ -488,7 +489,6 @@ QTreeWidgetItem *ElementsPanel::addProject(QTreeWidgetItem *qtwi_parent, QETProj
Methode permettant d'ajouter un schema au panel d'elements.
@param qtwi_parent QTreeWidgetItem parent sous lequel sera insere le schema
@param diagram Schema a inserer dans le panel d'elements
@param diagram_name Nom a utiliser pour le projet
@return Le QTreeWidgetItem insere le plus haut
*/
QTreeWidgetItem *ElementsPanel::addDiagram(QTreeWidgetItem *qtwi_parent, Diagram *diagram) {
@@ -546,7 +546,7 @@ QTreeWidgetItem *ElementsPanel::addCollection(QTreeWidgetItem *qtwi_parent, Elem
@param qtwi_parent QTreeWidgetItem parent sous lequel sera insere la categorie
@param category Categorie d'elements a inserer - si category vaut 0, cette
methode retourne 0.
@param name Parametre facultatif permettant de forcer le nom affiche
@param cat_name Parametre facultatif permettant de forcer le nom affiche
S'il n'est pas precise, la methode utilise le nom declare par la categorie.
@param icon Icone a utiliser pour l'affichage de la categorie
Si elle n'est pas precisee, une icone par defaut est utilisee
@@ -585,8 +585,8 @@ QTreeWidgetItem *ElementsPanel::addCategory(QTreeWidgetItem *qtwi_parent, Elemen
Methode privee permettant d'ajouter un element au panel d'elements
@param qtwi_parent QTreeWidgetItem parent sous lequel sera insere l'element
@param element Element a inserer
@param name Parametre facultatif permettant de forcer le nom affiche
S'il n'est pas precise, la methode utilise le nom declare par la categorie.
@param elmt_name Parametre facultatif permettant de forcer le nom affiche
S'il n'est pas precise, la methode utilise le nom declare par l'element.
Une icone sera generee a partir de l'element.
@return Le QTreeWidgetItem insere
*/
@@ -943,8 +943,8 @@ QString ElementsPanel::diagramTitleToDisplay(Diagram *diagram) const {
}
/**
@param une liste de QTreeWidgetItem pour lesquels il faut s'assurer que eux
et leurs parents sont visibles
@param items une liste de QTreeWidgetItem pour lesquels il faut s'assurer
que eux et leurs parents sont visibles
*/
void ElementsPanel::ensureHierarchyIsVisible(QList<QTreeWidgetItem *> items) {
// remonte l'arborescence pour lister les categories contenant les elements filtres

View File

@@ -54,6 +54,7 @@ ElementsPanelWidget::ElementsPanelWidget(QWidget *parent) : QWidget(parent) {
delete_category = new QAction(QET::Icons::FolderDelete, tr("Supprimer la cat\351gorie"), this);
delete_collection = new QAction(QET::Icons::FolderDelete, tr("Vider la collection"), this);
new_element = new QAction(QET::Icons::ElementNew, tr("Nouvel \351l\351ment"), this);
import_element = new QAction(QET::Icons::DocumentImport, tr("Importer un \351l\351ment"), this);
edit_element = new QAction(QET::Icons::ElementEdit, tr("\311diter l'\351l\351ment"), this);
delete_element = new QAction(QET::Icons::ElementDelete, tr("Supprimer l'\351l\351ment"), this);
prj_close = new QAction(QET::Icons::DocumentClose, tr("Fermer ce projet"), this);
@@ -89,6 +90,7 @@ ElementsPanelWidget::ElementsPanelWidget(QWidget *parent) : QWidget(parent) {
connect(delete_category, SIGNAL(triggered()), this, SLOT(deleteCategory()));
connect(delete_collection, SIGNAL(triggered()), this, SLOT(deleteCategory()));
connect(new_element, SIGNAL(triggered()), this, SLOT(newElement()));
connect(import_element, SIGNAL(triggered()), this, SLOT(importElement()));
connect(edit_element, SIGNAL(triggered()), this, SLOT(editElement()));
connect(delete_element, SIGNAL(triggered()), this, SLOT(deleteElement()));
connect(prj_close, SIGNAL(triggered()), this, SLOT(closeProject()));
@@ -123,6 +125,7 @@ ElementsPanelWidget::ElementsPanelWidget(QWidget *parent) : QWidget(parent) {
toolbar -> addAction(delete_category);
toolbar -> addSeparator();
toolbar -> addAction(new_element);
toolbar -> addAction(import_element);
toolbar -> addAction(edit_element);
toolbar -> addAction(delete_element);
@@ -222,6 +225,20 @@ void ElementsPanelWidget::newElement() {
new_element_wizard.exec();
}
/**
Import d'element en passant par l'editeur
*/
void ElementsPanelWidget::importElement() {
QString fileName = QETElementEditor::getOpenElementFileName(this);
// Ouverture de l'element dans l'editeur pour pouvoir ensuite l'enregistrer dans la categorie voulue
if (!fileName.isEmpty()) {
QETElementEditor *editor = new QETElementEditor();
editor -> fromFile(fileName);
editor -> show();
}
}
/**
Si une categorie accessible en ecriture est selectionnee, cette methode
affiche directement un formulaire de creation de categorie en utilisant la
@@ -488,7 +505,7 @@ void ElementsPanelWidget::launchElementEditor(const ElementsLocation &location)
/**
Lance l'editeur de categorie pour la categorie path
@param path Emplacement de la categorie a editer
@param location Emplacement de la categorie a editer
*/
void ElementsPanelWidget::launchCategoryEditor(const ElementsLocation &location) {
ElementsCategoryEditor ece(location, true);

View File

@@ -41,7 +41,7 @@ class ElementsPanelWidget : public QWidget {
QAction *reload;
QAction *new_category, *edit_category, *delete_category;
QAction *delete_collection;
QAction *new_element, *edit_element, *delete_element;
QAction *new_element, *import_element, *edit_element, *delete_element;
QAction *prj_close, *prj_edit_prop, *prj_prop_diagram, *prj_add_diagram, *prj_del_diagram;
QAction *copy_elements_, *move_elements_, *cancel_elements_;
QMenu *context_menu;
@@ -70,6 +70,7 @@ class ElementsPanelWidget : public QWidget {
void deleteDiagram();
void newCategory();
void newElement();
void importElement();
void editCategory();
void editElement();
void deleteCategory();

View File

@@ -309,34 +309,14 @@ QImage ExportDialog::generateImage(Diagram *diagram, int width, int height, bool
definis par le formulaire, false pour restaurer les parametres
*/
void ExportDialog::saveReloadDiagramParameters(Diagram *diagram, bool save) {
static bool state_drawBorder;
static bool state_drawInset;
static bool state_drawGrid;
static bool state_drawTerm;
static bool state_useBorder;
static ExportProperties state_exportProperties;
if (save) {
// memorise les parametres relatifs au schema
state_drawBorder = diagram -> border_and_inset.borderIsDisplayed();
state_drawInset = diagram -> border_and_inset.insetIsDisplayed();
state_drawGrid = diagram -> displayGrid();
state_drawTerm = diagram -> drawTerminals();
state_useBorder = diagram -> useBorder();
ExportProperties export_properties = epw -> exportProperties();
diagram -> setUseBorder (export_properties.exported_area == QET::BorderArea);
diagram -> setDrawTerminals (export_properties.draw_terminals);
diagram -> setDisplayGrid (export_properties.draw_grid);
diagram -> border_and_inset.displayBorder(export_properties.draw_border);
diagram -> border_and_inset.displayInset (export_properties.draw_inset);
// memorise les parametres relatifs au schema tout en appliquant les nouveaux
state_exportProperties = diagram -> applyProperties(epw -> exportProperties());
} else {
// restaure les parametres relatifs au schema
diagram -> border_and_inset.displayBorder(state_drawBorder);
diagram -> border_and_inset.displayInset(state_drawInset);
diagram -> setDisplayGrid(state_drawGrid);
diagram -> setDrawTerminals(state_drawTerm);
diagram -> setUseBorder(state_useBorder);
diagram -> applyProperties(state_exportProperties);
}
}

View File

@@ -33,6 +33,7 @@ ExportProperties::ExportProperties() :
draw_border(true),
draw_inset(true),
draw_terminals(false),
draw_colored_conductors(true),
exported_area(QET::BorderArea)
{
}
@@ -49,13 +50,14 @@ ExportProperties::~ExportProperties() {
@param prefix prefixe a ajouter devant les noms des parametres
*/
void ExportProperties::toSettings(QSettings &settings, const QString &prefix) const {
settings.setValue(prefix + "path", QDir::toNativeSeparators(destination_directory.absolutePath()));
settings.setValue(prefix + "format", format);
settings.setValue(prefix + "drawgrid", draw_grid);
settings.setValue(prefix + "drawborder", draw_border);
settings.setValue(prefix + "drawinset", draw_inset);
settings.setValue(prefix + "drawterminals", draw_terminals);
settings.setValue(prefix + "area", QET::diagramAreaToString(exported_area));
settings.setValue(prefix + "path", QDir::toNativeSeparators(destination_directory.absolutePath()));
settings.setValue(prefix + "format", format);
settings.setValue(prefix + "drawgrid", draw_grid);
settings.setValue(prefix + "drawborder", draw_border);
settings.setValue(prefix + "drawinset", draw_inset);
settings.setValue(prefix + "drawterminals", draw_terminals);
settings.setValue(prefix + "drawcoloredconductors", draw_colored_conductors);
settings.setValue(prefix + "area", QET::diagramAreaToString(exported_area));
}
/**
@@ -70,10 +72,11 @@ void ExportProperties::fromSettings(QSettings &settings, const QString &prefix)
format = settings.value(prefix + "format").toString();
draw_grid = settings.value(prefix + "drawgrid", false).toBool();
draw_border = settings.value(prefix + "drawborder", true ).toBool();
draw_inset = settings.value(prefix + "drawinset", true ).toBool();
draw_terminals = settings.value(prefix + "drawterminals", false).toBool();
draw_grid = settings.value(prefix + "drawgrid", false).toBool();
draw_border = settings.value(prefix + "drawborder", true ).toBool();
draw_inset = settings.value(prefix + "drawinset", true ).toBool();
draw_terminals = settings.value(prefix + "drawterminals", false).toBool();
draw_colored_conductors = settings.value(prefix + "drawcoloredconductors", true ).toBool();
exported_area = QET::diagramAreaFromString(settings.value(prefix + "area", "border").toString());
}

View File

@@ -43,6 +43,7 @@ class ExportProperties {
bool draw_border; ///< Faut-il dessiner le cadre ?
bool draw_inset; ///< Faut-il dessiner le cartouche ?
bool draw_terminals; ///< Faut-il dessiner les bornes ?
bool draw_colored_conductors; ///< Faut-il respecter les couleurs des conducteurs ?
QET::DiagramArea exported_area; ///< Zone du schema a exporter
};
#endif

View File

@@ -46,13 +46,14 @@ ExportPropertiesWidget::~ExportPropertiesWidget() {
ExportProperties ExportPropertiesWidget::exportProperties() const {
ExportProperties export_properties;
export_properties.destination_directory = QDir(dirpath -> text());
export_properties.format = format -> itemData(format -> currentIndex()).toString();
export_properties.draw_grid = draw_grid -> isChecked();
export_properties.draw_border = draw_border -> isChecked();
export_properties.draw_inset = draw_inset -> isChecked();
export_properties.draw_terminals = draw_terminals -> isChecked();
export_properties.exported_area = export_border -> isChecked() ? QET::BorderArea : QET::ElementsArea;
export_properties.destination_directory = QDir(dirpath -> text());
export_properties.format = format -> itemData(format -> currentIndex()).toString();
export_properties.draw_grid = draw_grid -> isChecked();
export_properties.draw_border = draw_border -> isChecked();
export_properties.draw_inset = draw_inset -> isChecked();
export_properties.draw_terminals = draw_terminals -> isChecked();
export_properties.draw_colored_conductors = draw_colored_conductors -> isChecked();
export_properties.exported_area = export_border -> isChecked() ? QET::BorderArea : QET::ElementsArea;
return(export_properties);
}
@@ -67,10 +68,11 @@ void ExportPropertiesWidget::setExportProperties(const ExportProperties &export_
if (index == -1) index = 0;
format -> setCurrentIndex(index);
draw_grid -> setChecked(export_properties.draw_grid);
draw_border -> setChecked(export_properties.draw_border);
draw_inset -> setChecked(export_properties.draw_inset);
draw_terminals -> setChecked(export_properties.draw_terminals);
draw_grid -> setChecked(export_properties.draw_grid);
draw_border -> setChecked(export_properties.draw_border);
draw_inset -> setChecked(export_properties.draw_inset);
draw_terminals -> setChecked(export_properties.draw_terminals);
draw_colored_conductors -> setChecked(export_properties.draw_colored_conductors);
if (export_properties.exported_area == QET::BorderArea) {
export_border -> setChecked(true);
@@ -79,6 +81,22 @@ void ExportPropertiesWidget::setExportProperties(const ExportProperties &export_
}
}
/**
Passe le widget en mode Impression ou en mode Export. Le mode Impression
n'affiche pas autant d'options que le mode Export.
@param mode true pour utiliser le widget en mode impression, false pour
l'utiliser en mode export
*/
void ExportPropertiesWidget::setPrintingMode(bool mode) {
dirpath_label -> setVisible(!mode);
dirpath -> setVisible(!mode);
button_browse -> setVisible(!mode);
format_label -> setVisible(!mode);
format -> setVisible(!mode);
export_border -> setVisible(!mode);
export_elements -> setVisible(!mode);
}
/**
Slot demandant a l'utilisateur de choisir un dossier
*/
@@ -99,10 +117,11 @@ void ExportPropertiesWidget::slot_chooseADirectory() {
void ExportPropertiesWidget::build() {
// le dialogue est un empilement vertical d'elements
QVBoxLayout *vboxLayout = new QVBoxLayout();
vboxLayout -> setContentsMargins(0, 0, 0, 0);
/* le dialogue comprend une ligne permettant d'indiquer un chemin de dossier (hboxLayout) */
QHBoxLayout *hboxLayout = new QHBoxLayout();
QLabel *dirpath_label = new QLabel(tr("Dossier cible :"), this);
dirpath_label = new QLabel(tr("Dossier cible :"), this);
dirpath = new QLineEdit(this);
QCompleter *completer = new QCompleter(this);
completer -> setModel(new QDirModel(completer));
@@ -117,7 +136,8 @@ void ExportPropertiesWidget::build() {
/* une ligne permettant de choisir le format (hboxLayout1) */
QHBoxLayout *hboxLayout1 = new QHBoxLayout();
hboxLayout1 -> addWidget(new QLabel(tr("Format :"), this));
format_label = new QLabel(tr("Format :"), this);
hboxLayout1 -> addWidget(format_label);
hboxLayout1 -> addWidget(format = new QComboBox(this));
format -> addItem(tr("PNG (*.png)"), "PNG");
format -> addItem(tr("JPEG (*.jpg)"), "JPG");
@@ -126,10 +146,9 @@ void ExportPropertiesWidget::build() {
hboxLayout1 -> addStretch();
vboxLayout -> addLayout(hboxLayout1);
/* un cadre permettant de specifier les options de l'image finale */
QGroupBox *groupbox_options = new QGroupBox(tr("Options"));
QGroupBox *groupbox_options = new QGroupBox(tr("Options de rendu", "groupbox title"));
QGridLayout *optionshlayout = new QGridLayout(groupbox_options);
// Choix de la zone du schema a exporter
@@ -156,9 +175,12 @@ void ExportPropertiesWidget::build() {
// dessiner les bornes
draw_terminals = new QCheckBox(tr("Dessiner les bornes"), groupbox_options);
optionshlayout -> addWidget(draw_terminals, 2, 1);
// conserver les couleurs des conducteurs
draw_colored_conductors = new QCheckBox(tr("Conserver les couleurs des conducteurs"), groupbox_options);
optionshlayout -> addWidget(draw_colored_conductors, 3, 0);
vboxLayout -> addWidget(groupbox_options);
vboxLayout -> addStretch();
setLayout(vboxLayout);
@@ -170,11 +192,17 @@ void ExportPropertiesWidget::build() {
setTabOrder(draw_border, draw_grid);
setTabOrder(draw_grid, draw_inset);
setTabOrder(draw_inset, draw_terminals);
setTabOrder(draw_terminals, draw_colored_conductors);
// connexion du bouton permettant le choix du repertoire
connect(button_browse, SIGNAL(released()), this, SLOT(slot_chooseADirectory()));
// emission de signaux lors du changement de format et lors du changement de zone exportee
connect(format, SIGNAL(currentIndexChanged(int)), this, SIGNAL(formatChanged()));
connect(exported_content_choices, SIGNAL(buttonClicked(QAbstractButton *)), this, SIGNAL(exportedAreaChanged()));
connect(draw_grid, SIGNAL(stateChanged(int)), this, SIGNAL(optionChanged()));
connect(draw_border, SIGNAL(stateChanged(int)), this, SIGNAL(optionChanged()));
connect(draw_inset, SIGNAL(stateChanged(int)), this, SIGNAL(optionChanged()));
connect(draw_terminals, SIGNAL(stateChanged(int)), this, SIGNAL(optionChanged()));
connect(draw_colored_conductors, SIGNAL(stateChanged(int)), this, SIGNAL(optionChanged()));
}

View File

@@ -38,6 +38,7 @@ class ExportPropertiesWidget : public QWidget {
public:
void setExportProperties(const ExportProperties &);
ExportProperties exportProperties() const;
void setPrintingMode(bool);
public slots:
void slot_chooseADirectory();
@@ -45,6 +46,7 @@ class ExportPropertiesWidget : public QWidget {
signals:
void formatChanged();
void exportedAreaChanged();
void optionChanged();
// methodes privees
private:
@@ -52,13 +54,16 @@ class ExportPropertiesWidget : public QWidget {
// attributs
private:
QLabel *dirpath_label;
QLineEdit *dirpath;
QPushButton *button_browse;
QLabel *format_label;
QComboBox *format;
QCheckBox *draw_grid;
QCheckBox *draw_border;
QCheckBox *draw_inset;
QCheckBox *draw_terminals;
QCheckBox *draw_colored_conductors;
QRadioButton *export_border;
QRadioButton *export_elements;
QButtonGroup *exported_content_choices;

View File

@@ -22,6 +22,7 @@
/**
Constructeur
@param uri Chemin du fichier contenant la definition de l'element
@param category Categorie parente
@param collection collection parente
*/
FileElementDefinition::FileElementDefinition(const QString &uri, FileElementsCategory *category, FileElementsCollection *collection) :

View File

@@ -198,7 +198,7 @@ QList<ElementDefinition *> FileElementsCategory::elements() {
/**
@return l'element correspondant au chemin virtuel elmt_path, ou 0 en cas d'echec
@param cat_path Chemin virtuel de l'element voulu
@param elmt_path Chemin virtuel de l'element voulu
*/
ElementDefinition *FileElementsCategory::element(const QString &elmt_path) {
// recupere les differentes parties du chemin

View File

@@ -94,7 +94,8 @@ QString IntegrationMoveElementsHandler::newNameForElement(const ElementDefinitio
@param dst Element cible
@return la reponse de l'utilisateur
*/
QET::Action IntegrationMoveElementsHandler::askUser(ElementDefinition */*src*/, ElementDefinition *dst) {
QET::Action IntegrationMoveElementsHandler::askUser(ElementDefinition *src, ElementDefinition *dst) {
Q_UNUSED(src);
initDialog();
int result = integ_dialog_ -> exec();
if (result == QDialog::Accepted) {

View File

@@ -125,7 +125,7 @@ DiagramView *ProjectView::currentDiagram() const {
/**
Gere la fermeture du schema.
@param event Le QCloseEvent decrivant l'evenement
@param qce Le QCloseEvent decrivant l'evenement
*/
void ProjectView::closeEvent(QCloseEvent *qce) {
// si la vue n'est pas liee a un projet, on ferme directement
@@ -361,7 +361,7 @@ void ProjectView::removeDiagram(DiagramView *diagram_view) {
/**
Enleve un schema du ProjectView
@param diagram_view Schema a enlever
@param diagram Schema a enlever
*/
void ProjectView::removeDiagram(Diagram *diagram) {
if (!diagram) return;

View File

@@ -30,8 +30,12 @@
#define QUOTE(x) STRINGIFY(x)
#define STRINGIFY(x) #x
#ifdef QET_ALLOW_OVERRIDE_CED_OPTION
QString QETApp::common_elements_dir = QString();
#endif
#ifdef QET_ALLOW_OVERRIDE_CD_OPTION
QString QETApp::config_dir = QString();
#endif
QString QETApp::lang_dir = QString();
FileElementsCollection *QETApp::common_collection = 0;
FileElementsCollection *QETApp::custom_collection = 0;
@@ -684,7 +688,7 @@ void QETApp::openFiles(const QETArguments &args) {
Sinon, le premier editeur de schemas existant venu devient visible et est
utilise. S'il n'y a aucun editeur de schemas ouvert, un nouveau est cree et
utilise.
@param files Fichiers a ouvrir
@param files_list Fichiers a ouvrir
*/
void QETApp::openProjectFiles(const QStringList &files_list) {
if (files_list.isEmpty()) return;
@@ -721,7 +725,7 @@ void QETApp::openProjectFiles(const QStringList &files_list) {
/**
Ouvre les fichiers elements passes en parametre. Si un element est deja
ouvert, la fentre qui l'edite est activee.
@param files Fichiers a ouvrir
@param files_list Fichiers a ouvrir
*/
void QETApp::openElementFiles(const QStringList &files_list) {
if (files_list.isEmpty()) return;
@@ -920,7 +924,9 @@ void QETApp::initConfiguration() {
// fichiers recents
// note : les icones doivent etre initialisees avant ces instructions (qui creent des menus en interne)
projects_recent_files_ = new RecentFiles("projects");
projects_recent_files_ -> setIconForFiles(QET::Icons::ProjectFile);
elements_recent_files_ = new RecentFiles("elements");
elements_recent_files_ -> setIconForFiles(QET::Icons::Element);
}
/**

View File

@@ -156,14 +156,18 @@ void QETArguments::clear() {
element_files_.clear();
options_.clear();
unknown_options_.clear();
#ifdef QET_ALLOW_OVERRIDE_CED_OPTION
common_elements_dir_.clear();
#endif
#ifdef QET_ALLOW_OVERRIDE_CD_OPTION
config_dir_.clear();
#endif
}
/**
Analyse des arguments et les retient dans cet objet.
Si cet objet contenait deja des arguments, ceux-ci sont oublies.
@param args Arguments a analyser
@param arguments Arguments a analyser
*/
void QETArguments::parseArguments(const QList<QString> &arguments) {
// oublie les eventuels arguments precedents

View File

@@ -1654,7 +1654,8 @@ void QETDiagramEditor::diagramIsAboutToBeRemoved(DiagramView *dv) {
Gere le retrait d'un schema dans un projet apres que le retrait soit effectif
@param dv DiagramView concerne
*/
void QETDiagramEditor::diagramWasRemoved(DiagramView *) {
void QETDiagramEditor::diagramWasRemoved(DiagramView *dv) {
Q_UNUSED(dv);
can_update_actions = true;
}
@@ -1777,3 +1778,17 @@ ExportProperties QETDiagramEditor::defaultExportProperties() {
return(def);
}
/**
@return Les parametres d'impression par defaut pour un schema
*/
ExportProperties QETDiagramEditor::defaultPrintProperties() {
// accede a la configuration de l'application
QSettings &settings = QETApp::settings();
ExportProperties def;
// lit les caracteristiques des conducteurs par defaut dans la configuration
def.fromSettings(settings, "print/default");
return(def);
}

View File

@@ -60,6 +60,7 @@ class QETDiagramEditor : public QMainWindow {
static BorderProperties defaultBorderProperties();
static ConductorProperties defaultConductorProperties();
static ExportProperties defaultExportProperties();
static ExportProperties defaultPrintProperties();
protected:
void actions();

View File

@@ -17,7 +17,7 @@
*/
#include "qeticons.h"
// on redeclare ici les icones
// on redeclare ici les icones
namespace QET {
namespace Icons {
QIcon AddColumn;
@@ -63,6 +63,7 @@ namespace QET {
QIcon EditRedo;
QIcon EditSelectAll;
QIcon EditUndo;
QIcon Element;
QIcon ElementDelete;
QIcon ElementEdit;
QIcon ElementNew;
@@ -110,6 +111,7 @@ namespace QET {
QIcon PrintPortrait;
QIcon PrintTwoPages;
QIcon Project;
QIcon ProjectFile;
QIcon QETIcon;
QIcon QETLogo;
QIcon QETOxygenLogo;
@@ -130,6 +132,7 @@ namespace QET {
QIcon ViewRefresh;
QIcon West;
QIcon WindowNew;
QIcon XmlTextFile;
QIcon ZoomFitBest;
QIcon ZoomIn;
QIcon ZoomOriginal;
@@ -214,6 +217,9 @@ void QET::Icons::initIcons() {
EditSelectAll .addFile(":/ico/22x22/edit-select-all.png");
EditUndo .addFile(":/ico/16x16/edit-undo.png");
EditUndo .addFile(":/ico/22x22/edit-undo.png");
Element .addFile(":/ico/oxygen-icons/16x16/mimetypes/application-x-qet-element.png");
Element .addFile(":/ico/oxygen-icons/22x22/mimetypes/application-x-qet-element.png");
Element .addFile(":/ico/oxygen-icons/32x32/mimetypes/application-x-qet-element.png");
ElementDelete .addFile(":/ico/22x22/element-delete.png");
ElementEdit .addFile(":/ico/22x22/element-edit.png");
ElementNew .addFile(":/ico/22x22/element-new.png");
@@ -262,10 +268,14 @@ void QET::Icons::initIcons() {
Phase .addFile(":/ico/16x16/phase.png");
PrintAllPages .addFile(":/ico/22x22/all_pages.png");
Printer .addFile(":/ico/32x32/printer.png");
Printer .addFile(":/ico/128x128/printer.png");
PrintLandscape .addFile(":/ico/22x22/landscape.png");
PrintPortrait .addFile(":/ico/22x22/portrait.png");
PrintTwoPages .addFile(":/ico/22x22/two_pages.png");
Project .addFile(":/ico/16x16/project.png");
ProjectFile .addFile(":/ico/oxygen-icons/16x16/mimetypes/application-x-qet-project.png");
ProjectFile .addFile(":/ico/oxygen-icons/22x22/mimetypes/application-x-qet-project.png");
ProjectFile .addFile(":/ico/oxygen-icons/32x32/mimetypes/application-x-qet-project.png");
QETIcon .addFile(":/ico/256x256/qelectrotech.png");
QETLogo .addFile(":/ico/16x16/qet.png");
QETLogo .addFile(":/ico/256x256/qet.png");
@@ -295,6 +305,9 @@ void QET::Icons::initIcons() {
West .addFile(":/ico/16x16/west.png");
WindowNew .addFile(":/ico/16x16/window-new.png");
WindowNew .addFile(":/ico/22x22/window-new.png");
XmlTextFile .addFile(":/ico/16x16/text-xml.png");
XmlTextFile .addFile(":/ico/22x22/text-xml.png");
XmlTextFile .addFile(":/ico/32x32/text-xml.png");
ZoomFitBest .addFile(":/ico/16x16/zoom-fit-best.png");
ZoomFitBest .addFile(":/ico/22x22/zoom-fit-best.png");
ZoomIn .addFile(":/ico/16x16/zoom-in.png");

View File

@@ -71,6 +71,7 @@ namespace QET {
extern QIcon EditRedo;
extern QIcon EditSelectAll;
extern QIcon EditUndo;
extern QIcon Element;
extern QIcon ElementDelete;
extern QIcon ElementEdit;
extern QIcon ElementNew;
@@ -120,6 +121,7 @@ namespace QET {
extern QIcon PrintPortrait;
extern QIcon PrintTwoPages;
extern QIcon Project;
extern QIcon ProjectFile;
extern QIcon QETIcon;
extern QIcon QETLogo;
extern QIcon QETOxygenLogo;
@@ -140,6 +142,7 @@ namespace QET {
extern QIcon ViewRefresh;
extern QIcon West;
extern QIcon WindowNew;
extern QIcon XmlTextFile;
extern QIcon ZoomFitBest;
extern QIcon ZoomIn;
extern QIcon ZoomOriginal;

View File

@@ -17,12 +17,17 @@
*/
#include "qetprintpreviewdialog.h"
#include "diagramschooser.h"
#include "exportproperties.h"
#include "exportpropertieswidget.h"
#include "qetdiagrameditor.h"
#include "qeticons.h"
/**
Constructeur
@param project Projet a imprimer
@param printer Imprimante a utiliser pour
@param widget Widget parent
@param f Flags passes au constructeur de QDialog puis QWidget
*/
QETPrintPreviewDialog::QETPrintPreviewDialog(QETProject *project, QPrinter *printer, QWidget *widget, Qt::WindowFlags f) :
QDialog(widget, f),
@@ -59,6 +64,13 @@ bool QETPrintPreviewDialog::fitDiagramsToPages() const {
return(fit_diagram_to_page_ -> isChecked());
}
/**
@return les options de rendu definies par l'utilisateur
*/
ExportProperties QETPrintPreviewDialog::exportProperties() const {
return(render_properties_ -> exportProperties());
}
/**
Passe a la premiere page
*/
@@ -114,7 +126,8 @@ void QETPrintPreviewDialog::useFullPage(bool full_page) {
Fait tenir ou non chaque schema sur une page
@param fit_diagram true pour adapter chaque schema sur une page, false sinon
*/
void QETPrintPreviewDialog::fitDiagramToPage(bool /*fit_diagram*/) {
void QETPrintPreviewDialog::fitDiagramToPage(bool fit_diagram) {
Q_UNUSED(fit_diagram);
preview_ -> updatePreview();
updateZoomList();
}
@@ -222,6 +235,12 @@ void QETPrintPreviewDialog::build() {
fit_diagram_to_page_label_ -> setContentsMargins(20, 0, 0, 0);
fit_diagram_to_page_ -> setChecked(true);
// recupere les parametres d'export definis dans la configuration de l'application
ExportProperties default_print_properties = QETDiagramEditor::defaultPrintProperties();
render_properties_ = new ExportPropertiesWidget(default_print_properties);
render_properties_ -> setPrintingMode(true);
buttons_ = new QDialogButtonBox();
buttons_ -> addButton(new QPushButton(QET::Icons::DocumentPrint, tr("Imprimer")), QDialogButtonBox::AcceptRole);
buttons_ -> addButton(QDialogButtonBox::Cancel);
@@ -246,6 +265,8 @@ void QETPrintPreviewDialog::build() {
connect(use_full_page_, SIGNAL(toggled(bool)), this, SLOT(useFullPage(bool)));
connect(fit_diagram_to_page_, SIGNAL(toggled(bool)), this, SLOT(fitDiagramToPage(bool)));
connect(render_properties_, SIGNAL(optionChanged()), preview_, SLOT(updatePreview()));
connect(preview_, SIGNAL(previewChanged()), this, SLOT(updateZoomList()));
connect(zoom_box_, SIGNAL(currentIndexChanged(int)), this, SLOT(updatePreviewZoom()));
@@ -271,6 +292,7 @@ void QETPrintPreviewDialog::build() {
vlayout0_ -> addWidget(toolbar_);
vlayout0_ -> addLayout(hlayout0_);
vlayout0_ -> addWidget(render_properties_);
vlayout0_ -> addWidget(print_options_box_);
vlayout0_ -> addWidget(buttons_);
@@ -289,6 +311,7 @@ void QETPrintPreviewDialog::requestPaint(QPrinter *printer) {
paintRequested(
diagrams_list_ -> selectedDiagrams(),
fit_diagram_to_page_ -> isChecked(),
render_properties_ -> exportProperties(),
printer
)
);
@@ -328,6 +351,7 @@ void QETPrintPreviewDialog::setDiagramsListVisible(bool display) {
*/
void QETPrintPreviewDialog::setPrintOptionsVisible(bool display) {
print_options_box_ -> setVisible(display);
render_properties_ -> setVisible(display);
if (display) {
toggle_print_options_ -> setText(tr("Cacher les options d'impression"));

View File

@@ -18,13 +18,14 @@
#ifndef QET_PRINT_PREVIEW_DIALOG
#define QET_PRINT_PREVIEW_DIALOG
#include <QtGui>
#include "exportproperties.h"
class Diagram;
class DiagramsChooser;
class ExportPropertiesWidget;
class QETProject;
/**
Cette classe represente un dialogue permettant d'affiner les options
d'impression d'un schema a l'aide d'un apercu de ce qu'elle donnerait sur
papier.
d'impression d'un projet a l'aide d'un apercu du resultat sur papier.
*/
class QETPrintPreviewDialog : public QDialog {
Q_OBJECT
@@ -40,10 +41,11 @@ class QETPrintPreviewDialog : public QDialog {
public:
DiagramsChooser *diagramsChooser();
bool fitDiagramsToPages() const;
ExportProperties exportProperties() const;
// signaux
signals:
void paintRequested(const QList<Diagram *> &, bool, QPrinter *);
void paintRequested(const QList<Diagram *> &, bool, const ExportProperties, QPrinter *);
public slots:
void firstPage();
@@ -91,6 +93,7 @@ class QETPrintPreviewDialog : public QDialog {
QLabel *use_full_page_label_;
QCheckBox *fit_diagram_to_page_;
QLabel *fit_diagram_to_page_label_;
ExportPropertiesWidget *render_properties_;
// methodes
private:

View File

@@ -392,7 +392,7 @@ bool QETProject::isReadOnly() const {
}
/**
@param bool read_only true pour passer le projet (schemas et collection)
@param read_only true pour passer le projet (schemas et collection)
en mode Read Only, false sinon.
*/
void QETProject::setReadOnly(bool read_only) {
@@ -468,7 +468,7 @@ ElementsCategory *QETProject::integrationCategory() const {
integrateElement(const QString &, MoveElementsHandler *, QString &)
en lui passant un MoveElementsHandler approprie.
@param elmt_location Emplacement de l'element a integrer
@param error_message Reference vers une chaine de caractere qui contiendra
@param error_msg Reference vers une chaine de caractere qui contiendra
eventuellement un message d'erreur
@return L'emplacement de l'element apres integration, ou une chaine vide si
l'integration a echoue.
@@ -713,7 +713,7 @@ void QETProject::readProjectXml() {
setTitle(root_elmt.attribute("title"));
} else if (root_elmt.tagName() == "diagram") {
/// @todo gerer l'ouverture de fichiers <diagram />
/// @todo gerer l'ouverture de fichiers dont la racine est un element \<diagram\>
} else {
state_ = ProjectParsingFailed;
}
@@ -893,6 +893,7 @@ NamesList QETProject::namesListForIntegrationCategory() {
names.addName("en", "Imported elements");
names.addName("es", "Elementos importados");
names.addName("ru", QString(russian_data, 24));
names.addName("cs", "Zaveden\351 prvky");
return(names);
}

View File

@@ -19,7 +19,7 @@
/**
Constructeur
@param object QObject parent
@param parent QObject parent
*/
QETRegExpValidator::QETRegExpValidator(QObject *parent) : QRegExpValidator(parent) {
}
@@ -27,7 +27,7 @@ QETRegExpValidator::QETRegExpValidator(QObject *parent) : QRegExpValidator(paren
/**
Constructeur
@param regexp Expression reguliere a valider
@param object QObject parent
@param parent QObject parent
*/
QETRegExpValidator::QETRegExpValidator(const QRegExp &regexp, QObject *parent) : QRegExpValidator(regexp, parent) {
}

View File

@@ -251,8 +251,6 @@ bool QETTabBar::mustMoveTab(int src_tab, int dst_tab, const QPoint &pos) const {
Deplace un onglet.
@param src_tab Index de l'onglet de depart
@param dst_tab Index de l'onglet de destination
@param pos Position de la souris dans le cadre du deplacement de l'onglet
@return
*/
void QETTabBar::moveTab(int src_tab, int dst_tab) {
// sauvegarde les caracteristiques de l'onglet deplace

View File

@@ -61,6 +61,24 @@ QMenu *RecentFiles::menu() const {
return(menu_);
}
/**
@return l'icone affichee a cote de chaque fichier, ou une QIcon nulle si
aucune icone n'est utilisee.
*/
QIcon RecentFiles::iconForFiles() const {
return(files_icon_);
}
/**
Definit l'icone a afficher a cote de chaque fichier. Si une QIcon nulle
est fournie, aucune icone n'est utilisee.
@param icon Icone a afficher a cote de chaque fichier
*/
void RecentFiles::setIconForFiles(const QIcon &icon) {
files_icon_ = icon;
buildMenu();
}
/**
Oublie les fichiers recents
*/
@@ -151,6 +169,9 @@ void RecentFiles::buildMenu() {
foreach (QString filepath, list_) {
// creee une nouvelle action pour le fichier
QAction *action = new QAction(filepath, 0);
if (!files_icon_.isNull()) {
action -> setIcon(files_icon_);
}
menu_ -> addAction(action);
// lie l'action et le mapper

View File

@@ -18,6 +18,7 @@
#ifndef RECENT_FILES_H
#define RECENT_FILES_H
#include <QtCore>
#include <QIcon>
class QMenu;
/**
Cette classe permet de gerer des fichiers recents.
@@ -36,6 +37,8 @@ class RecentFiles : public QObject {
public:
int size() const;
QMenu *menu() const;
QIcon iconForFiles() const;
void setIconForFiles(const QIcon &);
public slots:
void clear();
@@ -61,5 +64,6 @@ class RecentFiles : public QObject {
QList<QString> list_;
QMenu *menu_;
QSignalMapper *mapper_;
QIcon files_icon_;
};
#endif

View File

@@ -212,7 +212,7 @@ QList<ElementDefinition *> XmlElementsCategory::elements() {
/**
@return l'element correspondant au chemin virtuel elmt_path, ou 0 en cas d'echec
@param cat_path Chemin virtuel de l'element voulu
@param elmt_path Chemin virtuel de l'element voulu
*/
ElementDefinition *XmlElementsCategory::element(const QString &elmt_path) {
// recupere les differentes parties du chemin
@@ -418,7 +418,7 @@ void XmlElementsCategory::componentWritten() {
/**
Gere le fait qu'une sous-categorie ou un element ait ete supprime
@param item Element ou categorie supprime
@param path Chemin de l'element ou de la categorie supprime(e)
*/
void XmlElementsCategory::componentRemoved(const QString &path) {
if (elements_.contains(path)) {