27#include <QRegularExpression>
51 const QList< QVariant > recentColorVariants = settings.
value( QStringLiteral(
"colors/recent" ) ).toList();
55 const auto constRecentColorVariants = recentColorVariants;
56 for (
const QVariant &color : constRecentColorVariants )
70 if ( !color.isValid() )
76 QColor opaqueColor = color;
77 opaqueColor.setAlpha( 255 );
80 QList< QVariant > recentColorVariants = settings.
value( QStringLiteral(
"colors/recent" ) ).toList();
83 for (
int colorIdx = recentColorVariants.length() - 1; colorIdx >= 0; --colorIdx )
85 if ( ( recentColorVariants.at( colorIdx ).value<QColor>() ).name() == opaqueColor.name() )
87 recentColorVariants.removeAt( colorIdx );
92 const QVariant colorVariant = QVariant( opaqueColor );
93 recentColorVariants.prepend( colorVariant );
96 while ( recentColorVariants.count() > 20 )
98 recentColorVariants.pop_back();
101 settings.
setValue( QStringLiteral(
"colors/recent" ), recentColorVariants );
108 const QList< QVariant > recentColorVariants = settings.
value( QStringLiteral(
"colors/recent" ) ).toList();
110 if ( recentColorVariants.isEmpty() )
113 return recentColorVariants.at( 0 ).value<QColor>();
119 Q_UNUSED( baseColor )
126 if ( !settings.
contains( QStringLiteral(
"/colors/palettecolors" ) ) )
129 colorList.append( qMakePair( QColor( 0, 0, 0 ), QString() ) );
130 colorList.append( qMakePair( QColor( 255, 255, 255 ), QString() ) );
131 colorList.append( qMakePair( QColor( 166, 206, 227 ), QString() ) );
132 colorList.append( qMakePair( QColor( 31, 120, 180 ), QString() ) );
133 colorList.append( qMakePair( QColor( 178, 223, 138 ), QString() ) );
134 colorList.append( qMakePair( QColor( 51, 160, 44 ), QString() ) );
135 colorList.append( qMakePair( QColor( 251, 154, 153 ), QString() ) );
136 colorList.append( qMakePair( QColor( 227, 26, 28 ), QString() ) );
137 colorList.append( qMakePair( QColor( 253, 191, 111 ), QString() ) );
138 colorList.append( qMakePair( QColor( 255, 127, 0 ), QString() ) );
143 QList< QVariant > customColorVariants = settings.
value( QStringLiteral(
"colors/palettecolors" ) ).toList();
144 const QList< QVariant > customColorLabels = settings.
value( QStringLiteral(
"colors/palettelabels" ) ).toList();
148 for ( QList< QVariant >::iterator it = customColorVariants.begin();
149 it != customColorVariants.end(); ++it )
151 const QColor color = ( *it ).value<QColor>();
153 if ( customColorLabels.length() > colorIndex )
155 label = customColorLabels.at( colorIndex ).toString();
158 colorList.append( qMakePair( color, label ) );
168 Q_UNUSED( baseColor )
172 QList< QVariant > customColors;
173 QList< QVariant > customColorLabels;
175 QgsNamedColorList::const_iterator colorIt = colors.constBegin();
176 for ( ; colorIt != colors.constEnd(); ++colorIt )
178 const QVariant color = ( *colorIt ).first;
179 const QVariant label = ( *colorIt ).second;
180 customColors.append( color );
181 customColorLabels.append( label );
183 settings.
setValue( QStringLiteral(
"colors/palettecolors" ), customColors );
184 settings.
setValue( QStringLiteral(
"colors/palettelabels" ), customColorLabels );
197 Q_UNUSED( baseColor )
206 for ( QStringList::iterator it = colorStrings.begin();
207 it != colorStrings.end(); ++it )
211 if ( colorLabels.length() > colorIndex )
213 label = colorLabels.at( colorIndex );
216 colorList.append( qMakePair( color, label ) );
226 Q_UNUSED( baseColor )
244 Q_UNUSED( baseColor )
247 if ( sourceFilePath.isEmpty() )
255 QFile sourceFile( sourceFilePath );
262 Q_UNUSED( baseColor )
265 if ( destFilePath.isEmpty() )
270 QFile destFile( destFilePath );
292 : mFilename( filename )
297 if ( sourceFile.open( QIODevice::ReadOnly ) )
299 QTextStream in( &sourceFile );
303 while ( !in.atEnd() && !line.startsWith( QLatin1String(
"Name:" ) ) )
305 line = in.readLine();
309 const thread_local QRegularExpression rx(
"Name:\\s*(\\S.*)$" );
310 const QRegularExpressionMatch match = rx.match( line );
311 if ( match.hasMatch() )
313 mName = match.captured( 1 );
317 if (
mName.isEmpty() )
326 mEditable = !sourceFileInfo.exists() || sourceFileInfo.isWritable();
344 const QStringList showInMenuSchemes = s.
value( QStringLiteral(
"/colors/showInMenuList" ) ).toStringList();
346 if ( showInMenuSchemes.contains(
mName ) )
357 if ( filePath.isEmpty() )
363 if ( ! QFile::exists( filePath ) )
369 return QFile::remove( filePath );
375 QStringList showInMenuSchemes = s.
value( QStringLiteral(
"/colors/showInMenuList" ) ).toStringList();
377 if ( show && !showInMenuSchemes.contains(
mName ) )
379 showInMenuSchemes <<
mName;
381 else if ( !show && showInMenuSchemes.contains(
mName ) )
383 showInMenuSchemes.removeAll(
mName );
386 s.
setValue( QStringLiteral(
"/colors/showInMenuList" ), showInMenuSchemes );
394 if ( !localDir.mkpath( palettesDir ) )
399 return QDir( palettesDir ).filePath(
mFilename );
static QgsColorSchemeRegistry * colorSchemeRegistry()
Returns the application's color scheme registry, used for managing color schemes.
static QString qgisSettingsDirPath()
Returns the path to the settings directory in user's home dir.
void setRandomStyleColorScheme(QgsColorScheme *scheme)
Sets the color scheme to use when fetching random colors to use for symbol styles.
@ ShowInColorButtonMenu
Show scheme in color button drop-down menu.
virtual QString schemeName() const =0
Gets the name for the color scheme.
virtual bool setColors(const QgsNamedColorList &colors, const QString &context=QString(), const QColor &baseColor=QColor())
Sets the colors for the scheme.
virtual SchemeFlags flags() const
Returns the current flags for the color scheme.
A color scheme which contains custom colors set through QGIS app options dialog.
QgsNamedColorList fetchColors(const QString &context=QString(), const QColor &baseColor=QColor()) override
Gets a list of colors from the scheme.
bool setColors(const QgsNamedColorList &colors, const QString &context=QString(), const QColor &baseColor=QColor()) override
Sets the colors for the scheme.
QgsCustomColorScheme * clone() const override
Clones a color scheme.
QgsCustomColorScheme()=default
Constructor for QgsCustomColorScheme.
virtual QString gplFilePath()=0
Returns the file path for the associated gpl palette file.
QgsNamedColorList fetchColors(const QString &context=QString(), const QColor &baseColor=QColor()) override
Gets a list of colors from the scheme.
bool setColors(const QgsNamedColorList &colors, const QString &context=QString(), const QColor &baseColor=QColor()) override
Sets the colors for the scheme.
A color scheme which contains project specific colors set through project properties dialog.
QgsProjectColorScheme * clone() const override
Clones a color scheme.
bool setColors(const QgsNamedColorList &colors, const QString &context=QString(), const QColor &baseColor=QColor()) override
Sets the colors for the scheme.
QgsProjectColorScheme()=default
Constructor for QgsProjectColorScheme.
QgsNamedColorList fetchColors(const QString &context=QString(), const QColor &baseColor=QColor()) override
Gets a list of colors from the scheme.
static QgsProject * instance()
Returns the QgsProject singleton instance.
void setProjectColors(const QgsNamedColorList &colors)
Sets the colors for the project's color scheme (see QgsProjectColorScheme).
QStringList readListEntry(const QString &scope, const QString &key, const QStringList &def=QStringList(), bool *ok=nullptr) const
Reads a string list from the specified scope and key.
A color scheme which contains the most recently used colors.
QgsRecentColorScheme()=default
Constructor for QgsRecentColorScheme.
QgsNamedColorList fetchColors(const QString &context=QString(), const QColor &baseColor=QColor()) override
Gets a list of colors from the scheme.
static QColor lastUsedColor()
Returns the most recently used color.
QgsRecentColorScheme * clone() const override
Clones a color scheme.
static void addRecentColor(const QColor &color)
Adds a color to the list of recent colors.
This class is a composition of two QSettings instances:
QVariant value(const QString &key, const QVariant &defaultValue=QVariant(), Section section=NoSection) const
Returns the value for setting key.
bool contains(const QString &key, QgsSettings::Section section=QgsSettings::NoSection) const
Returns true if there exists a setting called key; returns false otherwise.
void setValue(const QString &key, const QVariant &value, QgsSettings::Section section=QgsSettings::NoSection)
Sets the value of setting key to value.
static QColor decodeColor(const QString &str)
static bool saveColorsToGpl(QFile &file, const QString &paletteName, const QgsNamedColorList &colors)
Exports colors to a gpl GIMP palette file.
static QgsNamedColorList importColorsFromGpl(QFile &file, bool &ok, QString &name)
Imports colors from a gpl GIMP palette file.
static QString colorToName(const QColor &color)
Returns a friendly display name for a color.
A color scheme which stores its colors in a gpl palette file within the "palettes" subfolder off the ...
QString schemeName() const override
Gets the name for the color scheme.
QgsUserColorScheme(const QString &filename)
Constructs a new user color scheme, using a specified gpl palette file.
QgsColorScheme::SchemeFlags flags() const override
Returns the current flags for the color scheme.
QString gplFilePath() override
Returns the file path for the associated gpl palette file.
bool erase()
Erases the associated gpl palette file from the users "palettes" folder.
void setShowSchemeInMenu(bool show)
Sets whether a this scheme should be shown in color button menus.
QgsUserColorScheme * clone() const override
Clones a color scheme.
QList< QPair< QColor, QString > > QgsNamedColorList
List of colors paired with a friendly display name identifying the color.