59 m_errorGrid( nullptr ),
63 m_gridWidthsDirty( true ),
65 m_heightBeforeHelp( 400 )
75 wxGridCellAttr* attr =
new wxGridCellAttr;
83 [
this]( wxCommandEvent& aEvent )
88 m_EnvVars->SetSelectionMode( wxGrid::wxGridSelectionModes::wxGridSelectRows );
94 m_EnvVars->Connect( wxEVT_GRID_CELL_CHANGING,
98 GetSizer()->SetSizeHints(
this );
108 m_EnvVars->Disconnect( wxEVT_GRID_CELL_CHANGING,
116 if( !wxDialog::TransferDataToWindow() )
121 for(
auto it = envVars.begin(); it != envVars.end(); ++it )
123 const wxString&
path = it->second.GetValue();
126 if(
m_curdir.IsEmpty() && !
path.StartsWith(
"${" ) && !
path.StartsWith(
"$(" ) )
146 nameCellAttr->SetEditor( nameTextEditor );
148 nameCellAttr->DecRef();
153 wxSystemColour c = isExternal ? wxSYS_COLOUR_MENU : wxSYS_COLOUR_LISTBOX;
154 pathCellAttr->SetBackgroundColour( wxSystemSettings::GetColour( c ) );
155 pathCellAttr->DecRef();
166 if( !wxDialog::TransferDataFromWindow() )
172 for(
int row = 0; row <
m_EnvVars->GetNumberRows(); ++row )
182 else if(
name.empty() &&
path.empty() )
187 else if(
name.IsEmpty() )
192 m_errorMsg =
_(
"Environment variable name cannot be empty." );
195 else if(
path.IsEmpty() )
200 m_errorMsg =
_(
"Environment variable path cannot be empty." );
204 if( envVarMap.count(
name ) )
205 envVarMap.at(
name ).SetValue(
path );
211 for(
auto it = envVarMap.begin(); it != envVarMap.end(); )
215 for(
int row = 0; row <
m_EnvVars->GetNumberRows(); ++row )
219 if( it->first ==
name )
229 it = envVarMap.erase( it );
232 Pgm().SetLocalEnvVariables();
240 wxGrid*
grid =
dynamic_cast<wxGrid*
>(
event.GetEventObject() );
241 int row =
event.GetRow();
242 int col =
event.GetCol();
243 wxString
text =
event.GetString();
250 m_errorMsg =
_(
"Environment variable name cannot be empty." );
252 m_errorMsg =
_(
"Environment variable path cannot be empty." );
257 m_errorMsg =
_(
"3D search path alias cannot be empty." );
259 m_errorMsg =
_(
"3D search path cannot be empty." );
262 m_errorGrid =
dynamic_cast<wxGrid*
>(
event.GetEventObject() );
272 && !
Pgm().GetCommonSettings()->m_DoNotShowAgain.env_var_overwrite_warning )
274 wxString msg1 =
_(
"This path was defined externally to the running process and\n"
275 "will only be temporarily overwritten." );
276 wxString msg2 =
_(
"The next time KiCad is launched, any paths that have already\n"
277 "been defined are honored and any settings defined in the path\n"
278 "configuration dialog are ignored. If you did not intend for\n"
279 "this behavior, either rename any conflicting entries or remove\n"
280 "the external environment variable(s) from your system." );
282 dlg.ShowDetailedText( msg2 );
287 Pgm().GetCommonSettings()->m_DoNotShowAgain.env_var_overwrite_warning =
true;
294 wxMessageBox( wxString::Format(
_(
"The name %s is reserved, and cannot be used." ),
317 m_EnvVars->EnableCellEditControl(
true );
324 int curRow =
m_EnvVars->GetGridCursorRow();
326 if( curRow < 0 || m_EnvVars->GetNumberRows() <= curRow )
348 int width =
m_EnvVars->GetClientRect().GetWidth();
374 grid->EnableCellEditControl(
true );
375 grid->ShowCellEditControl();
391 wxSizer* sizerMain = GetSizer();
396 wxHW_SCROLLBAR_AUTO );
398 wxString msg =
_(
"Enter the name and value for each environment variable. Grey entries "
399 "are names that have been defined externally at the system or user "
400 "level. Environment variables defined at the system or user level "
401 "take precedence over the ones defined in this table. This means the "
402 "values in this table are ignored." );
403 msg <<
"<br><br><b>";
404 msg <<
_(
"To ensure environment variable names are valid on all platforms, the name field "
405 "will only accept upper case letters, digits, and the underscore characters." );
410 msg <<
"<br><br><b>" << var <<
"</b>";
414 if( desc.size() > 0 )
422 sizerMain->Insert( sizerMain->GetItemCount() - 1,
m_helpBox, 1, wxALL|wxEXPAND, 10 );
435 int minHelpBoxHeight = GetTextExtent( wxT(
"T" ) ).y * 20;
437 if( GetClientSize().y < minHelpBoxHeight * 2 )
438 SetClientSize( wxSize( GetClientSize().x, GetClientSize().y + minHelpBoxHeight ) );
wxBitmapBundle KiBitmapBundle(BITMAPS aBitmap)
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.
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
wxString LookUpEnvVarHelp(const wxString &aEnvVar)
Look up long-form help text for a given environment variable.
const ENV_VAR_LIST & GetPredefinedEnvVars()
Get the list of pre-defined environment variables.
bool IsEnvVarImmutable(const wxString &aEnvVar)
Determine if an environment variable is "predefined", i.e.
#define PROJECT_VAR_NAME
A variable name whose value holds the current project directory.
KIWAY Kiway & Pgm(), KFCTL_STANDALONE
The global Program "get" accessor.
Custom text control validator definitions.