Krita Source Code Documentation
Loading...
Searching...
No Matches
KisImportExportFilter Class Referenceabstract

The base class for import and export filters. More...

#include <KisImportExportFilter.h>

+ Inheritance diagram for KisImportExportFilter:

Public Member Functions

virtual KisImportExportErrorCode convert (KisDocument *document, QIODevice *io, KisPropertiesConfigurationSP configuration=0)=0
 
virtual KisConfigWidgetcreateConfigurationWidget (QWidget *parent, const QByteArray &from="", const QByteArray &to="") const
 createConfigurationWidget creates a widget that can be used to define the settings for a given import/export filter
 
virtual KisPropertiesConfigurationSP defaultConfiguration (const QByteArray &from="", const QByteArray &to="") const
 defaultConfiguration defines the default settings for the given import export filter
 
virtual QMap< QString, KisExportCheckBase * > exportChecks ()
 generate and return the list of capabilities of this export filter. The list
 
virtual bool exportSupportsGuides () const
 exportSupportsGuides Because guides are in the document and not the image, checking for guides cannot be made an exportCheck.
 
KisPropertiesConfigurationSP lastSavedConfiguration (const QByteArray &from="", const QByteArray &to="") const
 lastSavedConfiguration return the last saved configuration for this filter
 
 Private ()
 
void setBatchMode (bool batchmode)
 
void setFilename (const QString &filename)
 
void setImportUserFeedBackInterface (KisImportUserFeedbackInterface *interface)
 
void setMimeType (const QString &mime)
 
void setRealFilename (const QString &filename)
 
void setUpdater (QPointer< KoUpdater > updater)
 
virtual bool supportsIO () const
 Override and return false for the filters that use a library that cannot handle file handles, only file names.
 
QPointer< KoUpdaterupdater ()
 
virtual QString verify (const QString &fileName) const
 Verify whether the given file is correct and readable.
 
 ~KisImportExportFilter () override
 
 ~Private ()
 

Public Attributes

bool batchmode
 
QMap< QString, KisExportCheckBase * > capabilities
 
QString filename
 
KisImportUserFeedbackInterfaceimportUserFeedBackInterface {nullptr}
 
QByteArray mime
 
QString realFilename
 
QPointer< KoUpdaterupdater
 

Static Public Attributes

static const QString CICPPrimariesTag = "CICPCompatiblePrimaries"
 
static const QString CICPTransferCharacteristicsTag = "CICPCompatibleTransferFunction"
 
static const QString ColorDepthIDTag = "ColorDepthID"
 
static const QString ColorModelIDTag = "ColorModelID"
 
static const QString HDRTag = "HDRSupported"
 
static const QString ImageContainsTransparencyTag = "ImageContainsTransparency"
 
static const QString sRGBTag = "sRGB"
 

Protected Member Functions

void addCapability (KisExportCheckBase *capability)
 
void addSupportedColorModels (QList< QPair< KoID, KoID > > supportedColorModels, const QString &name, KisExportCheckBase::Level level=KisExportCheckBase::PARTIALLY)
 
bool batchMode () const
 
QString filename () const
 
KisImportUserFeedbackInterfaceimportUserFeedBackInterface () const
 
virtual void initializeCapabilities ()
 
 KisImportExportFilter (QObject *parent=0)
 
QByteArray mimeType () const
 
QString realFilename () const
 
void setProgress (int value)
 
QString verifyZiPBasedFiles (const QString &fileName, const QStringList &filesToCheck) const
 

Private Member Functions

 KisImportExportFilter (const KisImportExportFilter &rhs)
 
KisImportExportFilteroperator= (const KisImportExportFilter &rhs)
 
- Private Member Functions inherited from Private
 Private (KisCanvas2 *c)
 

Private Attributes

Private *const d
 
- Private Attributes inherited from Private
KisCanvas2canvas
 
int displayedFrame
 
int intendedFrame
 

Detailed Description

The base class for import and export filters.

Derive your filter class from this base class and implement the convert() method. Don't forget to specify the Q_OBJECT macro in your class even if you don't use signals or slots. This is needed as filters are created on the fly.

Note
Take care: The m_chain pointer is invalid while the constructor runs due to the implementation – don't use it in the constructor. After the constructor, when running the convert() method it's guaranteed to be valid, so no need to check against 0.
If the code is compiled in debug mode, setting CALLIGRA_DEBUG_FILTERS environment variable to any value disables deletion of temporary files while importing/exporting. This is useful for testing purposes.
Author
Werner Trobin trobi.nosp@m.n@kd.nosp@m.e.org
Todo
the class has no constructor and therefore cannot initialize its private class

Definition at line 35 of file KisImportExportFilter.cpp.

Constructor & Destructor Documentation

◆ ~Private()

KisImportExportFilter::~Private ( )
inline

Definition at line 52 of file KisImportExportFilter.cpp.

53 {
54 qDeleteAll(capabilities);
55 }
QMap< QString, KisExportCheckBase * > capabilities

◆ ~KisImportExportFilter()

KisImportExportFilter::~KisImportExportFilter ( )
override

Definition at line 66 of file KisImportExportFilter.cpp.

67{
68 if (d->updater) {
69 d->updater->setProgress(100);
70 }
71 delete d;
72}

References d.

◆ KisImportExportFilter() [1/2]

KisImportExportFilter::KisImportExportFilter ( QObject * parent = 0)
protected

This is the constructor your filter has to call, obviously.

Definition at line 60 of file KisImportExportFilter.cpp.

61 : QObject(parent)
62 , d(new Private)
63{
64}

◆ KisImportExportFilter() [2/2]

KisImportExportFilter::KisImportExportFilter ( const KisImportExportFilter & rhs)
private

Member Function Documentation

◆ addCapability()

void KisImportExportFilter::addCapability ( KisExportCheckBase * capability)
protected

Definition at line 217 of file KisImportExportFilter.cpp.

218{
219 d->capabilities[capability->id()] = capability;
220}
virtual QString id() const

References d, and KisExportCheckBase::id().

◆ addSupportedColorModels()

void KisImportExportFilter::addSupportedColorModels ( QList< QPair< KoID, KoID > > supportedColorModels,
const QString & name,
KisExportCheckBase::Level level = KisExportCheckBase::PARTIALLY )
protected

Definition at line 224 of file KisImportExportFilter.cpp.

225{
226 Q_ASSERT(level != KisExportCheckBase::SUPPORTED);
227 QString layerMessage;
228 QString imageMessage;
230 Q_FOREACH(const KoID &colorModelID, allColorModels) {
232 Q_FOREACH(const KoID &colorDepthID, allColorDepths) {
233
234 KisExportCheckFactory *colorModelCheckFactory =
235 KisExportCheckRegistry::instance()->get("ColorModelCheck/" + colorModelID.id() + "/" + colorDepthID.id());
236 KisExportCheckFactory *colorModelPerLayerCheckFactory =
237 KisExportCheckRegistry::instance()->get("ColorModelPerLayerCheck/" + colorModelID.id() + "/" + colorDepthID.id());
238
239 if(!colorModelCheckFactory || !colorModelPerLayerCheckFactory) {
240 qWarning() << "No factory for" << colorModelID << colorDepthID;
241 continue;
242 }
243
244 if (supportedColorModels.contains(QPair<KoID, KoID>(colorModelID, colorDepthID))) {
245 addCapability(colorModelCheckFactory->create(KisExportCheckBase::SUPPORTED));
246 addCapability(colorModelPerLayerCheckFactory->create(KisExportCheckBase::SUPPORTED));
247 }
248 else {
249
250
251 if (level == KisExportCheckBase::PARTIALLY) {
252 imageMessage = i18nc("image conversion warning",
253 "%1 cannot save images with color model <b>%2</b> and depth <b>%3</b>. The image will be converted."
254 ,name, colorModelID.name(), colorDepthID.name());
255
256 layerMessage =
257 i18nc("image conversion warning",
258 "%1 cannot save layers with color model <b>%2</b> and depth <b>%3</b>. The layers will be converted or skipped."
259 ,name, colorModelID.name(), colorDepthID.name());
260 }
261 else {
262 imageMessage = i18nc("image conversion warning",
263 "%1 cannot save images with color model <b>%2</b> and depth <b>%3</b>. The image will not be saved."
264 ,name, colorModelID.name(), colorDepthID.name());
265
266 layerMessage =
267 i18nc("image conversion warning",
268 "%1 cannot save layers with color model <b>%2</b> and depth <b>%3</b>. The layers will be skipped."
269 , name, colorModelID.name(), colorDepthID.name());
270 }
271
272
273
274 addCapability(colorModelCheckFactory->create(level, imageMessage));
275 addCapability(colorModelPerLayerCheckFactory->create(level, layerMessage));
276 }
277 }
278 }
279}
virtual KisExportCheckBase * create(KisExportCheckBase::Level level, const QString &customWarning=QString())=0
static KisExportCheckRegistry * instance()
void addCapability(KisExportCheckBase *capability)
T get(const QString &id) const
Definition KoID.h:30
QString name() const
Definition KoID.cpp:68
QString id() const
Definition KoID.cpp:63
QList< KoID > colorDepthList(const KoID &colorModelId, ColorSpaceListVisibility option) const
static KoColorSpaceRegistry * instance()
QList< KoID > colorModelsList(ColorSpaceListVisibility option) const
@ AllColorSpaces
All color space even those not visible to the user.

References addCapability(), KoColorSpaceRegistry::AllColorSpaces, KoColorSpaceRegistry::colorDepthList(), KoColorSpaceRegistry::colorModelsList(), KisExportCheckFactory::create(), KoGenericRegistry< T >::get(), KoID::id(), KisExportCheckRegistry::instance(), KoColorSpaceRegistry::instance(), KoID::name(), KisExportCheckBase::PARTIALLY, and KisExportCheckBase::SUPPORTED.

◆ batchMode()

bool KisImportExportFilter::batchMode ( ) const
protected

Definition at line 84 of file KisImportExportFilter.cpp.

85{
86 return d->batchmode;
87}

References d.

◆ convert()

virtual KisImportExportErrorCode KisImportExportFilter::convert ( KisDocument * document,
QIODevice * io,
KisPropertiesConfigurationSP configuration = 0 )
pure virtual

The filter chain calls this method to perform the actual conversion. The passed mimetypes should be a pair of those you specified in your .desktop file. You have to implement this method to make the filter work.

Returns
The error status, see the #ConversionStatus enum. KisImportExportFilter::OK means that everything is alright.

Implemented in JPEGXLExport, RGBEExport, KisSVGImport, KisBrushExport, KisBrushImport, KisCSVExport, KisCSVImport, EXRExport, exrImport, KisGIFExport, KisGIFImport, HeifExport, HeifImport, KisHeightMapExport, KisHeightMapImport, jp2Import, KisJPEGExport, KisJPEGImport, KraExport, KraImport, KrzExport, OraExport, OraImport, KisPNGExport, KisPNGImport, psdExport, psdImport, KisQImageIOExport, KisQImageIOImport, QMLExport, KisRawImport, KisSpriterExport, KisTGAExport, KisTGAImport, KisTIFFExport, KisWebPExport, KisWebPImport, KisXCFImport, JPEGXLImport, KisPDFImport, RGBEImport, and KisTIFFImport.

◆ createConfigurationWidget()

KisConfigWidget * KisImportExportFilter::createConfigurationWidget ( QWidget * parent,
const QByteArray & from = "",
const QByteArray & to = "" ) const
virtual

createConfigurationWidget creates a widget that can be used to define the settings for a given import/export filter

Parameters
parentthe owner of the widget; the caller is responsible for deleting
fromThe mimetype of the source file/document
toThe mimetype of the destination file/document
Returns
the widget

Reimplemented in KisQImageIOExport, KisBrushExport, EXRExport, HeifExport, KisHeightMapExport, KisJPEGExport, JPEGXLExport, KisPNGExport, RGBEExport, KisTIFFExport, and KisWebPExport.

Definition at line 142 of file KisImportExportFilter.cpp.

143{
144 Q_UNUSED(from);
145 Q_UNUSED(to);
146 return 0;
147}

◆ defaultConfiguration()

KisPropertiesConfigurationSP KisImportExportFilter::defaultConfiguration ( const QByteArray & from = "",
const QByteArray & to = "" ) const
virtual

defaultConfiguration defines the default settings for the given import export filter

Parameters
fromThe mimetype of the source file/document
toThe mimetype of the destination file/document
Returns
a serializable KisPropertiesConfiguration object

Reimplemented in KisQImageIOExport, KisWebPExport, KisBrushExport, EXRExport, HeifExport, KisHeightMapExport, KisJPEGExport, JPEGXLExport, KisPNGExport, RGBEExport, and KisTIFFExport.

Definition at line 125 of file KisImportExportFilter.cpp.

126{
127 Q_UNUSED(from);
128 Q_UNUSED(to);
129 return 0;
130}

◆ exportChecks()

QMap< QString, KisExportCheckBase * > KisImportExportFilter::exportChecks ( )
virtual

generate and return the list of capabilities of this export filter. The list

Returns
returns the list of capabilities of this export filter

Definition at line 149 of file KisImportExportFilter.cpp.

150{
151 qDeleteAll(d->capabilities);
153 return d->capabilities;
154}

References d, and initializeCapabilities().

◆ exportSupportsGuides()

bool KisImportExportFilter::exportSupportsGuides ( ) const
virtual

exportSupportsGuides Because guides are in the document and not the image, checking for guides cannot be made an exportCheck.

Returns
whether this filter supports exporting guides

Reimplemented in KraExport, and psdExport.

Definition at line 156 of file KisImportExportFilter.cpp.

157{
158 return false;
159}

◆ filename()

QString KisImportExportFilter::filename ( ) const
protected

◆ importUserFeedBackInterface()

KisImportUserFeedbackInterface * KisImportExportFilter::importUserFeedBackInterface ( ) const
protected

◆ initializeCapabilities()

void KisImportExportFilter::initializeCapabilities ( )
protectedvirtual

◆ lastSavedConfiguration()

KisPropertiesConfigurationSP KisImportExportFilter::lastSavedConfiguration ( const QByteArray & from = "",
const QByteArray & to = "" ) const

lastSavedConfiguration return the last saved configuration for this filter

Parameters
fromThe mimetype of the source file/document
toThe mimetype of the destination file/document
Returns
a serializable KisPropertiesConfiguration object

Definition at line 132 of file KisImportExportFilter.cpp.

133{
135 const QString filterConfig = KisConfig(true).exportConfigurationXML(to);
136 if (cfg && !filterConfig.isEmpty()) {
137 cfg->fromXML(filterConfig, false);
138 }
139 return cfg;
140}
QString exportConfigurationXML(const QString &filterId, bool defaultValue=false) const
virtual KisPropertiesConfigurationSP defaultConfiguration(const QByteArray &from="", const QByteArray &to="") const
defaultConfiguration defines the default settings for the given import export filter

References defaultConfiguration(), and KisConfig::exportConfigurationXML().

◆ mimeType()

QByteArray KisImportExportFilter::mimeType ( ) const
protected

Definition at line 120 of file KisImportExportFilter.cpp.

121{
122 return d->mime;
123}

References d.

◆ operator=()

KisImportExportFilter & KisImportExportFilter::operator= ( const KisImportExportFilter & rhs)
private

◆ Private()

KisImportExportFilter::Private ( )
inline

Definition at line 47 of file KisImportExportFilter.cpp.

48 : updater(0), mime("")
49 , batchmode(false)
50 {}
QPointer< KoUpdater > updater

◆ realFilename()

QString KisImportExportFilter::realFilename ( ) const
protected

◆ setBatchMode()

void KisImportExportFilter::setBatchMode ( bool batchmode)

Definition at line 94 of file KisImportExportFilter.cpp.

95{
96 d->batchmode = batchmode;
97}

References batchmode, and d.

◆ setFilename()

void KisImportExportFilter::setFilename ( const QString & filename)

Definition at line 104 of file KisImportExportFilter.cpp.

105{
106 d->filename = filename;
107}

References d, and filename.

◆ setImportUserFeedBackInterface()

void KisImportExportFilter::setImportUserFeedBackInterface ( KisImportUserFeedbackInterface * interface)

Definition at line 99 of file KisImportExportFilter.cpp.

100{
101 d->importUserFeedBackInterface = interface;
102}

References d.

◆ setMimeType()

void KisImportExportFilter::setMimeType ( const QString & mime)

Definition at line 115 of file KisImportExportFilter.cpp.

116{
117 d->mime = mime.toLatin1();
118}

References d, and mime.

◆ setProgress()

void KisImportExportFilter::setProgress ( int value)
protected

Definition at line 205 of file KisImportExportFilter.cpp.

206{
207 if (d->updater) {
208 d->updater->setValue(value);
209 }
210}
float value(const T *src, size_t ch)

References d, and value().

◆ setRealFilename()

void KisImportExportFilter::setRealFilename ( const QString & filename)

Definition at line 109 of file KisImportExportFilter.cpp.

110{
111 d->realFilename = filename;
112}

References d, and filename.

◆ setUpdater()

void KisImportExportFilter::setUpdater ( QPointer< KoUpdater > updater)

Definition at line 195 of file KisImportExportFilter.cpp.

196{
197 d->updater = updater;
198}

References d, and updater.

◆ supportsIO()

virtual bool KisImportExportFilter::supportsIO ( ) const
inlinevirtual

Override and return false for the filters that use a library that cannot handle file handles, only file names.

Reimplemented in EXRExport, exrImport, HeifExport, HeifImport, JPEGXLImport, RGBEImport, KisSpriterExport, KisTIFFExport, and KisTIFFImport.

Definition at line 128 of file KisImportExportFilter.h.

128{ return true; }

◆ updater()

QPointer< KoUpdater > KisImportExportFilter::updater ( )

◆ verify()

QString KisImportExportFilter::verify ( const QString & fileName) const
virtual

Verify whether the given file is correct and readable.

Reimplemented in KraExport, KrzExport, and OraExport.

Definition at line 161 of file KisImportExportFilter.cpp.

162{
163 QFileInfo fi(fileName);
164
165 if (!fi.exists()) {
166 return i18n("%1 does not exist after writing. Try saving again under a different name, in another location.", fileName);
167 }
168
169 if (!fi.isReadable()) {
170 return i18n("%1 is not readable", fileName);
171 }
172
173 if (fi.size() < 10) {
174 return i18n("%1 is smaller than 10 bytes, it must be corrupt. Try saving again under a different name, in another location.", fileName);
175 }
176
177 QFile f(fileName);
178 f.open(QFile::ReadOnly);
179 QByteArray ba = f.read(std::min(f.size(), (qint64)1000));
180 bool found = false;
181 for(int i = 0; i < ba.size(); ++i) {
182 if (ba.at(i) > 0) {
183 found = true;
184 break;
185 }
186 }
187
188 if (!found) {
189 return i18n("%1 has only zero bytes in the first 1000 bytes, it's probably corrupt. Try saving again under a different name, in another location.", fileName);
190 }
191
192 return QString();
193}

◆ verifyZiPBasedFiles()

QString KisImportExportFilter::verifyZiPBasedFiles ( const QString & fileName,
const QStringList & filesToCheck ) const
protected

Definition at line 281 of file KisImportExportFilter.cpp.

282{
283 QScopedPointer<KoStore> store(KoStore::createStore(fileName, KoStore::Read, KIS_MIME_TYPE, KoStore::Zip));
284
285 if (!store || store->bad()) {
286 return i18n("Could not open the saved file %1. Please try to save again in a different location.", fileName);
287 }
288
289 Q_FOREACH(const QString &file, filesToCheck) {
290 if (!store->hasFile(file)) {
291 return i18n("Component %1 is missing in %2. Please try to save again in a different location.", file, fileName);
292 }
293 }
294
295 return QString();
296
297}
#define KIS_MIME_TYPE
Definition KisDocument.h:56
@ Read
Definition KoStore.h:29
@ Zip
Definition KoStore.h:30
static KoStore * createStore(const QString &fileName, Mode mode, const QByteArray &appIdentification=QByteArray(), Backend backend=Auto, bool writeMimetype=true)
Definition KoStore.cpp:39

References KoStore::createStore(), KIS_MIME_TYPE, KoStore::Read, and KoStore::Zip.

Member Data Documentation

◆ batchmode

bool KisImportExportFilter::batchmode

Definition at line 42 of file KisImportExportFilter.cpp.

◆ capabilities

QMap<QString, KisExportCheckBase*> KisImportExportFilter::capabilities

Definition at line 45 of file KisImportExportFilter.cpp.

◆ CICPPrimariesTag

const QString KisImportExportFilter::CICPPrimariesTag = "CICPCompatiblePrimaries"
static

Definition at line 62 of file KisImportExportFilter.h.

◆ CICPTransferCharacteristicsTag

const QString KisImportExportFilter::CICPTransferCharacteristicsTag = "CICPCompatibleTransferFunction"
static

Definition at line 63 of file KisImportExportFilter.h.

◆ ColorDepthIDTag

const QString KisImportExportFilter::ColorDepthIDTag = "ColorDepthID"
static

Definition at line 59 of file KisImportExportFilter.h.

◆ ColorModelIDTag

const QString KisImportExportFilter::ColorModelIDTag = "ColorModelID"
static

Definition at line 58 of file KisImportExportFilter.h.

◆ d

Private* const KisImportExportFilter::d
private

Definition at line 158 of file KisImportExportFilter.h.

◆ filename

QString KisImportExportFilter::filename

Definition at line 40 of file KisImportExportFilter.cpp.

◆ HDRTag

const QString KisImportExportFilter::HDRTag = "HDRSupported"
static

Definition at line 61 of file KisImportExportFilter.h.

◆ ImageContainsTransparencyTag

const QString KisImportExportFilter::ImageContainsTransparencyTag = "ImageContainsTransparency"
static

Definition at line 57 of file KisImportExportFilter.h.

◆ importUserFeedBackInterface

KisImportUserFeedbackInterface * KisImportExportFilter::importUserFeedBackInterface {nullptr}

Definition at line 43 of file KisImportExportFilter.cpp.

43{nullptr};

◆ mime

QByteArray KisImportExportFilter::mime

Definition at line 39 of file KisImportExportFilter.cpp.

◆ realFilename

QString KisImportExportFilter::realFilename

Definition at line 41 of file KisImportExportFilter.cpp.

◆ sRGBTag

const QString KisImportExportFilter::sRGBTag = "sRGB"
static

Definition at line 60 of file KisImportExportFilter.h.

◆ updater

QPointer< KoUpdater > KisImportExportFilter::updater

Definition at line 38 of file KisImportExportFilter.cpp.


The documentation for this class was generated from the following files: