24#include <wx/splitter.h>
25#include <wx/stattext.h>
51 void SetLibrary(
const wxString& aNickname,
const std::vector<LIB_TREE_ITEM*>& aItems )
60 DoAddLibrary( aNickname, wxEmptyString, aItems,
false,
false );
91 [
this](
const LIB_ID& aLibId )
96 wxBoxSizer* sizer =
new wxBoxSizer( wxVERTICAL );
97 wxSplitterWindow* splitter =
new wxSplitterWindow(
this, wxID_ANY, wxDefaultPosition, wxDefaultSize,
98 wxSP_LIVE_UPDATE | wxSP_3D );
100 wxPanel* treePanel =
new wxPanel( splitter );
101 wxBoxSizer* treeSizer =
new wxBoxSizer( wxVERTICAL );
104 treeSizer->Add( m_tree, 1, wxEXPAND, 0 );
106 m_status =
new wxStaticText( treePanel, wxID_ANY, wxEmptyString );
107 treeSizer->Add( m_status, 0, wxEXPAND | wxALL, 5 );
109 treePanel->SetSizer( treeSizer );
111 wxPanel* previewPanel =
new wxPanel( splitter );
112 wxBoxSizer* previewSizer =
new wxBoxSizer( wxVERTICAL );
115 previewSizer->Add( m_symbolPreview, 11, wxEXPAND | wxALL, 5 );
117 m_footprintChoice =
new wxChoice( previewPanel, wxID_ANY );
118 m_footprintChoice->SetToolTip(
_(
"Footprints offered by the selected row" ) );
119 previewSizer->Add( m_footprintChoice, 0, wxEXPAND | wxLEFT | wxRIGHT, 5 );
124 previewSizer->Add( m_footprintPreview, 10, wxEXPAND | wxALL, 5 );
130 previewPanel->SetSizer( previewSizer );
132 splitter->SetSashGravity( 0.5 );
133 splitter->SetMinimumPaneSize( 80 );
134 splitter->SplitHorizontally( treePanel, previewPanel );
136 sizer->Add( splitter, 1, wxEXPAND, 0 );
139 m_adapter->FinishTreeInitialization();
144 showSymbol(
nullptr, 1 );
157 std::vector<std::unique_ptr<LIB_SYMBOL>> aSymbols )
164 std::map<wxString, std::unique_ptr<LIB_SYMBOL>> symbols;
165 std::vector<LIB_TREE_ITEM*> items;
167 for( std::unique_ptr<LIB_SYMBOL>& symbol : aSymbols )
169 LIB_ID id = symbol->GetLibId();
171 id.SetLibItemName( symbol->GetName() );
172 symbol->SetLibId(
id );
174 symbols[symbol->GetName()] = std::move( symbol );
178 for(
const auto& [
name, symbol] : symbols )
179 items.push_back( symbol.get() );
196 m_tree->Regenerate(
false );
220 m_tree->SelectLibId(
id );
221 m_tree->CenterLibId(
id );
228 return it ==
m_symbols.end() ? nullptr : it->second.get();
257 m_symbolPreview->SetStatusText(
_(
"Symbol not found; check the symbols column" ) );
273 for(
const wxString& footprint : aSymbol->
GetFPFilters() )
275 if( footprint.Contains( wxS(
":" ) ) && !footprint.Contains( wxS(
"*" ) ) && !footprint.Contains( wxS(
"?" ) ) )
306 if( aFootprint.IsEmpty() )
315 else if(
id.Parse( aFootprint ) == -1 &&
id.IsValid() )
void onFootprintSelected(wxCommandEvent &aEvent)
const LIB_SYMBOL * findSymbol(const LIB_ID &aLibId) const
void showSymbol(const LIB_SYMBOL *aSymbol, int aUnit)
void showFootprint(const wxString &aFootprint)
void onSymbolSelected(wxCommandEvent &aEvent)
WX_DEBOUNCED_ACTION m_footprintLoadRetry
Polls the footprint library load, which DisplayFootprint() needs finished.
FOOTPRINT_PREVIEW_WIDGET * m_footprintPreview
void SelectSymbol(const wxString &aSymbolName)
~DB_LIB_PREVIEW_PANEL() override
wxObjectDataPtr< LIB_TREE_MODEL_ADAPTER > m_adapter
void SetSymbols(const wxString &aLibNickname, std::vector< std::unique_ptr< LIB_SYMBOL > > aSymbols)
Replaces the previewed library, keeping the selected symbol when it still exists.
DB_LIB_PREVIEW_PANEL(wxWindow *aParent, EDA_BASE_FRAME *aFrame, KIWAY *aKiway, EDA_DRAW_PANEL_GAL::GAL_TYPE aCanvasType)
SYMBOL_PREVIEW_WIDGET * m_symbolPreview
void SetStatus(const wxString &aText)
Shows a one-line status below the library tree.
wxChoice * m_footprintChoice
std::map< wxString, std::unique_ptr< LIB_SYMBOL > > m_symbols
Tree model over symbols the preview panel owns.
wxString GenerateInfo(const LIB_ID &aLibId, int aUnit) override
bool CanPinLibraries() const override
Pinning writes to the project, so trees of libraries outside it must opt out.
std::function< const LIB_SYMBOL *(const LIB_ID &)> m_lookup
void SetLibrary(const wxString &aNickname, const std::vector< LIB_TREE_ITEM * > &aItems)
DB_LIB_PREVIEW_TREE_ADAPTER(EDA_BASE_FRAME *aFrame, APP_SETTINGS_BASE::LIB_TREE &aSettings, std::function< const LIB_SYMBOL *(const LIB_ID &)> aLookup)
PROJECT::LIB_TYPE_T getLibType() override
The base frame for deriving all KiCad main window classes.
Hold an error message and may be used when throwing exceptions containing meaningful error messages.
A minimalistic software bus for communications between various DLLs/DSOs (DSOs) within the same KiCad...
A logical library item identifier and consists of various portions much like a URI.
bool IsValid() const
Check if this LID_ID is valid.
int SetLibNickname(const UTF8 &aLibNickname)
Override the logical library name portion of the LIB_ID to aLibNickname.
const UTF8 & GetLibItemName() const
Define a library symbol object.
LIB_ID GetSourceLibId() const
wxArrayString GetFPFilters() const
std::unique_ptr< LIB_SYMBOL > Flatten() const
Return a flattened symbol inheritance to the caller.
RAII guard that detaches the GtkTreeView from the model across a tree rebuild so a deferred frame-clo...
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
LIB_TREE_NODE_LIBRARY & DoAddLibrary(const wxString &aNodeName, const wxString &aDesc, const std::vector< LIB_TREE_ITEM * > &aItemList, bool aPinned, bool aPresorted)
Add the given list of symbols by alias.
wxDataViewCtrl * m_widget
Widget displaying a tree of symbols with optional search text control and description panel.
wxString GenerateAliasInfo(SYMBOL_LIBRARY_ADAPTER *aLibs, LIB_ID const &aLibId, int aUnit)
Return an HTML page describing a LIB_ID in a SYMBOL_LIBRARY_ADAPTER.
static LIB_SYMBOL * findSymbol(const wxString &aName, LEGACY_SYMBOL_LIBS *aLibs, bool aCached)
Search the libraries for the first symbol with a given name.