21#include "kivio_imageexport.h"
28#include <tqstringlist.h>
30#include <tdemessagebox.h>
32#include <kgenericfactory.h>
36#include <KoFilterChain.h>
37#include <KoZoomHandler.h>
40#include "kivio_page.h"
42#include "kivio_screen_painter.h"
44#include "kivio_imageexportdialog.h"
46typedef KGenericFactory<Kivio::ImageExport, KoFilter> KivioImageExportFactory;
47K_EXPORT_COMPONENT_FACTORY( libkivioimageexport, KivioImageExportFactory(
"KivioImageExport") )
52ImageExport::ImageExport(KoFilter *,
const char *,
const TQStringList&)
55 TDEGlobal::locale()->insertCatalogue(
"kofficefilters");
58KoFilter::ConversionStatus ImageExport::convert(
const TQCString& from,
const TQCString& to)
60 if(from !=
"application/x-kivio") {
61 return KoFilter::BadMimeType;
66 if(to ==
"image/png") {
68 }
else if(to ==
"image/jpeg") {
70 }
else if(to ==
"image/x-bmp") {
72 }
else if(to ==
"image/x-eps") {
74 }
else if(to ==
"image/x-portable-bitmap") {
76 }
else if(to ==
"image/x-pcx") {
78 }
else if(to ==
"image/x-portable-pixmap") {
80 }
else if(to ==
"image/x-rgb") {
82 }
else if(to ==
"image/x-xpm") {
84 }
else if(to ==
"image/jp2") {
87 return KoFilter::BadMimeType;
90 KoStoreDevice* storeIn = m_chain->storageFile(
"root", KoStore::Read);
93 KMessageBox::error(0, i18n(
"Failed to read data."), i18n(
"Export Error" ));
94 return KoFilter::FileNotFound;
99 domIn.setContent(storeIn);
103 if(!doc.loadXML(0, domIn)) {
104 KMessageBox::error(0, i18n(
"Malformed XML data."), i18n(
"Export Error"));
105 return KoFilter::WrongFormat;
108 ImageExportDialog dlg;
110 TQStringList pageNames;
111 TQPtrList<KivioPage> pageList = doc.map()->pageList();
112 TQPtrListIterator<KivioPage> it(pageList);
114 for(; it.current() != 0; ++it) {
115 pageNames.append(it.current()->pageName());
118 dlg.setPageList(pageNames);
120 dlg.setInitialDPI(300);
121 dlg.setInitialmargin(10);
123 if(dlg.exec() != TQDialog::Accepted) {
124 return KoFilter::UserCancelled;
127 KivioPage* page = doc.map()->findPage(dlg.selectedPage());
130 kdDebug() <<
"The page named " << dlg.selectedPage() <<
" wasn't found!!" << endl;
131 return KoFilter::InternalError;
134 float z = (float)dlg.imageDPI()/(float)KoGlobal::dpiX();
136 zoom.setZoomAndResolution(tqRound(z * 100), KoGlobal::dpiX(), KoGlobal::dpiY());
139 if(dlg.usePageBorders()) {
140 size = TQSize(zoom.zoomItX(page->paperLayout().ptWidth), zoom.zoomItY(page->paperLayout().ptHeight));
142 size = zoom.zoomSize(page->getRectForAllStencils().size());
145 kdDebug() <<
"KoGlobal::dpiX() " << KoGlobal::dpiX() <<
" KoGlobal::dpiY() " << KoGlobal::dpiY() << endl;
147 int border = dlg.margin();
149 size.setWidth(size.width() + (border * 2));
150 size.setHeight(size.height() + (border * 2));
152 TQPixmap pixmap = TQPixmap(size);
153 pixmap.fill(TQt::white);
154 KivioScreenPainter kpainter;
155 kpainter.start(&pixmap);
157 float translationX = border;
158 float translationY = border;
160 if(!dlg.usePageBorders()) {
161 TQPoint point = zoom.zoomPoint(page->getRectForAllStencils().topLeft());
162 translationX -= point.x();
163 translationY -= point.y();
166 kpainter.setTranslation(translationX, translationY);
167 page->printContent(kpainter, &zoom);
169 if(!pixmap.save(m_chain->outputFile(), format.local8Bit())) {
170 return KoFilter::CreationError;
178#include "kivio_imageexport.moc"