KiCad PCB EDA Suite
PANEL_PCBNEW_COLOR_SETTINGS Class Reference

#include <panel_pcbnew_color_settings.h>

Inheritance diagram for PANEL_PCBNEW_COLOR_SETTINGS:
PANEL_COLOR_SETTINGS PANEL_COLOR_SETTINGS_BASE RESETTABLE_PANEL

Public Member Functions

 PANEL_PCBNEW_COLOR_SETTINGS (wxWindow *aParent, BOARD *aBoard)
 
 ~PANEL_PCBNEW_COLOR_SETTINGS () override
 
void ResetPanel () override
 Reset the contents of this panel. More...
 
virtual wxString GetResetTooltip () const override
 Get the tooltip the reset button should display when showing this panel. More...
 
bool Show (bool show) override
 
wxString GetHelpTextAtPoint (const wxPoint &aPt, wxHelpEvent::Origin aOrigin) const override
 Overridden to supply the reset button tooltip when queried with { -INT_MAX, INT_MAX }. More...
 

Public Attributes

wxCheckBox * m_optOverrideColors
 

Protected Types

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

Protected Member Functions

bool TransferDataFromWindow () override
 
bool TransferDataToWindow () override
 
void OnSize (wxSizeEvent &aEvent) override
 
void onNewThemeSelected () override
 Event fired when a new theme is selected that can be overridden in children. More...
 
void onColorChanged () override
 Event fired when the user changes any color. More...
 
void createSwatches () override
 
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)
 Builds the theme listbox and sets the selection to the current theme. More...
 
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 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
 
wxBoxSizer * m_previewPanelSizer
 

Private Member Functions

void createPreviewItems ()
 
void updatePreview ()
 
void zoomFitPreview ()
 

Private Attributes

FOOTPRINT_PREVIEW_PANELm_preview
 
PAGE_INFOm_page
 
TITLE_BLOCKm_titleBlock
 
BOARDm_board
 

Detailed Description

Definition at line 31 of file panel_pcbnew_color_settings.h.

Member Enumeration Documentation

◆ COLOR_CONTEXT_ID

Constructor & Destructor Documentation

◆ PANEL_PCBNEW_COLOR_SETTINGS()

PANEL_PCBNEW_COLOR_SETTINGS::PANEL_PCBNEW_COLOR_SETTINGS ( wxWindow *  aParent,
BOARD aBoard 
)

Definition at line 372 of file panel_pcbnew_color_settings.cpp.

373 : PANEL_COLOR_SETTINGS( aParent ),
374 m_preview( nullptr ),
375 m_page( nullptr ),
376 m_titleBlock( nullptr ),
377 m_board( aBoard )
378{
379 m_colorNamespace = "board";
380
381 SETTINGS_MANAGER& mgr = Pgm().GetSettingsManager();
382 PCBNEW_SETTINGS* app_settings = mgr.GetAppSettings<PCBNEW_SETTINGS>();
383 COLOR_SETTINGS* current = mgr.GetColorSettings( app_settings->m_ColorTheme );
384
385 // Saved theme doesn't exist? Reset to default
386 if( current->GetFilename() != app_settings->m_ColorTheme )
387 app_settings->m_ColorTheme = current->GetFilename();
388
389 createThemeList( app_settings->m_ColorTheme );
390
391 // Currently this only applies to eeschema
392 m_optOverrideColors->Hide();
393
394 m_currentSettings = new COLOR_SETTINGS( *current );
395
396 for( int id = GAL_LAYER_ID_START; id < GAL_LAYER_ID_BITMASK_END; id++ )
397 {
398 if( g_excludedLayers.count( id ) )
399 continue;
400
401 m_validLayers.push_back( id );
402 }
403
406 m_validLayers.push_back( LAYER_PAGE_LIMITS );
407
408 // NOTE: Main board layers are added by createSwatches()
409
411}
wxString m_ColorTheme
Active color theme name.
Definition: app_settings.h:184
Color settings are a bit different than most of the settings objects in that there can be more than o...
void createThemeList(const wxString &aCurrent)
Builds the theme listbox and sets the selection to the current theme.
std::vector< int > m_validLayers
A list of layer IDs that are valid for the current color settings dialog.
std::string m_colorNamespace
A namespace that will be passed to SETTINGS_MANAGER::SaveColorSettings.
COLOR_SETTINGS * m_currentSettings
PANEL_COLOR_SETTINGS(wxWindow *aParent)
FOOTPRINT_PREVIEW_PANEL * m_preview
T * GetAppSettings(bool aLoadNow=true)
Returns a handle to the a given settings by type If the settings have already been loaded,...
COLOR_SETTINGS * GetColorSettings(const wxString &aName="user")
Retrieves a color settings object that applications can read colors from.
@ GAL_LAYER_ID_START
Definition: layer_ids.h:191
@ LAYER_PAGE_LIMITS
color for drawing the page extents (visibility stored in PCBNEW_SETTINGS::m_ShowPageLimits)
Definition: layer_ids.h:249
@ LAYER_LOCKED_ITEM_SHADOW
shadow layer for locked items
Definition: layer_ids.h:239
@ LAYER_CONFLICTS_SHADOW
shadow layer for items flagged conficting
Definition: layer_ids.h:241
@ LAYER_PCB_BACKGROUND
PCB background color.
Definition: layer_ids.h:220
@ GAL_LAYER_ID_BITMASK_END
This is the end of the layers used for visibility bit masks in Pcbnew.
Definition: layer_ids.h:226
std::set< int > g_excludedLayers
KIWAY Kiway & Pgm(), KFCTL_STANDALONE
The global Program "get" accessor.
Definition: single_top.cpp:111

References PANEL_COLOR_SETTINGS::createThemeList(), g_excludedLayers, GAL_LAYER_ID_BITMASK_END, GAL_LAYER_ID_START, SETTINGS_MANAGER::GetAppSettings(), SETTINGS_MANAGER::GetColorSettings(), LAYER_CONFLICTS_SHADOW, LAYER_LOCKED_ITEM_SHADOW, LAYER_PAGE_LIMITS, LAYER_PCB_BACKGROUND, PANEL_COLOR_SETTINGS::m_backgroundLayer, PANEL_COLOR_SETTINGS::m_colorNamespace, APP_SETTINGS_BASE::m_ColorTheme, PANEL_COLOR_SETTINGS::m_currentSettings, PANEL_COLOR_SETTINGS_BASE::m_optOverrideColors, PANEL_COLOR_SETTINGS::m_validLayers, and Pgm().

◆ ~PANEL_PCBNEW_COLOR_SETTINGS()

PANEL_PCBNEW_COLOR_SETTINGS::~PANEL_PCBNEW_COLOR_SETTINGS ( )
override

Definition at line 414 of file panel_pcbnew_color_settings.cpp.

415{
416 delete m_page;
417 delete m_titleBlock;
418 delete m_currentSettings;
419}

References PANEL_COLOR_SETTINGS::m_currentSettings, m_page, and m_titleBlock.

Member Function Documentation

◆ createPreviewItems()

void PANEL_PCBNEW_COLOR_SETTINGS::createPreviewItems ( )
private

Definition at line 479 of file panel_pcbnew_color_settings.cpp.

480{
483 m_titleBlock->SetTitle( _( "Color Preview" ) );
484 m_titleBlock->SetDate( wxDateTime::Now().FormatDate() );
485
486 m_page->SetHeightMils( 5000 );
487 m_page->SetWidthMils( 6000 );
488
489 STRING_LINE_READER reader( g_previewBoard, wxT( "preview" ) );
490 PCB_PLUGIN pi;
491
492 try
493 {
494 pi.DoLoad( reader, m_preview->GetBoard(), nullptr, nullptr, 0 );
495 }
496 catch( const IO_ERROR& )
497 {
498 return;
499 }
500
503
504 DS_PROXY_VIEW_ITEM* drawingSheet = new DS_PROXY_VIEW_ITEM( (int) IU_PER_MILS, m_page, nullptr,
505 m_titleBlock );
506 drawingSheet->SetIsFirstPage( true );
507 drawingSheet->SetColorLayer( LAYER_DRAWINGSHEET );
509 m_preview->SetDrawingSheet( drawingSheet );
510
512}
void SetPageBorderColorLayer(int aLayerId)
Overrides the layer used to pick the color of the page border (normally LAYER_GRID)
void SetIsFirstPage(bool aIsFirstPage)
Change if this is first page.
void SetColorLayer(int aLayerId)
Can be used to override which layer ID is used for drawing sheet item colors.
Hold an error message and may be used when throwing exceptions containing meaningful error messages.
Definition: ki_exception.h:76
Describe the page size and margins of a paper page on which to eventually print or plot.
Definition: page_info.h:54
void SetWidthMils(int aWidthInMils)
Definition: page_info.cpp:243
static const wxChar Custom[]
"User" defined page type
Definition: page_info.h:77
void SetHeightMils(int aHeightInMils)
Definition: page_info.cpp:257
void UpdateColors()
Update the color settings in the painter and GAL.
void SetDrawingSheet(DS_PROXY_VIEW_ITEM *aDrawingSheet)
Sets (or updates) drawing-sheet used by the draw panel.
void DisplayBoard(BOARD *aBoard, PROGRESS_REPORTER *aReporter=nullptr)
Add all items from the current board to the VIEW, so they can be displayed by GAL.
A PLUGIN derivation for saving and loading Pcbnew s-expression formatted files.
Definition: pcb_plugin.h:164
BOARD * DoLoad(LINE_READER &aReader, BOARD *aAppendToMe, const PROPERTIES *aProperties, PROGRESS_REPORTER *aProgressReporter, unsigned aLineCount)
Is a LINE_READER that reads from a multiline 8 bit wide std::string.
Definition: richio.h:241
Hold the information shown in the lower right corner of a plot, printout, or editing view.
Definition: title_block.h:41
void SetTitle(const wxString &aTitle)
Definition: title_block.h:58
void SetDate(const wxString &aDate)
Set the date field, and defaults to the current time and date.
Definition: title_block.h:71
#define _(s)
@ LAYER_DRAWINGSHEET
drawingsheet frame and titleblock
Definition: layer_ids.h:217
std::string g_previewBoard
#define IU_PER_MILS
Definition: plotter.cpp:129

References _, PAGE_INFO::Custom, PCB_DRAW_PANEL_GAL::DisplayBoard(), PCB_PLUGIN::DoLoad(), g_previewBoard, FOOTPRINT_PREVIEW_PANEL::GetBoard(), IU_PER_MILS, LAYER_DRAWINGSHEET, LAYER_PAGE_LIMITS, m_page, m_preview, m_titleBlock, DS_PROXY_VIEW_ITEM::SetColorLayer(), TITLE_BLOCK::SetDate(), PCB_DRAW_PANEL_GAL::SetDrawingSheet(), PAGE_INFO::SetHeightMils(), DS_PROXY_VIEW_ITEM::SetIsFirstPage(), DS_PROXY_VIEW_ITEM::SetPageBorderColorLayer(), TITLE_BLOCK::SetTitle(), PAGE_INFO::SetWidthMils(), PCB_DRAW_PANEL_GAL::UpdateColors(), and zoomFitPreview().

Referenced by createSwatches().

◆ createSwatch()

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

Definition at line 239 of file panel_color_settings.cpp.

240{
241 wxStaticText* label = new wxStaticText( m_colorsListWindow, wxID_ANY, aName );
242
243 // The previously selected theme can be deleted and cannot be selected.
244 // so select the default theme (first theme of the list)
245 if( m_cbTheme->GetSelection() < 0 )
246 {
247 m_cbTheme->SetSelection( 0 );
249 }
250
251 void* clientData = m_cbTheme->GetClientData( m_cbTheme->GetSelection() );
252 COLOR_SETTINGS* selected = static_cast<COLOR_SETTINGS*>( clientData );
253
254 int id = FIRST_BUTTON_ID + aLayer;
255 COLOR4D defaultColor = selected->GetDefaultColor( aLayer );
258
259 COLOR_SWATCH* swatch = new COLOR_SWATCH( m_colorsListWindow, color, id, backgroundColor,
260 defaultColor, SWATCH_MEDIUM );
261 swatch->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
262
263 m_colorsGridSizer->Add( label, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_LEFT | wxLEFT, 5 );
264 m_colorsGridSizer->Add( swatch, 0, wxALIGN_CENTER_VERTICAL | wxALL, 3 );
265
266 m_labels[aLayer] = label;
267 m_swatches[aLayer] = swatch;
268
269 swatch->Bind( wxEVT_RIGHT_DOWN,
270 [&, aLayer]( wxMouseEvent& aEvent )
271 {
272 ShowColorContextMenu( aEvent, aLayer );
273 } );
274
275 swatch->Bind( COLOR_SWATCH_CHANGED, &PANEL_COLOR_SETTINGS::OnColorChanged, this );
276}
int color
Definition: DXF_plotter.cpp:57
COLOR4D GetColor(int aLayer) const
COLOR4D GetDefaultColor(int aLayer)
A simple color swatch of the kind used to set layer colors.
Definition: color_swatch.h:57
A color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:104
void OnColorChanged(wxCommandEvent &aEvent)
std::map< int, wxStaticText * > m_labels
virtual void onNewThemeSelected()
Event fired when a new theme is selected that can be overridden in children.
void ShowColorContextMenu(wxMouseEvent &aEvent, int aLayer)
std::map< int, COLOR_SWATCH * > m_swatches
@ SWATCH_MEDIUM
Definition: color_swatch.h:41
constexpr int FIRST_BUTTON_ID

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

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

◆ createSwatches()

void PANEL_PCBNEW_COLOR_SETTINGS::createSwatches ( )
overrideprotectedvirtual

Implements PANEL_COLOR_SETTINGS.

Definition at line 439 of file panel_pcbnew_color_settings.cpp.

440{
441 std::sort( m_validLayers.begin(), m_validLayers.end(),
442 []( int a, int b )
443 {
444 return LayerName( a ) < LayerName( b );
445 } );
446
447 // Don't sort aBoard layers by name
448 for( int i = PCBNEW_LAYER_ID_START; i <= User_9; ++i )
449 m_validLayers.insert( m_validLayers.begin() + i, i );
450
451 for( int layer : m_validLayers )
452 {
453 wxString name = LayerName( layer );
454
455 if( m_board && layer >= PCBNEW_LAYER_ID_START && layer < PCB_LAYER_ID_COUNT )
456 name = m_board->GetLayerName( static_cast<PCB_LAYER_ID>( layer ) );
457
458 createSwatch( layer, name );
459 }
460
461 m_preview = FOOTPRINT_PREVIEW_PANEL::New( nullptr, this );
462 m_preview->GetGAL()->SetAxesEnabled( false );
463
464 m_previewPanelSizer->Add( m_preview, 1, wxALL | wxEXPAND, 5 );
465
467 Layout();
470}
const char * name
Definition: DXF_plotter.cpp:56
const wxString GetLayerName(PCB_LAYER_ID aLayer) const
Return the name of a aLayer.
Definition: board.cpp:397
KIGFX::GAL * GetGAL() const
Return a pointer to the GAL instance used in the panel.
static FOOTPRINT_PREVIEW_PANEL * New(KIWAY *aKiway, wxWindow *aParent)
void SetAxesEnabled(bool aAxesEnabled)
Enable drawing the axes.
void createSwatch(int aLayer, const wxString &aName)
wxString LayerName(int aLayer)
Returns the default display name for a given layer.
Definition: layer_id.cpp:30
PCB_LAYER_ID
A quick note on layer IDs:
Definition: layer_ids.h:59
@ PCBNEW_LAYER_ID_START
Definition: layer_ids.h:63
@ User_9
Definition: layer_ids.h:131
@ PCB_LAYER_ID_COUNT
Definition: layer_ids.h:137

References createPreviewItems(), PANEL_COLOR_SETTINGS::createSwatch(), EDA_DRAW_PANEL_GAL::GetGAL(), BOARD::GetLayerName(), LayerName(), m_board, m_preview, PANEL_COLOR_SETTINGS_BASE::m_previewPanelSizer, PANEL_COLOR_SETTINGS::m_validLayers, name, FOOTPRINT_PREVIEW_PANEL::New(), PCB_LAYER_ID_COUNT, PCBNEW_LAYER_ID_START, KIGFX::GAL::SetAxesEnabled(), updatePreview(), User_9, and zoomFitPreview().

◆ createThemeList()

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

Builds the theme listbox and sets the selection to the current theme.

Parameters
aCurrentis the filename of the current color theme (no extension)

Definition at line 206 of file panel_color_settings.cpp.

207{
208 int width = 0;
209 int height = 0;
210
211 m_cbTheme->GetTextExtent( _( "New Theme..." ), &width, &height );
212 int minwidth = width;
213
214 m_cbTheme->Clear();
215
216 for( COLOR_SETTINGS* settings : Pgm().GetSettingsManager().GetColorSettingsList() )
217 {
218 wxString name = settings->GetName();
219
220 if( settings->IsReadOnly() )
221 name += wxS( " " ) + _( "(read-only)" );
222
223 int pos = m_cbTheme->Append( name, static_cast<void*>( settings ) );
224
225 if( settings->GetFilename() == aCurrent )
226 m_cbTheme->SetSelection( pos );
227
228 m_cbTheme->GetTextExtent( name, &width, &height );
229 minwidth = std::max( minwidth, width );
230 }
231
232 m_cbTheme->Append( wxT( "---" ) );
233 m_cbTheme->Append( _( "New Theme..." ) );
234
235 m_cbTheme->SetMinSize( wxSize( minwidth + 50, -1 ) );
236}
SETTINGS_MANAGER * GetSettingsManager()

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

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

◆ GetHelpTextAtPoint()

wxString RESETTABLE_PANEL::GetHelpTextAtPoint ( const wxPoint &  aPt,
wxHelpEvent::Origin  aOrigin 
) const
inlineoverrideinherited

Overridden to supply the reset button tooltip when queried with { -INT_MAX, INT_MAX }.

Definition at line 72 of file resettable_panel.h.

73 {
74 if( aPt == wxPoint( -INT_MAX, INT_MAX ) )
75 return GetResetTooltip();
76 else
77 return wxPanel::GetHelpTextAtPoint( aPt, aOrigin );
78 }
virtual wxString GetResetTooltip() const
Get the tooltip the reset button should display when showing this panel.

References RESETTABLE_PANEL::GetResetTooltip().

◆ GetResetTooltip()

virtual wxString PANEL_COLOR_SETTINGS::GetResetTooltip ( ) const
inlineoverridevirtualinherited

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 }

References _.

◆ OnBtnOpenThemeFolderClicked()

void PANEL_COLOR_SETTINGS::OnBtnOpenThemeFolderClicked ( wxCommandEvent &  event)
overrideprotectedvirtualinherited

Reimplemented from PANEL_COLOR_SETTINGS_BASE.

Definition at line 59 of file panel_color_settings.cpp.

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

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

◆ onColorChanged()

void PANEL_PCBNEW_COLOR_SETTINGS::onColorChanged ( )
overrideprotectedvirtual

Event fired when the user changes any color.

Reimplemented from PANEL_COLOR_SETTINGS.

Definition at line 515 of file panel_pcbnew_color_settings.cpp.

516{
518}

References updatePreview().

◆ OnColorChanged()

void PANEL_COLOR_SETTINGS::OnColorChanged ( wxCommandEvent &  aEvent)
protectedinherited

Definition at line 324 of file panel_color_settings.cpp.

325{
326 COLOR_SWATCH* swatch = static_cast<COLOR_SWATCH*>( aEvent.GetEventObject() );
327 COLOR4D newColor = swatch->GetSwatchColor();
328 int layer = static_cast<SCH_LAYER_ID>( swatch->GetId() - FIRST_BUTTON_ID );
329
330 updateColor( layer, newColor );
331}
KIGFX::COLOR4D GetSwatchColor() const
void updateColor(int aLayer, const KIGFX::COLOR4D &aColor)
SCH_LAYER_ID
Eeschema drawing layers.
Definition: layer_ids.h:341

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

Referenced by PANEL_COLOR_SETTINGS::createSwatch().

◆ OnLeftDownTheme()

void PANEL_COLOR_SETTINGS::OnLeftDownTheme ( wxMouseEvent &  event)
overrideprotectedvirtualinherited

Reimplemented from PANEL_COLOR_SETTINGS_BASE.

Definition at line 103 of file panel_color_settings.cpp.

104{
105 // Lazy rebuild of theme menu to catch any colour theme changes made in other panels
107
108 event.Skip();
109}
wxString GetFilename() const
Definition: json_settings.h:72

References PANEL_COLOR_SETTINGS::createThemeList(), JSON_SETTINGS::GetFilename(), and PANEL_COLOR_SETTINGS::m_currentSettings.

◆ onNewThemeSelected()

void PANEL_PCBNEW_COLOR_SETTINGS::onNewThemeSelected ( )
overrideprotectedvirtual

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

Reimplemented from PANEL_COLOR_SETTINGS.

Definition at line 473 of file panel_pcbnew_color_settings.cpp.

474{
476}

References updatePreview().

◆ OnOverrideItemColorsClicked()

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

◆ OnSize()

void PANEL_PCBNEW_COLOR_SETTINGS::OnSize ( wxSizeEvent &  aEvent)
overrideprotectedvirtual

Reimplemented from PANEL_COLOR_SETTINGS_BASE.

Definition at line 570 of file panel_pcbnew_color_settings.cpp.

571{
573 aEvent.Skip();
574}

References zoomFitPreview().

◆ OnThemeChanged()

void PANEL_COLOR_SETTINGS::OnThemeChanged ( wxCommandEvent &  aEvent)
overrideprotectedvirtualinherited

Reimplemented from PANEL_COLOR_SETTINGS_BASE.

Definition at line 112 of file panel_color_settings.cpp.

113{
114 int idx = m_cbTheme->GetSelection();
115
116 if( idx == static_cast<int>( m_cbTheme->GetCount() ) - 2 )
117 {
118 // separator; re-select active theme
119 m_cbTheme->SetStringSelection( m_currentSettings->GetName() );
120 return;
121 }
122
123 if( idx == (int)m_cbTheme->GetCount() - 1 )
124 {
125 // New Theme...
126
127 if( !saveCurrentTheme( false ) )
128 return;
129
130 FOOTPRINT_NAME_VALIDATOR themeNameValidator;
131 wxTextEntryDialog dlg( this, _( "New theme name:" ), _( "Add Color Theme" ) );
132 dlg.SetTextValidator( themeNameValidator );
133
134 if( dlg.ShowModal() != wxID_OK )
135 return;
136
137 wxString themeName = dlg.GetValue();
138 wxFileName fn( themeName + wxT( ".json" ) );
140
141 if( fn.Exists() )
142 {
143 wxMessageBox( _( "Theme already exists!" ) );
144 return;
145 }
146
147 SETTINGS_MANAGER& settingsMgr = Pgm().GetSettingsManager();
148 COLOR_SETTINGS* newSettings = settingsMgr.AddNewColorSettings( themeName );
149 newSettings->SetName( themeName );
150 newSettings->SetReadOnly( false );
151
152 for( int layer : m_validLayers )
153 newSettings->SetColor( layer, m_currentSettings->GetColor( layer ) );
154
155 newSettings->SaveToFile( settingsMgr.GetPathForSettingsFile( newSettings ) );
156
157 idx = m_cbTheme->Insert( themeName, idx - 1, static_cast<void*>( newSettings ) );
158 m_cbTheme->SetSelection( idx );
159
160 m_optOverrideColors->SetValue( newSettings->GetOverrideSchItemColors() );
161
162 *m_currentSettings = *newSettings;
165 }
166 else
167 {
168 COLOR_SETTINGS* selected = static_cast<COLOR_SETTINGS*>( m_cbTheme->GetClientData( idx ) );
169
170 if( selected->GetFilename() != m_currentSettings->GetFilename() )
171 {
172 if( !saveCurrentTheme( false ) )
173 return;
174
175 m_optOverrideColors->SetValue( selected->GetOverrideSchItemColors() );
176
177 *m_currentSettings = *selected;
180 }
181 }
182}
void SetName(const wxString &aName)
void SetColor(int aLayer, const COLOR4D &aColor)
bool GetOverrideSchItemColors() const
const wxString & GetName() const
This class provides a custom wxValidator object for limiting the allowable characters when defining f...
Definition: validators.h:64
void SetReadOnly(bool aReadOnly)
Definition: json_settings.h:84
virtual bool SaveToFile(const wxString &aDirectory="", bool aForce=false)
virtual bool saveCurrentTheme(bool aValidate)
wxString GetPathForSettingsFile(JSON_SETTINGS *aSettings)
Returns the path a given settings file should be loaded from / stored to.
COLOR_SETTINGS * AddNewColorSettings(const wxString &aFilename)
Registers a new color settings object with the given filename.

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, PANEL_COLOR_SETTINGS::m_currentSettings, PANEL_COLOR_SETTINGS_BASE::m_optOverrideColors, PANEL_COLOR_SETTINGS::m_validLayers, PANEL_COLOR_SETTINGS::onNewThemeSelected(), Pgm(), PANEL_COLOR_SETTINGS::saveCurrentTheme(), JSON_SETTINGS::SaveToFile(), COLOR_SETTINGS::SetColor(), COLOR_SETTINGS::SetName(), JSON_SETTINGS::SetReadOnly(), and PANEL_COLOR_SETTINGS::updateSwatches().

◆ ResetPanel()

void PANEL_PCBNEW_COLOR_SETTINGS::ResetPanel ( )
overridevirtual

Reset the contents of this panel.

Reimplemented from PANEL_COLOR_SETTINGS.

Definition at line 521 of file panel_pcbnew_color_settings.cpp.

522{
525}
virtual void ResetPanel() override
Reset the contents of this panel.

References PANEL_COLOR_SETTINGS::ResetPanel(), and updatePreview().

◆ saveCurrentTheme()

bool PANEL_COLOR_SETTINGS::saveCurrentTheme ( bool  aValidate)
protectedvirtualinherited

Reimplemented in PANEL_EESCHEMA_COLOR_SETTINGS.

Definition at line 357 of file panel_color_settings.cpp.

358{
360 return true;
361
362 if( aValidate && !validateSave() )
363 return false;
364
365 SETTINGS_MANAGER& settingsMgr = Pgm().GetSettingsManager();
366 COLOR_SETTINGS* selected = settingsMgr.GetColorSettings( m_currentSettings->GetFilename() );
367
368 selected->SetOverrideSchItemColors( m_optOverrideColors->GetValue() );
369
370 for( int layer : m_validLayers )
371 selected->SetColor( layer, m_currentSettings->GetColor( layer ) );
372
373 settingsMgr.SaveColorSettings( selected, m_colorNamespace );
374
375 return true;
376}
void SetOverrideSchItemColors(bool aFlag)
bool IsReadOnly() const
Definition: json_settings.h:83
virtual bool validateSave(bool aQuiet=false)
Performs a pre-save validation of the current color theme.
void SaveColorSettings(COLOR_SETTINGS *aSettings, const std::string &aNamespace="")
Safely saves a COLOR_SETTINGS to disk, preserving any changes outside the given namespace.

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

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

◆ Show()

bool PANEL_COLOR_SETTINGS::Show ( bool  show)
overrideinherited

Definition at line 84 of file panel_color_settings.cpp.

85{
86 if( show )
87 {
88 // In case changes have been made to the current theme in another panel:
89 int idx = m_cbTheme->GetSelection();
90 COLOR_SETTINGS* settings = static_cast<COLOR_SETTINGS*>( m_cbTheme->GetClientData( idx ) );
91
92 if( settings )
93 *m_currentSettings = *settings;
94
97 }
98
99 return PANEL_COLOR_SETTINGS_BASE::Show( show );
100}

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

◆ ShowColorContextMenu()

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

Definition at line 279 of file panel_color_settings.cpp.

280{
281 auto selected =
282 static_cast<COLOR_SETTINGS*>( m_cbTheme->GetClientData( m_cbTheme->GetSelection() ) );
283
284 COLOR4D current = m_currentSettings->GetColor( aLayer );
285 COLOR4D saved = selected->GetColor( aLayer );
286 bool readOnly = m_currentSettings->IsReadOnly();
287
288 wxMenu menu;
289
290 AddMenuItem( &menu, ID_COPY, _( "Copy color" ), KiBitmap( BITMAPS::copy ) );
291
292 if( !readOnly && m_copied != COLOR4D::UNSPECIFIED )
293 AddMenuItem( &menu, ID_PASTE, _( "Paste color" ), KiBitmap( BITMAPS::paste ) );
294
295 if( !readOnly && current != saved )
296 AddMenuItem( &menu, ID_REVERT, _( "Revert to saved color" ), KiBitmap( BITMAPS::undo ) );
297
298 menu.Bind( wxEVT_COMMAND_MENU_SELECTED,
299 [&]( wxCommandEvent& aCmd )
300 {
301 switch( aCmd.GetId() )
302 {
303 case ID_COPY:
304 m_copied = current;
305 break;
306
307 case ID_PASTE:
308 updateColor( aLayer, m_copied );
309 break;
310
311 case ID_REVERT:
312 updateColor( aLayer, saved );
313 break;
314
315 default:
316 aCmd.Skip();
317 }
318 } );
319
320 PopupMenu( &menu );
321}
wxBitmap KiBitmap(BITMAPS aBitmap, int aHeightTag)
Construct a wxBitmap from an image identifier Returns the image from the active theme if the image ha...
Definition: bitmap.cpp:105
wxMenuItem * AddMenuItem(wxMenu *aMenu, int aId, const wxString &aText, const wxBitmap &aImage, wxItemKind aType=wxITEM_NORMAL)
Create and insert a menu item with an icon into aMenu.
Definition: bitmap.cpp:257

References _, AddMenuItem(), copy, COLOR_SETTINGS::GetColor(), PANEL_COLOR_SETTINGS::ID_COPY, PANEL_COLOR_SETTINGS::ID_PASTE, PANEL_COLOR_SETTINGS::ID_REVERT, JSON_SETTINGS::IsReadOnly(), KiBitmap(), PANEL_COLOR_SETTINGS_BASE::m_cbTheme, PANEL_COLOR_SETTINGS::m_copied, PANEL_COLOR_SETTINGS::m_currentSettings, paste, and undo.

Referenced by PANEL_COLOR_SETTINGS::createSwatch().

◆ TransferDataFromWindow()

bool PANEL_PCBNEW_COLOR_SETTINGS::TransferDataFromWindow ( )
overrideprotected

◆ TransferDataToWindow()

bool PANEL_PCBNEW_COLOR_SETTINGS::TransferDataToWindow ( )
overrideprotected

Definition at line 432 of file panel_pcbnew_color_settings.cpp.

433{
435 return true;
436}

References zoomFitPreview().

◆ updateColor()

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

Definition at line 334 of file panel_color_settings.cpp.

335{
337 m_currentSettings->SetColor( aLayer, aColor );
338
339 // Colors must be persisted when edited because multiple PANEL_COLOR_SETTINGS could be
340 // referring to the same theme.
341 saveCurrentTheme( false );
342
343 m_swatches[aLayer]->SetSwatchColor( aColor, false );
344
345 if( m_currentSettings && aLayer == m_backgroundLayer )
346 {
348
349 for( std::pair<int, COLOR_SWATCH*> pair : m_swatches )
350 pair.second->SetSwatchBackground( background );
351 }
352
354}
virtual void onColorChanged()
Event fired when the user changes any color.

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

Referenced by PANEL_COLOR_SETTINGS::OnColorChanged().

◆ updatePreview()

void PANEL_PCBNEW_COLOR_SETTINGS::updatePreview ( )
private

Definition at line 528 of file panel_pcbnew_color_settings.cpp.

529{
530 if( !m_preview )
531 return;
532
533 KIGFX::VIEW* view = m_preview->GetView();
534 auto settings = static_cast<KIGFX::PCB_RENDER_SETTINGS*>( view->GetPainter()->GetSettings() );
535 settings->LoadColors( m_currentSettings );
536
537 m_preview->GetGAL()->SetClearColor( settings->GetBackgroundColor() );
538
540 auto rect = m_preview->GetScreenRect();
541 m_preview->Refresh( true, &rect );
542}
virtual void Refresh(bool aEraseBackground=true, const wxRect *aRect=nullptr) override
Update the board display after modifying it by a python script (note: it is automatically called by a...
void SetClearColor(const COLOR4D &aColor)
virtual RENDER_SETTINGS * GetSettings()=0
Return a pointer to current settings that are going to be used when drawing items.
PCB specific render settings.
Definition: pcb_painter.h:71
void LoadColors(const COLOR_SETTINGS *aSettings) override
Hold a (potentially large) number of VIEW_ITEMs and renders them on a graphics device provided by the...
Definition: view.h:69
void UpdateAllItems(int aUpdateFlags)
Update all items in the view according to the given flags.
Definition: view.cpp:1478
PAINTER * GetPainter() const
Return the painter object used by the view for drawing #VIEW_ITEMS.
Definition: view.h:213
virtual KIGFX::PCB_VIEW * GetView() const override
Return a pointer to the #VIEW instance used in the panel.
@ COLOR
Color has changed.
Definition: view_item.h:48

References KIGFX::COLOR, EDA_DRAW_PANEL_GAL::GetGAL(), KIGFX::VIEW::GetPainter(), KIGFX::PAINTER::GetSettings(), PCB_DRAW_PANEL_GAL::GetView(), KIGFX::PCB_RENDER_SETTINGS::LoadColors(), PANEL_COLOR_SETTINGS::m_currentSettings, m_preview, EDA_DRAW_PANEL_GAL::Refresh(), KIGFX::GAL::SetClearColor(), and KIGFX::VIEW::UpdateAllItems().

Referenced by createSwatches(), onColorChanged(), onNewThemeSelected(), and ResetPanel().

◆ updateSwatches()

void PANEL_COLOR_SETTINGS::updateSwatches ( )
protectedinherited

Definition at line 185 of file panel_color_settings.cpp.

186{
187 if( m_swatches.empty() )
188 {
190 }
191 else
192 {
193 bool isReadOnly = m_currentSettings->IsReadOnly();
195
196 for( std::pair<int, COLOR_SWATCH*> pair : m_swatches )
197 {
198 pair.second->SetSwatchBackground( background );
199 pair.second->SetSwatchColor( m_currentSettings->GetColor( pair.first ), false );
200 pair.second->SetReadOnly( isReadOnly );
201 }
202 }
203}
virtual void createSwatches()=0

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

Referenced by PANEL_COLOR_SETTINGS::OnThemeChanged(), and PANEL_COLOR_SETTINGS::Show().

◆ validateSave()

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

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 85 of file panel_color_settings.h.

86 {
87 return true;
88 }

Referenced by PANEL_COLOR_SETTINGS::saveCurrentTheme().

◆ zoomFitPreview()

void PANEL_PCBNEW_COLOR_SETTINGS::zoomFitPreview ( )
private

Definition at line 545 of file panel_pcbnew_color_settings.cpp.

546{
547 if( m_preview )
548 {
549 KIGFX::VIEW* view = m_preview->GetView();
551 BOX2I defaultBox = m_preview->GetDefaultViewBBox();
552
553 view->SetScale( 1.0 );
554 VECTOR2D screenSize = view->ToWorld( m_preview->GetClientSize(), false );
555
556 if( bBox.GetWidth() == 0 || bBox.GetHeight() == 0 )
557 bBox = defaultBox;
558
559 VECTOR2D vsize = bBox.GetSize();
560 double scale = view->GetScale() / std::max( fabs( vsize.x / screenSize.x ),
561 fabs( vsize.y / screenSize.y ) );
562
563 view->SetScale( scale / 1.1 );
564 view->SetCenter( bBox.Centre() );
566 }
567}
const EDA_RECT GetBoundingBox() const override
Return the orthogonal bounding box of this object for display purposes.
Definition: board.h:781
coord_type GetHeight() const
Definition: box2.h:181
coord_type GetWidth() const
Definition: box2.h:180
Vec Centre() const
Definition: box2.h:63
const Vec & GetSize() const
Definition: box2.h:172
void ForceRefresh()
Force a redraw.
double GetScale() const
Definition: view.h:269
virtual void SetScale(double aScale, VECTOR2D aAnchor={ 0, 0 })
Set the scaling factor, zooming around a given anchor point.
Definition: view.cpp:548
VECTOR2D ToWorld(const VECTOR2D &aCoord, bool aAbsolute=true) const
Converts a screen space point/vector to a point/vector in world space coordinates.
Definition: view.cpp:445
void SetCenter(const VECTOR2D &aCenter)
Set the center point of the VIEW (i.e.
Definition: view.cpp:574
BOX2I GetDefaultViewBBox() const override
Return the bounding box of the view that should be used if model is not valid.
const int scale

References BOX2< Vec >::Centre(), EDA_DRAW_PANEL_GAL::ForceRefresh(), FOOTPRINT_PREVIEW_PANEL::GetBoard(), BOARD::GetBoundingBox(), PCB_DRAW_PANEL_GAL::GetDefaultViewBBox(), BOX2< Vec >::GetHeight(), KIGFX::VIEW::GetScale(), BOX2< Vec >::GetSize(), PCB_DRAW_PANEL_GAL::GetView(), BOX2< Vec >::GetWidth(), m_preview, scale, KIGFX::VIEW::SetCenter(), KIGFX::VIEW::SetScale(), KIGFX::VIEW::ToWorld(), VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by createPreviewItems(), createSwatches(), OnSize(), and TransferDataToWindow().

Member Data Documentation

◆ m_backgroundLayer

◆ m_board

BOARD* PANEL_PCBNEW_COLOR_SETTINGS::m_board
private

Definition at line 67 of file panel_pcbnew_color_settings.h.

Referenced by createSwatches().

◆ m_btnOpenFolder

wxButton* PANEL_COLOR_SETTINGS_BASE::m_btnOpenFolder
protectedinherited

◆ m_cbTheme

◆ m_colorNamespace

std::string PANEL_COLOR_SETTINGS::m_colorNamespace
protectedinherited

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 123 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(), and PANEL_COLOR_SETTINGS::saveCurrentTheme().

◆ m_colorsGridSizer

◆ m_colorsListWindow

◆ m_colorsMainSizer

wxBoxSizer* PANEL_COLOR_SETTINGS_BASE::m_colorsMainSizer
protectedinherited

◆ m_copied

KIGFX::COLOR4D PANEL_COLOR_SETTINGS::m_copied
protectedinherited

Definition at line 105 of file panel_color_settings.h.

Referenced by PANEL_COLOR_SETTINGS::ShowColorContextMenu().

◆ m_currentSettings

◆ m_labels

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

◆ m_mainSizer

wxBoxSizer* PANEL_COLOR_SETTINGS_BASE::m_mainSizer
protectedinherited

◆ m_optOverrideColors

◆ m_page

PAGE_INFO* PANEL_PCBNEW_COLOR_SETTINGS::m_page
private

◆ m_preview

FOOTPRINT_PREVIEW_PANEL* PANEL_PCBNEW_COLOR_SETTINGS::m_preview
private

◆ m_previewPanelSizer

wxBoxSizer* PANEL_COLOR_SETTINGS_BASE::m_previewPanelSizer
protectedinherited

◆ m_staticline2

wxStaticLine* PANEL_COLOR_SETTINGS_BASE::m_staticline2
protectedinherited

◆ m_staticText9

wxStaticText* PANEL_COLOR_SETTINGS_BASE::m_staticText9
protectedinherited

◆ m_swatches

◆ m_titleBlock

TITLE_BLOCK* PANEL_PCBNEW_COLOR_SETTINGS::m_titleBlock
private

◆ m_validLayers

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

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 115 of file panel_color_settings.h.

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


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