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 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 <gal/color4d.h>
25 #include <settings/json_settings.h>
26 
27 using KIGFX::COLOR4D;
28 
49 #include <settings/json_settings.h>
50 #include <settings/parameters.h>
51 
52 
54 {
55 public:
61  std::vector<COLOR4D> m_Palette;
62 
63  explicit COLOR_SETTINGS( wxString aFilename = "user" );
64 
65  virtual ~COLOR_SETTINGS() {}
66 
71  COLOR_SETTINGS( const COLOR_SETTINGS& aOther );
72 
73  COLOR_SETTINGS& operator=( const COLOR_SETTINGS &aOther );
74 
75  bool MigrateFromLegacy( wxConfigBase* aCfg ) override;
76 
77  bool Migrate() override;
78 
79  COLOR4D GetColor( int aLayer ) const;
80 
81  COLOR4D GetDefaultColor( int aLayer );
82 
83  void SetColor( int aLayer, COLOR4D aColor );
84 
85  const wxString& GetName() const { return m_displayName; }
86  void SetName( const wxString& aName ) { m_displayName = aName; }
87 
89  void SetOverrideSchItemColors( bool aFlag ) { m_overrideSchItemColors = aFlag; }
90 
91 private:
92  bool migrateSchema0to1();
93 
94  void initFromOther( const COLOR_SETTINGS& aOther );
95 
96  wxString m_displayName;
97 
99 
104  std::unordered_map<int, COLOR4D> m_colors;
105 
106  std::unordered_map<int, COLOR4D> m_defaultColors;
107 };
108 
110 {
111 public:
112  COLOR_MAP_PARAM( const std::string& aJsonPath, int aMapKey, COLOR4D aDefault,
113  std::unordered_map<int, COLOR4D>* aMap, bool aReadOnly = false ) :
114  PARAM_BASE( aJsonPath, aReadOnly ), m_key( aMapKey ), m_default( aDefault ),
115  m_map( aMap )
116  {}
117 
118  void Load( JSON_SETTINGS* aSettings, bool aResetIfMissing = true ) const override
119  {
120  if( m_readOnly )
121  return;
122 
123  if( OPT<COLOR4D> optval = aSettings->Get<COLOR4D>( m_path ) )
124  ( *m_map )[ m_key ] = *optval;
125  else if( aResetIfMissing )
126  ( *m_map )[ m_key ] = m_default;
127  }
128 
129  void Store( JSON_SETTINGS* aSettings) const override
130  {
131  aSettings->Set<COLOR4D>( m_path, ( *m_map )[ m_key ] );
132  }
133 
134  int GetKey() const
135  {
136  return m_key;
137  }
138 
140  {
141  return m_default;
142  }
143 
144  void SetDefault() override
145  {
146  ( *m_map )[ m_key ] = m_default;
147  }
148 
149  bool IsDefault() const override
150  {
151  return ( *m_map )[ m_key ] == m_default;
152  }
153 
154  bool MatchesFile( JSON_SETTINGS* aSettings ) const override
155  {
156  if( OPT<COLOR4D> optval = aSettings->Get<COLOR4D>( m_path ) )
157  return m_map->count( m_key ) && ( *optval == m_map->at( m_key ) );
158 
159  // If the JSON doesn't exist, the map shouldn't exist either
160  return !m_map->count( m_key );
161  }
162 
163 private:
164  int m_key;
165 
167 
168  std::unordered_map<int, COLOR4D>* m_map;
169 };
170 
171 #endif
std::string m_path
the string used to store the param in json files
Definition: parameters.h:80
virtual ~COLOR_SETTINGS()
bool m_overrideSchItemColors
wxString m_displayName
const wxString & GetName() const
COLOR4D GetDefault() const
OPT< ValueType > Get(const std::string &aPath) const
Fetches a value from within the JSON document.
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)
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.
void initFromOther(const COLOR_SETTINGS &aOther)
COLOR_SETTINGS(wxString aFilename="user")
bool m_readOnly
! True if the parameter pointer should never be overwritten
Definition: parameters.h:83
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.
boost::optional< T > OPT
Definition: optional.h:7
bool Migrate() override
Migrates the schema of this settings from the version in the file to the latest version.
Color settings are a bit different than most of the settings objects in that there can be more than o...
bool GetOverrideSchItemColors() const
bool IsDefault() const override
Checks whether or not this param has been changed from its default value.
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...
void SetColor(int aLayer, COLOR4D aColor)
COLOR4D is the color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:99
void Load(JSON_SETTINGS *aSettings, bool aResetIfMissing=true) const override
Loads the value of this parameter from JSON to the underlying storage.