45#include <wx/filedlg.h>
50 m_frame = getEditFrame<SCH_BASE_FRAME>();
60 wxCHECK( editFrame,
false );
62 auto libSelectedCondition =
72 auto libInferredCondition =
79 auto symbolSelectedCondition =
93 auto multiSymbolSelectedCondition =
123 auto canOpenExternally =
137 ctxMenu.AddSeparator( 10 );
138 ctxMenu.AddItem(
ACTIONS::save, symbolSelectedCondition || libInferredCondition, 10 );
142 ctxMenu.AddItem(
ACTIONS::revert, symbolSelectedCondition || libInferredCondition, 10 );
144 ctxMenu.AddSeparator( 10 );
145 ctxMenu.AddItem(
EE_ACTIONS::cutSymbol, symbolSelectedCondition || multiSymbolSelectedCondition, 10 );
152 ctxMenu.AddSeparator( 100 );
157 ctxMenu.AddSeparator( 200 );
163 ctxMenu.AddSeparator( 200 );
164 ctxMenu.AddItem(
ACTIONS::openDirectory, canOpenExternally && ( symbolSelectedCondition || libSelectedCondition ), 200 );
188 wxString libFile = *aEvent.
Parameter<wxString*>();
235 wxString::Format(
_(
"Failed to load symbol %s from "
253 if( libName.IsEmpty() )
255 msg.Printf(
_(
"No symbol library selected." ) );
262 msg.Printf(
_(
"Symbol library '%s' is not writable." ), libName );
322 wxFileName fileName( libItemName );
324 wxString filePath = wxEmptyString;
330 if( explCommand.IsEmpty() )
332 filePath = fileName.GetFullPath().BeforeLast( wxFileName::GetPathSeparator() );
334 if( !filePath.IsEmpty() && wxDirExists( filePath ) )
339 if( !explCommand.EndsWith(
"%F" ) )
341 wxMessageBox(
_(
"Missing/malformed file explorer argument '%F' in common settings." ) );
345 filePath = fileName.GetFullPath();
346 filePath.Replace( wxS(
"\"" ), wxS(
"_" ) );
348 wxString fileArg =
'"' + filePath +
'"';
350 explCommand.Replace( wxT(
"%F" ), fileArg );
352 if( !explCommand.IsEmpty() )
353 wxExecute( explCommand );
368 if( textEditorName.IsEmpty() )
370 wxMessageBox(
_(
"No text editor selected in KiCad. Please choose one." ) );
378 if( !tempFName.IsEmpty() )
379 ExecuteFile( textEditorName, tempFName,
nullptr,
false );
397 bool hasWritableLibs =
false;
402 const wxString& libName = sel.GetLibNickname();
405 msg.Printf(
_(
"Symbol library '%s' is not writable." ), libName );
407 hasWritableLibs =
true;
413 if( !hasWritableLibs )
435 if( !sel.
IsValid() && !isPasteAction )
438 msg.Printf(
_(
"No symbol selected" ) );
447 msg.Printf(
_(
"Symbol library '%s' is not writable." ), libName );
468 wxString oldName = libId.GetLibItemName();
476 [&](
const wxString& aNewName )
480 if( newName.IsEmpty() )
482 wxMessageBox(
_(
"Symbol must have a name." ) );
488 msg = wxString::Format(
_(
"Symbol '%s' already exists in library '%s'." ),
492 wxOK | wxCANCEL | wxICON_WARNING );
493 errorDlg.SetOKLabel(
_(
"Overwrite" ) );
536 wxDataViewItem treeItem = libMgr.
GetAdapter()->FindItem( libId );
546 : BODY_STYLE::DEMORGAN;
572 getEditFrame<SYMBOL_EDIT_FRAME>()->ToggleProperties();
624 getEditFrame<SYMBOL_EDIT_FRAME>()->GetRenderSettings()->m_ShowHiddenPins =
642 getEditFrame<SYMBOL_EDIT_FRAME>()->GetRenderSettings()->m_ShowHiddenFields =
677 wxMessageBox(
_(
"No symbol to export" ) );
681 wxFileName fn( symbol->
GetName() );
686 wxFileDialog dlg( editFrame,
_(
"Export View as PNG" ), projectPath, fn.GetFullName(),
689 if( dlg.ShowModal() == wxID_OK && !dlg.GetPath().IsEmpty() )
697 wxMessageBox( wxString::Format(
_(
"Can't save file '%s'." ), dlg.GetPath() ) );
715 wxMessageBox(
_(
"No symbol to export" ) );
719 wxFileName fn( symbol->
GetName() );
724 wxString fullFileName = wxFileSelector(
_(
"SVG File Name" ), pro_dir, fn.GetFullName(),
729 if( !fullFileName.IsEmpty() )
796 if( blocking_dialog )
798 blocking_dialog->Raise();
828 const int deltaUnit = aEvent.
Parameter<
int>();
831 const int newUnit = ( ( editFrame->
GetUnit() - 1 + deltaUnit + nUnits ) % nUnits ) + 1;
constexpr EDA_IU_SCALE schIUScale
static TOOL_ACTION cancelInteractive
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.
constexpr BOX2< Vec > & Inflate(coord_type dx, coord_type dy)
Inflates the rectangle horizontally by dx and vertically by dy.
constexpr const Vec & GetOrigin() const
constexpr const SizeVec & GetSize() const
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...
bool IsType(FRAME_T aType) const
bool SaveCanvasImageToFile(const wxString &aFileName, BITMAP_TYPE aBitmapType)
Save the current view as an image file.
virtual void Refresh(bool aEraseBackground=true, const wxRect *aRect=nullptr) override
virtual void SetParent(EDA_ITEM *aParent)
virtual const wxString & GetText() const
Return the string associated with the text object.
AUTOPLACE_FIELDS m_AutoplaceFields
static TOOL_ACTION deleteSymbol
static TOOL_ACTION cutSymbol
static TOOL_ACTION saveSymbolAs
static TOOL_ACTION placeSymbol
static TOOL_ACTION clearSelection
Clears the current selection.
static TOOL_ACTION showHiddenFields
static TOOL_ACTION duplicateSymbol
static TOOL_ACTION showDeMorganAlternate
static TOOL_ACTION newSymbol
static TOOL_ACTION showDeMorganStandard
static TOOL_ACTION editLibSymbolWithLibEdit
static TOOL_ACTION editSymbol
static TOOL_ACTION saveLibraryAs
static TOOL_ACTION addSymbolToSchematic
static TOOL_ACTION showPinNumbers
static TOOL_ACTION togglePinAltIcons
static TOOL_ACTION exportSymbolAsSVG
static TOOL_ACTION importSymbol
static TOOL_ACTION saveSymbolCopyAs
static TOOL_ACTION copySymbol
static TOOL_ACTION renameSymbol
static TOOL_ACTION previousUnit
static TOOL_ACTION toggleSyncedPinsMode
static TOOL_ACTION nextUnit
static TOOL_ACTION showHiddenPins
static TOOL_ACTION exportSymbolView
static TOOL_ACTION deriveFromExistingSymbol
static TOOL_ACTION pasteSymbol
static TOOL_ACTION showElectricalTypes
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.
PROJECT & Prj() const
Return a reference to the PROJECT associated with this KIWAY.
KIWAY & Kiway() const
Return a reference to the KIWAY that this object has an opportunity to participate in.
virtual KIWAY_PLAYER * Player(FRAME_T aFrameType, bool doCreate=true, wxTopLevelWindow *aParent=nullptr)
Return the KIWAY_PLAYER* given a FRAME_T.
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)
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
const BOX2I GetUnitBoundingBox(int aUnit, int aBodyStyle, bool aIgnoreHiddenFields=true) const
Get the bounding box for the symbol.
SCH_FIELD * GetFieldById(int aId) const
Return pointer to the requested field.
wxString GetName() const override
int GetUnitCount() const override
virtual void SetName(const wxString &aName)
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...
Describe the page size and margins of a paper page on which to eventually print or plot.
void SetHeightMils(double aHeightInMils)
void SetWidthMils(double aWidthInMils)
virtual COMMON_SETTINGS * GetCommonSettings() const
virtual const wxString & GetTextEditor(bool aCanShowFileChooser=true)
Return the path to the preferred text editor application.
virtual const wxString GetProjectFullName() const
Return the full path and name of the project.
SCH_RENDER_SETTINGS * GetRenderSettings()
SCH_SCREEN * GetScreen() const override
Return a pointer to a BASE_SCREEN or one of its derivatives.
SYMBOL_EDITOR_SETTINGS * libeditconfig() const
SCH_DRAW_PANEL * GetCanvas() const override
Return a pointer to GAL-based canvas of given EDA draw frame.
EESCHEMA_SETTINGS * eeconfig() const
KIGFX::SCH_VIEW * GetView() const override
Return a pointer to the #VIEW instance used in the panel.
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
void SetText(const wxString &aText) override
bool m_ShowPinsElectricalType
const PAGE_INFO & GetPageSettings() const
void SetPageSettings(const PAGE_INFO &aPageSettings)
void AutoplaceFields(SCH_SCREEN *aScreen, bool aManual) override
Automatically orient all the fields in the symbol.
int ToggleSyncedPinsMode(const TOOL_EVENT &aEvent)
int OnDeMorgan(const TOOL_EVENT &aEvent)
int Save(const TOOL_EVENT &aEvt)
int EditSymbol(const TOOL_EVENT &aEvent)
int ExportView(const TOOL_EVENT &aEvent)
int ShowElectricalTypes(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 AddLibrary(const TOOL_EVENT &aEvent)
int AddSymbol(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)
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 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)
bool m_ShowPinAltIcons
When true, dragging an outline edge will drag pins rooted on it.
The symbol library editor main window.
void SaveAll()
Save all modified symbols and libraries.
void DeleteSymbolFromLibrary()
bool IsLibraryTreeShown() const override
bool IsCurrentSymbol(const LIB_ID &aLibId) const
Restore the empty editor screen, without any symbol or library selected.
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 SVGPlotSymbol(const wxString &aFullFileName, const VECTOR2I &aOffset)
Create the SVG print file for the current edited symbol.
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...
int GetTreeSelectionCount() const
bool IsSymbolFromSchematic() const
void DuplicateSymbol(bool aFromClipboard)
Insert a duplicate symbol.
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 SetBodyStyle(int aBodyStyle)
void UpdateMsgPanel() override
Redraw the message panel.
void CreateNewSymbol(const wxString &newName=wxEmptyString)
Create a new symbol in the selected library.
void UpdateTitle()
Update the main window title bar with the current library name and read only status of the 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 DdAddLibrary(wxString aLibFile)
Add a library dropped file to the symbol library table.
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 SaveLibraryAs()
Save the currently selected library to a new file.
void ToggleLibraryTree() override
LIB_SYMBOL * GetBufferedSymbol(const wxString &aAlias, const wxString &aLibrary)
Return the symbol copy from the buffer.
bool UpdateSymbolAfterRename(LIB_SYMBOL *aSymbol, const wxString &oldAlias, const wxString &aLibrary)
Update the symbol buffer with a new version of the symbol when the name has changed.
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 IsLibraryModified(const wxString &aLibrary) const
Return true if library has unsaved modifications.
void SetSymbolModified(const wxString &aAlias, const wxString &aLibrary)
bool SymbolExists(const wxString &aAlias, 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.
Symbol library viewer main window.
void SetUnitAndBodyStyle(int aUnit, int aBodyStyle)
Set unit and convert, and set flag preventing them from automatically resetting to 1.
LIB_SYMBOL * GetSelectedSymbol() const
void DisplayError(wxWindow *aParent, const wxString &aText, int aDisplayTime)
Display an error or warning message box with aMessage.
void DisplayErrorMessage(wxWindow *aParent, const wxString &aText, const wxString &aExtraInfo)
Display an error message with aMessage.
This file is part of the common library.
@ 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.
bool m_EnableLibDir
Enable option to open lib file directory.
bool m_EnableLibWithText
Enable option to load lib files with text editor.
static const std::string SVGFileExtension
static wxString PngFileWildcard()
static wxString SVGFileWildcard()
This file is part of the common library.
bool LaunchExternal(const wxString &aPath)
Launches the given file or folder in the host OS.
@ REPAINT
Item needs to be redrawn.
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:...
constexpr int IUToMils(int iu) const
@ VALUE_FIELD
Field Value of part, i.e. "3.3K".
Definition of file extensions used in Kicad.