Krita Source Code Documentation
Loading...
Searching...
No Matches
KoShapeFactoryBase.cpp
Go to the documentation of this file.
1/* This file is part of the KDE project
2 * SPDX-FileCopyrightText: 2006 Boudewijn Rempt (boud@valdyas.org)
3 * SPDX-FileCopyrightText: 2006-2007 Thomas Zander <zander@kde.org>
4 * SPDX-FileCopyrightText: 2008 C. Boemann <cbo@boemann.dk>
5 * SPDX-FileCopyrightText: 2008 Thorsten Zachmann <zachmann@kde.org>
6 *
7 * SPDX-License-Identifier: LGPL-2.0-or-later
8 */
9
10#include "KoShapeFactoryBase.h"
11
12#include <QDebug>
13
16#include "KoShape.h"
18
19#include <KoProperties.h>
20#include <KoJsonTrader.h>
21
22#include <KPluginFactory>
23#include <QPluginLoader>
24#include <QMutexLocker>
25#include <QMutex>
26#include <QPointer>
27
28
29#include <FlakeDebug.h>
30
31class Q_DECL_HIDDEN KoShapeFactoryBase::Private
32{
33public:
34 Private(const QString &_id, const QString &_name, const QString &_deferredPluginName)
35 : deferredFactory(0),
36 deferredPluginName(_deferredPluginName),
37 id(_id),
38 name(_name),
39 loadingPriority(0),
40 hidden(false)
41 {
42 }
43
45 Q_FOREACH (const KoShapeTemplate & t, templates)
46 delete t.properties;
47 templates.clear();
48 }
49
54 const QString id;
55 const QString name;
56 QString family;
57 QString tooltip;
58 QString iconName;
60 QList<QPair<QString, QStringList> > xmlElements; // xml name space -> xml element names
61 bool hidden;
63};
64
65
66KoShapeFactoryBase::KoShapeFactoryBase(const QString &id, const QString &name, const QString &deferredPluginName)
67 : d(new Private(id, name, deferredPluginName))
68{
69}
70
75
77{
78 return d->tooltip;
79}
80
81QString KoShapeFactoryBase::iconName() const
82{
83 return d->iconName;
84}
85
86QString KoShapeFactoryBase::name() const
87{
88 return d->name;
89}
90
91QString KoShapeFactoryBase::family() const
92{
93 return d->family;
94}
95
97{
98 return d->loadingPriority;
99}
100
102{
103 return d->xmlElements;
104}
105
107{
108 KoShapeTemplate tmplate = params;
109 tmplate.id = d->id;
110 d->templates.append(tmplate);
111}
112
113void KoShapeFactoryBase::setToolTip(const QString & tooltip)
114{
115 d->tooltip = tooltip;
116}
117
118void KoShapeFactoryBase::setIconName(const char *iconName)
119{
120 d->iconName = QLatin1String(iconName);
121}
122
123void KoShapeFactoryBase::setFamily(const QString & family)
124{
125 d->family = family;
126}
127
128QString KoShapeFactoryBase::id() const
129{
130 return d->id;
131}
132
134{
135 return d->templates;
136}
137
139{
140 d->loadingPriority = priority;
141}
142
143void KoShapeFactoryBase::setXmlElementNames(const QString & nameSpace, const QStringList & names)
144{
145 d->xmlElements.clear();
146 d->xmlElements.append(QPair<QString, QStringList>(nameSpace, names));
147}
148
149void KoShapeFactoryBase::setXmlElements(const QList<QPair<QString, QStringList> > &elementNamesList)
150{
151 d->xmlElements = elementNamesList;
152}
153
155{
156 return d->hidden;
157}
158
160{
161 d->hidden = hidden;
162}
163
165{
166 d->resourceManagers.append(manager);
167 connect(manager, SIGNAL(destroyed(QObject*)), this, SLOT(pruneDocumentResourceManager(QObject*)));
168}
169
171{
172 if (!d->deferredPluginName.isEmpty()) {
173 const_cast<KoShapeFactoryBase*>(this)->getDeferredPlugin();
174 Q_ASSERT(d->deferredFactory);
175 if (d->deferredFactory) {
176 return d->deferredFactory->createDefaultShape(documentResources);
177 }
178 }
179 return 0;
180}
181
183 KoDocumentResourceManager *documentResources) const
184{
185 if (!d->deferredPluginName.isEmpty()) {
186 const_cast<KoShapeFactoryBase*>(this)->getDeferredPlugin();
187 Q_ASSERT(d->deferredFactory);
188 if (d->deferredFactory) {
189 return d->deferredFactory->createShape(properties, documentResources);
190 }
191 }
192 return createDefaultShape(documentResources);
193}
194
196{
197 QMutexLocker(&d->pluginLoadingMutex);
198 if (d->deferredFactory) return;
199
200 const QList<KoJsonTrader::Plugin> offers =
201 KoJsonTrader::instance()->query("Krita/Deferred", QString());
202 Q_ASSERT(offers.size() > 0);
203
204 Q_FOREACH (const KoJsonTrader::Plugin &pluginLoader, offers) {
205 KPluginFactory *factory = qobject_cast<KPluginFactory *>(pluginLoader.instance());
206 KoDeferredShapeFactoryBase *plugin = factory->create<KoDeferredShapeFactoryBase>(this, QVariantList());
207
208 if (plugin && plugin->deferredPluginName() == d->deferredPluginName) {
209 d->deferredFactory = plugin;
210 }
211 }
212}
213
215{
217 Q_FOREACH(QPointer<KoDocumentResourceManager> rm, d->resourceManagers) {
218 if (rm) {
219 rms << rm;
220 }
221 }
222 d->resourceManagers = rms;
223}
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
virtual QString deferredPluginName()=0
static KoJsonTrader * instance()
QList< Plugin > query(const QString &servicetype, const QString &mimetype)
QList< QPointer< KoDocumentResourceManager > > resourceManagers
void addTemplate(const KoShapeTemplate &params)
void pruneDocumentResourceManager(QObject *)
called whenever a document KoDocumentResourceManager is deleted
void setFamily(const QString &family)
Private(const QString &_id, const QString &_name, const QString &_deferredPluginName)
void setHidden(bool hidden)
QList< QPair< QString, QStringList > > xmlElements
void setToolTip(const QString &tooltip)
QList< KoShapeTemplate > templates
virtual void newDocumentResourceManager(KoDocumentResourceManager *manager) const
virtual KoShape * createDefaultShape(KoDocumentResourceManager *documentResources=0) const
void setLoadingPriority(int priority)
void setIconName(const char *iconName)
void setXmlElements(const QList< QPair< QString, QStringList > > &elementNamesList)
void setXmlElementNames(const QString &nameSpace, const QStringList &elementNames)
QList< QPair< QString, QStringList > > odfElements() const
KoDeferredShapeFactoryBase * deferredFactory
virtual KoShape * createShape(const KoProperties *params, KoDocumentResourceManager *documentResources=0) const
KoShapeFactoryBase(const QString &id, const QString &name, const QString &deferredPluginName=QString())
QObject * instance() const
QString id
The id of the shape.
const KoProperties * properties