28#include <wx/settings.h>
41wxObjectDataPtr<LIB_TREE_MODEL_ADAPTER>
45 return wxObjectDataPtr<LIB_TREE_MODEL_ADAPTER>( adapter );
52 aParent->GetViewerSettingsBase()->m_LibTree ),
69 return node ? node->
m_Type == LIB_TREE_NODE::TYPE::LIBRARY :
true;
73#define PROGRESS_INTERVAL_MILLIS 120
76 std::function<
void(
int,
int,
const wxString& )> aProgressCallback )
86 for(
auto it =
m_tree.m_Children.begin(); it !=
m_tree.m_Children.end(); )
88 const wxString&
name = it->get()->m_Name;
90 if( wxGetUTCTimeMillis() > nextUpdate )
92 aProgressCallback( i, max,
name );
102 ||
name == aForceRefresh )
128 if( wxGetUTCTimeMillis() > nextUpdate )
130 aProgressCallback( i++, max, libName );
134 auto optRow = adapter->
GetRow( libName );
135 wxCHECK2( optRow.has_value(),
continue );
154 for(
const wxString& libName :
m_libMgr->GetLibraryNames() )
174 else if( hashIt->second !=
m_libMgr->GetLibraryHash( aLibNode.
m_Name ) )
177 std::list<LIB_SYMBOL*> symbols =
m_libMgr->EnumerateSymbols( aLibNode.
m_Name );
182 auto symbolIt = std::find_if( symbols.begin(), symbols.end(),
185 return a->GetName() == (*nodeIt)->m_LibId.GetLibItemName().wx_str();
188 if( symbolIt != symbols.end() )
193 symbols.erase( symbolIt );
218LIB_TREE_NODE::PTR_VECTOR::iterator
223 return m_tree.m_Children.erase( aLibNodeIt );
232 return wxDataViewItem();
237 unsigned int aCol )
const
241 aVariant = wxEmptyString;
252 node->
m_Name =
m_frame->GetCurSymbol()->GetLibId().GetUniStringLibItemName();
260 if( node->
m_Type == LIB_TREE_NODE::TYPE::LIBRARY )
263 aVariant = aVariant.GetString() +
" *";
265 else if( node->
m_Type == LIB_TREE_NODE::TYPE::ITEM )
268 aVariant = aVariant.GetString() +
" *";
276 if( node->
m_Type == LIB_TREE_NODE::TYPE::LIBRARY )
282 node->
m_Desc = ( *optRow )->Description();
285 aVariant =
_(
"(failed to load)" ) + wxS(
" " ) + aVariant.GetString();
287 aVariant =
_(
"(read-only)" ) + wxS(
" " ) + aVariant.GetString();
294 node->
m_Desc =
m_frame->GetCurSymbol()->GetShownDescription();
299 if( key == wxT(
"Description" ) )
301 else if( node->
m_Fields.count( key ) )
302 valueStr = node->
m_Fields.at( key );
304 valueStr = wxEmptyString;
306 valueStr.Replace( wxS(
"\n" ), wxS(
" " ) );
308 if( !aVariant.GetString().IsEmpty() )
310 if( !valueStr.IsEmpty() )
311 aVariant = valueStr + wxS(
" - " ) + aVariant.GetString();
324 wxDataViewItemAttr& aAttr )
const
330 wxCHECK( node,
false );
333 if( node->
m_Type == LIB_TREE_NODE::TYPE::LIBRARY && !
m_libMgr->IsLibraryLoaded( node->
m_Name ) )
335 aAttr.SetColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) );
347 case LIB_TREE_NODE::TYPE::LIBRARY:
356 aAttr.SetStrikethrough(
true );
363 case LIB_TREE_NODE::TYPE::ITEM:
373 aAttr.SetStrikethrough(
true );
390 wxCHECK( node,
false );
400 const wxDataViewItem& aItem )
410 wxBoxSizer* mainSizer =
new wxBoxSizer( wxVERTICAL );
411 aParent->SetSizer( mainSizer );
417 wxBoxSizer* panelSizer =
new wxBoxSizer( wxVERTICAL );
418 panel->SetSizer( panelSizer );
423 preview->SetLayoutDirection( wxLayout_LeftToRight );
425 panelSizer->Add( preview, 1, wxEXPAND | wxALL, 1 );
426 mainSizer->Add( panel, 1, wxEXPAND, 0 );
436 wxWindow* previewWindow = wxWindow::FindWindowByName(
c_previewName, aParent );
440 preview->GetCanvas()->SetEvtHandlerEnabled(
false );
441 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
void addColumnIfNecessary(const wxString &aHeader)
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...
std::vector< wxString > GetAvailableExtraFields(const wxString &aNickname)
Returns a list of additional (non-mandatory) symbol fields present in the given library.
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