54#include <wx/choicdlg.h>
55#include <wx/filedlg.h>
62 _(
"Writing/modifying legacy libraries (.mod files) is not allowed\n"\
63 "Please save the current library to the new .pretty format\n"\
64 "and update your footprint lib table\n"\
65 "to save your footprint (a .kicad_mod file) in the .pretty library folder" ) );
68 _(
"Modifying legacy libraries (.mod files) is not allowed\n"\
69 "Please save the current library under the new .pretty format\n"\
70 "and update your footprint lib table\n"\
71 "before deleting a footprint" ) );
81 static int lastFilterIndex = 0;
89 wxFileDialog dlg( aParent,
_(
"Import Footprint" ), aLastPath, wxEmptyString, wildCard,
90 wxFD_OPEN | wxFD_FILE_MUST_EXIST );
92 dlg.SetFilterIndex( lastFilterIndex );
94 if( dlg.ShowModal() == wxID_CANCEL )
97 lastFilterIndex = dlg.GetFilterIndex();
99 return wxFileName( dlg.GetPath() );
119 char* line = reader.
Line();
128 if( strncasecmp( line,
"(module", strlen(
"(module" ) ) == 0
129 || strncasecmp( line,
"(footprint", strlen(
"(footprint" ) ) == 0 )
132 *aName = aFileName.GetName();
140 if( !strncasecmp( line,
"$MODULE", strlen(
"$MODULE" ) ) )
147 else if( !strncasecmp( line,
"Element", strlen(
"Element" ) ) )
150 *aName = aFileName.GetName();
169 const wxString& aName )
177 default: wxFAIL_MSG( wxT(
"unexpected IO_MGR::PCB_FILE_T" ) );
break;
194 wxFFile f( aFileName.GetFullPath() );
199 f.ReadAll( &fcontents );
212 const wxString& aName )
228 wxFAIL_MSG( wxT(
"unexpected IO_MGR::PCB_FILE_T" ) );
238 wxString lastOpenedPathForLoading =
m_mruPath;
246 if( aName != wxT(
"") )
254 FILE* fp = wxFopen( fn.GetFullPath(), wxT(
"rt" ) );
258 wxString msg = wxString::Format(
_(
"File '%s' not found." ), fn.GetFullPath() );
265 wxString footprintName;
282 wxString msg = wxString::Format(
_(
"Unable to load footprint '%s' from '%s'" ),
302 footprint->
SetFPID(
LIB_ID( wxEmptyString, footprintName ) );
339 wxFileDialog dlg(
this,
_(
"Export Footprint" ), fn.GetPath(), fn.GetFullName(),
340 wildcard, wxFD_SAVE | wxFD_OVERWRITE_PROMPT );
342 if( dlg.ShowModal() == wxID_CANCEL )
362 pcb_io.
Format( aFootprint );
364 FILE* fp = wxFopen( dlg.GetPath(), wxT(
"wt" ) );
368 DisplayErrorMessage(
this, wxString::Format(
_(
"Insufficient permissions to write file '%s'." ),
382 wxString msg = wxString::Format(
_(
"Footprint exported to file '%s'." ), dlg.GetPath() );
388 const wxString& aProposedName )
395 const wxString& aProposedName )
404 const wxString& aProposedName,
411 if( aTable ==
nullptr )
412 return wxEmptyString;
414 wxString initialPath = aProposedName.IsEmpty() ?
Prj().
GetProjectPath() : aProposedName;
419 if( aLibName.IsEmpty() )
427 return wxEmptyString;
436 if( !fn.IsAbsolute() )
438 fn.SetName( aLibName );
439 fn.MakeAbsolute( initialPath );
445 wxString libPath = fn.GetFullPath();
451 bool writable =
false;
468 wxString msg = wxString::Format(
_(
"Library %s is read only." ), libPath );
470 return wxEmptyString;
474 wxString msg = wxString::Format(
_(
"Library %s already exists." ), libPath );
475 KIDIALOG dlg(
this, msg,
_(
"Confirmation" ), wxOK | wxCANCEL | wxICON_WARNING );
476 dlg.SetOKLabel(
_(
"Overwrite" ) );
480 return wxEmptyString;
491 return wxEmptyString;
504 if(
Prj().IsNullProject() )
510 wxMessageDialog dlg(
this,
_(
"Add the library to the global library table?" ),
511 _(
"Add To Global Library Table" ), wxYES_NO );
513 if( dlg.ShowModal() != wxID_OK )
520 wxArrayString libTableNames;
521 libTableNames.Add(
_(
"Global" ) );
522 libTableNames.Add(
_(
"Project" ) );
524 wxSingleChoiceDialog dlg(
this,
_(
"Choose the Library Table to add the library to:" ),
525 _(
"Add To Library Table" ), libTableNames );
529 dlg.FindWindow( wxID_CANCEL )->SetLabel(
_(
"Skip" ) );
530 dlg.FindWindow( wxID_OK )->SetLabel(
_(
"Add" ) );
533 if( dlg.ShowModal() != wxID_OK )
536 switch( dlg.GetSelection() )
540 default:
return nullptr;
547 if( aTable ==
nullptr )
550 if( aTable ==
nullptr )
551 return wxEmptyString;
555 wxFileName fn( aFilename );
557 if( aFilename.IsEmpty() )
567 wxString libPath = fn.GetFullPath();
568 wxString libName = fn.GetName();
570 if( libName.IsEmpty() )
579 libName = fn.GetFullName();
604 LIB_ID libID( libName, wxEmptyString );
605 editor->SyncLibraryTree(
true );
606 editor->FocusOnLibID( libID );
612 viewer->ReCreateLibraryList();
636 if( !
Prj().PcbFootprintLibs()->IsFootprintLibWritable( nickname ) )
638 wxString msg = wxString::Format(
_(
"Library '%s' is read only." ), nickname );
644 wxString msg = wxString::Format(
_(
"Delete footprint '%s' from library '%s'?" ),
646 nickname.GetData() );
648 if( aConfirm && !
IsOK(
this, msg ) )
661 msg.Printf(
_(
"Footprint '%s' deleted from library '%s'" ),
663 nickname.GetData() );
665 SetStatusText( msg );
674 if(
GetBoard()->GetFirstFootprint() ==
nullptr )
680 wxString footprintName;
682 auto resetReference =
685 aFootprint->SetReference(
"REF**" );
688 if( !aStoreInNewLib )
698 bool map =
IsOK(
this, wxString::Format(
_(
"Update footprints on board to refer to %s?" ),
709 if( !footprint->GetFPID().GetLibItemName().empty() )
713 resetReference( fpCopy );
726 LIB_ID id = footprint->GetFPID();
728 footprint->SetFPID(
id );
738 if( libPath.IsEmpty() )
744 wxString libNickname;
745 bool map =
IsOK(
this,
_(
"Update footprints on board to refer to new library?" ) );
762 if( !footprint->GetFPID().GetLibItemName().empty() )
766 resetReference( fpCopy );
779 LIB_ID id = footprint->GetFPID();
781 footprint->SetFPID(
id );
814 else if( libraryName.IsEmpty() || footprintName.IsEmpty() )
832 wxString libfullname;
887 wxString newName = footprintName;
891 newName.Printf(
"%s_%d", footprintName, i++ );
895 if( aFootprint->
GetValue() == footprintName )
903 const wxString& aLibraryName )
930 if( pcbframe ==
nullptr )
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." ) );
988 fixUuid(
const_cast<KIID&
>( newFootprint->
m_Uuid ) );
992 fixUuid(
const_cast<KIID&
>( aChild->
m_Uuid ) );
995 if( sourceFootprint )
1001 commit.
Push( wxT(
"Update footprint" ) );
1008 commit.
Add( newFootprint );
1014 commit.
Push( wxT(
"Insert footprint" ) );
1031 const wxString& aLibraryPreselect )
1037 wxArrayString headers;
1038 std::vector<wxArrayString> itemsToDisplay;
1040 headers.Add(
_(
"Nickname" ) );
1041 headers.Add(
_(
"Description" ) );
1043 for(
const wxString& nickname : nicknames )
1052 itemsToDisplay.push_back( item );
1056 for(
const wxString& nickname : nicknames )
1063 item.Add( nickname );
1065 itemsToDisplay.push_back( item );
1070 itemsToDisplay, aLibraryPreselect,
false );
1075 wxBoxSizer* bNameSizer =
new wxBoxSizer( wxHORIZONTAL );
1077 wxStaticText* label =
new wxStaticText( dlg, wxID_ANY,
_(
"Name:" ) );
1078 bNameSizer->Add( label, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 );
1080 wxTextCtrl* nameTextCtrl =
new wxTextCtrl( dlg,
ID_SAVE_AS_NAME, aFootprintName );
1081 bNameSizer->Add( nameTextCtrl, 1, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
1083 wxTextValidator nameValidator( wxFILTER_EXCLUDE_CHAR_LIST );
1085 nameTextCtrl->SetValidator( nameValidator );
1089 dlg->
m_ButtonsSizer->Prepend( newLibraryButton, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 10 );
1091 dlg->GetSizer()->Prepend( bNameSizer, 0, wxEXPAND|wxTOP|wxLEFT|wxRIGHT, 5 );
1093 dlg->Bind( wxEVT_BUTTON,
1094 [dlg]( wxCommandEvent& )
1100 if( dlg->GetChildren().DeleteObject( nameTextCtrl ) )
1101 dlg->GetChildren().Insert( nameTextCtrl );
1106 dlg->GetSizer()->Fit( dlg );
1114 if( aFootprint ==
nullptr )
1123 bool updateValue = aFootprint->
GetValue() == footprintName;
1126 std::unique_ptr<EDA_LIST_DIALOG> dlg;
1132 int ret = dlg->ShowModal();
1134 if( ret == wxID_CANCEL )
1138 else if( ret == wxID_OK )
1145 libraryName = newLibrary.GetName();
1149 libraryName = dlg->GetTextSelection();
1151 if( libraryName.IsEmpty() )
1153 DisplayError(
this,
_(
"No library specified. Footprint could not be saved." ) );
1157 footprintName =
static_cast<wxTextCtrl*
>( dlg->FindWindow(
ID_SAVE_AS_NAME ) )->GetValue();
1158 footprintName.Trim(
true );
1159 footprintName.Trim(
false );
1161 if( footprintName.IsEmpty() )
1163 DisplayError(
this,
_(
"No footprint name specified. Footprint could not be saved." ) );
1167 aFootprint->
SetFPID(
LIB_ID( libraryName, footprintName ) );
1170 aFootprint->
SetValue( footprintName );
1183 bool footprintExists = tbl->
FootprintExists( libraryName, footprintName );
1185 if( footprintExists )
1187 wxString msg = wxString::Format(
_(
"Footprint %s already exists in %s." ),
1190 KIDIALOG chkdlg(
this, msg,
_(
"Confirmation" ), wxOK | wxCANCEL | wxICON_WARNING );
1191 chkdlg.SetOKLabel(
_(
"Overwrite" ) );
1203 wxString fmt = footprintExists ?
_(
"Footprint '%s' replaced in '%s'" )
1204 :
_(
"Footprint '%s' added to '%s'" );
1206 wxString msg = wxString::Format( fmt, footprintName.GetData(), libraryName.GetData() );
1207 SetStatusText( msg );
1219 wxString msg = wxString::Format(
_(
"Revert '%s' to last version saved?" ),
1247 wxString footprintName = aFootprintName;
1250 static int footprintType = 1;
1251 int footprintTranslated =
FP_SMD;
1254 if( footprintName.IsEmpty() && !aQuiet )
1257 footprintName,
_(
"Footprint type:" ),
1258 {
_(
"Through hole" ),
_(
"SMD" ),
_(
"Other" ) },
1262 if( dlg.ShowModal() != wxID_OK )
1265 footprintType = dlg.GetChoice();
1267 switch( footprintType )
1270 case 1: footprintTranslated =
FP_SMD;
break;
1271 default: footprintTranslated = 0;
break;
1275 footprintName.Trim(
true );
1276 footprintName.Trim(
false );
1278 if( footprintName.IsEmpty() )
1290 footprint->
SetFPID(
LIB_ID( wxEmptyString, footprintName ) );
1330 if( footprint->
GetValue().IsEmpty() )
1331 footprint->
SetValue( footprintName );
1355 wxArrayString headers;
1357 headers.Add(
_(
"Nickname" ) );
1358 headers.Add(
_(
"Description" ) );
1363 std::vector< wxArrayString > itemsToDisplay;
1366 for(
const wxString& nickname : nicknames )
1375 itemsToDisplay.push_back( item );
1379 for(
const wxString& nickname : nicknames )
1386 item.Add( nickname );
1388 itemsToDisplay.push_back( item );
1392 EDA_LIST_DIALOG dlg(
this,
_(
"Select Library" ), headers, itemsToDisplay, aNicknameExisting,
1395 if( dlg.ShowModal() != wxID_OK )
1396 return wxEmptyString;
void SetContentModified(bool aModified=true)
virtual void Push(const wxString &aMessage=wxT("A commit"), 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.
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()
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.
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)
wxString GetTextSelection(int aColumn=0)
Return the selected text from aColumn in the wxListCtrl in the dialog.
void SetListLabel(const wxString &aLabel)
virtual void SetVisible(bool aVisible)
void SetTextThickness(int aWidth)
The TextThickness is that set by the user.
void SetKeepUpright(bool aKeepUpright)
void SetTextSize(const VECTOR2I &aNewSize)
virtual void SetText(const wxString &aText)
void SetItalic(bool aItalic)
A LINE_READER that reads from an open file.
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 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)
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.
@ GEDA_PCB
Geda PCB file formats.
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.
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()
char * Line() const
Return a pointer to the last line that was read in.
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.
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, bool aQuiet=false)
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 PLUGIN derivation for saving and loading Pcbnew s-expression formatted files.
BOARD_ITEM * Parse(const wxString &aClipboardSourceInput)
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 FOOTPRINT * FootprintLoad(const wxString &aLibraryPath, const wxString &aFootprintName, bool aKeepUUID=false, const STRING_UTF8_MAP *aProperties=nullptr)
Load a footprint having aFootprintName from the aLibraryPath containing a library format that this PL...
virtual bool IsFootprintLibWritable(const wxString &aLibraryPath)
Return true if the library at aLibraryPath is writable.
The backing store for a PROJECT, in JSON format.
Container for project specific data.
virtual const wxString GetProjectPath() const
Return the full path of the project.
virtual FP_LIB_TABLE * PcbFootprintLibs(KIWAY &aKiway)
Return the table of footprint libraries.
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...
Read lines of text from another LINE_READER but only returns non-comment lines and non-blank lines wi...
char * ReadLine() override
Read a line of text into the buffer and increments the line number counter.
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
const std::string KiCadFootprintFileExtension
wxString KiCadFootprintLibPathWildcard()
wxString ModLegacyExportFileWildcard()
wxString KiCadFootprintLibFileWildcard()
wxString AllFilesWildcard()
wxString GedaPcbFootprintLibFileWildcard()
PCB_LAYER_ID
A quick note on layer IDs:
#define FOOTPRINT_LIBRARY_HEADER_CNT
#define FOOTPRINT_LIBRARY_HEADER
This file contains miscellaneous commonly used macros and functions.
static wxString FROM_UTF8(const char *cstring)
Convert a UTF8 encoded C string to a wxString for all wxWidgets build modes.
bool contains(const _Container &__container, _Value __value)
Returns true if the container contains the given value.
#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)
char * StrPurge(char *text)
Remove leading and training spaces, tabs and end of line chars in text.
std::vector< wxString > pinned_fp_libs
static int ID_MAKE_NEW_LIBRARY
static int ID_SAVE_AS_NAME
@ PCB_TEXT_T
class PCB_TEXT, text on a layer
Custom text control validator definitions.
VECTOR2< double > VECTOR2D
Definition of file extensions used in Kicad.