1 /*
2    Copyright (c) 2006 Boudewijn Rempt (boud@valdyas.org)
3    Copyright (C) 2007, 2010 Thomas Zander <zander@kde.org>
4    Copyright (c) 2008 Carlos Licea <carlos.licea@kdemail.net>
5    Copyright (c) 2011 Jan Hambrecht <jaham@gmx.net>
6 
7    This library is free software; you can redistribute it and/or
8    modify it under the terms of the GNU Library General Public
9    License as published by the Free Software Foundation; either
10    version 2 of the License, or (at your option) any later version.
11 
12    This library is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15    Library General Public License for more details.
16 
17    You should have received a copy of the GNU Library General Public License
18    along with this library; see the file COPYING.LIB.  If not, write to
19    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
20    Boston, MA 02110-1301, USA.
21  */
22 #include "KoDocumentResourceManager.h"
23 
24 #include <QVariant>
25 #include <kundo2stack.h>
26 #include <FlakeDebug.h>
27 
28 #include "KoShape.h"
29 #include "KoShapeController.h"
30 #include "KoResourceManager_p.h"
31 
32 class Q_DECL_HIDDEN KoDocumentResourceManager::Private
33 {
34 public:
35     KoResourceManager manager;
36 };
37 
KoDocumentResourceManager(QObject * parent)38 KoDocumentResourceManager::KoDocumentResourceManager(QObject *parent)
39         : QObject(parent),
40         d(new Private())
41 {
42     connect(&d->manager, &KoResourceManager::resourceChanged,
43             this, &KoDocumentResourceManager::resourceChanged);
44 }
45 
~KoDocumentResourceManager()46 KoDocumentResourceManager::~KoDocumentResourceManager()
47 {
48     delete d;
49 }
50 
setResource(int key,const QVariant & value)51 void KoDocumentResourceManager::setResource(int key, const QVariant &value)
52 {
53     d->manager.setResource(key, value);
54 }
55 
resource(int key) const56 QVariant KoDocumentResourceManager::resource(int key) const
57 {
58     return d->manager.resource(key);
59 }
60 
setResource(int key,const KoColor & color)61 void KoDocumentResourceManager::setResource(int key, const KoColor &color)
62 {
63     QVariant v;
64     v.setValue(color);
65     setResource(key, v);
66 }
67 
setResource(int key,KoShape * shape)68 void KoDocumentResourceManager::setResource(int key, KoShape *shape)
69 {
70     QVariant v;
71     v.setValue(shape);
72     setResource(key, v);
73 }
74 
setResource(int key,const KoUnit & unit)75 void KoDocumentResourceManager::setResource(int key, const KoUnit &unit)
76 {
77     QVariant v;
78     v.setValue(unit);
79     setResource(key, v);
80 }
81 
koColorResource(int key) const82 KoColor KoDocumentResourceManager::koColorResource(int key) const
83 {
84     return d->manager.koColorResource(key);
85 }
86 
87 
boolResource(int key) const88 bool KoDocumentResourceManager::boolResource(int key) const
89 {
90     return d->manager.boolResource(key);
91 }
92 
intResource(int key) const93 int KoDocumentResourceManager::intResource(int key) const
94 {
95     return d->manager.intResource(key);
96 }
97 
stringResource(int key) const98 QString KoDocumentResourceManager::stringResource(int key) const
99 {
100     return d->manager.stringResource(key);
101 }
102 
sizeResource(int key) const103 QSizeF KoDocumentResourceManager::sizeResource(int key) const
104 {
105     return d->manager.sizeResource(key);
106 }
107 
hasResource(int key) const108 bool KoDocumentResourceManager::hasResource(int key) const
109 {
110     return d->manager.hasResource(key);
111 }
112 
clearResource(int key)113 void KoDocumentResourceManager::clearResource(int key)
114 {
115     d->manager.clearResource(key);
116 }
117 
undoStack() const118 KUndo2Stack *KoDocumentResourceManager::undoStack() const
119 {
120     if (!hasResource(UndoStack))
121         return 0;
122     return static_cast<KUndo2Stack*>(resource(UndoStack).value<void*>());
123 }
124 
setHandleRadius(int handleRadius)125 void KoDocumentResourceManager::setHandleRadius(int handleRadius)
126 {
127     // do not allow arbitrary small handles
128     if (handleRadius < 5)
129         handleRadius = 5;
130     setResource(HandleRadius, QVariant(handleRadius));
131 }
132 
handleRadius() const133 int KoDocumentResourceManager::handleRadius() const
134 {
135     if (hasResource(HandleRadius))
136         return intResource(HandleRadius);
137     return 5; // default value (and is used just about everywhere)
138 }
setGrabSensitivity(int grabSensitivity)139 void KoDocumentResourceManager::setGrabSensitivity(int grabSensitivity)
140 {
141     // do not allow arbitrary small grab sensitivity
142     if (grabSensitivity < 5)
143         grabSensitivity = 5;
144     setResource(GrabSensitivity, QVariant(grabSensitivity));
145 }
146 
grabSensitivity() const147 int KoDocumentResourceManager::grabSensitivity() const
148 {
149     if (hasResource(GrabSensitivity))
150         return intResource(GrabSensitivity);
151     return 5; // default value (and is used just about everywhere)
152 }
153 
setUndoStack(KUndo2Stack * undoStack)154 void KoDocumentResourceManager::setUndoStack(KUndo2Stack *undoStack)
155 {
156     QVariant variant;
157     variant.setValue<void*>(undoStack);
158     setResource(UndoStack, variant);
159 }
160 
imageCollection() const161 KoImageCollection *KoDocumentResourceManager::imageCollection() const
162 {
163     if (!hasResource(ImageCollection))
164         return 0;
165     return static_cast<KoImageCollection*>(resource(ImageCollection).value<void*>());
166 }
167 
setImageCollection(KoImageCollection * ic)168 void KoDocumentResourceManager::setImageCollection(KoImageCollection *ic)
169 {
170     QVariant variant;
171     variant.setValue<void*>(ic);
172     setResource(ImageCollection, variant);
173 }
174 
odfDocument() const175 KoDocumentBase *KoDocumentResourceManager::odfDocument() const
176 {
177     if (!hasResource(OdfDocument))
178         return 0;
179     return static_cast<KoDocumentBase*>(resource(OdfDocument).value<void*>());
180 }
181 
setOdfDocument(KoDocumentBase * currentDocument)182 void KoDocumentResourceManager::setOdfDocument(KoDocumentBase *currentDocument)
183 {
184     QVariant variant;
185     variant.setValue<void*>(currentDocument);
186     setResource(OdfDocument, variant);
187 }
188 
documentResolution() const189 qreal KoDocumentResourceManager::documentResolution() const
190 {
191     KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE(hasResource(DocumentResolution), 72.0);
192     return resource(DocumentResolution).toReal();
193 }
194 
documentRectInPixels() const195 QRectF KoDocumentResourceManager::documentRectInPixels() const
196 {
197     KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE(hasResource(DocumentRectInPixels), QRectF(0,0, 777, 666));
198     return resource(DocumentRectInPixels).toRectF();
199 }
200 
globalShapeController() const201 KoShapeController *KoDocumentResourceManager::globalShapeController() const
202 {
203     if (!hasResource(GlobalShapeController))
204         return 0;
205 
206     return resource(GlobalShapeController).value<KoShapeController *>();
207 }
208 
setGlobalShapeController(KoShapeController * shapeController)209 void KoDocumentResourceManager::setGlobalShapeController(KoShapeController *shapeController)
210 {
211     QVariant variant;
212     variant.setValue<KoShapeController *>(shapeController);
213     setResource(GlobalShapeController, variant);
214 }
215