36#include <wx/textdlg.h>
42 std::vector<LIB_ID>& aHistoryList ) :
73 if( IsShownOnScreen() )
106 wxString* aErrorMsg )
110 wxCHECK_MSG( prjLibs,
nullptr, wxS(
"Invalid design block library table." ) );
122 wxString msg = wxString::Format(
_(
"Error loading design block %s from library '%s'." ),
150 static bool isGlobal =
true;
156 return wxEmptyString;
161 wxString libPath = fn.GetFullPath();
172 bool writable =
false;
177 writable = pi->IsLibraryWritable( libPath );
178 exists = fn.Exists();
189 wxString msg = wxString::Format(
_(
"Library %s is read only." ), libPath );
190 m_frame->ShowInfoBarError( msg );
191 return wxEmptyString;
195 wxString msg = wxString::Format(
_(
"Library %s already exists." ), libPath );
196 KIDIALOG dlg(
m_frame, msg,
_(
"Confirmation" ), wxOK | wxCANCEL | wxICON_WARNING );
197 dlg.SetOKLabel(
_(
"Overwrite" ) );
201 return wxEmptyString;
203 pi->DeleteLibrary( libPath );
207 pi->CreateLibrary( libPath );
212 return wxEmptyString;
227 wxFileName fn( aFilename );
228 wxString libPath = fn.GetFullPath();
229 wxString libName = fn.GetName();
231 if( libName.IsEmpty() )
235 wxString description = wxGetTextFromUser(
_(
"Enter a description for the library:" ), aDialogTitle,
248 libName = fn.GetFullName();
254 wxCHECK( optTable.has_value(),
false );
265 table->Save().map_error(
278 LIB_ID libID( libName, wxEmptyString );
289 if( aLibName.IsEmpty() )
295 if( !
m_frame->Prj().DesignBlockLibs()->IsDesignBlockLibWritable( aLibName ) )
297 wxString msg = wxString::Format(
_(
"Library '%s' is read only." ), aLibName );
298 m_frame->ShowInfoBarError( msg );
303 wxString msg = wxString::Format(
_(
"Delete design block library '%s' from disk? This will "
304 "delete all design blocks within the library." ),
305 aLibName.GetData() );
312 if( !
m_frame->Prj().DesignBlockLibs()->DeleteLibrary( aLibName ) )
314 msg.Printf(
_(
"Design block library '%s' could not be deleted." ), aLibName.GetData() );
325 msg.Printf(
_(
"Design block library '%s' deleted" ), aLibName.GetData() );
342 if( !
m_frame->Prj().DesignBlockLibs()->IsDesignBlockLibWritable( libname ) )
344 wxString msg = wxString::Format(
_(
"Library '%s' is read only." ), libname );
345 m_frame->ShowInfoBarError( msg );
350 wxString msg = wxString::Format(
_(
"Delete design block '%s' in library '%s' from disk?" ),
351 dbname.GetData(), libname.GetData() );
358 m_frame->Prj().DesignBlockLibs()->DeleteDesignBlock( libname, dbname );
366 msg.Printf(
_(
"Design block '%s' deleted from library '%s'" ), dbname.GetData(), libname.GetData() );
383 if( !
m_frame->Prj().DesignBlockLibs()->IsDesignBlockLibWritable( libname ) )
385 wxString msg = wxString::Format(
_(
"Library '%s' is read only." ), libname );
386 m_frame->ShowInfoBarError( msg );
390 std::unique_ptr<DESIGN_BLOCK> designBlock(
GetDesignBlock( aLibId,
true,
true ) );
395 wxString originalName = designBlock->GetLibId().GetLibItemName();
401 wxString newName = designBlock->GetLibId().GetLibItemName();
405 if( originalName != newName )
407 if(
m_frame->Prj().DesignBlockLibs()->DesignBlockExists( libname, newName ) )
413 m_frame->Prj().DesignBlockLibs()->SaveDesignBlock( libname, designBlock.get() );
414 m_frame->Prj().DesignBlockLibs()->DeleteDesignBlock( libname, originalName );
418 m_frame->Prj().DesignBlockLibs()->SaveDesignBlock( libname, designBlock.get() );
436 wxString msg = wxString::Format(
_(
"Design block '%s' already exists in library '%s'." ),
437 newName.GetData(), libname.GetData() );
439 if(
OKOrCancelDialog( aFrame,
_(
"Confirmation" ), msg,
_(
"Overwrite existing design block?" ),
_(
"Overwrite" ) )
APP_SETTINGS_BASE is a settings class that should be derived for each standalone KiCad application.
@ KICAD_SEXP
S-expression KiCad file format.
static const wxString ShowType(DESIGN_BLOCK_FILE_T aFileType)
static DESIGN_BLOCK_FILE_T GuessPluginTypeFromLibPath(const wxString &aLibPath, int aCtl=0)
static DESIGN_BLOCK_IO * FindPlugin(DESIGN_BLOCK_FILE_T aFileType)
DESIGN_BLOCK * DesignBlockLoadWithOptionalNickname(const LIB_ID &aDesignBlockId, bool aKeepUUID=false, wxString *aErrorMsg=nullptr)
Load a design block having aDesignBlockId with possibly an empty nickname.
std::optional< LIB_STATUS > LoadOne(LIB_DATA *aLib) override
bool DeleteDesignBlockLibrary(const wxString &aLibName, bool aConfirm)
bool checkOverwrite(wxWindow *aFrame, wxString &libname, wxString &newName)
bool DeleteDesignBlockFromLibrary(const LIB_ID &aLibId, bool aConfirm)
~DESIGN_BLOCK_PANE() override
void SelectLibId(const LIB_ID &aLibId)
LIB_ID GetSelectedLibId(int *aUnit=nullptr) const
DESIGN_BLOCK * GetDesignBlock(const LIB_ID &aLibId, bool aUseCacheLib, bool aShowErrorMsg, wxString *aErrorMsg=nullptr)
Load design block from design block library table.
DESIGN_BLOCK_PANE(EDA_DRAW_FRAME *aParent, const LIB_ID *aPreselect, std::vector< LIB_ID > &aHistoryList)
wxString createNewDesignBlockLibrary(const wxString &aDialogTitle)
PANEL_DESIGN_BLOCK_CHOOSER * m_chooserPanel
bool EditDesignBlockProperties(const LIB_ID &aLibId)
virtual void setLabelsAndTooltips()=0
wxString CreateNewDesignBlockLibrary(const wxString &aDialogTitle)
Creates a new design block library.
virtual void OnLanguageChanged(wxCommandEvent &aEvent)
DESIGN_BLOCK * GetSelectedDesignBlock(bool aUseCacheLib, bool aShowErrorMsg)
void OnClosed(wxAuiManagerEvent &aEvent)
bool AddDesignBlockLibrary(const wxString &aDialogTitle, const wxString &aFilename, LIBRARY_TABLE_SCOPE aScope)
Add an existing library to a library table (presumed to be either the global or project design block ...
The base class for create windows for drawing purpose.
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.
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...
void SetNickname(const wxString &aNickname)
void SetType(const wxString &aType)
void SetDescription(const wxString &aDescription)
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.
const UTF8 & GetLibItemName() const
const UTF8 & GetLibNickname() const
Return the logical library name portion of a LIB_ID.
void PreloadDesignBlockLibraries(KIWAY *aKiway)
Starts a background job to preload the global and project design block libraries.
virtual LIBRARY_MANAGER & GetLibraryManager() const
WX_PANEL(wxWindow *parent, wxWindowID id=wxID_ANY, const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxSize(-1,-1), long style=wxTAB_TRAVERSAL, const wxString &name=wxEmptyString)
int OKOrCancelDialog(wxWindow *aParent, const wxString &aWarning, const wxString &aMessage, const wxString &aDetailedMessage, const wxString &aOKLabel, const wxString &aCancelLabel, bool *aApplyToAll)
Display a warning dialog with aMessage and returns the user response.
bool IsOK(wxWindow *aParent, const wxString &aMessage)
Display a yes/no dialog with aMessage and returns the user response.
void DisplayErrorMessage(wxWindow *aParent, const wxString &aText, const wxString &aExtraInfo)
Display an error message with aMessage.
void DisplayError(wxWindow *aParent, const wxString &aText)
Display an error or warning message box with aMessage.
This file is part of the common library.
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 KiCadDesignBlockLibPathExtension
static wxString KiCadDesignBlockLibPathWildcard()
std::unique_ptr< T > IO_RELEASER
Helper to hold and release an IO_BASE object when exceptions are thrown.
static std::string normalizedPath(std::string aPath)
PGM_BASE & Pgm()
The global program "get" accessor.
Definition of file extensions used in Kicad.