28#include <wx/settings.h>
41wxObjectDataPtr<LIB_TREE_MODEL_ADAPTER>
46 return wxObjectDataPtr<LIB_TREE_MODEL_ADAPTER>( adapter );
53 aParent->GetViewerSettingsBase()->m_LibTree ),
70 return node ? node->
m_Type == LIB_TREE_NODE::TYPE::LIBRARY :
true;
74#define PROGRESS_INTERVAL_MILLIS 120
77 std::function<
void(
int,
int,
const wxString& )> aProgressCallback )
87 for(
auto it =
m_tree.m_Children.begin(); it !=
m_tree.m_Children.end(); )
89 const wxString&
name = it->get()->m_Name;
91 if( wxGetUTCTimeMillis() > nextUpdate )
93 aProgressCallback( i, max,
name );
103 ||
name == aForceRefresh )
129 if( wxGetUTCTimeMillis() > nextUpdate )
131 aProgressCallback( i++, max, libName );
135 auto optRow = adapter->
GetRow( libName );
136 wxCHECK2( optRow.has_value(),
continue );
156 for(
const wxString& libName :
m_libMgr->GetLibraryNames() )
176 else if( hashIt->second !=
m_libMgr->GetLibraryHash( aLibNode.
m_Name ) )
179 std::list<LIB_SYMBOL*> symbols =
m_libMgr->EnumerateSymbols( aLibNode.
m_Name );
184 auto symbolIt = std::find_if( symbols.begin(), symbols.end(),
187 return a->GetName() == (*nodeIt)->m_LibId.GetLibItemName().wx_str();
190 if( symbolIt != symbols.end() )
195 symbols.erase( symbolIt );
215LIB_TREE_NODE::PTR_VECTOR::iterator
220 return m_tree.m_Children.erase( aLibNodeIt );
229 return wxDataViewItem();
234 unsigned int aCol )
const
238 aVariant = wxEmptyString;
249 node->
m_Name =
m_frame->GetCurSymbol()->GetLibId().GetUniStringLibItemName();
257 if( node->
m_Type == LIB_TREE_NODE::TYPE::LIBRARY )
260 aVariant = aVariant.GetString() +
" *";
262 else if( node->
m_Type == LIB_TREE_NODE::TYPE::ITEM )
265 aVariant = aVariant.GetString() +
" *";
273 if( node->
m_Type == LIB_TREE_NODE::TYPE::LIBRARY )
279 node->
m_Desc = ( *optRow )->Description();
282 aVariant =
_(
"(failed to load)" ) + wxS(
" " ) + aVariant.GetString();
284 aVariant =
_(
"(read-only)" ) + wxS(
" " ) + aVariant.GetString();
291 node->
m_Desc =
m_frame->GetCurSymbol()->GetShownDescription();
296 if( key == wxT(
"Description" ) )
298 else if( node->
m_Fields.count( key ) )
299 valueStr = node->
m_Fields.at( key );
301 valueStr = wxEmptyString;
303 valueStr.Replace( wxS(
"\n" ), wxS(
" " ) );
305 if( !aVariant.GetString().IsEmpty() )
307 if( !valueStr.IsEmpty() )
308 aVariant = valueStr + wxS(
" - " ) + aVariant.GetString();
321 wxDataViewItemAttr& aAttr )
const
327 wxCHECK( node,
false );
330 if( node->
m_Type == LIB_TREE_NODE::TYPE::LIBRARY && !
m_libMgr->IsLibraryLoaded( node->
m_Name ) )
332 aAttr.SetColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) );
344 case LIB_TREE_NODE::TYPE::LIBRARY:
353 aAttr.SetStrikethrough(
true );
360 case LIB_TREE_NODE::TYPE::ITEM:
370 aAttr.SetStrikethrough(
true );
387 wxCHECK( node,
false );
397 const wxDataViewItem& aItem )
407 wxBoxSizer* mainSizer =
new wxBoxSizer( wxVERTICAL );
408 aParent->SetSizer( mainSizer );
414 wxBoxSizer* panelSizer =
new wxBoxSizer( wxVERTICAL );
415 panel->SetSizer( panelSizer );
420 preview->SetLayoutDirection( wxLayout_LeftToRight );
422 panelSizer->Add( preview, 1, wxEXPAND | wxALL, 1 );
423 mainSizer->Add( panel, 1, wxEXPAND, 0 );
433 wxWindow* previewWindow = wxWindow::FindWindowByName(
c_previewName, aParent );
437 preview->GetCanvas()->SetEvtHandlerEnabled(
false );
438 preview->GetCanvas()->StopDrawing();
static const COLOR4D BLACK
bool HasLibrary(const wxString &aNickname, bool aCheckEnabled=false) const
Test for the existence of aNickname in the library tables.
std::optional< LIBRARY_TABLE_ROW * > GetRow(const wxString &aNickname, LIBRARY_TABLE_SCOPE aScope=LIBRARY_TABLE_SCOPE::BOTH) const
Like LIBRARY_MANAGER::GetRow but filtered to the LIBRARY_TABLE_TYPE of this adapter.
std::vector< std::pair< wxString, LIB_STATUS > > GetLibraryStatuses() const
Returns a list of all library nicknames and their status (even if they failed to load)
const UTF8 & GetLibNickname() const
Return the logical library name portion of a LIB_ID.
Define a library symbol object.
const LIB_ID & GetLibId() const override
LIB_TREE_MODEL_ADAPTER(EDA_BASE_FRAME *aParent, const wxString &aPinnedKey, APP_SETTINGS_BASE::LIB_TREE &aSettingsStruct)
Create the adapter.
LIB_TREE_NODE_ROOT m_tree
static LIB_TREE_NODE * ToNode(wxDataViewItem aItem)
Convert wxDataViewItem -> #SYM_TREE_NODE.
static wxDataViewItem ToItem(const LIB_TREE_NODE *aNode)
Convert #SYM_TREE_NODE -> wxDataViewItem.
static const wxString GetPinningSymbol()
@ NAME_COL
Library or library item name column.
std::map< unsigned, wxString > m_colIdxMap
virtual int GetLibrariesCount() const
Return the number of libraries loaded in the tree.
wxDataViewCtrl * m_widget
std::vector< wxString > m_shownColumns
LIB_TREE_NODE_LIBRARY & DoAddLibraryNode(const wxString &aNodeName, const wxString &aDesc, bool pinned)
wxDataViewItem FindItem(const LIB_ID &aLibId)
Returns tree item corresponding to part.
void Update(LIB_TREE_ITEM *aItem)
Update the node using data from a LIB_ALIAS object.
LIB_TREE_NODE_ITEM & AddItem(LIB_TREE_ITEM *aItem)
Construct a new alias node, add it to this library, and return it.
Model class in the component selector Model-View-Adapter (mediated MVC) architecture.
std::map< wxString, wxString > m_Fields
List of weighted search terms.
void AssignIntrinsicRanks(const std::vector< wxString > &aShownColumns, bool presorted=false)
Store intrinsic ranks on all children of this node.
virtual COMMON_SETTINGS * GetCommonSettings() const
The backing store for a PROJECT, in JSON format.
static SYMBOL_LIBRARY_ADAPTER * SymbolLibAdapter(PROJECT *aProject)
Accessor for project symbol library manager adapter.
Handle actions for the various symbol editor and viewers.
The symbol library editor main window.
An interface to the global shared library manager that is schematic-specific and linked to one projec...
Class to handle modifications to the symbol libraries.
LIB_TREE_NODE::PTR_VECTOR::iterator deleteLibrary(LIB_TREE_NODE::PTR_VECTOR::iterator &aLibNodeIt)
SYMBOL_LIBRARY_MANAGER * m_libMgr
void GetValue(wxVariant &aVariant, wxDataViewItem const &aItem, unsigned int aCol) const override
SYMBOL_EDIT_FRAME * m_frame
bool GetAttr(wxDataViewItem const &aItem, unsigned int aCol, wxDataViewItemAttr &aAttr) const override
void ShutdownPreview(wxWindow *aParent) override
void updateLibrary(LIB_TREE_NODE_LIBRARY &aLibNode)
wxDataViewItem GetCurrentDataViewItem() override
static wxObjectDataPtr< LIB_TREE_MODEL_ADAPTER > Create(SYMBOL_EDIT_FRAME *aParent, SYMBOL_LIBRARY_MANAGER *aLibs)
void ShowPreview(wxWindow *aParent, const wxDataViewItem &aItem) override
int GetLibrariesCount() const override
Return the number of libraries loaded in the tree.
int m_lastSyncHash
SYMBOL_LIBRARY_MANAGER hash value returned in the last synchronization.
void Sync(const wxString &aForceRefresh, std::function< void(int, int, const wxString &)> aProgressCallback)
TOOL_INTERACTIVE * GetContextMenuTool() override
bool IsContainer(const wxDataViewItem &aItem) const override
bool HasPreview(const wxDataViewItem &aItem) override
std::map< wxString, int > m_libHashes
Hashes to decide whether a library needs an update.
SYMBOL_TREE_SYNCHRONIZING_ADAPTER(SYMBOL_EDIT_FRAME *aParent, SYMBOL_LIBRARY_MANAGER *aLibMgr)
void SetBorders(bool aLeft, bool aRight, bool aTop, bool aBottom)
void SetBorderColor(const KIGFX::COLOR4D &aColor)
bool contains(const _Container &__container, _Value __value)
Returns true if the container contains the given value.
PGM_BASE & Pgm()
The global program "get" accessor.
wxString UnescapeString(const wxString &aSource)
std::vector< wxString > pinned_symbol_libs
#define PROGRESS_INTERVAL_MILLIS
static const wxString c_previewName