Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgscolorscheme.h 3 : : ------------------- 4 : : begin : July 2014 5 : : copyright : (C) 2014 by Nyall Dawson 6 : : email : nyall dot dawson at gmail dot com 7 : : ***************************************************************************/ 8 : : 9 : : /*************************************************************************** 10 : : * * 11 : : * This program is free software; you can redistribute it and/or modify * 12 : : * it under the terms of the GNU General Public License as published by * 13 : : * the Free Software Foundation; either version 2 of the License, or * 14 : : * (at your option) any later version. * 15 : : * * 16 : : ***************************************************************************/ 17 : : 18 : : #ifndef QGSCOLORSCHEME_H 19 : : #define QGSCOLORSCHEME_H 20 : : 21 : : #include <QString> 22 : : #include <QColor> 23 : : #include <QPair> 24 : : #include <QObject> 25 : : 26 : : #include "qgis_core.h" 27 : : #include "qgis_sip.h" 28 : : 29 : : /** 30 : : * \ingroup core 31 : : * \brief List of colors paired with a friendly display name identifying the color 32 : : * \since QGIS 2.5 33 : : */ 34 : : typedef QList< QPair< QColor, QString > > QgsNamedColorList; 35 : : 36 : : /** 37 : : * \ingroup core 38 : : * \class QgsColorScheme 39 : : * \brief Abstract base class for color schemes 40 : : * 41 : : * A color scheme for display in QgsColorButton. Color schemes return lists 42 : : * of colors with an optional associated color name. The colors returned 43 : : * can be generated using an optional base color. 44 : : * \since QGIS 2.5 45 : : */ 46 : 0 : class CORE_EXPORT QgsColorScheme 47 : : { 48 : : 49 : : #ifdef SIP_RUN 50 : : SIP_CONVERT_TO_SUBCLASS_CODE 51 : : if ( dynamic_cast<QgsUserColorScheme *>( sipCpp ) != NULL ) 52 : : sipType = sipType_QgsUserColorScheme; 53 : : else if ( dynamic_cast<QgsRecentColorScheme *>( sipCpp ) != NULL ) 54 : : sipType = sipType_QgsRecentColorScheme; 55 : : else if ( dynamic_cast<QgsCustomColorScheme *>( sipCpp ) != NULL ) 56 : : sipType = sipType_QgsCustomColorScheme; 57 : : else if ( dynamic_cast<QgsProjectColorScheme *>( sipCpp ) != NULL ) 58 : : sipType = sipType_QgsProjectColorScheme; 59 : : else if ( dynamic_cast<QgsGplColorScheme *>( sipCpp ) != NULL ) 60 : : sipType = sipType_QgsGplColorScheme; 61 : : else 62 : : sipType = sipType_QgsColorScheme; 63 : : SIP_END 64 : : #endif 65 : : 66 : : public: 67 : : 68 : : /** 69 : : * Flags for controlling behavior of color scheme 70 : : */ 71 : : enum SchemeFlag 72 : : { 73 : : ShowInColorDialog = 0x01, //!< Show scheme in color picker dialog 74 : : ShowInColorButtonMenu = 0x02, //!< Show scheme in color button drop-down menu 75 : : ShowInAllContexts = ShowInColorDialog | ShowInColorButtonMenu //!< Show scheme in all contexts 76 : : }; 77 : : Q_DECLARE_FLAGS( SchemeFlags, SchemeFlag ) 78 : : 79 : : /** 80 : : * Constructor for QgsColorScheme. 81 : : */ 82 : 21 : QgsColorScheme() = default; 83 : : 84 : 21 : virtual ~QgsColorScheme() = default; 85 : : 86 : : /** 87 : : * Gets the name for the color scheme 88 : : * \returns color scheme name 89 : : */ 90 : : virtual QString schemeName() const = 0; 91 : : 92 : : /** 93 : : * Returns the current flags for the color scheme. 94 : : * \returns current flags 95 : : */ 96 : 0 : virtual SchemeFlags flags() const { return ShowInColorDialog; } 97 : : 98 : : /** 99 : : * Gets a list of colors from the scheme. The colors can optionally 100 : : * be generated using the supplied context and base color. 101 : : * \param context string specifying an optional context for the returned 102 : : * colors. For instance, a "recent colors" scheme may filter returned colors 103 : : * by context so that colors used only in a "composer" context are returned. 104 : : * \param baseColor base color for the scheme's colors. Some color schemes 105 : : * may take advantage of this to filter or modify their returned colors 106 : : * to colors related to the base color. 107 : : * \returns a list of QPairs of color and color name 108 : : */ 109 : : virtual QgsNamedColorList fetchColors( const QString &context = QString(), 110 : : const QColor &baseColor = QColor() ) = 0; 111 : : 112 : : /** 113 : : * Returns whether the color scheme is editable 114 : : * \returns TRUE if scheme is editable 115 : : * \see setColors 116 : : */ 117 : 0 : virtual bool isEditable() const { return false; } 118 : : 119 : : /** 120 : : * Sets the colors for the scheme. This method is only valid for editable color schemes. 121 : : * \param colors list of colors for the scheme 122 : : * \param context to set colors for 123 : : * \param baseColor base color to set colors for 124 : : * \returns TRUE if colors were set successfully 125 : : * \see isEditable 126 : : */ 127 : : virtual bool setColors( const QgsNamedColorList &colors, const QString &context = QString(), const QColor &baseColor = QColor() ); 128 : : 129 : : /** 130 : : * Clones a color scheme 131 : : * \returns copy of color scheme 132 : : */ 133 : : virtual QgsColorScheme *clone() const = 0 SIP_FACTORY; 134 : : }; 135 : : 136 : : Q_DECLARE_OPERATORS_FOR_FLAGS( QgsColorScheme::SchemeFlags ) 137 : : 138 : : /** 139 : : * \ingroup core 140 : : * \class QgsGplColorScheme 141 : : * \brief A color scheme which stores its colors in a gpl palette file. 142 : : * \since QGIS 2.5 143 : : */ 144 : 0 : class CORE_EXPORT QgsGplColorScheme : public QgsColorScheme 145 : : { 146 : : public: 147 : : 148 : : /** 149 : : * Constructor for QgsGplColorScheme. 150 : : */ 151 : 0 : QgsGplColorScheme() = default; 152 : : 153 : : QgsNamedColorList fetchColors( const QString &context = QString(), 154 : : const QColor &baseColor = QColor() ) override; 155 : : 156 : : bool setColors( const QgsNamedColorList &colors, const QString &context = QString(), const QColor &baseColor = QColor() ) override; 157 : : 158 : : protected: 159 : : 160 : : /** 161 : : * Returns the file path for the associated gpl palette file 162 : : * \returns gpl file path 163 : : */ 164 : : virtual QString gplFilePath() = 0; 165 : : 166 : : }; 167 : : 168 : : /** 169 : : * \ingroup core 170 : : * \class QgsUserColorScheme 171 : : * \brief A color scheme which stores its colors in a gpl palette file within the "palettes" 172 : : * subfolder off the user's QGIS settings folder. 173 : : * \since QGIS 2.5 174 : : */ 175 : 0 : class CORE_EXPORT QgsUserColorScheme : public QgsGplColorScheme 176 : : { 177 : : public: 178 : : 179 : : /** 180 : : * Constructs a new user color scheme, using a specified gpl palette file 181 : : * \param filename filename of gpl palette file stored in the users "palettes" folder 182 : : */ 183 : : QgsUserColorScheme( const QString &filename ); 184 : : 185 : : QString schemeName() const override; 186 : : 187 : : QgsUserColorScheme *clone() const override SIP_FACTORY; 188 : : 189 : 0 : bool isEditable() const override { return mEditable; } 190 : : 191 : : QgsColorScheme::SchemeFlags flags() const override; 192 : : 193 : : /** 194 : : * Sets the name for the scheme 195 : : * \param name new name 196 : : */ 197 : : void setName( const QString &name ) { mName = name; } 198 : : 199 : : /** 200 : : * Erases the associated gpl palette file from the users "palettes" folder 201 : : * \returns TRUE if erase was successful 202 : : */ 203 : : bool erase(); 204 : : 205 : : /** 206 : : * Sets whether a this scheme should be shown in color button menus. 207 : : * \param show set to TRUE to show in color button menus, or FALSE to hide from menus 208 : : * \since QGIS 3.0 209 : : */ 210 : : void setShowSchemeInMenu( bool show ); 211 : : 212 : : protected: 213 : : 214 : : QString mName; 215 : : 216 : : QString mFilename; 217 : : 218 : : bool mEditable = false; 219 : : 220 : : QString gplFilePath() override; 221 : : 222 : : }; 223 : : 224 : : /** 225 : : * \ingroup core 226 : : * \class QgsRecentColorScheme 227 : : * \brief A color scheme which contains the most recently used colors. 228 : : * \since QGIS 2.5 229 : : */ 230 : 14 : class CORE_EXPORT QgsRecentColorScheme : public QgsColorScheme 231 : : { 232 : : public: 233 : : 234 : : /** 235 : : * Constructor for QgsRecentColorScheme. 236 : : */ 237 : 7 : QgsRecentColorScheme() = default; 238 : : 239 : 0 : QString schemeName() const override { return QObject::tr( "Recent colors" ); } 240 : : 241 : 0 : SchemeFlags flags() const override { return ShowInAllContexts; } 242 : : 243 : : QgsNamedColorList fetchColors( const QString &context = QString(), 244 : : const QColor &baseColor = QColor() ) override; 245 : : 246 : : QgsRecentColorScheme *clone() const override SIP_FACTORY; 247 : : 248 : : /** 249 : : * Adds a color to the list of recent colors. 250 : : * \param color color to add 251 : : * \see lastUsedColor() 252 : : * \since QGIS 2.14 253 : : */ 254 : : static void addRecentColor( const QColor &color ); 255 : : 256 : : /** 257 : : * Returns the most recently used color. 258 : : * \see addRecentColor() 259 : : * \since QGIS 3.0 260 : : */ 261 : : static QColor lastUsedColor(); 262 : : }; 263 : : 264 : : /** 265 : : * \ingroup core 266 : : * \class QgsCustomColorScheme 267 : : * \brief A color scheme which contains custom colors set through QGIS app options dialog. 268 : : * \since QGIS 2.5 269 : : */ 270 : 14 : class CORE_EXPORT QgsCustomColorScheme : public QgsColorScheme 271 : : { 272 : : public: 273 : : 274 : : /** 275 : : * Constructor for QgsCustomColorScheme. 276 : : */ 277 : 7 : QgsCustomColorScheme() = default; 278 : : 279 : 0 : QString schemeName() const override { return QObject::tr( "Standard colors" ); } 280 : : 281 : 0 : SchemeFlags flags() const override { return ShowInAllContexts; } 282 : : 283 : : QgsNamedColorList fetchColors( const QString &context = QString(), 284 : : const QColor &baseColor = QColor() ) override; 285 : : 286 : 0 : bool isEditable() const override { return true; } 287 : : 288 : : bool setColors( const QgsNamedColorList &colors, const QString &context = QString(), const QColor &baseColor = QColor() ) override; 289 : : 290 : : QgsCustomColorScheme *clone() const override SIP_FACTORY; 291 : : }; 292 : : 293 : : /** 294 : : * \ingroup core 295 : : * \class QgsProjectColorScheme 296 : : * \brief A color scheme which contains project specific colors set through project properties dialog. 297 : : * \since QGIS 2.5 298 : : */ 299 : 14 : class CORE_EXPORT QgsProjectColorScheme : public QgsColorScheme 300 : : { 301 : : public: 302 : : 303 : : /** 304 : : * Constructor for QgsProjectColorScheme. 305 : : */ 306 : 7 : QgsProjectColorScheme() = default; 307 : : 308 : 0 : QString schemeName() const override { return QObject::tr( "Project colors" ); } 309 : : 310 : 0 : SchemeFlags flags() const override { return ShowInAllContexts; } 311 : : 312 : : QgsNamedColorList fetchColors( const QString &context = QString(), 313 : : const QColor &baseColor = QColor() ) override; 314 : : 315 : 0 : bool isEditable() const override { return true; } 316 : : 317 : : bool setColors( const QgsNamedColorList &colors, const QString &context = QString(), const QColor &baseColor = QColor() ) override; 318 : : 319 : : QgsProjectColorScheme *clone() const override SIP_FACTORY; 320 : : }; 321 : : 322 : : #endif