KiCad PCB EDA Suite
PANEL_COLOR_SETTINGS Class Reference

#include <panel_color_settings.h>

Inheritance diagram for PANEL_COLOR_SETTINGS:
PANEL_COLOR_SETTINGS_BASE RESETTABLE_PANEL PANEL_EESCHEMA_COLOR_SETTINGS PANEL_FP_EDITOR_COLOR_SETTINGS PANEL_PCBNEW_COLOR_SETTINGS

Public Types

enum  COLOR_CONTEXT_ID { ID_COPY = wxID_HIGHEST + 1, ID_PASTE, ID_REVERT }
 

Public Member Functions

 PANEL_COLOR_SETTINGS (wxWindow *aParent)
 
 ~PANEL_COLOR_SETTINGS ()=default
 
virtual void ResetPanel () override
 Reset the contents of this panel. More...
 
virtual wxString GetResetTooltip () override
 Get the tooltip the reset button should display when showing this panel. More...
 
bool Show (bool show) override
 

Public Attributes

wxCheckBox * m_optOverrideColors
 

Protected Member Functions

void OnBtnOpenThemeFolderClicked (wxCommandEvent &event) override
 
void OnLeftDownTheme (wxMouseEvent &event) override
 
void OnThemeChanged (wxCommandEvent &aEvent) override
 
void ShowColorContextMenu (wxMouseEvent &aEvent, int aLayer)
 
void OnColorChanged (wxCommandEvent &aEvent)
 
void updateSwatches ()
 
void createThemeList (const wxString &aCurrent)
 
void createSwatch (int aLayer, const wxString &aName)
 
void updateColor (int aLayer, const KIGFX::COLOR4D &aColor)
 
virtual bool saveCurrentTheme (bool aValidate)
 
virtual bool validateSave (bool aQuiet=false)
 Performs a pre-save validation of the current color theme. More...
 
virtual void onNewThemeSelected ()
 Event fired when a new theme is selected that can be overridden in children. More...
 
virtual void onColorChanged ()
 Event fired when the user changes any color. More...
 
virtual void OnSize (wxSizeEvent &event)
 
virtual void OnOverrideItemColorsClicked (wxCommandEvent &event)
 

Protected Attributes

COLOR_SETTINGSm_currentSettings
 
std::map< int, wxStaticText * > m_labels
 
std::map< int, COLOR_SWATCH * > m_swatches
 
KIGFX::COLOR4D m_copied
 
std::vector< int > m_validLayers
 A list of layer IDs that are valid for the current color settings dialog. More...
 
int m_backgroundLayer
 
std::string m_colorNamespace
 A namespace that will be passed to SETTINGS_MANAGER::SaveColorSettings. More...
 
wxBoxSizer * m_mainSizer
 
wxStaticText * m_staticText9
 
wxChoice * m_cbTheme
 
wxButton * m_btnOpenFolder
 
wxStaticLine * m_staticline2
 
wxBoxSizer * m_colorsMainSizer
 
wxScrolledWindow * m_colorsListWindow
 
wxFlexGridSizer * m_colorsGridSizer
 

Detailed Description

Definition at line 32 of file panel_color_settings.h.

Member Enumeration Documentation

◆ COLOR_CONTEXT_ID

Enumerator
ID_COPY 
ID_PASTE 
ID_REVERT 

Definition at line 39 of file panel_color_settings.h.

Constructor & Destructor Documentation

◆ PANEL_COLOR_SETTINGS()

PANEL_COLOR_SETTINGS::PANEL_COLOR_SETTINGS ( wxWindow *  aParent)

Definition at line 39 of file panel_color_settings.cpp.

39  :
40  PANEL_COLOR_SETTINGS_BASE( aParent ),
41  m_currentSettings( nullptr ),
42  m_swatches(),
43  m_copied( COLOR4D::UNSPECIFIED ),
44  m_validLayers(),
47 {
48 #ifdef __APPLE__
49  m_btnOpenFolder->SetLabel( _( "Reveal Themes in Finder" ) );
50 
51  // Simple border is too dark on OSX
52  m_colorsListWindow->SetWindowStyle( wxBORDER_SUNKEN|wxVSCROLL );
53 #endif
54 }
PANEL_COLOR_SETTINGS_BASE(wxWindow *parent, wxWindowID id=wxID_ANY, const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxSize(826, 300), long style=wxTAB_TRAVERSAL, const wxString &name=wxEmptyString)
std::map< int, COLOR_SWATCH * > m_swatches
std::string m_colorNamespace
A namespace that will be passed to SETTINGS_MANAGER::SaveColorSettings.
COLOR_SETTINGS * m_currentSettings
std::vector< int > m_validLayers
A list of layer IDs that are valid for the current color settings dialog.
#define _(s)
Definition: 3d_actions.cpp:33

References _, PANEL_COLOR_SETTINGS_BASE::m_btnOpenFolder, PANEL_COLOR_SETTINGS_BASE::m_colorsListWindow, and UNSPECIFIED.

◆ ~PANEL_COLOR_SETTINGS()

PANEL_COLOR_SETTINGS::~PANEL_COLOR_SETTINGS ( )
default

Member Function Documentation

◆ createSwatch()

void PANEL_COLOR_SETTINGS::createSwatch ( int  aLayer,
const wxString &  aName 
)
protected

Definition at line 231 of file panel_color_settings.cpp.

232 {
233  wxStaticText* label = new wxStaticText( m_colorsListWindow, wxID_ANY, aName );
234 
235  // The previously selected theme can be deleted and cannot be selected.
236  // so select the default theme (first theme of the list)
237  if( m_cbTheme->GetSelection() < 0 )
238  {
239  m_cbTheme->SetSelection( 0 );
241  }
242 
243  void* clientData = m_cbTheme->GetClientData( m_cbTheme->GetSelection() );
244  COLOR_SETTINGS* selected = static_cast<COLOR_SETTINGS*>( clientData );
245 
246  int id = FIRST_BUTTON_ID + aLayer;
247  COLOR4D defaultColor = selected->GetDefaultColor( aLayer );
249  COLOR4D backgroundColor = m_currentSettings->GetColor( m_backgroundLayer );
250 
251  COLOR_SWATCH* swatch = new COLOR_SWATCH( m_colorsListWindow, color, id, backgroundColor,
252  defaultColor, SWATCH_MEDIUM );
253  swatch->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
254 
255  m_colorsGridSizer->Add( label, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_LEFT | wxLEFT, 5 );
256  m_colorsGridSizer->Add( swatch, 0, wxALIGN_CENTER_VERTICAL | wxALL, 3 );
257 
258  m_labels[aLayer] = label;
259  m_swatches[aLayer] = swatch;
260 
261  swatch->Bind( wxEVT_RIGHT_DOWN,
262  [&, aLayer]( wxMouseEvent& aEvent )
263  {
264  ShowColorContextMenu( aEvent, aLayer );
265  } );
266 
267  swatch->Bind( COLOR_SWATCH_CHANGED, &PANEL_COLOR_SETTINGS::OnColorChanged, this );
268 }
int color
Definition: DXF_plotter.cpp:60
std::map< int, wxStaticText * > m_labels
virtual void onNewThemeSelected()
Event fired when a new theme is selected that can be overridden in children.
std::map< int, COLOR_SWATCH * > m_swatches
void ShowColorContextMenu(wxMouseEvent &aEvent, int aLayer)
COLOR_SETTINGS * m_currentSettings
COLOR4D GetDefaultColor(int aLayer)
constexpr int FIRST_BUTTON_ID
COLOR4D GetColor(int aLayer) const
Class representing a simple color swatch, of the kind used to set layer colors.
Definition: color_swatch.h:57
Color settings are a bit different than most of the settings objects in that there can be more than o...
void OnColorChanged(wxCommandEvent &aEvent)
COLOR4D is the color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:100

References color, FIRST_BUTTON_ID, COLOR_SETTINGS::GetColor(), COLOR_SETTINGS::GetDefaultColor(), m_backgroundLayer, PANEL_COLOR_SETTINGS_BASE::m_cbTheme, PANEL_COLOR_SETTINGS_BASE::m_colorsGridSizer, PANEL_COLOR_SETTINGS_BASE::m_colorsListWindow, m_currentSettings, m_labels, m_swatches, OnColorChanged(), onNewThemeSelected(), ShowColorContextMenu(), and SWATCH_MEDIUM.

Referenced by PANEL_FP_EDITOR_COLOR_SETTINGS::createSwatches(), PANEL_PCBNEW_COLOR_SETTINGS::createSwatches(), and PANEL_EESCHEMA_COLOR_SETTINGS::createSwatches().

◆ createThemeList()

void PANEL_COLOR_SETTINGS::createThemeList ( const wxString &  aCurrent)
protected

Definition at line 198 of file panel_color_settings.cpp.

199 {
200  int width = 0;
201  int height = 0;
202 
203  m_cbTheme->GetTextExtent( _( "New Theme..." ), &width, &height );
204  int minwidth = width;
205 
206  m_cbTheme->Clear();
207 
208  for( COLOR_SETTINGS* settings : Pgm().GetSettingsManager().GetColorSettingsList() )
209  {
210  wxString name = settings->GetName();
211 
212  if( settings->IsReadOnly() )
213  name += wxS( " " ) + _( "(read-only)" );
214 
215  int pos = m_cbTheme->Append( name, static_cast<void*>( settings ) );
216 
217  if( settings->GetFilename() == aCurrent )
218  m_cbTheme->SetSelection( pos );
219 
220  m_cbTheme->GetTextExtent( name, &width, &height );
221  minwidth = std::max( minwidth, width );
222  }
223 
224  m_cbTheme->Append( wxT( "---" ) );
225  m_cbTheme->Append( _( "New Theme..." ) );
226 
227  m_cbTheme->SetMinSize( wxSize( minwidth + 50, -1 ) );
228 }
KIWAY Kiway & Pgm(), KFCTL_STANDALONE
The global Program "get" accessor.
Definition: single_top.cpp:102
SETTINGS_MANAGER * GetSettingsManager()
const char * name
Definition: DXF_plotter.cpp:59
#define _(s)
Definition: 3d_actions.cpp:33
Color settings are a bit different than most of the settings objects in that there can be more than o...

References _, GetSettingsManager(), PANEL_COLOR_SETTINGS_BASE::m_cbTheme, name, and Pgm().

Referenced by OnLeftDownTheme(), PANEL_EESCHEMA_COLOR_SETTINGS::PANEL_EESCHEMA_COLOR_SETTINGS(), PANEL_FP_EDITOR_COLOR_SETTINGS::PANEL_FP_EDITOR_COLOR_SETTINGS(), and PANEL_PCBNEW_COLOR_SETTINGS::PANEL_PCBNEW_COLOR_SETTINGS().

◆ GetResetTooltip()

virtual wxString PANEL_COLOR_SETTINGS::GetResetTooltip ( )
inlineoverridevirtual

Get the tooltip the reset button should display when showing this panel.

Returns
the tooltip

Reimplemented from RESETTABLE_PANEL.

Definition at line 48 of file panel_color_settings.h.

49  {
50  return _( "Reset all colors in this theme to the KiCad defaults" );
51  }
#define _(s)
Definition: 3d_actions.cpp:33

References _.

◆ OnBtnOpenThemeFolderClicked()

void PANEL_COLOR_SETTINGS::OnBtnOpenThemeFolderClicked ( wxCommandEvent &  event)
overrideprotectedvirtual

Reimplemented from PANEL_COLOR_SETTINGS_BASE.

Definition at line 57 of file panel_color_settings.cpp.

58 {
60  LaunchExternal( dir );
61 }
static wxString GetColorSettingsPath()
Returns the path where color scheme files are stored; creating it if missing (normally .
void LaunchExternal(const wxString &aPath)
Launches the given file or folder in the host OS.
Definition: launch_ext.cpp:26

References SETTINGS_MANAGER::GetColorSettingsPath(), and LaunchExternal().

◆ OnColorChanged()

void PANEL_COLOR_SETTINGS::OnColorChanged ( wxCommandEvent &  aEvent)
protected

Definition at line 316 of file panel_color_settings.cpp.

317 {
318  COLOR_SWATCH* swatch = static_cast<COLOR_SWATCH*>( aEvent.GetEventObject() );
319  COLOR4D newColor = swatch->GetSwatchColor();
320  LAYER_NUM layer = static_cast<SCH_LAYER_ID>( swatch->GetId() - FIRST_BUTTON_ID );
321 
322  updateColor( layer, newColor );
323 }
KIGFX::COLOR4D GetSwatchColor() const
void updateColor(int aLayer, const KIGFX::COLOR4D &aColor)
constexpr int FIRST_BUTTON_ID
int LAYER_NUM
This can be replaced with int and removed.
Class representing a simple color swatch, of the kind used to set layer colors.
Definition: color_swatch.h:57
COLOR4D is the color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:100

References FIRST_BUTTON_ID, COLOR_SWATCH::GetSwatchColor(), and updateColor().

Referenced by createSwatch().

◆ onColorChanged()

virtual void PANEL_COLOR_SETTINGS::onColorChanged ( )
inlineprotectedvirtual

Event fired when the user changes any color.

Reimplemented in PANEL_EESCHEMA_COLOR_SETTINGS, and PANEL_PCBNEW_COLOR_SETTINGS.

Definition at line 93 of file panel_color_settings.h.

93 {}

Referenced by updateColor().

◆ OnLeftDownTheme()

void PANEL_COLOR_SETTINGS::OnLeftDownTheme ( wxMouseEvent &  event)
overrideprotectedvirtual

Reimplemented from PANEL_COLOR_SETTINGS_BASE.

Definition at line 101 of file panel_color_settings.cpp.

102 {
103  // Lazy rebuild of theme menu to catch any colour theme changes made in other panels
104  wxString sel = m_cbTheme->GetStringSelection();
105  createThemeList( sel );
106 
107  event.Skip();
108 }
void createThemeList(const wxString &aCurrent)

References createThemeList(), and PANEL_COLOR_SETTINGS_BASE::m_cbTheme.

◆ onNewThemeSelected()

virtual void PANEL_COLOR_SETTINGS::onNewThemeSelected ( )
inlineprotectedvirtual

Event fired when a new theme is selected that can be overridden in children.

Reimplemented in PANEL_EESCHEMA_COLOR_SETTINGS, and PANEL_PCBNEW_COLOR_SETTINGS.

Definition at line 88 of file panel_color_settings.h.

88 {}

Referenced by createSwatch(), OnThemeChanged(), and Show().

◆ OnOverrideItemColorsClicked()

virtual void PANEL_COLOR_SETTINGS_BASE::OnOverrideItemColorsClicked ( wxCommandEvent &  event)
inlineprotectedvirtualinherited

◆ OnSize()

virtual void PANEL_COLOR_SETTINGS_BASE::OnSize ( wxSizeEvent &  event)
inlineprotectedvirtualinherited

◆ OnThemeChanged()

void PANEL_COLOR_SETTINGS::OnThemeChanged ( wxCommandEvent &  aEvent)
overrideprotectedvirtual

Reimplemented from PANEL_COLOR_SETTINGS_BASE.

Definition at line 111 of file panel_color_settings.cpp.

112 {
113  int idx = m_cbTheme->GetSelection();
114 
115  if( idx == static_cast<int>( m_cbTheme->GetCount() ) - 2 )
116  {
117  // separator; re-select active theme
118  m_cbTheme->SetStringSelection( m_currentSettings->GetName() );
119  return;
120  }
121 
122  if( idx == (int)m_cbTheme->GetCount() - 1 )
123  {
124  // New Theme...
125 
126  if( !saveCurrentTheme( false ) )
127  return;
128 
129  FOOTPRINT_NAME_VALIDATOR themeNameValidator;
130  wxTextEntryDialog dlg( this, _( "New theme name:" ), _( "Add Color Theme" ) );
131  dlg.SetTextValidator( themeNameValidator );
132 
133  if( dlg.ShowModal() != wxID_OK )
134  return;
135 
136  wxString themeName = dlg.GetValue();
137  wxFileName fn( themeName + wxT( ".json" ) );
139 
140  if( fn.Exists() )
141  {
142  wxMessageBox( _( "Theme already exists!" ) );
143  return;
144  }
145 
146  SETTINGS_MANAGER& settingsMgr = Pgm().GetSettingsManager();
147  COLOR_SETTINGS* newSettings = settingsMgr.AddNewColorSettings( themeName );
148  newSettings->SetName( themeName );
149  newSettings->SetReadOnly( false );
150 
151  for( auto layer : m_validLayers )
152  newSettings->SetColor( layer, m_currentSettings->GetColor( layer ) );
153 
154  newSettings->SaveToFile( settingsMgr.GetPathForSettingsFile( newSettings ) );
155 
156  idx = m_cbTheme->Insert( themeName, idx - 1, static_cast<void*>( newSettings ) );
157  m_cbTheme->SetSelection( idx );
158 
159  m_optOverrideColors->SetValue( newSettings->GetOverrideSchItemColors() );
160 
161  *m_currentSettings = *newSettings;
162  updateSwatches();
164  }
165  else
166  {
167  COLOR_SETTINGS* selected = static_cast<COLOR_SETTINGS*>( m_cbTheme->GetClientData( idx ) );
168 
169  if( selected->GetFilename() != m_currentSettings->GetFilename() )
170  {
171  if( !saveCurrentTheme( false ) )
172  return;
173 
174  m_optOverrideColors->SetValue( selected->GetOverrideSchItemColors() );
175 
176  *m_currentSettings = *selected;
178  updateSwatches();
179  }
180  }
181 }
virtual bool saveCurrentTheme(bool aValidate)
void SetReadOnly(bool aReadOnly)
Definition: json_settings.h:75
wxString GetFilename() const
Definition: json_settings.h:64
virtual void onNewThemeSelected()
Event fired when a new theme is selected that can be overridden in children.
const wxString & GetName() const
COLOR_SETTINGS * AddNewColorSettings(const wxString &aFilename)
Registers a new color settings object with the given filename.
KIWAY Kiway & Pgm(), KFCTL_STANDALONE
The global Program "get" accessor.
Definition: single_top.cpp:102
This class provides a custom wxValidator object for limiting the allowable characters when defining f...
Definition: validators.h:63
virtual bool SaveToFile(const wxString &aDirectory="", bool aForce=false)
COLOR_SETTINGS * m_currentSettings
void SetName(const wxString &aName)
std::vector< int > m_validLayers
A list of layer IDs that are valid for the current color settings dialog.
static wxString GetColorSettingsPath()
Returns the path where color scheme files are stored; creating it if missing (normally .
COLOR4D GetColor(int aLayer) const
#define _(s)
Definition: 3d_actions.cpp:33
Color settings are a bit different than most of the settings objects in that there can be more than o...
bool GetOverrideSchItemColors() const
wxString GetPathForSettingsFile(JSON_SETTINGS *aSettings)
Returns the path a given settings file should be loaded from / stored to.
void SetColor(int aLayer, COLOR4D aColor)

References _, SETTINGS_MANAGER::AddNewColorSettings(), COLOR_SETTINGS::GetColor(), SETTINGS_MANAGER::GetColorSettingsPath(), JSON_SETTINGS::GetFilename(), COLOR_SETTINGS::GetName(), COLOR_SETTINGS::GetOverrideSchItemColors(), SETTINGS_MANAGER::GetPathForSettingsFile(), PANEL_COLOR_SETTINGS_BASE::m_cbTheme, m_currentSettings, PANEL_COLOR_SETTINGS_BASE::m_optOverrideColors, m_validLayers, onNewThemeSelected(), Pgm(), saveCurrentTheme(), JSON_SETTINGS::SaveToFile(), COLOR_SETTINGS::SetColor(), COLOR_SETTINGS::SetName(), JSON_SETTINGS::SetReadOnly(), and updateSwatches().

◆ ResetPanel()

void PANEL_COLOR_SETTINGS::ResetPanel ( )
overridevirtual

Reset the contents of this panel.

Implements RESETTABLE_PANEL.

Reimplemented in PANEL_EESCHEMA_COLOR_SETTINGS, and PANEL_PCBNEW_COLOR_SETTINGS.

Definition at line 64 of file panel_color_settings.cpp.

65 {
67  return;
68 
69  for( const std::pair<const int, COLOR_SWATCH*>& pair : m_swatches )
70  {
71  int layer = pair.first;
72  COLOR_SWATCH* button = pair.second;
73 
74  COLOR4D defaultColor = m_currentSettings->GetDefaultColor( layer );
75 
76  m_currentSettings->SetColor( layer, defaultColor );
77  button->SetSwatchColor( defaultColor, false );
78  }
79 }
void SetSwatchColor(KIGFX::COLOR4D aColor, bool aSendEvent)
Set the current swatch color directly.
std::map< int, COLOR_SWATCH * > m_swatches
COLOR_SETTINGS * m_currentSettings
COLOR4D GetDefaultColor(int aLayer)
Class representing a simple color swatch, of the kind used to set layer colors.
Definition: color_swatch.h:57
bool IsReadOnly() const
Definition: json_settings.h:74
void SetColor(int aLayer, COLOR4D aColor)
COLOR4D is the color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:100

References COLOR_SETTINGS::GetDefaultColor(), JSON_SETTINGS::IsReadOnly(), m_currentSettings, m_swatches, COLOR_SETTINGS::SetColor(), and COLOR_SWATCH::SetSwatchColor().

Referenced by PANEL_PCBNEW_COLOR_SETTINGS::ResetPanel(), and PANEL_EESCHEMA_COLOR_SETTINGS::ResetPanel().

◆ saveCurrentTheme()

bool PANEL_COLOR_SETTINGS::saveCurrentTheme ( bool  aValidate)
protectedvirtual

Reimplemented in PANEL_EESCHEMA_COLOR_SETTINGS.

Definition at line 349 of file panel_color_settings.cpp.

350 {
352  return true;
353 
354  if( aValidate && !validateSave() )
355  return false;
356 
357  SETTINGS_MANAGER& settingsMgr = Pgm().GetSettingsManager();
358  COLOR_SETTINGS* selected = settingsMgr.GetColorSettings( m_currentSettings->GetFilename() );
359 
360  selected->SetOverrideSchItemColors( m_optOverrideColors->GetValue() );
361 
362  for( auto layer : m_validLayers )
363  selected->SetColor( layer, m_currentSettings->GetColor( layer ) );
364 
365  settingsMgr.SaveColorSettings( selected, m_colorNamespace );
366 
367  return true;
368 }
wxString GetFilename() const
Definition: json_settings.h:64
KIWAY Kiway & Pgm(), KFCTL_STANDALONE
The global Program "get" accessor.
Definition: single_top.cpp:102
std::string m_colorNamespace
A namespace that will be passed to SETTINGS_MANAGER::SaveColorSettings.
COLOR_SETTINGS * m_currentSettings
void SetOverrideSchItemColors(bool aFlag)
std::vector< int > m_validLayers
A list of layer IDs that are valid for the current color settings dialog.
COLOR_SETTINGS * GetColorSettings(const wxString &aName="user")
Retrieves a color settings object that applications can read colors from.
COLOR4D GetColor(int aLayer) const
void SaveColorSettings(COLOR_SETTINGS *aSettings, const std::string &aNamespace="")
Safely saves a COLOR_SETTINGS to disk, preserving any changes outside the given namespace.
bool IsReadOnly() const
Definition: json_settings.h:74
Color settings are a bit different than most of the settings objects in that there can be more than o...
virtual bool validateSave(bool aQuiet=false)
Performs a pre-save validation of the current color theme.
void SetColor(int aLayer, COLOR4D aColor)

References COLOR_SETTINGS::GetColor(), SETTINGS_MANAGER::GetColorSettings(), JSON_SETTINGS::GetFilename(), JSON_SETTINGS::IsReadOnly(), m_colorNamespace, m_currentSettings, PANEL_COLOR_SETTINGS_BASE::m_optOverrideColors, m_validLayers, Pgm(), SETTINGS_MANAGER::SaveColorSettings(), COLOR_SETTINGS::SetColor(), COLOR_SETTINGS::SetOverrideSchItemColors(), and validateSave().

Referenced by OnThemeChanged(), PANEL_EESCHEMA_COLOR_SETTINGS::saveCurrentTheme(), and updateColor().

◆ Show()

bool PANEL_COLOR_SETTINGS::Show ( bool  show)
override

Definition at line 82 of file panel_color_settings.cpp.

83 {
84  if( show )
85  {
86  // In case changes have been made to the current theme in another panel:
87  int idx = m_cbTheme->GetSelection();
88  COLOR_SETTINGS* settings = static_cast<COLOR_SETTINGS*>( m_cbTheme->GetClientData( idx ) );
89 
90  if( settings )
91  *m_currentSettings = *settings;
92 
95  }
96 
97  return PANEL_COLOR_SETTINGS_BASE::Show( show );
98 }
virtual void onNewThemeSelected()
Event fired when a new theme is selected that can be overridden in children.
COLOR_SETTINGS * m_currentSettings
Color settings are a bit different than most of the settings objects in that there can be more than o...

References PANEL_COLOR_SETTINGS_BASE::m_cbTheme, m_currentSettings, onNewThemeSelected(), and updateSwatches().

◆ ShowColorContextMenu()

void PANEL_COLOR_SETTINGS::ShowColorContextMenu ( wxMouseEvent &  aEvent,
int  aLayer 
)
protected

Definition at line 271 of file panel_color_settings.cpp.

272 {
273  auto selected =
274  static_cast<COLOR_SETTINGS*>( m_cbTheme->GetClientData( m_cbTheme->GetSelection() ) );
275 
276  COLOR4D current = m_currentSettings->GetColor( aLayer );
277  COLOR4D saved = selected->GetColor( aLayer );
278  bool readOnly = m_currentSettings->IsReadOnly();
279 
280  wxMenu menu;
281 
282  AddMenuItem( &menu, ID_COPY, _( "Copy color" ), KiBitmap( copy_xpm ) );
283 
284  if( !readOnly && m_copied != COLOR4D::UNSPECIFIED )
285  AddMenuItem( &menu, ID_PASTE, _( "Paste color" ), KiBitmap( paste_xpm ) );
286 
287  if( !readOnly && current != saved )
288  AddMenuItem( &menu, ID_REVERT, _( "Revert to saved color" ), KiBitmap( undo_xpm ) );
289 
290  menu.Bind( wxEVT_COMMAND_MENU_SELECTED,
291  [&]( wxCommandEvent& aCmd )
292  {
293  switch( aCmd.GetId() )
294  {
295  case ID_COPY:
296  m_copied = current;
297  break;
298 
299  case ID_PASTE:
300  updateColor( aLayer, m_copied );
301  break;
302 
303  case ID_REVERT:
304  updateColor( aLayer, saved );
305  break;
306 
307  default:
308  aCmd.Skip();
309  }
310  } );
311 
312  PopupMenu( &menu );
313 }
wxMenuItem * AddMenuItem(wxMenu *aMenu, int aId, const wxString &aText, const wxBitmap &aImage, wxItemKind aType=wxITEM_NORMAL)
Function AddMenuItem is an inline helper function to create and insert a menu item with an icon into ...
Definition: bitmap.cpp:234
void updateColor(int aLayer, const KIGFX::COLOR4D &aColor)
wxBitmap KiBitmap(BITMAP_DEF aBitmap)
Construct a wxBitmap from a memory record, held in a BITMAP_DEF.
Definition: bitmap.cpp:82
COLOR_SETTINGS * m_currentSettings
const BITMAP_OPAQUE copy_xpm[1]
Definition: copy.cpp:62
const BITMAP_OPAQUE paste_xpm[1]
Definition: paste.cpp:77
COLOR4D GetColor(int aLayer) const
#define _(s)
Definition: 3d_actions.cpp:33
bool IsReadOnly() const
Definition: json_settings.h:74
const BITMAP_OPAQUE undo_xpm[1]
Definition: undo.cpp:74
COLOR4D is the color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:100

References _, AddMenuItem(), copy_xpm, COLOR_SETTINGS::GetColor(), ID_COPY, ID_PASTE, ID_REVERT, JSON_SETTINGS::IsReadOnly(), KiBitmap(), PANEL_COLOR_SETTINGS_BASE::m_cbTheme, m_copied, m_currentSettings, paste_xpm, undo_xpm, and updateColor().

Referenced by createSwatch().

◆ updateColor()

void PANEL_COLOR_SETTINGS::updateColor ( int  aLayer,
const KIGFX::COLOR4D aColor 
)
protected

Definition at line 326 of file panel_color_settings.cpp.

327 {
328  if( m_currentSettings )
329  m_currentSettings->SetColor( aLayer, aColor );
330 
331  // Colors must be persisted when edited because multiple PANEL_COLOR_SETTINGS could be
332  // referring to the same theme.
333  saveCurrentTheme( false );
334 
335  m_swatches[aLayer]->SetSwatchColor( aColor, false );
336 
337  if( m_currentSettings && aLayer == m_backgroundLayer )
338  {
340 
341  for( std::pair<int, COLOR_SWATCH*> pair : m_swatches )
342  pair.second->SetSwatchBackground( background );
343  }
344 
345  onColorChanged();
346 }
virtual bool saveCurrentTheme(bool aValidate)
std::map< int, COLOR_SWATCH * > m_swatches
COLOR_SETTINGS * m_currentSettings
virtual void onColorChanged()
Event fired when the user changes any color.
COLOR4D GetColor(int aLayer) const
void SetColor(int aLayer, COLOR4D aColor)
COLOR4D is the color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:100

References COLOR_SETTINGS::GetColor(), m_backgroundLayer, m_currentSettings, m_swatches, onColorChanged(), saveCurrentTheme(), and COLOR_SETTINGS::SetColor().

Referenced by OnColorChanged(), and ShowColorContextMenu().

◆ updateSwatches()

void PANEL_COLOR_SETTINGS::updateSwatches ( )
protected

Definition at line 184 of file panel_color_settings.cpp.

185 {
186  bool isReadOnly = m_currentSettings->IsReadOnly();
188 
189  for( std::pair<int, COLOR_SWATCH*> pair : m_swatches )
190  {
191  pair.second->SetSwatchBackground( background );
192  pair.second->SetSwatchColor( m_currentSettings->GetColor( pair.first ), false );
193  pair.second->SetReadOnly( isReadOnly );
194  }
195 }
std::map< int, COLOR_SWATCH * > m_swatches
COLOR_SETTINGS * m_currentSettings
COLOR4D GetColor(int aLayer) const
bool IsReadOnly() const
Definition: json_settings.h:74
COLOR4D is the color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:100

References COLOR_SETTINGS::GetColor(), JSON_SETTINGS::IsReadOnly(), m_backgroundLayer, m_currentSettings, and m_swatches.

Referenced by OnThemeChanged(), and Show().

◆ validateSave()

virtual bool PANEL_COLOR_SETTINGS::validateSave ( bool  aQuiet = false)
inlineprotectedvirtual

Performs a pre-save validation of the current color theme.

Parameters
aQuietwill suppress any warning output (prompt dialogs)
Returns
true if save is allowed

Reimplemented in PANEL_EESCHEMA_COLOR_SETTINGS.

Definition at line 80 of file panel_color_settings.h.

81  {
82  return true;
83  }

Referenced by saveCurrentTheme().

Member Data Documentation

◆ m_backgroundLayer

◆ m_btnOpenFolder

wxButton* PANEL_COLOR_SETTINGS_BASE::m_btnOpenFolder
protectedinherited

◆ m_cbTheme

◆ m_colorNamespace

std::string PANEL_COLOR_SETTINGS::m_colorNamespace
protected

A namespace that will be passed to SETTINGS_MANAGER::SaveColorSettings.

This should be set to the appropriate namespace in the application-specific constructor

Definition at line 118 of file panel_color_settings.h.

Referenced by PANEL_EESCHEMA_COLOR_SETTINGS::PANEL_EESCHEMA_COLOR_SETTINGS(), PANEL_FP_EDITOR_COLOR_SETTINGS::PANEL_FP_EDITOR_COLOR_SETTINGS(), PANEL_PCBNEW_COLOR_SETTINGS::PANEL_PCBNEW_COLOR_SETTINGS(), and saveCurrentTheme().

◆ m_colorsGridSizer

◆ m_colorsListWindow

◆ m_colorsMainSizer

◆ m_copied

KIGFX::COLOR4D PANEL_COLOR_SETTINGS::m_copied
protected

Definition at line 100 of file panel_color_settings.h.

Referenced by ShowColorContextMenu().

◆ m_currentSettings

◆ m_labels

std::map<int, wxStaticText*> PANEL_COLOR_SETTINGS::m_labels
protected

◆ m_mainSizer

wxBoxSizer* PANEL_COLOR_SETTINGS_BASE::m_mainSizer
protectedinherited

◆ m_optOverrideColors

◆ m_staticline2

wxStaticLine* PANEL_COLOR_SETTINGS_BASE::m_staticline2
protectedinherited

◆ m_staticText9

wxStaticText* PANEL_COLOR_SETTINGS_BASE::m_staticText9
protectedinherited

◆ m_swatches

std::map<int, COLOR_SWATCH*> PANEL_COLOR_SETTINGS::m_swatches
protected

◆ m_validLayers

std::vector<int> PANEL_COLOR_SETTINGS::m_validLayers
protected

A list of layer IDs that are valid for the current color settings dialog.

Valid colors will be shown for editing and are the set of colors that actions like resetting to defaults will apply to.

This list must be filled in the application-specific color settings panel constructors.

Definition at line 110 of file panel_color_settings.h.

Referenced by PANEL_FP_EDITOR_COLOR_SETTINGS::createSwatches(), PANEL_PCBNEW_COLOR_SETTINGS::createSwatches(), OnThemeChanged(), PANEL_EESCHEMA_COLOR_SETTINGS::PANEL_EESCHEMA_COLOR_SETTINGS(), PANEL_FP_EDITOR_COLOR_SETTINGS::PANEL_FP_EDITOR_COLOR_SETTINGS(), PANEL_PCBNEW_COLOR_SETTINGS::PANEL_PCBNEW_COLOR_SETTINGS(), PANEL_EESCHEMA_COLOR_SETTINGS::saveCurrentTheme(), and saveCurrentTheme().


The documentation for this class was generated from the following files: