61#include <wx/srchctrl.h>
102#define LIB_VIEW_NAME "ViewlibFrame"
103#define LIB_VIEW_NAME_MODAL "ViewlibFrameModal"
105#define LIB_VIEW_STYLE ( KICAD_DEFAULT_DRAWFRAME_STYLE )
106#define LIB_VIEW_STYLE_MODAL ( KICAD_DEFAULT_DRAWFRAME_STYLE | wxFRAME_FLOAT_ON_PARENT )
110 const wxString& aLibraryName ) :
111 SCH_BASE_FRAME( aKiway, aParent, aFrameType,
_(
"Symbol Library Browser" ),
112 wxDefaultPosition, wxDefaultSize,
115 m_unitChoice( nullptr ),
116 m_libList( nullptr ),
117 m_symbolList( nullptr )
133 icon.CopyFromBitmap(
KiBitmap( BITMAPS::library_browser ) );
162 wxPanel* libPanel =
new wxPanel(
this );
163 wxSizer* libSizer =
new wxBoxSizer( wxVERTICAL );
166 wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER );
171 0,
nullptr, wxLB_HSCROLL | wxNO_BORDER );
172 libSizer->Add(
m_libList, 1, wxEXPAND, 5 );
174 libPanel->SetSizer( libSizer );
177 wxPanel* symbolPanel =
new wxPanel(
this );
178 wxSizer* symbolSizer =
new wxBoxSizer( wxVERTICAL );
181 wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER );
184 _(
"Filter on symbol name, keywords, description and pin count.\n"
185 "Search terms are separated by spaces. All search terms must match.\n"
186 "A term which is a number will also match against the pin count." ) );
192 m_libFilter->SetMinSize( wxSize( -1, GetTextExtent( wxT(
"qb" ) ).y + 10 ) );
193 m_symbolFilter->SetMinSize( wxSize( -1, GetTextExtent( wxT(
"qb" ) ).y + 10 ) );
197 0,
nullptr, wxLB_HSCROLL | wxNO_BORDER );
200 symbolPanel->SetSizer( symbolSizer );
206 if( aLibraryName.empty() )
230 m_auimgr.AddPane( libPanel,
EDA_PANE().Palette().Name(
"Libraries" ).Left().Layer(2)
231 .CaptionVisible(
false ).MinSize( 100, -1 ).BestSize( 200, -1 ) );
232 m_auimgr.AddPane( symbolPanel,
EDA_PANE().Palette().Name(
"Symbols" ).Left().Layer(1)
233 .CaptionVisible(
false ).MinSize( 100, -1 ).BestSize( 300, -1 ) );
237 m_auimgr.GetPane( libPanel ).Show( aLibraryName.empty() );
243 wxAuiPaneInfo& treePane =
m_auimgr.GetPane(
"Libraries" );
252 treePane.Resizable();
257 treePane.MinSize( 100, -1 );
262 wxAuiPaneInfo& treePane =
m_auimgr.GetPane(
"Symbols" );
271 treePane.Resizable();
276 treePane.MinSize( 100, -1 );
297 bbox.
SetOrigin( -max_size_x / 2, -max_size_y / 2 );
298 bbox.
SetSize( max_size_x, max_size_y );
305 if( !symbName.IsEmpty() )
330 std::vector<wxString> libraryNames =
Prj().SchSymbolLibTable()->GetLogicalLibs();
331 std::unique_ptr<WX_PROGRESS_REPORTER> progressReporter =
nullptr;
335 progressReporter = std::make_unique<WX_PROGRESS_REPORTER>(
this,
336 _(
"Loading Symbol Libraries" ),
337 libraryNames.size(),
true );
343 std::unordered_map<wxString, std::vector<LIB_SYMBOL*>> loadedSymbols;
346 progressReporter.get() );
352 while( !loader.
Done() )
354 if( progressReporter && !progressReporter->KeepRefreshing() )
371 msg.Replace(
"\n",
"<BR>" );
415#define ENABLE( x ) ACTION_CONDITIONS().Enable( x )
416#define CHECK( x ) ACTION_CONDITIONS().Check( x )
420 auto electricalTypesShownCondition =
426 auto pinNumbersShownCondition =
440 auto demorganStandardCond =
446 auto demorganAlternateCond =
452 auto haveDatasheetCond =
476 m_unit = aUnit > 0 ? aUnit : 1;
517 std::shared_ptr<LIB_SYMBOL> parent = symbol->
GetParent().lock();
520 parentName = parent->GetName();
535 if( aSymbol && !aSymbol->IsEmpty() )
541 libid.
Parse( *aSymbol,
true );
549 msg.Printf(
_(
"The current configuration does not include the library '%s'.\n"
550 "Use Manage Symbol Libraries to edit the configuration." ),
556 msg.Printf(
_(
"The library '%s' is not enabled in the current configuration.\n"
557 "Use Manage Symbol Libraries to edit the configuration." ),
619 for(
int ii = 0; ii < unit_count; ii++ )
648 std::vector<wxString> pinnedMatches;
649 std::vector<wxString> otherMatches;
652 [&](
const wxString& aLib )
657 pinnedMatches.push_back( aLib );
661 otherMatches.push_back( aLib );
666 [&](
const wxString& aLib )
678 wxArrayString aliasNames;
680 Prj().SchSymbolLibTable()->EnumerateSymbolLib( aLib, aliasNames,
true );
682 if( aliasNames.IsEmpty() )
693 std::vector<wxString> subLibraries;
696 for(
const wxString& lib : subLibraries )
698 wxString suffix = lib.IsEmpty() ? wxString( wxT(
"" ) )
699 : wxString::Format( wxT(
" - %s" ), lib );
700 wxString
name = wxString::Format( wxT(
"%s%s" ), aLib, suffix );
713 for(
const wxString& lib : libs )
718 wxStringTokenizer tokenizer(
m_libFilter->GetValue() );
720 while( tokenizer.HasMoreTokens() )
722 const wxString term = tokenizer.GetNextToken().Lower();
725 for(
const wxString& lib : libs )
727 if( matcher.
Find( lib.Lower() ) )
736 for(
const wxString&
name : pinnedMatches )
739 for(
const wxString&
name : otherMatches )
745 if( index != wxNOT_FOUND )
777 if( libName.IsEmpty() )
780 std::vector<LIB_SYMBOL*> symbols;
790 std::set<wxString> excludes;
796 while( tokenizer.HasMoreTokens() )
798 const wxString filterTerm = tokenizer.GetNextToken().Lower();
803 std::vector<SEARCH_TERM> searchTerms = symbol->GetSearchTerms();
804 int matched = matcher.
ScoreTerms( searchTerms );
806 if( filterTerm.IsNumber() && wxAtoi( filterTerm ) == (
int)symbol->GetPinCount() )
810 excludes.insert( symbol->GetName() );
820 && !subLib.IsSameAs( symbol->GetLibId().GetSubLibraryName() ) )
825 if( !excludes.count( symbol->GetName() ) )
838 bool changed =
false;
840 if( index == wxNOT_FOUND )
868 if( !
Prj().SchSymbolLibTable()->FindRow( selection )
869 && selection.Find(
'-' ) != wxNOT_FOUND )
873 selection = selection.BeforeLast(
'-', &sublib ).Trim();
874 sublib.Trim(
false );
885 const wxString& aSubLibName )
975 int maxWidth = cfg->m_LibViewPanel.window.state.size_x - 80;
1011 return &cfg->m_LibViewPanel.window;
1026 if( aEnvVarsChanged )
1033 if( event.GetActive() )
1080 std::shared_ptr<LIB_SYMBOL> tmp = symbol->
IsAlias() ? symbol->
GetParent().lock()
1110 if( !dialogLock.try_lock() )
1115 wxObjectDataPtr<LIB_TREE_MODEL_ADAPTER> dataPtr
1136 wxString dialogTitle;
1137 dialogTitle.Printf(
_(
"Choose Symbol (%d items loaded)" ), modelAdapter->
GetItemCount() );
1180 if( aEvent.GetKeyCode() == WXK_UP )
1184 int prev =
m_libList->GetSelection() - 1;
1191 wxCommandEvent
dummy;
1197 wxCommandEvent
dummy;
1201 else if( aEvent.GetKeyCode() == WXK_DOWN )
1212 wxCommandEvent
dummy;
1218 wxCommandEvent
dummy;
1222 else if( aEvent.GetKeyCode() == WXK_TAB &&
m_libFilter->HasFocus() )
1224 if( !aEvent.ShiftDown() )
1229 else if( aEvent.GetKeyCode() == WXK_TAB &&
m_symbolFilter->HasFocus() )
1231 if( aEvent.ShiftDown() )
1236 else if( ( aEvent.GetKeyCode() == WXK_RETURN || aEvent.GetKeyCode() == WXK_NUMPAD_ENTER )
1239 wxCommandEvent
dummy;
1255 if( ii != wxNOT_FOUND || ii != (
int)
m_symbolList->GetCount() - 1 )
1269 if( ii != wxNOT_FOUND && ii != 0 )
1297 Prj().SchSymbolLibTable()->FindRow( libName,
true );
1299 wxString title = row ? row->
GetFullURI(
true ) :
_(
"[no library selected]" );
1301 title += wxT(
" \u2014 " ) +
_(
"Symbol Library Browser" );
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.
bool m_Center
Center on screen.
void SetOrigin(const Vec &pos)
void SetSize(const Vec &size)
COLOR4D GetColor(int aLayer) const
Handle actions that are shared between different applications.
Dialog class to select a symbol from the libraries.
LIB_ID GetSelectedLibId(int *aUnit=nullptr) const
To be called after this dialog returns from ShowModal().
static std::mutex g_Mutex
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.
void FinishAUIInitialization()
bool ProcessEvent(wxEvent &aEvent) override
Override the default process event handler to implement the auto save feature.
void ReCreateMenuBar()
Recreates the menu bar.
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
void setupUnits(APP_SETTINGS_BASE *aCfg)
KIGFX::GAL_DISPLAY_OPTIONS & GetGalDisplayOptions()
Return a reference to the gal rendering options used by GAL for rendering.
EDA_MSG_PANEL * m_messagePanel
virtual void SetScreen(BASE_SCREEN *aScreen)
ACTION_TOOLBAR * m_mainToolBar
void OnGridSettings(wxCommandEvent &event)
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 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.
void ReadWindowSettings(WINDOW_SETTINGS &aCfg)
Read GAL config options from application-level config.
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.
void SetDefaultPenWidth(int aWidth)
Store schematic specific render settings.
bool m_ShowPinsElectricalType
void LoadColors(const COLOR_SETTINGS *aSettings) override
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 SetBoundary(const BOX2D &aBoundary)
Set limits for view area.
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.
MAIL_T Command()
Returns the MAIL_T associated with this mail.
virtual bool ShowModal(wxString *aResult=nullptr, wxWindow *aResultantFocusWindow=nullptr)
Show this wxFrame as if it were a modal dialog, with all other instantiated wxFrames disabled until t...
void SetModal(bool aIsModal)
bool Destroy() override
Our version of Destroy() which is virtual from wxWidgets.
void DismissModal(bool aRetVal, const wxString &aResult=wxEmptyString)
bool IsModal() const override
Return true if the frame is shown in our modal mode and false if the frame is shown as an usual frame...
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 Parse(const UTF8 &aId, bool aFix=false)
Parse LIB_ID with the information from aId.
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
const UTF8 & GetLibItemName() 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
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
Manage LIB_TABLE_ROW records (rows), and can be searched based on library nickname.
std::vector< wxString > GetLogicalLibs()
Return the logical library names, all of them that are pertinent to a look up done on this LIB_TABLE.
bool HasLibrary(const wxString &aNickname, bool aCheckEnabled=false) const
Test for the existence of aNickname in the library table.
void SetPreselectNode(const LIB_ID &aLibId, int aUnit)
Set the symbol name to be selected if there are no search results.
static const wxString GetPinningSymbol()
void SaveSettings()
Save the column widths to the config file.
int GetItemCount() const
Return the number of symbols loaded in the tree.
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.
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 SyncView()
Mark all items for refresh.
void CommonSettingsChanged(bool aEnvVarsChanged, bool aTextVarsChanged) override
Notification event that some of the common (suite-wide) settings have changed.
KIGFX::SCH_RENDER_SETTINGS * GetRenderSettings()
COLOR_SETTINGS * GetColorSettings(bool aForceRefresh=false) const override
Returns a pointer to the active color theme settings.
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.
Helper object to filter a list of libraries.
bool GetFilterPowerSymbols() const
const wxArrayString & GetAllowedLibList() const
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
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...
static wxObjectDataPtr< LIB_TREE_MODEL_ADAPTER > Create(EDA_BASE_FRAME *aParent, LIB_TABLE *aLibs)
Factory function: create a model adapter in a reference-counting container.
bool AddLibraries(const std::vector< wxString > &aNicknames, SCH_BASE_FRAME *aFrame)
Add all the libraries in a SYMBOL_LIB_TABLE to the model.
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)
bool ShowModal(wxString *aSymbol, wxWindow *aParent) override
Runs the symbol viewer as a modal dialog.
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 FinishModal()
Send the selected symbol back to the caller.
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.
void SetFilter(const SYMBOL_LIBRARY_FILTER *aFilter)
Set a filter to display only libraries and/or symbols which match the filter.
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.
void OnSelectSymbol(wxCommandEvent &aEvent)
void ReCreateVToolbar() override
wxSearchCtrl * m_symbolFilter
void ReCreateHToolbar() override
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.
SYMBOL_VIEWER_FRAME(KIWAY *aKiway, wxWindow *aParent, FRAME_T aFrameType, const wxString &aLibraryName=wxEmptyString)
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
wxString GetStringSelection() const override
bool SetStringSelection(const wxString &s) override
void DisplayErrorMessage(wxWindow *aParent, const wxString &aText, const wxString &aExtraInfo)
Display an error message with aMessage.
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)
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
FRAME_T
The set of EDA_BASE_FRAME derivatives, typically stored in EDA_BASE_FRAME::m_Ident.
@ LAYER_SCHEMATIC_GRID_AXES
Message panel definition file.
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.
#define LIB_VIEW_STYLE_MODAL
#define LIB_VIEW_NAME_MODAL