62 m_errorGrid( nullptr ),
66 m_gridWidthsDirty( true ),
68 m_heightBeforeHelp( 400 )
78 wxGridCellAttr* attr =
new wxGridCellAttr;
86 [
this]( wxCommandEvent& aEvent )
91 m_EnvVars->SetSelectionMode( wxGrid::wxGridSelectionModes::wxGridSelectRows );
97 m_EnvVars->Connect( wxEVT_GRID_CELL_CHANGING,
101 GetSizer()->SetSizeHints(
this );
111 m_EnvVars->Disconnect( wxEVT_GRID_CELL_CHANGING,
119 if( !wxDialog::TransferDataToWindow() )
124 for(
auto it = envVars.begin(); it != envVars.end(); ++it )
126 const wxString&
path = it->second.GetValue();
129 if(
m_curdir.IsEmpty() && !
path.StartsWith(
"${" ) && !
path.StartsWith(
"$(" ) )
149 nameCellAttr->SetEditor( nameTextEditor );
151 nameCellAttr->DecRef();
156 wxSystemColour c = isExternal ? wxSYS_COLOUR_MENU : wxSYS_COLOUR_LISTBOX;
157 pathCellAttr->SetBackgroundColour( wxSystemSettings::GetColour( c ) );
158 pathCellAttr->DecRef();
169 if( !wxDialog::TransferDataFromWindow() )
175 for(
int row = 0; row <
m_EnvVars->GetNumberRows(); ++row )
185 else if(
name.empty() &&
path.empty() )
190 else if(
name.IsEmpty() )
195 m_errorMsg =
_(
"Environment variable name cannot be empty." );
198 else if(
path.IsEmpty() )
203 m_errorMsg =
_(
"Environment variable path cannot be empty." );
207 if( envVarMap.count(
name ) )
208 envVarMap.at(
name ).SetValue(
path );
214 for(
auto it = envVarMap.begin(); it != envVarMap.end(); )
218 for(
int row = 0; row <
m_EnvVars->GetNumberRows(); ++row )
222 if( it->first ==
name )
232 it = envVarMap.erase( it );
243 wxGrid*
grid =
dynamic_cast<wxGrid*
>(
event.GetEventObject() );
244 int row =
event.GetRow();
245 int col =
event.GetCol();
246 wxString
text =
event.GetString();
253 m_errorMsg =
_(
"Environment variable name cannot be empty." );
255 m_errorMsg =
_(
"Environment variable path cannot be empty." );
260 m_errorMsg =
_(
"3D search path alias cannot be empty." );
262 m_errorMsg =
_(
"3D search path cannot be empty." );
265 m_errorGrid =
dynamic_cast<wxGrid*
>(
event.GetEventObject() );
277 wxString msg1 =
_(
"This path was defined externally to the running process and\n"
278 "will only be temporarily overwritten." );
279 wxString msg2 =
_(
"The next time KiCad is launched, any paths that have already\n"
280 "been defined are honored and any settings defined in the path\n"
281 "configuration dialog are ignored. If you did not intend for\n"
282 "this behavior, either rename any conflicting entries or remove\n"
283 "the external environment variable(s) from your system." );
285 dlg.ShowDetailedText( msg2 );
297 wxMessageBox( wxString::Format(
_(
"The name %s is reserved, and cannot be used." ),
320 m_EnvVars->EnableCellEditControl(
true );
327 int curRow =
m_EnvVars->GetGridCursorRow();
329 if( curRow < 0 || m_EnvVars->GetNumberRows() <= curRow )
351 int width =
m_EnvVars->GetClientRect().GetWidth();
377 grid->EnableCellEditControl(
true );
378 grid->ShowCellEditControl();
394 wxSizer* sizerMain = GetSizer();
399 wxHW_SCROLLBAR_AUTO );
401 wxString msg =
_(
"Enter the name and value for each environment variable. Grey entries "
402 "are names that have been defined externally at the system or user "
403 "level. Environment variables defined at the system or user level "
404 "take precedence over the ones defined in this table. This means the "
405 "values in this table are ignored." );
406 msg <<
"<br><br><b>";
407 msg <<
_(
"To ensure environment variable names are valid on all platforms, the name field "
408 "will only accept upper case letters, digits, and the underscore characters." );
413 msg <<
"<br><br><b>" << var <<
"</b>";
417 if( desc.size() > 0 )
425 sizerMain->Insert( sizerMain->GetItemCount() - 1,
m_helpBox, 1, wxALL|wxEXPAND, 10 );
438 int minHelpBoxHeight = GetTextExtent( wxT(
"T" ) ).y * 20;
440 if( GetClientSize().y < minHelpBoxHeight * 2 )
441 SetClientSize( wxSize( GetClientSize().x, GetClientSize().y + minHelpBoxHeight ) );
wxBitmapBundle KiBitmapBundle(BITMAPS aBitmap)
DO_NOT_SHOW_AGAIN m_DoNotShowAgain
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={})
KiCad uses environment variables internally for determining the base paths for libraries,...
This class provides a custom wxValidator object for limiting the allowable characters when defining a...
Editor for wxGrid cells that adds a file/folder browser to the grid input field.
This class works around a bug in wxGrid where the first keystroke doesn't get sent through the valida...
Add mouse and command handling (such as cut, copy, and paste) to a WX_GRID instance.
Add dark theme support to wxHtmlWindow.
bool SetPage(const wxString &aSource) override
Helper class to create more flexible dialogs, including 'do not show again' checkbox handling.
bool DoNotShowAgain() const
void DoNotShowCheckbox(wxString file, int line)
Checks the 'do not show again' setting for the dialog.
virtual COMMON_SETTINGS * GetCommonSettings() const
virtual ENV_VAR_MAP & GetLocalEnvVariables() const
virtual void SetLocalEnvVariables()
Updates the local environment with the contents of the current ENV_VAR_MAP stored in the COMMON_SETTI...
void ClearRows()
wxWidgets recently added an ASSERT which fires if the position is greater than or equal to the number...
bool CommitPendingChanges(bool aQuietMode=false)
Close any open cell edit controls.
void DisplayErrorMessage(wxWindow *aParent, const wxString &aText, const wxString &aExtraInfo)
Display an error message with aMessage.
This file is part of the common library.
Functions related to environment variables, including help functions.
std::map< wxString, ENV_VAR_ITEM > ENV_VAR_MAP
This file is part of the common library.
KICOMMON_API wxString LookUpEnvVarHelp(const wxString &aEnvVar)
Look up long-form help text for a given environment variable.
KICOMMON_API const ENV_VAR_LIST & GetPredefinedEnvVars()
Get the list of pre-defined environment variables.
KICOMMON_API bool IsEnvVarImmutable(const wxString &aEnvVar)
Determine if an environment variable is "predefined", i.e.
PGM_BASE & Pgm()
The global Program "get" accessor.
#define PROJECT_VAR_NAME
A variable name whose value holds the current project directory.
bool env_var_overwrite_warning
Custom text control validator definitions.