54#include <wx/choicdlg.h>
55#include <wx/filedlg.h>
56#include <wx/fswatcher.h>
63 _(
"Writing/modifying legacy libraries (.mod files) is not allowed\n"\
64 "Please save the current library to the new .pretty format\n"\
65 "and update your footprint lib table\n"\
66 "to save your footprint (a .kicad_mod file) in the .pretty library folder" ) );
69 _(
"Modifying legacy libraries (.mod files) is not allowed\n"\
70 "Please save the current library under the new .pretty format\n"\
71 "and update your footprint lib table\n"\
72 "before deleting a footprint" ) );
86 static int lastFilterIndex = 0;
87 wxString fileFiltersStr;
88 std::vector<std::string> allExtensions;
89 std::set<wxString> allWildcardsSet;
103 if( !fileFiltersStr.IsEmpty() )
104 fileFiltersStr += wxChar(
'|' );
110 allExtensions.emplace_back( ext );
115 wxString allWildcardsStr;
116 for(
const wxString& wildcard : allWildcardsSet )
117 allWildcardsStr << wildcard;
119 fileFiltersStr =
_(
"All supported formats" ) + wxT(
"|" ) + allWildcardsStr + wxT(
"|" )
122 wxFileDialog dlg(
this,
_(
"Import Footprint" ),
m_mruPath, wxEmptyString, fileFiltersStr,
123 wxFD_OPEN | wxFD_FILE_MUST_EXIST );
125 dlg.SetFilterIndex( lastFilterIndex );
127 if( dlg.ShowModal() == wxID_CANCEL )
130 lastFilterIndex = dlg.GetFilterIndex();
138 if( !wxFileExists( fn.GetFullPath() ) )
140 wxString msg = wxString::Format(
_(
"File '%s' not found." ), fn.GetFullPath() );
173 wxString footprintName;
183 wxString msg = wxString::Format(
_(
"Unable to load footprint '%s' from '%s'" ),
184 footprintName, fn.GetFullPath() );
202 footprint->
SetFPID(
LIB_ID( wxEmptyString, footprintName ) );
239 wxFileDialog dlg(
this,
_(
"Export Footprint" ), fn.GetPath(), fn.GetFullName(),
240 wildcard, wxFD_SAVE | wxFD_OVERWRITE_PROMPT );
242 if( dlg.ShowModal() == wxID_CANCEL )
262 pcb_io.
Format( aFootprint );
264 FILE* fp = wxFopen( dlg.GetPath(), wxT(
"wt" ) );
268 DisplayErrorMessage(
this, wxString::Format(
_(
"Insufficient permissions to write file '%s'." ),
282 wxString msg = wxString::Format(
_(
"Footprint exported to file '%s'." ), dlg.GetPath() );
288 const wxString& aProposedName )
295 const wxString& aProposedName )
304 const wxString& aProposedName,
311 if( aTable ==
nullptr )
312 return wxEmptyString;
314 wxString initialPath = aProposedName.IsEmpty() ?
Prj().
GetProjectPath() : aProposedName;
319 if( aLibName.IsEmpty() )
327 return wxEmptyString;
336 if( !fn.IsAbsolute() )
338 fn.SetName( aLibName );
339 fn.MakeAbsolute( initialPath );
345 wxString libPath = fn.GetFullPath();
351 bool writable =
false;
368 wxString msg = wxString::Format(
_(
"Library %s is read only." ), libPath );
370 return wxEmptyString;
374 wxString msg = wxString::Format(
_(
"Library %s already exists." ), libPath );
375 KIDIALOG dlg(
this, msg,
_(
"Confirmation" ), wxOK | wxCANCEL | wxICON_WARNING );
376 dlg.SetOKLabel(
_(
"Overwrite" ) );
380 return wxEmptyString;
391 return wxEmptyString;
404 if(
Prj().IsNullProject() )
410 wxMessageDialog dlg(
this,
_(
"Add the library to the global library table?" ),
411 _(
"Add To Global Library Table" ), wxYES_NO );
413 if( dlg.ShowModal() != wxID_OK )
420 wxArrayString libTableNames;
421 libTableNames.Add(
_(
"Global" ) );
422 libTableNames.Add(
_(
"Project" ) );
424 wxSingleChoiceDialog dlg(
this,
_(
"Choose the Library Table to add the library to:" ),
425 _(
"Add To Library Table" ), libTableNames );
429 dlg.FindWindow( wxID_CANCEL )->SetLabel(
_(
"Skip" ) );
430 dlg.FindWindow( wxID_OK )->SetLabel(
_(
"Add" ) );
433 if( dlg.ShowModal() != wxID_OK )
436 switch( dlg.GetSelection() )
440 default:
return nullptr;
447 if( aTable ==
nullptr )
450 if( aTable ==
nullptr )
451 return wxEmptyString;
455 wxFileName fn( aFilename );
457 if( aFilename.IsEmpty() )
467 wxString libPath = fn.GetFullPath();
468 wxString libName = fn.GetName();
470 if( libName.IsEmpty() )
483 libName = fn.GetFullName();
508 LIB_ID libID( libName, wxEmptyString );
509 editor->SyncLibraryTree(
true );
510 editor->FocusOnLibID( libID );
516 viewer->ReCreateLibraryList();
542 wxString msg = wxString::Format(
_(
"Library '%s' is read only." ), nickname );
548 wxString msg = wxString::Format(
_(
"Delete footprint '%s' from library '%s'?" ),
550 nickname.GetData() );
552 if( aConfirm && !
IsOK(
this, msg ) )
565 msg.Printf(
_(
"Footprint '%s' deleted from library '%s'" ),
567 nickname.GetData() );
569 SetStatusText( msg );
578 if(
GetBoard()->GetFirstFootprint() ==
nullptr )
584 wxString footprintName;
586 auto resetReference =
589 aFootprint->SetReference(
"REF**" );
592 if( !aStoreInNewLib )
602 bool map =
IsOK(
this, wxString::Format(
_(
"Update footprints on board to refer to %s?" ),
613 if( !footprint->GetFPID().GetLibItemName().empty() )
617 resetReference( fpCopy );
630 LIB_ID id = footprint->GetFPID();
632 footprint->SetFPID(
id );
642 if( libPath.IsEmpty() )
648 wxString libNickname;
649 bool map =
IsOK(
this,
_(
"Update footprints on board to refer to new library?" ) );
666 if( !footprint->GetFPID().GetLibItemName().empty() )
670 resetReference( fpCopy );
675 parentGroup->RemoveItem( fpCopy );
687 LIB_ID id = footprint->GetFPID();
689 footprint->SetFPID(
id );
722 else if( libraryName.IsEmpty() || footprintName.IsEmpty() )
740 wxString libfullname;
795 wxString newName = footprintName;
799 newName.Printf(
"%s_%d", footprintName, i++ );
803 if( aFootprint->
GetValue() == footprintName )
811 const wxString& aLibraryName )
838 if( pcbframe ==
nullptr )
852 sourceFootprint =
nullptr;
856 if( editorFootprint->
GetLink() == candidate->m_Uuid )
858 sourceFootprint = candidate;
864 if( !aAddNew && sourceFootprint ==
nullptr )
866 DisplayError(
this,
_(
"Unable to find the footprint on the main board.\nCannot save." ) );
874 DisplayError(
this,
_(
"Previous footprint placement still in progress." ) );
896 fixUuid(
const_cast<KIID&
>( newFootprint->
m_Uuid ) );
901 fixUuid(
const_cast<KIID&
>( aChild->
m_Uuid ) );
909 if( sourceFootprint )
915 commit.
Push( wxT(
"Update footprint" ) );
922 commit.
Add( newFootprint );
928 commit.
Push( wxT(
"Insert footprint" ) );
947 const wxString& aLibraryPreselect,
948 std::function<
bool( wxString libName, wxString fpName )> aValidator ) :
956 wxArrayString headers;
957 std::vector<wxArrayString> itemsToDisplay;
959 headers.Add(
_(
"Nickname" ) );
960 headers.Add(
_(
"Description" ) );
962 for(
const wxString& nickname : nicknames )
971 itemsToDisplay.push_back( item );
975 for(
const wxString& nickname : nicknames )
982 item.Add( nickname );
984 itemsToDisplay.push_back( item );
987 initDialog( headers, itemsToDisplay, aLibraryPreselect );
992 wxBoxSizer* bNameSizer =
new wxBoxSizer( wxHORIZONTAL );
994 wxStaticText* label =
new wxStaticText(
this, wxID_ANY,
_(
"Name:" ) );
995 bNameSizer->Add( label, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 );
997 m_fpNameCtrl =
new wxTextCtrl(
this, wxID_ANY, aFootprintName );
998 bNameSizer->Add(
m_fpNameCtrl, 1, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
1000 wxTextValidator nameValidator( wxFILTER_EXCLUDE_CHAR_LIST );
1006 m_ButtonsSizer->Prepend( newLibraryButton, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 10 );
1008 GetSizer()->Prepend( bNameSizer, 0, wxEXPAND|wxTOP|wxLEFT|wxRIGHT, 5 );
1011 [
this]( wxCommandEvent& )
1025 GetSizer()->Fit(
this );
1033 footprintName.Trim(
true );
1034 footprintName.Trim(
false );
1035 return footprintName;
1052 if( aFootprint ==
nullptr )
1061 bool updateValue = aFootprint->
GetValue() == footprintName;
1063 bool footprintExists =
false;
1068 [&](
const wxString& newLib,
const wxString& newName )
1070 if( newLib.IsEmpty() )
1072 wxMessageBox( _(
"A library must be specified." ) );
1076 if( newName.IsEmpty() )
1078 wxMessageBox( _(
"Footprint must have a name." ) );
1096 if( footprintExists )
1098 wxString msg = wxString::Format(
_(
"Footprint %s already exists in %s." ),
1102 KIDIALOG errorDlg(
this, msg,
_(
"Confirmation" ),
1103 wxOK | wxCANCEL | wxICON_WARNING );
1104 errorDlg.SetOKLabel(
_(
"Overwrite" ) );
1112 int ret = dlg.ShowModal();
1114 if( ret == wxID_CANCEL )
1118 else if( ret == wxID_OK )
1121 libraryName = dlg.GetTextSelection();
1127 libraryName = newLibrary.GetName();
1131 aFootprint->
SetFPID(
LIB_ID( libraryName, footprintName ) );
1134 aFootprint->
SetValue( footprintName );
1142 wxString fmt = footprintExists ?
_(
"Footprint '%s' replaced in '%s'" )
1143 :
_(
"Footprint '%s' added to '%s'" );
1145 wxString msg = wxString::Format( fmt, footprintName.GetData(), libraryName.GetData() );
1146 SetStatusText( msg );
1158 wxString msg = wxString::Format(
_(
"Revert '%s' to last version saved?" ),
1188 std::function<
bool( wxString newName )> aValidator ) :
1190 aName,
_(
"Footprint type:" ),
1191 {
_(
"Through hole" ),
_(
"SMD" ),
_(
"Other" ) },
1199 name.Trim(
true ).Trim(
false );
1215 const wxString& aLibName,
bool aQuiet )
1218 wxString footprintName = aFootprintName;
1222 static int footprintType = 1;
1223 int footprintTranslated =
FP_SMD;
1226 if( footprintName.IsEmpty() && !aQuiet )
1229 [&]( wxString newName )
1231 if( newName.IsEmpty() )
1233 wxMessageBox( _(
"Footprint must have a name." ) );
1237 if( !aLibName.IsEmpty() && tbl->
FootprintExists( aLibName, newName ) )
1239 msg = wxString::Format( _(
"Footprint '%s' already exists in library '%s'." ),
1240 newName, aLibName );
1242 KIDIALOG errorDlg( this, msg, _(
"Confirmation" ),
1243 wxOK | wxCANCEL | wxICON_WARNING );
1244 errorDlg.SetOKLabel( _(
"Overwrite" ) );
1246 return errorDlg.ShowModal() == wxID_OK;
1254 if( dlg.ShowModal() != wxID_OK )
1257 footprintName = dlg.GetFPName();
1258 footprintType = dlg.GetChoice();
1260 switch( footprintType )
1263 case 1: footprintTranslated =
FP_SMD;
break;
1264 default: footprintTranslated = 0;
break;
1272 footprint->
SetFPID(
LIB_ID( wxEmptyString, footprintName ) );
1312 if( footprint->
GetValue().IsEmpty() )
1313 footprint->
SetValue( footprintName );
1337 wxArrayString headers;
1339 headers.Add(
_(
"Nickname" ) );
1340 headers.Add(
_(
"Description" ) );
1345 std::vector< wxArrayString > itemsToDisplay;
1348 for(
const wxString& nickname : nicknames )
1357 itemsToDisplay.push_back( item );
1361 for(
const wxString& nickname : nicknames )
1368 item.Add( nickname );
1370 itemsToDisplay.push_back( item );
1374 EDA_LIST_DIALOG dlg(
this,
_(
"Select Library" ), headers, itemsToDisplay, aNicknameExisting,
1377 if( dlg.ShowModal() != wxID_OK )
1378 return wxEmptyString;
void SetContentModified(bool aModified=true)
virtual void Push(const wxString &aMessage=wxEmptyString, int aCommitFlags=0) override
Revert the commit by restoring the modified items state.
Container for design settings for a BOARD object.
std::vector< TEXT_ITEM_INFO > m_DefaultFPTextItems
bool GetTextUpright(PCB_LAYER_ID aLayer) const
int GetTextThickness(PCB_LAYER_ID aLayer) const
Return the default text thickness from the layer class for the given layer.
bool GetTextItalic(PCB_LAYER_ID aLayer) const
VECTOR2I GetTextSize(PCB_LAYER_ID aLayer) const
Return the default text size from the layer class for the given layer.
Handle actions specific to the board editor in PcbNew.
bool PlacingFootprint() const
Re-entrancy checker for above.
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
virtual PCB_LAYER_ID GetLayer() const
Return the primary layer this item is on.
PCB_GROUP * GetParentGroup() const
virtual void SetLayer(PCB_LAYER_ID aLayer)
Set the layer this item is on.
Information pertinent to a Pcbnew printed circuit board.
FOOTPRINT * GetFirstFootprint() const
Get the first footprint on the board or nullptr.
FOOTPRINTS & Footprints()
BOARD_DESIGN_SETTINGS & GetDesignSettings() const
COMMIT & Add(EDA_ITEM *aItem, BASE_SCREEN *aScreen=nullptr)
Notify observers that aItem has been added.
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()
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 SetMsgPanel(const std::vector< MSG_PANEL_ITEM > &aList)
Clear the message panel and populates it with the contents of aList.
bool LibraryFileBrowser(bool doOpen, wxFileName &aFilename, const wxString &wildcard, const wxString &ext, bool isDirectory=false, bool aIsGlobal=false, const wxString &aGlobalPath=wxEmptyString)
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.
virtual void Refresh(bool aEraseBackground=true, const wxRect *aRect=nullptr) override
KICAD_T Type() const
Returns the type of object.
void ClearFlags(EDA_ITEM_FLAGS aMask=EDA_ITEM_ALL_FLAGS)
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)
void SetTextSize(VECTOR2I aNewSize)
virtual void SetVisible(bool aVisible)
void SetTextThickness(int aWidth)
The TextThickness is that set by the user.
void SetKeepUpright(bool aKeepUpright)
virtual void SetText(const wxString &aText)
void SetItalic(bool aItalic)
Hold a record identifying a library accessed by the appropriate footprint library PLUGIN object in th...
const FP_LIB_TABLE_ROW * FindRow(const wxString &aNickName, bool aCheckIfEnabled=false)
Return an FP_LIB_TABLE_ROW if aNickName is found in this table or in any chained fall back table frag...
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.
SAVE_T FootprintSave(const wxString &aNickname, const FOOTPRINT *aFootprint, bool aOverwrite=true)
Write aFootprint to an existing library given by aNickname.
static wxString GetGlobalTableFileName()
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()
static PLUGIN_REGISTRY * Instance()
static const wxString ShowType(PCB_FILE_T aFileType)
Return a brief name for a plugin given aFileType enum.
static PCB_FILE_T GuessPluginTypeFromLibPath(const wxString &aLibPath, int aCtl=0)
Return a plugin type given a footprint library's libPath.
PCB_FILE_T
The set of file types that the IO_MGR knows about, and for which there has been a plugin written,...
@ LEGACY
Legacy Pcbnew file formats prior to s-expression.
@ KICAD_SEXP
S-expression Pcbnew file format.
static PLUGIN * PluginFind(PCB_FILE_T aFileType)
Return a PLUGIN which the caller can use to import, export, save, or load design documents.
Helper class to create more flexible dialogs, including 'do not show again' checkbox handling.
void DoNotShowCheckbox(wxString file, int line)
Checks the 'do not show again' setting for the dialog.
An interface for classes handling user events controlling the view behavior such as zooming,...
virtual void SetCrossHairCursorPosition(const VECTOR2D &aPosition, bool aWarpView=true)=0
Move the graphic crosshair cursor to the requested position expressed in world coordinates.
VECTOR2D GetCursorPosition() const
Return the current cursor position in world coordinates.
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.
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.
bool IsValid() const
Check if this LID_ID is valid.
int SetLibNickname(const UTF8 &aNickname)
Override the logical library name portion of the LIB_ID to aNickname.
const UTF8 & GetLibItemName() const
const UTF8 & GetLibNickname() const
Return the logical library name portion of a LIB_ID.
Hold a record identifying a library accessed by the appropriate plug in object in the LIB_TABLE.
const wxString & GetNickName() const
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 InsertRow(LIB_TABLE_ROW *aRow, bool doReplace=false)
Adds aRow if it does not already exist or if doReplace is true.
wxString GetFullURI(const wxString &aLibNickname, bool aExpandEnvVars=true) const
Return the full URI of the library mapped to aLibNickname.
const LIB_TABLE_ROW * FindRowByURI(const wxString &aURI)
void Save(const wxString &aFileName) const
Write this library table to aFileName in s-expression form.
static const wxString GetPinningSymbol()
NEW_FP_DIALOG(PCB_BASE_FRAME *aParent, const wxString &aName, int aFootprintType, std::function< bool(wxString newName)> aValidator)
std::function< bool(wxString newName)> m_validator
bool TransferDataFromWindow() override
static wxString GetDefaultUserFootprintsPath()
Gets the default path we point users to create projects.
static TOOL_ACTION recombinePad
static TOOL_ACTION selectionClear
Clear the current selection.
static TOOL_ACTION placeFootprint
bool AddLibrary(const wxString &aLibName=wxEmptyString, FP_LIB_TABLE *aTable=nullptr)
Add an existing library to either the global or project library table.
wxString CreateNewLibrary(const wxString &aLibName=wxEmptyString, const wxString &aProposedName=wxEmptyString)
If a library name is given, creates a new footprint library in the project folder with the given name...
wxString createNewLibrary(const wxString &aLibName, const wxString &aProposedName, FP_LIB_TABLE *aTable)
Create a new library in the given table (presumed to be either the global or project library table).
wxString CreateNewProjectLibrary(const wxString &aLibName=wxEmptyString, const wxString &aProposedName=wxEmptyString)
FP_LIB_TABLE * selectLibTable(bool aOptional=false)
Prompts a user to select global or project library tables.
Base PCB main window class for Pcbnew, Gerbview, and CvPcb footprint viewer.
PCB_DRAW_PANEL_GAL * GetCanvas() const override
Return a pointer to GAL-based canvas of given EDA draw frame.
wxString SelectLibrary(const wxString &aNicknameExisting)
Put up a dialog and allows the user to pick a library, for unspecified use.
PCB_SCREEN * GetScreen() const override
Return a pointer to a BASE_SCREEN or one of its derivatives.
virtual BOARD_DESIGN_SETTINGS & GetDesignSettings() const
Returns the BOARD_DESIGN_SETTINGS for the open project.
void PlaceFootprint(FOOTPRINT *aFootprint, bool aRecreateRatsnest=true)
Places aFootprint at the current cursor position and updates footprint coordinates with the new posit...
FOOTPRINT * CreateNewFootprint(const wxString &aFootprintName, const wxString &aLibName, bool aQuiet)
Creates a new footprint, at position 0,0.
virtual void Update3DView(bool aMarkDirty, bool aRefresh, const wxString *aTitle=nullptr)
Update the 3D view, if the viewer is opened by this frame.
The main frame for Pcbnew.
void ExportFootprintsToLibrary(bool aStoreInNewLib, const wxString &aLibName=wxEmptyString, wxString *aLibPath=nullptr)
Save footprints in a library:
void ExchangeFootprint(FOOTPRINT *aExisting, FOOTPRINT *aNew, BOARD_COMMIT &aCommit, bool deleteExtraTexts=true, bool resetTextLayers=true, bool resetTextEffects=true, bool resetFabricationAttrs=true, bool reset3DModels=true, bool *aUpdated=nullptr)
Replace aExisting footprint by aNew footprint using the Existing footprint settings (position,...
A set of BOARD_ITEMs (i.e., without duplicates).
A PLUGIN derivation for saving and loading Pcbnew s-expression formatted files.
std::string GetStringOutput(bool doClear)
void Format(const BOARD_ITEM *aItem, int aNestLevel=0) const
Output aItem to aFormatter in s-expression format.
virtual void SetPosition(const VECTOR2I &aPos) override
Releases a PLUGIN in the context of a potential thrown exception through its destructor.
virtual void FootprintLibCreate(const wxString &aLibraryPath, const STRING_UTF8_MAP *aProperties=nullptr)
Create a new empty footprint library at aLibraryPath empty.
virtual bool FootprintLibDelete(const wxString &aLibraryPath, const STRING_UTF8_MAP *aProperties=nullptr)
Delete an existing footprint library and returns true, or if library does not exist returns false,...
virtual void FootprintSave(const wxString &aLibraryPath, const FOOTPRINT *aFootprint, const STRING_UTF8_MAP *aProperties=nullptr)
Write aFootprint to an existing library located at aLibraryPath.
virtual PLUGIN_FILE_DESC GetFootprintFileDesc() const
Returns footprint file description for the PLUGIN.
virtual bool IsFootprintLibWritable(const wxString &aLibraryPath)
Return true if the library at aLibraryPath is writable.
virtual bool CanReadFootprint(const wxString &aFileName) const
Checks if this PLUGIN can read a footprint from specified file or directory.
virtual FOOTPRINT * ImportFootprint(const wxString &aFootprintPath, wxString &aFootprintNameOut, const STRING_UTF8_MAP *aProperties=nullptr)
Load a single footprint from aFootprintPath and put its name in aFootprintNameOut.
The backing store for a PROJECT, in JSON format.
static FP_LIB_TABLE * PcbFootprintLibs(PROJECT *aProject)
Return the table of footprint libraries without Kiway.
Container for project specific data.
virtual const wxString GetProjectPath() const
Return the full path of the project.
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
SAVE_AS_DIALOG(FOOTPRINT_EDIT_FRAME *aParent, const wxString &aFootprintName, const wxString &aLibraryPreselect, std::function< bool(wxString libName, wxString fpName)> aValidator)
std::function< bool(wxString libName, wxString symbolName)> m_validator
wxTextCtrl * m_fpNameCtrl
std::function< bool(wxString libName, wxString fpName)> m_validator
A KICAD version of wxTextEntryDialog which supports the various improvements/work-arounds from DIALOG...
void SetTextValidator(wxTextValidatorStyle style)
wxString EnsureFileExtension(const wxString &aFilename, const wxString &aExtension)
It's annoying to throw up nag dialogs when the extension isn't right.
bool IsOK(wxWindow *aParent, const wxString &aMessage)
Display a yes/no dialog with aMessage and returns the user response.
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.
void DisplayErrorMessage(wxWindow *aParent, const wxString &aText, const wxString &aExtraInfo)
Display an error message with aMessage.
bool ConfirmRevertDialog(wxWindow *parent, const wxString &aMessage)
Display a confirmation dialog for a revert action.
This file is part of the common library.
FP_LIB_TABLE GFootprintTable
The global footprint library table.
wxString NormalizePath(const wxFileName &aFilePath, const ENV_VAR_MAP *aEnvVars, const wxString &aProjectPath)
Normalize a file path to an environmental variable, if possible.
const std::string KiCadFootprintLibPathExtension
wxString formatWildcardExt(const wxString &aWildcard)
Format wildcard extension to support case sensitive file dialogs.
const std::string KiCadFootprintFileExtension
wxString KiCadFootprintLibPathWildcard()
wxString KiCadFootprintLibFileWildcard()
PCB_LAYER_ID
A quick note on layer IDs:
This file contains miscellaneous commonly used macros and functions.
bool contains(const _Container &__container, _Value __value)
Returns true if the container contains the given value.
Class to handle a set of BOARD_ITEMs.
#define CTL_FOR_LIBRARY
Format output for a footprint library instead of clipboard or BOARD.
KIWAY Kiway & Pgm(), KFCTL_STANDALONE
The global Program "get" accessor.
MODEL3D_FORMAT_TYPE fileType(const char *aFileName)
std::vector< wxString > pinned_fp_libs
Container that describes file type info.
wxString FileFilter() const
std::vector< std::string > m_FileExtensions
Filter used for file pickers if m_IsFile is true.
static int ID_MAKE_NEW_LIBRARY
@ PCB_TEXT_T
class PCB_TEXT, text on a layer
@ PCB_FIELD_T
class PCB_FIELD, text associated with a footprint property
Custom text control validator definitions.
VECTOR2< double > VECTOR2D
Definition of file extensions used in Kicad.