25#include <wx/checkbox.h>
27#include <wx/filedlg.h>
29#include <wx/textctrl.h>
57 const wxString& aPreselect ) :
58 wxComboCtrl( aParent, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 0, 0 ) ),
65 Customize( wxCC_IFLAG_HAS_NONSTANDARD_BUTTON );
77 wxString libName = aRawValue.BeforeFirst(
':', &itemName );
84 wxString rawValue = GetValue();
86 if( rawValue.IsEmpty() )
93 if( frame->ShowModal( &symbolId,
m_dlg ) )
106 wxEvtHandler* aEventHandler )
111 wxGridCellEditor::Create( aParent, aId, aEventHandler );
119 const wxString& aSymbolNetlist,
const wxString& aPreselect ) :
120 wxComboCtrl( aParent, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 0, 0 ),
121 wxTE_PROCESS_ENTER | wxBORDER_NONE ),
130 Customize( wxCC_IFLAG_HAS_NONSTANDARD_BUTTON );
151 wxString fpid = GetValue();
162 frame->KiwayMailIn( event );
165 if( frame->ShowModal( &fpid,
m_dlg ) )
193 wxEvtHandler* aEventHandler )
202 Combo()->SetValidator( *m_validator );
206 wxGridCellEditor::Create( aParent, aId, aEventHandler );
214 std::vector<EMBEDDED_FILES*> aFilesStack ) :
215 wxComboCtrl( aParent, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 0, 0 ),
216 wxTE_PROCESS_ENTER | wxBORDER_NONE ),
224 Customize( wxCC_IFLAG_HAS_NONSTANDARD_BUTTON );
247 m_dlg->PrepareForModalSubDialog();
249 wxString filename = GetValue();
251 if( filename.IsEmpty() || filename == wxT(
"~" ) )
255 wxFileDialog openFileDialog(
this,
_(
"Open file" ),
"",
"",
_(
"All Files" ) + wxT(
" (*.*)|*.*" ),
256 wxFD_OPEN | wxFD_FILE_MUST_EXIST );
258 openFileDialog.SetCustomizeHook( customize );
262 if( openFileDialog.ShowModal() == wxID_OK )
264 filename = openFileDialog.GetPath();
265 wxFileName fn( filename );
270 SetValue(
result->GetLink() );
274 SetValue(
"file://" + filename );
283 m_dlg->CleanupAfterModalSubDialog();
294 if( GetValue().IsEmpty() )
315 Combo()->SetValidator( *m_validator );
318 wxGridCellEditor::Create( aParent, aId, aEventHandler );
326 wxString* aCurrentDir,
const wxString& aFileFilter = wxEmptyString,
327 bool aNormalize =
false,
328 const wxString& aNormalizeBasePath = wxEmptyString,
329 std::function<wxString(
const wxString& )> aEmbedCallback =
nullptr ) :
330 wxComboCtrl( aParent, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 0, 0 ),
331 wxTE_PROCESS_ENTER | wxBORDER_NONE ),
343 Customize( wxCC_IFLAG_HAS_NONSTANDARD_BUTTON );
347 wxString* aCurrentDir,
348 std::function<wxString(
WX_GRID*
grid,
int row )> aFileFilterFn,
349 bool aNormalize =
false,
350 const wxString& aNormalizeBasePath = wxEmptyString,
351 std::function<wxString(
const wxString& )> aEmbedCallback =
nullptr ) :
352 wxComboCtrl( aParent, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 0, 0 ),
353 wxTE_PROCESS_ENTER | wxBORDER_NONE ),
365 Customize( wxCC_IFLAG_HAS_NONSTANDARD_BUTTON );
377 m_dlg->PrepareForModalSubDialog();
382 wxFileName fn = GetValue();
392 wxFileDialog dlg(
m_dlg,
_(
"Select a File" ), fn.GetPath(), fn.GetFullName(),
396 dlg.SetCustomizeHook( customize );
400 if( dlg.ShowModal() == wxID_OK )
402 wxString filePath = dlg.GetPath();
403 wxString lastPath = dlg.GetDirectory();
404 wxString relPath = wxEmptyString;
410 if( relPath.IsEmpty() )
412 m_dlg->CleanupAfterModalSubDialog();
420 lastPath =
NormalizePath( dlg.GetDirectory(), &
Pgm().GetLocalEnvVariables(),
430 if( !
m_grid->CommitPendingChanges() )
439 wxDirDialog dlg(
m_dlg,
_(
"Select Path" ), fn.GetPath(),
440 wxDD_DEFAULT_STYLE | wxDD_DIR_MUST_EXIST );
442 if( dlg.ShowModal() == wxID_OK )
444 wxString filePath = dlg.GetPath();
445 wxString relPath = wxEmptyString;
459 if( !
m_grid->CommitPendingChanges() )
467 m_dlg->CleanupAfterModalSubDialog();
484 wxEvtHandler* aEventHandler )
504 Combo()->SetValidator( *m_validator );
507 wxGridCellEditor::Create( aParent, aId, aEventHandler );
514 int& aRow,
int& aCol ) :
515 wxComboCtrl( aParent, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 0, 0 ),
516 wxTE_PROCESS_ENTER | wxBORDER_NONE ),
525 Customize( wxCC_IFLAG_HAS_NONSTANDARD_BUTTON );
549 Combo()->SetValidator( *m_validator );
553 wxGridCellEditor::Create( aParent, aId, aEventHandler );
wxBitmapBundle KiBitmapBundle(BITMAPS aBitmap, int aMinHeight)
Dialog helper object to sit in the inheritance tree between wxDialog and any class written by wxFormB...
void Create(wxWindow *aParent, wxWindowID aId, wxEvtHandler *aEventHandler) override
void Create(wxWindow *aParent, wxWindowID aId, wxEvtHandler *aEventHandler) override
std::function< wxString(WX_GRID *aGrid, int aRow)> m_fileFilterFn
wxString m_normalizeBasePath
std::function< wxString(const wxString &)> m_embedCallback
void BeginEdit(int aRow, int aCol, wxGrid *aGrid) override
void Create(wxWindow *aParent, wxWindowID aId, wxEvtHandler *aEventHandler) override
std::function< void(int, int)> m_function
void Create(wxWindow *aParent, wxWindowID aId, wxEvtHandler *aEventHandler) override
wxComboCtrl * Combo() const
void BeginEdit(int aRow, int aCol, wxGrid *aGrid) override
SEARCH_STACK * m_searchStack
void Create(wxWindow *aParent, wxWindowID aId, wxEvtHandler *aEventHandler) override
std::vector< EMBEDDED_FILES * > m_filesStack
Carry a payload from one KIWAY_PLAYER to another within a PROJECT.
A wxFrame capable of the OpenProjectFiles function, meaning it can load a portion of a KiCad project.
Look for files in a number of paths.
void OnButtonClick() override
void DoSetPopupControl(wxComboPopup *popup) override
std::function< wxString(const wxString &)> m_embedCallback
TEXT_BUTTON_FILE_BROWSER(wxWindow *aParent, DIALOG_SHIM *aParentDlg, WX_GRID *aGrid, wxString *aCurrentDir, const wxString &aFileFilter=wxEmptyString, bool aNormalize=false, const wxString &aNormalizeBasePath=wxEmptyString, std::function< wxString(const wxString &)> aEmbedCallback=nullptr)
TEXT_BUTTON_FILE_BROWSER(wxWindow *aParent, DIALOG_SHIM *aParentDlg, WX_GRID *aGrid, wxString *aCurrentDir, std::function< wxString(WX_GRID *grid, int row)> aFileFilterFn, bool aNormalize=false, const wxString &aNormalizeBasePath=wxEmptyString, std::function< wxString(const wxString &)> aEmbedCallback=nullptr)
std::function< wxString(WX_GRID *aGrid, int aRow)> m_fileFilterFn
wxString m_normalizeBasePath
std::string m_symbolNetlist
void OnButtonClick() override
bool m_buttonFpChooserLock
void DoSetPopupControl(wxComboPopup *popup) override
TEXT_BUTTON_FP_CHOOSER(wxWindow *aParent, DIALOG_SHIM *aParentDlg, const wxString &aSymbolNetlist, const wxString &aPreselect)
std::function< void(int, int)> & m_function
void DoSetPopupControl(wxComboPopup *popup) override
void OnButtonClick() override
TEXT_BUTTON_RUN_FUNCTION(wxWindow *aParent, DIALOG_SHIM *aParentDlg, std::function< void(int, int)> &aFunction, int &aRow, int &aCol)
void DoSetPopupControl(wxComboPopup *popup) override
wxString escapeLibId(const wxString &aRawValue)
void OnButtonClick() override
TEXT_BUTTON_SYMBOL_CHOOSER(wxWindow *aParent, DIALOG_SHIM *aParentDlg, const wxString &aPreselect)
void UpdateButtonBitmaps()
std::vector< EMBEDDED_FILES * > m_filesStack
void OnButtonClick() override
TEXT_BUTTON_URL(wxWindow *aParent, DIALOG_SHIM *aParentDlg, SEARCH_STACK *aSearchStack, std::vector< EMBEDDED_FILES * > aFilesStack)
void DoSetPopupControl(wxComboPopup *popup) override
void OnTextChange(wxCommandEvent &event)
SEARCH_STACK * m_searchStack
static void CellEditorSetMargins(wxTextEntryBase *aEntry)
A helper function to set OS-specific margins for text-based cell editors.
const wxString ExpandEnvVarSubstitutions(const wxString &aString, const PROJECT *aProject)
Replace any environment variable & text variable references with their values.
bool GetAssociatedDocument(wxWindow *aParent, const wxString &aDocName, PROJECT *aProject, SEARCH_STACK *aPaths, std::vector< EMBEDDED_FILES * > aFilesStack)
Open a document (file) with the suitable browser.
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.
@ FRAME_FOOTPRINT_CHOOSER
PGM_BASE & Pgm()
The global program "get" accessor.
wxString UnescapeString(const wxString &aSource)
wxString EscapeString(const wxString &aSource, ESCAPE_CONTEXT aContext)
The Escape/Unescape routines use HTML-entity-reference-style encoding to handle characters which are:...
wxString result
Test unit parsing edge cases and error handling.