Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgspainteffectregistry.h 3 : : ------------------------ 4 : : begin : January 2015 5 : : copyright : (C) 2015 Nyall Dawson 6 : : email : nyall dot dawson at gmail dot com 7 : : *************************************************************************** 8 : : * * 9 : : * This program is free software; you can redistribute it and/or modify * 10 : : * it under the terms of the GNU General Public License as published by * 11 : : * the Free Software Foundation; either version 2 of the License, or * 12 : : * (at your option) any later version. * 13 : : * * 14 : : ***************************************************************************/ 15 : : 16 : : #ifndef QGSPAINTEFFECTREGISTRY_H 17 : : #define QGSPAINTEFFECTREGISTRY_H 18 : : 19 : : #include "qgis_core.h" 20 : : #include "qgis_sip.h" 21 : : #include "qgssymbollayer.h" 22 : : #include <QDomElement> 23 : : #include <QDomDocument> 24 : : 25 : : class QgsPaintEffect; 26 : : class QgsPaintEffectWidget SIP_EXTERNAL; 27 : : 28 : : /** 29 : : * \ingroup core 30 : : * \class QgsPaintEffectAbstractMetadata 31 : : * \brief Stores metadata about a paint effect class. 32 : : * 33 : : * \note It's necessary to implement the createPaintEffect() function. 34 : : * In C++ you can use the QgsPaintEffectMetadata convenience class to 35 : : * simplify creation of the metadata. 36 : : * 37 : : * \since QGIS 2.9 38 : : */ 39 : : class CORE_EXPORT QgsPaintEffectAbstractMetadata 40 : : { 41 : : public: 42 : : 43 : : /** 44 : : * Construct a new QgsPaintEffectAbstractMetadata 45 : : * \param name unique string representing paint effect class 46 : : * \param visibleName user visible name representing paint effect class 47 : : */ 48 : : QgsPaintEffectAbstractMetadata( const QString &name, const QString &visibleName ); 49 : : 50 : 45 : virtual ~QgsPaintEffectAbstractMetadata() = default; 51 : : 52 : : /** 53 : : * Returns the unique string representing the paint effect class 54 : : * \returns unique string 55 : : * \see visibleName 56 : : */ 57 : 90 : QString name() const { return mName; } 58 : : 59 : : /** 60 : : * Returns the user visible string representing the paint effect class 61 : : * \returns friendly user visible string 62 : : * \see name 63 : : */ 64 : : QString visibleName() const { return mVisibleName; } 65 : : 66 : : /** 67 : : * Create a paint effect of this class given an encoded map of properties. 68 : : * \param map properties string map 69 : : * \returns new paint effect 70 : : */ 71 : : virtual QgsPaintEffect *createPaintEffect( const QVariantMap &map ) = 0 SIP_FACTORY; 72 : : 73 : : /** 74 : : * Create configuration widget for paint effect of this class. Can return NULLPTR 75 : : * if there's no GUI for the paint effect class. 76 : : * \returns configuration widget 77 : : */ 78 : 0 : virtual QgsPaintEffectWidget *createWidget() SIP_FACTORY { return nullptr; } 79 : : 80 : : protected: 81 : : QString mName; 82 : : QString mVisibleName; 83 : : 84 : : }; 85 : : 86 : : typedef QgsPaintEffect *( *QgsPaintEffectCreateFunc )( const QVariantMap & ) SIP_SKIP; 87 : : typedef QgsPaintEffectWidget *( *QgsPaintEffectWidgetFunc )() SIP_SKIP; 88 : : 89 : : /** 90 : : * \ingroup core 91 : : * \class QgsPaintEffectMetadata 92 : : * \brief Convenience metadata class that uses static functions to create an effect and its widget. 93 : : * 94 : : * \note not available in Python bindings 95 : : * \since QGIS 2.9 96 : : */ 97 : 90 : class CORE_EXPORT QgsPaintEffectMetadata : public QgsPaintEffectAbstractMetadata SIP_SKIP 98 : : { 99 : : 100 : : public: 101 : : 102 : : /** 103 : : * Create effect metadata from static functions 104 : : * \param name unique string representing paint effect class 105 : : * \param visibleName user visible name representing paint effect class 106 : : * \param pfCreate paint effect creation function 107 : : * \param pfWidget widget creation function 108 : : * \note not available in Python bindings 109 : : */ 110 : 45 : QgsPaintEffectMetadata( const QString &name, const QString &visibleName, 111 : : QgsPaintEffectCreateFunc pfCreate, 112 : : QgsPaintEffectWidgetFunc pfWidget = nullptr ) SIP_SKIP 113 : 45 : : QgsPaintEffectAbstractMetadata( name, visibleName ) 114 : 45 : , mCreateFunc( pfCreate ) 115 : 45 : , mWidgetFunc( pfWidget ) 116 : 135 : {} 117 : : 118 : : /** 119 : : * Returns the paint effect creation function for the paint effect class 120 : : * \returns creation function 121 : : * \note not available in Python bindings 122 : : */ 123 : : QgsPaintEffectCreateFunc createFunction() const { return mCreateFunc; } SIP_SKIP 124 : : 125 : : /** 126 : : * Returns the paint effect properties widget creation function for the paint effect class 127 : : * \returns widget creation function 128 : : * \note not available in Python bindings 129 : : * \see setWidgetFunction 130 : : */ 131 : : QgsPaintEffectWidgetFunc widgetFunction() const { return mWidgetFunc; } SIP_SKIP 132 : : 133 : : /** 134 : : * Sets the paint effect properties widget creation function for the paint effect class 135 : : * \param f widget creation function 136 : : * \note not available in Python bindings 137 : : * \see widgetFunction 138 : : */ 139 : : void setWidgetFunction( QgsPaintEffectWidgetFunc f ) { mWidgetFunc = f; } SIP_SKIP 140 : : 141 : : /** 142 : : * Creates a new paint effect of the metadata's effect class 143 : : * \param map string map of effect properties 144 : : * \returns new paint effect 145 : : * \note not available in Python bindings 146 : : * \see createWidget 147 : : */ 148 : 245 : QgsPaintEffect *createPaintEffect( const QVariantMap &map ) override { return mCreateFunc ? mCreateFunc( map ) : nullptr; } SIP_SKIP 149 : : 150 : : /** 151 : : * Creates a new paint effect properties widget for the metadata's effect class 152 : : * \returns effect properties widget 153 : : * \note not available in Python bindings 154 : : * \see createWidget 155 : : */ 156 : 0 : QgsPaintEffectWidget *createWidget() override SIP_FACTORY { return mWidgetFunc ? mWidgetFunc() : nullptr; } SIP_SKIP 157 : : 158 : : protected: 159 : : QgsPaintEffectCreateFunc mCreateFunc; 160 : : QgsPaintEffectWidgetFunc mWidgetFunc; 161 : : }; 162 : : 163 : : 164 : : /** 165 : : * \ingroup core 166 : : * \class QgsPaintEffectRegistry 167 : : * \brief Registry of available paint effects. 168 : : * 169 : : * QgsPaintEffectRegistry is not usually directly created, but rather accessed through 170 : : * QgsApplication::paintEffectRegistry(). 171 : : * 172 : : * \since QGIS 2.9 173 : : */ 174 : : class CORE_EXPORT QgsPaintEffectRegistry 175 : : { 176 : : public: 177 : : 178 : : QgsPaintEffectRegistry(); 179 : : ~QgsPaintEffectRegistry(); 180 : : 181 : : //! QgsPaintEffectRegistry cannot be copied. 182 : : QgsPaintEffectRegistry( const QgsPaintEffectRegistry &rh ) = delete; 183 : : //! QgsPaintEffectRegistry cannot be copied. 184 : : QgsPaintEffectRegistry &operator=( const QgsPaintEffectRegistry &rh ) = delete; 185 : : 186 : : /** 187 : : * Returns the metadata for a specific effect. 188 : : * \param name unique string name for paint effect class 189 : : * \returns paint effect metadata if found, otherwise NULLPTR 190 : : */ 191 : : QgsPaintEffectAbstractMetadata *effectMetadata( const QString &name ) const; 192 : : 193 : : /** 194 : : * Registers a new effect type. 195 : : * \param metadata effect metadata. Ownership is transferred to the registry. 196 : : * \returns TRUE if add was successful. 197 : : */ 198 : : bool addEffectType( QgsPaintEffectAbstractMetadata *metadata SIP_TRANSFER ); 199 : : 200 : : /** 201 : : * Creates a new paint effect given the effect name and properties map. 202 : : * \param name unique name representing paint effect class 203 : : * \param properties encoded string map of effect properties 204 : : * \returns new paint effect of specified class, or NULLPTR if matching 205 : : * paint effect could not be created 206 : : */ 207 : : QgsPaintEffect *createEffect( const QString &name, const QVariantMap &properties = QVariantMap() ) const SIP_FACTORY; 208 : : 209 : : /** 210 : : * Creates a new paint effect given a DOM element storing paint effect 211 : : * properties. 212 : : * \param element encoded DOM element of effect properties 213 : : * \returns new paint effect, or NULLPTR if matching 214 : : * paint effect could not be created 215 : : */ 216 : : QgsPaintEffect *createEffect( const QDomElement &element ) const SIP_FACTORY; 217 : : 218 : : /** 219 : : * Returns a list of known paint effects. 220 : : * \returns list of paint effect names 221 : : */ 222 : : QStringList effects() const; 223 : : 224 : : /** 225 : : * Returns a new effect stack consisting of a sensible selection of default 226 : : * effects. All effects except the standard draw source effect are disabled, 227 : : * but are included so that they can be easily drawn just by enabling the effect. 228 : : * \returns default effects stack 229 : : * \see isDefaultStack() 230 : : */ 231 : : static QgsPaintEffect *defaultStack() SIP_FACTORY; 232 : : 233 : : /** 234 : : * Tests whether a paint effect matches the default effects stack. 235 : : * \param effect paint effect to test 236 : : * \returns TRUE if effect is default stack 237 : : * \see defaultStack() 238 : : * \since QGIS 2.12 239 : : */ 240 : : static bool isDefaultStack( QgsPaintEffect *effect ); 241 : : 242 : : private: 243 : : #ifdef SIP_RUN 244 : : QgsPaintEffectRegistry( const QgsPaintEffectRegistry &rh ); 245 : : #endif 246 : : 247 : : QMap<QString, QgsPaintEffectAbstractMetadata *> mMetadata; 248 : : }; 249 : : 250 : : #endif //QGSPAINTEFFECTREGISTRY_H