Fichier > exporter exporte desormais le contenu du cadre

git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@49 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
xavierqet
2007-02-01 01:07:26 +00:00
parent a5cc50f5ab
commit 982b2bce9a
11 changed files with 276 additions and 198 deletions

View File

@@ -12,6 +12,9 @@ BorderInset::BorderInset(QObject *parent) : QObject(parent) {
inset_width = nb_columns * columns_width; inset_width = nb_columns * columns_width;
inset_height = 50.0; inset_height = 50.0;
columns_header_height = 20.0; columns_header_height = 20.0;
display_inset = true;
display_columns = true;
display_border = true;
updateRectangles(); updateRectangles();
} }
@@ -61,40 +64,43 @@ void BorderInset::draw(QPainter *qp, qreal x, qreal y) {
qp -> setBrush(Qt::NoBrush); qp -> setBrush(Qt::NoBrush);
// dessine le cadre // dessine le cadre
qp -> drawRect(border); if (display_border) qp -> drawRect(border);
// dessine la numerotation des colonnes // dessine la numerotation des colonnes
qp -> setBrush(Qt::white); if (display_columns) {
for (int i = 1 ; i <= nb_columns ; ++ i) { qp -> setBrush(Qt::white);
QRectF numbered_rectangle = QRectF( for (int i = 1 ; i <= nb_columns ; ++ i) {
border.topLeft().x() + ((i - 1) * columns_width), QRectF numbered_rectangle = QRectF(
border.topLeft().y(), border.topLeft().x() + ((i - 1) * columns_width),
columns_width, border.topLeft().y(),
columns_header_height columns_width,
); columns_header_height
qp -> drawRect(numbered_rectangle); );
qp -> drawText(numbered_rectangle, Qt::AlignVCenter | Qt::AlignCenter, QString("%1").arg(i)); qp -> drawRect(numbered_rectangle);
qp -> drawText(numbered_rectangle, Qt::AlignVCenter | Qt::AlignCenter, QString("%1").arg(i));
}
} }
// dessine le cartouche // dessine le cartouche
qp -> drawRect(inset); if (display_inset) {
qp -> drawRect(inset);
qp -> drawRect(inset_author);
qp -> drawText(inset_author, Qt::AlignVCenter | Qt::AlignLeft, tr(" Auteur : ") + bi_author); qp -> drawRect(inset_author);
qp -> drawText(inset_author, Qt::AlignVCenter | Qt::AlignLeft, tr(" Auteur : ") + bi_author);
qp -> drawRect(inset_date);
qp -> drawText(inset_date, Qt::AlignVCenter | Qt::AlignLeft, tr(" Date : ") + bi_date.toString()); qp -> drawRect(inset_date);
qp -> drawText(inset_date, Qt::AlignVCenter | Qt::AlignLeft, tr(" Date : ") + bi_date.toString());
qp -> drawRect(inset_title);
qp -> drawText(inset_title, Qt::AlignVCenter | Qt::AlignCenter, tr("Titre du document: ") + bi_title); qp -> drawRect(inset_title);
qp -> drawText(inset_title, Qt::AlignVCenter | Qt::AlignCenter, tr("Titre du document: ") + bi_title);
qp -> drawRect(inset_file);
qp -> drawText(inset_file, Qt::AlignVCenter | Qt::AlignLeft, tr(" Fichier : ") + bi_filename); qp -> drawRect(inset_file);
qp -> drawText(inset_file, Qt::AlignVCenter | Qt::AlignLeft, tr(" Fichier : ") + bi_filename);
qp -> drawRect(inset_folio);
qp -> drawText(inset_folio, Qt::AlignVCenter | Qt::AlignLeft, tr(" Folio : ") + bi_folio); qp -> drawRect(inset_folio);
qp -> restore(); qp -> drawText(inset_folio, Qt::AlignVCenter | Qt::AlignLeft, tr(" Folio : ") + bi_folio);
qp -> restore();
}
// annule la translation des rectangles // annule la translation des rectangles
border .translate(-x, -y); border .translate(-x, -y);
inset .translate(-x, -y); inset .translate(-x, -y);

View File

@@ -2,6 +2,7 @@
#include "conducer.h" #include "conducer.h"
#include "customelement.h" #include "customelement.h"
#include "diagram.h" #include "diagram.h"
#include "exportdialog.h"
/** /**
Constructeur Constructeur
@@ -17,7 +18,8 @@ Diagram::Diagram(QObject *parent) : QGraphicsScene(parent) {
t.setStyle(Qt::DashLine); t.setStyle(Qt::DashLine);
poseur_de_conducer -> setPen(t); poseur_de_conducer -> setPen(t);
poseur_de_conducer -> setLine(QLineF(QPointF(0.0, 0.0), QPointF(0.0, 0.0))); poseur_de_conducer -> setLine(QLineF(QPointF(0.0, 0.0), QPointF(0.0, 0.0)));
doit_dessiner_grille = true; draw_grid = true;
use_border = true;
connect(this, SIGNAL(changed(const QList<QRectF> &)), this, SLOT(slot_checkSelectionChange())); connect(this, SIGNAL(changed(const QList<QRectF> &)), this, SLOT(slot_checkSelectionChange()));
} }
@@ -29,9 +31,9 @@ Diagram::Diagram(QObject *parent) : QGraphicsScene(parent) {
void Diagram::drawBackground(QPainter *p, const QRectF &r) { void Diagram::drawBackground(QPainter *p, const QRectF &r) {
p -> save(); p -> save();
// desactive tout antialiasing // desactive tout antialiasing, sauf pour le texte
p -> setRenderHint(QPainter::Antialiasing, false); p -> setRenderHint(QPainter::Antialiasing, false);
p -> setRenderHint(QPainter::TextAntialiasing, false); p -> setRenderHint(QPainter::TextAntialiasing, true);
p -> setRenderHint(QPainter::SmoothPixmapTransform, false); p -> setRenderHint(QPainter::SmoothPixmapTransform, false);
// dessine un fond blanc // dessine un fond blanc
@@ -39,7 +41,7 @@ void Diagram::drawBackground(QPainter *p, const QRectF &r) {
p -> setBrush(Qt::white); p -> setBrush(Qt::white);
p -> drawRect(r); p -> drawRect(r);
if (doit_dessiner_grille) { if (draw_grid) {
// dessine les points de la grille // dessine les points de la grille
p -> setPen(Qt::black); p -> setPen(Qt::black);
p -> setBrush(Qt::NoBrush); p -> setBrush(Qt::NoBrush);
@@ -58,7 +60,7 @@ void Diagram::drawBackground(QPainter *p, const QRectF &r) {
} }
} }
border_and_inset.draw(p, MARGIN, MARGIN); if (use_border) border_and_inset.draw(p, MARGIN, MARGIN);
p -> restore(); p -> restore();
} }
@@ -66,18 +68,22 @@ void Diagram::drawBackground(QPainter *p, const QRectF &r) {
Exporte le schema vers une image Exporte le schema vers une image
@return Une QImage representant le schema @return Une QImage representant le schema
*/ */
QImage Diagram::toImage(int width, int height, bool respectRatio) { QImage Diagram::toImage(int width, int height, Qt::AspectRatioMode aspectRatioMode) {
// determine le contenu du schema // determine la zone source = contenu du schema + marges
QRectF diagram_content = itemsBoundingRect(); QRectF source_area;
if (!use_border) {
// calcule la marge = 5 % de la longueur necessaire source_area = itemsBoundingRect();
qreal margin = 0.05 * diagram_content.width(); source_area.translate(-MARGIN, -MARGIN);
source_area.setWidth (source_area.width () + 2.0 * MARGIN);
// en deduit la zone source utilisee pour l'image source_area.setHeight(source_area.height() + 2.0 * MARGIN);
QRectF source_area = diagram_content; } else {
source_area.translate(-margin, -margin); source_area = QRectF(
source_area.setWidth(diagram_content.width() + 2.0 * margin); 0.0,
source_area.setHeight(diagram_content.height() + 2.0 * margin); 0.0,
border_and_inset.borderWidth () + 2.0 * MARGIN,
border_and_inset.borderHeight() + 2.0 * MARGIN
);
}
// si les dimensions ne sont pas precisees, l'image est exportee a l'echelle 1:1 // si les dimensions ne sont pas precisees, l'image est exportee a l'echelle 1:1
QSize image_size = (width == -1 && height == -1) ? source_area.size().toSize() : QSize(width, height); QSize image_size = (width == -1 && height == -1) ? source_area.size().toSize() : QSize(width, height);
@@ -87,8 +93,7 @@ QImage Diagram::toImage(int width, int height, bool respectRatio) {
// prepare le rendu // prepare le rendu
QPainter p; QPainter p;
bool painter_ok = p.begin(&pix); if (!p.begin(&pix)) return(QImage());
if (!painter_ok) return(QImage());
// rendu antialiase // rendu antialiase
p.setRenderHint(QPainter::Antialiasing, true); p.setRenderHint(QPainter::Antialiasing, true);
@@ -100,7 +105,7 @@ QImage Diagram::toImage(int width, int height, bool respectRatio) {
foreach (QGraphicsItem *qgi, selected_elmts) qgi -> setSelected(false); foreach (QGraphicsItem *qgi, selected_elmts) qgi -> setSelected(false);
// effectue le rendu lui-meme // effectue le rendu lui-meme
render(&p, pix.rect(), source_area, respectRatio ? Qt::KeepAspectRatio : Qt::IgnoreAspectRatio); render(&p, pix.rect(), source_area, aspectRatioMode);
p.end(); p.end();
// restaure les elements selectionnes // restaure les elements selectionnes
@@ -112,22 +117,25 @@ QImage Diagram::toImage(int width, int height, bool respectRatio) {
/** /**
Permet de connaitre les dimensions qu'aura l'image generee par la methode toImage() Permet de connaitre les dimensions qu'aura l'image generee par la methode toImage()
@return La taille de l'image generee par toImage() @return La taille de l'image generee par toImage()
@todo tenir compte des arguments
*/ */
QSize Diagram::imageSize() const { QSize Diagram::imageSize() const {
// determine le contenu du schema // determine la zone source = contenu du schema + marges
QRectF diagram_content = itemsBoundingRect(); qreal image_width, image_height;
if (!use_border) {
QRectF items_rect = itemsBoundingRect();
image_width = items_rect.width();
image_height = items_rect.height();
} else {
image_width = border_and_inset.borderWidth();
image_height = border_and_inset.borderHeight();
}
// calcule la marge = 5 % de la longueur necessaire image_width += 2.0 * MARGIN;
qreal margin = 0.05 * diagram_content.width(); image_height += 2.0 * MARGIN;
// en deduit la zone source utilisee pour l'image
QRectF source_area = diagram_content;
source_area.translate(-margin, -margin);
source_area.setWidth(diagram_content.width() + 2.0 * margin);
source_area.setHeight(diagram_content.height() + 2.0 * margin);
// renvoie la taille de la zone source // renvoie la taille de la zone source
return(source_area.size().toSize()); return(QSizeF(image_width, image_height).toSize());
} }
/** /**

View File

@@ -11,9 +11,12 @@
class Terminal; class Terminal;
class Diagram : public QGraphicsScene { class Diagram : public QGraphicsScene {
Q_OBJECT Q_OBJECT
enum BorderOptions { EmptyBorder, Inset, Columns };
public: public:
Diagram(QObject * = 0); Diagram(QObject * = 0);
void drawBackground(QPainter *, const QRectF &); void drawBackground(QPainter *, const QRectF &);
// fonctions relatives a la pose de conducteurs
inline void poseConducer(bool pf) { inline void poseConducer(bool pf) {
if (pf) { if (pf) {
if (!poseur_de_conducer -> scene()) addItem(poseur_de_conducer); if (!poseur_de_conducer -> scene()) addItem(poseur_de_conducer);
@@ -23,18 +26,38 @@
} }
inline void setDepart (QPointF d) { poseur_de_conducer -> setLine(QLineF(d, poseur_de_conducer -> line().p2())); } inline void setDepart (QPointF d) { poseur_de_conducer -> setLine(QLineF(d, poseur_de_conducer -> line().p2())); }
inline void setArrivee(QPointF a) { poseur_de_conducer -> setLine(QLineF(poseur_de_conducer -> line().p1(), a)); } inline void setArrivee(QPointF a) { poseur_de_conducer -> setLine(QLineF(poseur_de_conducer -> line().p1(), a)); }
QImage toImage(int = -1, int = -1, bool = true);
QSize imageSize() const; // fonctions relatives a l'import / export XML
QDomDocument toXml(bool = true); QDomDocument toXml(bool = true);
bool fromXml(QDomDocument &, QPointF = QPointF(), bool = true); bool fromXml(QDomDocument &, QPointF = QPointF(), bool = true);
QGraphicsItem *getElementById(uint id);
inline void setAffichageGrille(bool ddg) { doit_dessiner_grille = ddg; } // fonctions relatives aux options graphiques
inline void setAffichageGrille(bool dg) { draw_grid = dg; }
inline bool displayGrid() { return(draw_grid); }
inline void setUseBorder(bool ub) { use_border = ub; }
inline bool useBorder() { return(use_border); }
inline void setBorderOptions(BorderOptions bo) {
border_and_inset.displayBorder(!(bo & EmptyBorder));
border_and_inset.displayColumns(bo & Columns);
border_and_inset.displayInset(bo & Inset);
}
inline BorderOptions borderOptions() {
BorderOptions retour = EmptyBorder;
if (border_and_inset.insetIsDisplayed()) retour = (BorderOptions)(retour|Inset);
if (border_and_inset.columnsAreDisplayed()) retour = (BorderOptions)(retour|Columns);
return(retour);
}
BorderInset border_and_inset; BorderInset border_and_inset;
QRectF border() const; QRectF border() const;
QImage toImage(int = -1, int = -1, Qt::AspectRatioMode = Qt::KeepAspectRatio);
QSize imageSize() const;
private: private:
QGraphicsLineItem *poseur_de_conducer; QGraphicsLineItem *poseur_de_conducer;
bool doit_dessiner_grille; bool draw_grid;
bool use_border;
Element *elementFromXml(QDomElement &, QHash<int, Terminal *> &); Element *elementFromXml(QDomElement &, QHash<int, Terminal *> &);
private slots: private slots:

View File

@@ -1,6 +1,7 @@
#include "diagramview.h" #include "diagramview.h"
#include "diagram.h" #include "diagram.h"
#include "customelement.h" #include "customelement.h"
#include "exportdialog.h"
/** /**
Initialise le DiagramView Initialise le DiagramView
@@ -432,3 +433,96 @@ bool DiagramView::private_enregistrer(QString &n_fichier) {
return(true); return(true);
} }
void DiagramView::dialogExport() {
ExportDialog ed(scene, this);
ed.exec();
}
void DiagramView::dialogPrint() {
QPrinter qprin;
qprin.setOutputFormat(QPrinter::PdfFormat);
qprin.setOrientation(QPrinter::Landscape);
qprin.setPageSize(QPrinter::A4);
QPrintDialog qpd(&qprin, this);
if (qpd.exec() == QDialog::Accepted) {
QPainter qp(&qprin);
scene -> setAffichageGrille(false);
scene -> render(&qp);
scene -> setAffichageGrille(true);
}
}
void DiagramView::dialogEditInfos() {
// recupere le cartouche du schema
BorderInset *inset = &(scene -> border_and_inset);
// construit le dialogue
QDialog popup;
popup.setMinimumWidth(400);
popup.setWindowTitle(tr("Cartouche du sch\351ma"));
QLineEdit *titre = new QLineEdit(inset -> title(), &popup);
QLineEdit *auteur = new QLineEdit(inset -> author(), &popup);
QDate date_diagram = QDate(inset -> date());
if (date_diagram.isNull() || !date_diagram.isValid()) date_diagram = QDate::currentDate();
QDateEdit *date = new QDateEdit(date_diagram, &popup);
date -> setCalendarPopup(true);
QLineEdit *fichier = new QLineEdit(inset -> fileName(), &popup);
QLineEdit *folio = new QLineEdit(inset -> folio(), &popup);
QWidget bidon(&popup);
QGridLayout layout_champs(&bidon);
layout_champs.addWidget(new QLabel(tr("Titre : ")), 0, 0);
layout_champs.addWidget(titre, 0, 1);
layout_champs.addWidget(new QLabel(tr("Auteur : ")), 1, 0);
layout_champs.addWidget(auteur, 1, 1);
layout_champs.addWidget(new QLabel(tr("Date : ")), 2, 0);
layout_champs.addWidget(date, 2, 1);
layout_champs.addWidget(new QLabel(tr("Fichier : ")), 3, 0);
layout_champs.addWidget(fichier, 3, 1);
layout_champs.addWidget(new QLabel(tr("Folio : ")), 4, 0);
layout_champs.addWidget(folio, 4, 1);
// boutons
QDialogButtonBox boutons(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
connect(&boutons, SIGNAL(accepted()), &popup, SLOT(accept()));
connect(&boutons, SIGNAL(rejected()), &popup, SLOT(accept()));
// ajout dans une disposition verticale
QVBoxLayout layout_v(&popup);
layout_v.addWidget(&bidon);
layout_v.addWidget(&boutons);
if (popup.exec() == QDialog::Accepted) {
inset -> setTitle(titre -> text());
inset -> setAuthor(auteur -> text());
inset -> setDate(date -> date());
inset -> setFileName(fichier -> text());
inset -> setFolio(folio -> text());
}
}
bool DiagramView::hasSelectedItems() {
return(scene -> selectedItems().size() > 0);
}
void DiagramView::addColumn() {
// ajoute la colonne
scene -> border_and_inset.addColumn();
// met a jour la zone affichee par la vue
QRectF sr = sceneRect();
sr.setWidth(5.0 + scene -> border_and_inset.borderWidth());
setSceneRect(sr);
// rafraichit la vue
scene -> update(sceneRect());
}
void DiagramView::removeColumn() {
scene -> border_and_inset.removeColumn();
// on pourrait mettre a jour la zone affichee par la vue
// rafraichit la vue
scene -> update(sceneRect());
}

View File

@@ -26,6 +26,13 @@
QString nom_fichier; QString nom_fichier;
bool enregistrer(); bool enregistrer();
bool enregistrer_sous(); bool enregistrer_sous();
void dialogExport();
void dialogEditInfos();
void dialogPrint();
void addColumn();
void removeColumn();
Diagram *diagram() { return(scene); }
bool hasSelectedItems();
private: private:
bool private_enregistrer(QString &); bool private_enregistrer(QString &);

View File

@@ -21,18 +21,18 @@ ElementsPanel::ElementsPanel(QWidget *parent) : QTreeWidget(parent) {
setIconSize(QSize(50, 50)); setIconSize(QSize(50, 50));
// chargement des elements de la collection QET // chargement des elements de la collection QET
ajouterDossier(invisibleRootItem(), QETApp::commonElementsDir(), tr("Collection QET")); addDir(invisibleRootItem(), QETApp::commonElementsDir(), tr("Collection QET"));
// chargement des elements de la collection utilisateur // chargement des elements de la collection utilisateur
ajouterDossier(invisibleRootItem(), QETApp::customElementsDir(), tr("Collection utilisateur")); addDir(invisibleRootItem(), QETApp::customElementsDir(), tr("Collection utilisateur"));
// force du noir sur une alternance de blanc (comme le schema) et de gris // force du noir sur une alternance de blanc (comme le schema) et de gris
// clair, avec du blanc sur bleu pas trop fonce pour la selection // clair, avec du blanc sur bleu pas trop fonce pour la selection
QPalette qp = palette(); QPalette qp = palette();
qp.setColor(QPalette::Text, Qt::black); qp.setColor(QPalette::Text, Qt::black);
qp.setColor(QPalette::Base, Qt::white); qp.setColor(QPalette::Base, Qt::white);
qp.setColor(QPalette::AlternateBase, QColor("#e8e8e8")); qp.setColor(QPalette::AlternateBase, QColor("#e8e8e8"));
qp.setColor(QPalette::Highlight, QColor("#678db2")); qp.setColor(QPalette::Highlight, QColor("#678db2"));
qp.setColor(QPalette::HighlightedText, Qt::white); qp.setColor(QPalette::HighlightedText, Qt::white);
setPalette(qp); setPalette(qp);
} }
@@ -87,7 +87,6 @@ void ElementsPanel::startDrag(Qt::DropActions /*supportedActions*/) {
delete appar; delete appar;
} }
/** /**
Methode privee permettant d'ajouter un dossier au panel d'appareils Methode privee permettant d'ajouter un dossier au panel d'appareils
@param qtwi_parent QTreeWidgetItem parent sous lequel sera insere l'element @param qtwi_parent QTreeWidgetItem parent sous lequel sera insere l'element
@@ -97,7 +96,7 @@ void ElementsPanel::startDrag(Qt::DropActions /*supportedActions*/) {
dans le dossier et y lit le nom du dossier ; si ce fichier n'existe pas ou dans le dossier et y lit le nom du dossier ; si ce fichier n'existe pas ou
est invalide, la fonction utilise le nom du dossier. est invalide, la fonction utilise le nom du dossier.
*/ */
void ElementsPanel::ajouterDossier(QTreeWidgetItem *qtwi_parent, QString adr_dossier, QString nom) { void ElementsPanel::addDir(QTreeWidgetItem *qtwi_parent, QString adr_dossier, QString nom) {
QDir dossier(adr_dossier); QDir dossier(adr_dossier);
if (!dossier.exists()) return; if (!dossier.exists()) return;
adr_dossier = dossier.canonicalPath() + "/"; adr_dossier = dossier.canonicalPath() + "/";
@@ -115,11 +114,11 @@ void ElementsPanel::ajouterDossier(QTreeWidgetItem *qtwi_parent, QString adr_dos
// ajout des sous-categories / sous-dossiers // ajout des sous-categories / sous-dossiers
QStringList dossiers = dossier.entryList(QStringList(), QDir::AllDirs | QDir::NoSymLinks | QDir::NoDotAndDotDot, QDir::Name); QStringList dossiers = dossier.entryList(QStringList(), QDir::AllDirs | QDir::NoSymLinks | QDir::NoDotAndDotDot, QDir::Name);
foreach(QString dossier, dossiers) ajouterDossier(qtwi_dossier, adr_dossier + dossier); foreach(QString dossier, dossiers) addDir(qtwi_dossier, adr_dossier + dossier);
// ajout des elements / fichiers // ajout des elements / fichiers
QStringList fichiers = dossier.entryList(QStringList("*.elmt"), QDir::Files, QDir::Name); QStringList fichiers = dossier.entryList(QStringList("*.elmt"), QDir::Files, QDir::Name);
foreach(QString fichier, fichiers) ajouterFichier(qtwi_dossier, adr_dossier + fichier); foreach(QString fichier, fichiers) addFile(qtwi_dossier, adr_dossier + fichier);
} }
/** /**
@@ -127,7 +126,7 @@ void ElementsPanel::ajouterDossier(QTreeWidgetItem *qtwi_parent, QString adr_dos
@param qtwi_parent QTreeWidgetItem parent sous lequel sera insere l'element @param qtwi_parent QTreeWidgetItem parent sous lequel sera insere l'element
@param fichier Chemin absolu du fichier XML decrivant l'element a inserer @param fichier Chemin absolu du fichier XML decrivant l'element a inserer
*/ */
void ElementsPanel::ajouterFichier(QTreeWidgetItem *qtwi_parent, QString fichier) { void ElementsPanel::addFile(QTreeWidgetItem *qtwi_parent, QString fichier) {
QString whats_this = tr("Ceci est un \351l\351ment que vous pouvez ins\351rer dans votre sch\351ma par cliquer-d\351placer"); QString whats_this = tr("Ceci est un \351l\351ment que vous pouvez ins\351rer dans votre sch\351ma par cliquer-d\351placer");
QString tool_tip = tr("Cliquer-d\351posez cet \351l\351ment sur le sch\351ma pour ins\351rer un \351l\351ment "); QString tool_tip = tr("Cliquer-d\351posez cet \351l\351ment sur le sch\351ma pour ins\351rer un \351l\351ment ");
int etat; int etat;
@@ -145,7 +144,6 @@ void ElementsPanel::ajouterFichier(QTreeWidgetItem *qtwi_parent, QString fichier
qtwi -> setData(0, 42, fichier); qtwi -> setData(0, 42, fichier);
} }
/** /**
Methode permettant d'obtenir le nom affichable d'une categorie etant donne Methode permettant d'obtenir le nom affichable d'une categorie etant donne
son chemin (dossier). son chemin (dossier).
@@ -162,7 +160,7 @@ QString ElementsPanel::categoryName(QDir &directory) {
if (directory_conf.exists()) { if (directory_conf.exists()) {
// ouvre le fichier // ouvre le fichier
if (directory_conf.open(QIODevice::ReadOnly | QIODevice::Text)) { if (directory_conf.open(QIODevice::ReadOnly | QIODevice::Text)) {
// recupere les deux premiers caracteres de la lcoale en cours du systeme // recupere les deux premiers caracteres de la locale en cours du systeme
QString system_language = QLocale::system().name().left(2); QString system_language = QLocale::system().name().left(2);
// lit le contenu du fichier dans un QDomDocument XML // lit le contenu du fichier dans un QDomDocument XML
QDomDocument document; QDomDocument document;

View File

@@ -17,7 +17,7 @@
void dropEvent(QDropEvent *); void dropEvent(QDropEvent *);
void startDrag(Qt::DropActions); void startDrag(Qt::DropActions);
private: private:
void ajouterFichier(QTreeWidgetItem *, QString); void addFile(QTreeWidgetItem *, QString);
void ajouterDossier(QTreeWidgetItem *, QString, QString = QString()); void addDir(QTreeWidgetItem *, QString, QString = QString());
}; };
#endif #endif

View File

@@ -5,11 +5,13 @@
@param dia Le schema a exporter @param dia Le schema a exporter
@param parent Le Widget parent de ce dialogue @param parent Le Widget parent de ce dialogue
*/ */
ExportDialog::ExportDialog(Diagram &dia, QWidget *parent) : QDialog(parent) { ExportDialog::ExportDialog(Diagram *dia, QWidget *parent) : QDialog(parent) {
if (!dia) return;
// recupere le schema a exporter, sa taille et ses proportions // recupere le schema a exporter, sa taille et ses proportions
diagram = &dia; diagram = dia;
diagram_size = diagram -> imageSize(); diagram_size = diagram -> imageSize();
diagram_ratio = (qreal)diagram_size.width() / (qreal)diagram_size.height(); diagram_ratio = (qreal)diagram_size.width() / (qreal)diagram_size.height();
dontchangewidth = dontchangeheight = false;
// la taille du dialogue est fixee // la taille du dialogue est fixee
setFixedSize(400, 310); setFixedSize(400, 310);
@@ -190,7 +192,11 @@ void ExportDialog::slot_check() {
// genere l'image // genere l'image
if (!export_grid -> isChecked()) diagram -> setAffichageGrille(false); if (!export_grid -> isChecked()) diagram -> setAffichageGrille(false);
QImage image = diagram -> toImage(width -> value(), height -> value(), keep_aspect_ratio -> isChecked()); QImage image = diagram -> toImage(
width -> value(),
height -> value(),
keep_aspect_ratio -> isChecked() ? Qt::KeepAspectRatio : Qt::IgnoreAspectRatio
);
if (!export_grid -> isChecked()) diagram -> setAffichageGrille(true); if (!export_grid -> isChecked()) diagram -> setAffichageGrille(true);
// convertit l'image en niveaux de gris si besoin // convertit l'image en niveaux de gris si besoin

View File

@@ -9,7 +9,7 @@
class ExportDialog : public QDialog { class ExportDialog : public QDialog {
Q_OBJECT Q_OBJECT
public: public:
ExportDialog(Diagram &, QWidget * = 0); ExportDialog(Diagram *, QWidget * = 0);
private: private:
// elements graphiques // elements graphiques

View File

@@ -1,9 +1,8 @@
#include "qetapp.h" #include "qetapp.h"
//#include "diagram.h"
#include "diagramview.h" #include "diagramview.h"
#include "diagram.h"
#include "elementspanel.h" #include "elementspanel.h"
#include "aboutqet.h" #include "aboutqet.h"
#include "exportdialog.h"
/** /**
constructeur constructeur
@@ -364,8 +363,8 @@ void QETApp::actions() {
connect(zoom_arriere, SIGNAL(triggered()), this, SLOT(slot_zoomMoins()) ); connect(zoom_arriere, SIGNAL(triggered()), this, SLOT(slot_zoomMoins()) );
connect(zoom_adapte, SIGNAL(triggered()), this, SLOT(slot_zoomFit()) ); connect(zoom_adapte, SIGNAL(triggered()), this, SLOT(slot_zoomFit()) );
connect(zoom_reset, SIGNAL(triggered()), this, SLOT(slot_zoomReset()) ); connect(zoom_reset, SIGNAL(triggered()), this, SLOT(slot_zoomReset()) );
connect(imprimer, SIGNAL(triggered()), this, SLOT(dialogue_imprimer()) ); connect(imprimer, SIGNAL(triggered()), this, SLOT(dialog_print()) );
connect(exporter, SIGNAL(triggered()), this, SLOT(dialogue_exporter()) ); connect(exporter, SIGNAL(triggered()), this, SLOT(dialog_export()) );
connect(enr_fichier_sous, SIGNAL(triggered()), this, SLOT(dialogue_enregistrer_sous())); connect(enr_fichier_sous, SIGNAL(triggered()), this, SLOT(dialogue_enregistrer_sous()));
connect(enr_fichier, SIGNAL(triggered()), this, SLOT(enregistrer()) ); connect(enr_fichier, SIGNAL(triggered()), this, SLOT(enregistrer()) );
connect(nouveau_fichier, SIGNAL(triggered()), this, SLOT(nouveau()) ); connect(nouveau_fichier, SIGNAL(triggered()), this, SLOT(nouveau()) );
@@ -380,7 +379,7 @@ void QETApp::actions() {
connect(f_reorganise, SIGNAL(triggered()), &workspace, SLOT(arrangeIcons()) ); connect(f_reorganise, SIGNAL(triggered()), &workspace, SLOT(arrangeIcons()) );
connect(f_suiv, SIGNAL(triggered()), &workspace, SLOT(activateNextWindow()) ); connect(f_suiv, SIGNAL(triggered()), &workspace, SLOT(activateNextWindow()) );
connect(f_prec, SIGNAL(triggered()), &workspace, SLOT(activatePreviousWindow()) ); connect(f_prec, SIGNAL(triggered()), &workspace, SLOT(activatePreviousWindow()) );
connect(infos_diagram, SIGNAL(activated()), this, SLOT(editInfos()) ); connect(infos_diagram, SIGNAL(activated()), this, SLOT(slot_editInfos()) );
connect(add_column, SIGNAL(activated()), this, SLOT(slot_addColumn()) ); connect(add_column, SIGNAL(activated()), this, SLOT(slot_addColumn()) );
connect(remove_column, SIGNAL(activated()), this, SLOT(slot_removeColumn()) ); connect(remove_column, SIGNAL(activated()), this, SLOT(slot_removeColumn()) );
} }
@@ -502,31 +501,21 @@ void QETApp::toolbar() {
} }
/** /**
gere l'impression Imprime le schema courant
*/ */
void QETApp::dialogue_imprimer() { void QETApp::dialog_print() {
QPrinter qprin; DiagramView *sv = diagramEnCours();
qprin.setOrientation(QPrinter::Landscape); if (!sv) return;
qprin.setPageSize(QPrinter::A4); sv -> dialogPrint();
//qprin.setPrintProgram("lp");
QPrintDialog qpd(&qprin, this);
if (qpd.exec() == QDialog::Accepted) {
QPainter qp(&qprin);
Diagram *sc = diagramEnCours() -> scene;
sc -> setAffichageGrille(false);
sc -> render(&qp);
sc -> setAffichageGrille(true);
}
} }
/** /**
Gere l'export de schema vers un autre format (PNG pour le moment) Gere l'export de schema sous forme d'image
*/ */
void QETApp::dialogue_exporter() { void QETApp::dialog_export() {
Diagram *sc = diagramEnCours() -> scene; DiagramView *sv = diagramEnCours();
ExportDialog ed(*sc); if (!sv) return;
ed.exec(); sv -> dialogExport();
} }
/** /**
@@ -753,7 +742,7 @@ void QETApp::slot_updateActions() {
refaire -> setEnabled(document_ouvert); refaire -> setEnabled(document_ouvert);
// actions ayant aussi besoin d'elements selectionnes // actions ayant aussi besoin d'elements selectionnes
bool elements_selectionnes = document_ouvert ? (sv -> scene -> selectedItems().size() > 0) : false; bool elements_selectionnes = document_ouvert ? (sv -> hasSelectedItems()) : false;
couper -> setEnabled(elements_selectionnes); couper -> setEnabled(elements_selectionnes);
copier -> setEnabled(elements_selectionnes); copier -> setEnabled(elements_selectionnes);
supprimer -> setEnabled(elements_selectionnes); supprimer -> setEnabled(elements_selectionnes);
@@ -932,81 +921,29 @@ QString QETApp::languagesPath() {
return(QDir::current().path() + "/lang/"); return(QDir::current().path() + "/lang/");
} }
void QETApp::editInfos() { /**
// ne fait rien s'il n'y a pas de schema ouvert Edite les informations du schema en cours
*/
void QETApp::slot_editInfos() {
DiagramView *sv = diagramEnCours(); DiagramView *sv = diagramEnCours();
if (!sv) return; if (!sv) return;
sv -> dialogEditInfos();
// recupere le cartouche du schema
BorderInset *inset = &(sv -> scene -> border_and_inset);
// construit le dialogue
QDialog popup;
popup.setMinimumWidth(400);
popup.setWindowTitle(tr("Cartouche du sch\351ma"));
QLineEdit *titre = new QLineEdit(inset -> title(), &popup);
QLineEdit *auteur = new QLineEdit(inset -> author(), &popup);
QDate date_diagram = QDate(inset -> date());
if (date_diagram.isNull() || !date_diagram.isValid()) date_diagram = QDate::currentDate();
QDateEdit *date = new QDateEdit(date_diagram, &popup);
date -> setCalendarPopup(true);
QLineEdit *fichier = new QLineEdit(inset -> fileName(), &popup);
QLineEdit *folio = new QLineEdit(inset -> folio(), &popup);
QWidget bidon(&popup);
QGridLayout layout_champs(&bidon);
layout_champs.addWidget(new QLabel(tr("Titre : ")), 0, 0);
layout_champs.addWidget(titre, 0, 1);
layout_champs.addWidget(new QLabel(tr("Auteur : ")), 1, 0);
layout_champs.addWidget(auteur, 1, 1);
layout_champs.addWidget(new QLabel(tr("Date : ")), 2, 0);
layout_champs.addWidget(date, 2, 1);
layout_champs.addWidget(new QLabel(tr("Fichier : ")), 3, 0);
layout_champs.addWidget(fichier, 3, 1);
layout_champs.addWidget(new QLabel(tr("Folio : ")), 4, 0);
layout_champs.addWidget(folio, 4, 1);
// boutons
QDialogButtonBox boutons(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
connect(&boutons, SIGNAL(accepted()), &popup, SLOT(accept()));
connect(&boutons, SIGNAL(rejected()), &popup, SLOT(accept()));
// ajout dans une disposition verticale
QVBoxLayout layout_v(&popup);
layout_v.addWidget(&bidon);
layout_v.addWidget(&boutons);
if (popup.exec() == QDialog::Accepted) {
inset -> setTitle(titre -> text());
inset -> setAuthor(auteur -> text());
inset -> setDate(date -> date());
inset -> setFileName(fichier -> text());
inset -> setFolio(folio -> text());
}
} }
/**
Ajoute une colonne au schema en cours
*/
void QETApp::slot_addColumn() { void QETApp::slot_addColumn() {
DiagramView *sv = diagramEnCours(); DiagramView *sv = diagramEnCours();
if (!sv) return; if (!sv) return;
sv -> addColumn();
// ajoute la colonne
sv -> scene -> border_and_inset.addColumn();
// met a jour la zone affichee par la vue
QRectF sr = sv -> sceneRect();
sr.setWidth(5.0 + sv -> scene -> border_and_inset.borderWidth());
sv -> setSceneRect(sr);
// rafraichit la vue
sv -> scene -> update(sv -> sceneRect());
} }
/**
Enleve une colonne au schema en cours
*/
void QETApp::slot_removeColumn() { void QETApp::slot_removeColumn() {
DiagramView *sv = diagramEnCours(); DiagramView *sv = diagramEnCours();
if (!sv) return; if (!sv) return;
sv -> scene -> border_and_inset.removeColumn(); sv -> removeColumn();
// on pourrait mettre a jour la zone affichee par la vue
// rafraichit la vue
sv -> scene -> update(sv -> sceneRect());
} }

View File

@@ -22,6 +22,7 @@
static QString languagesPath(); static QString languagesPath();
static QString realPath(QString &); static QString realPath(QString &);
static QString symbolicPath(QString &); static QString symbolicPath(QString &);
public slots: public slots:
void systray(QSystemTrayIcon::ActivationReason); void systray(QSystemTrayIcon::ActivationReason);
void systrayReduce(); void systrayReduce();
@@ -30,14 +31,32 @@
void toggleFullScreen(); void toggleFullScreen();
void toggleAntialiasing(); void toggleAntialiasing();
void aPropos(); void aPropos();
void editInfos(); void dialog_print();
void dialogue_imprimer(); void dialog_export();
void dialogue_exporter();
bool dialogue_enregistrer_sous(); bool dialogue_enregistrer_sous();
bool enregistrer(); bool enregistrer();
bool nouveau(); bool nouveau();
bool ouvrir(); bool ouvrir();
bool fermer(); bool fermer();
void slot_editInfos();
void slot_couper();
void slot_copier();
void slot_coller();
void slot_zoomPlus();
void slot_zoomMoins();
void slot_zoomFit();
void slot_zoomReset();
void slot_selectAll();
void slot_selectNothing();
void slot_selectInvert();
void slot_supprimer();
void slot_pivoter();
void slot_setSelectionMode();
void slot_setVisualisationMode();
void slot_updateActions();
void slot_updateMenuFenetres();
void slot_addColumn();
void slot_removeColumn();
protected: protected:
// Actions faisables au travers de menus dans l'application QElectroTech // Actions faisables au travers de menus dans l'application QElectroTech
@@ -109,25 +128,5 @@
void menus(); void menus();
void toolbar(); void toolbar();
QToolBar *barre_outils; QToolBar *barre_outils;
private slots:
void slot_couper();
void slot_copier();
void slot_coller();
void slot_zoomPlus();
void slot_zoomMoins();
void slot_zoomFit();
void slot_zoomReset();
void slot_selectAll();
void slot_selectNothing();
void slot_selectInvert();
void slot_supprimer();
void slot_pivoter();
void slot_setSelectionMode();
void slot_setVisualisationMode();
void slot_updateActions();
void slot_updateMenuFenetres();
void slot_addColumn();
void slot_removeColumn();
}; };
#endif #endif