1 /*
2     SPDX-FileCopyrightText: 2002 Jason Harris <kstars@30doradus.org>
3 
4     SPDX-License-Identifier: GPL-2.0-or-later
5 */
6 
7 #pragma once
8 
9 #include <QColor>
10 #include <QMap>
11 #include <QStringList>
12 
13 /**
14  * @class ColorScheme
15  * This class stores all of the adjustable colors in KStars, in
16  * a QMap object keyed by the names of the colors.  It also stores
17  * information on how stars are to be rendered in the map
18  * (with realistic colors, or as solid red/whit/black circles).
19  * In addition to the brief "Key names" used to index the colors in
20  * the QMap, each color has a "long name" description that is a bit
21  * more verbose, and suitable for UI display.
22  *
23  * @author Jason Harris
24  * @version 1.0
25  */
26 class ColorScheme
27 {
28   public:
29     /**
30      * Constructor. Enter all adjustable colors and their default
31      * values into the QMap.  Also assign the corresponding long names.
32      */
33     ColorScheme();
34 
35     /** @return true if the Palette contains the given key name */
hasColorNamed(const QString & name)36     bool hasColorNamed(const QString &name) const { return (Palette.contains(name)); }
37 
38     /**
39      * @short Retrieve a color by name.
40      * @p name the key name of the color to be retrieved.
41      * @return the requested color, or Qt::white if color name not found.
42      */
43     QColor colorNamed(const QString &name) const;
44 
45     /**
46      * @p i the index of the color to retrieve
47      * @return a color by its index in the QMap
48      */
49     QColor colorAt(int i) const;
50 
51     /**
52      * @p i the index of the long name to retrieve
53      * @return the name of the color at index i
54      */
55     QString nameAt(int i) const;
56 
57     /**
58      * @p i the index of the key name to retrieve
59      * @return the key name of the color at index i
60      */
61     QString keyAt(int i) const;
62 
63     /**
64      * @return the long name of the color whose key name is given
65      * @p key the key name identifying the color.
66      */
67     QString nameFromKey(const QString &key) const;
68 
69     /**
70      * Change the color with the given key to the given value
71      * @p key the key-name of the color to be changed
72      * @p color the new color value
73      */
74     void setColor(const QString &key, const QString &color);
75 
76     /**
77      * Load a color scheme from a *.colors file
78      * @p filename the filename of the color scheme to be loaded.
79      * @return true if the scheme was successfully loaded
80      */
81     bool load(const QString &filename);
82 
83     /**
84      * Save the current color scheme to a *.colors file.
85      * @p name the filename to create
86      * @return true if the color scheme is successfully writen to a file
87      */
88     bool save(const QString &name);
89 
90     /** @return the Filename associated with the color scheme. */
fileName()91     QString fileName() const { return FileName; }
92 
93     /** Read color-scheme data from the Config object. */
94     void loadFromConfig();
95 
96     /** Save color-scheme data to the Config object. */
97     void saveToConfig();
98 
99     /** @return the number of colors in the color scheme. */
numberOfColors()100     unsigned int numberOfColors() const { return (int)Palette.size(); }
101 
102     /** @return the star color mode used by the color scheme */
starColorMode()103     int starColorMode() const { return StarColorMode; }
104 
105     /** @return True if dark palette colors are used by the color scheme */
useDarkPalette()106     bool useDarkPalette() const { return DarkPalette == 1; }
107 
108     /** @return the star color intensity value used by the color scheme */
starColorIntensity()109     int starColorIntensity() const { return StarColorIntensity; }
110 
111     /**
112      * Set the star color mode used by the color scheme
113      * @p mode the star color mode to use
114      */
115     void setStarColorMode(int mode);
116 
117     /**
118      * Set the star color intensity value used by the color scheme
119      * @p intens The star color intensity value
120      */
121     void setStarColorIntensity(int intens);
122 
123     /**
124      * Set the star color mode and intensity value used by the color scheme
125      * @p mode the star color mode to use
126      * @p intens The star color intensity value
127      */
128     void setStarColorModeIntensity(int mode, int intens);
129 
130     /**
131      * @brief setDarkPalette Set whether the color schemes uses dark palette
132      * @param enable True to use dark palette. False to use application default palette
133      */
134     void setDarkPalette(bool enable);
135 
136   private:
137     /** Append items to all string lists. */
138     void appendItem(const QString &key, const QString &name, const QString &def);
139 
140     int StarColorMode { 0 };
141     int StarColorIntensity { 0 };
142     int DarkPalette { 0 };
143     QString FileName;
144     QStringList KeyName, Name, Default;
145     QMap<QString, QString> Palette;
146 };
147