Split out footprint editor color settings

Migrate COLOR_SETTINGS 0->1 to remove fpedit section
Migrate FOOTPRINT_EDITOR_SETTINGS 0->1 to use new theme if created
Remove COLOR_CONTEXT that is no longer needed
This commit is contained in:
Jon Evans 2020-05-05 21:45:48 -04:00
parent 66eb84097a
commit 9916f24fab
23 changed files with 431 additions and 198 deletions

View File

@ -19,18 +19,21 @@
*/
#include <layers_id_colors_and_visibility.h>
#include <pgm_base.h>
#include <settings/color_settings.h>
#include <settings/parameters.h>
#include <settings/settings_manager.h>
extern const char* traceSettings;
///! Update the schema version whenever a migration is required
const int colorsSchemaVersion = 0;
const int colorsSchemaVersion = 1;
COLOR_SETTINGS::COLOR_SETTINGS( std::string aFilename ) :
JSON_SETTINGS( std::move( aFilename ), SETTINGS_LOC::COLORS, colorsSchemaVersion ),
m_overrideSchItemColors( false ),
m_color_context( COLOR_CONTEXT::PCB )
m_overrideSchItemColors( false )
{
m_params.emplace_back( new PARAM<wxString>( "meta.name", &m_displayName, "KiCad Default" ) );
@ -196,97 +199,6 @@ COLOR_SETTINGS::COLOR_SETTINGS( std::string aFilename ) :
CLR( "board.b_fab", B_Fab, COLOR4D( BLUE ) );
CLR( "board.f_fab", F_Fab, COLOR4D( DARKGRAY ) );
// TODO(JE) Storing fpedit colors here is a temporary hack to preserve user settings.
// Ultimately, if a user wants to have different colors for pcbnew and the footprint editor,
// they should simply choose a different named color theme for each.
// While we only have a single color theme, we need to store two mappings of all the
// pcb-related colors, one for pcbnew and one for footprint editor.
// Once color themes are supported, we should bump the schema version of COLOR_SETTINGS
// and in the migration split out the "User" theme to "User.FpEdit" or something, then set
// the User.FpEdit scheme as active for the footprint editor.
#define FL FPEDIT_LAYER_ID_START
CLR( "fpedit.anchor", FL + LAYER_ANCHOR, COLOR4D( BLUE ) );
CLR( "fpedit.aux_items", FL + LAYER_AUX_ITEMS, COLOR4D( WHITE ) );
CLR( "fpedit.background", FL + LAYER_PCB_BACKGROUND, COLOR4D( BLACK ) );
CLR( "fpedit.cursor", FL + LAYER_CURSOR, COLOR4D( WHITE ) );
CLR( "fpedit.drc_error", FL + LAYER_DRC_ERROR, COLOR4D( PURERED ) );
CLR( "fpedit.drc_warning", FL + LAYER_DRC_WARNING, COLOR4D( PUREYELLOW ) );
CLR( "fpedit.footprint_text_back", FL + LAYER_MOD_TEXT_BK, COLOR4D( BLUE ) );
CLR( "fpedit.footprint_text_front", FL + LAYER_MOD_TEXT_FR, COLOR4D( LIGHTGRAY ) );
CLR( "fpedit.footprint_text_invisible", FL + LAYER_MOD_TEXT_INVISIBLE, COLOR4D( LIGHTGRAY ) );
CLR( "fpedit.grid", FL + LAYER_GRID, COLOR4D( DARKGRAY ) );
CLR( "fpedit.grid_axes", FL + LAYER_GRID_AXES, COLOR4D( LIGHTGRAY ) );
CLR( "fpedit.microvia", FL + LAYER_VIA_MICROVIA, COLOR4D( LIGHTGRAY ) );
CLR( "fpedit.no_connect", FL + LAYER_NO_CONNECTS, COLOR4D( BLUE ) );
CLR( "fpedit.pad_back", FL + LAYER_PAD_BK, COLOR4D( GREEN ) );
CLR( "fpedit.pad_front", FL + LAYER_PAD_FR, COLOR4D( RED ) );
CLR( "fpedit.pad_plated_hole", FL + LAYER_PADS_PLATEDHOLES, COLOR4D( YELLOW ) );
CLR( "fpedit.pad_through_hole", FL + LAYER_PADS_TH, COLOR4D( YELLOW ) );
CLR( "fpedit.plated_hole", FL + LAYER_NON_PLATEDHOLES, COLOR4D( YELLOW ) );
CLR( "fpedit.ratsnest", FL + LAYER_RATSNEST, COLOR4D( WHITE ) );
CLR( "fpedit.select_overlay", FL + LAYER_SELECT_OVERLAY, COLOR4D( DARKRED ) );
CLR( "fpedit.through_via", FL + LAYER_VIA_THROUGH, COLOR4D( LIGHTGRAY ) );
CLR( "fpedit.via", FL + LAYER_VIAS, COLOR4D( BLACK ) );
CLR( "fpedit.via_blind_buried", FL + LAYER_VIA_BBLIND, COLOR4D( BROWN ) );
CLR( "fpedit.via_hole", FL + LAYER_VIAS_HOLES, COLOR4D( WHITE ) );
CLR( "fpedit.via_micro", FL + LAYER_VIA_MICROVIA, COLOR4D( CYAN ) );
CLR( "fpedit.via_through", FL + LAYER_VIA_THROUGH, COLOR4D( LIGHTGRAY ) );
CLR( "fpedit.worksheet", FL + LAYER_WORKSHEET, COLOR4D( DARKRED ) );
CLR( "fpedit.copper.f", FL + F_Cu, COLOR4D( RED ) );
CLR( "fpedit.copper.in1", FL + In1_Cu, COLOR4D( YELLOW ) );
CLR( "fpedit.copper.in2", FL + In2_Cu, COLOR4D( LIGHTMAGENTA ) );
CLR( "fpedit.copper.in3", FL + In3_Cu, COLOR4D( LIGHTRED ) );
CLR( "fpedit.copper.in4", FL + In4_Cu, COLOR4D( CYAN ) );
CLR( "fpedit.copper.in5", FL + In5_Cu, COLOR4D( GREEN ) );
CLR( "fpedit.copper.in6", FL + In6_Cu, COLOR4D( BLUE ) );
CLR( "fpedit.copper.in7", FL + In7_Cu, COLOR4D( DARKGRAY ) );
CLR( "fpedit.copper.in8", FL + In8_Cu, COLOR4D( MAGENTA ) );
CLR( "fpedit.copper.in9", FL + In9_Cu, COLOR4D( LIGHTGRAY ) );
CLR( "fpedit.copper.in10", FL + In10_Cu, COLOR4D( MAGENTA ) );
CLR( "fpedit.copper.in11", FL + In11_Cu, COLOR4D( RED ) );
CLR( "fpedit.copper.in12", FL + In12_Cu, COLOR4D( BROWN ) );
CLR( "fpedit.copper.in13", FL + In13_Cu, COLOR4D( LIGHTGRAY ) );
CLR( "fpedit.copper.in14", FL + In14_Cu, COLOR4D( BLUE ) );
CLR( "fpedit.copper.in15", FL + In15_Cu, COLOR4D( GREEN ) );
CLR( "fpedit.copper.in16", FL + In16_Cu, COLOR4D( RED ) );
CLR( "fpedit.copper.in17", FL + In17_Cu, COLOR4D( YELLOW ) );
CLR( "fpedit.copper.in18", FL + In18_Cu, COLOR4D( LIGHTMAGENTA ) );
CLR( "fpedit.copper.in19", FL + In19_Cu, COLOR4D( LIGHTRED ) );
CLR( "fpedit.copper.in20", FL + In20_Cu, COLOR4D( CYAN ) );
CLR( "fpedit.copper.in21", FL + In21_Cu, COLOR4D( GREEN ) );
CLR( "fpedit.copper.in22", FL + In22_Cu, COLOR4D( BLUE ) );
CLR( "fpedit.copper.in23", FL + In23_Cu, COLOR4D( DARKGRAY ) );
CLR( "fpedit.copper.in24", FL + In24_Cu, COLOR4D( MAGENTA ) );
CLR( "fpedit.copper.in25", FL + In25_Cu, COLOR4D( LIGHTGRAY ) );
CLR( "fpedit.copper.in26", FL + In26_Cu, COLOR4D( MAGENTA ) );
CLR( "fpedit.copper.in27", FL + In27_Cu, COLOR4D( RED ) );
CLR( "fpedit.copper.in28", FL + In28_Cu, COLOR4D( BROWN ) );
CLR( "fpedit.copper.in29", FL + In29_Cu, COLOR4D( LIGHTGRAY ) );
CLR( "fpedit.copper.in30", FL + In30_Cu, COLOR4D( BLUE ) );
CLR( "fpedit.copper.b", FL + B_Cu, COLOR4D( GREEN ) );
CLR( "fpedit.b_adhes", FL + B_Adhes, COLOR4D( BLUE ) );
CLR( "fpedit.f_adhes", FL + F_Adhes, COLOR4D( MAGENTA ) );
CLR( "fpedit.b_paste", FL + B_Paste, COLOR4D( LIGHTCYAN ) );
CLR( "fpedit.f_paste", FL + F_Paste, COLOR4D( RED ) );
CLR( "fpedit.b_silks", FL + B_SilkS, COLOR4D( MAGENTA ) );
CLR( "fpedit.f_silks", FL + F_SilkS, COLOR4D( CYAN ) );
CLR( "fpedit.b_mask", FL + B_Mask, COLOR4D( BROWN ) );
CLR( "fpedit.f_mask", FL + F_Mask, COLOR4D( MAGENTA ) );
CLR( "fpedit.dwgs_user", FL + Dwgs_User, COLOR4D( LIGHTGRAY ) );
CLR( "fpedit.cmts_user", FL + Cmts_User, COLOR4D( BLUE ) );
CLR( "fpedit.eco1_user", FL + Eco1_User, COLOR4D( GREEN ) );
CLR( "fpedit.eco2_user", FL + Eco2_User, COLOR4D( YELLOW ) );
CLR( "fpedit.edge_cuts", FL + Edge_Cuts, COLOR4D( YELLOW ) );
CLR( "fpedit.margin", FL + Margin, COLOR4D( LIGHTMAGENTA ) );
CLR( "fpedit.b_crtyd", FL + B_CrtYd, COLOR4D( DARKGRAY ) );
CLR( "fpedit.f_crtyd", FL + F_CrtYd, COLOR4D( LIGHTGRAY ) );
CLR( "fpedit.b_fab", FL + B_Fab, COLOR4D( BLUE ) );
CLR( "fpedit.f_fab", FL + F_Fab, COLOR4D( DARKGRAY ) );
// Colors for 3D viewer, which are used as defaults unless overridden by the board
CLR( "3d_viewer.background_bottom", LAYER_3D_BACKGROUND_BOTTOM, COLOR4D( 0.4, 0.4, 0.5, 1.0 ) );
CLR( "3d_viewer.background_top", LAYER_3D_BACKGROUND_TOP, COLOR4D( 0.8, 0.8, 0.9, 1.0 ) );
@ -305,14 +217,75 @@ bool COLOR_SETTINGS::MigrateFromLegacy( wxConfigBase* aCfg )
}
COLOR4D COLOR_SETTINGS::GetColor( int aLayer ) const
bool COLOR_SETTINGS::Migrate()
{
if( m_color_context == COLOR_CONTEXT::FOOTPRINT && aLayer >= PCBNEW_LAYER_ID_START
&& aLayer <= GAL_LAYER_ID_END )
bool ret = true;
int filever = at( PointerFromString( "meta.version" ) ).get<int>();
if( filever == 0 )
{
aLayer += FPEDIT_LAYER_ID_START;
ret &= migrateSchema0to1();
if( ret )
{
( *this )[PointerFromString( "meta.version" )] = 1;
}
}
return ret;
}
bool COLOR_SETTINGS::migrateSchema0to1()
{
/**
* Schema version 0 to 1:
*
* - Footprint editor settings are split out into a new file called "ThemeName (Footprints)"
* - fpedit namespace is removed from the schema
*/
if( !m_manager )
{
wxLogTrace( traceSettings, "Error: COLOR_SETTINGS migration cannot run unmanaged!" );
return false;
}
nlohmann::json::json_pointer board( "/board" );
nlohmann::json::json_pointer fpedit( "/fpedit" );
if( !contains( fpedit ) )
{
wxLogTrace( traceSettings, "migrateSchema0to1: %s doesn't have fpedit settings; skipping.",
m_filename );
return true;
}
wxString filename = m_filename + wxT( "_footprints" );
COLOR_SETTINGS* fpsettings = m_manager->AddNewColorSettings( filename );
// Start out with a clone
nlohmann::json::json_pointer root( "" );
( *fpsettings )[root] = at( root );
// Footprint editor now just looks at the "board" namespace
( *fpsettings )[board] = fpsettings->at( fpedit );
fpsettings->erase( "fpedit" );
fpsettings->Load();
fpsettings->SetName( fpsettings->GetName() + _( " (Footprints)" ) );
m_manager->Save( fpsettings );
// Now we can get rid of our own copy
erase( "fpedit" );
return true;
}
COLOR4D COLOR_SETTINGS::GetColor( int aLayer ) const
{
if( m_colors.count( aLayer ) )
return m_colors.at( aLayer );
@ -324,12 +297,6 @@ COLOR4D COLOR_SETTINGS::GetDefaultColor( int aLayer )
{
if( !m_defaultColors.count( aLayer ) )
{
if( m_color_context == COLOR_CONTEXT::FOOTPRINT && aLayer >= PCBNEW_LAYER_ID_START
&& aLayer <= GAL_LAYER_ID_END )
{
aLayer += FPEDIT_LAYER_ID_START;
}
COLOR_MAP_PARAM* p = nullptr;
for( auto param : m_params )
@ -347,8 +314,5 @@ COLOR4D COLOR_SETTINGS::GetDefaultColor( int aLayer )
void COLOR_SETTINGS::SetColor( int aLayer, COLOR4D aColor )
{
if( m_color_context == COLOR_CONTEXT::FOOTPRINT )
aLayer += FPEDIT_LAYER_ID_START;
m_colors[ aLayer ] = aColor;
}

View File

@ -312,25 +312,11 @@ enum GERBVIEW_LAYER_ID: int
#define GERBER_DRAW_LAYER_INDEX( x ) ( x - GERBVIEW_LAYER_ID_START )
// TODO(JE) Remove after we have color themes
// Temporary virtual layers to store color themes for footprint editor
enum FPEDIT_LAYER_ID : int
{
FPEDIT_LAYER_ID_START = GERBVIEW_LAYER_ID_END,
// Reserve a copy of the board and netname layers...
FPEDIT_LAYER_ID_RESERVED = FPEDIT_LAYER_ID_START + ( 2 * PCB_LAYER_ID_COUNT ),
// And a copy of the GAL layers
FPEDIT_GAL_RESERVED = FPEDIT_LAYER_ID_RESERVED + ( GAL_LAYER_ID_END - GAL_LAYER_ID_START ),
FPEDIT_LAYER_ID_END
};
/// 3D Viewer virtual layers for color settings
enum LAYER_3D_ID : int
{
LAYER_3D_START = FPEDIT_LAYER_ID_END,
LAYER_3D_START = GERBVIEW_LAYER_ID_END,
LAYER_3D_BACKGROUND_BOTTOM,
LAYER_3D_BACKGROUND_TOP,
@ -345,7 +331,7 @@ enum LAYER_3D_ID : int
};
/// Must update this if you add any enums after GerbView!
#define LAYER_ID_COUNT FPEDIT_LAYER_ID_END
#define LAYER_ID_COUNT LAYER_3D_END
/**

View File

@ -168,7 +168,11 @@ public:
* Helper to retrieve the current color settings
* @return a pointer to the active COLOR_SETTINGS
*/
COLOR_SETTINGS* ColorSettings();
virtual COLOR_SETTINGS* ColorSettings()
{
wxFAIL_MSG( "Color settings requested for a frame that does not define them!" );
return nullptr;
}
PCBNEW_SETTINGS& Settings() { return *m_Settings; }

View File

@ -49,15 +49,6 @@ using KIGFX::COLOR4D;
#include <settings/json_settings.h>
#include <settings/parameters.h>
/**
* For specifying whether to retrieve colors from the "pcbnew" or "fpedit" set.
* Can be removed once color themes exist.
*/
enum class COLOR_CONTEXT
{
PCB,
FOOTPRINT
};
class COLOR_SETTINGS : public JSON_SETTINGS
{
@ -75,18 +66,14 @@ public:
bool MigrateFromLegacy( wxConfigBase* aCfg ) override;
bool Migrate() override;
COLOR4D GetColor( int aLayer ) const;
COLOR4D GetDefaultColor( int aLayer );
void SetColor( int aLayer, COLOR4D aColor );
// TODO(JE) remove once color themes exist
void SetColorContext( COLOR_CONTEXT aContext = COLOR_CONTEXT::PCB )
{
m_color_context = aContext;
}
const wxString& GetName() const { return m_displayName; }
void SetName( const wxString& aName ) { m_displayName = aName; }
@ -94,7 +81,10 @@ public:
void SetOverrideSchItemColors( bool aFlag ) { m_overrideSchItemColors = aFlag; }
private:
bool migrateSchema0to1();
wxString m_displayName;
bool m_overrideSchItemColors;
/**
@ -104,9 +94,6 @@ private:
std::unordered_map<int, COLOR4D> m_colors;
std::unordered_map<int, COLOR4D> m_defaultColors;
// TODO(JE) remove once color themes exist
COLOR_CONTEXT m_color_context;
};
class COLOR_MAP_PARAM : public PARAM_BASE

View File

@ -146,6 +146,7 @@ set( PCBNEW_DIALOGS
dialogs/dialog_update_pcb_base.cpp
dialogs/panel_fp_lib_table.cpp
dialogs/panel_fp_lib_table_base.cpp
dialogs/panel_modedit_color_settings.cpp
dialogs/panel_modedit_defaults.cpp
dialogs/panel_modedit_defaults_base.cpp
dialogs/panel_modedit_display_options.cpp

View File

@ -0,0 +1,145 @@
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2020 Jon Evans <jon@craftyjon.com>
* Copyright (C) 2020 KiCad Developers, see AUTHORS.txt for contributors.
*
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation, either version 3 of the License, or (at your
* option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <regex>
#include <class_board.h>
#include <footprint_edit_frame.h>
#include <footprint_editor_settings.h>
#include <gal/gal_display_options.h>
#include <layers_id_colors_and_visibility.h>
#include <panel_modedit_color_settings.h>
#include <pgm_base.h>
#include <settings/settings_manager.h>
PANEL_MODEDIT_COLOR_SETTINGS::PANEL_MODEDIT_COLOR_SETTINGS( FOOTPRINT_EDIT_FRAME* aFrame,
wxWindow* aParent )
: PANEL_COLOR_SETTINGS( aParent ),
m_frame( aFrame ),
m_page( nullptr ),
m_titleBlock( nullptr ),
m_ws( nullptr )
{
// Currently this only applies to eeschema
m_optOverrideColors->Hide();
m_colorNamespace = "board";
SETTINGS_MANAGER& mgr = Pgm().GetSettingsManager();
FOOTPRINT_EDITOR_SETTINGS* settings = mgr.GetAppSettings<FOOTPRINT_EDITOR_SETTINGS>();
COLOR_SETTINGS* current = mgr.GetColorSettings( settings->m_ColorTheme );
// Store the current settings before reloading below
current->Store();
mgr.SaveColorSettings( current, "board" );
m_optOverrideColors->SetValue( current->GetOverrideSchItemColors() );
m_currentSettings = new COLOR_SETTINGS( *current );
mgr.ReloadColorSettings();
createThemeList( settings->m_ColorTheme );
for( int id = F_Cu; id < PCB_LAYER_ID_COUNT; id++ )
m_validLayers.push_back( id );
for( int id = GAL_LAYER_ID_START; id < GAL_LAYER_ID_END; id++ )
{
if( id == LAYER_VIAS || id == LAYER_GRID_AXES || id == LAYER_PADS_PLATEDHOLES
|| id == LAYER_VIAS_HOLES )
{
continue;
}
m_validLayers.push_back( id );
}
m_colorsMainSizer->Insert( 0, 10, 0, 0, wxEXPAND, 5 );
createButtons();
}
PANEL_MODEDIT_COLOR_SETTINGS::~PANEL_MODEDIT_COLOR_SETTINGS()
{
delete m_page;
delete m_titleBlock;
}
bool PANEL_MODEDIT_COLOR_SETTINGS::TransferDataFromWindow()
{
m_currentSettings->SetOverrideSchItemColors( m_optOverrideColors->GetValue() );
if( !saveCurrentTheme( true ) )
return false;
m_frame->GetCanvas()->GetView()->GetPainter()->GetSettings()->LoadColors( m_currentSettings );
SETTINGS_MANAGER& settingsMgr = Pgm().GetSettingsManager();
FOOTPRINT_EDITOR_SETTINGS* settings = settingsMgr.GetAppSettings<FOOTPRINT_EDITOR_SETTINGS>();
settings->m_ColorTheme = m_currentSettings->GetFilename();
m_frame->UpdateUserInterface();
return true;
}
bool PANEL_MODEDIT_COLOR_SETTINGS::TransferDataToWindow()
{
return true;
}
void PANEL_MODEDIT_COLOR_SETTINGS::createButtons()
{
std::vector<int> layers;
for( GAL_LAYER_ID i = GAL_LAYER_ID_START; i < GAL_LAYER_ID_END; ++i )
{
if( m_currentSettings->GetColor( i ) != COLOR4D::UNSPECIFIED )
layers.push_back( i );
}
std::sort( layers.begin(), layers.end(),
[]( int a, int b )
{
return LayerName( a ) < LayerName( b );
} );
// Don't sort board layers by name
for( int i = PCBNEW_LAYER_ID_START; i < PCB_LAYER_ID_COUNT; ++i )
layers.insert( layers.begin() + i, i );
BOARD* board = m_frame->GetBoard();
for( int layer : layers )
{
wxString name = LayerName( layer );
if( board && layer >= PCBNEW_LAYER_ID_START && layer < PCB_LAYER_ID_COUNT )
name = board->GetLayerName( static_cast<PCB_LAYER_ID>( layer ) );
createButton( layer, m_currentSettings->GetColor( layer ), name );
}
}

View File

@ -0,0 +1,70 @@
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2020 Jon Evans <jon@craftyjon.com>
* Copyright (C) 2020 KiCad Developers, see AUTHORS.txt for contributors.
*
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation, either version 3 of the License, or (at your
* option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef PANEL_MODEDIT_COLOR_SETTINGS_H_
#define PANEL_MODEDIT_COLOR_SETTINGS_H_
#include <gal/color4d.h>
#include <layers_id_colors_and_visibility.h>
#include <panel_color_settings.h>
class COLOR_SETTINGS;
class PAGE_INFO;
class FOOTPRINT_EDIT_FRAME;
class TITLE_BLOCK;
namespace KIGFX
{
class WS_PROXY_VIEW_ITEM;
}
class PANEL_MODEDIT_COLOR_SETTINGS : public PANEL_COLOR_SETTINGS
{
public:
PANEL_MODEDIT_COLOR_SETTINGS( FOOTPRINT_EDIT_FRAME* aFrame, wxWindow* aParent );
~PANEL_MODEDIT_COLOR_SETTINGS() override;
protected:
bool TransferDataFromWindow() override;
bool TransferDataToWindow() override;
enum COLOR_CONTEXT_ID
{
ID_COPY = wxID_HIGHEST + 1,
ID_PASTE,
ID_REVERT
};
private:
FOOTPRINT_EDIT_FRAME* m_frame;
PAGE_INFO* m_page;
TITLE_BLOCK* m_titleBlock;
KIGFX::WS_PROXY_VIEW_ITEM* m_ws;
void createButtons();
};
#endif

View File

@ -49,7 +49,6 @@ PANEL_PCBNEW_COLOR_SETTINGS::PANEL_PCBNEW_COLOR_SETTINGS( PCB_EDIT_FRAME* aFrame
COLOR_SETTINGS* current = mgr.GetColorSettings( app_settings->m_ColorTheme );
// Store the current settings before reloading below
current->SetColorContext( COLOR_CONTEXT::PCB );
current->Store();
mgr.SaveColorSettings( current, "board" );

View File

@ -35,6 +35,7 @@
#include <class_board.h>
#include <class_module.h>
#include <confirm.h>
#include <dialogs/panel_modedit_color_settings.h>
#include <dialogs/panel_modedit_defaults.h>
#include <dialogs/panel_modedit_display_options.h>
#include <dialogs/panel_modedit_settings.h>
@ -440,11 +441,6 @@ void FOOTPRINT_EDIT_FRAME::LoadSettings( APP_SETTINGS_BASE* aCfg )
EDA_DRAW_FRAME::LoadSettings( cfg );
// TODO(JE) remove once color themes exist
COLOR_SETTINGS* cs = ColorSettings();
cs->SetColorContext( COLOR_CONTEXT::FOOTPRINT );
cs->Load();
// Ensure some params are valid
BOARD_DESIGN_SETTINGS& settings = GetDesignSettings();
@ -473,12 +469,13 @@ void FOOTPRINT_EDIT_FRAME::SaveSettings( APP_SETTINGS_BASE* aCfg )
cfg->m_DesignSettings = GetDesignSettings();
cfg->m_Display = m_DisplayOptions;
cfg->m_LibWidth = m_treePane->GetSize().x;
}
// TODO(JE) remove once color themes exist
// Ensure footprint editor color settings get flushed to disk before context is changed
COLOR_SETTINGS* cs = ColorSettings();
cs->SetColorContext( COLOR_CONTEXT::FOOTPRINT );
Pgm().GetSettingsManager().SaveColorSettings( cs, "fpedit" );
COLOR_SETTINGS* FOOTPRINT_EDIT_FRAME::ColorSettings()
{
return Pgm().GetSettingsManager().GetColorSettings(
GetFootprintEditorSettings()->m_ColorTheme );
}
@ -817,6 +814,7 @@ void FOOTPRINT_EDIT_FRAME::InstallPreferences( PAGED_DIALOG* aParent,
book->AddPage( new wxPanel( book ), _( "Footprint Editor" ) );
book->AddSubPage( new PANEL_MODEDIT_DISPLAY_OPTIONS( this, aParent ), _( "Display Options" ) );
book->AddSubPage( new PANEL_MODEDIT_COLOR_SETTINGS( this, book ), _( "Colors" ) );
book->AddSubPage( new PANEL_MODEDIT_SETTINGS( this, aParent ), _( "Editing Options" ) );
book->AddSubPage( new PANEL_MODEDIT_DEFAULTS( this, aParent ), _( "Default Values" ) );

View File

@ -82,6 +82,8 @@ public:
void LoadSettings( APP_SETTINGS_BASE* aCfg ) override;
void SaveSettings( APP_SETTINGS_BASE* aCfg ) override;
COLOR_SETTINGS* ColorSettings() override;
const BOX2I GetDocumentExtents() const override;
void OnCloseWindow( wxCloseEvent& Event ) override;

View File

@ -28,8 +28,11 @@
#include <wx/config.h>
extern const char* traceSettings;
///! Update the schema version whenever a migration is required
const int fpEditSchemaVersion = 0;
const int fpEditSchemaVersion = 1;
FOOTPRINT_EDITOR_SETTINGS::FOOTPRINT_EDITOR_SETTINGS() :
@ -239,15 +242,14 @@ bool FOOTPRINT_EDITOR_SETTINGS::MigrateFromLegacy( wxConfigBase* aCfg )
const std::string f = "ModEdit";
// Migrate color settings that were stored in the pcbnew config file
// We create a copy of the user scheme for the footprint editor context
SETTINGS_MANAGER& manager = Pgm().GetSettingsManager();
COLOR_SETTINGS* cs = manager.GetColorSettings();
COLOR_SETTINGS* cs = manager.AddNewColorSettings( "user_footprints" );
// Flush here just in case we somehow have dirty pcbnew colors
cs->SetName( wxT( "KiCad Default (Footprints)" ) );
manager.Save( cs );
cs->SetColorContext( COLOR_CONTEXT::FOOTPRINT );
auto migrateLegacyColor = [&] ( const std::string& aKey, int aLayerId ) {
wxString str;
@ -280,7 +282,64 @@ bool FOOTPRINT_EDITOR_SETTINGS::MigrateFromLegacy( wxConfigBase* aCfg )
migrateLegacyColor( f + "Color4DViaThruEx", LAYER_VIA_THROUGH );
migrateLegacyColor( f + "Color4DWorksheet", LAYER_WORKSHEET );
manager.SaveColorSettings( cs, "fpedit" );
manager.SaveColorSettings( cs, "board" );
( *this )[PointerFromString( "appearance.color_theme" )] = "user_footprints";
return ret;
}
bool FOOTPRINT_EDITOR_SETTINGS::Migrate()
{
bool ret = true;
int filever = at( PointerFromString( "meta.version" ) ).get<int>();
if( filever == 0 )
{
ret &= migrateSchema0to1();
if( ret )
{
( *this )[PointerFromString( "meta.version" )] = 1;
}
}
return ret;
}
bool FOOTPRINT_EDITOR_SETTINGS::migrateSchema0to1()
{
/**
* Schema version 0 to 1:
*
* - Check to see if a footprints version of the currently selected theme exists.
* - If so, select it
*/
if( !m_manager )
{
wxLogTrace(
traceSettings, "Error: FOOTPRINT_EDITOR_SETTINGS migration cannot run unmanaged!" );
return false;
}
nlohmann::json::json_pointer theme_ptr( "/appearance/color_theme" );
wxString selected = at( theme_ptr ).get<wxString>();
wxString search = selected + wxT( "_footprints" );
for( COLOR_SETTINGS* settings : Pgm().GetSettingsManager().GetColorSettingsList() )
{
if( settings->GetFilename() == search )
{
wxLogTrace( traceSettings, "Updating footprint editor theme from %s to %s",
selected, search );
( *this )[theme_ptr] = search;
return true;
}
}
return true;
}

View File

@ -42,6 +42,8 @@ public:
virtual bool MigrateFromLegacy( wxConfigBase* aLegacyConfig ) override;
bool Migrate() override;
BOARD_DESIGN_SETTINGS m_DesignSettings;
MAGNETIC_OPTIONS m_MagneticPads;
@ -64,6 +66,10 @@ public:
protected:
virtual std::string getLegacyFrameName() const override { return "ModEditFrame"; }
private:
bool migrateSchema0to1();
};

View File

@ -423,9 +423,7 @@ FOOTPRINT_PREVIEW_PANEL* FOOTPRINT_PREVIEW_PANEL::New( KIWAY* aKiway, wxWindow*
panel->GetGAL()->SetGridVisibility( pcbnew->IsGridVisible() );
panel->GetGAL()->SetGridSize( VECTOR2D( pcbnew->GetScreen()->GetGridSize() ) );
// Grid color (among other things):
KIGFX::PAINTER* pcbnew_painter = pcbnew->GetCanvas()->GetView()->GetPainter();
panel->GetView()->GetPainter()->ApplySettings( pcbnew_painter->GetSettings() );
panel->GetView()->GetPainter()->GetSettings()->LoadColors( pcbnew->GetColorSettings() );
}
else
{
@ -435,6 +433,8 @@ FOOTPRINT_PREVIEW_PANEL* FOOTPRINT_PREVIEW_PANEL::New( KIWAY* aKiway, wxWindow*
std::unique_ptr<PCB_SCREEN> temp_screen = std::make_unique<PCB_SCREEN>( wxSize() );
temp_screen->SetGrid( ID_POPUP_GRID_LEVEL_1000 + cfg->m_Window.grid.last_size );
panel->GetGAL()->SetGridSize( VECTOR2D( temp_screen->GetGridSize() ) );
panel->UpdateColors();
}
return panel;

View File

@ -743,6 +743,17 @@ WINDOW_SETTINGS* FOOTPRINT_VIEWER_FRAME::GetWindowSettings( APP_SETTINGS_BASE* a
}
COLOR_SETTINGS* FOOTPRINT_VIEWER_FRAME::ColorSettings()
{
auto* settings = Pgm().GetSettingsManager().GetAppSettings<FOOTPRINT_EDITOR_SETTINGS>();
if( settings )
return Pgm().GetSettingsManager().GetColorSettings( settings->m_ColorTheme );
else
return Pgm().GetSettingsManager().GetColorSettings();
}
void FOOTPRINT_VIEWER_FRAME::CommonSettingsChanged( bool aEnvVarsChanged )
{
PCB_BASE_FRAME::CommonSettingsChanged( aEnvVarsChanged );

View File

@ -80,6 +80,8 @@ public:
*/
bool ShowModal( wxString* aFootprint, wxWindow* aParent ) override;
COLOR_SETTINGS* ColorSettings() override;
private:
wxTextCtrl* m_libFilter;
wxListBox* m_libList; // The list of libs names

View File

@ -35,6 +35,7 @@
#include <grid_tricks.h>
#include <class_board.h>
#include <footprint_edit_frame.h>
#include <footprint_editor_settings.h>
#include <pcbnew_id.h>
#include <pcbnew_settings.h>
#include "footprint_wizard_frame.h"
@ -42,6 +43,9 @@
#include <wx/numformatter.h>
#include <wildcards_and_files_ext.h>
#include <base_units.h>
#include <pgm_base.h>
#include <settings/color_settings.h>
#include <settings/settings_manager.h>
#include <tool/tool_manager.h>
#include <tool/tool_dispatcher.h>
#include <tool/action_toolbar.h>
@ -290,6 +294,13 @@ void FOOTPRINT_WIZARD_FRAME::OnSize( wxSizeEvent& SizeEv )
}
COLOR_SETTINGS* FOOTPRINT_WIZARD_FRAME::ColorSettings()
{
return Pgm().GetSettingsManager().GetColorSettings(
GetFootprintEditorSettings()->m_ColorTheme );
}
void FOOTPRINT_WIZARD_FRAME::updateView()
{
GetCanvas()->UpdateColors();

View File

@ -85,6 +85,8 @@ public:
*/
void PythonPluginsReload();
COLOR_SETTINGS* ColorSettings() override;
private:
void OnSize( wxSizeEvent& event ) override;

View File

@ -26,12 +26,15 @@
#include <tool/tool_manager.h>
#include <pcb_draw_panel_gal.h>
#include <pcb_layer_widget.h>
#include <pcbnew_settings.h>
#include <pgm_base.h>
#include <gal/graphics_abstraction_layer.h>
#include <class_board.h>
#include <view/view.h>
#include "footprint_info_impl.h"
#include <project.h>
#include <settings/color_settings.h>
#include <settings/settings_manager.h>
#include <tools/pcb_actions.h>
PCB_BASE_EDIT_FRAME::PCB_BASE_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent,
@ -131,3 +134,9 @@ void PCB_BASE_EDIT_FRAME::SetGridVisibility( bool aVisible )
// TODO (ISM): Remove this by changing toolbars to use the EVT_UPDATE_UI to get the state
SyncToolbars();
}
COLOR_SETTINGS* PCB_BASE_EDIT_FRAME::ColorSettings()
{
return Pgm().GetSettingsManager().GetColorSettings( GetPcbNewSettings()->m_ColorTheme );
}

View File

@ -190,6 +190,8 @@ public:
void OnGridSettings( wxCommandEvent& aEvent ) override;
COLOR_SETTINGS* ColorSettings() override;
protected:
/// User defined rotation angle (in tenths of a degree).
int m_rotationAngle;

View File

@ -36,6 +36,7 @@
#include <pgm_base.h>
#include <3d_viewer/eda_3d_viewer.h> // To include VIEWER3D_FRAMENAME
#include <pcbnew.h>
#include <footprint_editor_settings.h>
#include <fp_lib_table.h>
#include <pcbnew_id.h>
#include <class_board.h>
@ -320,12 +321,6 @@ void PCB_BASE_FRAME::SetDesignSettings( const BOARD_DESIGN_SETTINGS& aSettings )
}
COLOR_SETTINGS* PCB_BASE_FRAME::ColorSettings()
{
return Pgm().GetSettingsManager().GetColorSettings( GetSettings()->m_ColorTheme );
}
void PCB_BASE_FRAME::SetDrawBgColor( COLOR4D aColor )
{
m_drawBgColor= aColor;

View File

@ -210,17 +210,21 @@ void PCB_DRAW_PANEL_GAL::UpdateColors()
auto frame = dynamic_cast<PCB_BASE_FRAME*>( GetParentEDAFrame() );
if( frame )
{
cs = frame->ColorSettings();
}
else
{
PCBNEW_SETTINGS* app = Pgm().GetSettingsManager().GetAppSettings<PCBNEW_SETTINGS>();
if( app )
cs = Pgm().GetSettingsManager().GetColorSettings( app->m_ColorTheme );
else
cs = Pgm().GetSettingsManager().GetColorSettings();
}
wxCHECK_RET( cs, "null COLOR_SETTINGS" );
if( frame && frame->IsType( FRAME_FOOTPRINT_EDITOR ) )
cs->SetColorContext( COLOR_CONTEXT::FOOTPRINT );
else
cs->SetColorContext( COLOR_CONTEXT::PCB );
auto rs = static_cast<KIGFX::PCB_RENDER_SETTINGS*>( m_view->GetPainter()->GetSettings() );
rs->LoadColors( cs );

View File

@ -596,7 +596,6 @@ void PCB_EDIT_FRAME::OnCloseWindow( wxCloseEvent& aEvent )
void PCB_EDIT_FRAME::ActivateGalCanvas()
{
PCB_BASE_EDIT_FRAME::ActivateGalCanvas();
ColorSettings()->SetColorContext( COLOR_CONTEXT::PCB );
GetCanvas()->UpdateColors();
GetCanvas()->Refresh();
}
@ -636,11 +635,6 @@ void PCB_EDIT_FRAME::LoadSettings( APP_SETTINGS_BASE* aCfg )
{
PCB_BASE_FRAME::LoadSettings( aCfg );
// TODO(JE) remove once color themes exist
COLOR_SETTINGS* cs = ColorSettings();
cs->SetColorContext( COLOR_CONTEXT::PCB );
cs->Load();
PCBNEW_SETTINGS* cfg = dynamic_cast<PCBNEW_SETTINGS*>( aCfg );
wxASSERT( cfg );
@ -659,13 +653,6 @@ void PCB_EDIT_FRAME::SaveSettings( APP_SETTINGS_BASE* aCfg )
{
PCB_BASE_FRAME::SaveSettings( aCfg );
COLOR_SETTINGS* cs = ColorSettings();
cs->SetColorContext( COLOR_CONTEXT::PCB );
cs->Store();
// Ensure pcbnew color settings get flushed to disk before context is changed
Pgm().GetSettingsManager().SaveColorSettings( cs, "board" );
auto cfg = dynamic_cast<PCBNEW_SETTINGS*>( aCfg );
wxASSERT( cfg );

View File

@ -122,8 +122,6 @@ PCB_LAYER_WIDGET::PCB_LAYER_WIDGET( PCB_BASE_FRAME* aParent, wxWindow* aFocusOwn
COLOR4D PCB_LAYER_WIDGET::getBackgroundLayerColor()
{
myframe->ColorSettings()->SetColorContext( m_fp_editor_mode ?
COLOR_CONTEXT::FOOTPRINT : COLOR_CONTEXT::PCB );
return myframe->ColorSettings()->GetColor( LAYER_PCB_BACKGROUND );
}
@ -315,9 +313,6 @@ void PCB_LAYER_WIDGET::ReFillRender()
BOARD* board = myframe->GetBoard();
auto settings = board->GetDesignSettings();
myframe->ColorSettings()->SetColorContext( m_fp_editor_mode ?
COLOR_CONTEXT::FOOTPRINT : COLOR_CONTEXT::PCB );
ClearRenderRows();
// Add "Items" tab rows to LAYER_WIDGET, after setting color and checkbox state.
@ -428,9 +423,6 @@ void PCB_LAYER_WIDGET::ReFill()
BOARD* brd = myframe->GetBoard();
LSET enabled = brd->GetEnabledLayers();
myframe->ColorSettings()->SetColorContext( m_fp_editor_mode ?
COLOR_CONTEXT::FOOTPRINT : COLOR_CONTEXT::PCB );
ClearLayerRows();
wxString dsc;
@ -522,7 +514,6 @@ void PCB_LAYER_WIDGET::ReFill()
void PCB_LAYER_WIDGET::OnLayerColorChange( int aLayer, COLOR4D aColor )
{
COLOR_SETTINGS* cs = myframe->ColorSettings();
cs->SetColorContext( m_fp_editor_mode ? COLOR_CONTEXT::FOOTPRINT : COLOR_CONTEXT::PCB );
cs->SetColor( aLayer, aColor );
myframe->GetCanvas()->UpdateColors();
@ -610,8 +601,6 @@ void PCB_LAYER_WIDGET::OnRenderColorChange( int aId, COLOR4D aColor )
{
wxASSERT( aId > GAL_LAYER_ID_START && aId < GAL_LAYER_ID_END );
myframe->ColorSettings()->SetColorContext( m_fp_editor_mode ?
COLOR_CONTEXT::FOOTPRINT : COLOR_CONTEXT::PCB );
myframe->ColorSettings()->SetColor( aId, aColor );
myframe->GetCanvas()->UpdateColors();