diff --git a/borderinset.cpp b/borderinset.cpp index 0cd75f4c5..e7070cd64 100644 --- a/borderinset.cpp +++ b/borderinset.cpp @@ -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); diff --git a/diagram.cpp b/diagram.cpp index a4e0722c6..e977ae769 100644 --- a/diagram.cpp +++ b/diagram.cpp @@ -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 &)), 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()); } /** diff --git a/diagram.h b/diagram.h index 5456cded5..63d7b69dd 100644 --- a/diagram.h +++ b/diagram.h @@ -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 &); private slots: diff --git a/diagramview.cpp b/diagramview.cpp index fc288bfb9..d1e1fdd64 100644 --- a/diagramview.cpp +++ b/diagramview.cpp @@ -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()); +} diff --git a/diagramview.h b/diagramview.h index 9bd3c790c..e98197602 100644 --- a/diagramview.h +++ b/diagramview.h @@ -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 &); diff --git a/elementspanel.cpp b/elementspanel.cpp index 5c1c926b3..10e1be322 100644 --- a/elementspanel.cpp +++ b/elementspanel.cpp @@ -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; diff --git a/elementspanel.h b/elementspanel.h index ef7d78eb9..835940a81 100644 --- a/elementspanel.h +++ b/elementspanel.h @@ -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 diff --git a/exportdialog.cpp b/exportdialog.cpp index a121e5665..8d85427df 100644 --- a/exportdialog.cpp +++ b/exportdialog.cpp @@ -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 diff --git a/exportdialog.h b/exportdialog.h index 09e8e2afc..9d0902230 100644 --- a/exportdialog.h +++ b/exportdialog.h @@ -9,7 +9,7 @@ class ExportDialog : public QDialog { Q_OBJECT public: - ExportDialog(Diagram &, QWidget * = 0); + ExportDialog(Diagram *, QWidget * = 0); private: // elements graphiques diff --git a/qetapp.cpp b/qetapp.cpp index 388273787..df96d9027 100644 --- a/qetapp.cpp +++ b/qetapp.cpp @@ -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(); } diff --git a/qetapp.h b/qetapp.h index f7884fa35..5846747c0 100644 --- a/qetapp.h +++ b/qetapp.h @@ -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