KiCad PCB EDA Suite
color_settings.h
Go to the documentation of this file.
1/*
2 * This program source code file is part of KiCad, a free EDA CAD application.
3 *
4 * Copyright (C) 2020 Jon Evans <[email protected]>
5 * Copyright (C) 2020-2021 KiCad Developers, see AUTHORS.txt for contributors.
6 *
7 * This program is free software: you can redistribute it and/or modify it
8 * under the terms of the GNU General Public License as published by the
9 * Free Software Foundation, either version 3 of the License, or (at your
10 * option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License along
18 * with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20
21#ifndef _COLOR_SETTINGS_H
22#define _COLOR_SETTINGS_H
23
24#include <unordered_map>
25
26#include <gal/color4d.h>
28#include <settings/parameters.h>
29
30using KIGFX::COLOR4D;
31
52{
53public:
54 explicit COLOR_SETTINGS( const wxString& aFilename = wxT( "user" ),
55 bool aAbsolutePath = false );
56
57 virtual ~COLOR_SETTINGS() {}
58
63 COLOR_SETTINGS( const COLOR_SETTINGS& aOther );
64
65 COLOR_SETTINGS& operator=( const COLOR_SETTINGS &aOther );
66
67 bool MigrateFromLegacy( wxConfigBase* aCfg ) override;
68
69 COLOR4D GetColor( int aLayer ) const;
70
71 COLOR4D GetDefaultColor( int aLayer );
72
73 void SetColor( int aLayer, const COLOR4D& aColor );
74
75 const wxString& GetName() const { return m_displayName; }
76 void SetName( const wxString& aName ) { m_displayName = aName; }
77
79 void SetOverrideSchItemColors( bool aFlag ) { m_overrideSchItemColors = aFlag; }
80
82 void SetUseBoardStackupColors( bool aFlag ) { m_useBoardStackupColors = aFlag; }
83
91 static std::vector<COLOR_SETTINGS*> CreateBuiltinColorSettings();
92
93private:
94 bool migrateSchema0to1();
95
96 void initFromOther( const COLOR_SETTINGS& aOther );
97
98 wxString m_displayName;
99
102
107 std::unordered_map<int, COLOR4D> m_colors;
108
109 std::unordered_map<int, COLOR4D> m_defaultColors;
110};
111
113{
114public:
115 COLOR_MAP_PARAM( const std::string& aJsonPath, int aMapKey, COLOR4D aDefault,
116 std::unordered_map<int, COLOR4D>* aMap, bool aReadOnly = false ) :
117 PARAM_BASE( aJsonPath, aReadOnly ), m_key( aMapKey ), m_default( aDefault ),
118 m_map( aMap )
119 {}
120
121 void Load( JSON_SETTINGS* aSettings, bool aResetIfMissing = true ) const override
122 {
123 if( m_readOnly )
124 return;
125
126 if( std::optional<COLOR4D> optval = aSettings->Get<COLOR4D>( m_path ) )
127 ( *m_map )[ m_key ] = *optval;
128 else if( aResetIfMissing )
129 ( *m_map )[ m_key ] = m_default;
130 }
131
132 void Store( JSON_SETTINGS* aSettings ) const override
133 {
134 aSettings->Set<COLOR4D>( m_path, ( *m_map )[ m_key ] );
135 }
136
137 int GetKey() const
138 {
139 return m_key;
140 }
141
143 {
144 return m_default;
145 }
146
147 void SetDefault() override
148 {
149 ( *m_map )[ m_key ] = m_default;
150 }
151
152 bool MatchesFile( JSON_SETTINGS* aSettings ) const override
153 {
154 if( std::optional<COLOR4D> optval = aSettings->Get<COLOR4D>( m_path ) )
155 return m_map->count( m_key ) && ( *optval == m_map->at( m_key ) );
156
157 // If the JSON doesn't exist, the map shouldn't exist either
158 return !m_map->count( m_key );
159 }
160
161private:
162 int m_key;
163
165
166 std::unordered_map<int, COLOR4D>* m_map;
167};
168
169#endif
void SetDefault() override
COLOR4D GetDefault() const
void Load(JSON_SETTINGS *aSettings, bool aResetIfMissing=true) const override
Loads the value of this parameter from JSON to the underlying storage.
int GetKey() const
bool MatchesFile(JSON_SETTINGS *aSettings) const override
Checks whether the parameter in memory matches the one in a given JSON file.
void Store(JSON_SETTINGS *aSettings) const override
Stores the value of this parameter to the given JSON_SETTINGS object.
COLOR_MAP_PARAM(const std::string &aJsonPath, int aMapKey, COLOR4D aDefault, std::unordered_map< int, COLOR4D > *aMap, bool aReadOnly=false)
std::unordered_map< int, COLOR4D > * m_map
Color settings are a bit different than most of the settings objects in that there can be more than o...
void SetName(const wxString &aName)
std::unordered_map< int, COLOR4D > m_defaultColors
void initFromOther(const COLOR_SETTINGS &aOther)
void SetColor(int aLayer, const COLOR4D &aColor)
static std::vector< COLOR_SETTINGS * > CreateBuiltinColorSettings()
Constructs and returns a list of color settings objects based on the built-in color themes.
void SetUseBoardStackupColors(bool aFlag)
bool MigrateFromLegacy(wxConfigBase *aCfg) override
Migrates from wxConfig to JSON-based configuration.
bool m_useBoardStackupColors
bool GetOverrideSchItemColors() const
COLOR4D GetColor(int aLayer) const
virtual ~COLOR_SETTINGS()
COLOR4D GetDefaultColor(int aLayer)
wxString m_displayName
COLOR_SETTINGS & operator=(const COLOR_SETTINGS &aOther)
std::unordered_map< int, COLOR4D > m_colors
Map of all layer colors.
bool GetUseBoardStackupColors() const
bool m_overrideSchItemColors
COLOR_SETTINGS(const wxString &aFilename=wxT("user"), bool aAbsolutePath=false)
void SetOverrideSchItemColors(bool aFlag)
const wxString & GetName() const
void Set(const std::string &aPath, ValueType aVal)
Stores a value into the JSON document Will throw an exception if ValueType isn't something that the l...
std::optional< ValueType > Get(const std::string &aPath) const
Fetches a value from within the JSON document.
A color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:104
bool m_readOnly
! True if the parameter pointer should never be overwritten
Definition: parameters.h:78
std::string m_path
the string used to store the param in json files
Definition: parameters.h:75