51#include <wx/filedlg.h>
75 auto libSelectedCondition =
80 LIB_ID sel = editFrame->GetTreeLIBID();
90 auto libInferredCondition =
95 LIB_ID sel = editFrame->GetTreeLIBID();
102 auto symbolSelectedCondition =
107 LIB_ID sel = editFrame->GetTargetLibId();
114 auto derivedSymbolSelectedCondition =
119 LIB_ID sel = editFrame->GetTargetLibId();
133 auto relatedSymbolSelectedCondition =
138 LIB_ID sel = editFrame->GetTargetLibId();
154 auto multiSymbolSelectedCondition =
192 auto canOpenExternally =
199 wxString libName = editFrame->GetTargetLibId().GetLibNickname();
206 auto isPackedLibraryCondition =
212 wxString libName = editFrame->GetTargetLibId().GetLibNickname();
218 std::optional<LIBRARY_TABLE_ROW*> row = adapter->
GetRow( libName );
225 return wxFileName::FileExists( uri );
231 auto isUnpackedLibraryCondition =
237 wxString libName = editFrame->GetTargetLibId().GetLibNickname();
243 std::optional<LIBRARY_TABLE_ROW*> row = adapter->
GetRow( libName );
250 return wxFileName::DirExists( uri );
260 ctxMenu.AddSeparator( 10 );
261 ctxMenu.AddItem(
ACTIONS::save, symbolSelectedCondition || libInferredCondition, 10 );
267 ctxMenu.AddItem(
ACTIONS::revert, symbolSelectedCondition || libInferredCondition, 10 );
269 ctxMenu.AddSeparator( 20 );
273 ctxMenu.AddSeparator( 100 );
280 ctxMenu.AddSeparator( 120 );
286 ctxMenu.AddSeparator( 200 );
292 ctxMenu.AddItem(
ACTIONS::openDirectory, canOpenExternally && ( symbolSelectedCondition || libSelectedCondition ), 200 );
294 ctxMenu.AddSeparator( 300 );
319 wxString libFile = *aEvent.
Parameter<wxString*>();
366 wxString::Format(
_(
"Failed to load symbol %s from "
387 if( libName.IsEmpty() )
389 msg.Printf(
_(
"No symbol library selected." ) );
390 m_frame->ShowInfoBarError( msg );
396 msg.Printf(
_(
"Symbol library '%s' not found." ), libName );
397 m_frame->ShowInfoBarError( msg );
403 msg.Printf(
_(
"Symbol library '%s' is not writable." ), libName );
404 m_frame->ShowInfoBarError( msg );
469 std::optional<wxString> libItemName =
472 wxCHECK( libItemName, 0 );
474 wxFileName fileName( *libItemName );
476 wxString filePath = wxEmptyString;
477 wxString explorerCommand;
480 explorerCommand = cfg->m_System.file_explorer;
482 if( explorerCommand.IsEmpty() )
484 filePath = fileName.GetFullPath().BeforeLast( wxFileName::GetPathSeparator() );
486 if( !filePath.IsEmpty() && wxDirExists( filePath ) )
492 if( !explorerCommand.EndsWith(
"%F" ) )
494 wxMessageBox(
_(
"Missing/malformed file explorer argument '%F' in common settings." ) );
498 filePath = fileName.GetFullPath();
499 filePath.Replace( wxS(
"\"" ), wxS(
"_" ) );
501 wxString fileArg =
'"' + filePath +
'"';
503 explorerCommand.Replace( wxT(
"%F" ), fileArg );
505 if( !explorerCommand.IsEmpty() )
506 wxExecute( explorerCommand );
520 if( textEditorName.IsEmpty() )
522 wxMessageBox(
_(
"No text editor selected in KiCad. Please choose one." ) );
531 std::optional<wxString> optUri =
534 wxCHECK( optUri, 0 );
536 wxString tempFName = ( *optUri ).wc_str();
538 if( !tempFName.IsEmpty() )
539 ExecuteFile( textEditorName, tempFName,
nullptr,
false );
557 bool hasWritableLibs =
false;
562 const wxString& libName = sel.GetLibNickname();
565 msg.Printf(
_(
"Symbol library '%s' not found." ), libName );
567 msg.Printf(
_(
"Symbol library '%s' is not writable." ), libName );
569 hasWritableLibs =
true;
573 m_frame->ShowInfoBarError( msg );
575 if( !hasWritableLibs )
597 if( !sel.
IsValid() && !isPasteAction )
600 msg.Printf(
_(
"No symbol selected" ) );
601 m_frame->ShowInfoBarError( msg );
609 msg.Printf(
_(
"Symbol library '%s' not found." ), libName );
610 m_frame->ShowInfoBarError( msg );
616 msg.Printf(
_(
"Symbol library '%s' is not writable." ), libName );
617 m_frame->ShowInfoBarError( msg );
637 wxString oldName = libId.GetLibItemName();
645 [&](
const wxString& aNewName )
649 if( newName.IsEmpty() )
651 wxMessageBox(
_(
"Symbol must have a name." ) );
658 msg.Printf(
_(
"Symbol '%s' already exists in library '%s'." ),
663 wxOK | wxCANCEL | wxICON_WARNING );
665 errorDlg.SetOKLabel(
_(
"Overwrite" ) );
676 if( newName == oldName )
686 bool overwritingCurrentSymbol =
false;
704 if( overwritingCurrentSymbol )
730 wxDataViewItem treeItem = libMgr.
GetAdapter()->FindItem( libId );
753 m_frame->GetCanvas()->Refresh();
766 m_frame->GetCanvas()->Refresh();
780 cfg->m_SyncPinEdit = !cfg->m_SyncPinEdit;
797 m_frame->GetCanvas()->Refresh();
813 m_frame->GetCanvas()->Refresh();
829 m_frame->GetCanvas()->Refresh();
844 wxMessageBox(
_(
"No symbol to export" ) );
848 wxFileName fn( symbol->
GetName() );
851 wxString projectPath = wxPathOnly(
m_frame->Prj().GetProjectFullName() );
853 wxFileDialog dlg( editFrame,
_(
"Export View as PNG" ), projectPath, fn.GetFullName(),
858 if( dlg.ShowModal() == wxID_OK && !dlg.GetPath().IsEmpty() )
866 wxMessageBox( wxString::Format(
_(
"Can't save file '%s'." ), dlg.GetPath() ) );
893 wxMessageBox(
_(
"No symbol to export" ) );
897 wxFileName fn( symbol->
GetName() );
900 wxString pro_dir = wxPathOnly(
m_frame->Prj().GetProjectFullName() );
902 wxString fullFileName = wxFileSelector(
_(
"SVG File Name" ), pro_dir, fn.GetFullName(),
907 if( !fullFileName.IsEmpty() )
928 wxMessageBox(
_(
"No symbol to flatten" ) );
933 std::unique_ptr<LIB_SYMBOL> flatSymbol = symbol->
Flatten();
934 wxCHECK_MSG( flatSymbol, 0,
_(
"Failed to flatten symbol" ) );
938 wxMessageBox(
_(
"Failed to update library with flattened symbol" ) );
942 wxDataViewItem treeItem = libMgr.
GetAdapter()->FindItem( symId );
990 if( blocking_dialog )
992 blocking_dialog->Raise();
1023 const int deltaUnit = aEvent.
Parameter<
int>();
1026 const int newUnit = ( ( editFrame->
GetUnit() - 1 + deltaUnit + nUnits ) % nUnits ) + 1;
1028 editFrame->
SetUnit( newUnit );
1037 viewerFrame->SelectPreviousSymbol();
1046 viewerFrame->SelectNextSymbol();
1056 SCOPE scope = SCOPE::SCOPE_LIBRARY;
1059 scope = SCOPE::SCOPE_RELATED_SYMBOLS;
1083 wxArrayString labels;
1086 labels.Add( entry.key.AfterFirst(
':' ) );
1088 const int count =
static_cast<int>( labels.GetCount() );
1090 const int next = aForward ? ( active + 1 ) % count : ( active - 1 + count ) % count;
1092 popup->
Popup(
_(
"Switch to Tab" ), labels,
next );
1139 wxCHECK( editFrame, 0 );
1143 if( currentLib.IsEmpty() )
1145 editFrame->
ShowInfoBarError(
_(
"Select a library to compare against a file." ) );
1149 wxFileDialog dlg( editFrame,
_(
"Choose Library to Compare With" ), wxEmptyString,
1151 wxFD_OPEN | wxFD_FILE_MUST_EXIST );
1153 if( dlg.ShowModal() != wxID_OK )
1156 wxFileName otherFn( dlg.GetPath() );
1157 otherFn.MakeAbsolute();
1162 _(
"Select a KiCad symbol library file (.kicad_sym)." ) );
1166 const wxString otherPath = otherFn.GetFullPath();
1171 wxArrayString names;
1176 for(
const wxString&
name : names )
1179 beforeMap.emplace( sym->GetName(), sym );
1182 std::vector<std::unique_ptr<LIB_SYMBOL>> afterStorage;
1188 afterStorage = std::move( loaded.first );
1189 afterMap = std::move( loaded.second );
1194 otherPath, ioe.
What() ) );
1197 catch(
const std::exception& e )
1201 wxString::FromUTF8( e.what() ) ) );
1208 auto cloneHolder = std::make_shared<std::vector<std::unique_ptr<LIB_SYMBOL>>>();
1212 std::map<KIID_PATH, const KICAD_DIFF::ITEM_CHANGE*> changesById;
1215 changesById[c.
id] = &c;
1217 dlgDiff.SetChangeSelectedHandler(
1218 [&, cloneHolder](
const KIID_PATH& aId )
1225 auto it = changesById.find( aId );
1227 if( it == changesById.end() || !it->second->refdes )
1230 cloneHolder->clear();
1234 const wxString&
name = *it->second->refdes;
1235 auto beforeIt = beforeMap.find(
name );
1236 auto afterIt = afterMap.find(
name );
1238 std::unique_ptr<LIB_SYMBOL> beforeClone =
1239 beforeIt != beforeMap.end() ? beforeIt->second->Flatten() :
nullptr;
1240 std::unique_ptr<LIB_SYMBOL> afterClone =
1241 afterIt != afterMap.end() ? afterIt->second->Flatten() :
nullptr;
1245 cloneHolder->clear();
1248 cloneHolder->push_back( std::move( beforeClone ) );
1251 cloneHolder->push_back( std::move( afterClone ) );
1254 dlgDiff.ShowModal();
static TOOL_ACTION openWithTextEditor
static TOOL_ACTION revert
static TOOL_ACTION addLibrary
static TOOL_ACTION openDirectory
static TOOL_ACTION saveAll
static TOOL_ACTION showProperties
static TOOL_ACTION newLibrary
static TOOL_ACTION ddAddLibrary
static const ADVANCED_CFG & GetCfg()
Get the singleton instance's config, which is shared by all consumers.
File-compare dialog (Phase 7).
void ShowInfoBarError(const wxString &aErrorMsg, bool aShowCloseButton=false, INFOBAR_MESSAGE_TYPE aType=INFOBAR_MESSAGE_TYPE::GENERIC)
Show the WX_INFOBAR displayed on the top of the canvas with a message and an error icon on the left o...
HOTKEY_CYCLE_POPUP * GetHotkeyPopup()
bool SaveCanvasImageToFile(const wxString &aFileName, BITMAP_TYPE aBitmapType)
Save the current view as an image file.
virtual void CreateHotkeyPopup()
virtual void ToggleProperties()
virtual void SetParent(EDA_ITEM *aParent)
const std::vector< ENTRY > & Entries() const
The tab strip plus the single shared GAL canvas.
void AdvanceTab(bool aForward)
const EDITOR_TABS_MODEL & Model() const
AUTOPLACE_FIELDS m_AutoplaceFields
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()
Diff two .kicad_sym symbol libraries.
DOCUMENT_DIFF Diff() override
Produce a DOCUMENT_DIFF of the inputs the concrete differ was constructed with.
static std::pair< std::vector< std::unique_ptr< LIB_SYMBOL > >, SYMBOL_MAP > LoadLibrary(const wxString &aPath)
Convenience: load a .kicad_sym path into a SYMBOL_MAP using SCH_IO_KICAD_SEXPR::EnumerateSymbolLib.
std::map< wxString, const LIB_SYMBOL * > SYMBOL_MAP
Library content is a map of (canonical_name -> LIB_SYMBOL*).
Helper class to create more flexible dialogs, including 'do not show again' checkbox handling.
void UpdateAllItems(int aUpdateFlags)
Update all items in the view according to the given flags.
KIWAY & Kiway() const
Return a reference to the KIWAY that this object has an opportunity to participate in.
wxWindow * GetBlockingDialog()
Gets the window pointer to the blocking dialog (to send it signals)
Module editor specific tools.
bool RenameLibrary(const wxString &aTitle, const wxString &aName, std::function< bool(const wxString &aNewName)> aValidator)
void AddContextMenuItems(CONDITIONAL_MENU *aMenu)
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.
static wxString ExpandURI(const wxString &aShortURI, const PROJECT &aProject)
std::optional< wxString > GetFullURI(LIBRARY_TABLE_TYPE aType, const wxString &aNickname, bool aSubstituted=false)
Return the full location specifying URI for the LIB, either in original UI form or in environment var...
A logical library item identifier and consists of various portions much like a URI.
bool IsValid() const
Check if this LID_ID is valid.
const UTF8 & GetLibItemName() const
const UTF8 & GetLibNickname() const
Return the logical library name portion of a LIB_ID.
Symbol library management helper that is specific to the symbol library editor frame.
wxObjectDataPtr< LIB_TREE_MODEL_ADAPTER > & GetAdapter()
Return the adapter object that provides the stored data.
Define a library symbol object.
const LIB_ID & GetLibId() const override
wxString GetName() const override
SCH_FIELD & GetValueField()
int GetUnitCount() const override
std::unique_ptr< LIB_SYMBOL > Flatten() const
Return a flattened symbol inheritance to the caller.
virtual void SetName(const wxString &aName)
virtual const wxString & GetTextEditor(bool aCanShowFileChooser=true)
Return the path to the preferred text editor application.
virtual LIBRARY_MANAGER & GetLibraryManager() const
static SYMBOL_LIBRARY_ADAPTER * SymbolLibAdapter(PROJECT *aProject)
Accessor for project symbol library manager adapter.
static TOOL_ACTION editSymbol
static TOOL_ACTION importSymbol
static TOOL_ACTION newSymbol
static TOOL_ACTION saveLibraryAsPacked
static TOOL_ACTION saveLibraryAs
static TOOL_ACTION previousSymbol
static TOOL_ACTION showRelatedLibFieldsTable
static TOOL_ACTION editLibSymbolWithLibEdit
static TOOL_ACTION saveLibraryAsUnpacked
static TOOL_ACTION pasteSymbol
static TOOL_ACTION exportSymbolAsSVG
static TOOL_ACTION renameSymbol
static TOOL_ACTION duplicateSymbol
static TOOL_ACTION closeSymbolTab
static TOOL_ACTION cutSymbol
static TOOL_ACTION compareLibraryWithFile
static TOOL_ACTION saveSymbolCopyAs
static TOOL_ACTION nextUnit
static TOOL_ACTION showElectricalTypes
static TOOL_ACTION flattenSymbol
static TOOL_ACTION placeSymbol
static TOOL_ACTION showHiddenFields
static TOOL_ACTION nextSymbol
static TOOL_ACTION prevSymbolTab
static TOOL_ACTION showHiddenPins
static TOOL_ACTION showPinNumbers
static TOOL_ACTION exportSymbolView
static TOOL_ACTION showLibFieldsTable
static TOOL_ACTION copySymbol
static TOOL_ACTION symbolProperties
static TOOL_ACTION toggleSyncedPinsMode
static TOOL_ACTION deleteSymbol
static TOOL_ACTION nextSymbolTab
static TOOL_ACTION togglePinAltIcons
static TOOL_ACTION exportSymbol
static TOOL_ACTION previousUnit
static TOOL_ACTION deriveFromExistingSymbol
static TOOL_ACTION addSymbolToSchematic
static TOOL_ACTION saveSymbolAs
SCH_RENDER_SETTINGS * GetRenderSettings()
EESCHEMA_SETTINGS * eeconfig() const
Schematic editor (Eeschema) main window.
SCH_SCREEN * GetScreen() const override
Return a pointer to a BASE_SCREEN or one of its derivatives.
SCH_SHEET_PATH & GetCurrentSheet() const
virtual const wxString & GetText() const override
Return the string associated with the text object.
void SetText(const wxString &aText) override
bool m_ShowPinsElectricalType
void AutoplaceFields(SCH_SCREEN *aScreen, AUTOPLACE_ALGO aAlgo) override
Automatically orient all the fields in the symbol.
int PreviousSymbol(const TOOL_EVENT &aEvent)
int ToggleSyncedPinsMode(const TOOL_EVENT &aEvent)
int Save(const TOOL_EVENT &aEvt)
int PrevTab(const TOOL_EVENT &aEvent)
int EditSymbol(const TOOL_EVENT &aEvent)
int ExportView(const TOOL_EVENT &aEvent)
int ShowElectricalTypes(const TOOL_EVENT &aEvent)
int FlattenSymbol(const TOOL_EVENT &aEvent)
int OpenDirectory(const TOOL_EVENT &aEvent)
int RenameSymbol(const TOOL_EVENT &newName)
int DuplicateSymbol(const TOOL_EVENT &aEvent)
int ToggleHiddenPins(const TOOL_EVENT &aEvent)
int ShowLibraryTable(const TOOL_EVENT &aEvent)
int AddLibrary(const TOOL_EVENT &aEvent)
int AddSymbol(const TOOL_EVENT &aEvent)
int CloseTab(const TOOL_EVENT &aEvent)
int TogglePinAltIcons(const TOOL_EVENT &aEvent)
int ChangeUnit(const TOOL_EVENT &aEvent)
int Revert(const TOOL_EVENT &aEvent)
int ToggleHiddenFields(const TOOL_EVENT &aEvent)
int OpenWithTextEditor(const TOOL_EVENT &aEvent)
int ExportSymbol(const TOOL_EVENT &aEvent)
int NextTab(const TOOL_EVENT &aEvent)
int NextSymbol(const TOOL_EVENT &aEvent)
void setTransitions() override
Set up handlers for various events.
int ToggleProperties(const TOOL_EVENT &aEvent)
bool Init() override
Init() is called once upon a registration of the tool.
int EditLibrarySymbol(const TOOL_EVENT &aEvent)
int CompareLibraryWithFile(const TOOL_EVENT &aEvent)
Diff the currently-open symbol library against another .kicad_sym file.
int ExportSymbolAsSVG(const TOOL_EVENT &aEvent)
int ShowPinNumbers(const TOOL_EVENT &aEvent)
int DdAddLibrary(const TOOL_EVENT &aEvent)
int AddSymbolToSchematic(const TOOL_EVENT &aEvent)
int CutCopyDelete(const TOOL_EVENT &aEvent)
The symbol library editor main window.
void SaveAll()
Save all modified symbols and libraries.
void DeleteSymbolFromLibrary()
bool IsLibraryTreeShown() const override
void RenameSymbolTab(const LIB_ID &aOldId, const LIB_ID &aNewId)
Update the open tab for aOldId, if any, to the renamed symbol aNewId so its label and key track the r...
bool IsCurrentSymbol(const LIB_ID &aLibId) const
Return true if aLibId is an alias for the editor screen symbol.
void SVGPlotSymbol(const wxString &aFullFileName)
Create the SVG print file for the current edited symbol.
EDITOR_TABS_PANEL * GetTabsPanel() const
The tab strip fronting the shared canvas, or nullptr before it is mounted.
LIB_ID GetTreeLIBID(int *aUnit=nullptr) const
Return the LIB_ID of the library or symbol selected in the symbol tree.
void FocusOnLibId(const LIB_ID &aLibID)
void SaveLibraryAs(SAVE_LIBRARY_AS aSaveType=SAVE_LIBRARY_AS::NEW)
Save the currently selected library to a new file.
void Save()
Save the selected symbol or library.
void LoadSymbol(const wxString &aLibrary, const wxString &aSymbol, int Unit)
int GetTreeSelectionCount() const
bool IsSymbolFromSchematic() const
SYMBOL_EDITOR_SETTINGS * GetSettings() const
void DuplicateSymbol(bool aFromClipboard)
Insert a duplicate symbol.
void SetCurSymbol(LIB_SYMBOL *aSymbol, bool aUpdateZoom)
Take ownership of aSymbol and notes that it is the one currently being edited.
std::vector< LIB_ID > GetSelectedLibIds() const
LIB_SYMBOL * GetCurSymbol() const
Return the current symbol being edited or NULL if none selected.
LIB_ID GetTargetLibId() const override
Return either the symbol selected in the symbol tree (if context menu is active) or the symbol on the...
void UpdateMsgPanel() override
Redraw the message panel.
void CreateNewSymbol(const wxString &newName=wxEmptyString)
Create a new symbol in the selected library.
void CopySymbolToClipboard()
LIB_SYMBOL_LIBRARY_MANAGER & GetLibManager()
void SaveSymbolCopyAs(bool aOpenCopy)
Save the currently selected symbol to a new name and/or location.
void UpdateLibraryTree(const wxDataViewItem &aTreeItem, LIB_SYMBOL *aSymbol)
Update a symbol node in the library tree.
void OnModify() override
Must be called after a schematic change in order to set the "modify" flag of the current symbol.
void ToggleLibraryTree() override
An interface to the global shared library manager that is schematic-specific and linked to one projec...
bool IsLibraryReadOnly(const wxString &aLibrary) const
Return true if the library is stored in a read-only file.
bool LibraryExists(const wxString &aLibrary, bool aCheckEnabled=false) const
Return true if library exists.
LIB_SYMBOL * GetBufferedSymbol(const wxString &aSymbolName, const wxString &aLibrary)
Return the symbol copy from the buffer.
bool SymbolNameInUse(const wxString &aName, const wxString &aLibrary)
Return true if the symbol name is already in use in the specified library.
bool IsLibraryModified(const wxString &aLibrary) const
Return true if library has unsaved modifications.
LIB_SYMBOL * GetSymbol(const wxString &aSymbolName, const wxString &aLibrary) const
Return either an alias of a working LIB_SYMBOL copy, or alias of the original symbol if there is no w...
bool RemoveSymbol(const wxString &aSymbolName, const wxString &aLibrary)
Remove the symbol from the symbol buffer.
bool UpdateSymbolAfterRename(LIB_SYMBOL *aSymbol, const wxString &aOldSymbolName, const wxString &aLibrary)
Update the symbol buffer with a new version of the symbol when the name has changed.
void SetSymbolModified(const wxString &aSymbolName, const wxString &aLibrary)
void GetSymbolNames(const wxString &aLibName, wxArrayString &aSymbolNames, SYMBOL_NAME_FILTER aFilter=SYMBOL_NAME_FILTER::ALL)
bool SymbolExists(const wxString &aSymbolName, const wxString &aLibrary) const
Return true if symbol with a specific alias exists in library (either original one or buffered).
bool UpdateSymbol(LIB_SYMBOL *aSymbol, const wxString &aLibrary)
Update the symbol buffer with a new version of the symbol.
bool HasDerivedSymbols(const wxString &aSymbolName, const wxString &aLibraryName)
Check whether any symbol inherits from aSymbolName, without building the list of names.
Symbol library viewer main window.
LIB_SYMBOL * GetSelectedSymbol() const
void DisplayErrorMessage(wxWindow *aParent, const wxString &aText, const wxString &aExtraInfo)
Display an error message with aMessage.
void DisplayError(wxWindow *aParent, const wxString &aText)
Display an error or warning message box with aMessage.
This file is part of the common library.
LIB_FIELDS_EDITOR_GRID_DATA_MODEL::SCOPE SCOPE
@ FRAME_SCH_SYMBOL_EDITOR
int ExecuteFile(const wxString &aEditorName, const wxString &aFileName, wxProcess *aCallback, bool aFileForKicad)
Call the executable file aEditorName with the parameter aFileName.
static const std::string KiCadSymbolLibFileExtension
static const std::string SVGFileExtension
static wxString PngFileWildcard()
static wxString SVGFileWildcard()
static wxString KiCadSymbolLibFileWildcard()
bool LaunchExternal(const wxString &aPath)
Launches the given file or folder in the host OS.
void ConfigureSymDiffCanvasContext(WIDGET_DIFF_CANVAS &aCanvas, LIB_SYMBOL *aBefore, LIB_SYMBOL *aAfter)
@ REPAINT
Item needs to be redrawn.
@ GEOMETRY
Position or shape has changed.
@ LAYERS
Layers have changed.
PGM_BASE & Pgm()
The global program "get" accessor.
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:...
The full set of changes between two parsed documents of one type.
One change record on a single item.
@ NEW
Save to a new library in the original symbol library format.
@ UNPACKED
Save a packed symbol library to the unpacked format.
@ PACKED
Save an unpacked symbol library to the packed format.
static void showTabSwitcher(SYMBOL_EDIT_FRAME *aFrame, bool aForward)
wxString result
Test unit parsing edge cases and error handling.
Definition of file extensions used in Kicad.