59#include <wx/filedlg.h>
60#include <wx/fswatcher.h>
70 _(
"Writing/modifying legacy libraries (.mod files) is not allowed\n"\
71 "Please save the current library to the new .pretty format\n"\
72 "and update your footprint lib table\n"\
73 "to save your footprint (a .kicad_mod file) in the .pretty library folder" ) );
76 _(
"Modifying legacy libraries (.mod files) is not allowed\n"\
77 "Please save the current library under the new .pretty format\n"\
78 "and update your footprint lib table\n"\
79 "before deleting a footprint" ) );
93 static int lastFilterIndex = 0;
94 wxString fileFiltersStr;
95 std::vector<std::string> allExtensions;
96 std::set<wxString> allWildcardsSet;
110 if( !fileFiltersStr.IsEmpty() )
111 fileFiltersStr += wxChar(
'|' );
117 allExtensions.emplace_back( ext );
122 wxString allWildcardsStr;
124 for(
const wxString& wildcard : allWildcardsSet )
125 allWildcardsStr << wildcard;
127 fileFiltersStr =
_(
"All supported formats" ) + wxT(
"|" ) + allWildcardsStr + wxT(
"|" )
130 wxFileDialog dlg(
this,
_(
"Import Footprint" ),
m_mruPath, wxEmptyString, fileFiltersStr,
131 wxFD_OPEN | wxFD_FILE_MUST_EXIST );
133 wxArrayString dummy1, dummy2;
134 const int nWildcards = wxParseCommonDialogsFilter( fileFiltersStr, dummy1, dummy2 );
136 if( lastFilterIndex >= 0 && lastFilterIndex < nWildcards )
137 dlg.SetFilterIndex( lastFilterIndex );
141 if( dlg.ShowModal() == wxID_CANCEL )
144 lastFilterIndex = dlg.GetFilterIndex();
152 if( !wxFileExists( fn.GetFullPath() ) )
154 wxString msg = wxString::Format(
_(
"File '%s' not found." ), fn.GetFullPath() );
170 if( pi->GetLibraryFileDesc().m_FileExtensions.empty() )
173 if( pi->CanReadFootprint( fn.GetFullPath() ) )
186 std::unique_ptr<FOOTPRINT> footprint;
187 wxString footprintName;
197 footprint = pi->ImportFootprint( fn.GetFullPath(), footprintName );
201 wxString msg = wxString::Format(
_(
"Unable to load footprint '%s' from '%s'" ),
202 footprintName, fn.GetFullPath() );
220 footprint->SetFPID(
LIB_ID( wxEmptyString, footprintName ) );
226 footprint->SetParent(
nullptr );
271 wxFileDialog dlg(
this,
_(
"Export Footprint" ), fn.GetPath(), fn.GetFullName(),
272 wildcard, wxFD_SAVE | wxFD_OVERWRITE_PROMPT );
276 if( dlg.ShowModal() == wxID_CANCEL )
296 pcb_io.
Format( aFootprint );
298 FILE* fp = wxFopen( fn.GetFullPath(), wxT(
"wt" ) );
302 DisplayErrorMessage(
this, wxString::Format(
_(
"Insufficient permissions to write file '%s'." ),
303 fn.GetFullPath() ) );
310 if( fprintf( fp,
"%s", prettyData.c_str() ) < 0 || fclose( fp ) != 0 )
312 DisplayErrorMessage(
this, wxString::Format(
_(
"Error writing file '%s'." ), fn.GetFullPath() ) );
322 wxString msg = wxString::Format(
_(
"Footprint exported to file '%s'." ), fn.GetFullPath() );
340 const wxString& aInitialPath, std::optional<LIBRARY_TABLE_SCOPE> aScope )
348 bool isGlobal =
false;
353 fileDlgHook =
nullptr;
355 if( aLibName.IsEmpty() )
362 return wxEmptyString;
377 if( !fn.IsAbsolute() )
379 fn.SetName( aLibName );
380 fn.MakeAbsolute(
Prj().GetProjectPath() );
386 wxString libPath = fn.GetFullPath();
392 bool writable =
false;
397 writable = pi->IsLibraryWritable( libPath );
409 wxString msg = wxString::Format(
_(
"Library %s is read only." ), libPath );
411 return wxEmptyString;
415 wxString msg = wxString::Format(
_(
"Library %s already exists." ), libPath );
416 KIDIALOG dlg(
this, msg,
_(
"Confirmation" ), wxOK | wxCANCEL | wxICON_WARNING );
417 dlg.SetOKLabel(
_(
"Overwrite" ) );
421 return wxEmptyString;
423 pi->DeleteLibrary( libPath );
427 pi->CreateLibrary( libPath );
432 return wxEmptyString;
435 if( doAdd && !
AddLibrary( aDialogTitle, libPath, aScope ) )
436 return wxEmptyString;
443 const std::vector<std::pair<wxString, bool*>>& aExtraCheckboxes )
448 wxArrayString headers;
449 std::vector<wxArrayString> itemsToDisplay;
455 EDA_LIST_DIALOG dlg(
this, aDialogTitle, headers, itemsToDisplay, libraryName,
false );
458 for(
const auto& [label, val] : aExtraCheckboxes )
463 dlg.
m_ButtonsSizer->Prepend( newLibraryButton, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 10 );
465 newLibraryButton->Bind( wxEVT_BUTTON,
466 [&dlg]( wxCommandEvent& )
472 dlg.GetSizer()->Fit( &dlg );
479 return wxEmptyString;
492 if( !fn.GetFullPath().IsEmpty() )
508 std::optional<LIBRARY_TABLE_SCOPE> aScope )
512 bool isGlobal =
false;
519 fileDlgHook =
nullptr;
522 wxFileName fn( aFilename );
524 if( aFilename.IsEmpty() )
538 wxString libPath = fn.GetFullPath();
539 wxString libName = fn.GetName();
541 if( libName.IsEmpty() )
554 libName = fn.GetFullName();
575 table->Save().map_error(
578 wxMessageBox(
_(
"Error saving library table:\n\n" ) + aError.
message,
579 _(
"File Save Error" ), wxOK | wxICON_ERROR );
591 manager.
ReloadTables( aScope.value(), { LIBRARY_TABLE_TYPE::FOOTPRINT } );
597 LIB_ID libID( libName, wxEmptyString );
598 editor->SyncLibraryTree(
true );
599 editor->FocusOnLibID( libID );
605 viewer->ReCreateLibraryList();
622 wxString libfullname;
627 libfullname = *optUri;
639 wxString msg = wxString::Format(
_(
"Library '%s' is read only." ), nickname );
645 wxString msg = wxString::Format(
_(
"Delete footprint '%s' from library '%s'?" ),
647 nickname.GetData() );
649 if( aConfirm && !
IsOK(
this, msg ) )
662 msg.Printf(
_(
"Footprint '%s' deleted from library '%s'" ),
664 nickname.GetData() );
666 SetStatusText( msg );
675 if(
GetBoard()->GetFirstFootprint() ==
nullptr )
689 if( fn.GetFullPath().IsEmpty() )
693 nickname = fn.GetName();
694 map =
IsOK(
this,
_(
"Update footprints on board to refer to new library?" ) );
698 nickname =
SelectLibrary(
_(
"Export Footprints" ),
_(
"Export footprints to library:" ),
699 { {
_(
"Update board footprints to link to exported footprints" ), &map } } );
705 if( !aLibName.IsEmpty() )
712 if( std::optional<wxString> optUri =
719 *aLibPath = nickname;
731 if( !footprint->GetFPID().GetLibItemName().empty() )
733 std::unique_ptr<FOOTPRINT> fpCopy(
738 fpCopy->SetReference(
"REF**" );
739 fpCopy->SetParentGroup(
nullptr );
741 for(
ZONE* zone : fpCopy->Zones() )
742 zone->Move( -fpCopy->GetPosition() );
756 LIB_ID id = footprint->GetFPID();
758 footprint->SetFPID(
id );
788 else if( libraryName.IsEmpty() || footprintName.IsEmpty() )
806 wxString libfullname;
809 libfullname = *optUri;
862 wxString newName = footprintName;
866 newName.Printf(
"%s_%d", footprintName, i++ );
870 if( aFootprint->
GetValue() == footprintName )
878 const wxString& aLibraryName )
898 DisplayError(
this, wxString::Format(
_(
"Footprint '%s' could not be saved to library '%s'." ),
906 if( aFootprint ==
GetBoard()->GetFirstFootprint() )
927 if( pcbframe ==
nullptr )
937 if( !editorFootprint )
944 sourceFootprint =
nullptr;
948 if( editorFootprint->
GetLink() == candidate->m_Uuid )
950 sourceFootprint = candidate;
956 if( !aAddNew && sourceFootprint ==
nullptr )
958 DisplayError(
this,
_(
"Unable to find the footprint on the main board.\nCannot save." ) );
966 DisplayError(
this,
_(
"Previous footprint placement still in progress." ) );
1018 if( it != netmap.end() )
1019 conn->SetNet( it->second );
1031 if( sourceFootprint )
1037 commit.
Push(
_(
"Update Footprint" ) );
1044 commit.
Add( newFootprint );
1050 commit.
Push(
_(
"Insert Footprint" ) );
1066 const wxString& aLibraryPreselect,
1067 std::function<
bool( wxString libName, wxString fpName )> aValidator ) :
1073 wxArrayString headers;
1074 std::vector<wxArrayString> itemsToDisplay;
1077 initDialog( headers, itemsToDisplay, aLibraryPreselect );
1082 wxBoxSizer* bNameSizer =
new wxBoxSizer( wxHORIZONTAL );
1084 wxStaticText* label =
new wxStaticText(
this, wxID_ANY,
_(
"Name:" ) );
1085 bNameSizer->Add( label, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 );
1087 m_fpNameCtrl =
new wxTextCtrl(
this, wxID_ANY, aFootprintName );
1088 bNameSizer->Add(
m_fpNameCtrl, 1, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
1090 wxTextValidator nameValidator( wxFILTER_EXCLUDE_CHAR_LIST );
1096 m_ButtonsSizer->Prepend( newLibraryButton, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 10 );
1098 GetSizer()->Prepend( bNameSizer, 0, wxEXPAND|wxTOP|wxLEFT|wxRIGHT, 5 );
1101 if( !aFootprintName.IsEmpty() )
1105 [
this]( wxCommandEvent& )
1119 GetSizer()->Fit(
this );
1127 footprintName.Trim(
true );
1128 footprintName.Trim(
false );
1129 return footprintName;
1135 wxCommandEvent
dummy;
1154 if( aFootprint ==
nullptr )
1165 bool updateValue = aFootprint->
GetValue() == footprintName;
1167 bool footprintExists =
false;
1172 [&](
const wxString& newLib,
const wxString& newName )
1174 if( newLib.IsEmpty() )
1176 wxMessageBox(
_(
"A library must be specified." ) );
1180 if( newName.IsEmpty() )
1182 wxMessageBox(
_(
"Footprint must have a name." ) );
1203 if( footprintExists )
1205 wxString msg = wxString::Format(
_(
"Footprint %s already exists in %s." ),
1209 KIDIALOG errorDlg(
this, msg,
_(
"Confirmation" ), wxOK | wxCANCEL | wxICON_WARNING );
1210 errorDlg.SetOKLabel(
_(
"Overwrite" ) );
1220 if( ret == wxID_CANCEL )
1224 else if( ret == wxID_OK )
1226 footprintName = dlg.GetFPName();
1227 libraryName = dlg.GetTextSelection();
1235 if( fn.GetFullPath().IsEmpty() )
1240 libraryName = fn.GetName();
1244 aFootprint->
SetFPID(
LIB_ID( libraryName, footprintName ) );
1247 aFootprint->
SetValue( footprintName );
1257 wxString fmt = footprintExists ?
_(
"Footprint '%s' replaced in '%s'" )
1258 :
_(
"Footprint '%s' added to '%s'" );
1260 wxString msg = wxString::Format( fmt, footprintName.GetData(), libraryName.GetData() );
1261 SetStatusText( msg );
1273 wxString msg = wxString::Format(
_(
"Revert '%s' to last version saved?" ),
1312 if( aFootprintName.IsEmpty() )
1313 aFootprintName =
_(
"Untitled" );
1315 int footprintAttrs =
FP_SMD;
1317 if( !aLibName.IsEmpty() )
1320 std::vector<wxString> fpnames;
1321 wxString baseName = aFootprintName;
1326 aFootprintName = baseName + wxString::Format( wxS(
"_%d" ), idx++ );
1333 if( !fpnames.empty() )
1335 std::unique_ptr<FOOTPRINT> fp( adapter->
LoadFootprint( aLibName, fpnames.back(),
false ) );
1338 footprintAttrs = fp->GetAttributes();
1351 footprint->
SetFPID(
LIB_ID( wxEmptyString, aFootprintName ) );
1398 if( footprint->
GetValue().IsEmpty() )
1399 footprint->
SetValue( aFootprintName );
1423 std::vector<wxArrayString>& aItemsToDisplay )
1425 aHeaders.
Add(
_(
"Library" ) );
1426 aHeaders.Add(
_(
"Description" ) );
1432 std::vector<wxArrayString> unpinned;
1434 for(
const wxString& nickname : nicknames )
1443 item.Add( description );
1444 aItemsToDisplay.push_back( item );
1448 item.Add( nickname );
1449 item.Add( description );
1450 unpinned.push_back( item );
1454 std::sort( aItemsToDisplay.begin(), aItemsToDisplay.end(),
1455 [](
const wxArrayString& a,
const wxArrayString& b )
1457 return StrNumCmp( a[0], b[0], true ) < 0;
1460 std::sort( unpinned.begin(), unpinned.end(),
1461 [](
const wxArrayString& a,
const wxArrayString& b )
1463 return StrNumCmp( a[0], b[0], true ) < 0;
1466 std::ranges::copy( unpinned, std::back_inserter( aItemsToDisplay ) );
static TOOL_ACTION selectionClear
Clear the current selection.
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...
void SetUuid(const KIID &aUuid)
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
void ExchangeFootprint(FOOTPRINT *aExisting, FOOTPRINT *aNew, BOARD_COMMIT &aCommit, bool aMatchPadPositions, bool aDeleteExtraTexts=true, bool aResetTextLayers=true, bool aResetTextEffects=true, bool aResetTextPositions=true, bool aResetTextContent=true, bool aResetFabricationAttrs=true, bool aResetClearanceOverrides=true, bool aReset3DModels=true, bool aResetTransform=false, bool *aUpdated=nullptr, bool *aShifted=nullptr)
Replace aExisting with aNew, preserving connectivity and metadata.
FOOTPRINT * GetFirstFootprint() const
Get the first footprint on the board or nullptr.
const FOOTPRINTS & Footprints() const
COMMIT & Add(EDA_ITEM *aItem, BASE_SCREEN *aScreen=nullptr)
Add a new item to the model.
void OptOut(wxWindow *aWindow)
Opt out of control state saving.
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={})
UNDO_REDO_CONTAINER m_undoList
virtual void ClearUndoRedoList()
Clear the undo and redo list using ClearUndoORRedoList()
void ShowInfoBarError(const wxString &aErrorMsg, bool aShowCloseButton=false, INFOBAR_MESSAGE_TYPE aType=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...
UNDO_REDO_CONTAINER m_redoList
void SetMsgPanel(const std::vector< MSG_PANEL_ITEM > &aList)
Clear the message panel and populates it with the contents of aList.
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.
bool LibraryFileBrowser(const wxString &aTitle, bool doOpen, wxFileName &aFilename, const wxString &wildcard, const wxString &ext, bool isDirectory, FILEDLG_HOOK_NEW_LIBRARY *aFileDlgHook=nullptr)
KIGFX::VIEW_CONTROLS * GetViewControls() const
Return a pointer to the KIGFX::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 textChangeInFilterBox(wxCommandEvent &event) override
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 AddExtraCheckbox(const wxString &aLabel, bool *aValuePtr)
Add a checkbox value to the dialog.
void GetExtraCheckboxValues()
Fills in the value pointers from the checkboxes after the dialog has run.
EDA_LIST_DIALOG(wxWindow *aParent, const wxString &aTitle, const wxArrayString &aItemHeaders, const std::vector< wxArrayString > &aItemList, const wxString &aPreselectText=wxEmptyString, bool aSortList=true)
virtual void SetVisible(bool aVisible)
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.
bool GetUseGlobalTable() const
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.
std::optional< wxString > GetLibraryDescription(const wxString &aNickname) const
std::vector< wxString > GetLibraryNames() const
Returns a list of library nicknames that are available (skips any that failed to load)
void ReloadTables(LIBRARY_TABLE_SCOPE aScope, std::initializer_list< LIBRARY_TABLE_TYPE > aTablesToLoad={})
std::optional< LIBRARY_TABLE * > Table(LIBRARY_TABLE_TYPE aType, LIBRARY_TABLE_SCOPE aScope)
Retrieves a given table; creating a new empty project table if a valid project is loaded and the give...
std::optional< wxString > GetFullURI(LIBRARY_TABLE_TYPE aType, const wxString &aNickname, bool aSubstituted=false)
Return the full location specifying URI for the LIB, either in original UI form or in environment var...
void SetNickname(const wxString &aNickname)
void SetType(const wxString &aType)
void SetURI(const wxString &aUri)
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 wxString GetUniStringLibItemName() const
Get strings for display messages in dialogs.
const UTF8 & GetLibItemName() const
const UTF8 & GetLibNickname() const
Return the logical library name portion of a LIB_ID.
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 TOOL_ACTION recombinePad
static TOOL_ACTION placeFootprint
wxString CreateNewLibrary(const wxString &aDialogTitle, const wxString &aInitialPath=wxEmptyString)
If a library name is given, creates a new footprint library in the project folder with the given name...
wxString SelectLibrary(const wxString &aDialogTitle, const wxString &aListLabel, const std::vector< std::pair< wxString, bool * > > &aExtraCheckboxes={})
Put up a dialog and allows the user to pick a library, for unspecified use.
wxString createNewLibrary(const wxString &aDialogTitle, const wxString &aLibName, const wxString &aInitialPath, std::optional< LIBRARY_TABLE_SCOPE > aScope=std::nullopt)
Create a new library in the given table.
wxString CreateNewProjectLibrary(const wxString &aDialogTitle, const wxString &aLibName)
bool AddLibrary(const wxString &aDialogTitle, const wxString &aLibName=wxEmptyString, std::optional< LIBRARY_TABLE_SCOPE > aScope=std::nullopt)
Add an existing library to either the global or project library table.
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.
void GetLibraryItemsForListDialog(wxArrayString &aHeaders, std::vector< wxArrayString > &aItemsToDisplay)
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 BOARD_DESIGN_SETTINGS & GetDesignSettings() const
Return the BOARD_DESIGN_SETTINGS for the open project.
void PlaceFootprint(FOOTPRINT *aFootprint, bool aRecreateRatsnest=true, std::optional< VECTOR2I > aPosition=std::nullopt)
Place aFootprint at the current cursor position (or provided one) and updates footprint coordinates w...
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:
A PCB_IO 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()
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_IO * FindPlugin(PCB_FILE_T aFileType)
Return a PCB_IO which the caller can use to import, export, save, or load design documents.
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.
void SetTextThickness(int aWidth) override
The TextThickness is that set by the user.
void SetTextSize(VECTOR2I aNewSize, bool aEnforceMinTextSize=true) override
void SetPosition(const VECTOR2I &aPos) override
virtual COMMON_SETTINGS * GetCommonSettings() const
virtual LIBRARY_MANAGER & GetLibraryManager() const
The backing store for a PROJECT, in JSON format.
static FOOTPRINT_LIBRARY_ADAPTER * FootprintLibAdapter(PROJECT *aProject)
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)
bool TransferDataToWindow() override
wxTextCtrl * m_fpNameCtrl
std::function< bool(wxString libName, wxString fpName)> m_validator
static REPORTER & GetInstance()
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.
#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.
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.
static std::string normalizedPath(std::string aPath)
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)
std::vector< FAB_LAYER_COLOR > dummy
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.