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.
 
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...
 
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)
 
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