Krita Source Code Documentation
Loading...
Searching...
No Matches
KisSeExprScript Class Reference

#include <KisSeExprScript.h>

+ Inheritance diagram for KisSeExprScript:

Classes

struct  Private
 

Public Member Functions

KoResourceSP clone () const override
 
QString defaultFileExtension () const override
 
 KisSeExprScript (const KisSeExprScript &rhs)
 
 KisSeExprScript (const QImage &image, const QString &script, const QString &name, const QString &folderName)
 
 KisSeExprScript (const QString &filename)
 
 KisSeExprScript (KisSeExprScript *rhs)
 
bool loadFromDevice (QIODevice *dev, KisResourcesInterfaceSP resourcesInterface) override
 
QString name () const override
 
QPair< QString, QString > resourceType () const override
 
bool saveToDevice (QIODevice *dev) const override
 
QString script () const
 script the actual script
 
void setScript (const QString &script)
 set SeExpr expression script
 
 ~KisSeExprScript ()
 
- Public Member Functions inherited from KoResource
bool active () const
 
void addMetaData (QString key, QVariant value)
 store the given key, value pair in the resource
 
virtual void clearSideLoadedResources ()
 
virtual QList< KoResourceLoadResultembeddedResources (KisResourcesInterfaceSP globalResourcesInterface) const
 
QString filename () const
 
QImage image () const
 
bool isDirty () const
 
virtual bool isEphemeral () const
 
virtual bool isSerializable () const
 
 KoResource ()
 
 KoResource (const KoResource &rhs)
 
 KoResource (const QString &filename)
 
virtual QList< KoResourceLoadResultlinkedResources (KisResourcesInterfaceSP globalResourcesInterface) const
 
bool load (KisResourcesInterfaceSP resourcesInterface)
 
QString md5Sum (bool generateIfEmpty=true) const
 
QMap< QString, QVariant > metadata () const
 get a map with all the metadata
 
KoResourceoperator= (const KoResource &rhs)=delete
 
bool permanent () const
 
virtual QList< int > requiredCanvasResources () const
 
QList< KoResourceLoadResultrequiredResources (KisResourcesInterfaceSP globalResourcesInterface) const
 
int resourceId () const
 
bool save ()
 
void setActive (bool active)
 
void setDirty (bool value)
 Mark the preset as modified but not saved.
 
void setFilename (const QString &filename)
 
void setImage (const QImage &image)
 
void setMD5Sum (const QString &md5sum)
 Set the md5sum of this resource. It must be in hex-encoded string format.
 
void setName (const QString &name)
 
void setPermanent (bool permanent)
 
void setResourceId (int id)
 
void setStorageLocation (const QString &location)
 
void setValid (bool valid)
 
void setVersion (int version)
 
virtual QList< KoResourceLoadResultsideLoadedResources (KisResourcesInterfaceSP globalResourcesInterface) const
 
KoResourceSignature signature () const
 
QString storageLocation () const
 
QList< KoResourceLoadResulttakeSideLoadedResources (KisResourcesInterfaceSP globalResourcesInterface)
 
virtual QImage thumbnail () const
 thumbnail the thumbnail image to use in resource selectors
 
virtual QString thumbnailPath () const
 thumbnailPath returns the path to a separate thumbnail image, outside the actual resource file itself. If the path is relative, it is supposed start in the same location as the resource itself. If it's absolute, that is, it starts with "/", it is from the root of the storage.
 
virtual void updateThumbnail ()
 updateThumbnail updates the thumbnail for this resource. Reimplement if your thumbnail is something else than the image set with setImage.
 
bool valid () const
 
int version () const
 Get the version of the resource.
 
virtual ~KoResource ()
 
- Public Member Functions inherited from Private
 Private (KisCanvas2 *c)
 

Private Attributes

Private *const d
 

Additional Inherited Members

- Public Attributes inherited from KoResource
bool active {true}
 
QString filename
 
QImage image
 
QString md5sum
 
QMap< QString, QVariant > metadata
 
bool modified {false}
 
QString name
 
bool permanent {false}
 
int resourceId {-1}
 
QString storageLocation
 
bool valid {false}
 
int version {-1}
 
- Public Attributes inherited from Private
KisCanvas2canvas
 
int displayedFrame
 
int intendedFrame
 

Detailed Description

KoResource container for SeExpr scripts.

Definition at line 22 of file KisSeExprScript.h.

Constructor & Destructor Documentation

◆ KisSeExprScript() [1/4]

KisSeExprScript::KisSeExprScript ( const QString & filename)

Creates a new KisSeExprScript object using filename. No file is opened in the constructor, you have to call load.

Parameters
filenamethe file name to save and load from.

Definition at line 25 of file KisSeExprScript.cpp.

27 , d(new Private)
28{
29 setName(name().replace("_", " "));
30 if (name().endsWith(defaultFileExtension())) {
31 const QFileInfo f(name());
32 setName(f.completeBaseName());
33 }
34}
QString name() const override
QString defaultFileExtension() const override
Private *const d
QAction * replace(const QObject *recvr, const char *slot, QObject *parent)
void setName(const QString &name)
QString filename

References defaultFileExtension(), name(), and KoResource::setName().

◆ KisSeExprScript() [2/4]

KisSeExprScript::KisSeExprScript ( const QImage & image,
const QString & script,
const QString & name,
const QString & folderName )

Creates a new SeExpr script resource with the given image thumbnail, script, name, and folder name.

Parameters
imagethe thumbnail of the texture this script will render
scriptthe actual script's contents
namethe name of the script
folderNamethe folder name

Definition at line 36 of file KisSeExprScript.cpp.

37 : KoResource(QString())
38 , d(new Private)
39{
43
44 QFileInfo fileInfo(folderName + QDir::separator() + name + defaultFileExtension());
45
46 int i = 1;
47 while (fileInfo.exists()) {
48 fileInfo.setFile(folderName + QDir::separator() + name + QString::number(i) + defaultFileExtension());
49 i++;
50 }
51
52 setFilename(fileInfo.filePath());
53}
void setScript(const QString &script)
set SeExpr expression script
QString script() const
script the actual script
QImage image
void setFilename(const QString &filename)
void setImage(const QImage &image)

References defaultFileExtension(), KoResource::image, name(), script(), KoResource::setFilename(), KoResource::setImage(), KoResource::setName(), and setScript().

◆ KisSeExprScript() [3/4]

KisSeExprScript::KisSeExprScript ( KisSeExprScript * rhs)

Clones the given SeExpr script into a new instance.

Parameters
rhsthe original SeExpr script to be copied onto this object

Definition at line 55 of file KisSeExprScript.cpp.

56 : KisSeExprScript(*rhs)
57{
58}
KisSeExprScript(const QString &filename)

◆ KisSeExprScript() [4/4]

KisSeExprScript::KisSeExprScript ( const KisSeExprScript & rhs)

Definition at line 60 of file KisSeExprScript.cpp.

61 : KoResource(rhs)
62 , d(new Private)
63{
65 // only valid if we could clone the settings
66 setScript(rhs.script());
67 setValid(rhs.valid());
68}
#define KIS_SAFE_ASSERT_RECOVER_NOOP(cond)
Definition kis_assert.h:130
void setValid(bool valid)
bool isDirty() const

References KoResource::isDirty(), KIS_SAFE_ASSERT_RECOVER_NOOP, script(), setScript(), KoResource::setValid(), and KoResource::valid.

◆ ~KisSeExprScript()

KisSeExprScript::~KisSeExprScript ( )

Definition at line 70 of file KisSeExprScript.cpp.

71{
72 delete d;
73}

References d.

Member Function Documentation

◆ clone()

KoResourceSP KisSeExprScript::clone ( ) const
overridevirtual

Implements KoResource.

Definition at line 192 of file KisSeExprScript.cpp.

193{
194 return KoResourceSP(new KisSeExprScript(*this));
195}
QSharedPointer< KoResource > KoResourceSP

References KisSeExprScript().

◆ defaultFileExtension()

QString KisSeExprScript::defaultFileExtension ( ) const
overridevirtual
Returns
the default file extension which should be used when saving the resource

Reimplemented from KoResource.

Definition at line 177 of file KisSeExprScript.cpp.

178{
179 return QString(".kse");
180}

◆ loadFromDevice()

bool KisSeExprScript::loadFromDevice ( QIODevice * dev,
KisResourcesInterfaceSP resourcesInterface )
overridevirtual

Load this resource.

Returns
true if loading the resource succeeded.

Implements KoResource.

Definition at line 75 of file KisSeExprScript.cpp.

76{
77 Q_UNUSED(resourcesInterface);
78
79 if (!dev->isOpen())
80 dev->open(QIODevice::ReadOnly);
81
82 d->data = dev->readAll();
83
84 // TODO: test
85 KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE(d->data.size() != 0, false);
86
87 if (filename().isNull()) {
88 warnFlake << "Cannot load SeExpr script" << name() << ", there is no filename set";
89 return false;
90 }
91
92 if (d->data.isNull()) {
93 QFile file(filename());
94 if (file.size() == 0) {
95 warnFlake << "Cannot load SeExpr script" << name() << "there is no data available";
96 return false;
97 }
98
99 file.open(QIODevice::ReadOnly);
100 d->data = file.readAll();
101 file.close();
102 }
103
104 QBuffer buf(&d->data);
105 buf.open(QBuffer::ReadOnly);
106
107 QScopedPointer<KoStore> store(KoStore::createStore(&buf, KoStore::Read, "application/x-krita-seexpr-script", KoStore::Zip));
108 if (!store || store->bad())
109 return false;
110
111 bool storeOpened = store->open("script.se");
112 if (!storeOpened) {
113 return false;
114 }
115
116 d->script = QString(store->read(store->size()));
117 store->close();
118
119 if (store->open("preview.png")) {
120 KoStoreDevice previewDev(store.data());
121 previewDev.open(QIODevice::ReadOnly);
122
123 QImage preview = QImage();
124 preview.load(&previewDev, "PNG");
125 setImage(preview);
126
127 (void)store->close();
128 }
129
130 buf.close();
131
132 setValid(true);
133 setDirty(false);
134
135 return true;
136}
#define warnFlake
Definition FlakeDebug.h:16
@ 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
#define KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE(cond, val)
Definition kis_assert.h:129
typedef void(QOPENGLF_APIENTRYP PFNGLINVALIDATEBUFFERDATAPROC)(GLuint buffer)
void setDirty(bool value)
Mark the preset as modified but not saved.

References KoStore::createStore(), d, KisSeExprScript::Private::data, KoResource::filename, KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE, name(), KoStoreDevice::open(), KoStore::Read, KisSeExprScript::Private::script, KoResource::setDirty(), KoResource::setImage(), KoResource::setValid(), void(), warnFlake, and KoStore::Zip.

◆ name()

QString KisSeExprScript::name ( ) const
overridevirtual
Returns
the user-visible name of the resource

Reimplemented from KoResource.

Definition at line 197 of file KisSeExprScript.cpp.

198{
199 return KoResource::name().replace("_", " ");
200}
QString name

References KoResource::name.

◆ resourceType()

QPair< QString, QString > KisSeExprScript::resourceType ( ) const
overridevirtual
Returns
the resource type

Implements KoResource.

Definition at line 172 of file KisSeExprScript.cpp.

173{
174 return QPair<QString, QString>(ResourceType::SeExprScripts, "");
175}
const QString SeExprScripts

References ResourceType::SeExprScripts.

◆ saveToDevice()

bool KisSeExprScript::saveToDevice ( QIODevice * dev) const
overridevirtual

Save this resource.

Returns
true if saving the resource succeeded.

Reimplemented from KoResource.

Definition at line 138 of file KisSeExprScript.cpp.

139{
140 KoStore *store(KoStore::createStore(dev, KoStore::Write, "application/x-krita-seexpr-script", KoStore::Zip));
141 if (!store || store->bad())
142 return false;
143
144 if (!store->open("script.se")) {
145 return false;
146 }
147
148 KoStoreDevice storeDev(store);
149 storeDev.open(QIODevice::WriteOnly);
150
151 storeDev.write(d->script.toUtf8());
152
153 if (!store->close()) {
154 return false;
155 }
156
157 if (!store->open("preview.png")) {
158 return false;
159 }
160
161 KoStoreDevice previewDev(store);
162 previewDev.open(QIODevice::WriteOnly);
163
164 image().save(&previewDev, "PNG");
165 if (!store->close()) {
166 return false;
167 }
168
169 return store->finalize();
170}
@ Write
Definition KoStore.h:29

References KoStore::bad(), KoStore::close(), KoStore::createStore(), d, KoStore::finalize(), KoResource::image, KoStore::open(), KoStoreDevice::open(), KisSeExprScript::Private::script, KoStore::Write, and KoStore::Zip.

◆ script()

QString KisSeExprScript::script ( ) const

script the actual script

Returns
a valid SeExpr script. It is guaranteed to be in UTF-8.

Definition at line 182 of file KisSeExprScript.cpp.

183{
184 return d->script;
185}

References d, and KisSeExprScript::Private::script.

◆ setScript()

void KisSeExprScript::setScript ( const QString & script)

set SeExpr expression script

Definition at line 187 of file KisSeExprScript.cpp.

188{
189 d->script = script;
190}

References d, KisSeExprScript::Private::script, and script().

Member Data Documentation

◆ d

Private* const KisSeExprScript::d
private

Definition at line 88 of file KisSeExprScript.h.


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