Add colortheme package type

This commit is contained in:
qu1ck 2021-07-10 23:24:30 -07:00 committed by Seth Hillbrand
parent 0f7c0e3872
commit a1521d338e
6 changed files with 51 additions and 18 deletions

View File

@ -257,6 +257,9 @@ bool PGM_BASE::InitPgm( bool aHeadless, bool aSkipPyInit )
// Set up built-in environment variables (and override them from the system environment if set) // Set up built-in environment variables (and override them from the system environment if set)
GetCommonSettings()->InitializeEnvironment(); GetCommonSettings()->InitializeEnvironment();
// Load color settings after env is initialized
m_settings_manager->ReloadColorSettings();
// Load common settings from disk after setting up env vars // Load common settings from disk after setting up env vars
GetSettingsManager().Load( GetCommonSettings() ); GetSettingsManager().Load( GetCommonSettings() );

View File

@ -34,6 +34,7 @@
#include <kiway.h> #include <kiway.h>
#include <lockfile.h> #include <lockfile.h>
#include <macros.h> #include <macros.h>
#include <pgm_base.h>
#include <paths.h> #include <paths.h>
#include <project.h> #include <project.h>
#include <project/project_archiver.h> #include <project/project_archiver.h>
@ -70,8 +71,6 @@ SETTINGS_MANAGER::SETTINGS_MANAGER( bool aHeadless ) :
// create the common settings shared by all applications. Not loaded immediately // create the common settings shared by all applications. Not loaded immediately
m_common_settings = RegisterSettings( new COMMON_SETTINGS, false ); m_common_settings = RegisterSettings( new COMMON_SETTINGS, false );
loadAllColorSettings();
} }
SETTINGS_MANAGER::~SETTINGS_MANAGER() SETTINGS_MANAGER::~SETTINGS_MANAGER()
@ -226,13 +225,13 @@ COLOR_SETTINGS* SETTINGS_MANAGER::loadColorSettingsByName( const wxString& aName
} }
class COLOR_SETTINGS_LOADER : public wxDirTraverser class JSON_DIR_TRAVERSER : public wxDirTraverser
{ {
private: private:
std::function<void( const wxString& )> m_action; std::function<void( const wxFileName& )> m_action;
public: public:
explicit COLOR_SETTINGS_LOADER( std::function<void( const wxString& )> aAction ) explicit JSON_DIR_TRAVERSER( std::function<void( const wxFileName& )> aAction )
: m_action( std::move( aAction ) ) : m_action( std::move( aAction ) )
{ {
} }
@ -241,17 +240,15 @@ public:
{ {
wxFileName file( aFilePath ); wxFileName file( aFilePath );
if( file.GetExt() != "json" ) if( file.GetExt() == "json" )
return wxDIR_CONTINUE; m_action( file );
m_action( file.GetName() );
return wxDIR_CONTINUE; return wxDIR_CONTINUE;
} }
wxDirTraverseResult OnDir( const wxString& dirPath ) override wxDirTraverseResult OnDir( const wxString& dirPath ) override
{ {
return wxDIR_IGNORE; return wxDIR_CONTINUE;
} }
}; };
@ -296,16 +293,44 @@ void SETTINGS_MANAGER::loadAllColorSettings()
for( COLOR_SETTINGS* settings : COLOR_SETTINGS::CreateBuiltinColorSettings() ) for( COLOR_SETTINGS* settings : COLOR_SETTINGS::CreateBuiltinColorSettings() )
m_color_settings[settings->GetFilename()] = RegisterSettings( settings, false ); m_color_settings[settings->GetFilename()] = RegisterSettings( settings, false );
// Search for and load any other settings wxFileName third_party_path;
COLOR_SETTINGS_LOADER loader( [&]( const wxString& aFilename ) const ENV_VAR_MAP& env = Pgm().GetLocalEnvVariables();
{ auto it = env.find( "KICAD6_3RD_PARTY" );
registerColorSettings( aFilename );
} );
wxDir colors_dir( GetColorSettingsPath() ); if( it != env.end() && !it->second.GetValue().IsEmpty() )
third_party_path.SetPath( it->second.GetValue() );
else
third_party_path.SetPath( PATHS::GetDefault3rdPartyPath() );
third_party_path.AppendDir( "colors" );
wxDir third_party_colors_dir( third_party_path.GetFullPath() );
wxString color_settings_path = GetColorSettingsPath();
JSON_DIR_TRAVERSER copier(
[&]( const wxFileName& aFilename )
{
wxFileName new_file( color_settings_path, aFilename.GetFullName() );
if( !new_file.Exists() )
wxCopyFile( aFilename.GetFullPath(), new_file.GetFullPath());
} );
// Search for and load any other settings
JSON_DIR_TRAVERSER loader( [&]( const wxFileName& aFilename )
{
registerColorSettings( aFilename.GetName() );
} );
wxDir colors_dir( color_settings_path );
if( colors_dir.IsOpened() ) if( colors_dir.IsOpened() )
{
if( third_party_colors_dir.IsOpened() )
third_party_colors_dir.Traverse( copier );
colors_dir.Traverse( loader ); colors_dir.Traverse( loader );
}
} }

View File

@ -44,7 +44,8 @@
static std::vector<std::pair<PCM_PACKAGE_TYPE, wxString>> PACKAGE_TYPE_LIST = { static std::vector<std::pair<PCM_PACKAGE_TYPE, wxString>> PACKAGE_TYPE_LIST = {
{ PT_PLUGIN, _( "Plugins (%d)" ) }, { PT_PLUGIN, _( "Plugins (%d)" ) },
{ PT_LIBRARY, _( "Libraries (%d)" ) } { PT_LIBRARY, _( "Libraries (%d)" ) },
{ PT_COLORTHEME, _( "Color themes (%d)" ) },
}; };

View File

@ -40,6 +40,7 @@ const std::unordered_set<wxString> PCM_PACKAGE_DIRECTORIES( {
"models", "models",
"symbols", "symbols",
"resources", "resources",
"colors",
} ); } );

View File

@ -42,6 +42,7 @@ enum PCM_PACKAGE_TYPE
PT_INVALID, PT_INVALID,
PT_PLUGIN, PT_PLUGIN,
PT_LIBRARY, PT_LIBRARY,
PT_COLORTHEME,
}; };
@ -159,6 +160,7 @@ NLOHMANN_JSON_SERIALIZE_ENUM( PCM_PACKAGE_TYPE, {
{ PT_INVALID, "invalid" }, { PT_INVALID, "invalid" },
{ PT_PLUGIN, "plugin" }, { PT_PLUGIN, "plugin" },
{ PT_LIBRARY, "library" }, { PT_LIBRARY, "library" },
{ PT_COLORTHEME, "colortheme" },
} ) } )

View File

@ -32,7 +32,8 @@
"type": "string", "type": "string",
"enum": [ "enum": [
"plugin", "plugin",
"library" "library",
"colortheme"
], ],
"description": "Type of the package" "description": "Type of the package"
}, },