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;