36#include <wx/filename.h>
61 m_checkerDialog( nullptr )
68 m_frame = getEditFrame<FOOTPRINT_EDIT_FRAME>();
83 auto libSelectedCondition =
93 auto libInferredCondition =
100 auto fpSelectedCondition =
107 auto fpExportCondition =
111 return fp !=
nullptr;
114 auto canOpenExternally =
127 ctxMenu.AddSeparator( 10 );
129 ctxMenu.AddItem(
ACTIONS::saveAs, libSelectedCondition || fpSelectedCondition, 10 );
130 ctxMenu.AddItem(
ACTIONS::revert, libSelectedCondition || libInferredCondition, 10 );
132 ctxMenu.AddSeparator( 10 );
140 ctxMenu.AddSeparator( 100 );
146 ctxMenu.AddSeparator( 200 );
152 ctxMenu.AddSeparator( 200 );
153 ctxMenu.AddItem(
ACTIONS::openDirectory, canOpenExternally && ( libSelectedCondition || fpSelectedCondition ), 200 );
344 getEditFrame<FOOTPRINT_EDIT_FRAME>()->RevertFootprint();
378 newName +=
_(
"_copy" );
426 if( !libTool->
RenameLibrary(
_(
"Change Footprint Name" ), oldName,
427 [&](
const wxString& aNewName )
431 if( newName.IsEmpty() )
433 wxMessageBox( _(
"Footprint must have a name." ) );
437 if( tbl->FootprintExists( libraryName, newName ) )
439 msg = wxString::Format( _(
"Footprint '%s' already exists in library '%s'." ),
440 newName, libraryName );
442 KIDIALOG errorDlg( m_frame, msg, _(
"Confirmation" ),
443 wxOK | wxCANCEL | wxICON_WARNING );
444 errorDlg.SetOKLabel( _(
"Overwrite" ) );
446 return errorDlg.ShowModal() == wxID_OK;
512 if(
frame->DeleteFootprintFromLibrary(
frame->GetTargetFPID(),
true ) )
514 if(
frame->GetTargetFPID() ==
frame->GetLoadedFPID() )
515 frame->Clear_Pcb(
false );
517 frame->SyncLibraryTree(
true );
537 frame()->ClearUndoRedoList();
540 if( is_last_fp_from_brd )
570 wxString
path = wxEmptyString;
572 for(
FP_LIB_TABLE* table : { globalTable, projectTable } )
579 path = table->FindRow( libName,
true )->GetFullURI(
true );
586 if( !
path.IsEmpty() )
590 wxString fileExt = wxEmptyString;
593 if( !libItemName.IsEmpty() )
596 wxFileName fileName(
path, libItemName, fileExt );
602 if( explCommand.IsEmpty() )
604 path = fileName.GetFullPath().BeforeLast( wxFileName::GetPathSeparator() );
606 if( !
path.IsEmpty() && wxDirExists(
path ) )
611 if( !explCommand.EndsWith(
"%F" ) )
613 wxMessageBox(
_(
"Missing/malformed file explorer argument '%F' in common settings." ) );
617 wxString escapedFilePath = fileName.GetFullPath();
618 escapedFilePath.Replace( wxS(
"\"" ), wxS(
"_" ) );
620 wxString fileArg = wxEmptyString;
621 fileArg <<
'"' << escapedFilePath <<
'"';
623 explCommand.Replace( wxT(
"%F" ), fileArg );
625 if( !explCommand.IsEmpty() )
626 wxExecute( explCommand );
636 if( fullEditorName.IsEmpty() )
638 wxMessageBox(
_(
"No text editor selected in KiCad. Please choose one." ) );
648 wxString libItemName = wxEmptyString;
650 for(
FP_LIB_TABLE* table : { globalTable, projectTable } )
657 libItemName = table->FindRow( libName,
true )->GetFullURI(
true );
664 if( !libItemName.IsEmpty() )
668 libItemName << wxFileName::GetPathSeparator();
672 if( !wxFileName::FileExists( libItemName ) )
675 ExecuteFile( fullEditorName, libItemName.wc_str(),
nullptr,
false );
706 getEditFrame<FOOTPRINT_EDIT_FRAME>()->OnEditItemRequest(
footprint );
716 getEditFrame<FOOTPRINT_EDIT_FRAME>()->ShowPadPropertiesDialog(
nullptr );
782 if( ids.count( aItem->m_Uuid ) )
785 const_cast<KIID&
>( aItem->m_Uuid ) =
KIID();
788 ids.insert( aItem->m_Uuid );
813 processItem(
group );
817 errors += duplicates;
818 details += wxString::Format(
_(
"%d duplicate IDs replaced.\n" ), duplicates );
825 wxString msg = wxString::Format(
_(
"%d potential problems repaired." ), errors );
static TOOL_ACTION openWithTextEditor
static TOOL_ACTION revert
static TOOL_ACTION saveAs
static TOOL_ACTION openDirectory
static TOOL_ACTION zoomFitScreen
static TOOL_ACTION showProperties
static const ADVANCED_CFG & GetCfg()
Get the singleton instance's config, which is shared by all consumers.
void SetContentModified(bool aModified=true)
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
FOOTPRINT * GetFirstFootprint() const
Get the first footprint on the board or nullptr.
const FOOTPRINTS & Footprints() const
bool Show(bool show) override
void ReCreateMenuBar()
Recreates the menu bar.
WX_INFOBAR * GetInfoBar()
virtual void Zoom_Automatique(bool aWarpPointer)
Redraw the screen with best zoom level and the best centering that shows all the page or the board.
KIGFX::VIEW_CONTROLS * GetViewControls() const
Return a pointer to the #VIEW_CONTROLS instance used in the panel.
void ForceRefresh()
Force a redraw.
virtual void Refresh(bool aEraseBackground=true, const wxRect *aRect=nullptr) override
A base class for most all the KiCad significant classes used in schematics and boards.
void ClearFlags(EDA_ITEM_FLAGS aMask=EDA_ITEM_ALL_FLAGS)
void FootprintDelete(const wxString &aNickname, const wxString &aFootprintName)
Delete the aFootprintName from the library given by aNickname.
bool FootprintExists(const wxString &aNickname, const wxString &aFootprintName)
Indicates whether or not the given footprint already exists in the given library.
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 void Update(const VIEW_ITEM *aItem, int aUpdateFlags) const override
For dynamic VIEWs, inform the associated VIEW that the graphical representation of this item has chan...
virtual void SetCrossHairCursorPosition(const VECTOR2D &aPosition, bool aWarpView=true)=0
Move the graphic crosshair cursor to the requested position expressed in world coordinates.
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.
A wxFrame capable of the OpenProjectFiles function, meaning it can load a portion of a KiCad project.
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...
bool Destroy() override
Our version of Destroy() which is virtual from wxWidgets.
virtual KIWAY_PLAYER * Player(FRAME_T aFrameType, bool doCreate=true, wxTopLevelWindow *aParent=nullptr)
Return the KIWAY_PLAYER* given a FRAME_T.
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.
int SetLibNickname(const UTF8 &aLibNickname)
Override the logical library name portion of the LIB_ID to aLibNickname.
const wxString GetUniStringLibNickname() const
const UTF8 & GetLibItemName() const
const UTF8 & GetLibNickname() const
Return the logical library name portion of a LIB_ID.
wxString GetFullURI(const wxString &aLibNickname, bool aExpandEnvVars=true) const
Return the full URI of the library mapped to aLibNickname.
LIB_ID GetSelectedLibId(int *aUnit=nullptr) const
For multi-unit symbols, if the user selects the symbol itself rather than picking an individual unit,...
static TOOL_ACTION deleteFootprint
static TOOL_ACTION renameFootprint
static TOOL_ACTION showLayersManager
static TOOL_ACTION createFootprint
static TOOL_ACTION editFootprint
static TOOL_ACTION exportFootprint
static TOOL_ACTION editTextAndGraphics
static TOOL_ACTION newFootprint
static TOOL_ACTION defaultPadProperties
static TOOL_ACTION importFootprint
static TOOL_ACTION pasteFootprint
static TOOL_ACTION footprintProperties
static TOOL_ACTION checkFootprint
static TOOL_ACTION duplicateFootprint
static TOOL_ACTION cutFootprint
static TOOL_ACTION repairFootprint
static TOOL_ACTION copyFootprint
static TOOL_ACTION cleanupGraphics
void ToggleProperties() override
FOOTPRINT * CreateNewFootprint(wxString aFootprintName, const wxString &aLibName)
Creates a new footprint, at position 0,0.
FOOTPRINT * LoadFootprint(const LIB_ID &aFootprintId)
Attempt to load aFootprintId from the footprint library table.
PCB_DRAW_PANEL_GAL * GetCanvas() const override
Return a pointer to GAL-based canvas of given EDA draw frame.
PCB_SCREEN * GetScreen() const override
Return a pointer to a BASE_SCREEN or one of its derivatives.
virtual void Update3DView(bool aMarkDirty, bool aRefresh, const wxString *aTitle=nullptr)
Update the 3D view, if the viewer is opened by this frame.
A set of BOARD_ITEMs (i.e., without duplicates).
virtual COMMON_SETTINGS * GetCommonSettings() const
virtual const wxString & GetTextEditor(bool aCanShowFileChooser=true)
Return the path to the preferred text editor application.
static FP_LIB_TABLE * PcbFootprintLibs(PROJECT *aProject)
Return the table of footprint libraries without Kiway.
static bool ShowAlways(const SELECTION &aSelection)
The default condition function (always returns true).
A modified version of the wxInfoBar class that allows us to:
bool HasCloseButton() const
void Dismiss() override
Dismisses the infobar and updates the containing layout and AUI manager (if one is provided).
Handle a list of polygons defining a copper zone.
void DisplayError(wxWindow *aParent, const wxString &aText, int aDisplayTime)
Display an error or warning message box with aMessage.
void DisplayInfoMessage(wxWindow *aParent, const wxString &aMessage, const wxString &aExtraInfo)
Display an informational message box with aMessage.
bool HandleUnsavedChanges(wxWindow *aParent, const wxString &aMessage, const std::function< bool()> &aSaveFunction)
Display a dialog with Save, Cancel and Discard Changes buttons.
This file is part of the common library.
FP_LIB_TABLE GFootprintTable
The global footprint library table.
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 KiCadFootprintFileExtension
This file is part of the common library.
bool LaunchExternal(const wxString &aPath)
Launches the given file or folder in the host OS.
Class to handle a set of BOARD_ITEMs.
PGM_BASE & Pgm()
The global Program "get" accessor.
VECTOR2< int32_t > VECTOR2I
VECTOR2< double > VECTOR2D
Definition of file extensions used in Kicad.