Seconde application du patch de Sebastien Goueze : il est desormais possible d'exporter un schema vers le presse-papier depuis le dialogue d'export.

git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@728 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
xavier
2009-08-09 13:53:35 +00:00
parent 9f1d5b8713
commit 481aefee09
2 changed files with 70 additions and 17 deletions

View File

@@ -100,12 +100,14 @@ QWidget *ExportDialog::initDiagramsListPart() {
height_mapper_ = new QSignalMapper(this); height_mapper_ = new QSignalMapper(this);
ratio_mapper_ = new QSignalMapper(this); ratio_mapper_ = new QSignalMapper(this);
reset_mapper_ = new QSignalMapper(this); reset_mapper_ = new QSignalMapper(this);
clipboard_mapper_ = new QSignalMapper(this);
connect(preview_mapper_, SIGNAL(mapped(int)), this, SLOT(slot_previewDiagram(int))); connect(preview_mapper_, SIGNAL(mapped(int)), this, SLOT(slot_previewDiagram(int)));
connect(width_mapper_, SIGNAL(mapped(int)), this, SLOT(slot_correctHeight(int))); connect(width_mapper_, SIGNAL(mapped(int)), this, SLOT(slot_correctHeight(int)));
connect(height_mapper_, SIGNAL(mapped(int)), this, SLOT(slot_correctWidth(int))); connect(height_mapper_, SIGNAL(mapped(int)), this, SLOT(slot_correctWidth(int)));
connect(ratio_mapper_, SIGNAL(mapped(int)), this, SLOT(slot_keepRatioChanged(int))); connect(ratio_mapper_, SIGNAL(mapped(int)), this, SLOT(slot_keepRatioChanged(int)));
connect(reset_mapper_, SIGNAL(mapped(int)), this, SLOT(slot_resetSize(int))); connect(reset_mapper_, SIGNAL(mapped(int)), this, SLOT(slot_resetSize(int)));
connect(clipboard_mapper_, SIGNAL(mapped(int)), this, SLOT(slot_exportToClipBoard(int)));
diagrams_list_layout_ = new QGridLayout(); diagrams_list_layout_ = new QGridLayout();
@@ -140,6 +142,10 @@ QWidget *ExportDialog::initDiagramsListPart() {
// mappings et signaux pour l'apercu du schema // mappings et signaux pour l'apercu du schema
preview_mapper_ -> setMapping(diagram_line -> preview, line_count); preview_mapper_ -> setMapping(diagram_line -> preview, line_count);
connect(diagram_line -> preview, SIGNAL(clicked(bool)), preview_mapper_, SLOT(map())); connect(diagram_line -> preview, SIGNAL(clicked(bool)), preview_mapper_, SLOT(map()));
// mappings et signaux pour l'export du schema vers le presse-papier
clipboard_mapper_ -> setMapping(diagram_line -> clipboard, line_count);
connect(diagram_line -> clipboard, SIGNAL(clicked(bool)), clipboard_mapper_, SLOT(map()));
} }
QWidget *widget_diagrams_list = new QWidget(); QWidget *widget_diagrams_list = new QWidget();
@@ -339,9 +345,9 @@ void ExportDialog::saveReloadDiagramParameters(Diagram *diagram, bool save) {
@param width Largeur de l'export SVG @param width Largeur de l'export SVG
@param height Hauteur de l'export SVG @param height Hauteur de l'export SVG
@param keep_aspect_ratio True pour conserver le ratio, false sinon @param keep_aspect_ratio True pour conserver le ratio, false sinon
@param file Fichier dans lequel sera enregistre le code SVG @param io_device Peripherique de sortie pour le code SVG (souvent : un fichier)
*/ */
void ExportDialog::generateSvg(Diagram *diagram, int width, int height, bool keep_aspect_ratio, QFile &file) { void ExportDialog::generateSvg(Diagram *diagram, int width, int height, bool keep_aspect_ratio, QIODevice &io_device) {
saveReloadDiagramParameters(diagram, true); saveReloadDiagramParameters(diagram, true);
// genere une QPicture a partir du schema // genere une QPicture a partir du schema
@@ -356,7 +362,7 @@ void ExportDialog::generateSvg(Diagram *diagram, int width, int height, bool kee
// "joue" la QPicture sur un QSvgGenerator // "joue" la QPicture sur un QSvgGenerator
QSvgGenerator svg_engine; QSvgGenerator svg_engine;
svg_engine.setSize(QSize(width, height)); svg_engine.setSize(QSize(width, height));
svg_engine.setOutputDevice(&file); svg_engine.setOutputDevice(&io_device);
QPainter svg_painter(&svg_engine); QPainter svg_painter(&svg_engine);
picture.play(&svg_painter); picture.play(&svg_painter);
@@ -433,7 +439,7 @@ void ExportDialog::exportDiagram(ExportDiagramLine *diagram_line) {
// determine le nom de fichier a utiliser // determine le nom de fichier a utiliser
QString diagram_path = diagram_line -> file_name -> text(); QString diagram_path = diagram_line -> file_name -> text();
// determine le chemin du fichier du fichier // determine le chemin du fichier
QDir target_dir_path(export_properties.destination_directory); QDir target_dir_path(export_properties.destination_directory);
diagram_path = target_dir_path.absoluteFilePath(diagram_path); diagram_path = target_dir_path.absoluteFilePath(diagram_path);
@@ -543,8 +549,8 @@ void ExportDialog::slot_changeFilesExtension(bool force_extension) {
} }
/** /**
Cette methode fait apparaitre un dialogue permettant de redimensionner et Cette methode fait apparaitre un dialogue permettant de previsualiser un
previsualiser un des schemas a exporter des schemas a exporter
@param diagram_id numero du schema a previsualiser @param diagram_id numero du schema a previsualiser
*/ */
void ExportDialog::slot_previewDiagram(int diagram_id) { void ExportDialog::slot_previewDiagram(int diagram_id) {
@@ -592,6 +598,45 @@ void ExportDialog::slot_previewDiagram(int diagram_id) {
preview_dialog.exec(); preview_dialog.exec();
} }
/**
Cette methode exporte un schema vers le presse-papier
@param diagram_id numero du schema a previsualiser
*/
void ExportDialog::slot_exportToClipBoard(int diagram_id) {
// recupere l'ExportDiagramLine concernee
ExportDialog::ExportDiagramLine *diagram_line = diagram_lines_[diagram_id];
if (!diagram_line) return;
// recupere le format a utiliser (acronyme et extension)
QString format_acronym = epw -> exportProperties().format;
QClipboard *clipboard = QApplication::clipboard();
// enregistre l'image dans le fichier
if (format_acronym == "SVG") {
QByteArray ba;
QBuffer buffer(&ba);
buffer.open(QIODevice::WriteOnly);
generateSvg(
diagram_line -> diagram,
diagram_line -> width -> value(),
diagram_line -> height -> value(),
diagram_line -> keep_ratio -> isChecked(),
buffer
);
buffer.close();
clipboard -> setText(ba);
} else {
QImage image = generateImage(
diagram_line -> diagram,
diagram_line -> width -> value(),
diagram_line -> height -> value(),
diagram_line -> keep_ratio -> isChecked()
);
clipboard -> setImage(image);
}
}
/** /**
Constructeur Constructeur
@param dia Schema concerne @param dia Schema concerne
@@ -641,6 +686,10 @@ ExportDialog::ExportDiagramLine::ExportDiagramLine(Diagram *dia) {
preview = new QPushButton(); preview = new QPushButton();
preview -> setIcon(QET::Icons::ZoomOriginal); preview -> setIcon(QET::Icons::ZoomOriginal);
preview -> setToolTip(QObject::tr("Aper\347u")); preview -> setToolTip(QObject::tr("Aper\347u"));
clipboard = new QPushButton();
clipboard -> setIcon(QET::Icons::CopyFile);
clipboard -> setToolTip(QObject::tr("Exporter vers le presse-papier"));
} }
/** /**
@@ -661,5 +710,6 @@ QBoxLayout *ExportDialog::ExportDiagramLine::sizeLayout() {
layout -> addWidget(keep_ratio); layout -> addWidget(keep_ratio);
layout -> addWidget(reset_size); layout -> addWidget(reset_size);
layout -> addWidget(preview); layout -> addWidget(preview);
layout -> addWidget(clipboard);
return(layout); return(layout);
} }

View File

@@ -58,6 +58,7 @@ class ExportDialog : public QDialog {
QPushButton *keep_ratio; QPushButton *keep_ratio;
QPushButton *reset_size; QPushButton *reset_size;
QPushButton *preview; QPushButton *preview;
QPushButton *clipboard;
}; };
// attributs // attributs
@@ -73,6 +74,7 @@ class ExportDialog : public QDialog {
QSignalMapper *height_mapper_; QSignalMapper *height_mapper_;
QSignalMapper *ratio_mapper_; QSignalMapper *ratio_mapper_;
QSignalMapper *reset_mapper_; QSignalMapper *reset_mapper_;
QSignalMapper *clipboard_mapper_;
// elements relatifs au traitement effectue par le dialogue // elements relatifs au traitement effectue par le dialogue
QETProject *project_; QETProject *project_;
@@ -81,7 +83,7 @@ class ExportDialog : public QDialog {
private: private:
QWidget *initDiagramsListPart(); QWidget *initDiagramsListPart();
void saveReloadDiagramParameters(Diagram *, bool = true); void saveReloadDiagramParameters(Diagram *, bool = true);
void generateSvg(Diagram *, int, int, bool, QFile &); void generateSvg(Diagram *, int, int, bool, QIODevice &);
QImage generateImage(Diagram *, int, int, bool); QImage generateImage(Diagram *, int, int, bool);
void exportDiagram(ExportDiagramLine *); void exportDiagram(ExportDiagramLine *);
qreal diagramRatio(Diagram *); qreal diagramRatio(Diagram *);
@@ -97,5 +99,6 @@ class ExportDialog : public QDialog {
void slot_checkDiagramsCount(); void slot_checkDiagramsCount();
void slot_changeFilesExtension(bool = false); void slot_changeFilesExtension(bool = false);
void slot_previewDiagram(int); void slot_previewDiagram(int);
void slot_exportToClipBoard(int);
}; };
#endif #endif