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 <jon@craftyjon.com>
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>
27 #include <settings/json_settings.h>
28 #include <settings/parameters.h>
29 
30 using KIGFX::COLOR4D;
31 
52 {
53 public:
59  std::vector<COLOR4D> m_Palette;
60 
61  explicit COLOR_SETTINGS( const wxString& aFilename = wxT( "user" ) );
62 
63  virtual ~COLOR_SETTINGS() {}
64 
69  COLOR_SETTINGS( const COLOR_SETTINGS& aOther );
70 
71  COLOR_SETTINGS& operator=( const COLOR_SETTINGS &aOther );
72 
73  bool MigrateFromLegacy( wxConfigBase* aCfg ) override;
74 
75  COLOR4D GetColor( int aLayer ) const;
76 
77  COLOR4D GetDefaultColor( int aLayer );
78 
79  void SetColor( int aLayer, const COLOR4D& aColor );
80 
81  const wxString& GetName() const { return m_displayName; }
82  void SetName( const wxString& aName ) { m_displayName = aName; }
83 
85  void SetOverrideSchItemColors( bool aFlag ) { m_overrideSchItemColors = aFlag; }
86 
88  void SetUseBoardStackupColors( bool aFlag ) { m_useBoardStackupColors = aFlag; }
89 
97  static std::vector<COLOR_SETTINGS*> CreateBuiltinColorSettings();
98 
99 private:
100  bool migrateSchema0to1();
101 
102  void initFromOther( const COLOR_SETTINGS& aOther );
103 
104  wxString m_displayName;
105 
108 
113  std::unordered_map<int, COLOR4D> m_colors;
114 
115  std::unordered_map<int, COLOR4D> m_defaultColors;
116 };
117 
119 {
120 public:
121  COLOR_MAP_PARAM( const std::string& aJsonPath, int aMapKey, COLOR4D aDefault,
122  std::unordered_map<int, COLOR4D>* aMap, bool aReadOnly = false ) :
123  PARAM_BASE( aJsonPath, aReadOnly ), m_key( aMapKey ), m_default( aDefault ),
124  m_map( aMap )
125  {}
126 
127  void Load( JSON_SETTINGS* aSettings, bool aResetIfMissing = true ) const override
128  {
129  if( m_readOnly )
130  return;
131 
132  if( OPT<COLOR4D> optval = aSettings->Get<COLOR4D>( m_path ) )
133  ( *m_map )[ m_key ] = *optval;
134  else if( aResetIfMissing )
135  ( *m_map )[ m_key ] = m_default;
136  }
137 
138  void Store( JSON_SETTINGS* aSettings ) const override
139  {
140  aSettings->Set<COLOR4D>( m_path, ( *m_map )[ m_key ] );
141  }
142 
143  int GetKey() const
144  {
145  return m_key;
146  }
147 
149  {
150  return m_default;
151  }
152 
153  void SetDefault() override
154  {
155  ( *m_map )[ m_key ] = m_default;
156  }
157 
158  bool MatchesFile( JSON_SETTINGS* aSettings ) const override
159  {
160  if( OPT<COLOR4D> optval = aSettings->Get<COLOR4D>( m_path ) )
161  return m_map->count( m_key ) && ( *optval == m_map->at( m_key ) );
162 
163  // If the JSON doesn't exist, the map shouldn't exist either
164  return !m_map->count( m_key );
165  }
166 
167 private:
168  int m_key;
169 
171 
172  std::unordered_map<int, COLOR4D>* m_map;
173 };
174 
175 #endif
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...
bool GetUseBoardStackupColors() const
std::string m_path
the string used to store the param in json files
Definition: parameters.h:74
virtual ~COLOR_SETTINGS()
bool m_overrideSchItemColors
COLOR_SETTINGS(const wxString &aFilename=wxT("user"))
void SetColor(int aLayer, const COLOR4D &aColor)
wxString m_displayName
const wxString & GetName() const
COLOR4D GetDefault() const
int GetKey() const
COLOR_MAP_PARAM(const std::string &aJsonPath, int aMapKey, COLOR4D aDefault, std::unordered_map< int, COLOR4D > *aMap, bool aReadOnly=false)
void SetDefault() override
void SetOverrideSchItemColors(bool aFlag)
COLOR4D GetDefaultColor(int aLayer)
static std::vector< COLOR_SETTINGS * > CreateBuiltinColorSettings()
Constructs and returns a list of color settings objects based on the built-in color themes.
void SetName(const wxString &aName)
std::unordered_map< int, COLOR4D > m_defaultColors
void Store(JSON_SETTINGS *aSettings) const override
Stores the value of this parameter to the given JSON_SETTINGS object.
bool MatchesFile(JSON_SETTINGS *aSettings) const override
Checks whether the parameter in memory matches the one in a given JSON file.
std::vector< COLOR4D > m_Palette
m_Pallete stores a list of colors that are used, in order, when a list of colors needs to be generate...
COLOR4D GetColor(int aLayer) const
std::unordered_map< int, COLOR4D > m_colors
Map of all layer colors.
OPT< ValueType > Get(const std::string &aPath) const
Fetches a value from within the JSON document.
void initFromOther(const COLOR_SETTINGS &aOther)
bool m_readOnly
! True if the parameter pointer should never be overwritten
Definition: parameters.h:77
COLOR_SETTINGS & operator=(const COLOR_SETTINGS &aOther)
std::unordered_map< int, COLOR4D > * m_map
bool MigrateFromLegacy(wxConfigBase *aCfg) override
Migrates from wxConfig to JSON-based configuration.
bool m_useBoardStackupColors
boost::optional< T > OPT
Definition: optional.h:7
Color settings are a bit different than most of the settings objects in that there can be more than o...
bool GetOverrideSchItemColors() const
void SetUseBoardStackupColors(bool aFlag)
A color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:103
void Load(JSON_SETTINGS *aSettings, bool aResetIfMissing=true) const override
Loads the value of this parameter from JSON to the underlying storage.