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

[ Thread Index | Date Index | More lists.tuxfamily.org/qet Archives ]


Revision: 728
Author:   xavier
Date:     2009-08-09 15:53:35 +0200 (Sun, 09 Aug 2009)

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

Modified Paths:
--------------
    trunk/sources/exportdialog.cpp
    trunk/sources/exportdialog.h


Modified: trunk/sources/exportdialog.cpp
===================================================================
--- trunk/sources/exportdialog.cpp	2009-08-09 12:51:02 UTC (rev 727)
+++ trunk/sources/exportdialog.cpp	2009-08-09 13:53:35 UTC (rev 728)
@@ -95,17 +95,19 @@
 	@return Le widget representant la liste des schemas
 */
 QWidget *ExportDialog::initDiagramsListPart() {
-	preview_mapper_ = new QSignalMapper(this);
-	width_mapper_   = new QSignalMapper(this);
-	height_mapper_  = new QSignalMapper(this);
-	ratio_mapper_   = new QSignalMapper(this);
-	reset_mapper_   = new QSignalMapper(this);
+	preview_mapper_   = new QSignalMapper(this);
+	width_mapper_     = new QSignalMapper(this);
+	height_mapper_    = new QSignalMapper(this);
+	ratio_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(width_mapper_,   SIGNAL(mapped(int)), this, SLOT(slot_correctHeight(int)));
-	connect(height_mapper_,  SIGNAL(mapped(int)), this, SLOT(slot_correctWidth(int)));
-	connect(ratio_mapper_,   SIGNAL(mapped(int)), this, SLOT(slot_keepRatioChanged(int)));
-	connect(reset_mapper_,   SIGNAL(mapped(int)), this, SLOT(slot_resetSize(int)));
+	connect(preview_mapper_,   SIGNAL(mapped(int)), this, SLOT(slot_previewDiagram(int)));
+	connect(width_mapper_,     SIGNAL(mapped(int)), this, SLOT(slot_correctHeight(int)));
+	connect(height_mapper_,    SIGNAL(mapped(int)), this, SLOT(slot_correctWidth(int)));
+	connect(ratio_mapper_,     SIGNAL(mapped(int)), this, SLOT(slot_keepRatioChanged(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();
 	
@@ -140,6 +142,10 @@
 		// mappings et signaux pour l'apercu du schema
 		preview_mapper_ -> setMapping(diagram_line -> preview, line_count);
 		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();
@@ -339,9 +345,9 @@
 	@param width  Largeur de l'export SVG
 	@param height Hauteur de l'export SVG
 	@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);
 	
 	// genere une QPicture a partir du schema
@@ -356,7 +362,7 @@
 	// "joue" la QPicture sur un QSvgGenerator
 	QSvgGenerator svg_engine;
 	svg_engine.setSize(QSize(width, height));
-	svg_engine.setOutputDevice(&file);
+	svg_engine.setOutputDevice(&io_device);
 	QPainter svg_painter(&svg_engine);
 	picture.play(&svg_painter);
 	
@@ -433,7 +439,7 @@
 	// determine le nom de fichier a utiliser
 	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);
 	diagram_path = target_dir_path.absoluteFilePath(diagram_path);
 	
@@ -543,8 +549,8 @@
 }
 
 /**
-	Cette methode fait apparaitre un dialogue permettant de redimensionner et
-	previsualiser un des schemas a exporter
+	Cette methode fait apparaitre un dialogue permettant de previsualiser un
+	des schemas a exporter
 	@param diagram_id numero du schema a previsualiser
 */
 void ExportDialog::slot_previewDiagram(int diagram_id) {
@@ -593,6 +599,45 @@
 }
 
 /**
+	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
 	@param dia Schema concerne
 */
@@ -641,6 +686,10 @@
 	preview = new QPushButton();
 	preview -> setIcon(QET::Icons::ZoomOriginal);
 	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 @@
 	layout -> addWidget(keep_ratio);
 	layout -> addWidget(reset_size);
 	layout -> addWidget(preview);
+	layout -> addWidget(clipboard);
 	return(layout);
 }

Modified: trunk/sources/exportdialog.h
===================================================================
--- trunk/sources/exportdialog.h	2009-08-09 12:51:02 UTC (rev 727)
+++ trunk/sources/exportdialog.h	2009-08-09 13:53:35 UTC (rev 728)
@@ -58,6 +58,7 @@
 		QPushButton *keep_ratio;
 		QPushButton *reset_size;
 		QPushButton *preview;
+		QPushButton *clipboard;
 	};
 	
 	// attributs
@@ -73,6 +74,7 @@
 	QSignalMapper *height_mapper_;
 	QSignalMapper *ratio_mapper_;
 	QSignalMapper *reset_mapper_;
+	QSignalMapper *clipboard_mapper_;
 	
 	// elements relatifs au traitement effectue par le dialogue
 	QETProject *project_;
@@ -81,7 +83,7 @@
 	private:
 	QWidget *initDiagramsListPart();
 	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);
 	void exportDiagram(ExportDiagramLine *);
 	qreal diagramRatio(Diagram *);
@@ -97,5 +99,6 @@
 	void slot_checkDiagramsCount();
 	void slot_changeFilesExtension(bool = false);
 	void slot_previewDiagram(int);
+	void slot_exportToClipBoard(int);
 };
 #endif


Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/