20#include "kis_jpeg_export.h"
22#include <tqcheckbox.h>
25#include <tdeapplication.h>
26#include <kdialogbase.h>
27#include <kgenericfactory.h>
29#include <KoFilterChain.h>
33#include <kis_group_layer.h>
34#include <kis_paint_layer.h>
35#include <kis_progress_display_interface.h>
36#include <kis_layer_visitor.h>
38#include "kis_jpeg_converter.h"
39#include "kis_wdg_options_jpeg.h"
42class KisExifInfoVisitor :
public KisLayerVisitor
45 KisExifInfoVisitor() :
50 virtual bool visit(KisPaintLayer* layer) {
52 if( layer->paintDevice()->hasExifInfo())
53 m_exifInfo = layer->paintDevice()->exifInfo();
56 virtual bool visit(KisGroupLayer* layer)
58 kdDebug(41008) <<
"Visiting on grouplayer " << layer->name() <<
"\n";
59 KisLayerSP child = layer->firstChild();
62 child = child->nextSibling();
66 virtual bool visit(KisPartLayer *) {
return true; };
67 virtual bool visit(KisAdjustmentLayer* ) {
return true; };
69 inline uint countPaintLayer() {
return m_countPaintLayer; }
70 inline KisExifInfo* exifInfo() {
return m_exifInfo; }
72 KisExifInfo* m_exifInfo;
73 uint m_countPaintLayer;
77typedef KGenericFactory<KisJPEGExport, KoFilter> KisJPEGExportFactory;
78K_EXPORT_COMPONENT_FACTORY(libchalkjpegexport, KisJPEGExportFactory(
"kofficefilters"))
80KisJPEGExport::KisJPEGExport(KoFilter *, const
char *, const TQStringList&) : KoFilter()
84KisJPEGExport::~KisJPEGExport()
88KoFilter::ConversionStatus KisJPEGExport::convert(
const TQCString& from,
const TQCString& to)
90 kdDebug(41008) <<
"JPEG export! From: " << from <<
", To: " << to <<
"\n";
92 if (from !=
"application/x-chalk")
93 return KoFilter::NotImplemented;
96 KDialogBase* kdb =
new KDialogBase(0,
"",
false, i18n(
"JPEG Export Options"), KDialogBase::Ok | KDialogBase::Cancel);
98 KisWdgOptionsJPEG* wdg =
new KisWdgOptionsJPEG(kdb);
99 kdb->setMainWidget(wdg);
100 kapp->restoreOverrideCursor();
101 if(kdb->exec() == TQDialog::Rejected)
105 KisJPEGOptions options;
106 options.progressive = wdg->progressive->isChecked();
107 options.quality = wdg->qualityLevel->value();
112 KisDoc *output =
dynamic_cast<KisDoc*
>(m_chain->inputDocument());
113 TQString filename = m_chain->outputFile();
116 return KoFilter::CreationError;
119 if (filename.isEmpty())
return KoFilter::FileNotFound;
122 url.setPath(filename);
124 KisImageSP img = output->currentImage();
127 KisJPEGConverter kpc(output, output->undoAdapter());
129 KisPaintDeviceSP pd =
new KisPaintDevice(*img->projection());
130 KisPaintLayerSP l =
new KisPaintLayer(img,
"projection", OPACITY_OPAQUE, pd);
132 vKisAnnotationSP_it beginIt = img->beginAnnotations();
133 vKisAnnotationSP_it endIt = img->endAnnotations();
134 KisImageBuilder_Result res;
136 KisExifInfoVisitor eIV;
137 eIV.visit( img->rootLayer() );
140 if(eIV.countPaintLayer() == 1)
143 if ( (res = kpc.buildFile(url, l, beginIt, endIt, options, eI)) == KisImageBuilder_RESULT_OK) {
144 kdDebug(41008) <<
"success !" << endl;
147 kdDebug(41008) <<
" Result = " << res << endl;
148 return KoFilter::InternalError;
151#include <kis_jpeg_export.moc>