25#include <wx/tokenzr.h>
41#define PROGRESS_INTERVAL_MILLIS 33
44wxObjectDataPtr<LIB_TREE_MODEL_ADAPTER>
48 return wxObjectDataPtr<LIB_TREE_MODEL_ADAPTER>( adapter );
68 std::unique_ptr<WX_PROGRESS_REPORTER> progressReporter =
nullptr;
72 progressReporter = std::make_unique<WX_PROGRESS_REPORTER>( aFrame,
73 _(
"Loading Symbol Libraries" ),
74 aNicknames.size(),
true );
80 std::unordered_map<wxString, std::vector<LIB_SYMBOL*>> loadedSymbolMap;
83 progressReporter.get() );
89 while( !loader.
Done() )
91 if( progressReporter && !progressReporter->KeepRefreshing() )
99 bool cancelled =
false;
101 if( progressReporter )
102 cancelled = progressReporter->IsCancelled();
111 msg.Replace(
"\n",
"<BR>" );
117 if( loadedSymbolMap.size() > 0 )
123 [&](
const wxString& aLibName,
const std::vector<LIB_SYMBOL*>& aSymbolList,
124 const wxString& aDescription )
126 std::vector<LIB_TREE_ITEM*> treeItems( aSymbolList.begin(), aSymbolList.end() );
130 DoAddLibrary( aLibName, aDescription, treeItems, pinned,
false );
133 for(
const auto& [libNickname, libSymbols] : loadedSymbolMap )
137 wxCHECK2( row,
continue );
142 std::vector<wxString> additionalColumns;
145 for(
const wxString& column : additionalColumns )
150 std::vector<wxString> subLibraries;
155 for(
const wxString& lib : subLibraries )
157 wxString suffix = lib.IsEmpty() ? wxString( wxT(
"" ) )
158 : wxString::Format( wxT(
" - %s" ), lib );
159 wxString
name = wxString::Format( wxT(
"%s%s" ), libNickname, suffix );
162 if( !parentDesc.IsEmpty() )
164 desc = wxString::Format( wxT(
"%s (%s)" ),
166 desc.IsEmpty() ? lib : desc );
171 std::vector<LIB_SYMBOL*> symbols;
173 std::copy_if( libSymbols.begin(), libSymbols.end(),
174 std::back_inserter( symbols ),
177 return utf8Lib == aSym->GetLibId().GetSubLibraryName();
180 addFunc(
name, symbols, desc );
194 if( progressReporter )
201 progressReporter.reset();
211 bool onlyPowerSymbols = (
GetFilter() != nullptr );
212 std::vector<LIB_SYMBOL*> symbols;
213 std::vector<LIB_TREE_ITEM*> comp_list;
221 wxLogError(
_(
"Error loading symbol library '%s'." ) + wxS(
"\n%s" ),
227 if( symbols.size() > 0 )
229 comp_list.assign( symbols.begin(), symbols.end() );
void MessageSet(const wxString &message)
Add a message (in bold) to message list.
void AddHTML_Text(const wxString &message)
Add HTML text (without any change) to message list.
Hold an error message and may be used when throwing exceptions containing meaningful error messages.
virtual const wxString What() const
A composite of Problem() and Where()
static void CreateNilUuids(bool aNil=true)
A performance optimization which disables/enables the generation of pseudo-random UUIDs.
PROJECT & Prj() const
Return a reference to the PROJECT associated with this KIWAY.
A logical library item identifier and consists of various portions much like a URI.
Define a library symbol object.
bool GetIsVisible() const
Manage LIB_TABLE_ROW records (rows), and can be searched based on library nickname.
const wxString GetDescription(const wxString &aNickname)
LIB_TREE_NODE_ROOT m_tree
void addColumnIfNecessary(const wxString &aHeader)
void DoAddLibrary(const wxString &aNodeName, const wxString &aDesc, const std::vector< LIB_TREE_ITEM * > &aItemList, bool pinned, bool presorted)
Add the given list of symbols by alias.
std::function< bool(LIB_TREE_NODE &aNode)> * GetFilter() const
Return the active filter.
std::vector< wxString > m_availableColumns
void AssignIntrinsicRanks(bool presorted=false)
Store intrinsic ranks on all children of this node.
Instantiate the current locale within a scope in which you are expecting exceptions to be thrown.
virtual COMMON_SETTINGS * GetCommonSettings() const
The backing store for a PROJECT, in JSON format.
virtual PROJECT_FILE & GetProjectFile() const
A shim class between EDA_DRAW_FRAME and several derived classes: SYMBOL_EDIT_FRAME,...
bool Done()
Returns a string containing any errors generated during the load.
const wxString & GetErrors() const
Represents a pair of <nickname, loaded parts list>
void Start()
Spins up threads to load all the libraries in m_nicknames.
bool Join()
Finalizes the threads and combines the output into the target output map.
Hold a record identifying a symbol library accessed by the appropriate symbol library SCH_IO object i...
void GetAvailableSymbolFields(std::vector< wxString > &aNames) const
void GetSubLibraryNames(std::vector< wxString > &aNames) const
bool SupportsSubLibraries() const
wxString GetSubLibraryDescription(const wxString &aName) const
void LoadSymbolLib(std::vector< LIB_SYMBOL * > &aAliasList, const wxString &aNickname, bool aPowerSymbolsOnly=false)
SYMBOL_LIB_TABLE_ROW * FindRow(const wxString &aNickName, bool aCheckIfEnabled=false)
Return an SYMBOL_LIB_TABLE_ROW if aNickName is found in this table or in any chained fallBack table f...
wxString GenerateInfo(LIB_ID const &aLibId, int aUnit) override
bool AddLibraries(const std::vector< wxString > &aNicknames, SCH_BASE_FRAME *aFrame)
Add all the libraries in a SYMBOL_LIB_TABLE to the model.
SYMBOL_TREE_MODEL_ADAPTER(SCH_BASE_FRAME *aParent, LIB_TABLE *aLibs)
Constructor; takes a set of libraries to be included in the search.
static wxObjectDataPtr< LIB_TREE_MODEL_ADAPTER > Create(SCH_BASE_FRAME *aParent, LIB_TABLE *aLibs)
Factory function: create a model adapter in a reference-counting container.
static bool m_show_progress
Flag to only show the symbol library table load progress dialog the first time.
void AddLibrary(wxString const &aLibNickname, bool pinned)
~SYMBOL_TREE_MODEL_ADAPTER()
Destructor.
SYMBOL_LIB_TABLE * m_libs
An 8 bit string that is assuredly encoded in UTF8, and supplies special conversion support to and fro...
wxString GenerateAliasInfo(SYMBOL_LIB_TABLE *aSymLibTable, LIB_ID const &aLibId, int aUnit)
Return an HTML page describing a LIB_ID in a SYMBOL_LIB_TABLE.
bool contains(const _Container &__container, _Value __value)
Returns true if the container contains the given value.
PGM_BASE & Pgm()
The global Program "get" accessor.
std::vector< wxString > pinned_symbol_libs
#define PROGRESS_INTERVAL_MILLIS