80    wxGridCellAttr* attr = 
new wxGridCellAttr;
 
   85                                                  [
this]( wxCommandEvent& aEvent )
 
   90    m_EnvVars->SetSelectionMode( wxGrid::wxGridSelectionModes::wxGridSelectRows );
 
   96    m_EnvVars->Connect( wxEVT_GRID_CELL_CHANGING,
 
  102    GetSizer()->SetSizeHints( 
this );
 
 
  112    m_EnvVars->Disconnect( wxEVT_GRID_CELL_CHANGING,
 
 
  120   if( !wxDialog::TransferDataToWindow() )
 
  125    for( 
auto it = envVars.begin(); it != envVars.end(); ++it )
 
  127        const wxString& 
path = it->second.GetValue();
 
  130        if( 
m_curdir.IsEmpty() && !
path.StartsWith( 
"${" ) && !
path.StartsWith( 
"$(" ) )
 
 
  150    nameCellAttr->SetEditor( nameTextEditor );
 
  152    nameCellAttr->DecRef();
 
  157    wxSystemColour c = isExternal ? wxSYS_COLOUR_MENU : wxSYS_COLOUR_LISTBOX;
 
  158    pathCellAttr->SetBackgroundColour( wxSystemSettings::GetColour( c ) );
 
  159    pathCellAttr->DecRef();
 
 
  170    if( !wxDialog::TransferDataFromWindow() )
 
  176    for( 
int row = 0; row < 
m_EnvVars->GetNumberRows(); ++row )
 
  186        else if( 
name.empty() && 
path.empty() )
 
  191        else if( 
name.IsEmpty() )
 
  196            m_errorMsg = 
_( 
"Environment variable name cannot be empty." );
 
  199        else if( 
path.IsEmpty() )
 
  204            m_errorMsg = 
_( 
"Environment variable path cannot be empty." );
 
  208        if( envVarMap.count( 
name ) )
 
  209            envVarMap.at( 
name ).SetValue( 
path );
 
  215    for( 
auto it = envVarMap.begin(); it != envVarMap.end();  )
 
  219        for( 
int row = 0; row < 
m_EnvVars->GetNumberRows(); ++row )
 
  223            if( it->first == 
name )
 
  233            it = envVarMap.erase( it );
 
 
  244    wxGrid*  
grid = 
dynamic_cast<wxGrid*
>( 
event.GetEventObject() );
 
  245    int      row = 
event.GetRow();
 
  246    int      col = 
event.GetCol();
 
  247    wxString 
text = 
event.GetString();
 
  249    text.Trim( 
true ).Trim( 
false ); 
 
  250    grid->SetCellValue( row, col, 
text ); 
 
  257                m_errorMsg = 
_( 
"Environment variable name cannot be empty." );
 
  259                m_errorMsg = 
_( 
"Environment variable path cannot be empty." );
 
  264                m_errorMsg = 
_( 
"3D search path alias cannot be empty." );
 
  266                m_errorMsg = 
_( 
"3D search path cannot be empty." );
 
  269        m_errorGrid = 
dynamic_cast<wxGrid*
>( 
event.GetEventObject() );
 
  279                && !
Pgm().GetCommonSettings()->m_DoNotShowAgain.env_var_overwrite_warning )
 
  281            wxString msg1 = 
_( 
"This path was defined  externally to the running process and\n" 
  282                               "will only be temporarily overwritten." );
 
  283            wxString msg2 = 
_( 
"The next time KiCad is launched, any paths that have already\n" 
  284                               "been defined are honored and any settings defined in the path\n" 
  285                               "configuration dialog are ignored.  If you did not intend for\n" 
  286                               "this behavior, either rename any conflicting entries or remove\n" 
  287                               "the external environment variable(s) from your system." );
 
  289            dlg.ShowDetailedText( msg2 );
 
  301                wxMessageBox( wxString::Format( 
_( 
"The name %s is reserved, and cannot be used." ),
 
 
  317            [&]() -> std::pair<int, int>
 
 
  362        grid->EnableCellEditControl( 
true );
 
  363        grid->ShowCellEditControl();
 
 
  370    wxSizer* sizerMain = GetSizer();
 
  375                                     wxHW_SCROLLBAR_AUTO );
 
  377        wxString msg = 
_( 
"Enter the name and value for each environment variable.  Grey entries " 
  378                          "are names that have been defined externally at the system or user " 
  379                          "level.  Environment variables defined at the system or user level " 
  380                          "take precedence over the ones defined in this table.  This means the " 
  381                          "values in this table are ignored." );
 
  382        msg << 
"<br><br><b>";
 
  383        msg << 
_( 
"To ensure environment variable names are valid on all platforms, the name field " 
  384                  "will only accept upper case letters, digits, and the underscore characters." );
 
  389            msg << 
"<br><br><b>" << var << 
"</b>";
 
  393            if( desc.size() > 0 )
 
  401        sizerMain->Insert( sizerMain->GetItemCount() - 1, 
m_helpBox, 1, wxALL|wxEXPAND, 10 );
 
  414        int minHelpBoxHeight = GetTextExtent( wxT( 
"T" ) ).y * 20;
 
  416        if( GetClientSize().y < minHelpBoxHeight * 2 )
 
  417            SetClientSize( wxSize( GetClientSize().x, GetClientSize().y + minHelpBoxHeight ) );
 
 
wxBitmapBundle KiBitmapBundle(BITMAPS aBitmap, int aMinHeight)
 
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,...
 
Provide a custom wxValidator object for limiting the allowable characters when defining an environmen...
 
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.
 
Helper class to create more flexible dialogs, including 'do not show again' checkbox handling.
 
bool DoNotShowAgain() const
Checks the 'do not show again' setting for the dialog.
 
void DoNotShowCheckbox(wxString file, int line)
Shows the 'do not show again' checkbox.
 
virtual COMMON_SETTINGS * GetCommonSettings() const
 
virtual ENV_VAR_MAP & GetLocalEnvVariables() const
 
virtual void SetLocalEnvVariables()
Update the local environment with the contents of the current ENV_VAR_MAP stored in the COMMON_SETTIN...
 
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
 
KICOMMON_API wxString LookUpEnvVarHelp(const wxString &aEnvVar)
Look up long-form help text for a given environment variable.
 
KICOMMON_API const std::vector< wxString > & 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.