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

View File

@ -2,6 +2,7 @@
#include "conducer.h"
#include "customelement.h"
#include "diagram.h"
#include "exportdialog.h"
/**
Constructeur
@ -17,7 +18,8 @@ Diagram::Diagram(QObject *parent) : QGraphicsScene(parent) {
t.setStyle(Qt::DashLine);
poseur_de_conducer -> setPen(t);
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()));
}
@ -29,9 +31,9 @@ Diagram::Diagram(QObject *parent) : QGraphicsScene(parent) {
void Diagram::drawBackground(QPainter *p, const QRectF &r) {
p -> save();
// desactive tout antialiasing
// desactive tout antialiasing, sauf pour le texte
p -> setRenderHint(QPainter::Antialiasing, false);
p -> setRenderHint(QPainter::TextAntialiasing, false);
p -> setRenderHint(QPainter::TextAntialiasing, true);
p -> setRenderHint(QPainter::SmoothPixmapTransform, false);
// dessine un fond blanc
@ -39,7 +41,7 @@ void Diagram::drawBackground(QPainter *p, const QRectF &r) {
p -> setBrush(Qt::white);
p -> drawRect(r);
if (doit_dessiner_grille) {
if (draw_grid) {
// dessine les points de la grille
p -> setPen(Qt::black);
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();
}
@ -66,18 +68,22 @@ void Diagram::drawBackground(QPainter *p, const QRectF &r) {
Exporte le schema vers une image
@return Une QImage representant le schema
*/
QImage Diagram::toImage(int width, int height, bool respectRatio) {
// determine le contenu du schema
QRectF diagram_content = itemsBoundingRect();
// calcule la marge = 5 % de la longueur necessaire
qreal margin = 0.05 * diagram_content.width();
// 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);
QImage Diagram::toImage(int width, int height, Qt::AspectRatioMode aspectRatioMode) {
// determine la zone source = contenu du schema + marges
QRectF source_area;
if (!use_border) {
source_area = itemsBoundingRect();
source_area.translate(-MARGIN, -MARGIN);
source_area.setWidth (source_area.width () + 2.0 * MARGIN);
source_area.setHeight(source_area.height() + 2.0 * MARGIN);
} else {
source_area = QRectF(
0.0,
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
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
QPainter p;
bool painter_ok = p.begin(&pix);
if (!painter_ok) return(QImage());
if (!p.begin(&pix)) return(QImage());
// rendu antialiase
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);
// 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();
// 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()
@return La taille de l'image generee par toImage()
@todo tenir compte des arguments
*/
QSize Diagram::imageSize() const {
// determine le contenu du schema
QRectF diagram_content = itemsBoundingRect();
// determine la zone source = contenu du schema + marges
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
qreal margin = 0.05 * diagram_content.width();
// 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);
image_width += 2.0 * MARGIN;
image_height += 2.0 * MARGIN;
// 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 Diagram : public QGraphicsScene {
Q_OBJECT
enum BorderOptions { EmptyBorder, Inset, Columns };
public:
Diagram(QObject * = 0);
void drawBackground(QPainter *, const QRectF &);
// fonctions relatives a la pose de conducteurs
inline void poseConducer(bool pf) {
if (pf) {
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 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);
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;
QRectF border() const;
QImage toImage(int = -1, int = -1, Qt::AspectRatioMode = Qt::KeepAspectRatio);
QSize imageSize() const;
private:
QGraphicsLineItem *poseur_de_conducer;
bool doit_dessiner_grille;
bool draw_grid;
bool use_border;
Element *elementFromXml(QDomElement &, QHash<int, Terminal *> &);
private slots:

View File

@ -1,6 +1,7 @@
#include "diagramview.h"
#include "diagram.h"
#include "customelement.h"
#include "exportdialog.h"
/**
Initialise le DiagramView
@ -432,3 +433,96 @@ bool DiagramView::private_enregistrer(QString &n_fichier) {
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;
bool enregistrer();
bool enregistrer_sous();
void dialogExport();
void dialogEditInfos();
void dialogPrint();
void addColumn();
void removeColumn();
Diagram *diagram() { return(scene); }
bool hasSelectedItems();
private:
bool private_enregistrer(QString &);

View File

@ -21,18 +21,18 @@ ElementsPanel::ElementsPanel(QWidget *parent) : QTreeWidget(parent) {
setIconSize(QSize(50, 50));
// 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
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
// clair, avec du blanc sur bleu pas trop fonce pour la selection
QPalette qp = palette();
qp.setColor(QPalette::Text, Qt::black);
qp.setColor(QPalette::Base, Qt::white);
qp.setColor(QPalette::AlternateBase, QColor("#e8e8e8"));
qp.setColor(QPalette::Highlight, QColor("#678db2"));
qp.setColor(QPalette::Text, Qt::black);
qp.setColor(QPalette::Base, Qt::white);
qp.setColor(QPalette::AlternateBase, QColor("#e8e8e8"));
qp.setColor(QPalette::Highlight, QColor("#678db2"));
qp.setColor(QPalette::HighlightedText, Qt::white);
setPalette(qp);
}
@ -87,7 +87,6 @@ void ElementsPanel::startDrag(Qt::DropActions /*supportedActions*/) {
delete appar;
}
/**
Methode privee permettant d'ajouter un dossier au panel d'appareils
@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
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);
if (!dossier.exists()) return;
adr_dossier = dossier.canonicalPath() + "/";
@ -115,11 +114,11 @@ void ElementsPanel::ajouterDossier(QTreeWidgetItem *qtwi_parent, QString adr_dos
// ajout des sous-categories / sous-dossiers
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
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 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 tool_tip = tr("Cliquer-d\351posez cet \351l\351ment sur le sch\351ma pour ins\351rer un \351l\351ment ");
int etat;
@ -145,7 +144,6 @@ void ElementsPanel::ajouterFichier(QTreeWidgetItem *qtwi_parent, QString fichier
qtwi -> setData(0, 42, fichier);
}
/**
Methode permettant d'obtenir le nom affichable d'une categorie etant donne
son chemin (dossier).
@ -162,7 +160,7 @@ QString ElementsPanel::categoryName(QDir &directory) {
if (directory_conf.exists()) {
// ouvre le fichier
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);
// lit le contenu du fichier dans un QDomDocument XML
QDomDocument document;

View File

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

View File

@ -5,11 +5,13 @@
@param dia Le schema a exporter
@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
diagram = &dia;
diagram = dia;
diagram_size = diagram -> imageSize();
diagram_ratio = (qreal)diagram_size.width() / (qreal)diagram_size.height();
dontchangewidth = dontchangeheight = false;
// la taille du dialogue est fixee
setFixedSize(400, 310);
@ -190,7 +192,11 @@ void ExportDialog::slot_check() {
// genere l'image
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);
// convertit l'image en niveaux de gris si besoin

View File

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

View File

@ -1,9 +1,8 @@
#include "qetapp.h"
//#include "diagram.h"
#include "diagramview.h"
#include "diagram.h"
#include "elementspanel.h"
#include "aboutqet.h"
#include "exportdialog.h"
/**
constructeur
@ -364,8 +363,8 @@ void QETApp::actions() {
connect(zoom_arriere, SIGNAL(triggered()), this, SLOT(slot_zoomMoins()) );
connect(zoom_adapte, SIGNAL(triggered()), this, SLOT(slot_zoomFit()) );
connect(zoom_reset, SIGNAL(triggered()), this, SLOT(slot_zoomReset()) );
connect(imprimer, SIGNAL(triggered()), this, SLOT(dialogue_imprimer()) );
connect(exporter, SIGNAL(triggered()), this, SLOT(dialogue_exporter()) );
connect(imprimer, SIGNAL(triggered()), this, SLOT(dialog_print()) );
connect(exporter, SIGNAL(triggered()), this, SLOT(dialog_export()) );
connect(enr_fichier_sous, SIGNAL(triggered()), this, SLOT(dialogue_enregistrer_sous()));
connect(enr_fichier, SIGNAL(triggered()), this, SLOT(enregistrer()) );
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_suiv, SIGNAL(triggered()), &workspace, SLOT(activateNextWindow()) );
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(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() {
QPrinter qprin;
qprin.setOrientation(QPrinter::Landscape);
qprin.setPageSize(QPrinter::A4);
//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);
}
void QETApp::dialog_print() {
DiagramView *sv = diagramEnCours();
if (!sv) return;
sv -> dialogPrint();
}
/**
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() {
Diagram *sc = diagramEnCours() -> scene;
ExportDialog ed(*sc);
ed.exec();
void QETApp::dialog_export() {
DiagramView *sv = diagramEnCours();
if (!sv) return;
sv -> dialogExport();
}
/**
@ -753,7 +742,7 @@ void QETApp::slot_updateActions() {
refaire -> setEnabled(document_ouvert);
// 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);
copier -> setEnabled(elements_selectionnes);
supprimer -> setEnabled(elements_selectionnes);
@ -932,81 +921,29 @@ QString QETApp::languagesPath() {
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();
if (!sv) return;
// 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());
}
sv -> dialogEditInfos();
}
/**
Ajoute une colonne au schema en cours
*/
void QETApp::slot_addColumn() {
DiagramView *sv = diagramEnCours();
if (!sv) return;
// 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());
sv -> addColumn();
}
/**
Enleve une colonne au schema en cours
*/
void QETApp::slot_removeColumn() {
DiagramView *sv = diagramEnCours();
if (!sv) return;
sv -> scene -> border_and_inset.removeColumn();
// on pourrait mettre a jour la zone affichee par la vue
// rafraichit la vue
sv -> scene -> update(sv -> sceneRect());
sv -> removeColumn();
}

View File

@ -22,6 +22,7 @@
static QString languagesPath();
static QString realPath(QString &);
static QString symbolicPath(QString &);
public slots:
void systray(QSystemTrayIcon::ActivationReason);
void systrayReduce();
@ -30,14 +31,32 @@
void toggleFullScreen();
void toggleAntialiasing();
void aPropos();
void editInfos();
void dialogue_imprimer();
void dialogue_exporter();
void dialog_print();
void dialog_export();
bool dialogue_enregistrer_sous();
bool enregistrer();
bool nouveau();
bool ouvrir();
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:
// Actions faisables au travers de menus dans l'application QElectroTech
@ -109,25 +128,5 @@
void menus();
void toolbar();
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