55#include <wx/choicdlg.h>
56#include <wx/filedlg.h>
57#include <wx/fswatcher.h>
64 _(
"Writing/modifying legacy libraries (.mod files) is not allowed\n"\
65 "Please save the current library to the new .pretty format\n"\
66 "and update your footprint lib table\n"\
67 "to save your footprint (a .kicad_mod file) in the .pretty library folder" ) );
70 _(
"Modifying legacy libraries (.mod files) is not allowed\n"\
71 "Please save the current library under the new .pretty format\n"\
72 "and update your footprint lib table\n"\
73 "before deleting a footprint" ) );
87 static int lastFilterIndex = 0;
88 wxString fileFiltersStr;
89 std::vector<std::string> allExtensions;
90 std::set<wxString> allWildcardsSet;
104 if( !fileFiltersStr.IsEmpty() )
105 fileFiltersStr += wxChar(
'|' );
111 allExtensions.emplace_back( ext );
116 wxString allWildcardsStr;
118 for(
const wxString& wildcard : allWildcardsSet )
119 allWildcardsStr << wildcard;
121 fileFiltersStr =
_(
"All supported formats" ) + wxT(
"|" ) + allWildcardsStr + wxT(
"|" )
124 wxFileDialog dlg(
this,
_(
"Import Footprint" ),
m_mruPath, wxEmptyString, fileFiltersStr,
125 wxFD_OPEN | wxFD_FILE_MUST_EXIST );
127 wxArrayString dummy1, dummy2;
128 const int nWildcards = wxParseCommonDialogsFilter( fileFiltersStr, dummy1, dummy2 );
130 if( lastFilterIndex >= 0 && lastFilterIndex < nWildcards )
131 dlg.SetFilterIndex( lastFilterIndex );
133 if( dlg.ShowModal() == wxID_CANCEL )
136 lastFilterIndex = dlg.GetFilterIndex();
144 if( !wxFileExists( fn.GetFullPath() ) )
146 wxString msg = wxString::Format(
_(
"File '%s' not found." ), fn.GetFullPath() );
162 if( pi->GetLibraryFileDesc().m_FileExtensions.empty() )
165 if( pi->CanReadFootprint( fn.GetFullPath() ) )
179 wxString footprintName;
185 footprint = pi->ImportFootprint( fn.GetFullPath(), footprintName);
189 wxString msg = wxString::Format(
_(
"Unable to load footprint '%s' from '%s'" ),
190 footprintName, fn.GetFullPath() );
208 footprint->
SetFPID(
LIB_ID( wxEmptyString, footprintName ) );
245 wxFileDialog dlg(
this,
_(
"Export Footprint" ), fn.GetPath(), fn.GetFullName(),
246 wildcard, wxFD_SAVE | wxFD_OVERWRITE_PROMPT );
248 if( dlg.ShowModal() == wxID_CANCEL )
268 pcb_io.
Format( aFootprint );
270 FILE* fp = wxFopen( dlg.GetPath(), wxT(
"wt" ) );
274 DisplayErrorMessage(
this, wxString::Format(
_(
"Insufficient permissions to write file '%s'." ),
282 fprintf( fp,
"%s", prettyData.c_str() );
291 wxString msg = wxString::Format(
_(
"Footprint exported to file '%s'." ), dlg.GetPath() );
297 const wxString& aProposedName )
304 const wxString& aProposedName )
313 const wxString& aProposedName,
320 if( aTable ==
nullptr )
321 return wxEmptyString;
323 wxString initialPath = aProposedName.IsEmpty() ?
Prj().
GetProjectPath() : aProposedName;
328 if( aLibName.IsEmpty() )
336 return wxEmptyString;
345 if( !fn.IsAbsolute() )
347 fn.SetName( aLibName );
348 fn.MakeAbsolute( initialPath );
354 wxString libPath = fn.GetFullPath();
360 bool writable =
false;
365 writable = pi->IsLibraryWritable( libPath );
377 wxString msg = wxString::Format(
_(
"Library %s is read only." ), libPath );
379 return wxEmptyString;
383 wxString msg = wxString::Format(
_(
"Library %s already exists." ), libPath );
384 KIDIALOG dlg(
this, msg,
_(
"Confirmation" ), wxOK | wxCANCEL | wxICON_WARNING );
385 dlg.SetOKLabel(
_(
"Overwrite" ) );
389 return wxEmptyString;
391 pi->DeleteLibrary( libPath );
395 pi->CreateLibrary( libPath );
400 return wxEmptyString;
413 if(
Prj().IsNullProject() )
419 wxMessageDialog dlg(
this,
_(
"Add the library to the global library table?" ),
420 _(
"Add To Global Library Table" ), wxYES_NO );
422 if( dlg.ShowModal() != wxID_OK )
429 wxArrayString libTableNames;
430 libTableNames.Add(
_(
"Global" ) );
431 libTableNames.Add(
_(
"Project" ) );
433 wxSingleChoiceDialog dlg(
this,
_(
"Choose the Library Table to add the library to:" ),
434 _(
"Add To Library Table" ), libTableNames );
438 dlg.FindWindow( wxID_CANCEL )->SetLabel(
_(
"Skip" ) );
439 dlg.FindWindow( wxID_OK )->SetLabel(
_(
"Add" ) );
442 if( dlg.ShowModal() != wxID_OK )
445 switch( dlg.GetSelection() )
449 default:
return nullptr;
456 if( aTable ==
nullptr )
459 if( aTable ==
nullptr )
460 return wxEmptyString;
464 wxFileName fn( aFilename );
466 if( aFilename.IsEmpty() )
476 wxString libPath = fn.GetFullPath();
477 wxString libName = fn.GetName();
479 if( libName.IsEmpty() )
493 libName = fn.GetFullName();
518 LIB_ID libID( libName, wxEmptyString );
519 editor->SyncLibraryTree(
true );
520 editor->FocusOnLibID( libID );
526 viewer->ReCreateLibraryList();
539 wxString libfullname;
561 wxString msg = wxString::Format(
_(
"Library '%s' is read only." ), nickname );
567 wxString msg = wxString::Format(
_(
"Delete footprint '%s' from library '%s'?" ),
569 nickname.GetData() );
571 if( aConfirm && !
IsOK(
this, msg ) )
584 msg.Printf(
_(
"Footprint '%s' deleted from library '%s'" ),
586 nickname.GetData() );
588 SetStatusText( msg );
597 if(
GetBoard()->GetFirstFootprint() ==
nullptr )
603 auto resetReference =
606 aFootprint->SetReference(
"REF**" );
612 if(
EDA_GROUP* parentGroup = aFootprint->GetParentGroup() )
613 parentGroup->RemoveItem( aFootprint );
619 for(
ZONE* zone : aFootprint->Zones() )
620 zone->Move( -aFootprint->GetPosition() );
623 if( !aStoreInNewLib )
633 bool map =
IsOK(
this, wxString::Format(
_(
"Update footprints on board to refer to %s?" ),
644 if( !footprint->GetFPID().GetLibItemName().empty() )
649 resetReference( fpCopy );
650 resetGroup( fpCopy );
651 resetZones( fpCopy );
665 LIB_ID id = footprint->GetFPID();
667 footprint->SetFPID(
id );
677 if( libPath.IsEmpty() )
683 wxString libNickname;
684 bool map =
IsOK(
this,
_(
"Update footprints on board to refer to new library?" ) );
696 std::map<std::string, UTF8> options { {
"skip_cache_validation",
"1" } };
702 if( !footprint->GetFPID().GetLibItemName().empty() )
707 resetReference( fpCopy );
708 resetGroup( fpCopy );
709 resetZones( fpCopy );
711 pi->FootprintSave( libPath, fpCopy, &options );
723 LIB_ID id = footprint->GetFPID();
725 footprint->SetFPID(
id );
756 else if( libraryName.IsEmpty() || footprintName.IsEmpty() )
772 wxString libfullname;
827 wxString newName = footprintName;
831 newName.Printf(
"%s_%d", footprintName, i++ );
835 if( aFootprint->
GetValue() == footprintName )
843 const wxString& aLibraryName )
853 if( aFootprint ==
GetBoard()->GetFirstFootprint() )
874 if( pcbframe ==
nullptr )
884 if( !editorFootprint )
891 sourceFootprint =
nullptr;
895 if( editorFootprint->
GetLink() == candidate->m_Uuid )
897 sourceFootprint = candidate;
903 if( !aAddNew && sourceFootprint ==
nullptr )
905 DisplayError(
this,
_(
"Unable to find the footprint on the main board.\nCannot save." ) );
913 DisplayError(
this,
_(
"Previous footprint placement still in progress." ) );
935 fixUuid(
const_cast<KIID&
>( newFootprint->
m_Uuid ) );
940 fixUuid(
const_cast<KIID&
>( aChild->
m_Uuid ) );
942 RECURSE_MODE::RECURSE );
959 if( it != netmap.end() )
960 conn->SetNet( it->second );
965 RECURSE_MODE::RECURSE );
972 if( sourceFootprint )
978 commit.
Push(
_(
"Update Footprint" ) );
985 commit.
Add( newFootprint );
991 commit.
Push(
_(
"Insert Footprint" ) );
1010 const wxString& aLibraryPreselect,
1011 std::function<
bool( wxString libName, wxString fpName )> aValidator ) :
1019 wxArrayString headers;
1020 std::vector<wxArrayString> itemsToDisplay;
1022 headers.Add(
_(
"Nickname" ) );
1023 headers.Add(
_(
"Description" ) );
1025 for(
const wxString& nickname : nicknames )
1034 itemsToDisplay.push_back( item );
1038 for(
const wxString& nickname : nicknames )
1045 item.Add( nickname );
1047 itemsToDisplay.push_back( item );
1050 initDialog( headers, itemsToDisplay, aLibraryPreselect );
1055 wxBoxSizer* bNameSizer =
new wxBoxSizer( wxHORIZONTAL );
1057 wxStaticText* label =
new wxStaticText(
this, wxID_ANY,
_(
"Name:" ) );
1058 bNameSizer->Add( label, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 );
1060 m_fpNameCtrl =
new wxTextCtrl(
this, wxID_ANY, aFootprintName );
1061 bNameSizer->Add(
m_fpNameCtrl, 1, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
1063 wxTextValidator nameValidator( wxFILTER_EXCLUDE_CHAR_LIST );
1069 m_ButtonsSizer->Prepend( newLibraryButton, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 10 );
1071 GetSizer()->Prepend( bNameSizer, 0, wxEXPAND|wxTOP|wxLEFT|wxRIGHT, 5 );
1074 [
this]( wxCommandEvent& )
1088 GetSizer()->Fit(
this );
1096 footprintName.Trim(
true );
1097 footprintName.Trim(
false );
1098 return footprintName;
1115 if( aFootprint ==
nullptr )
1124 bool updateValue = aFootprint->
GetValue() == footprintName;
1126 bool footprintExists =
false;
1131 [&](
const wxString& newLib,
const wxString& newName )
1133 if( newLib.IsEmpty() )
1135 wxMessageBox( _(
"A library must be specified." ) );
1139 if( newName.IsEmpty() )
1141 wxMessageBox( _(
"Footprint must have a name." ) );
1159 if( footprintExists )
1161 wxString msg = wxString::Format(
_(
"Footprint %s already exists in %s." ),
1165 KIDIALOG errorDlg(
this, msg,
_(
"Confirmation" ),
1166 wxOK | wxCANCEL | wxICON_WARNING );
1167 errorDlg.SetOKLabel(
_(
"Overwrite" ) );
1177 if( ret == wxID_CANCEL )
1181 else if( ret == wxID_OK )
1183 footprintName = dlg.GetFPName();
1184 libraryName = dlg.GetTextSelection();
1190 libraryName = newLibrary.GetName();
1194 aFootprint->
SetFPID(
LIB_ID( libraryName, footprintName ) );
1197 aFootprint->
SetValue( footprintName );
1205 wxString fmt = footprintExists ?
_(
"Footprint '%s' replaced in '%s'" )
1206 :
_(
"Footprint '%s' added to '%s'" );
1208 wxString msg = wxString::Format( fmt, footprintName.GetData(), libraryName.GetData() );
1209 SetStatusText( msg );
1221 wxString msg = wxString::Format(
_(
"Revert '%s' to last version saved?" ),
1249 if( aFootprintName.IsEmpty() )
1250 aFootprintName =
_(
"Untitled" );
1252 int footprintAttrs =
FP_SMD;
1254 if( !aLibName.IsEmpty() )
1257 wxArrayString fpnames;
1258 wxString baseName = aFootprintName;
1263 aFootprintName = baseName + wxString::Format( wxS(
"_%d" ), idx++ );
1270 if( !fpnames.empty() )
1283 footprint->
SetFPID(
LIB_ID( wxEmptyString, aFootprintName ) );
1330 if( footprint->
GetValue().IsEmpty() )
1331 footprint->
SetValue( aFootprintName );
1347 RECURSE_MODE::RECURSE );
1356 wxArrayString headers;
1358 headers.Add(
_(
"Nickname" ) );
1359 headers.Add(
_(
"Description" ) );
1364 std::vector< wxArrayString > itemsToDisplay;
1367 for(
const wxString& nickname : nicknames )
1376 itemsToDisplay.push_back( item );
1380 for(
const wxString& nickname : nicknames )
1387 item.Add( nickname );
1389 itemsToDisplay.push_back( item );
1393 EDA_LIST_DIALOG dlg(
this,
_(
"Select Library" ), headers, itemsToDisplay, aNicknameExisting,
1397 return wxEmptyString;
static TOOL_ACTION selectionClear
Clear the current selection.
void SetContentModified(bool aModified=true)
virtual void Push(const wxString &aMessage=wxEmptyString, int aCommitFlags=0) override
Execute the changes.
A base class derived from BOARD_ITEM for items that can be connected and have a net,...
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.
virtual void SetLayer(PCB_LAYER_ID aLayer)
Set the layer this item is on.
Information pertinent to a Pcbnew printed circuit board.
const NETINFO_LIST & GetNetInfo() const
FOOTPRINT * GetFirstFootprint() const
Get the first footprint on the board or nullptr.
const FOOTPRINTS & Footprints() const
BOARD_DESIGN_SETTINGS & GetDesignSettings() const
COMMIT & Add(EDA_ITEM *aItem, BASE_SCREEN *aScreen=nullptr)
Add a new item to the model.
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 ReCreateHToolbar()
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
A set of EDA_ITEMs (i.e., without duplicates).
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, bool aEnforceMinTextSize=true)
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)
Set the text to be italic - this will also update the font if needed.
Hold a record identifying a library accessed by the appropriate footprint library #PLUGIN object in t...
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.
void FootprintEnumerate(wxArrayString &aFootprintNames, const wxString &aNickname, bool aBestEfforts)
Return a list of footprint names contained within 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.
FOOTPRINT * FootprintLoad(const wxString &aNickname, const wxString &aFootprintName, bool aKeepUUID=false)
Load a footprint having aFootprintName from the library given by aNickname.
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()
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.
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 &aLibNickname)
Override the logical library name portion of the LIB_ID to aLibNickname.
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()
Handle the data for a net.
const wxString & GetNetname() const
const NETNAMES_MAP & NetsByName() const
Return the name map, at least for python.
static wxString GetDefaultUserFootprintsPath()
Gets the default path we point users to create projects.
static TOOL_ACTION recombinePad
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.
void setFPWatcher(FOOTPRINT *aFootprint)
Create or removes a watcher on the specified footprint.
FOOTPRINT * CreateNewFootprint(wxString aFootprintName, const wxString &aLibName)
Create a new footprint at position 0,0.
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
Return the BOARD_DESIGN_SETTINGS for the open project.
void PlaceFootprint(FOOTPRINT *aFootprint, bool aRecreateRatsnest=true)
Place aFootprint at the current cursor position and updates footprint coordinates with the new positi...
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 ExchangeFootprint(FOOTPRINT *aExisting, FOOTPRINT *aNew, BOARD_COMMIT &aCommit, bool deleteExtraTexts=true, bool resetTextLayers=true, bool resetTextEffects=true, bool resetFabricationAttrs=true, bool resetTextContent=true, bool resetClearanceOverrides=true, bool reset3DModels=true, bool *aUpdated=nullptr)
Replace aExisting footprint by aNew footprint using the Existing footprint settings (position,...
void ExportFootprintsToLibrary(bool aStoreInNewLib, const wxString &aLibName=wxEmptyString, wxString *aLibPath=nullptr)
Save footprints in a library:
A #PLUGIN derivation for saving and loading Pcbnew s-expression formatted files.
void Format(const BOARD_ITEM *aItem) const
Output aItem to aFormatter in s-expression format.
std::string GetStringOutput(bool doClear)
static PLUGIN_REGISTRY * Instance()
static PCB_IO * PluginFind(PCB_FILE_T aFileType)
Return a #PLUGIN which the caller can use to import, export, save, or load design documents.
PCB_FILE_T
The set of file types that the PCB_IO_MGR knows about, and for which there has been a plugin written,...
@ KICAD_SEXP
S-expression Pcbnew file format.
@ LEGACY
Legacy Pcbnew file formats prior to s-expression.
static PCB_FILE_T GuessPluginTypeFromLibPath(const wxString &aLibPath, int aCtl=0)
Return a plugin type given a footprint library's libPath.
static const wxString ShowType(PCB_FILE_T aFileType)
Return a brief name for a plugin given aFileType enum.
virtual void SetPosition(const VECTOR2I &aPos) override
virtual COMMON_SETTINGS * GetCommonSettings() const
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)
SymLibNameValidator m_validator
wxTextCtrl * m_fpNameCtrl
std::function< bool(wxString libName, wxString fpName)> m_validator
Handle a list of polygons defining a copper zone.
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 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.
void DisplayError(wxWindow *aParent, const wxString &aText)
Display an error or warning message box with aMessage.
This file is part of the common library.
FP_LIB_TABLE GFootprintTable
The global footprint library table.
#define IGNORE_PARENT_GROUP
wxString NormalizePath(const wxFileName &aFilePath, const ENV_VAR_MAP *aEnvVars, const wxString &aProjectPath)
Normalize a file path to an environmental variable, if possible.
Helper functions to substitute paths with environmental variables.
static const std::string KiCadFootprintLibPathExtension
static const std::string KiCadFootprintFileExtension
static wxString KiCadFootprintLibFileWildcard()
static wxString KiCadFootprintLibPathWildcard()
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.
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.
PGM_BASE & Pgm()
The global program "get" accessor.
KIWAY Kiway(KFCTL_STANDALONE)
MODEL3D_FORMAT_TYPE fileType(const char *aFileName)
std::vector< wxString > pinned_fp_libs
Container that describes file type info.
std::vector< std::string > m_FileExtensions
Filter used for file pickers if m_IsFile is true.
wxString FileFilter() const
@ 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< int32_t > VECTOR2I
VECTOR2< double > VECTOR2D
wxString formatWildcardExt(const wxString &aWildcard)
Format wildcard extension to support case sensitive file dialogs.
Definition of file extensions used in Kicad.