1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253
|
/*
Copyright (c) 2006, 2011 Boudewijn Rempt (boud@valdyas.org)
Copyright (C) 2007, 2009, 2010 Thomas Zander <zander@kde.org>
Copyright (c) 2008 Carlos Licea <carlos.licea@kdemail.net>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public License
along with this library; see the file COPYING.LIB. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#ifndef KO_CANVASRESOURCEMANAGER_H
#define KO_CANVASRESOURCEMANAGER_H
#include <QObject>
#include <QList>
#include <QVariant>
#include <QSizeF>
#include "flake_export.h"
#include <KoColor.h>
#include <KoUnit.h>
class KoShape;
class KoLineBorder;
class KUndo2Stack;
class KoImageCollection;
class KoOdfDocument;
/**
* The KoCanvasResourceManager contains a set of per-canvas
* properties, like current foreground color, current background
* color and more. All tools belonging to the current canvas are
* notified when a Resource changes (is set).
*
* The manager can contain all sorts of variable types and there are accessors
* for the most common ones. All variables are always stored inside a QVariant
* instance internally and you can always just use the resource() method to get
* that directly.
* The way to store arbitairy data objects that are stored as pointers you can use
* the following code snippets;
* @code
* QVariant variant;
* variant.setValue<void*>(textShapeData->document());
* resourceManager->setResource(KoText::CurrentTextDocument, variant);
* // and get it out again.
* QVariant var = resourceManager->resource(KoText::CurrentTextDocument);
* document = static_cast<QTextDocument*>(var.value<void*>());
* @endcode
*/
class FLAKE_EXPORT KoCanvasResourceManager : public QObject
{
Q_OBJECT
public:
/**
* This enum holds identifiers to the resources that can be stored in here.
*/
enum CanvasResource {
ForegroundColor, ///< The active forground color selected for this canvas.
BackgroundColor, ///< The active background color selected for this canvas.
ActiveBorder, ///< The active border selected for this canvas
PageSize, ///< The size of the (current) page in postscript points.
Unit, ///< The unit of this canvas
CurrentPage, ///< The current page number
ActiveStyleType, ///< the actual active style type see KoFlake::StyleType for valid values
ActiveRange, ///< The area where the rulers should show white
ShowTextShapeOutlines, ///< Paint of text shape outlines ?
ShowFormattingCharacters, ///< Paint of formatting characters ?
ShowTableBorders, ///< Paint of table borders (when not really there) ?
KarbonStart = 1000, ///< Base number for karbon specific values.
KexiStart = 2000, ///< Base number for kexi specific values.
FlowStart = 3000, ///< Base number for flow specific values.
KPlatoStart = 4000, ///< Base number for kplato specific values.
KPresenterStart = 5000, ///< Base number for kpresenter specific values.
KritaStart = 6000, ///< Base number for krita specific values.
KSpreadStart = 7000, ///< Base number for kspread specific values.
WordsStart = 8000, ///< Base number for words specific values.
KoPageAppStart = 9000 ///< Base number for KoPageApp specific values.
};
/**
* Constructor.
* @param parent the parent QObject, used for memory management.
*/
explicit KoCanvasResourceManager(QObject *parent = 0);
virtual ~KoCanvasResourceManager();
/**
* Set a resource of any type.
* @param key the integer key
* @param value the new value for the key.
* @see KoCanvasResourceManager::CanvasResource
*/
void setResource(int key, const QVariant &value);
/**
* Set a resource of type KoColor.
* @param key the integer key
* @param color the new value for the key.
* @see KoCanvasResourceManager::CanvasResource
*/
void setResource(int key, const KoColor &color);
/**
* Set a resource of type KoShape*.
* @param key the integer key
* @param id the new value for the key.
* @see KoCanvasResourceManager::CanvasResource
*/
void setResource(int key, KoShape *shape);
/**
* Set a resource of type KoUnit
* @param key the integer key
* @param id the new value for the key.
* @see KoCanvasResourceManager::CanvasResource
*/
void setResource(int key, const KoUnit &unit);
/**
* Returns a qvariant containing the specified resource or a standard one if the
* specified resource does not exist.
* @param key the key
* @see KoCanvasResourceManager::CanvasResource
*/
QVariant resource(int key) const;
/**
* Set the foregroundColor resource.
* @param color the new foreground color
*/
void setForegroundColor(const KoColor &color);
/**
* Return the foregroundColor
*/
KoColor foregroundColor() const;
/**
* Set the backgroundColor resource.
* @param color the new background color
*/
void setBackgroundColor(const KoColor &color);
/**
* Return the backgroundColor
*/
KoColor backgroundColor() const;
/// Sets the border resource
void setActiveBorder(const KoLineBorder &border);
/// Returns the border resource
KoLineBorder activeBorder() const;
/**
* Return the resource determined by param key as a boolean.
* @param key the indentifying key for the resource
* @see KoCanvasResourceManager::CanvasResource
*/
bool boolResource(int key) const;
/**
* Return the resource determined by param key as an integer.
* @param key the indentifying key for the resource
* @see KoCanvasResourceManager::CanvasResource
*/
int intResource(int key) const;
/**
* Return the resource determined by param key as a KoColor.
* @param key the indentifying key for the resource
* @see KoCanvasResourceManager::CanvasResource
*/
KoColor koColorResource(int key) const;
/**
* Return the resource determined by param key as a pointer to a KoShape.
* @param key the indentifying key for the resource
* @see KoCanvasResourceManager::CanvasResource
*/
KoShape *koShapeResource(int key) const;
/**
* Return the resource determined by param key as a QString .
* @param key the indentifying key for the resource
* @see KoCanvasResourceManager::CanvasResource
*/
QString stringResource(int key) const;
/**
* Return the resource determined by param key as a QSizeF.
* @param key the indentifying key for the resource
* @see KoCanvasResourceManager::CanvasResource
*/
QSizeF sizeResource(int key) const;
/**
* Return the resource determined by param key as a KoUnit.
* @param key the indentifying key for the resource
* @see KoCanvasResourceManager::CanvasResource
*/
KoUnit unitResource(int key) const;
/**
* Returns true if there is a resource set with the requested key.
* @param key the indentifying key for the resource
* @see KoCanvasResourceManager::CanvasResource
*/
bool hasResource(int key) const;
/**
* Remove the resource with @p key from the provider.
* @param key the key that will be used to remove the resource
* There will be a signal emitted with a variable that will return true on QVariable::isNull();
* @see KoCanvasResourceManager::CanvasResource
*/
void clearResource(int key);
KUndo2Stack *undoStack() const;
void setUndoStack(KUndo2Stack *undoStack);
signals:
/**
* This signal is emitted every time a resource is set that is either
* new or different from the previous set value.
* @param key the indentifying key for the resource
* @param value the variants new value.
* @see KoCanvasResourceManager::CanvasResource
*/
void resourceChanged(int key, const QVariant &value);
private:
KoCanvasResourceManager(const KoCanvasResourceManager&);
KoCanvasResourceManager& operator=(const KoCanvasResourceManager&);
class Private;
Private *const d;
};
#endif
|