46#include <wx/clipbrd.h>
47#include <wx/filedlg.h>
67 title += wxS(
" " ) +
_(
"[from schematic]" );
77 title += wxS(
" " ) +
_(
"[Read Only Library]" );
81 title =
_(
"[no symbol loaded]" );
84 title += wxT(
" \u2014 " ) +
_(
"Symbol Editor" );
91 wxString selectedLib = aLibrary;
93 if( selectedLib.empty() )
96 if( !selectedLib.empty() )
129 wxString msg = wxString::Format(
_(
"Symbol library '%s' is not writable." ),
131 wxString msg2 =
_(
"You must save to a different location." );
154 if( lib->SchLibType() == SCH_IO_MGR::SCH_DATABASE
155 || lib->SchLibType() == SCH_IO_MGR::SCH_CADSTAR_ARCHIVE
156 || lib->SchLibType() == SCH_IO_MGR::SCH_HTTP )
170 msg.Printf(
_(
"Error loading symbol %s from library '%s'." ),
236 msg.Printf(
_(
"Error loading symbol %s from library '%s'." ),
261 int aUnit,
int aBodyStyle )
263 bool rebuildMenuAndToolbar =
false;
265 if( !aEntry || aLibrary.empty() )
268 if( aEntry->
GetName().IsEmpty() )
270 wxLogWarning(
"Symbol in library '%s' has empty name field.", aLibrary );
286 rebuildMenuAndToolbar =
true;
290 wxCHECK( lib_symbol,
false );
292 m_unit = aUnit > 0 ? aUnit : 1;
302 if( rebuildMenuAndToolbar )
347 wxArrayString symbolNames;
358 const auto validator =
359 [&]( wxString newName ) ->
bool
361 if( newName.IsEmpty() )
363 wxMessageBox(
_(
"Symbol must have a name." ) );
371 msg.Printf(
_(
"Symbol '%s' already exists in library '%s'." ),
375 KIDIALOG errorDlg(
this, msg,
_(
"Confirmation" ),
376 wxOK | wxCANCEL | wxICON_WARNING );
378 errorDlg.SetOKLabel(
_(
"Overwrite" ) );
386 wxArrayString symbolNamesInLib;
391 dlg.SetMinSize( dlg.GetSize() );
402 if( parentSymbolName.IsEmpty() )
446 *field = *parentField;
450 case FIELD_T::REFERENCE:
459 case FIELD_T::FOOTPRINT:
461 field->
SetText( wxEmptyString );
464 case FIELD_T::DATASHEET:
469 field->
SetText( wxEmptyString );
481 std::vector<SCH_FIELD*> listFields;
486 if( field->GetId() == FIELD_T::USER )
491 new_field->
SetText( wxEmptyString );
521 if( libName.empty() )
527 wxString msg = wxString::Format(
_(
"Symbol library '%s' is not writable." ),
529 wxString msg2 =
_(
"You must save to a different location." );
550 if( !libName.IsEmpty() )
576 while(
chain.back()->IsDerived() )
579 chain.push_back( parent );
597 const wxString& aNewSymbolName,
598 const wxString& aNewLibraryName )
603 if( aNewLibraryName != oldLibraryName )
604 return {
false,
false };
608 return {
false,
false };
610 bool inAncestry =
false;
611 bool inDescendents =
false;
614 const std::vector<LIB_SYMBOL_SPTR> parentChainFromUs =
GetParentChain( aSymbol );
617 for(
size_t i = 1; i < parentChainFromUs.size(); ++i )
620 if( parentChainFromUs[i]->GetName() == aNewSymbolName )
630 const std::vector<LIB_SYMBOL_SPTR> parentChainFromTarget =
GetParentChain( *targetSymbol );
631 const wxString oldSymbolName = aSymbol.
GetName();
635 for(
size_t i = 1; i < parentChainFromTarget.size(); ++i )
637 if( parentChainFromTarget[i]->GetName() == oldSymbolName )
639 inDescendents =
true;
645 return { inAncestry, inDescendents };
658 const wxString& newSymbolName,
659 const wxString& newLibraryName )
661 std::vector<wxString> conflicts;
664 if( newLibraryName == oldLibraryName )
668 conflicts.push_back( newSymbolName );
673 const std::vector<LIB_SYMBOL_SPTR> parentChain =
GetParentChain( aSymbol );
675 for(
size_t i = 0; i < parentChain.size(); ++i )
681 conflicts.push_back( newSymbolName );
687 if( aLibMgr.
SymbolNameInUse( chainSymbol->GetName(), newLibraryName ) )
688 conflicts.push_back( chainSymbol->GetName() );
718 bool aValueFollowsName ) :
725 bool DoSave(
LIB_SYMBOL& symbol,
const wxString& aNewSymName,
const wxString& aNewLibName )
727 std::vector<LIB_SYMBOL_SPTR> parentChain;
731 parentChain.push_back( symbol.
SharedPtr() );
735 std::vector<wxString> newNames;
738 for(
int i = (
int) parentChain.size() - 1; i >= 0; --i )
748 newName = aNewSymName;
753 newName = oldSymbol->GetName();
762 if( i == (
int) parentChain.size() - 1 )
773 wxASSERT( newParent );
777 newNames.push_back( newName );
785 wxString
resolveConflict(
const wxString& proposed,
const wxString& aNewLibName )
const
801 wxString newName = wxString::Format(
"%s_%d", proposed, suffix );
813 wxFAIL_MSG(
"Invalid conflict strategy" );
835 std::function<int(
const wxString& libName,
const wxString& symbolName )>;
847 wxArrayString headers;
848 std::vector<wxArrayString> itemsToDisplay;
850 headers.Add(
_(
"Nickname" ) );
851 headers.Add(
_(
"Description" ) );
853 for(
const wxString& nickname : libNicknames )
861 itemsToDisplay.push_back( item );
865 for(
const wxString& nickname : libNicknames )
871 item.Add( nickname );
873 itemsToDisplay.push_back( item );
877 initDialog( headers, itemsToDisplay, aLibraryPreselect );
882 wxBoxSizer* bNameSizer =
new wxBoxSizer( wxHORIZONTAL );
884 wxStaticText* label =
new wxStaticText(
this, wxID_ANY,
_(
"Name:" ) );
885 bNameSizer->Add( label, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 );
892 m_ButtonsSizer->Prepend( newLibraryButton, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 10 );
894 GetSizer()->Prepend( bNameSizer, 0, wxEXPAND|wxTOP|wxLEFT|wxRIGHT, 5 );
897 [
this]( wxCommandEvent& )
911 GetSizer()->Fit(
this );
919 symbolName.Trim(
true );
920 symbolName.Trim(
false );
921 symbolName.Replace(
" ",
"_" );
930 if( ret == wxID_CANCEL )
964 const auto dialogValidatorFunc =
965 [&](
const wxString& newLib,
const wxString& newName ) ->
int
967 if( newLib.IsEmpty() )
969 wxMessageBox(
_(
"A library must be specified." ) );
973 if( newName.IsEmpty() )
975 wxMessageBox(
_(
"Symbol must have a name." ) );
981 msg = wxString::Format(
_(
"Library '%s' is read-only. Choose a "
982 "different library to save the symbol '%s' to." ),
993 const auto& [inAncestry, inDescendents] =
998 msg = wxString::Format(
_(
"Symbol '%s' cannot replace another symbol '%s' "
999 "that it descends from" ),
1002 wxMessageBox( msg );
1008 msg = wxString::Format(
_(
"Symbol '%s' cannot replace another symbol '%s' "
1009 "that is a descendent of it." ),
1012 wxMessageBox( msg );
1016 const std::vector<wxString> conflicts =
1019 if( conflicts.size() == 1 && conflicts.front() == newName )
1022 msg = wxString::Format(
_(
"Symbol '%s' already exists in library '%s'. "
1023 "Do you want to overwrite it?" ),
1027 KIDIALOG errorDlg(
this, msg,
_(
"Confirmation" ),
1028 wxOK | wxCANCEL | wxICON_WARNING );
1029 errorDlg.SetOKLabel(
_(
"Overwrite" ) );
1032 : (int) wxID_CANCEL;
1034 else if( !conflicts.empty() )
1040 msg = wxString::Format(
_(
"The following symbols in the inheritance chain of "
1041 "'%s' already exist in library '%s':\n" ),
1045 for(
const wxString& conflict : conflicts )
1046 msg += wxString::Format(
" %s\n", conflict );
1048 msg +=
_(
"\nDo you want to overwrite all of them, or rename the new symbols?" );
1050 KIDIALOG errorDlg(
this, msg,
_(
"Confirmation" ),
1051 wxYES_NO | wxCANCEL | wxICON_WARNING );
1052 errorDlg.SetYesNoCancelLabels(
_(
"Overwrite All" ),
_(
"Rename All" ),
1059 default:
return wxID_CANCEL;
1071 SAVE_AS_DIALOG dlg(
this, symbolName, libraryName, dialogValidatorFunc, strategy );
1095 libraryName = newLibrary.GetName();
1106 saver.
DoSave( *symbol, symbolName, libraryName );
1128 fn.SetName( symbol->
GetName().Lower() );
1131 wxFileDialog dlg(
this,
_(
"Export Symbol" ),
m_mruPath, fn.GetFullName(),
1134 if( dlg.ShowModal() == wxID_CANCEL )
1142 wxString libraryName;
1143 std::unique_ptr<LIB_SYMBOL> flattenedSymbol = symbol->
Flatten();
1148 libraryName = candidate;
1151 if( !libraryName.IsEmpty() )
1157 msg = wxString::Format(
_(
"Library '%s' is read-only." ), libraryName );
1164 msg = wxString::Format(
_(
"Symbol '%s' already exists in library '%s'." ),
1165 symbol->
GetName(), libraryName );
1167 KIDIALOG errorDlg(
this, msg,
_(
"Confirmation" ), wxOK | wxCANCEL | wxICON_WARNING );
1168 errorDlg.SetOKLabel(
_(
"Overwrite" ) );
1171 if( errorDlg.
ShowModal() == wxID_CANCEL )
1175 saver.
DoSave( *flattenedSymbol, symbol->
GetName(), libraryName );
1184 if( pluginType == SCH_IO_MGR::SCH_FILE_UNKNOWN )
1185 pluginType = SCH_IO_MGR::SCH_KICAD;
1189 if( fn.FileExists() )
1193 old_symbol = pi->LoadSymbol( fn.GetFullPath(), symbol->
GetName() );
1197 msg.Printf(
_(
"Error occurred attempting to load symbol library file '%s'." ),
1205 msg.Printf(
_(
"Symbol %s already exists in library '%s'." ),
1209 KIDIALOG errorDlg(
this, msg,
_(
"Confirmation" ), wxOK | wxCANCEL | wxICON_WARNING );
1210 errorDlg.SetOKLabel(
_(
"Overwrite" ) );
1213 if( errorDlg.
ShowModal() == wxID_CANCEL )
1218 if( !fn.IsDirWritable() )
1220 msg.Printf(
_(
"Insufficient permissions to save library '%s'." ), fn.GetFullPath() );
1227 if( !fn.FileExists() )
1228 pi->CreateLibrary( fn.GetFullPath() );
1233 pi->SaveSymbol( fn.GetFullPath(), flattenedSymbol.release() );
1237 msg.Printf(
_(
"Failed to create symbol library file '%s'." ), fn.GetFullPath() );
1239 msg.Printf(
_(
"Error creating symbol library '%s'." ), fn.GetFullName() );
1240 SetStatusText( msg );
1246 msg.Printf(
_(
"Symbol %s saved to library '%s'." ),
1249 SetStatusText( msg );
1264 wxString msg = wxString::Format(
_(
"Symbol name '%s' already in use." ),
1296 if( toDelete.empty() )
1299 for(
LIB_ID& libId : toDelete )
1302 && !
IsOK(
this, wxString::Format(
_(
"The symbol '%s' has been modified.\n"
1303 "Do you want to remove it from the library?" ),
1304 libId.GetUniStringLibItemName() ) ) )
1314 _(
"The symbol %s is used to derive other symbols.\n"
1315 "Deleting this symbol will delete all of the symbols derived from it.\n\n"
1316 "Do you wish to delete this symbol and all of its derivatives?" ),
1317 libId.GetLibItemName().wx_str() );
1319 wxMessageDialog::ButtonLabel yesButtonLabel(
_(
"Delete Symbol" ) );
1320 wxMessageDialog::ButtonLabel noButtonLabel(
_(
"Keep Symbol" ) );
1322 wxMessageDialog dlg(
this, msg,
_(
"Warning" ),
1323 wxYES_NO | wxYES_DEFAULT | wxICON_QUESTION | wxCENTER );
1324 dlg.SetYesNoLabels( yesButtonLabel, noButtonLabel );
1326 if( dlg.ShowModal() == wxID_NO )
1342 std::vector<LIB_ID> symbols;
1349 for(
LIB_ID& libId : symbols )
1352 libId.GetLibNickname() );
1357 std::unique_ptr<LIB_SYMBOL> tmp = symbol->
Flatten();
1361 std::string prettyData = formatter.
GetString();
1366 auto clipboard = wxTheClipboard;
1367 wxClipboardLocker clipboardLock( clipboard );
1369 if( !clipboardLock || !clipboard->IsOpened() )
1372 auto data =
new wxTextDataObject( wxString( prettyData.c_str(), wxConvUTF8 ) );
1373 clipboard->SetData( data );
1387 std::vector<LIB_SYMBOL*> newSymbols;
1389 if( aFromClipboard )
1399 wxLogMessage( wxS(
"Can not paste: %s" ), e.
Problem() );
1404 newSymbols.emplace_back(
new LIB_SYMBOL( *srcSymbol ) );
1407 if( srcSymbol->IsDerived() )
1409 if( std::shared_ptr<LIB_SYMBOL> srcParent = srcSymbol->GetParent().lock() )
1410 newSymbols.back()->SetParent( srcParent.get() );
1414 if( newSymbols.empty() )
1438 wxString newName = aSymbol->
GetName();
1442 newName.Printf(
"%s_%d", aSymbol->
GetName(), i++ );
1457 wxString msg = wxString::Format(
_(
"Revert '%s' to last version saved?" ),
1458 symbolName.IsEmpty() ? libName : symbolName );
1463 bool reload_currentSymbol =
false;
1464 wxString curr_symbolName = symbolName;
1470 if( symbolName.IsEmpty() )
1475 if( reload_currentSymbol )
1486 if( reload_currentSymbol )
1489 if( symbolName.IsEmpty() )
1502 LoadSymbol( curr_symbolName, libName, unit );
1510 wxCHECK_RET(
m_libMgr,
"Library manager object not created." );
1535 DisplayError(
this, wxString::Format(
_(
"Symbol %s not found in library '%s'." ),
1557 SCH_IO_MGR::SCH_FILE_T
fileType = SCH_IO_MGR::SCH_FILE_T::SCH_KICAD;
1578 fn.SetName( aLibrary );
1583 wxFileDialog dlg(
this, wxString::Format(
_(
"Save Library '%s' As..." ), aLibrary ),
1584 default_path, fn.GetFullName(), wildcards,
1585 wxFD_SAVE | wxFD_OVERWRITE_PROMPT );
1588 dlg.SetCustomizeHook( saveAsHook );
1590 if( dlg.ShowModal() == wxID_CANCEL )
1597 if( fn.GetExt().IsEmpty() )
1607 if(
fileType == SCH_IO_MGR::SCH_FILE_UNKNOWN )
1623 msg.Printf(
_(
"Failed to save changes to symbol library file '%s'." ),
1639 bool resyncLibTree =
false;
1641 wxString forceRefresh;
1645 case SYMBOL_SAVEAS_TYPE::REPLACE_TABLE_ENTRY:
1647 forceRefresh = originalLibNickname;
1650 case SYMBOL_SAVEAS_TYPE::ADD_GLOBAL_TABLE_ENTRY:
1654 case SYMBOL_SAVEAS_TYPE::ADD_PROJECT_TABLE_ENTRY:
1671 msg.Printf(
_(
"Symbol library file '%s' saved." ), fn.GetFullPath() );
1683 bool applyToAll =
false;
1696 if( aRequireConfirmation && !applyToAll )
1698 msg.Printf(
_(
"Save changes to '%s' before closing?" ), libNickname );
1702 case wxID_YES: doSave =
true;
break;
1703 case wxID_NO: doSave =
false;
break;
1705 case wxID_CANCEL:
return false;
1715 msg.Printf(
_(
"Symbol library '%s' is not writable." ), libNickname );
1716 msg2 =
_(
"You must save to a different location." );
1718 if( dirtyCount == 1 )
1730 2000, wxICON_EXCLAMATION );
1770 msg = parent ? parent->GetName() :
_(
"Undefined!" );
1774 static wxChar UnitLetter[] = wxT(
"?ABCDEFGHIJKLMNOPQRSTUVWXYZ" );
1775 msg = UnitLetter[
m_unit];
1780 msg =
_(
"Alternate" );
1782 msg =
_(
"Standard" );
1789 msg =
_(
"Power Symbol" );
1791 msg =
_(
"Power Symbol (Local)" );
1793 msg =
_(
"Symbol" );
static TOOL_ACTION cancelInteractive
static TOOL_ACTION zoomFitScreen
void SetContentModified(bool aModified=true)
wxString GetParentSymbolName() const
bool GetIncludeOnBoard() const
wxString GetName() const override
bool GetUnitsInterchangeable()
bool GetTransferUserFields()
bool GetKeepContentUserFields()
bool GetAlternateBodyStyle()
bool GetIncludeInBom() const
void SetInitialFocus(wxWindow *aWindow)
Sets the window (usually a wxTextCtrl) that should be focused when the dialog is shown.
void SetupStandardButtons(std::map< int, wxString > aLabels={})
virtual void ClearUndoRedoList()
Clear the undo and redo list using ClearUndoORRedoList()
virtual void RecreateToolbars()
void ShowInfoBarError(const wxString &aErrorMsg, bool aShowCloseButton=false, WX_INFOBAR::MESSAGE_TYPE aType=WX_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...
void ReCreateMenuBar()
Recreate the menu bar.
WX_INFOBAR * GetInfoBar()
virtual void ClearMsgPanel()
Clear all messages from the message panel.
void AppendMsgPanel(const wxString &aTextUpper, const wxString &aTextLower, int aPadding=6)
Append a message to the message panel.
virtual void SetParent(EDA_ITEM *aParent)
wxBoxSizer * m_ButtonsSizer
void SetOKLabel(const wxString &aLabel)
void initDialog(const wxArrayString &aItemHeaders, const std::vector< wxArrayString > &aItemList, const wxString &aPreselectText)
wxString GetTextSelection(int aColumn=0)
Return the selected text from aColumn in the wxListCtrl in the dialog.
void SetListLabel(const wxString &aLabel)
virtual const wxString & GetText() const
Return the string associated with the text object.
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()
virtual const wxString Problem() const
what was the problem?
Helper class to create more flexible dialogs, including 'do not show again' checkbox handling.
void DoNotShowCheckbox(wxString file, int line)
Shows the 'do not show again' checkbox.
void UpdateAllItems(int aUpdateFlags)
Update all items in the view according to the given flags.
PROJECT & Prj() const
Return a reference to the PROJECT associated with this KIWAY.
virtual KIWAY_PLAYER * Player(FRAME_T aFrameType, bool doCreate=true, wxTopLevelWindow *aParent=nullptr)
Return the KIWAY_PLAYER* given a FRAME_T.
A logical library item identifier and consists of various portions much like a URI.
bool IsValid() const
Check if this LID_ID is valid.
wxString GetUniStringLibId() const
const wxString GetUniStringLibItemName() const
Get strings for display messages in dialogs.
const wxString GetUniStringLibNickname() const
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.
Define a library symbol object.
wxString GetDescription() const override
const LIB_ID & GetLibId() const override
wxString GetKeyWords() const override
bool IsMulti() const override
void GetFields(std::vector< SCH_FIELD * > &aList, bool aVisibleOnly=false) const override
Populate a std::vector with SCH_FIELDs, sorted in ordinal order.
bool IsPower() const override
void SetUnitCount(int aCount, bool aDuplicateDrawItems=true)
Set the units per symbol count.
bool UnitsLocked() const
Check whether symbol units are interchangeable.
SCH_FIELD & GetDatasheetField()
Return reference to the datasheet field.
LIB_ID GetSourceLibId() const
SCH_FIELD * GetField(const wxString &aFieldName)
Find a field within this symbol matching aFieldName; return nullptr if not found.
bool HasAlternateBodyStyle() const override
Test if symbol has more than one body conversion type (DeMorgan).
void LockUnits(bool aLockUnits)
Set interchangeable the property for symbol units.
void SetParent(LIB_SYMBOL *aParent=nullptr)
wxString GetName() const override
SCH_FIELD & GetValueField()
Return reference to the value field.
bool IsLocalPower() const override
LIB_SYMBOL_SPTR SharedPtr() const
http://www.boost.org/doc/libs/1_55_0/libs/smart_ptr/sp_techniques.html#weak_without_shared.
void SetHasAlternateBodyStyle(bool aHasAlternate, bool aDuplicatePins=true)
Set or clear the alternate body style (DeMorgan) for the symbol.
bool IsGlobalPower() const override
std::unique_ptr< LIB_SYMBOL > Flatten() const
Return a flattened symbol inheritance to the caller.
void AddField(SCH_FIELD *aField)
Add a field.
LIB_SYMBOL_REF & GetParent()
virtual void SetName(const wxString &aName)
SCH_FIELD & GetReferenceField()
Return reference to the reference designator field.
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...
const wxString GetDescription(const wxString &aNickname)
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.
wxString GetFullURI(const wxString &aLibNickname, bool aExpandEnvVars=true) const
Return the full URI of the library mapped to aLibNickname.
static const wxString GetPinningSymbol()
void RefreshLibTree()
Refresh the tree (mainly to update highlighting and asterisking)
void CenterLibId(const LIB_ID &aLibId)
Ensure that an item is visible (preferably centered).
void SelectLibId(const LIB_ID &aLibId)
Select an item in the tree widget.
void ExpandLibId(const LIB_ID &aLibId)
Expand and item i the tree widget.
virtual COMMON_SETTINGS * GetCommonSettings() const
The backing store for a PROJECT, in JSON format.
static SYMBOL_LIB_TABLE * SchSymbolLibTable(PROJECT *aProject)
Accessor for project symbol library table.
static SEARCH_STACK * SchSearchS(PROJECT *aProject)
Accessor for Eeschema search stack.
Container for project specific data.
virtual PROJECT_FILE & GetProjectFile() const
virtual void SetRString(RSTRING_T aStringId, const wxString &aString)
Store a "retained string", which is any session and project specific string identified in enum RSTRIN...
virtual const wxString & GetRString(RSTRING_T aStringId)
Return a "retained string", which is any session and project specific string identified in enum RSTRI...
bool TransferDataFromWindow() override
wxTextCtrl * m_symbolNameCtrl
SymLibNameValidator m_validator
SYMBOL_SAVE_AS_HANDLER::CONFLICT_STRATEGY & m_conflictStrategy
SAVE_AS_DIALOG(SYMBOL_EDIT_FRAME *aParent, const wxString &aSymbolName, const wxString &aLibraryPreselect, SymLibNameValidator aValidator, SYMBOL_SAVE_AS_HANDLER::CONFLICT_STRATEGY &aConflictStrategy)
std::function< int(const wxString &libName, const wxString &symbolName)> SymLibNameValidator
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.
wxString SelectLibraryFromList()
Display a list of loaded libraries and allows the user to select a library.
void SetSymModificationTime(const wxDateTime &aTime)
Set the modification time of the symbol library table file.
void setSymWatcher(const LIB_ID *aSymbol)
Creates (or removes) a watcher on the specified symbol library.
KIGFX::SCH_VIEW * GetView() const override
Return a pointer to the #VIEW instance used in the panel.
Schematic editor (Eeschema) main window.
void SaveSymbolToSchematic(const LIB_SYMBOL &aSymbol, const KIID &aSchematicSymbolUUID)
Update a schematic symbol from a LIB_SYMBOL.
void SetText(const wxString &aText) override
static void FormatLibSymbol(LIB_SYMBOL *aPart, OUTPUTFORMATTER &aFormatter)
static std::vector< LIB_SYMBOL * > ParseLibSymbols(std::string &aSymbolText, std::string aSource, int aFileVersion=SEXPR_SCHEMATIC_FILE_VERSION)
static SCH_FILE_T GuessPluginTypeFromLibPath(const wxString &aLibPath, int aCtl=0)
Return a plugin type given a symbol library using the file extension of aLibPath.
Look for files in a number of paths.
const wxString LastVisitedPath(const wxString &aSubPathToSearch=wxEmptyString)
A quirky function inherited from old code that seems to serve particular needs in the UI.
The symbol library editor main window.
bool m_isSymbolFromSchematic
void ClearMsgPanel() override
Clear all messages from the message panel.
void UpdateAfterSymbolProperties(wxString *aOldName=nullptr)
void SaveAll()
Save all modified symbols and libraries.
void DeleteSymbolFromLibrary()
bool addLibTableEntry(const wxString &aLibFile, TABLE_SCOPE aScope=GLOBAL_LIB_TABLE)
Add aLibFile to the symbol library table defined by aScope.
bool IsLibraryTreeShown() const override
wxString getTargetLib() const
bool IsCurrentSymbol(const LIB_ID &aLibId) const
Restore the empty editor screen, without any symbol or library selected.
bool backupFile(const wxFileName &aOriginalFile, const wxString &aBackupExt)
Return currently edited symbol.
int GetTreeLIBIDs(std::vector< LIB_ID > &aSelection) const
LIB_ID GetTreeLIBID(int *aUnit=nullptr) const
Return the LIB_ID of the library or symbol selected in the symbol tree.
LIB_SYMBOL_LIBRARY_MANAGER * m_libMgr
wxString GetCurLib() const
The nickname of the current library being edited and empty string if none.
void Save()
Save the selected symbol or library.
void LoadSymbol(const wxString &aLibrary, const wxString &aSymbol, int Unit)
bool m_SyncPinEdit
Set to true to synchronize pins at the same position when editing symbols with multiple units or mult...
void RebuildSymbolUnitsList()
void Revert(bool aConfirm=true)
Revert unsaved changes in a symbol, restoring to the last saved state.
void centerItemIdleHandler(wxIdleEvent &aEvent)
bool replaceLibTableEntry(const wxString &aLibNickname, const wxString &aLibFile)
Replace the file path of the symbol library table entry aLibNickname with aLibFile.
bool IsSymbolFromSchematic() const
void SetScreen(BASE_SCREEN *aScreen) override
void DuplicateSymbol(bool aFromClipboard)
Insert a duplicate symbol.
SCH_SCREEN * m_dummyScreen
< Helper screen used when no symbol is loaded
LIB_ID m_centerItemOnIdle
void saveSymbolCopyAs(bool aOpenCopy)
void SetCurSymbol(LIB_SYMBOL *aSymbol, bool aUpdateZoom)
Take ownership of aSymbol and notes that it is the one currently being edited.
KIID m_schematicSymbolUUID
RefDes of the symbol (only valid if symbol was loaded from schematic)
std::vector< LIB_ID > GetSelectedLibIds() const
void SyncLibraries(bool aShowProgress, bool aPreloadCancelled=false, const wxString &aForceRefresh=wxEmptyString)
Synchronize the library manager to the symbol library table, and then the symbol tree to the library ...
LIB_SYMBOL * GetCurSymbol() const
Return the current symbol being edited or NULL if none selected.
void UpdateSymbolMsgPanelInfo()
Display the documentation of the selected symbol.
LIB_ID GetTargetLibId() const override
Return either the symbol selected in the symbol tree (if context menu is active) or the symbol on the...
bool saveLibrary(const wxString &aLibrary, bool aNewFile)
Save the changes to the current library.
void SelectActiveLibrary(const wxString &aLibrary=wxEmptyString)
Set the current active library to aLibrary.
int m_bodyStyle
Flag if the symbol being edited was loaded directly from a schematic.
bool saveAllLibraries(bool aRequireConfirmation)
Save the current symbol.
void UpdateMsgPanel() override
Redraw the message panel.
void CreateNewSymbol(const wxString &newName=wxEmptyString)
Create a new symbol in the selected library.
wxString SetCurLib(const wxString &aLibNickname)
Set the current library nickname and returns the old library nickname.
void UpdateTitle()
Update the main window title bar with the current library name and read only status of the library.
bool LoadSymbolFromCurrentLib(const wxString &aSymbolName, int aUnit=0, int aBodyStyle=0)
Load a symbol from the current active library, optionally setting the selected unit and convert.
SYMBOL_TREE_PANE * m_treePane
bool LoadOneLibrarySymbolAux(LIB_SYMBOL *aLibEntry, const wxString &aLibrary, int aUnit, int aBodyStyle)
Create a copy of aLibEntry into memory.
bool saveCurrentSymbol()
Store the currently modified symbol in the library manager buffer.
void CopySymbolToClipboard()
void SaveSymbolCopyAs(bool aOpenCopy)
Save the currently selected symbol to a new name and/or location.
wxString AddLibraryFile(bool aCreateNew)
Create or add an existing library to the symbol library table.
void ensureUniqueName(LIB_SYMBOL *aSymbol, const wxString &aLibrary)
void OnModify() override
Must be called after a schematic change in order to set the "modify" flag of the current symbol.
void SetShowDeMorgan(bool show)
void SaveLibraryAs()
Save the currently selected library to a new file.
bool IsContentModified() const override
Get if any symbols or libraries have been modified but not saved.
LIB_SYMBOL * getTargetSymbol() const
Return either the library selected in the symbol tree, if context menu is active or the library that ...
SYMBOL_SAVEAS_TYPE GetOption() const
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.
bool ClearLibraryModified(const wxString &aLibrary) const
Clear the modified flag for all symbols in a library.
LIB_SYMBOL * GetBufferedSymbol(const wxString &aSymbolName, const wxString &aLibrary)
Return the symbol copy from the buffer.
bool ClearSymbolModified(const wxString &aSymbolName, const wxString &aLibrary) const
Clear the modified flag for a symbol.
SCH_SCREEN * GetScreen(const wxString &aSymbolName, const wxString &aLibrary)
Return the screen used to edit a specific symbol.
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.
wxArrayString GetLibraryNames() const
Return the array of library names.
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.
bool IsSymbolModified(const wxString &aSymbolName, const wxString &aLibrary) const
Return true if symbol has unsaved modifications.
bool RevertLibrary(const wxString &aLibrary)
Revert unsaved changes for a symbol library.
LIB_ID RevertSymbol(const wxString &aSymbolName, const wxString &aLibrary)
Revert unsaved changes for a symbol.
void GetSymbolNames(const wxString &aLibName, wxArrayString &aSymbolNames, SYMBOL_NAME_FILTER aFilter=SYMBOL_NAME_FILTER::ALL)
bool RevertAll()
Revert all pending changes.
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).
SYMBOL_LIB_TABLE_ROW * GetLibrary(const wxString &aLibrary) const
Find a single library within the (aggregate) library table.
bool UpdateSymbol(LIB_SYMBOL *aSymbol, const wxString &aLibrary)
Update the symbol buffer with a new version of the symbol.
bool SaveLibrary(const wxString &aLibrary, const wxString &aFileName, SCH_IO_MGR::SCH_FILE_T aFileType=SCH_IO_MGR::SCH_FILE_T::SCH_LEGACY)
Save library to a file, including unsaved changes.
bool HasDerivedSymbols(const wxString &aSymbolName, const wxString &aLibraryName)
Check if symbol aSymbolName in library aLibraryName is a root symbol that has derived symbols.
Hold a record identifying a symbol library accessed by the appropriate symbol library SCH_IO object i...
LIB_SYMBOL * LoadSymbol(const wxString &aNickname, const wxString &aName)
Load a LIB_SYMBOL having aName from the library given by aNickname.
This is a class that handles state involved in saving a symbol copy as a new symbol.
CONFLICT_STRATEGY m_strategy
wxString resolveConflict(const wxString &proposed, const wxString &aNewLibName) const
SYMBOL_SAVE_AS_HANDLER(LIB_SYMBOL_LIBRARY_MANAGER &aLibMgr, CONFLICT_STRATEGY aStrategy, bool aValueFollowsName)
LIB_SYMBOL_LIBRARY_MANAGER & m_libMgr
bool DoSave(LIB_SYMBOL &symbol, const wxString &aNewSymName, const wxString &aNewLibName)
LIB_TREE * GetLibTree() const
void SetExcludedFromBoard(bool aExcludeFromBoard) override
Set or clear exclude from board netlist flag.
virtual void SetShowPinNumbers(bool aShow)
Set or clear the pin number visibility flag.
int GetPinNameOffset() const
virtual void SetShowPinNames(bool aShow)
Set or clear the pin name visibility flag.
void SetExcludedFromBOM(bool aExcludeFromBOM) override
Set or clear the exclude from schematic bill of materials flag.
void SetPinNameOffset(int aOffset)
Set the offset in mils of the pin name text from the pin symbol.
void ShowMessageFor(const wxString &aMessage, int aTime, int aFlags=wxICON_INFORMATION, MESSAGE_TYPE aType=WX_INFOBAR::MESSAGE_TYPE::GENERIC)
Show the infobar with the provided message and icon for a specific period of time.
void Dismiss() override
Dismisses the infobar and updates the containing layout and AUI manager (if one is provided).
std::string GetClipboardUTF8()
Return the information currently stored in the system clipboard.
int OKOrCancelDialog(wxWindow *aParent, const wxString &aWarning, const wxString &aMessage, const wxString &aDetailedMessage, const wxString &aOKLabel, const wxString &aCancelLabel, bool *aApplyToAll)
Display a warning dialog with aMessage and returns the user response.
bool IsOK(wxWindow *aParent, const wxString &aMessage)
Display a yes/no dialog with aMessage and returns the user response.
bool HandleUnsavedChanges(wxWindow *aParent, const wxString &aMessage, const std::function< bool()> &aSaveFunction)
Display a dialog with Save, Cancel and Discard Changes buttons.
void DisplayErrorMessage(wxWindow *aParent, const wxString &aText, const wxString &aExtraInfo)
Display an error message with aMessage.
int UnsavedChangesDialog(wxWindow *parent, const wxString &aMessage, bool *aApplyToAll)
A specialized version of HandleUnsavedChanges which handles an apply-to-all checkbox.
bool ConfirmRevertDialog(wxWindow *parent, const wxString &aMessage)
Display a confirmation dialog for a revert action.
void DisplayError(wxWindow *aParent, const wxString &aText)
Display an error or warning message box with aMessage.
This file is part of the common library.
static const std::string KiCadSymbolLibFileExtension
static wxString KiCadSymbolLibFileWildcard()
std::unique_ptr< T > IO_RELEASER
Helper to hold and release an IO_BASE object when exceptions are thrown.
This file is part of the common library.
std::shared_ptr< LIB_SYMBOL > LIB_SYMBOL_SPTR
shared pointer to LIB_SYMBOL
@ ALL
All except INITIAL_ADD.
bool contains(const _Container &__container, _Value __value)
Returns true if the container contains the given value.
void Refresh()
Update the board display after modifying it by a python script (note: it is automatically called by a...
PGM_BASE & Pgm()
The global program "get" accessor.
void Format(OUTPUTFORMATTER *out, int aNestLevel, int aCtl, const CPTREE &aTree)
Output a PTREE into s-expression format via an OUTPUTFORMATTER derivative.
KIWAY Kiway(KFCTL_STANDALONE)
MODEL3D_FORMAT_TYPE fileType(const char *aFileName)
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:...
std::vector< wxString > pinned_symbol_libs
static std::vector< LIB_SYMBOL_SPTR > GetParentChain(const LIB_SYMBOL &aSymbol)
Get a list of all the symbols in the parental chain of a symbol, with the "leaf" symbol at the start ...
static std::vector< wxString > CheckForParentalChainConflicts(LIB_SYMBOL_LIBRARY_MANAGER &aLibMgr, LIB_SYMBOL &aSymbol, const wxString &newSymbolName, const wxString &newLibraryName)
Get a list of all the symbols in the parental chain of a symbol that have conflicts when transposed t...
static std::pair< bool, bool > CheckSavingIntoOwnInheritance(LIB_SYMBOL_LIBRARY_MANAGER &aLibMgr, LIB_SYMBOL &aSymbol, const wxString &aNewSymbolName, const wxString &aNewLibraryName)
Check if a planned overwrite would put a symbol into it's own inheritance chain.
Definition for symbol library class.
FIELD_T
The set of all field indices assuming an array like sequence that a SCH_COMPONENT or LIB_PART can hol...
const SHAPE_LINE_CHAIN chain
Definition of file extensions used in Kicad.