7
mirror of https://gitlab.com/kicad/code/kicad.git synced 2025-04-11 14:40:11 +00:00

Enum class ELEM.

This commit is contained in:
Marek Roszko 2024-08-18 21:09:37 -04:00
parent 58e3c5bb6b
commit b101c1a0c3
20 changed files with 75 additions and 73 deletions

View File

@ -56,9 +56,9 @@ public:
S3D_CACHE();
virtual ~S3D_CACHE();
KICAD_T ProjectElementType() noexcept override
PROJECT::ELEM ProjectElementType() noexcept override
{
return S3D_CACHE_T;
return PROJECT::ELEM::S3DCACHE;
}
/**

View File

@ -58,7 +58,7 @@ void PROJECT::ElemsClear()
// be in the same link image as PROJECT.
for( unsigned i = 0; i < arrayDim( m_elems ); ++i )
{
SetElem( ELEM_T( i ), nullptr );
SetElem( static_cast<PROJECT::ELEM>( i ), nullptr );
}
}
@ -296,23 +296,23 @@ const wxString& PROJECT::GetRString( RSTRING_T aIndex )
}
PROJECT::_ELEM* PROJECT::GetElem( ELEM_T aIndex )
PROJECT::_ELEM* PROJECT::GetElem( PROJECT::ELEM aIndex )
{
// This is virtual, so implement it out of line
if( unsigned( aIndex ) < arrayDim( m_elems ) )
return m_elems[aIndex];
if( static_cast<unsigned>( aIndex ) < arrayDim( m_elems ) )
return m_elems[static_cast<unsigned>( aIndex )];
return nullptr;
}
void PROJECT::SetElem( ELEM_T aIndex, _ELEM* aElem )
void PROJECT::SetElem( PROJECT::ELEM aIndex, _ELEM* aElem )
{
// This is virtual, so implement it out of line
if( unsigned( aIndex ) < arrayDim( m_elems ) )
if( static_cast<unsigned>( aIndex ) < arrayDim( m_elems ) )
{
delete m_elems[aIndex];
m_elems[aIndex] = aElem;
delete m_elems[static_cast<unsigned>(aIndex)];
m_elems[static_cast<unsigned>( aIndex )] = aElem;
}
}
@ -341,11 +341,11 @@ FP_LIB_TABLE* PROJECT::PcbFootprintLibs( KIWAY& aKiway )
// This is a lazy loading function, it loads the project specific table when
// that table is asked for, not before.
FP_LIB_TABLE* tbl = (FP_LIB_TABLE*) GetElem( ELEM_FPTBL );
FP_LIB_TABLE* tbl = (FP_LIB_TABLE*) GetElem( PROJECT::ELEM::FPTBL );
if( tbl )
{
wxASSERT( tbl->ProjectElementType() == FP_LIB_TABLE_T );
wxASSERT( tbl->ProjectElementType() == PROJECT::ELEM::FPTBL );
}
else
{
@ -359,7 +359,7 @@ FP_LIB_TABLE* PROJECT::PcbFootprintLibs( KIWAY& aKiway )
tbl = (FP_LIB_TABLE*) kiface->IfaceOrAddress( KIFACE_NEW_FOOTPRINT_TABLE );
tbl->Load( FootprintLibTblName() );
SetElem( ELEM_FPTBL, tbl );
SetElem( PROJECT::ELEM::FPTBL, tbl );
}
catch( const IO_ERROR& ioe )
{

View File

@ -130,7 +130,7 @@ void DIALOG_SYMBOL_REMAP::OnRemapSymbols( wxCommandEvent& aEvent )
wxRemoveFile( prjSymLibTableFileName.GetFullPath() );
createProjectSymbolLibTable( m_messagePanel->Reporter() );
Prj().SetElem( PROJECT::ELEM_SYMBOL_LIB_TABLE, nullptr );
Prj().SetElem( PROJECT::ELEM::SYMBOL_LIB_TABLE, nullptr );
PROJECT_SCH::SchSymbolLibTable( &Prj() );
remapSymbolsToLibTable( m_messagePanel->Reporter() );
@ -142,7 +142,7 @@ void DIALOG_SYMBOL_REMAP::OnRemapSymbols( wxCommandEvent& aEvent )
SYMBOL_LIBS::SetLibNamesAndPaths( &Prj(), paths, libNames );
// Reload the cache symbol library.
Prj().SetElem( PROJECT::ELEM_SCH_SYMBOL_LIBS, nullptr );
Prj().SetElem( PROJECT::ELEM::SCH_SYMBOL_LIBS, nullptr );
PROJECT_SCH::SchLibs( &Prj() );
Raise();

View File

@ -192,25 +192,25 @@ bool SCH_EDIT_FRAME::OpenProjectFiles( const std::vector<wxString>& aFileSet, in
{
// Don't reload the symbol libraries if we are just launching Eeschema from KiCad again.
// They are already saved in the kiface project object.
if( differentProject || !Prj().GetElem( PROJECT::ELEM_SCH_SYMBOL_LIBS ) )
if( differentProject || !Prj().GetElem( PROJECT::ELEM::SCH_SYMBOL_LIBS ) )
{
// load the libraries here, not in SCH_SCREEN::Draw() which is a context
// that will not tolerate DisplayError() dialog since we're already in an
// event handler in there.
// And when a schematic file is loaded, we need these libs to initialize
// some parameters (links to PART LIB, dangling ends ...)
Prj().SetElem( PROJECT::ELEM_SCH_SYMBOL_LIBS, nullptr );
Prj().SetElem( PROJECT::ELEM::SCH_SYMBOL_LIBS, nullptr );
PROJECT_SCH::SchLibs( &Prj() );
}
}
else
{
// No legacy symbol libraries including the cache are loaded with the new file format.
Prj().SetElem( PROJECT::ELEM_SCH_SYMBOL_LIBS, nullptr );
Prj().SetElem( PROJECT::ELEM::SCH_SYMBOL_LIBS, nullptr );
}
// Load the symbol library table, this will be used forever more.
Prj().SetElem( PROJECT::ELEM_SYMBOL_LIB_TABLE, nullptr );
Prj().SetElem( PROJECT::ELEM::SYMBOL_LIB_TABLE, nullptr );
PROJECT_SCH::SchSymbolLibTable( &Prj() );
// Load project settings after schematic has been set up with the project link, since this will

View File

@ -728,12 +728,13 @@ bool LEGACY_RESCUER::WriteRescueLibrary( wxWindow *aParent )
wxString libPaths;
wxString libName = m_rescue_lib->GetName();
SYMBOL_LIBS *libs = dynamic_cast<SYMBOL_LIBS*>( m_prj->GetElem( PROJECT::ELEM_SCH_SYMBOL_LIBS ) );
SYMBOL_LIBS* libs =
dynamic_cast<SYMBOL_LIBS*>( m_prj->GetElem( PROJECT::ELEM::SCH_SYMBOL_LIBS ) );
if( !libs )
{
libs = new SYMBOL_LIBS();
m_prj->SetElem( PROJECT::ELEM_SCH_SYMBOL_LIBS, libs );
m_prj->SetElem( PROJECT::ELEM::SCH_SYMBOL_LIBS, libs );
}
try
@ -759,7 +760,7 @@ bool LEGACY_RESCUER::WriteRescueLibrary( wxWindow *aParent )
boost::ptr_vector<SYMBOL_LIB> libsSave;
libsSave.transfer( libsSave.end(), libs->begin(), libs->end(), *libs );
m_prj->SetElem( PROJECT::ELEM_SCH_SYMBOL_LIBS, nullptr );
m_prj->SetElem( PROJECT::ELEM::SCH_SYMBOL_LIBS, nullptr );
libs = new SYMBOL_LIBS();
@ -780,7 +781,7 @@ bool LEGACY_RESCUER::WriteRescueLibrary( wxWindow *aParent )
return false;
}
m_prj->SetElem( PROJECT::ELEM_SCH_SYMBOL_LIBS, libs );
m_prj->SetElem( PROJECT::ELEM::SCH_SYMBOL_LIBS, libs );
// Update the schematic symbol library links since the library list has changed.
SCH_SCREENS schematic( m_schematic->Root() );
@ -900,7 +901,7 @@ bool SYMBOL_LIB_TABLE_RESCUER::WriteRescueLibrary( wxWindow *aParent )
}
}
m_prj->SetElem( PROJECT::ELEM_SYMBOL_LIB_TABLE, nullptr );
m_prj->SetElem( PROJECT::ELEM::SYMBOL_LIB_TABLE, nullptr );
// This can only happen if the symbol library table file was corrupted on write.
if( !PROJECT_SCH::SchSymbolLibTable( m_prj ) )

View File

@ -40,16 +40,16 @@ static void add_search_paths( SEARCH_STACK* aDst, const SEARCH_STACK& aSrc, int
SEARCH_STACK* PROJECT_SCH::SchSearchS( PROJECT* aProject )
{
SEARCH_STACK* ss = (SEARCH_STACK*) aProject->GetElem( PROJECT::ELEM_SCH_SEARCH_STACK );
SEARCH_STACK* ss = (SEARCH_STACK*) aProject->GetElem( PROJECT::ELEM::SCH_SEARCH_STACK );
wxASSERT( !ss || dynamic_cast<SEARCH_STACK*>( aProject->GetElem( PROJECT::ELEM_SCH_SEARCH_STACK ) ) );
wxASSERT( !ss || dynamic_cast<SEARCH_STACK*>( ss ) );
if( !ss )
{
ss = new SEARCH_STACK();
// Make PROJECT the new SEARCH_STACK owner.
aProject->SetElem( PROJECT::ELEM_SCH_SEARCH_STACK, ss );
aProject->SetElem( PROJECT::ELEM::SCH_SEARCH_STACK, ss );
// to the empty SEARCH_STACK for SchSearchS(), add project dir as first
ss->AddPaths( aProject->GetProjectDirectory() );
@ -89,16 +89,16 @@ SEARCH_STACK* PROJECT_SCH::SchSearchS( PROJECT* aProject )
SYMBOL_LIBS* PROJECT_SCH::SchLibs( PROJECT* aProject )
{
SYMBOL_LIBS* libs = (SYMBOL_LIBS*) aProject->GetElem( PROJECT::ELEM_SCH_SYMBOL_LIBS );
SYMBOL_LIBS* libs = (SYMBOL_LIBS*) aProject->GetElem( PROJECT::ELEM::SCH_SYMBOL_LIBS );
wxASSERT( !libs || libs->ProjectElementType() == SYMBOL_LIBS_T );
wxASSERT( !libs || libs->ProjectElementType() == PROJECT::ELEM::SCH_SYMBOL_LIBS );
if( !libs )
{
libs = new SYMBOL_LIBS();
// Make PROJECT the new SYMBOL_LIBS owner.
aProject->SetElem( PROJECT::ELEM_SCH_SYMBOL_LIBS, libs );
aProject->SetElem( PROJECT::ELEM::SCH_SYMBOL_LIBS, libs );
try
{
@ -136,10 +136,11 @@ SYMBOL_LIB_TABLE* PROJECT_SCH::SchSymbolLibTable( PROJECT* aProject )
// This is a lazy loading function, it loads the project specific table when
// that table is asked for, not before.
SYMBOL_LIB_TABLE* tbl = (SYMBOL_LIB_TABLE*) aProject->GetElem( PROJECT::ELEM_SYMBOL_LIB_TABLE );
SYMBOL_LIB_TABLE* tbl =
(SYMBOL_LIB_TABLE*) aProject->GetElem( PROJECT::ELEM::SYMBOL_LIB_TABLE );
// its gotta be NULL or a SYMBOL_LIB_TABLE, or a bug.
wxASSERT( !tbl || tbl->ProjectElementType() == SYMBOL_LIB_TABLE_T );
wxASSERT( !tbl || tbl->ProjectElementType() == PROJECT::ELEM::SYMBOL_LIB_TABLE );
if( !tbl )
{
@ -148,7 +149,7 @@ SYMBOL_LIB_TABLE* PROJECT_SCH::SchSymbolLibTable( PROJECT* aProject )
// stack this way, all using the same global fallback table.
tbl = new SYMBOL_LIB_TABLE( &SYMBOL_LIB_TABLE::GetGlobalLibTable() );
aProject->SetElem( PROJECT::ELEM_SYMBOL_LIB_TABLE, tbl );
aProject->SetElem( PROJECT::ELEM::SYMBOL_LIB_TABLE, tbl );
wxString prjPath;

View File

@ -453,7 +453,7 @@ SCH_SHEET* SCH_IO_ALTIUM::LoadSchematicFile( const wxString& aFileName, SCHEMATI
}
// Reload the symbol library table.
m_schematic->Prj().SetElem( PROJECT::ELEM_SYMBOL_LIB_TABLE, nullptr );
m_schematic->Prj().SetElem( PROJECT::ELEM::SYMBOL_LIB_TABLE, nullptr );
PROJECT_SCH::SchSymbolLibTable( &m_schematic->Prj() );
}

View File

@ -131,7 +131,7 @@ SCH_SHEET* SCH_IO_CADSTAR_ARCHIVE::LoadSchematicFile( const wxString& aFi
}
// Relaod the symbol library table.
aSchematic->Prj().SetElem( PROJECT::ELEM_SYMBOL_LIB_TABLE, NULL );
aSchematic->Prj().SetElem( PROJECT::ELEM::SYMBOL_LIB_TABLE, NULL );
PROJECT_SCH::SchSymbolLibTable( &aSchematic->Prj() );
}

View File

@ -429,7 +429,7 @@ SCH_SHEET* SCH_IO_EAGLE::LoadSchematicFile( const wxString& aFileName, SCHEMATIC
}
// Reload the symbol library table.
m_schematic->Prj().SetElem( PROJECT::ELEM_SYMBOL_LIB_TABLE, nullptr );
m_schematic->Prj().SetElem( PROJECT::ELEM::SYMBOL_LIB_TABLE, nullptr );
PROJECT_SCH::SchSymbolLibTable( &m_schematic->Prj() );
}

View File

@ -622,7 +622,7 @@ SCH_SHEET* SCH_IO_EASYEDAPRO::LoadSchematicFile( const wxString& aFileName,
}
// Relaod the symbol library table.
aSchematic->Prj().SetElem( PROJECT::ELEM_SYMBOL_LIB_TABLE, NULL );
aSchematic->Prj().SetElem( PROJECT::ELEM::SYMBOL_LIB_TABLE, NULL );
PROJECT_SCH::SchSymbolLibTable( &aSchematic->Prj() );
}

View File

@ -146,7 +146,7 @@ private:
class SYMBOL_LIB_TABLE : public LIB_TABLE
{
public:
KICAD_T ProjectElementType() override { return SYMBOL_LIB_TABLE_T; }
PROJECT::ELEM ProjectElementType() override { return PROJECT::ELEM::SYMBOL_LIB_TABLE; }
static const char* PropPowerSymsOnly;
static const char* PropNonPowerSymsOnly;

View File

@ -62,7 +62,7 @@ typedef boost::ptr_vector< SYMBOL_LIB > SYMBOL_LIBS_BASE;
class SYMBOL_LIBS : public SYMBOL_LIBS_BASE, public PROJECT::_ELEM
{
public:
KICAD_T ProjectElementType() override { return SYMBOL_LIBS_T; }
PROJECT::ELEM ProjectElementType() override { return PROJECT::ELEM::SCH_SYMBOL_LIBS; }
SYMBOL_LIBS() {}

View File

@ -98,7 +98,7 @@ private:
class FP_LIB_TABLE : public LIB_TABLE
{
public:
KICAD_T ProjectElementType() override { return FP_LIB_TABLE_T; }
PROJECT::ELEM ProjectElementType() override { return PROJECT::ELEM::FPTBL; }
virtual void Parse( LIB_TABLE_LEXER* aLexer ) override;

View File

@ -61,6 +61,22 @@ class PROJECT_LOCAL_SETTINGS;
class KICOMMON_API PROJECT
{
public:
/**
* The set of #_ELEMs that a #PROJECT can hold.
*/
enum class ELEM
{
FPTBL,
SCH_SYMBOL_LIBS,
SCH_SEARCH_STACK,
S3DCACHE,
SYMBOL_LIB_TABLE,
SEARCH_STACK,
COUNT
};
/**
* A #PROJECT can hold stuff it knows nothing about, in the form of _ELEM derivatives.
*
@ -74,7 +90,7 @@ public:
public:
virtual ~_ELEM() {}
virtual KICAD_T ProjectElementType() = 0; // Sanity-checking for returned values.
virtual PROJECT::ELEM ProjectElementType() = 0; // Sanity-checking for returned values.
};
PROJECT();
@ -215,22 +231,6 @@ public:
*/
virtual void SetRString( RSTRING_T aStringId, const wxString& aString );
/**
* The set of #_ELEMs that a #PROJECT can hold.
*/
enum ELEM_T
{
ELEM_FPTBL,
ELEM_SCH_SYMBOL_LIBS,
ELEM_SCH_SEARCH_STACK,
ELEM_3DCACHE,
ELEM_SYMBOL_LIB_TABLE,
ELEM_PCB,
ELEM_COUNT
};
/**
* Get and set the elements for this project.
*
@ -243,8 +243,8 @@ public:
* -#) #PROJECT knows nothing about #_ELEM objects except how to delete them and
* set and get pointers to them.
*/
virtual _ELEM* GetElem( ELEM_T aIndex );
virtual void SetElem( ELEM_T aIndex, _ELEM* aElem );
virtual _ELEM* GetElem( PROJECT::ELEM aIndex );
virtual void SetElem( PROJECT::ELEM aIndex, _ELEM* aElem );
/**
* Delete all the _ELEMs and set their pointers to NULL.
@ -338,7 +338,7 @@ private:
wxString m_rstrings[RSTRING_COUNT];
/// @see this::Elem() and enum ELEM_T.
_ELEM* m_elems[ELEM_COUNT];
_ELEM* m_elems[static_cast<unsigned int>( PROJECT::ELEM::COUNT )];
};

View File

@ -42,7 +42,7 @@
class KICOMMON_API SEARCH_STACK : public wxPathList, public PROJECT::_ELEM
{
public:
KICAD_T ProjectElementType() override { return SEARCH_STACK_T; }
PROJECT::ELEM ProjectElementType() override { return PROJECT::ELEM::SEARCH_STACK; }
#if defined(DEBUG)
void Show( const wxString& aPrefix ) const;

View File

@ -922,8 +922,8 @@ int KICAD_MANAGER_CONTROL::ShowPluginManager( const TOOL_EVENT& aEvent )
&& ( settings->m_PcmLibAutoAdd || settings->m_PcmLibAutoRemove ) )
{
// Reset project tables
Prj().SetElem( PROJECT::ELEM_SYMBOL_LIB_TABLE, nullptr );
Prj().SetElem( PROJECT::ELEM_FPTBL, nullptr );
Prj().SetElem( PROJECT::ELEM::SYMBOL_LIB_TABLE, nullptr );
Prj().SetElem( PROJECT::ELEM::FPTBL, nullptr );
KIWAY& kiway = m_frame->Kiway();

View File

@ -39,10 +39,10 @@ FP_LIB_TABLE* PROJECT_PCB::PcbFootprintLibs( PROJECT* aProject )
// This is a lazy loading function, it loads the project specific table when
// that table is asked for, not before.
FP_LIB_TABLE* tbl = (FP_LIB_TABLE*) aProject->GetElem( PROJECT::ELEM_FPTBL );
FP_LIB_TABLE* tbl = (FP_LIB_TABLE*) aProject->GetElem( PROJECT::ELEM::FPTBL );
// its gotta be NULL or a FP_LIB_TABLE, or a bug.
wxASSERT( !tbl || tbl->ProjectElementType() == FP_LIB_TABLE_T );
wxASSERT( !tbl || tbl->ProjectElementType() == PROJECT::ELEM::FPTBL );
if( !tbl )
{
@ -51,7 +51,7 @@ FP_LIB_TABLE* PROJECT_PCB::PcbFootprintLibs( PROJECT* aProject )
// stack this way, all using the same global fallback table.
tbl = new FP_LIB_TABLE( &GFootprintTable );
aProject->SetElem( PROJECT::ELEM_FPTBL, tbl );
aProject->SetElem( PROJECT::ELEM::FPTBL, tbl );
wxString projectFpLibTableFileName = aProject->FootprintLibTblName();
@ -79,7 +79,7 @@ S3D_CACHE* PROJECT_PCB::Get3DCacheManager( PROJECT* aProject, bool aUpdateProjDi
std::lock_guard<std::mutex> lock( mutex3D_cacheManager );
// Get the existing cache from the project
S3D_CACHE* cache = dynamic_cast<S3D_CACHE*>( aProject->GetElem( PROJECT::ELEM_3DCACHE ) );
S3D_CACHE* cache = dynamic_cast<S3D_CACHE*>( aProject->GetElem( PROJECT::ELEM::S3DCACHE ) );
if( !cache )
{
@ -93,7 +93,7 @@ S3D_CACHE* PROJECT_PCB::Get3DCacheManager( PROJECT* aProject, bool aUpdateProjDi
cache->SetProgramBase( &Pgm() );
cache->Set3DConfigDir( cfgpath.GetFullPath() );
aProject->SetElem( PROJECT::ELEM_3DCACHE, cache );
aProject->SetElem( PROJECT::ELEM::S3DCACHE, cache );
aUpdateProjDir = true;
}
@ -115,7 +115,7 @@ void PROJECT_PCB::Cleanup3DCache( PROJECT* aProject )
std::lock_guard<std::mutex> lock( mutex3D_cacheManager );
// Get the existing cache from the project
S3D_CACHE* cache = dynamic_cast<S3D_CACHE*>( aProject->GetElem( PROJECT::ELEM_3DCACHE ) );
S3D_CACHE* cache = dynamic_cast<S3D_CACHE*>( aProject->GetElem( PROJECT::ELEM::S3DCACHE ) );
if( cache )
{

View File

@ -48,7 +48,7 @@ void KI_TEST::SCHEMATIC_TEST_FIXTURE::LoadSchematic( const wxString& aBaseName )
m_schematic.Reset();
m_manager.LoadProject( pro.GetFullPath() );
m_manager.Prj().SetElem( PROJECT::ELEM_SCH_SYMBOL_LIBS, nullptr );
m_manager.Prj().SetElem( PROJECT::ELEM::SCH_SYMBOL_LIBS, nullptr );
m_schematic.SetProject( &m_manager.Prj() );
m_schematic.SetRoot( m_pi->LoadSchematicFile( fn.GetFullPath(), &m_schematic ) );

View File

@ -140,7 +140,7 @@ void LoadSchematic( SETTINGS_MANAGER& aSettingsManager, const wxString& aRelPath
else
aSettingsManager.LoadProject( "" );
aSettingsManager.Prj().SetElem( PROJECT::ELEM_SCH_SYMBOL_LIBS, nullptr );
aSettingsManager.Prj().SetElem( PROJECT::ELEM::SCH_SYMBOL_LIBS, nullptr );
aSchematic = LoadHierarchyFromRoot( schematicPath, &aSettingsManager.Prj() );

View File

@ -83,10 +83,10 @@ public:
{
}
KICAD_T ProjectElementType() override // from _ELEM
PROJECT::ELEM ProjectElementType() override // from _ELEM
{
// Doesn't really matter what this is
return FP_LIB_TABLE_T;
return PROJECT::ELEM::FPTBL;
}
private: