diff --git a/common/lib_tree_model_adapter.cpp b/common/lib_tree_model_adapter.cpp index 313ba6df26..ae9706364c 100644 --- a/common/lib_tree_model_adapter.cpp +++ b/common/lib_tree_model_adapter.cpp @@ -19,8 +19,10 @@ * with this program. If not, see . */ +#include #include #include +#include #include #include #include @@ -71,14 +73,15 @@ unsigned int LIB_TREE_MODEL_ADAPTER::IntoArray( LIB_TREE_NODE const& aNode, } -LIB_TREE_MODEL_ADAPTER::LIB_TREE_MODEL_ADAPTER() - :m_filter( CMP_FILTER_NONE ), - m_show_units( true ), - m_preselect_unit( 0 ), - m_freeze( 0 ), - m_col_part( nullptr ), - m_col_desc( nullptr ), - m_widget( nullptr ) +LIB_TREE_MODEL_ADAPTER::LIB_TREE_MODEL_ADAPTER( EDA_BASE_FRAME* aParent ) : + m_parent( aParent ), + m_filter( CMP_FILTER_NONE ), + m_show_units( true ), + m_preselect_unit( 0 ), + m_freeze( 0 ), + m_col_part( nullptr ), + m_col_desc( nullptr ), + m_widget( nullptr ) { // Default column widths m_colWidths[PART_COL] = 360; @@ -87,15 +90,15 @@ LIB_TREE_MODEL_ADAPTER::LIB_TREE_MODEL_ADAPTER() m_config = Kiface().KifaceSettings(); m_configPrefix = typeid( this ).name(); - // Read the column width from the config + // Read the column width from the global config int colWidth = 0; if( m_config->Read( m_configPrefix + LIST_COLUMN_WIDTH_KEY, &colWidth ) ) m_colWidths[PART_COL] = colWidth; - // JEY TODO NEW SETTINGS ARCH: read pinned items array.... - //for( UFT8 pinnedItem : pinnedItems ) - // m_pinnedLibIDs.insert( pinnedItem ); + // Read the pinned entries from the project config + m_parent->Kiway().Prj().ConfigLoad( Kiface().KifaceSearch(), m_parent->GetName(), + GetProjectFileParameters() ); } @@ -116,18 +119,30 @@ void LIB_TREE_MODEL_ADAPTER::SaveColWidths() } } + +std::vector& LIB_TREE_MODEL_ADAPTER::GetProjectFileParameters() +{ + if( !m_projectFileParams.empty() ) + return m_projectFileParams; + + m_projectFileParams.push_back( new PARAM_CFG_LIBNAME_LIST( PINNED_ITEMS_KEY, &m_pinnedLibs ) ); + + return m_projectFileParams; +} + + void LIB_TREE_MODEL_ADAPTER::SavePinnedItems() { - // JEY TODO NEW SETTINGS ARCH: clear pinned items array in settings.... + m_pinnedLibs.clear(); for( auto& child: m_tree.m_Children ) { if( child->m_Pinned ) - { - UTF8 pinnedItem = child->m_LibId.Format(); - // JEY TODO NEW SETTINGS ARCH: add pinned entry to settings array.... - } + m_pinnedLibs.push_back( child->m_LibId.GetLibNickname() ); } + + m_parent->Kiway().Prj().ConfigSave( Kiface().KifaceSearch(), m_parent->GetName(), + GetProjectFileParameters() ); } @@ -150,13 +165,22 @@ void LIB_TREE_MODEL_ADAPTER::SetPreselectNode( LIB_ID const& aLibId, int aUnit ) } +LIB_TREE_NODE_LIB& LIB_TREE_MODEL_ADAPTER::DoAddLibraryNode( wxString const& aNodeName, + wxString const& aDesc ) +{ + LIB_TREE_NODE_LIB& lib_node = m_tree.AddLib( aNodeName, aDesc ); + + lib_node.m_Pinned = m_pinnedLibs.Index( lib_node.m_LibId.GetLibNickname() ) != wxNOT_FOUND; + + return lib_node; +} + + void LIB_TREE_MODEL_ADAPTER::DoAddLibrary( wxString const& aNodeName, wxString const& aDesc, std::vector const& aItemList, bool presorted ) { - LIB_TREE_NODE_LIB& lib_node = m_tree.AddLib( aNodeName, aDesc ); - - lib_node.m_Pinned = m_pinnedLibIDs.count( lib_node.m_LibId.Format() ) > 0; + LIB_TREE_NODE_LIB& lib_node = DoAddLibraryNode( aNodeName, aDesc ); for( LIB_TREE_ITEM* item: aItemList ) lib_node.AddItem( item ); diff --git a/common/lib_tree_model_adapter.h b/common/lib_tree_model_adapter.h index 1c633f9b6f..d325ec347d 100644 --- a/common/lib_tree_model_adapter.h +++ b/common/lib_tree_model_adapter.h @@ -90,6 +90,7 @@ */ class TOOL_INTERACTIVE; +class PARAM_CFG; class LIB_TREE_MODEL_ADAPTER: public wxDataViewModel { @@ -132,6 +133,8 @@ public: void SaveColWidths(); void SavePinnedItems(); + std::vector& GetProjectFileParameters(); + /** * Set the component filter type. Must be set before adding libraries * @@ -274,7 +277,9 @@ protected: LIB_TREE_NODE_ROOT m_tree; - LIB_TREE_MODEL_ADAPTER(); + LIB_TREE_MODEL_ADAPTER( EDA_BASE_FRAME* aParent ); + + LIB_TREE_NODE_LIB& DoAddLibraryNode( wxString const& aNodeName, wxString const& aDesc ); /** * Check whether a container has columns too @@ -332,30 +337,30 @@ protected: wxDataViewItemAttr& aAttr ) const override; private: - CMP_FILTER_TYPE m_filter; - bool m_show_units; - LIB_ID m_preselect_lib_id; - int m_preselect_unit; - int m_freeze; + EDA_BASE_FRAME* m_parent; - wxDataViewColumn* m_col_part; - wxDataViewColumn* m_col_desc; - wxDataViewCtrl* m_widget; + CMP_FILTER_TYPE m_filter; + bool m_show_units; + LIB_ID m_preselect_lib_id; + int m_preselect_unit; + int m_freeze; - int m_colWidths[NUM_COLS]; + wxDataViewColumn* m_col_part; + wxDataViewColumn* m_col_desc; + wxDataViewCtrl* m_widget; - wxConfigBase* m_config; - wxString m_configPrefix; + wxConfigBase* m_config; + wxString m_configPrefix; + std::vector m_projectFileParams; - std::set m_pinnedLibIDs; + int m_colWidths[NUM_COLS]; + wxArrayString m_pinnedLibs; /** - * Find any results worth highlighting and expand them, according to given - * criteria (f(CMP_TREE_NODE const*) -> bool) + * Find any results worth highlighting and expand them, according to given criteria * The highest-scoring node is written to aHighScore */ - void FindAndExpand( LIB_TREE_NODE& aNode, - std::function aFunc, + void FindAndExpand( LIB_TREE_NODE& aNode, std::function aFunc, LIB_TREE_NODE** aHighScore ); /** diff --git a/eeschema/getpart.cpp b/eeschema/getpart.cpp index c948345e5b..199ef7191b 100644 --- a/eeschema/getpart.cpp +++ b/eeschema/getpart.cpp @@ -103,7 +103,7 @@ COMPONENT_SELECTION SCH_BASE_FRAME::SelectCompFromLibTree( const SCHLIB_FILTER* if( !dialogLock.try_lock() ) return COMPONENT_SELECTION(); - auto adapterPtr( SYMBOL_TREE_MODEL_ADAPTER::Create( libs ) ); + auto adapterPtr( SYMBOL_TREE_MODEL_ADAPTER::Create( this, libs ) ); auto adapter = static_cast( adapterPtr.get() ); bool loaded = false; diff --git a/eeschema/lib_view_frame.cpp b/eeschema/lib_view_frame.cpp index e8a2f77e40..fdd937c139 100644 --- a/eeschema/lib_view_frame.cpp +++ b/eeschema/lib_view_frame.cpp @@ -747,7 +747,7 @@ void LIB_VIEW_FRAME::OnSelectSymbol( wxCommandEvent& aEvent ) // Container doing search-as-you-type. SYMBOL_LIB_TABLE* libs = Prj().SchSymbolLibTable(); - auto adapterPtr( SYMBOL_TREE_MODEL_ADAPTER::Create( libs ) ); + auto adapterPtr( SYMBOL_TREE_MODEL_ADAPTER::Create( this, libs ) ); auto adapter = static_cast( adapterPtr.get() ); const auto libNicknames = libs->GetLogicalLibs(); diff --git a/eeschema/symbol_tree_model_adapter.cpp b/eeschema/symbol_tree_model_adapter.cpp index 264c2fa5d7..c288c50480 100644 --- a/eeschema/symbol_tree_model_adapter.cpp +++ b/eeschema/symbol_tree_model_adapter.cpp @@ -35,14 +35,16 @@ bool SYMBOL_TREE_MODEL_ADAPTER::m_show_progress = true; #define PROGRESS_INTERVAL_MILLIS 66 -SYMBOL_TREE_MODEL_ADAPTER::PTR SYMBOL_TREE_MODEL_ADAPTER::Create( LIB_TABLE* aLibs ) +SYMBOL_TREE_MODEL_ADAPTER::PTR SYMBOL_TREE_MODEL_ADAPTER::Create( EDA_BASE_FRAME* aParent, + LIB_TABLE* aLibs ) { - return PTR( new SYMBOL_TREE_MODEL_ADAPTER( aLibs ) ); + return PTR( new SYMBOL_TREE_MODEL_ADAPTER( aParent, aLibs ) ); } -SYMBOL_TREE_MODEL_ADAPTER::SYMBOL_TREE_MODEL_ADAPTER( LIB_TABLE* aLibs ) - : m_libs( (SYMBOL_LIB_TABLE*) aLibs ) +SYMBOL_TREE_MODEL_ADAPTER::SYMBOL_TREE_MODEL_ADAPTER( EDA_BASE_FRAME* aParent, LIB_TABLE* aLibs ) : + LIB_TREE_MODEL_ADAPTER( aParent ), + m_libs( (SYMBOL_LIB_TABLE*) aLibs ) {} diff --git a/eeschema/symbol_tree_model_adapter.h b/eeschema/symbol_tree_model_adapter.h index 0b6437a6cc..68a1b69027 100644 --- a/eeschema/symbol_tree_model_adapter.h +++ b/eeschema/symbol_tree_model_adapter.h @@ -40,7 +40,7 @@ public: * * @param aLibs library set from which parts will be loaded */ - static PTR Create( LIB_TABLE* aLibs ); + static PTR Create( EDA_BASE_FRAME* aParent, LIB_TABLE* aLibs ); /** * Add all the libraries in a SYMBOL_LIB_TABLE to the model. @@ -59,7 +59,7 @@ protected: /** * Constructor; takes a set of libraries to be included in the search. */ - SYMBOL_TREE_MODEL_ADAPTER( LIB_TABLE* aLibs ); + SYMBOL_TREE_MODEL_ADAPTER( EDA_BASE_FRAME* aParent, LIB_TABLE* aLibs ); private: /** diff --git a/eeschema/symbol_tree_synchronizing_adapter.cpp b/eeschema/symbol_tree_synchronizing_adapter.cpp index d81c5edce6..04c1b57fe1 100644 --- a/eeschema/symbol_tree_synchronizing_adapter.cpp +++ b/eeschema/symbol_tree_synchronizing_adapter.cpp @@ -27,7 +27,6 @@ #include #include #include -#include #include @@ -40,6 +39,7 @@ LIB_TREE_MODEL_ADAPTER::PTR SYMBOL_TREE_SYNCHRONIZING_ADAPTER::Create( LIB_EDIT_ SYMBOL_TREE_SYNCHRONIZING_ADAPTER::SYMBOL_TREE_SYNCHRONIZING_ADAPTER( LIB_EDIT_FRAME* aParent, LIB_MANAGER* aLibMgr ) : + LIB_TREE_MODEL_ADAPTER( aParent ), m_frame( aParent ), m_libMgr( aLibMgr ), m_lastSyncHash( -1 ) @@ -117,7 +117,7 @@ void SYMBOL_TREE_SYNCHRONIZING_ADAPTER::Sync( bool aForce, SYMBOL_LIB_TABLE_ROW* library = m_libMgr->GetLibrary( libName ); - auto& lib_node = m_tree.AddLib( libName, library->GetDescr() ); + auto& lib_node = DoAddLibraryNode( libName, library->GetDescr() ); updateLibrary( lib_node ); } } diff --git a/pcbnew/fp_tree_model_adapter.cpp b/pcbnew/fp_tree_model_adapter.cpp index f58c963446..19ece66f70 100644 --- a/pcbnew/fp_tree_model_adapter.cpp +++ b/pcbnew/fp_tree_model_adapter.cpp @@ -26,14 +26,16 @@ #include "fp_tree_model_adapter.h" -FP_TREE_MODEL_ADAPTER::PTR FP_TREE_MODEL_ADAPTER::Create( LIB_TABLE* aLibs ) +FP_TREE_MODEL_ADAPTER::PTR FP_TREE_MODEL_ADAPTER::Create( EDA_BASE_FRAME* aParent, + LIB_TABLE* aLibs ) { - return PTR( new FP_TREE_MODEL_ADAPTER( aLibs ) ); + return PTR( new FP_TREE_MODEL_ADAPTER( aParent, aLibs ) ); } -FP_TREE_MODEL_ADAPTER::FP_TREE_MODEL_ADAPTER( LIB_TABLE* aLibs ) - : m_libs( (FP_LIB_TABLE*) aLibs ) +FP_TREE_MODEL_ADAPTER::FP_TREE_MODEL_ADAPTER( EDA_BASE_FRAME* aParent, LIB_TABLE* aLibs ) : + LIB_TREE_MODEL_ADAPTER( aParent ), + m_libs( (FP_LIB_TABLE*) aLibs ) {} diff --git a/pcbnew/fp_tree_model_adapter.h b/pcbnew/fp_tree_model_adapter.h index 998f46c234..f82250f32b 100644 --- a/pcbnew/fp_tree_model_adapter.h +++ b/pcbnew/fp_tree_model_adapter.h @@ -36,7 +36,7 @@ public: * * @param aLibs library set from which parts will be loaded */ - static PTR Create( LIB_TABLE* aLibs ); + static PTR Create( EDA_BASE_FRAME* aParent, LIB_TABLE* aLibs ); void AddLibraries(); @@ -46,7 +46,7 @@ protected: /** * Constructor; takes a set of libraries to be included in the search. */ - FP_TREE_MODEL_ADAPTER( LIB_TABLE* aLibs ); + FP_TREE_MODEL_ADAPTER( EDA_BASE_FRAME* aParent, LIB_TABLE* aLibs ); std::vector getFootprints( const wxString& aLibName ); diff --git a/pcbnew/fp_tree_synchronizing_adapter.cpp b/pcbnew/fp_tree_synchronizing_adapter.cpp index 39c11ee9f0..e572d9cbba 100644 --- a/pcbnew/fp_tree_synchronizing_adapter.cpp +++ b/pcbnew/fp_tree_synchronizing_adapter.cpp @@ -42,7 +42,7 @@ LIB_TREE_MODEL_ADAPTER::PTR FP_TREE_SYNCHRONIZING_ADAPTER::Create( FOOTPRINT_EDI FP_TREE_SYNCHRONIZING_ADAPTER::FP_TREE_SYNCHRONIZING_ADAPTER( FOOTPRINT_EDIT_FRAME* aFrame, FP_LIB_TABLE* aLibs ) : - FP_TREE_MODEL_ADAPTER( aLibs ), + FP_TREE_MODEL_ADAPTER( aFrame, aLibs ), m_frame( aFrame ) { } diff --git a/pcbnew/load_select_footprint.cpp b/pcbnew/load_select_footprint.cpp index 3c3215df48..62d4851fa7 100644 --- a/pcbnew/load_select_footprint.cpp +++ b/pcbnew/load_select_footprint.cpp @@ -216,7 +216,7 @@ MODULE* PCB_BASE_FRAME::SelectFootprintFromLibTree( LIB_ID aPreselect ) if( GFootprintList.GetErrorCount() ) GFootprintList.DisplayErrors( this ); - auto adapterPtr( FP_TREE_MODEL_ADAPTER::Create( fpTable ) ); + auto adapterPtr( FP_TREE_MODEL_ADAPTER::Create( this, fpTable ) ); auto adapter = static_cast( adapterPtr.get() ); std::vector historyInfos;