63#include <wx/srchctrl.h>
106 m_unitChoice(
nullptr ),
107 m_libList(
nullptr ),
108 m_symbolList(
nullptr )
110 m_aboutTitle =
_HKI(
"KiCad Symbol Library Browser" );
122 m_libListWidth = 200;
123 m_symbolListWidth = 300;
124 m_listPowerOnly =
false;
127 GetScreen()->m_Center =
true;
136 GetRenderSettings()->LoadColors( GetColorSettings() );
148 wxPanel* libPanel =
new wxPanel(
this );
149 wxSizer* libSizer =
new wxBoxSizer( wxVERTICAL );
152 wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER );
153 m_libFilter->SetDescriptiveText(
_(
"Filter" ) );
154 libSizer->Add( m_libFilter, 0, wxEXPAND, 5 );
157 0,
nullptr, wxLB_HSCROLL | wxNO_BORDER );
158 libSizer->Add( m_libList, 1, wxEXPAND, 5 );
160 libPanel->SetSizer( libSizer );
163 wxPanel* symbolPanel =
new wxPanel(
this );
164 wxSizer* symbolSizer =
new wxBoxSizer( wxVERTICAL );
167 wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER );
168 m_symbolFilter->SetDescriptiveText(
_(
"Filter" ) );
169 m_symbolFilter->SetToolTip(
170 _(
"Filter on symbol name, keywords, description and pin count.\n"
171 "Search terms are separated by spaces. All search terms must match.\n"
172 "A term which is a number will also match against the pin count." ) );
173 symbolSizer->Add( m_symbolFilter, 0, wxEXPAND, 5 );
178 m_libFilter->SetMinSize( wxSize( -1, GetTextExtent( wxT(
"qb" ) ).y + 10 ) );
179 m_symbolFilter->SetMinSize( wxSize( -1, GetTextExtent( wxT(
"qb" ) ).y + 10 ) );
183 0,
nullptr, wxLB_HSCROLL | wxNO_BORDER );
184 symbolSizer->Add( m_symbolList, 1, wxEXPAND, 5 );
186 symbolPanel->SetSizer( symbolSizer );
193 m_selection_changed =
false;
197 m_auimgr.SetManagedWindow(
this );
202 m_auimgr.AddPane( m_mainToolBar,
EDA_PANE().HToolbar().Name(
"MainToolbar" ).Top().Layer(6) );
203 m_auimgr.AddPane( m_messagePanel,
EDA_PANE().Messages().Name(
"MsgPanel" ) .Bottom().Layer(6) );
205 m_auimgr.AddPane( libPanel,
EDA_PANE().Palette().Name(
"Libraries" ).Left().Layer(2)
206 .CaptionVisible(
false ).MinSize( 100, -1 ).BestSize( 200, -1 ) );
207 m_auimgr.AddPane( symbolPanel,
EDA_PANE().Palette().Name(
"Symbols" ).Left().Layer(1)
208 .CaptionVisible(
false ).MinSize( 100, -1 ).BestSize( 300, -1 ) );
210 m_auimgr.AddPane( GetCanvas(),
EDA_PANE().Canvas().Name(
"DrawFrame" ).Center() );
214 if( m_libListWidth > 0 )
215 SetAuiPaneSize( m_auimgr, m_auimgr.GetPane(
"Libraries" ), m_libListWidth, -1 );
217 if( m_symbolListWidth > 0 )
218 SetAuiPaneSize( m_auimgr, m_auimgr.GetPane(
"Symbols" ), m_symbolListWidth, -1 );
220 FinishAUIInitialization();
226 GetCanvas()->SetCanFocus(
false );
235 bbox.
SetOrigin( -max_size_x / 2, -max_size_y / 2 );
236 bbox.
SetSize( max_size_x, max_size_y );
237 GetCanvas()->GetView()->SetBoundary( bbox );
241 wxString symbName = m_symbolList->GetStringSelection();
243 if( !symbName.IsEmpty() )
245 SetSelectedSymbol( symbName );
246 updatePreviewSymbol();
269 std::unique_ptr<WX_PROGRESS_REPORTER> progressReporter =
nullptr;
273 progressReporter = std::make_unique<WX_PROGRESS_REPORTER>(
this,
274 _(
"Loading Symbol Libraries" ),
275 libraryNames.size(),
true );
281 std::unordered_map<wxString, std::vector<LIB_SYMBOL*>> loadedSymbols;
284 progressReporter.get() );
290 while( !loader.
Done() )
292 if( progressReporter && !progressReporter->KeepRefreshing() )
309 msg.Replace(
"\n",
"<BR>" );
353#define ENABLE( x ) ACTION_CONDITIONS().Enable( x )
354#define CHECK( x ) ACTION_CONDITIONS().Check( x )
358 auto electricalTypesShownCondition =
364 auto pinNumbersShownCondition =
377 auto demorganStandardCond =
383 auto demorganAlternateCond =
389 auto haveDatasheetCond =
412 m_unit = aUnit > 0 ? aUnit : 1;
453 std::shared_ptr<LIB_SYMBOL> parent = symbol->
GetParent().lock();
456 parentName = parent->GetName();
503 for(
int ii = 0; ii < unit_count; ii++ )
532 std::vector<wxString> pinnedMatches;
533 std::vector<wxString> otherMatches;
536 [&](
const wxString& aLib )
541 pinnedMatches.push_back( aLib );
545 otherMatches.push_back( aLib );
550 [&](
const wxString& aLib )
562 wxArrayString aliasNames;
566 if( aliasNames.IsEmpty() )
579 std::vector<wxString> subLibraries;
582 for(
const wxString& lib : subLibraries )
584 wxString suffix = lib.IsEmpty() ? wxString( wxT(
"" ) )
585 : wxString::Format( wxT(
" - %s" ), lib );
586 wxString
name = wxString::Format( wxT(
"%s%s" ), aLib, suffix );
599 for(
const wxString& lib : libs )
604 wxStringTokenizer tokenizer(
m_libFilter->GetValue() );
606 while( tokenizer.HasMoreTokens() )
608 const wxString term = tokenizer.GetNextToken().Lower();
611 for(
const wxString& lib : libs )
613 if( matcher.
Find( lib.Lower() ) )
622 for(
const wxString&
name : pinnedMatches )
625 for(
const wxString&
name : otherMatches )
631 if( index != wxNOT_FOUND )
663 if( libName.IsEmpty() )
666 std::vector<LIB_SYMBOL*> symbols;
676 std::set<wxString> excludes;
682 while( tokenizer.HasMoreTokens() )
684 const wxString filterTerm = tokenizer.GetNextToken().Lower();
689 std::vector<SEARCH_TERM> searchTerms = symbol->GetSearchTerms();
690 int matched = matcher.
ScoreTerms( searchTerms );
692 if( filterTerm.IsNumber() && wxAtoi( filterTerm ) == (
int)symbol->GetPinCount() )
696 excludes.insert( symbol->GetName() );
706 && !subLib.IsSameAs( symbol->GetLibId().GetSubLibraryName() ) )
711 if( !excludes.count( symbol->GetName() ) )
724 bool changed =
false;
726 if( index == wxNOT_FOUND )
755 && selection.Find(
'-' ) != wxNOT_FOUND )
759 selection = selection.BeforeLast(
'-', &sublib ).Trim();
760 sublib.Trim(
false );
771 const wxString& aSubLibName )
861 int maxWidth = cfg->m_LibViewPanel.window.state.size_x - 80;
912 if( aEnvVarsChanged )
919 if( event.GetActive() )
951 std::shared_ptr<LIB_SYMBOL> tmp = symbol->
IsAlias() ? symbol->
GetParent().lock()
983 if( aEvent.GetKeyCode() == WXK_UP )
987 int prev =
m_libList->GetSelection() - 1;
994 wxCommandEvent
dummy;
1000 wxCommandEvent
dummy;
1004 else if( aEvent.GetKeyCode() == WXK_DOWN )
1015 wxCommandEvent
dummy;
1021 wxCommandEvent
dummy;
1025 else if( aEvent.GetKeyCode() == WXK_TAB &&
m_libFilter->HasFocus() )
1027 if( !aEvent.ShiftDown() )
1032 else if( aEvent.GetKeyCode() == WXK_TAB &&
m_symbolFilter->HasFocus() )
1034 if( aEvent.ShiftDown() )
1039 else if( ( aEvent.GetKeyCode() == WXK_RETURN || aEvent.GetKeyCode() == WXK_NUMPAD_ENTER )
1042 wxCommandEvent
dummy;
1058 if( ii != wxNOT_FOUND || ii != (
int)
m_symbolList->GetCount() - 1 )
1072 if( ii != wxNOT_FOUND && ii != 0 )
1102 wxString title = row ? row->
GetFullURI(
true ) :
_(
"[no library selected]" );
1104 title += wxT(
" \u2014 " ) +
_(
"Symbol Library Browser" );
1131 wxCHECK2( tbl && symbol,
break );
1138 wxString libfullname = row->
GetFullURI(
true );
1141 wxLogTrace(
"KICAD_LIB_WATCH",
"Received refresh symbol request for %s, current symbols "
1142 "is %s", lib, libfullname );
1144 if( lib == libfullname )
1146 wxLogTrace(
"KICAD_LIB_WATCH",
"Refreshing symbol %s", symbol->
GetName() );
constexpr EDA_IU_SCALE schIUScale
static PGM_BASE * process
wxBitmap KiBitmap(BITMAPS aBitmap, int aHeightTag)
Construct a wxBitmap from an image identifier Returns the image from the active theme if the image ha...
static TOOL_ACTION toggleGrid
static TOOL_ACTION zoomFitScreen
Manage TOOL_ACTION objects.
void SetConditions(const TOOL_ACTION &aAction, const ACTION_CONDITIONS &aConditions)
Set the conditions the UI elements for activating a specific tool action should use for determining t...
APP_SETTINGS_BASE is a settings class that should be derived for each standalone KiCad application.
void SetOrigin(const Vec &pos)
void SetSize(const Vec &size)
COLOR4D GetColor(int aLayer) const
Handle actions that are shared between different applications.
virtual APP_SETTINGS_BASE * config() const
Returns the settings object used in SaveSettings(), and is overloaded in KICAD_MANAGER_FRAME.
virtual void setupUIConditions()
Setup the UI conditions for the various actions and their controls in this frame.
bool ProcessEvent(wxEvent &aEvent) override
Override the default process event handler to implement the auto save feature.
int ScoreTerms(std::vector< SEARCH_TERM > &aWeightedTerms)
bool Find(const wxString &aTerm, int &aMatchersTriggered, int &aPosition)
virtual void ClearMsgPanel()
Clear all messages from the message panel.
COLOR_SETTINGS * m_colorSettings
GAL_DISPLAY_OPTIONS_IMPL & GetGalDisplayOptions()
Return a reference to the gal rendering options used by GAL for rendering.
void AppendMsgPanel(const wxString &aTextUpper, const wxString &aTextLower, int aPadding=6)
Append a message to the message panel.
void StopDrawing()
Prevent the GAL canvas from further drawing until it is recreated or StartDrawing() is called.
void ForceRefresh()
Force a redraw.
virtual void Refresh(bool aEraseBackground=true, const wxRect *aRect=nullptr) override
KIGFX::GAL * GetGAL() const
Return a pointer to the GAL instance used in the panel.
void SetEventDispatcher(TOOL_DISPATCHER *aEventDispatcher)
Set a dispatcher that processes events and forwards them to tools.
void SetStealsFocus(bool aStealsFocus)
Set whether focus is taken on certain events (mouseover, keys, etc).
Specialization of the wxAuiPaneInfo class for KiCad panels.
virtual const wxString & GetText() const
Return the string associated with the text object.
Class that groups generic conditions for editor states.
SELECTION_CONDITION GridVisible()
Create a functor testing if the grid is visible in a frame.
PANEL_LIB_VIEW m_LibViewPanel
Gather all the actions that are shared by tools.
static TOOL_ACTION showDeMorganAlternate
static TOOL_ACTION showDeMorganStandard
static TOOL_ACTION addSymbolToSchematic
static TOOL_ACTION showPinNumbers
static TOOL_ACTION showDatasheet
Inspection and Editing.
static TOOL_ACTION showElectricalTypes
void ReadWindowSettings(WINDOW_SETTINGS &aCfg)
Read GAL config options from application-level config.
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.
double m_gridMinSpacing
Whether or not to draw the coordinate system axes.
bool m_axesEnabled
Fullscreen crosshair or small cross.
void SetAxesColor(const COLOR4D &aAxesColor)
Set the axes color.
Store schematic specific render settings.
bool m_ShowPinsElectricalType
virtual void Add(VIEW_ITEM *aItem, int aDrawPriority=-1)
Add a VIEW_ITEM to the view.
virtual void Remove(VIEW_ITEM *aItem)
Remove a VIEW_ITEM from the view.
void UpdateAllItems(int aUpdateFlags)
Update all items in the view according to the given flags.
static void CreateNilUuids(bool aNil=true)
A performance optimization which disables/enables the generation of pseudo-random UUIDs.
Carry a payload from one KIWAY_PLAYER to another within a PROJECT.
std::string & GetPayload()
Return the payload, which can be any text but it typically self identifying s-expression.
MAIL_T Command()
Returns the MAIL_T associated with this mail.
bool Destroy() override
Our version of Destroy() which is virtual from wxWidgets.
A minimalistic software bus for communications between various DLLs/DSOs (DSOs) within the same KiCad...
virtual PROJECT & Prj() const
Return the PROJECT associated with this KIWAY.
A logical library item identifier and consists of various portions much like a URI.
int SetLibItemName(const UTF8 &aLibItemName)
Override the library item name portion of the LIB_ID to aLibItemName.
bool IsValid() const
Check if this LID_ID is valid.
void SetSubLibraryName(const UTF8 &aName)
const wxString GetUniStringLibItemName() const
Get strings for display messages in dialogs.
int SetLibNickname(const UTF8 &aNickname)
Override the logical library name portion of the LIB_ID to aNickname.
const wxString GetUniStringLibNickname() const
UTF8 GetSubLibraryName() const
Some LIB_IDs can have a sub-library identifier in addition to a library nickname.
const UTF8 & GetLibNickname() const
Return the logical library name portion of a LIB_ID.
const wxString GetFullLibraryName() const
Define a library symbol object.
wxString GetUnitDisplayName(int aUnit) override
Return the user-defined display name for aUnit for symbols with units.
LIB_ID GetLibId() const override
wxString GetName() const override
LIB_SYMBOL_SPTR SharedPtr() const
int GetUnitCount() const override
For items with units, return the number of units.
std::unique_ptr< LIB_SYMBOL > Flatten() const
Return a flattened symbol inheritance to the caller.
LIB_FIELD & GetDatasheetField()
Return reference to the datasheet field.
bool HasConversion() const
Test if symbol has more than one body conversion type (DeMorgan).
LIB_SYMBOL_REF & GetParent()
const wxString GetFullURI(bool aSubstituted=false) const
Return the full location specifying URI for the LIB, either in original UI form or in environment var...
bool GetIsVisible() const
std::vector< wxString > GetLogicalLibs()
Return the logical library names, all of them that are pertinent to a look up done on this LIB_TABLE.
static const wxString GetPinningSymbol()
Instantiate the current locale within a scope in which you are expecting exceptions to be thrown.
The backing store for a PROJECT, in JSON format.
static SYMBOL_LIB_TABLE * SchSymbolLibTable(PROJECT *aProject)
Accessor for project symbol library table.
virtual PROJECT_FILE & GetProjectFile() const
A shim class between EDA_DRAW_FRAME and several derived classes: SYMBOL_EDIT_FRAME,...
void SaveSettings(APP_SETTINGS_BASE *aCfg) override
Save common frame parameters to a configuration data file.
void LoadSettings(APP_SETTINGS_BASE *aCfg) override
Load common frame parameters from a configuration file.
SCH_SCREEN * GetScreen() const override
Return a pointer to a BASE_SCREEN or one of its derivatives.
SCH_DRAW_PANEL * GetCanvas() const override
Return a pointer to GAL-based canvas of given EDA draw frame.
void CommonSettingsChanged(bool aEnvVarsChanged, bool aTextVarsChanged) override
Notification event that some of the common (suite-wide) settings have changed.
KIGFX::SCH_RENDER_SETTINGS * GetRenderSettings()
KIGFX::SCH_VIEW * GetView() const override
Return a pointer to the #VIEW instance used in the panel.
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.
Handle actions for the various symbol editor and viewers.
Hold a record identifying a symbol library accessed by the appropriate symbol library SCH_PLUGIN obje...
void GetSubLibraryNames(std::vector< wxString > &aNames) const
bool SupportsSubLibraries() const
void LoadSymbolLib(std::vector< LIB_SYMBOL * > &aAliasList, const wxString &aNickname, bool aPowerSymbolsOnly=false)
void EnumerateSymbolLib(const wxString &aNickname, wxArrayString &aAliasNames, bool aPowerSymbolsOnly=false)
Return a list of symbol alias names contained within the library given by aNickname.
LIB_SYMBOL * LoadSymbol(const wxString &aNickname, const wxString &aName)
Load a LIB_SYMBOL having aName from the library given by aNickname.
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...
Symbol library viewer main window.
void SetUnitAndConvert(int aUnit, int aConvert)
Set unit and convert, and set flag preventing them from automatically resetting to 1.
void OnLibFilter(wxCommandEvent &aEvent)
void updatePreviewSymbol()
std::unique_ptr< LIB_SYMBOL > m_previewItem
void CloseLibraryViewer(wxCommandEvent &event)
wxArrayString m_allowedLibs
void onSelectNextSymbol(wxCommandEvent &aEvent)
wxSearchCtrl * m_libFilter
void SetSelectedLibrary(const wxString &aLibName, const wxString &aSubLibName=wxEmptyString)
Set the selected library in the library window.
void ClickOnLibList(wxCommandEvent &event)
void onUpdateUnitChoice(wxUpdateUIEvent &aEvent)
void DClickOnSymbolList(wxCommandEvent &event)
void OnActivate(wxActivateEvent &event)
Called when the frame is activated to reload the libraries and symbol lists that can be changed by th...
void OnSymFilter(wxCommandEvent &aEvent)
void setupUIConditions() override
Setup the UI conditions for the various actions and their controls in this frame.
void doCloseWindow() override
void SetSelectedSymbol(const wxString &aSymbolName)
Set the selected symbol.
static bool m_show_progress
WX_LISTBOX * m_symbolList
void KiwayMailIn(KIWAY_EXPRESS &mail) override
Receive KIWAY_EXPRESS messages from other players.
bool ReCreateLibList()
Create o recreates a sorted list of currently loaded libraries.
SELECTION & GetCurrentSelection() override
Get the current selection from the canvas area.
void ClickOnSymbolList(wxCommandEvent &event)
const BOX2I GetDocumentExtents(bool aIncludeAllVisible=true) const override
Returns bbox of document with option to not include some items.
wxSearchCtrl * m_symbolFilter
void LoadSettings(APP_SETTINGS_BASE *aCfg) override
Load common frame parameters from a configuration file.
void CommonSettingsChanged(bool aEnvVarsChanged, bool aTextVarsChanged) override
Notification event that some of the common (suite-wide) settings have changed.
static LIB_ID m_currentSymbol
WINDOW_SETTINGS * GetWindowSettings(APP_SETTINGS_BASE *aCfg) override
Return a pointer to the window settings for this frame.
void OnCharHook(wxKeyEvent &aEvent) override
Capture the key event before it is sent to the GUI.
LIB_SYMBOL * GetSelectedSymbol() const
void onSelectSymbolUnit(wxCommandEvent &aEvent)
void OnSize(wxSizeEvent &event) override
Recalculate the size of toolbars and display panel when the frame size changes.
void onSelectPreviousSymbol(wxCommandEvent &aEvent)
void SaveSettings(APP_SETTINGS_BASE *aCfg) override
Save common frame parameters to a configuration data file.
bool m_selection_changed
Updated to true if a list rewrite on GUI activation resulted in the symbol selection changing,...
bool ReCreateSymbolList()
Create or recreate the list of symbols in the currently selected library.
wxString GetBaseString(int n) const
int FindString(const wxString &s, bool bCase=false) const override
bool SetStringSelection(const wxString &s) override
This file is part of the common library.
#define DEFAULT_LINE_WIDTH_MILS
The default wire width in mils. (can be changed in preference menu)
#define KICAD_DEFAULT_DRAWFRAME_STYLE
#define LIB_VIEW_FRAME_NAME
Abstract pattern-matching tool and implementations.
@ ID_LIBVIEW_SELECT_UNIT_NUMBER
GERBVIEW_FRAME::OnZipFileHistory GERBVIEW_FRAME::OnSelectDisplayMode EVT_CHOICE(ID_GBR_AUX_TOOLBAR_PCB_APERATTRIBUTES_CHOICE, GERBVIEW_FRAME::OnSelectHighlightChoice) EVT_UPDATE_UI(ID_TOOLBARH_GERBVIEW_SELECT_ACTIVE_LAYER
@ LAYER_SCHEMATIC_GRID_AXES
Message panel definition file.
@ ALL
All except INITIAL_ADD.
bool contains(const _Container &__container, _Value __value)
Returns true if the container contains the given value.
KIWAY Kiway & Pgm(), KFCTL_STANDALONE
The global Program "get" accessor.
std::vector< FAB_LAYER_COLOR > dummy
wxString UnescapeString(const wxString &aSource)
wxString EscapeString(const wxString &aSource, ESCAPE_CONTEXT aContext)
The Escape/Unescape routines use HTML-entity-reference-style encoding to handle characters which are:...
Functors that can be used to figure out how the action controls should be displayed in the UI and if ...
std::vector< wxString > pinned_symbol_libs
constexpr int mmToIU(double mm) const
bool show_pin_electrical_type
Stores the common settings that are saved and loaded for each window / frame.
void SetAuiPaneSize(wxAuiManager &aManager, wxAuiPaneInfo &aPane, int aWidth, int aHeight)
Sets the size of an AUI pane, working around http://trac.wxwidgets.org/ticket/13180.