https://git.reactos.org/?p=reactos.git;a=commitdiff;h=e58b4a492835bb7812de9d7705208894696dee2b

commit e58b4a492835bb7812de9d7705208894696dee2b
Author:     Arnav Bhatt <[email protected]>
AuthorDate: Thu Dec 23 05:07:21 2021 +0530
Commit:     GitHub <[email protected]>
CommitDate: Thu Dec 23 00:37:21 2021 +0100

    [SYSDM] Edit Environment Variable Dialog Improvement (#3575)
    
    Improve the "Edit Environment Variable" dialog box to be functionally as 
similar to the one of Windows 10.
    CORE-11733
    
    - Improved the existing dialog box. In particular, allow it to be resizable.
    - Implemented new "fancy" dialog box for variables containing multiple 
directories as values,
      showing them in a list.
---
 dll/cpl/sysdm/CMakeLists.txt |    2 +-
 dll/cpl/sysdm/environment.c  | 1044 ++++++++++++++++++++++++++++++++++++++----
 dll/cpl/sysdm/lang/bg-BG.rc  |   40 +-
 dll/cpl/sysdm/lang/cs-CZ.rc  |   40 +-
 dll/cpl/sysdm/lang/da-DK.rc  |   40 +-
 dll/cpl/sysdm/lang/de-DE.rc  |   40 +-
 dll/cpl/sysdm/lang/el-GR.rc  |   40 +-
 dll/cpl/sysdm/lang/en-US.rc  |   40 +-
 dll/cpl/sysdm/lang/es-ES.rc  |   40 +-
 dll/cpl/sysdm/lang/fr-FR.rc  |   40 +-
 dll/cpl/sysdm/lang/he-IL.rc  |   40 +-
 dll/cpl/sysdm/lang/hu-HU.rc  |   40 +-
 dll/cpl/sysdm/lang/id-ID.rc  |   40 +-
 dll/cpl/sysdm/lang/it-IT.rc  |   40 +-
 dll/cpl/sysdm/lang/ja-JP.rc  |   40 +-
 dll/cpl/sysdm/lang/nl-NL.rc  |   40 +-
 dll/cpl/sysdm/lang/no-NO.rc  |   40 +-
 dll/cpl/sysdm/lang/pl-PL.rc  |   40 +-
 dll/cpl/sysdm/lang/pt-PT.rc  |   40 +-
 dll/cpl/sysdm/lang/ro-RO.rc  |   40 +-
 dll/cpl/sysdm/lang/ru-RU.rc  |   40 +-
 dll/cpl/sysdm/lang/sk-SK.rc  |   40 +-
 dll/cpl/sysdm/lang/sq-AL.rc  |   40 +-
 dll/cpl/sysdm/lang/sv-SE.rc  |   40 +-
 dll/cpl/sysdm/lang/tr-TR.rc  |   40 +-
 dll/cpl/sysdm/lang/uk-UA.rc  |   40 +-
 dll/cpl/sysdm/lang/zh-CN.rc  |   40 +-
 dll/cpl/sysdm/lang/zh-TW.rc  |   40 +-
 dll/cpl/sysdm/resource.h     |   21 +-
 29 files changed, 1808 insertions(+), 299 deletions(-)

diff --git a/dll/cpl/sysdm/CMakeLists.txt b/dll/cpl/sysdm/CMakeLists.txt
index 4643a4523b5..6ee05f2fa05 100644
--- a/dll/cpl/sysdm/CMakeLists.txt
+++ b/dll/cpl/sysdm/CMakeLists.txt
@@ -28,6 +28,6 @@ add_library(sysdm MODULE
 
 set_module_type(sysdm cpl UNICODE)
 target_link_libraries(sysdm udmihelp)
-add_importlibs(sysdm advapi32 setupapi user32 gdi32 comctl32 msimg32 shell32 
shlwapi ole32 powrprof msvcrt kernel32 ntdll)
+add_importlibs(sysdm advapi32 setupapi user32 gdi32 comctl32 comdlg32 msimg32 
shell32 shlwapi ole32 powrprof msvcrt kernel32 ntdll)
 add_pch(sysdm precomp.h SOURCE)
 add_cd_file(TARGET sysdm DESTINATION reactos/system32 FOR all)
diff --git a/dll/cpl/sysdm/environment.c b/dll/cpl/sysdm/environment.c
index 2d6ecf9a179..b10aa2b4959 100644
--- a/dll/cpl/sysdm/environment.c
+++ b/dll/cpl/sysdm/environment.c
@@ -4,10 +4,16 @@
  * FILE:        dll/cpl/sysdm/environment.c
  * PURPOSE:     Environment variable settings
  * COPYRIGHT:   Copyright Eric Kohl
- *
+ *              Copyright 2021 Arnav Bhatt <[email protected]>
  */
 
 #include "precomp.h"
+#include <commctrl.h>
+#include <commdlg.h>
+#include <string.h>
+#include <strsafe.h>
+
+#define MAX_STR_LENGTH  128
 
 typedef struct _VARIABLE_DATA
 {
@@ -17,6 +23,146 @@ typedef struct _VARIABLE_DATA
     LPTSTR lpCookedValue;
 } VARIABLE_DATA, *PVARIABLE_DATA;
 
+typedef struct _ENVIRONMENT_EDIT_DIALOG_DATA
+{
+    BOOL bIsItemSelected;
+    DWORD dwSelectedValueIndex;
+    DWORD cxMin;
+    DWORD cyMin;
+    DWORD cxOld;
+    DWORD cyOld;
+    DWORD dwDlgID;
+    HWND hEditBox;
+    PVARIABLE_DATA VarData;
+} EDIT_DIALOG_DATA, *PEDIT_DIALOG_DATA;
+
+static BOOL
+DetermineDialogBoxType(LPTSTR lpRawValue)
+{
+    DWORD dwValueLength;
+    LPTSTR lpTemp;
+    LPTSTR lpToken;
+
+    dwValueLength = _tcslen(lpRawValue) + 1;
+    lpTemp = GlobalAlloc(GPTR, dwValueLength * sizeof(TCHAR));
+    if (!lpTemp)
+        return FALSE;
+
+    StringCchCopy(lpTemp, dwValueLength, lpRawValue);
+
+    for (lpToken = _tcstok(lpTemp, _T(";"));
+         lpToken != NULL;
+         lpToken = _tcstok(NULL, _T(";")))
+    {
+        /* If the string has environment variable then expand it */
+        ExpandEnvironmentStrings(lpToken, lpToken, dwValueLength);
+
+        if (!PathIsDirectoryW(lpToken))
+            return FALSE;
+    }
+    GlobalFree(lpTemp);
+
+    return TRUE;
+}
+
+static DWORD
+GatherDataFromEditBox(HWND hwndDlg,
+                      PVARIABLE_DATA VarData)
+{
+    DWORD dwNameLength;
+    DWORD dwValueLength;
+
+    dwNameLength = SendDlgItemMessage(hwndDlg, IDC_VARIABLE_NAME, 
WM_GETTEXTLENGTH, 0, 0);
+    dwValueLength = SendDlgItemMessage(hwndDlg, IDC_VARIABLE_VALUE, 
WM_GETTEXTLENGTH, 0, 0);
+
+    if (dwNameLength == 0 || dwValueLength == 0)
+    {
+        return 0;
+    }
+
+    /* Reallocate the name buffer, regrowing it if necessary */
+    if (!VarData->lpName || (_tcslen(VarData->lpName) < dwNameLength))
+    {
+        if (VarData->lpName)
+            GlobalFree(VarData->lpName);
+
+        VarData->lpName = GlobalAlloc(GPTR, (dwNameLength + 1) * 
sizeof(TCHAR));
+        if (!VarData->lpName)
+            return 0;
+    }
+    SendDlgItemMessage(hwndDlg, IDC_VARIABLE_NAME, WM_GETTEXT, dwNameLength + 
1, (LPARAM)VarData->lpName);
+
+    /* Reallocate the value buffer, regrowing it if necessary */
+    if (!VarData->lpRawValue || (_tcslen(VarData->lpRawValue) < dwValueLength))
+    {
+        if (VarData->lpRawValue)
+            GlobalFree(VarData->lpRawValue);
+
+        VarData->lpRawValue = GlobalAlloc(GPTR, (dwValueLength + 1) * 
sizeof(TCHAR));
+        if (!VarData->lpRawValue)
+            return 0;
+    }
+    SendDlgItemMessage(hwndDlg, IDC_VARIABLE_VALUE, WM_GETTEXT, dwValueLength 
+ 1, (LPARAM)VarData->lpRawValue);
+
+    return dwValueLength;
+}
+
+static DWORD
+GatherDataFromListView(HWND hwndListView,
+                       PVARIABLE_DATA VarData)
+{
+    DWORD dwValueLength;
+    DWORD NumberOfItems;
+    DWORD i;
+    TCHAR szData[MAX_PATH];
+
+    /* Gather the number of items for the semi-colon */
+    NumberOfItems = ListView_GetItemCount(hwndListView);
+    if (NumberOfItems == 0)
+    {
+        return 0;
+    }
+
+    /* Since the last item doesn't need the semi-colon subtract 1 */
+    dwValueLength = NumberOfItems - 1;
+
+    for (i = 0; i < NumberOfItems; i++)
+    {
+        ListView_GetItemText(hwndListView,
+                             i,
+                             0,
+                             szData,
+                             _countof(szData));
+        dwValueLength += _tcslen(szData);
+    }
+
+    /* Reallocate the value buffer, regrowing it if necessary */
+    if (!VarData->lpRawValue || (_tcslen(VarData->lpRawValue) < dwValueLength))
+    {
+        if (VarData->lpRawValue)
+            GlobalFree(VarData->lpRawValue);
+
+        VarData->lpRawValue = GlobalAlloc(GPTR, (dwValueLength + 1) * 
sizeof(TCHAR));
+        if (!VarData->lpRawValue)
+            return 0;
+    }
+
+    /* Copy the variable values while seperating them with a semi-colon except 
for the last value */
+    for (i = 0; i < NumberOfItems; i++)
+    {
+        if (i > 0)
+        {
+            StringCchCat(VarData->lpRawValue, dwValueLength + 1, _T(";"));
+        }
+        ListView_GetItemText(hwndListView,
+                             i,
+                             0,
+                             szData,
+                             _countof(szData));
+        StringCchCat(VarData->lpRawValue, dwValueLength + 1, szData);
+    }
+    return dwValueLength;
+}
 
 static INT
 GetSelectedListViewItem(HWND hwndListView)
@@ -45,6 +191,566 @@ GetSelectedListViewItem(HWND hwndListView)
     return -1;
 }
 
+static LRESULT CALLBACK
+ListViewSubclassProc(HWND hListBox,
+                    UINT uMsg,
+                    WPARAM wParam,
+                    LPARAM lParam,
+                    UINT_PTR uIdSubclass,
+                    DWORD_PTR dwRefData)
+{
+    switch (uMsg)
+    {
+        case WM_DESTROY:
+        {
+            RemoveWindowSubclass(hListBox, ListViewSubclassProc, uIdSubclass);
+            break;
+        }
+
+        /* Whenever the control is resized make sure it doesn't spawn the 
horizontal scrollbar */
+        case WM_SIZE:
+        {
+            ShowScrollBar(hListBox, SB_HORZ, FALSE);
+            break;
+        }
+    }
+
+    return DefSubclassProc(hListBox, uMsg, wParam, lParam);
+}
+
+static VOID
+AddEmptyItem(HWND hwndListView,
+             DWORD dwSelectedValueIndex)
+{
+    LV_ITEM lvi;
+
+    ZeroMemory(&lvi, sizeof(lvi));
+    lvi.mask = LVIF_TEXT | LVIF_STATE;
+    lvi.cchTextMax = MAX_PATH;
+    lvi.pszText = _T("");
+    lvi.iItem = dwSelectedValueIndex;
+    lvi.iSubItem = 0;
+    ListView_InsertItem(hwndListView, &lvi);    
+}
+
+static VOID
+AddValuesToList(HWND hwndDlg,
+                PEDIT_DIALOG_DATA DlgData)
+{
+    LV_COLUMN column;
+    LV_ITEM lvi;
+    RECT rItem;
+
+    DWORD dwValueLength;
+    DWORD i;
+    HWND hwndListView;
+    LPTSTR lpTemp;
+    LPTSTR lpToken;
+
+    ZeroMemory(&column, sizeof(column));
+    ZeroMemory(&lvi, sizeof(lvi));
+
+    hwndListView = GetDlgItem(hwndDlg, IDC_LIST_VARIABLE_VALUE);
+
+    GetClientRect(hwndListView, &rItem);
+
+    column.mask = LVCF_WIDTH;
+    column.cx = rItem.right;
+    ListView_InsertColumn(hwndListView, 0, &column);
+    ShowScrollBar(hwndListView, SB_HORZ, FALSE);
+
+    lvi.mask = LVIF_TEXT | LVIF_STATE;
+    lvi.cchTextMax = MAX_PATH;
+    lvi.iSubItem = 0;
+
+    dwValueLength = _tcslen(DlgData->VarData->lpRawValue) + 1;
+    lpTemp = GlobalAlloc(GPTR, dwValueLength * sizeof(TCHAR));
+    if (!lpTemp)
+        return;
+
+    StringCchCopy(lpTemp, dwValueLength, DlgData->VarData->lpRawValue);
+
+    for (lpToken = _tcstok(lpTemp, _T(";")), i = 0;
+         lpToken != NULL;
+         lpToken = _tcstok(NULL, _T(";")), i++)
+    {
+        lvi.iItem = i;
+        lvi.pszText = lpToken;
+        lvi.state = (i == 0) ? LVIS_SELECTED : 0;
+        ListView_InsertItem(hwndListView, &lvi);
+    }
+
+    DlgData->dwSelectedValueIndex = 0;
+    ListView_SetExtendedListViewStyle(hwndListView, LVS_EX_GRIDLINES | 
LVS_EX_FULLROWSELECT);
+    ListView_SetItemState(hwndListView, DlgData->dwSelectedValueIndex,
+                          LVIS_FOCUSED | LVIS_SELECTED,
+                          LVIS_FOCUSED | LVIS_SELECTED);
+
+    ListView_Update(hwndListView, DlgData->dwSelectedValueIndex);
+    GlobalFree(lpTemp);
+}
+
+static VOID
+BrowseRequiredFile(HWND hwndDlg)
+{
+    OPENFILENAME ofn;
+    TCHAR szFile[MAX_PATH] = _T("");
+
+    ZeroMemory(&ofn, sizeof(ofn));
+
+    ofn.lStructSize = sizeof(ofn);
+    ofn.hwndOwner = hwndDlg;
+    ofn.lpstrFilter = _T("All Files (*.*)\0*.*\0");
+    ofn.lpstrFile = szFile;
+    ofn.nMaxFile = _countof(szFile);
+    ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
+
+    if (GetOpenFileName(&ofn))
+    {
+        SetDlgItemText(hwndDlg, IDC_VARIABLE_VALUE, szFile);
+    }
+}
+
+static VOID
+BrowseRequiredFolder(HWND hwndDlg,
+                     PEDIT_DIALOG_DATA DlgData)
+{
+    HWND hwndListView;
+    TCHAR szDir[MAX_PATH];
+
+    BROWSEINFO bi;
+    LPITEMIDLIST pidllist;
+
+    ZeroMemory(&bi, sizeof(bi));
+    bi.hwndOwner = hwndDlg;
+    bi.ulFlags = BIF_NEWDIALOGSTYLE;
+
+    hwndListView = GetDlgItem(hwndDlg, IDC_LIST_VARIABLE_VALUE);
+
+    pidllist = SHBrowseForFolder(&bi);
+    if (!pidllist)
+    {
+        return;
+    }
+
+    if (SHGetPathFromIDList(pidllist, szDir))
+    {
+        if (DlgData->dwDlgID == IDD_EDIT_VARIABLE_FANCY)
+        {
+            /* If no item is selected then create a new empty item and add the 
required location to it */
+            if (!DlgData->bIsItemSelected)
+            {
+                DlgData->dwSelectedValueIndex = 
ListView_GetItemCount(hwndListView);
+                AddEmptyItem(hwndListView, DlgData->dwSelectedValueIndex);
+            }
+            ListView_SetItemText(hwndListView,
+                                 DlgData->dwSelectedValueIndex,
+                                 0,
+                                 szDir);
+            ListView_SetItemState(hwndListView, DlgData->dwSelectedValueIndex,
+                                  LVIS_FOCUSED | LVIS_SELECTED,
+                                  LVIS_FOCUSED | LVIS_SELECTED);
+        }
+        else
+        {
+            SetDlgItemText(hwndDlg, IDC_VARIABLE_VALUE, szDir);
+        }
+    }
+
+    CoTaskMemFree(pidllist);
+}
+
+static VOID
+MoveListItem(HWND hwndDlg,
+             PEDIT_DIALOG_DATA DlgData,
+             BOOL bMoveUp)
+{
+    TCHAR szDest[MAX_PATH];
+    TCHAR szSource[MAX_PATH];
+    HWND hwndListView;
+    DWORD dwSrcIndex, dwDestIndex, dwLastIndex;
+
+    hwndListView = GetDlgItem(hwndDlg, IDC_LIST_VARIABLE_VALUE);
+
+    dwLastIndex = ListView_GetItemCount(hwndListView) - 1;
+    dwSrcIndex = DlgData->dwSelectedValueIndex;
+    dwDestIndex = bMoveUp ? (dwSrcIndex - 1) : (dwSrcIndex + 1);
+
+    if ((bMoveUp && dwSrcIndex > 0) || (!bMoveUp && dwSrcIndex < dwLastIndex))
+    {
+        ListView_GetItemText(hwndListView,
+                             dwSrcIndex,
+                             0,
+                             szDest,
+                             _countof(szDest));
+        ListView_GetItemText(hwndListView,
+                             dwDestIndex,
+                             0,
+                             szSource,
+                             _countof(szSource));
+
+        ListView_SetItemText(hwndListView,
+                             dwDestIndex,
+                             0,
+                             szDest);
+        ListView_SetItemText(hwndListView,
+                             dwSrcIndex,
+                             0,
+                             szSource);
+
+        DlgData->dwSelectedValueIndex = dwDestIndex;
+        ListView_SetItemState(hwndListView, DlgData->dwSelectedValueIndex,
+                              LVIS_FOCUSED | LVIS_SELECTED,
+                              LVIS_FOCUSED | LVIS_SELECTED);
+    }
+}
+
+static VOID
+OnEnvironmentEditDlgResize(HWND hwndDlg,
+                           PEDIT_DIALOG_DATA DlgData,
+                           DWORD cx,
+                           DWORD cy)
+{
+    RECT rect;
+    HDWP hdwp = NULL;
+    HWND hItemWnd;
+
+    if ((cx == DlgData->cxOld) && (cy == DlgData->cyOld))
+        return;
+    
+    if (DlgData->dwDlgID == IDD_EDIT_VARIABLE)
+    {
+        hdwp = BeginDeferWindowPos(5);
+            
+        /* For edit control */ 
+        hItemWnd = GetDlgItem(hwndDlg, IDC_VARIABLE_NAME);
+        GetWindowRect(hItemWnd, &rect);
+        MapWindowPoints(HWND_DESKTOP, hwndDlg, (LPPOINT)&rect, 
sizeof(RECT)/sizeof(POINT));
+
+        if (hdwp)
+        {
+            hdwp = DeferWindowPos(hdwp,
+                                  hItemWnd,
+                                  0,
+                                  rect.left, rect.top,
+                                  (rect.right - rect.left) + (cx - 
DlgData->cxOld),
+                                  rect.bottom - rect.top,
+                                  SWP_NOZORDER | SWP_NOACTIVATE);
+        }
+
+        hItemWnd = GetDlgItem(hwndDlg, IDC_VARIABLE_VALUE);
+        GetWindowRect(hItemWnd, &rect);
+        MapWindowPoints(HWND_DESKTOP, hwndDlg, (LPPOINT)&rect, 
sizeof(RECT)/sizeof(POINT));
+
+        if (hdwp)
+        {
+            hdwp = DeferWindowPos(hdwp,
+                                  hItemWnd,
+                                  0,
+                                  rect.left, rect.top,
+                                  (rect.right - rect.left) + (cx - 
DlgData->cxOld),
+                                  rect.bottom - rect.top,
+                                  SWP_NOZORDER | SWP_NOACTIVATE);
+        }
+    }
+    else if (DlgData->dwDlgID == IDD_EDIT_VARIABLE_FANCY)
+    {
+        hdwp = BeginDeferWindowPos(11);
+
+        /* For list view control */
+        hItemWnd = GetDlgItem(hwndDlg, IDC_LIST_VARIABLE_VALUE);
+        GetWindowRect(hItemWnd, &rect);
+        MapWindowPoints(HWND_DESKTOP, hwndDlg, (LPPOINT)&rect, 
sizeof(RECT)/sizeof(POINT));
+
+        if (hdwp)
+        {
+            hdwp = DeferWindowPos(hdwp,
+                                  hItemWnd,
+                                  0,
+                                  rect.left, rect.top,
+                                  (rect.right - rect.left) + (cx - 
DlgData->cxOld),
+                                  (rect.bottom - rect.top) + (cy - 
DlgData->cyOld),
+                                  SWP_NOZORDER | SWP_NOACTIVATE);
+            ListView_SetColumnWidth(hItemWnd, 0, (rect.right - rect.left) + 
(cx - DlgData->cxOld));
+        }
+
+        /* For buttons */
+        hItemWnd = GetDlgItem(hwndDlg, IDC_BUTTON_BROWSE_FOLDER);
+        GetWindowRect(hItemWnd, &rect);
+        MapWindowPoints(HWND_DESKTOP, hwndDlg, (LPPOINT)&rect, 
sizeof(RECT)/sizeof(POINT));
+
+        if (hdwp)
+        {
+            hdwp = DeferWindowPos(hdwp,
+                                  hItemWnd,
+                                  0,
+                                  rect.left + (cx - DlgData->cxOld),
+                                  rect.top,
+                                  0, 0,
+                                  SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);
+        }
+
+        hItemWnd = GetDlgItem(hwndDlg, IDC_BUTTON_NEW);
+        GetWindowRect(hItemWnd, &rect);
+        MapWindowPoints(HWND_DESKTOP, hwndDlg, (LPPOINT)&rect, 
sizeof(RECT)/sizeof(POINT));
+
+        if (hdwp)
+        {
+            hdwp = DeferWindowPos(hdwp,
+                              hItemWnd,
+                              0,
+                              rect.left + (cx - DlgData->cxOld),
+                              rect.top,
+                              0, 0,
+                              SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);
+        }
+
+        hItemWnd = GetDlgItem(hwndDlg, IDC_BUTTON_EDIT);
+        GetWindowRect(hItemWnd, &rect);
+        MapWindowPoints(HWND_DESKTOP, hwndDlg, (LPPOINT)&rect, 
sizeof(RECT)/sizeof(POINT));
+
+        if (hdwp)
+        {
+            hdwp = DeferWindowPos(hdwp,
+                                  hItemWnd,
+                                  0,
+                                  rect.left + (cx - DlgData->cxOld),
+                                  rect.top,
+                                  0, 0,
+                                  SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);
+        }
+
+        hItemWnd = GetDlgItem(hwndDlg, IDC_BUTTON_DELETE);
+        GetWindowRect(hItemWnd, &rect);
+        MapWindowPoints(HWND_DESKTOP, hwndDlg, (LPPOINT)&rect, 
sizeof(RECT)/sizeof(POINT));
+
+        if (hdwp)
+        {
+            hdwp = DeferWindowPos(hdwp,
+                                  hItemWnd,
+                                  0,
+                                  rect.left + (cx - DlgData->cxOld),
+                                  rect.top,
+                                  0, 0,
+                                  SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);
+        }
+
+        hItemWnd = GetDlgItem(hwndDlg, IDC_BUTTON_MOVE_UP);
+        GetWindowRect(hItemWnd, &rect);
+        MapWindowPoints(HWND_DESKTOP, hwndDlg, (LPPOINT)&rect, 
sizeof(RECT)/sizeof(POINT));
+
+        if (hdwp)
+        {
+            hdwp = DeferWindowPos(hdwp,
+                                  hItemWnd,
+                                  0,
+                                  rect.left + (cx - DlgData->cxOld),
+                                  rect.top,
+                                  0, 0,
+                                  SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);
+        }
+
+            hItemWnd = GetDlgItem(hwndDlg, IDC_BUTTON_MOVE_DOWN);
+            GetWindowRect(hItemWnd, &rect);
+            MapWindowPoints(HWND_DESKTOP, hwndDlg, (LPPOINT)&rect, 
sizeof(RECT)/sizeof(POINT));
+
+            if (hdwp)
+            {
+                hdwp = DeferWindowPos(hdwp,
+                                      hItemWnd,
+                                      0,
+                                      rect.left + (cx - DlgData->cxOld),
+                                      rect.top,
+                                      0, 0,
+                                      SWP_NOSIZE | SWP_NOZORDER | 
SWP_NOACTIVATE);
+        }
+
+        hItemWnd = GetDlgItem(hwndDlg, IDC_BUTTON_EDIT_TEXT);
+        GetWindowRect(hItemWnd, &rect);
+        MapWindowPoints(HWND_DESKTOP, hwndDlg, (LPPOINT)&rect, 
sizeof(RECT)/sizeof(POINT));
+
+        if (hdwp)
+        {
+                hdwp = DeferWindowPos(hdwp,
+                                  hItemWnd,
+                                  0,
+                                  rect.left + (cx - DlgData->cxOld),
+                                  rect.top,
+                                  0, 0,
+                                  SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);
+        }
+    }
+
+    hItemWnd = GetDlgItem(hwndDlg, IDOK);
+    GetWindowRect(hItemWnd, &rect);
+    MapWindowPoints(HWND_DESKTOP, hwndDlg, (LPPOINT)&rect, 
sizeof(RECT)/sizeof(POINT));
+
+    if (hdwp)
+    {
+        hdwp = DeferWindowPos(hdwp,
+                              hItemWnd,
+                              0,
+                              rect.left + (cx - DlgData->cxOld),
+                              rect.top + (cy - DlgData->cyOld),
+                              0, 0,
+                              SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);
+    }
+
+    hItemWnd = GetDlgItem(hwndDlg, IDCANCEL);
+    GetWindowRect(hItemWnd, &rect);
+    MapWindowPoints(HWND_DESKTOP, hwndDlg, (LPPOINT)&rect, 
sizeof(RECT)/sizeof(POINT));
+
+    if (hdwp)
+    {
+        hdwp = DeferWindowPos(hdwp,
+                              hItemWnd,
+                              0,
+                              rect.left + (cx - DlgData->cxOld),
+                              rect.top + (cy - DlgData->cyOld),
+                              0, 0,
+                              SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);
+    }
+
+    /* For the size grip */
+    hItemWnd = GetDlgItem(hwndDlg, IDC_DIALOG_GRIP);
+    GetWindowRect(hItemWnd, &rect);
+    MapWindowPoints(HWND_DESKTOP, hwndDlg, (LPPOINT)&rect, 
sizeof(RECT)/sizeof(POINT));
+
+    if (hdwp)
+    {
+        hdwp = DeferWindowPos(hdwp,
+                              hItemWnd,
+                              0,
+                              rect.left + (cx - DlgData->cxOld),
+                              rect.top + (cy - DlgData->cyOld),
+                              0, 0,
+                              SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);
+    }
+
+    if (hdwp)
+    {
+        EndDeferWindowPos(hdwp);
+    }
+
+    DlgData->cxOld = cx;
+    DlgData->cyOld = cy;
+}
+
+static BOOL
+OnBeginLabelEdit(NMLVDISPINFO* pnmv)
+{
+    HWND hwndEdit;
+
+    hwndEdit = ListView_GetEditControl(pnmv->hdr.hwndFrom);
+    if (hwndEdit == NULL)
+    {
+        return TRUE;
+    }
+
+    SendMessage(hwndEdit, EM_SETLIMITTEXT, MAX_PATH - 1, 0);
+
+    return FALSE;
+}
+
+static BOOL
+OnEndLabelEdit(NMLVDISPINFO* pnmv)
+{
+    HWND hwndEdit;
+    TCHAR szOldDir[MAX_PATH];
+    TCHAR szNewDir[MAX_PATH];
+
+    hwndEdit = ListView_GetEditControl(pnmv->hdr.hwndFrom);
+    if (hwndEdit == NULL)
+    {
+        return TRUE;
+    }
+
+    /* Leave, if there is no valid listview item */
+    if (pnmv->item.iItem == -1)
+    {
+        return FALSE;
+    }
+
+    ListView_GetItemText(pnmv->hdr.hwndFrom,
+                         pnmv->item.iItem, 0,
+                         szOldDir,
+                         _countof(szOldDir));
+
+    SendMessage(hwndEdit, WM_GETTEXT, _countof(szNewDir), (LPARAM)szNewDir);
+
+    /* If there is nothing in the text box then remove the item */
+    if (_tcslen(szNewDir) == 0)
+    {
+        ListView_DeleteItem(pnmv->hdr.hwndFrom, pnmv->item.iItem);
+        ListView_SetItemState(pnmv->hdr.hwndFrom, pnmv->item.iItem - 1,
+                              LVIS_FOCUSED | LVIS_SELECTED,
+                              LVIS_FOCUSED | LVIS_SELECTED);
+        return FALSE;
+    }
+
+    /* If nothing has been changed then just bail out */
+    if (_tcscmp(szOldDir, szNewDir) == 0)
+    {
+        return FALSE;
+    }
+
+    ListView_SetItemText(pnmv->hdr.hwndFrom,
+                         pnmv->item.iItem, 0,
+                         szNewDir);
+
+    return TRUE;
+}
+
+static BOOL
+OnNotifyEditVariableDlg(HWND hwndDlg, PEDIT_DIALOG_DATA DlgData, NMHDR *phdr)
+{
+    LPNMLISTVIEW lpnmlv = (LPNMLISTVIEW)phdr;
+
+    switch (phdr->idFrom)
+    {
+        case IDC_LIST_VARIABLE_VALUE:
+            switch(phdr->code)
+            {
+                case NM_CLICK:
+                {
+                    /* Detect if an item is selected */
+                    DlgData->bIsItemSelected = (lpnmlv->iItem != -1);
+                    if (lpnmlv->iItem != -1)
+                    {
+                        DlgData->dwSelectedValueIndex = lpnmlv->iItem;
+                    }
+                    break;
+                }
+
+                case NM_DBLCLK:
+                {
+                    /* Either simulate IDC_BUTTON_NEW or edit an item 
depending upon the condition */
+                    if (lpnmlv->iItem == -1)
+                    {
+                        SendMessage(GetDlgItem(hwndDlg, IDC_BUTTON_NEW), 
BM_CLICK, 0, 0);
+                    }
+                    else
+                    {
+                        ListView_EditLabel(GetDlgItem(hwndDlg, 
IDC_LIST_VARIABLE_VALUE), DlgData->dwSelectedValueIndex);
+                    }
+                    break;
+                }
+
+                case LVN_BEGINLABELEDIT:
+                {
+                    return OnBeginLabelEdit((NMLVDISPINFO*)phdr);
+                }
+
+                case LVN_ENDLABELEDIT:
+                {
+                    return OnEndLabelEdit((NMLVDISPINFO*)phdr);
+                }
+            }
+            break;
+    }
+
+    return FALSE;
+}
 
 static INT_PTR CALLBACK
 EditVariableDlgProc(HWND hwndDlg,
@@ -52,90 +758,219 @@ EditVariableDlgProc(HWND hwndDlg,
                     WPARAM wParam,
                     LPARAM lParam)
 {
-    PVARIABLE_DATA VarData;
-    DWORD dwNameLength;
-    DWORD dwValueLength;
-
-    VarData = (PVARIABLE_DATA)GetWindowLongPtr(hwndDlg, GWLP_USERDATA);
+    PEDIT_DIALOG_DATA DlgData;
+    HWND hwndListView;
 
+    DlgData = (PEDIT_DIALOG_DATA)GetWindowLongPtr(hwndDlg, GWLP_USERDATA);
+    hwndListView = GetDlgItem(hwndDlg, IDC_LIST_VARIABLE_VALUE);
     switch (uMsg)
     {
         case WM_INITDIALOG:
+        {
+            RECT rect;
+
             SetWindowLongPtr(hwndDlg, GWLP_USERDATA, (LONG_PTR)lParam);
-            VarData = (PVARIABLE_DATA)lParam;
+            DlgData = (PEDIT_DIALOG_DATA)lParam;
 
-            if (VarData->lpName != NULL)
+            GetClientRect(hwndDlg, &rect);
+            DlgData->cxOld = rect.right - rect.left;
+            DlgData->cyOld = rect.bottom - rect.top;
+
+            GetWindowRect(hwndDlg, &rect);
+            DlgData->cxMin = rect.right - rect.left;
+            DlgData->cyMin = rect.bottom - rect.top;
+
+            /* Either get the values from list box or from edit box */
+            if (DlgData->dwDlgID == IDD_EDIT_VARIABLE_FANCY)
             {
-                SendDlgItemMessage(hwndDlg, IDC_VARIABLE_NAME, WM_SETTEXT, 0, 
(LPARAM)VarData->lpName);
-            }
+                /* Subclass the listview control first */
+                SetWindowSubclass(hwndListView, ListViewSubclassProc, 1, 0);
 
-            if (VarData->lpRawValue != NULL)
+                if (DlgData->VarData->lpRawValue != NULL)
+                {
+                    AddValuesToList(hwndDlg, DlgData);
+                }
+            }
+            else
             {
-                SendDlgItemMessage(hwndDlg, IDC_VARIABLE_VALUE, WM_SETTEXT, 0, 
(LPARAM)VarData->lpRawValue);
+                if (DlgData->VarData->lpName != NULL)
+                {
+                    SendDlgItemMessage(hwndDlg, IDC_VARIABLE_NAME, WM_SETTEXT, 
0, (LPARAM)DlgData->VarData->lpName);
+                }
+
+                if (DlgData->VarData->lpRawValue != NULL)
+                {
+                    SendDlgItemMessage(hwndDlg, IDC_VARIABLE_VALUE, 
WM_SETTEXT, 0, (LPARAM)DlgData->VarData->lpRawValue);
+                }
             }
             break;
+        }
+
+        case WM_SIZE:
+        {
+            OnEnvironmentEditDlgResize(hwndDlg, DlgData, LOWORD(lParam), 
HIWORD(lParam));
+            break;
+        }
+
+        case WM_SIZING:
+        {
+            LPRECT pRect = (LPRECT)lParam;
+
+            if (pRect->right - pRect->left < DlgData->cxMin)
+                pRect->right = pRect->left + DlgData->cxMin;
+
+            if (pRect->bottom - pRect->top < DlgData->cyMin)
+                pRect->bottom = pRect->top + DlgData->cyMin;
+
+            /* Make sure the normal variable edit dialog doesn't change its 
width */
+            if (DlgData->dwDlgID == IDD_EDIT_VARIABLE)
+            {
+                if (pRect->bottom - pRect->top > DlgData->cyMin)
+                    pRect->bottom = pRect->top + DlgData->cyMin;
+            }
+
+            return TRUE;
+        }
+
+        case WM_NOTIFY:
+        {
+            return OnNotifyEditVariableDlg(hwndDlg, DlgData, (NMHDR*)lParam);
+        }
 
         case WM_COMMAND:
             switch (LOWORD(wParam))
             {
                 case IDOK:
-                    dwNameLength = (DWORD)SendDlgItemMessage(hwndDlg, 
IDC_VARIABLE_NAME, WM_GETTEXTLENGTH, 0, 0);
-                    dwValueLength = (DWORD)SendDlgItemMessage(hwndDlg, 
IDC_VARIABLE_VALUE, WM_GETTEXTLENGTH, 0, 0);
-                    if (dwNameLength > 0 && dwValueLength > 0)
+                {
+                    LPTSTR p;
+                    DWORD dwValueLength;
+
+                    /* Either set the values to the list box or to the edit 
box */
+                    if (DlgData->dwDlgID == IDD_EDIT_VARIABLE_FANCY)
+                    {
+                        dwValueLength = GatherDataFromListView(hwndListView, 
DlgData->VarData);
+                    }
+                    else
+                    {
+                        dwValueLength = GatherDataFromEditBox(hwndDlg, 
DlgData->VarData);
+                    }
+
+                    if (dwValueLength == 0)
                     {
-                        LPTSTR p;
-
-                        if (VarData->lpName == NULL)
-                        {
-                            VarData->lpName = GlobalAlloc(GPTR, (dwNameLength 
+ 1) * sizeof(TCHAR));
-                        }
-                        else if (_tcslen(VarData->lpName) < dwNameLength)
-                        {
-                            GlobalFree(VarData->lpName);
-                            VarData->lpName = GlobalAlloc(GPTR, (dwNameLength 
+ 1) * sizeof(TCHAR));
-                        }
-                        SendDlgItemMessage(hwndDlg, IDC_VARIABLE_NAME, 
WM_GETTEXT, dwNameLength + 1, (LPARAM)VarData->lpName);
-
-                        if (VarData->lpRawValue == NULL)
-                        {
-                            VarData->lpRawValue = GlobalAlloc(GPTR, 
(dwValueLength + 1) * sizeof(TCHAR));
-                        }
-                        else if (_tcslen(VarData->lpRawValue) < dwValueLength)
-                        {
-                            GlobalFree(VarData->lpRawValue);
-                            VarData->lpRawValue = GlobalAlloc(GPTR, 
(dwValueLength + 1) * sizeof(TCHAR));
-                        }
-                        SendDlgItemMessage(hwndDlg, IDC_VARIABLE_VALUE, 
WM_GETTEXT, dwValueLength + 1, (LPARAM)VarData->lpRawValue);
-
-                        if (VarData->lpCookedValue != NULL)
-                        {
-                            GlobalFree(VarData->lpCookedValue);
-                            VarData->lpCookedValue = NULL;
-                        }
-
-                        p = _tcschr(VarData->lpRawValue, _T('%'));
-                        if (p && _tcschr(++p, _T('%')))
-                        {
-                            VarData->dwType = REG_EXPAND_SZ;
-                            VarData->lpCookedValue = GlobalAlloc(GPTR, 2 * 
MAX_PATH * sizeof(TCHAR));
-
-                            ExpandEnvironmentStrings(VarData->lpRawValue,
-                                                     VarData->lpCookedValue,
-                                                     2 * MAX_PATH);
-                        }
-                        else
-                        {
-                            VarData->dwType = REG_SZ;
-                            VarData->lpCookedValue = GlobalAlloc(GPTR, 
(dwValueLength + 1) * sizeof(TCHAR));
-                            _tcscpy(VarData->lpCookedValue, 
VarData->lpRawValue);
-                        }
+                        break;
+                    }
+
+                    if (DlgData->VarData->lpCookedValue != NULL)
+                    {
+                        GlobalFree(DlgData->VarData->lpCookedValue);
+                        DlgData->VarData->lpCookedValue = NULL;
+                    }
+
+                    p = _tcschr(DlgData->VarData->lpRawValue, _T('%'));
+                    if (p && _tcschr(++p, _T('%')))
+                    {
+                        DlgData->VarData->dwType = REG_EXPAND_SZ;
+
+                        DlgData->VarData->lpCookedValue = GlobalAlloc(GPTR, 2 
* MAX_PATH * sizeof(TCHAR));
+                        if (!DlgData->VarData->lpCookedValue)
+                            return FALSE;
+
+                        ExpandEnvironmentStrings(DlgData->VarData->lpRawValue,
+                                                 
DlgData->VarData->lpCookedValue,
+                                                 2 * MAX_PATH);
+                    }
+                    else
+                    {
+                        DlgData->VarData->dwType = REG_SZ;
+
+                        DlgData->VarData->lpCookedValue = GlobalAlloc(GPTR, 
(dwValueLength + 1) * sizeof(TCHAR));
+                        if (!DlgData->VarData->lpCookedValue)
+                            return FALSE;
+
+                        _tcscpy(DlgData->VarData->lpCookedValue, 
DlgData->VarData->lpRawValue);
                     }
+
                     EndDialog(hwndDlg, 1);
                     return TRUE;
+                }
 
                 case IDCANCEL:
                     EndDialog(hwndDlg, 0);
                     return TRUE;
+
+                case IDC_BUTTON_BROWSE_FILE:
+                {
+                    BrowseRequiredFile(hwndDlg);
+                    break;
+                }
+
+                case IDC_BUTTON_BROWSE_FOLDER:
+                {
+                    BrowseRequiredFolder(hwndDlg, DlgData);
+                    break;
+                }
+
+                case IDC_BUTTON_DELETE:
+                {
+                    DWORD dwLastIndex;
+
+                    dwLastIndex = ListView_GetItemCount(hwndListView) - 1;
+                    ListView_DeleteItem(hwndListView, 
DlgData->dwSelectedValueIndex);
+
+                    if (dwLastIndex == DlgData->dwSelectedValueIndex)
+                    {
+                        DlgData->dwSelectedValueIndex--;
+                    }
+
+                    ListView_SetItemState(hwndListView, 
DlgData->dwSelectedValueIndex,
+                                          LVIS_FOCUSED | LVIS_SELECTED,
+                                          LVIS_FOCUSED | LVIS_SELECTED);
+                    break;
+                }
+
+                case IDC_BUTTON_MOVE_UP:
+                {
+                    MoveListItem(hwndDlg, DlgData, TRUE);
+                    break;
+                }
+
+                case IDC_BUTTON_MOVE_DOWN:
+                {
+                    MoveListItem(hwndDlg, DlgData, FALSE);
+                    break;
+                }
+
+                case IDC_BUTTON_EDIT_TEXT:
+                {
+                    TCHAR szStr[MAX_STR_LENGTH] = _T("");
+                    TCHAR szStr2[MAX_STR_LENGTH] = _T("");
+
+                    LoadString(hApplet, IDS_ENVIRONMENT_WARNING, szStr, 
_countof(szStr));
+                    LoadString(hApplet, IDS_ENVIRONMENT_WARNING_TITLE, szStr2, 
_countof(szStr2));
+                    
+                    if (MessageBox(hwndDlg,
+                                   szStr,
+                                   szStr2,
+                                   MB_OKCANCEL | MB_ICONWARNING | 
MB_DEFBUTTON1) == IDOK)
+                    {
+                        EndDialog(hwndDlg, -1);
+                    }
+                    break;
+                }
+
+                case IDC_BUTTON_NEW:
+                {                    
+                    DlgData->dwSelectedValueIndex = 
ListView_GetItemCount(hwndListView);
+                    AddEmptyItem(hwndListView, DlgData->dwSelectedValueIndex);
+                    ListView_EditLabel(hwndListView, 
DlgData->dwSelectedValueIndex);
+                    break;
+                }
+
+                case IDC_BUTTON_EDIT:
+                {
+                    ListView_EditLabel(hwndListView, 
DlgData->dwSelectedValueIndex);
+                    break;
+                }
             }
             break;
     }
@@ -345,43 +1180,51 @@ OnNewVariable(HWND hwndDlg,
               INT iDlgItem)
 {
     HWND hwndListView;
-    PVARIABLE_DATA VarData;
+    PEDIT_DIALOG_DATA DlgData;
     LV_ITEM lvi;
     INT iItem;
 
+    DlgData = GlobalAlloc(GPTR, sizeof(EDIT_DIALOG_DATA));
+    if (!DlgData)
+        return;
+
     hwndListView = GetDlgItem(hwndDlg, iDlgItem);
+    DlgData->dwDlgID = IDD_EDIT_VARIABLE;
+    DlgData->dwSelectedValueIndex = -1;
 
-    VarData = GlobalAlloc(GPTR, sizeof(VARIABLE_DATA));
+    DlgData->VarData = GlobalAlloc(GPTR, sizeof(VARIABLE_DATA));
+    if (!DlgData->VarData)
+        return;
 
     if (DialogBoxParam(hApplet,
-                       MAKEINTRESOURCE(IDD_EDIT_VARIABLE),
+                       MAKEINTRESOURCE(DlgData->dwDlgID),
                        hwndDlg,
                        EditVariableDlgProc,
-                       (LPARAM)VarData) <= 0)
+                       (LPARAM)DlgData) <= 0)
     {
-        if (VarData->lpName != NULL)
-            GlobalFree(VarData->lpName);
+        if (DlgData->VarData->lpName != NULL)
+            GlobalFree(DlgData->VarData->lpName);
 
-        if (VarData->lpRawValue != NULL)
-            GlobalFree(VarData->lpRawValue);
+        if (DlgData->VarData->lpRawValue != NULL)
+            GlobalFree(DlgData->VarData->lpRawValue);
 
-        if (VarData->lpCookedValue != NULL)
-            GlobalFree(VarData->lpCookedValue);
+        if (DlgData->VarData->lpCookedValue != NULL)
+            GlobalFree(DlgData->VarData->lpCookedValue);
 
-        GlobalFree(VarData);
+        GlobalFree(DlgData);
     }
     else
     {
-        if (VarData->lpName != NULL && (VarData->lpCookedValue || 
VarData->lpRawValue))
+        if (DlgData->VarData->lpName != NULL && 
(DlgData->VarData->lpCookedValue || DlgData->VarData->lpRawValue))
         {
-            memset(&lvi, 0x00, sizeof(lvi));
+            ZeroMemory(&lvi, sizeof(lvi));
             lvi.mask = LVIF_TEXT | LVIF_STATE | LVIF_PARAM;
-            lvi.lParam = (LPARAM)VarData;
-            lvi.pszText = VarData->lpName;
+            lvi.lParam = (LPARAM)DlgData->VarData;
+            lvi.pszText = DlgData->VarData->lpName;
             lvi.state = 0;
             iItem = ListView_InsertItem(hwndListView, &lvi);
 
-            ListView_SetItemText(hwndListView, iItem, 1, 
VarData->lpCookedValue);
+            ListView_SetItemText(hwndListView, iItem, 1, 
DlgData->VarData->lpCookedValue);
         }
     }
 }
@@ -392,33 +1235,60 @@ OnEditVariable(HWND hwndDlg,
                INT iDlgItem)
 {
     HWND hwndListView;
-    PVARIABLE_DATA VarData;
+    PEDIT_DIALOG_DATA DlgData;
     LV_ITEM lvi;
     INT iItem;
+    INT iRet;
 
+    DlgData = GlobalAlloc(GPTR, sizeof(EDIT_DIALOG_DATA));
+    if (!DlgData)
+        return;
+    
+    DlgData->dwDlgID = IDD_EDIT_VARIABLE;
+    DlgData->dwSelectedValueIndex = -1;
+    
     hwndListView = GetDlgItem(hwndDlg, iDlgItem);
 
     iItem = GetSelectedListViewItem(hwndListView);
     if (iItem != -1)
     {
-        memset(&lvi, 0x00, sizeof(lvi));
+        ZeroMemory(&lvi, sizeof(lvi));
         lvi.mask = LVIF_PARAM;
         lvi.iItem = iItem;
 
         if (ListView_GetItem(hwndListView, &lvi))
         {
-            VarData = (PVARIABLE_DATA)lvi.lParam;
+            DlgData->VarData = (PVARIABLE_DATA)lvi.lParam;
 
-            if (DialogBoxParam(hApplet,
-                               MAKEINTRESOURCE(IDD_EDIT_VARIABLE),
-                               hwndDlg,
-                               EditVariableDlgProc,
-                               (LPARAM)VarData) > 0)
+            /* If the value has multiple values and directories then edit 
value with fancy dialog box */
+            if (DetermineDialogBoxType(DlgData->VarData->lpRawValue))
+                DlgData->dwDlgID = IDD_EDIT_VARIABLE_FANCY;
+
+            iRet = DialogBoxParam(hApplet,
+                                  MAKEINTRESOURCE(DlgData->dwDlgID),
+                                  hwndDlg,
+                                  EditVariableDlgProc,
+                                  (LPARAM)DlgData);
+
+            /* If iRet is less than 0 edit the value and name normally */
+            if (iRet < 0)
             {
-                ListView_SetItemText(hwndListView, iItem, 0, VarData->lpName);
-                ListView_SetItemText(hwndListView, iItem, 1, 
VarData->lpCookedValue);
+                DlgData->dwDlgID = IDD_EDIT_VARIABLE;
+                iRet = DialogBoxParam(hApplet,
+                                      MAKEINTRESOURCE(DlgData->dwDlgID),
+                                      hwndDlg,
+                                      EditVariableDlgProc,
+                                      (LPARAM)DlgData);
+            }
+            
+            if (iRet > 0)
+            {
+                ListView_SetItemText(hwndListView, iItem, 0, 
DlgData->VarData->lpName);
+                ListView_SetItemText(hwndListView, iItem, 1, 
DlgData->VarData->lpCookedValue);
             }
         }
+
+        GlobalFree(DlgData);
     }
 }
 
diff --git a/dll/cpl/sysdm/lang/bg-BG.rc b/dll/cpl/sysdm/lang/bg-BG.rc
index c32102725a3..39d2ecbcdfe 100644
--- a/dll/cpl/sysdm/lang/bg-BG.rc
+++ b/dll/cpl/sysdm/lang/bg-BG.rc
@@ -278,17 +278,39 @@ BEGIN
     PUSHBUTTON "Отказ", IDCANCEL, 195, 224, 50, 14
 END
 
-IDD_EDIT_VARIABLE DIALOGEX 10, 15, 227, 71
-STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_VISIBLE | 
WS_CAPTION | WS_SYSMENU
+IDD_EDIT_VARIABLE DIALOGEX 10, 15, 372, 71
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION | 
WS_VISIBLE | WS_THICKFRAME
+CAPTION "Обработка на променливата"
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
+BEGIN
+    SCROLLBAR IDC_DIALOG_GRIP, 365, 64, 7, 7, SBS_SIZEGRIP
+    LTEXT "&Име на променливата:", IDC_STATIC, 7, 14, 50, 8
+    EDITTEXT IDC_VARIABLE_NAME, 75, 12, 289, 12, ES_AUTOHSCROLL
+    LTEXT "&Стойност на променливата:", IDC_STATIC, 7, 32, 50, 8
+    EDITTEXT IDC_VARIABLE_VALUE, 75, 30, 289, 12, ES_AUTOHSCROLL
+    DEFPUSHBUTTON "Добре", IDOK, 260, 50, 50, 14
+    PUSHBUTTON "Отказ", IDCANCEL, 314, 50, 50, 14
+    PUSHBUTTON "Browse Directory...", IDC_BUTTON_BROWSE_FOLDER, 6, 50, 75, 14
+    PUSHBUTTON "Browse Files...", IDC_BUTTON_BROWSE_FILE, 86, 50, 75, 14
+END
+
+IDD_EDIT_VARIABLE_FANCY DIALOGEX 10, 15, 300, 250
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION | 
WS_VISIBLE | WS_THICKFRAME
 CAPTION "Обработка на променливата"
 FONT 8, "MS Shell Dlg", 0, 0, 0x0
 BEGIN
-    LTEXT "&Име на променливата", IDC_STATIC, 7, 14, 68, 8
-    EDITTEXT IDC_VARIABLE_NAME, 88, 12, 135, 12, ES_AUTOHSCROLL
-    LTEXT "&Стойност на променливата", IDC_STATIC, 7, 32, 68, 8
-    EDITTEXT IDC_VARIABLE_VALUE, 88, 30, 135, 12, ES_AUTOHSCROLL
-    DEFPUSHBUTTON "Добре", IDOK, 116, 50, 50, 14
-    PUSHBUTTON "Отказ", IDCANCEL, 170, 50, 50, 14
+    SCROLLBAR IDC_DIALOG_GRIP, 293, 243, 7, 7, SBS_SIZEGRIP
+    CONTROL "", IDC_LIST_VARIABLE_VALUE, "SysListView32", LVS_NOCOLUMNHEADER | 
LVS_EDITLABELS | LVS_SHOWSELALWAYS |
+                LVS_SINGLESEL | LVS_REPORT | WS_BORDER | WS_TABSTOP, 10, 10, 
224, 208, WS_EX_CLIENTEDGE
+    PUSHBUTTON "New", IDC_BUTTON_NEW, 242, 10, 50, 14
+    PUSHBUTTON "Edit", IDC_BUTTON_EDIT, 242, 30, 50, 14
+    PUSHBUTTON "Browse...", IDC_BUTTON_BROWSE_FOLDER, 242, 50, 50, 14
+    PUSHBUTTON "Delete", IDC_BUTTON_DELETE, 242, 70, 50, 14
+    PUSHBUTTON "Move Up", IDC_BUTTON_MOVE_UP, 242, 100, 50, 14
+    PUSHBUTTON "Move Down", IDC_BUTTON_MOVE_DOWN, 242, 120, 50, 14
+    PUSHBUTTON "Edit text...", IDC_BUTTON_EDIT_TEXT, 242, 150, 50, 14
+    DEFPUSHBUTTON "Добре", IDOK, 188, 228, 50, 14
+    PUSHBUTTON "Отказ", IDCANCEL, 242, 228, 50, 14
 END
 
 IDD_LICENCE DIALOGEX 6, 5, 267, 159
@@ -344,4 +366,6 @@ BEGIN
     IDS_HWPROFILE_ALREADY_IN_USE "The profile name is already in use."
     IDS_HWPROFILE_PROFILE "Profile"
     IDS_HWPROFILE_WARNING "Warning"
+    IDS_ENVIRONMENT_WARNING "Any changes that have been done will be discarded 
and the variable's value will be edited as text."
+    IDS_ENVIRONMENT_WARNING_TITLE "System Properties"
 END
diff --git a/dll/cpl/sysdm/lang/cs-CZ.rc b/dll/cpl/sysdm/lang/cs-CZ.rc
index d16ee52ff83..4c119804071 100644
--- a/dll/cpl/sysdm/lang/cs-CZ.rc
+++ b/dll/cpl/sysdm/lang/cs-CZ.rc
@@ -283,17 +283,39 @@ BEGIN
     PUSHBUTTON "Storno", IDCANCEL, 195, 224, 50, 14
 END
 
-IDD_EDIT_VARIABLE DIALOGEX 10, 15, 227, 71
-STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_VISIBLE | 
WS_CAPTION | WS_SYSMENU
+IDD_EDIT_VARIABLE DIALOGEX 10, 15, 372, 71
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION | 
WS_VISIBLE | WS_THICKFRAME
+CAPTION "Úpravy proměnných"
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
+BEGIN
+    SCROLLBAR IDC_DIALOG_GRIP, 365, 64, 7, 7, SBS_SIZEGRIP
+    LTEXT "&Název proměnné:", IDC_STATIC, 7, 14, 50, 8
+    EDITTEXT IDC_VARIABLE_NAME, 75, 12, 289, 12, ES_AUTOHSCROLL
+    LTEXT "&Hodnota proměnné:", IDC_STATIC, 7, 32, 50, 8
+    EDITTEXT IDC_VARIABLE_VALUE, 75, 30, 289, 12, ES_AUTOHSCROLL
+    DEFPUSHBUTTON "OK", IDOK, 260, 50, 50, 14
+    PUSHBUTTON "Storno", IDCANCEL, 314, 50, 50, 14
+    PUSHBUTTON "Browse Directory...", IDC_BUTTON_BROWSE_FOLDER, 6, 50, 75, 14
+    PUSHBUTTON "Browse Files...", IDC_BUTTON_BROWSE_FILE, 86, 50, 75, 14
+END
+
+IDD_EDIT_VARIABLE_FANCY DIALOGEX 10, 15, 300, 250
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION | 
WS_VISIBLE | WS_THICKFRAME
 CAPTION "Úpravy proměnných"
 FONT 8, "MS Shell Dlg", 0, 0, 0x0
 BEGIN
-    LTEXT "&Název proměnné:", IDC_STATIC, 7, 14, 68, 8
-    EDITTEXT IDC_VARIABLE_NAME, 75, 12, 145, 12, ES_AUTOHSCROLL
-    LTEXT "&Hodnota proměnné:", IDC_STATIC, 7, 32, 68, 8
-    EDITTEXT IDC_VARIABLE_VALUE, 75, 30, 145, 12, ES_AUTOHSCROLL
-    DEFPUSHBUTTON "OK", IDOK, 116, 50, 50, 14
-    PUSHBUTTON "Storno", IDCANCEL, 170, 50, 50, 14
+    SCROLLBAR IDC_DIALOG_GRIP, 293, 243, 7, 7, SBS_SIZEGRIP
+    CONTROL "", IDC_LIST_VARIABLE_VALUE, "SysListView32", LVS_NOCOLUMNHEADER | 
LVS_EDITLABELS | LVS_SHOWSELALWAYS |
+                LVS_SINGLESEL | LVS_REPORT | WS_BORDER | WS_TABSTOP, 10, 10, 
224, 208, WS_EX_CLIENTEDGE
+    PUSHBUTTON "New", IDC_BUTTON_NEW, 242, 10, 50, 14
+    PUSHBUTTON "Edit", IDC_BUTTON_EDIT, 242, 30, 50, 14
+    PUSHBUTTON "Browse...", IDC_BUTTON_BROWSE_FOLDER, 242, 50, 50, 14
+    PUSHBUTTON "Delete", IDC_BUTTON_DELETE, 242, 70, 50, 14
+    PUSHBUTTON "Move Up", IDC_BUTTON_MOVE_UP, 242, 100, 50, 14
+    PUSHBUTTON "Move Down", IDC_BUTTON_MOVE_DOWN, 242, 120, 50, 14
+    PUSHBUTTON "Edit text...", IDC_BUTTON_EDIT_TEXT, 242, 150, 50, 14
+    DEFPUSHBUTTON "OK", IDOK, 188, 228, 50, 14
+    PUSHBUTTON "Storno", IDCANCEL, 242, 228, 50, 14
 END
 
 IDD_LICENCE DIALOGEX 6, 5, 267, 159
@@ -349,4 +371,6 @@ BEGIN
     IDS_HWPROFILE_ALREADY_IN_USE "Zadané jméno profilu se již používá."
     IDS_HWPROFILE_PROFILE "Profil"
     IDS_HWPROFILE_WARNING "Varování"
+    IDS_ENVIRONMENT_WARNING "Any changes that have been done will be discarded 
and the variable's value will be edited as text."
+    IDS_ENVIRONMENT_WARNING_TITLE "System Properties"
 END
diff --git a/dll/cpl/sysdm/lang/da-DK.rc b/dll/cpl/sysdm/lang/da-DK.rc
index 4ead9c8f275..bd3bf415d88 100644
--- a/dll/cpl/sysdm/lang/da-DK.rc
+++ b/dll/cpl/sysdm/lang/da-DK.rc
@@ -278,17 +278,39 @@ BEGIN
     PUSHBUTTON "Fortryd", IDCANCEL, 195, 224, 50, 14
 END
 
-IDD_EDIT_VARIABLE DIALOGEX 10, 15, 227, 71
-STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_VISIBLE | 
WS_CAPTION | WS_SYSMENU
+IDD_EDIT_VARIABLE DIALOGEX 10, 15, 372, 71
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION | 
WS_VISIBLE | WS_THICKFRAME
+CAPTION "Redigere Variable"
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
+BEGIN
+    SCROLLBAR IDC_DIALOG_GRIP, 365, 64, 7, 7, SBS_SIZEGRIP
+    LTEXT "&Navn:", IDC_STATIC, 7, 14, 50, 8
+    EDITTEXT IDC_VARIABLE_NAME, 75, 12, 289, 12, ES_AUTOHSCROLL
+    LTEXT "&Indhold:", IDC_STATIC, 7, 32, 50, 8
+    EDITTEXT IDC_VARIABLE_VALUE, 75, 30, 289, 12, ES_AUTOHSCROLL
+    DEFPUSHBUTTON "OK", IDOK, 260, 50, 50, 14
+    PUSHBUTTON "Fortryd", IDCANCEL, 314, 50, 50, 14
+    PUSHBUTTON "Browse Directory...", IDC_BUTTON_BROWSE_FOLDER, 6, 50, 75, 14
+    PUSHBUTTON "Browse Files...", IDC_BUTTON_BROWSE_FILE, 86, 50, 75, 14
+END
+
+IDD_EDIT_VARIABLE_FANCY DIALOGEX 10, 15, 300, 250
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION | 
WS_VISIBLE | WS_THICKFRAME
 CAPTION "Redigere Variable"
 FONT 8, "MS Shell Dlg", 0, 0, 0x0
 BEGIN
-    LTEXT "&Navn:", IDC_STATIC, 7, 14, 68, 8
-    EDITTEXT IDC_VARIABLE_NAME, 75, 12, 145, 12, ES_AUTOHSCROLL
-    LTEXT "&Indhold:", IDC_STATIC, 7, 32, 68, 8
-    EDITTEXT IDC_VARIABLE_VALUE, 75, 30, 145, 12, ES_AUTOHSCROLL
-    DEFPUSHBUTTON "OK", IDOK, 116, 50, 50, 14
-    PUSHBUTTON "Fortryd", IDCANCEL, 170, 50, 50, 14
+    SCROLLBAR IDC_DIALOG_GRIP, 293, 243, 7, 7, SBS_SIZEGRIP
+    CONTROL "", IDC_LIST_VARIABLE_VALUE, "SysListView32", LVS_NOCOLUMNHEADER | 
LVS_EDITLABELS | LVS_SHOWSELALWAYS |
+                LVS_SINGLESEL | LVS_REPORT | WS_BORDER | WS_TABSTOP, 10, 10, 
224, 208, WS_EX_CLIENTEDGE
+    PUSHBUTTON "New", IDC_BUTTON_NEW, 242, 10, 50, 14
+    PUSHBUTTON "Edit", IDC_BUTTON_EDIT, 242, 30, 50, 14
+    PUSHBUTTON "Browse...", IDC_BUTTON_BROWSE_FOLDER, 242, 50, 50, 14
+    PUSHBUTTON "Delete", IDC_BUTTON_DELETE, 242, 70, 50, 14
+    PUSHBUTTON "Move Up", IDC_BUTTON_MOVE_UP, 242, 100, 50, 14
+    PUSHBUTTON "Move Down", IDC_BUTTON_MOVE_DOWN, 242, 120, 50, 14
+    PUSHBUTTON "Edit text...", IDC_BUTTON_EDIT_TEXT, 242, 150, 50, 14
+    DEFPUSHBUTTON "OK", IDOK, 188, 228, 50, 14
+    PUSHBUTTON "Fortryd", IDCANCEL, 242, 228, 50, 14
 END
 
 IDD_LICENCE DIALOGEX 6, 5, 267, 159
@@ -344,4 +366,6 @@ BEGIN
     IDS_HWPROFILE_ALREADY_IN_USE "The profile name is already in use."
     IDS_HWPROFILE_PROFILE "Profile"
     IDS_HWPROFILE_WARNING "Warning"
+    IDS_ENVIRONMENT_WARNING "Any changes that have been done will be discarded 
and the variable's value will be edited as text."
+    IDS_ENVIRONMENT_WARNING_TITLE "System Properties"
 END
diff --git a/dll/cpl/sysdm/lang/de-DE.rc b/dll/cpl/sysdm/lang/de-DE.rc
index 345d19913e5..b8aff646b38 100644
--- a/dll/cpl/sysdm/lang/de-DE.rc
+++ b/dll/cpl/sysdm/lang/de-DE.rc
@@ -287,17 +287,39 @@ BEGIN
     PUSHBUTTON "Abbrechen", IDCANCEL, 195, 224, 50, 14
 END
 
-IDD_EDIT_VARIABLE DIALOGEX 10, 15, 227, 71
-STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_VISIBLE | 
WS_CAPTION | WS_SYSMENU
+IDD_EDIT_VARIABLE DIALOGEX 10, 15, 372, 71
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION | 
WS_VISIBLE | WS_THICKFRAME
+CAPTION "Variable bearbeiten"
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
+BEGIN
+    SCROLLBAR IDC_DIALOG_GRIP, 365, 64, 7, 7, SBS_SIZEGRIP
+    LTEXT "Variablen-&Name:", IDC_STATIC, 7, 14, 50, 8
+    EDITTEXT IDC_VARIABLE_NAME, 75, 12, 289, 12, ES_AUTOHSCROLL
+    LTEXT "Variablen-&Wert:", IDC_STATIC, 7, 32, 50, 8
+    EDITTEXT IDC_VARIABLE_VALUE, 75, 30, 289, 12, ES_AUTOHSCROLL
+    DEFPUSHBUTTON "OK", IDOK, 260, 50, 50, 14
+    PUSHBUTTON "Abbrechen", IDCANCEL, 314, 50, 50, 14
+    PUSHBUTTON "Browse Directory...", IDC_BUTTON_BROWSE_FOLDER, 6, 50, 75, 14
+    PUSHBUTTON "Browse Files...", IDC_BUTTON_BROWSE_FILE, 86, 50, 75, 14
+END
+
+IDD_EDIT_VARIABLE_FANCY DIALOGEX 10, 15, 300, 250
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION | 
WS_VISIBLE | WS_THICKFRAME
 CAPTION "Variable bearbeiten"
 FONT 8, "MS Shell Dlg", 0, 0, 0x0
 BEGIN
-    LTEXT "Variablen-&Name:", IDC_STATIC, 7, 14, 68, 8
-    EDITTEXT IDC_VARIABLE_NAME, 75, 12, 145, 12, ES_AUTOHSCROLL
-    LTEXT "Variablen-&Wert:", IDC_STATIC, 7, 32, 68, 8
-    EDITTEXT IDC_VARIABLE_VALUE, 75, 30, 145, 12, ES_AUTOHSCROLL
-    DEFPUSHBUTTON "OK", IDOK, 116, 50, 50, 14
-    PUSHBUTTON "Abbrechen", IDCANCEL, 170, 50, 50, 14
+    SCROLLBAR IDC_DIALOG_GRIP, 293, 243, 7, 7, SBS_SIZEGRIP
+    CONTROL "", IDC_LIST_VARIABLE_VALUE, "SysListView32", LVS_NOCOLUMNHEADER | 
LVS_EDITLABELS | LVS_SHOWSELALWAYS |
+                LVS_SINGLESEL | LVS_REPORT | WS_BORDER | WS_TABSTOP, 10, 10, 
224, 208, WS_EX_CLIENTEDGE
+    PUSHBUTTON "New", IDC_BUTTON_NEW, 242, 10, 50, 14
+    PUSHBUTTON "Edit", IDC_BUTTON_EDIT, 242, 30, 50, 14
+    PUSHBUTTON "Browse...", IDC_BUTTON_BROWSE_FOLDER, 242, 50, 50, 14
+    PUSHBUTTON "Delete", IDC_BUTTON_DELETE, 242, 70, 50, 14
+    PUSHBUTTON "Move Up", IDC_BUTTON_MOVE_UP, 242, 100, 50, 14
+    PUSHBUTTON "Move Down", IDC_BUTTON_MOVE_DOWN, 242, 120, 50, 14
+    PUSHBUTTON "Edit text...", IDC_BUTTON_EDIT_TEXT, 242, 150, 50, 14
+    DEFPUSHBUTTON "OK", IDOK, 188, 228, 50, 14
+    PUSHBUTTON "Abbrechen", IDCANCEL, 242, 228, 50, 14
 END
 
 IDD_LICENCE DIALOGEX 6, 5, 267, 159
@@ -353,4 +375,6 @@ BEGIN
     IDS_HWPROFILE_ALREADY_IN_USE "Der Profilname wird bereits verwendet."
     IDS_HWPROFILE_PROFILE "Profil"
     IDS_HWPROFILE_WARNING "Warnung"
+    IDS_ENVIRONMENT_WARNING "Any changes that have been done will be discarded 
and the variable's value will be edited as text."
+    IDS_ENVIRONMENT_WARNING_TITLE "System Properties"
 END
diff --git a/dll/cpl/sysdm/lang/el-GR.rc b/dll/cpl/sysdm/lang/el-GR.rc
index 59e550ba518..70d7896adce 100644
--- a/dll/cpl/sysdm/lang/el-GR.rc
+++ b/dll/cpl/sysdm/lang/el-GR.rc
@@ -278,17 +278,39 @@ BEGIN
     PUSHBUTTON "Άκυρο", IDCANCEL, 195, 224, 50, 14
 END
 
-IDD_EDIT_VARIABLE DIALOGEX 10, 15, 227, 71
-STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_VISIBLE | 
WS_CAPTION | WS_SYSMENU
+IDD_EDIT_VARIABLE DIALOGEX 10, 15, 372, 71
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION | 
WS_VISIBLE | WS_THICKFRAME
+CAPTION "Επεξεργασία μεταβλητής"
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
+BEGIN
+    SCROLLBAR IDC_DIALOG_GRIP, 365, 64, 7, 7, SBS_SIZEGRIP
+    LTEXT "Όνομα μεταβλητής:", IDC_STATIC, 7, 14, 50, 8
+    EDITTEXT IDC_VARIABLE_NAME, 75, 12, 289, 12, ES_AUTOHSCROLL
+    LTEXT "Τιμή μεταβλητής:", IDC_STATIC, 7, 32, 50, 8
+    EDITTEXT IDC_VARIABLE_VALUE, 75, 30, 289, 12, ES_AUTOHSCROLL
+    DEFPUSHBUTTON "OK", IDOK, 260, 50, 50, 14
+    PUSHBUTTON "Άκυρο", IDCANCEL, 314, 50, 50, 14
+    PUSHBUTTON "Browse Directory...", IDC_BUTTON_BROWSE_FOLDER, 6, 50, 75, 14
+    PUSHBUTTON "Browse Files...", IDC_BUTTON_BROWSE_FILE, 86, 50, 75, 14
+END
+
+IDD_EDIT_VARIABLE_FANCY DIALOGEX 10, 15, 300, 250
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION | 
WS_VISIBLE | WS_THICKFRAME
 CAPTION "Επεξεργασία μεταβλητής"
 FONT 8, "MS Shell Dlg", 0, 0, 0x0
 BEGIN
-    LTEXT "Όνομα μεταβλητής:", IDC_STATIC, 7, 14, 68, 8
-    EDITTEXT IDC_VARIABLE_NAME, 75, 12, 145, 12, ES_AUTOHSCROLL
-    LTEXT "Τιμή μεταβλητής:", IDC_STATIC, 7, 32, 68, 8
-    EDITTEXT IDC_VARIABLE_VALUE, 75, 30, 145, 12, ES_AUTOHSCROLL
-    DEFPUSHBUTTON "OK", IDOK, 116, 50, 50, 14
-    PUSHBUTTON "Άκυρο", IDCANCEL, 170, 50, 50, 14
+    SCROLLBAR IDC_DIALOG_GRIP, 293, 243, 7, 7, SBS_SIZEGRIP
+    CONTROL "", IDC_LIST_VARIABLE_VALUE, "SysListView32", LVS_NOCOLUMNHEADER | 
LVS_EDITLABELS | LVS_SHOWSELALWAYS |
+                LVS_SINGLESEL | LVS_REPORT | WS_BORDER | WS_TABSTOP, 10, 10, 
224, 208, WS_EX_CLIENTEDGE
+    PUSHBUTTON "New", IDC_BUTTON_NEW, 242, 10, 50, 14
+    PUSHBUTTON "Edit", IDC_BUTTON_EDIT, 242, 30, 50, 14
+    PUSHBUTTON "Browse...", IDC_BUTTON_BROWSE_FOLDER, 242, 50, 50, 14
+    PUSHBUTTON "Delete", IDC_BUTTON_DELETE, 242, 70, 50, 14
+    PUSHBUTTON "Move Up", IDC_BUTTON_MOVE_UP, 242, 100, 50, 14
+    PUSHBUTTON "Move Down", IDC_BUTTON_MOVE_DOWN, 242, 120, 50, 14
+    PUSHBUTTON "Edit text...", IDC_BUTTON_EDIT_TEXT, 242, 150, 50, 14
+    DEFPUSHBUTTON "OK", IDOK, 188, 228, 50, 14
+    PUSHBUTTON "Άκυρο", IDCANCEL, 242, 228, 50, 14
 END
 
 IDD_LICENCE DIALOGEX 6, 5, 267, 159
@@ -344,4 +366,6 @@ BEGIN
     IDS_HWPROFILE_ALREADY_IN_USE "The profile name is already in use."
     IDS_HWPROFILE_PROFILE "Profile"
     IDS_HWPROFILE_WARNING "Warning"
+    IDS_ENVIRONMENT_WARNING "Any changes that have been done will be discarded 
and the variable's value will be edited as text."
+    IDS_ENVIRONMENT_WARNING_TITLE "System Properties"
 END
diff --git a/dll/cpl/sysdm/lang/en-US.rc b/dll/cpl/sysdm/lang/en-US.rc
index 99798a3f52f..56d1f8739cb 100644
--- a/dll/cpl/sysdm/lang/en-US.rc
+++ b/dll/cpl/sysdm/lang/en-US.rc
@@ -278,17 +278,39 @@ BEGIN
     PUSHBUTTON "Cancel", IDCANCEL, 195, 224, 50, 14
 END
 
-IDD_EDIT_VARIABLE DIALOGEX 10, 15, 227, 71
-STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_VISIBLE | 
WS_CAPTION | WS_SYSMENU
+IDD_EDIT_VARIABLE DIALOGEX 10, 15, 372, 71
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION | 
WS_VISIBLE | WS_THICKFRAME
+CAPTION "Edit Variable"
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
+BEGIN
+    SCROLLBAR IDC_DIALOG_GRIP, 365, 64, 7, 7, SBS_SIZEGRIP
+    LTEXT "Variable &Name:", IDC_STATIC, 7, 14, 50, 8
+    EDITTEXT IDC_VARIABLE_NAME, 75, 12, 289, 12, ES_AUTOHSCROLL
+    LTEXT "Variable &Value:", IDC_STATIC, 7, 32, 50, 8
+    EDITTEXT IDC_VARIABLE_VALUE, 75, 30, 289, 12, ES_AUTOHSCROLL
+    DEFPUSHBUTTON "OK", IDOK, 260, 50, 50, 14
+    PUSHBUTTON "Cancel", IDCANCEL, 314, 50, 50, 14
+    PUSHBUTTON "Browse Directory...", IDC_BUTTON_BROWSE_FOLDER, 6, 50, 75, 14
+    PUSHBUTTON "Browse Files...", IDC_BUTTON_BROWSE_FILE, 86, 50, 75, 14
+END
+
+IDD_EDIT_VARIABLE_FANCY DIALOGEX 10, 15, 300, 250
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION | 
WS_VISIBLE | WS_THICKFRAME
 CAPTION "Edit Variable"
 FONT 8, "MS Shell Dlg", 0, 0, 0x0
 BEGIN
-    LTEXT "Variable &Name:", IDC_STATIC, 7, 14, 68, 8
-    EDITTEXT IDC_VARIABLE_NAME, 75, 12, 145, 12, ES_AUTOHSCROLL
-    LTEXT "Variable &Value:", IDC_STATIC, 7, 32, 68, 8
-    EDITTEXT IDC_VARIABLE_VALUE, 75, 30, 145, 12, ES_AUTOHSCROLL
-    DEFPUSHBUTTON "OK", IDOK, 116, 50, 50, 14
-    PUSHBUTTON "Cancel", IDCANCEL, 170, 50, 50, 14
+    SCROLLBAR IDC_DIALOG_GRIP, 293, 243, 7, 7, SBS_SIZEGRIP
+    CONTROL "", IDC_LIST_VARIABLE_VALUE, "SysListView32", LVS_NOCOLUMNHEADER | 
LVS_EDITLABELS | LVS_SHOWSELALWAYS |
+                LVS_SINGLESEL | LVS_REPORT | WS_BORDER | WS_TABSTOP, 10, 10, 
224, 208, WS_EX_CLIENTEDGE
+    PUSHBUTTON "New", IDC_BUTTON_NEW, 242, 10, 50, 14
+    PUSHBUTTON "Edit", IDC_BUTTON_EDIT, 242, 30, 50, 14
+    PUSHBUTTON "Browse...", IDC_BUTTON_BROWSE_FOLDER, 242, 50, 50, 14
+    PUSHBUTTON "Delete", IDC_BUTTON_DELETE, 242, 70, 50, 14
+    PUSHBUTTON "Move Up", IDC_BUTTON_MOVE_UP, 242, 100, 50, 14
+    PUSHBUTTON "Move Down", IDC_BUTTON_MOVE_DOWN, 242, 120, 50, 14
+    PUSHBUTTON "Edit text...", IDC_BUTTON_EDIT_TEXT, 242, 150, 50, 14
+    DEFPUSHBUTTON "OK", IDOK, 188, 228, 50, 14
+    PUSHBUTTON "Cancel", IDCANCEL, 242, 228, 50, 14
 END
 
 IDD_LICENCE DIALOGEX 6, 5, 267, 159
@@ -344,4 +366,6 @@ BEGIN
     IDS_HWPROFILE_ALREADY_IN_USE "The profile name is already in use."
     IDS_HWPROFILE_PROFILE "Profile"
     IDS_HWPROFILE_WARNING "Warning"
+    IDS_ENVIRONMENT_WARNING "Any changes that have been done will be discarded 
and the variable's value will be edited as text."
+    IDS_ENVIRONMENT_WARNING_TITLE "System Properties"
 END
diff --git a/dll/cpl/sysdm/lang/es-ES.rc b/dll/cpl/sysdm/lang/es-ES.rc
index f909851c9f1..d31fccadc50 100644
--- a/dll/cpl/sysdm/lang/es-ES.rc
+++ b/dll/cpl/sysdm/lang/es-ES.rc
@@ -280,17 +280,39 @@ BEGIN
     PUSHBUTTON "Cancelar", IDCANCEL, 195, 224, 50, 14
 END
 
-IDD_EDIT_VARIABLE DIALOGEX 10, 15, 227, 71
-STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_VISIBLE | 
WS_CAPTION | WS_SYSMENU
+IDD_EDIT_VARIABLE DIALOGEX 10, 15, 372, 71
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION | 
WS_VISIBLE | WS_THICKFRAME
+CAPTION "Modificar la variable"
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
+BEGIN
+    SCROLLBAR IDC_DIALOG_GRIP, 365, 64, 7, 7, SBS_SIZEGRIP
+    LTEXT "&Nombre:", IDC_STATIC, 7, 14, 50, 8
+    EDITTEXT IDC_VARIABLE_NAME, 75, 12, 289, 12, ES_AUTOHSCROLL
+    LTEXT "&Valor:", IDC_STATIC, 7, 32, 50, 8
+    EDITTEXT IDC_VARIABLE_VALUE, 75, 30, 289, 12, ES_AUTOHSCROLL
+    DEFPUSHBUTTON "Aceptar", IDOK, 260, 50, 50, 14
+    PUSHBUTTON "Cancelar", IDCANCEL, 314, 50, 50, 14
+    PUSHBUTTON "Browse Directory...", IDC_BUTTON_BROWSE_FOLDER, 6, 50, 75, 14
+    PUSHBUTTON "Browse Files...", IDC_BUTTON_BROWSE_FILE, 86, 50, 75, 14
+END
+
+IDD_EDIT_VARIABLE_FANCY DIALOGEX 10, 15, 300, 250
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION | 
WS_VISIBLE | WS_THICKFRAME
 CAPTION "Modificar la variable"
 FONT 8, "MS Shell Dlg", 0, 0, 0x0
 BEGIN
-    LTEXT "&Nombre:", IDC_STATIC, 7, 14, 68, 8
-    EDITTEXT IDC_VARIABLE_NAME, 75, 12, 145, 12, ES_AUTOHSCROLL
-    LTEXT "&Valor:", IDC_STATIC, 7, 32, 68, 8
-    EDITTEXT IDC_VARIABLE_VALUE, 75, 30, 145, 12, ES_AUTOHSCROLL
-    DEFPUSHBUTTON "Aceptar", IDOK, 116, 50, 50, 14
-    PUSHBUTTON "Cancelar", IDCANCEL, 170, 50, 50, 14
+    SCROLLBAR IDC_DIALOG_GRIP, 293, 243, 7, 7, SBS_SIZEGRIP
+    CONTROL "", IDC_LIST_VARIABLE_VALUE, "SysListView32", LVS_NOCOLUMNHEADER | 
LVS_EDITLABELS | LVS_SHOWSELALWAYS |
+                LVS_SINGLESEL | LVS_REPORT | WS_BORDER | WS_TABSTOP, 10, 10, 
224, 208, WS_EX_CLIENTEDGE
+    PUSHBUTTON "New", IDC_BUTTON_NEW, 242, 10, 50, 14
+    PUSHBUTTON "Edit", IDC_BUTTON_EDIT, 242, 30, 50, 14
+    PUSHBUTTON "Browse...", IDC_BUTTON_BROWSE_FOLDER, 242, 50, 50, 14
+    PUSHBUTTON "Delete", IDC_BUTTON_DELETE, 242, 70, 50, 14
+    PUSHBUTTON "Move Up", IDC_BUTTON_MOVE_UP, 242, 100, 50, 14
+    PUSHBUTTON "Move Down", IDC_BUTTON_MOVE_DOWN, 242, 120, 50, 14
+    PUSHBUTTON "Edit text...", IDC_BUTTON_EDIT_TEXT, 242, 150, 50, 14
+    DEFPUSHBUTTON "Aceptar", IDOK, 188, 228, 50, 14
+    PUSHBUTTON "Cancelar", IDCANCEL, 242, 228, 50, 14
 END
 
 IDD_LICENCE DIALOGEX 6, 5, 267, 159
@@ -346,4 +368,6 @@ BEGIN
     IDS_HWPROFILE_ALREADY_IN_USE "El nombre de perfil ya está en uso."
     IDS_HWPROFILE_PROFILE "Perfil"
     IDS_HWPROFILE_WARNING "Advertencia"
+    IDS_ENVIRONMENT_WARNING "Any changes that have been done will be discarded 
and the variable's value will be edited as text."
+    IDS_ENVIRONMENT_WARNING_TITLE "System Properties"
 END
diff --git a/dll/cpl/sysdm/lang/fr-FR.rc b/dll/cpl/sysdm/lang/fr-FR.rc
index caccd6fa492..6246e3b270c 100644
--- a/dll/cpl/sysdm/lang/fr-FR.rc
+++ b/dll/cpl/sysdm/lang/fr-FR.rc
@@ -278,17 +278,39 @@ BEGIN
     PUSHBUTTON "Annuler", IDCANCEL, 195, 224, 50, 14
 END
 
-IDD_EDIT_VARIABLE DIALOGEX 10, 15, 227, 71
-STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_VISIBLE | 
WS_CAPTION | WS_SYSMENU
+IDD_EDIT_VARIABLE DIALOGEX 10, 15, 372, 71
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION | 
WS_VISIBLE | WS_THICKFRAME
+CAPTION "Modifier la variable"
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
+BEGIN
+    SCROLLBAR IDC_DIALOG_GRIP, 365, 64, 7, 7, SBS_SIZEGRIP
+    LTEXT "&Nom de la variable :", IDC_STATIC, 7, 14, 50, 8
+    EDITTEXT IDC_VARIABLE_NAME, 75, 12, 289, 12, ES_AUTOHSCROLL
+    LTEXT "&Valeur de la variable :", IDC_STATIC, 7, 32, 50, 8
+    EDITTEXT IDC_VARIABLE_VALUE, 75, 30, 289, 12, ES_AUTOHSCROLL
+    DEFPUSHBUTTON "OK", IDOK, 260, 50, 50, 14
+    PUSHBUTTON "Annuler", IDCANCEL, 314, 50, 50, 14
+    PUSHBUTTON "Browse Directory...", IDC_BUTTON_BROWSE_FOLDER, 6, 50, 75, 14
+    PUSHBUTTON "Browse Files...", IDC_BUTTON_BROWSE_FILE, 86, 50, 75, 14
+END
+
+IDD_EDIT_VARIABLE_FANCY DIALOGEX 10, 15, 300, 250
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION | 
WS_VISIBLE | WS_THICKFRAME
 CAPTION "Modifier la variable"
 FONT 8, "MS Shell Dlg", 0, 0, 0x0
 BEGIN
-    LTEXT "&Nom de la variable :", IDC_STATIC, 7, 14, 68, 8
-    EDITTEXT IDC_VARIABLE_NAME, 75, 12, 145, 12, ES_AUTOHSCROLL
-    LTEXT "&Valeur de la variable :", IDC_STATIC, 7, 32, 68, 8
-    EDITTEXT IDC_VARIABLE_VALUE, 75, 30, 145, 12, ES_AUTOHSCROLL
-    DEFPUSHBUTTON "OK", IDOK, 116, 50, 50, 14
-    PUSHBUTTON "Annuler", IDCANCEL, 170, 50, 50, 14
+    SCROLLBAR IDC_DIALOG_GRIP, 293, 243, 7, 7, SBS_SIZEGRIP
+    CONTROL "", IDC_LIST_VARIABLE_VALUE, "SysListView32", LVS_NOCOLUMNHEADER | 
LVS_EDITLABELS | LVS_SHOWSELALWAYS |
+                LVS_SINGLESEL | LVS_REPORT | WS_BORDER | WS_TABSTOP, 10, 10, 
224, 208, WS_EX_CLIENTEDGE
+    PUSHBUTTON "New", IDC_BUTTON_NEW, 242, 10, 50, 14
+    PUSHBUTTON "Edit", IDC_BUTTON_EDIT, 242, 30, 50, 14
+    PUSHBUTTON "Browse...", IDC_BUTTON_BROWSE_FOLDER, 242, 50, 50, 14
+    PUSHBUTTON "Delete", IDC_BUTTON_DELETE, 242, 70, 50, 14
+    PUSHBUTTON "Move Up", IDC_BUTTON_MOVE_UP, 242, 100, 50, 14
+    PUSHBUTTON "Move Down", IDC_BUTTON_MOVE_DOWN, 242, 120, 50, 14
+    PUSHBUTTON "Edit text...", IDC_BUTTON_EDIT_TEXT, 242, 150, 50, 14
+    DEFPUSHBUTTON "OK", IDOK, 188, 228, 50, 14
+    PUSHBUTTON "Annuler", IDCANCEL, 242, 228, 50, 14
 END
 
 IDD_LICENCE DIALOGEX 6, 5, 267, 159
@@ -344,4 +366,6 @@ BEGIN
     IDS_HWPROFILE_ALREADY_IN_USE "Le nom de profil est déjà utilisé."
     IDS_HWPROFILE_PROFILE "Profil"
     IDS_HWPROFILE_WARNING "Attention"
+    IDS_ENVIRONMENT_WARNING "Any changes that have been done will be discarded 
and the variable's value will be edited as text."
+    IDS_ENVIRONMENT_WARNING_TITLE "System Properties"
 END
diff --git a/dll/cpl/sysdm/lang/he-IL.rc b/dll/cpl/sysdm/lang/he-IL.rc
index 69fbc6791f2..622f65914aa 100644
--- a/dll/cpl/sysdm/lang/he-IL.rc
+++ b/dll/cpl/sysdm/lang/he-IL.rc
@@ -280,17 +280,39 @@ BEGIN
     PUSHBUTTON "ביטול", IDCANCEL, 195, 224, 50, 14
 END
 
-IDD_EDIT_VARIABLE DIALOGEX 10, 15, 227, 71
-STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_VISIBLE | 
WS_CAPTION | WS_SYSMENU
+IDD_EDIT_VARIABLE DIALOGEX 10, 15, 372, 71
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION | 
WS_VISIBLE | WS_THICKFRAME
+CAPTION "עריכת משתנה"
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
+BEGIN
+    SCROLLBAR IDC_DIALOG_GRIP, 365, 64, 7, 7, SBS_SIZEGRIP
+    LTEXT "שם המשתנה:", IDC_STATIC, 7, 14, 50, 8
+    EDITTEXT IDC_VARIABLE_NAME, 75, 12, 289, 12, ES_AUTOHSCROLL
+    LTEXT "שם הערך:", IDC_STATIC, 7, 32, 50, 8
+    EDITTEXT IDC_VARIABLE_VALUE, 75, 30, 289, 12, ES_AUTOHSCROLL
+    DEFPUSHBUTTON "אישור", IDOK, 260, 50, 50, 14
+    PUSHBUTTON "ביטול", IDCANCEL, 314, 50, 50, 14
+    PUSHBUTTON "Browse Directory...", IDC_BUTTON_BROWSE_FOLDER, 6, 50, 75, 14
+    PUSHBUTTON "Browse Files...", IDC_BUTTON_BROWSE_FILE, 86, 50, 75, 14
+END
+
+IDD_EDIT_VARIABLE_FANCY DIALOGEX 10, 15, 300, 250
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION | 
WS_VISIBLE | WS_THICKFRAME
 CAPTION "עריכת משתנה"
 FONT 8, "MS Shell Dlg", 0, 0, 0x0
 BEGIN
-    LTEXT "שם המשתנה:", IDC_STATIC, 7, 14, 68, 8
-    EDITTEXT IDC_VARIABLE_NAME, 75, 12, 145, 12, ES_AUTOHSCROLL
-    LTEXT "שם הערך:", IDC_STATIC, 7, 32, 68, 8
-    EDITTEXT IDC_VARIABLE_VALUE, 75, 30, 145, 12, ES_AUTOHSCROLL
-    DEFPUSHBUTTON "אישור", IDOK, 116, 50, 50, 14
-    PUSHBUTTON "ביטול", IDCANCEL, 170, 50, 50, 14
+    SCROLLBAR IDC_DIALOG_GRIP, 293, 243, 7, 7, SBS_SIZEGRIP
+    CONTROL "", IDC_LIST_VARIABLE_VALUE, "SysListView32", LVS_NOCOLUMNHEADER | 
LVS_EDITLABELS | LVS_SHOWSELALWAYS |
+                LVS_SINGLESEL | LVS_REPORT | WS_BORDER | WS_TABSTOP, 10, 10, 
224, 208, WS_EX_CLIENTEDGE
+    PUSHBUTTON "New", IDC_BUTTON_NEW, 242, 10, 50, 14
+    PUSHBUTTON "Edit", IDC_BUTTON_EDIT, 242, 30, 50, 14
+    PUSHBUTTON "Browse...", IDC_BUTTON_BROWSE_FOLDER, 242, 50, 50, 14
+    PUSHBUTTON "Delete", IDC_BUTTON_DELETE, 242, 70, 50, 14
+    PUSHBUTTON "Move Up", IDC_BUTTON_MOVE_UP, 242, 100, 50, 14
+    PUSHBUTTON "Move Down", IDC_BUTTON_MOVE_DOWN, 242, 120, 50, 14
+    PUSHBUTTON "Edit text...", IDC_BUTTON_EDIT_TEXT, 242, 150, 50, 14
+    DEFPUSHBUTTON "אישור", IDOK, 188, 228, 50, 14
+    PUSHBUTTON "ביטול", IDCANCEL, 242, 228, 50, 14
 END
 
 IDD_LICENCE DIALOGEX 6, 5, 267, 159
@@ -346,4 +368,6 @@ BEGIN
     IDS_HWPROFILE_ALREADY_IN_USE "The profile name is already in use."
     IDS_HWPROFILE_PROFILE "Profile"
     IDS_HWPROFILE_WARNING "Warning"
+    IDS_ENVIRONMENT_WARNING "Any changes that have been done will be discarded 
and the variable's value will be edited as text."
+    IDS_ENVIRONMENT_WARNING_TITLE "System Properties"
 END
diff --git a/dll/cpl/sysdm/lang/hu-HU.rc b/dll/cpl/sysdm/lang/hu-HU.rc
index 259f6fc2e23..b1e8ce6692e 100644
--- a/dll/cpl/sysdm/lang/hu-HU.rc
+++ b/dll/cpl/sysdm/lang/hu-HU.rc
@@ -280,17 +280,39 @@ BEGIN
     PUSHBUTTON "Mégse", IDCANCEL, 195, 224, 50, 14
 END
 
-IDD_EDIT_VARIABLE DIALOGEX 10, 15, 227, 71
-STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_VISIBLE | 
WS_CAPTION | WS_SYSMENU
+IDD_EDIT_VARIABLE DIALOGEX 10, 15, 372, 71
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION | 
WS_VISIBLE | WS_THICKFRAME
+CAPTION "Változó szerkesztése"
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
+BEGIN
+    SCROLLBAR IDC_DIALOG_GRIP, 365, 64, 7, 7, SBS_SIZEGRIP
+    LTEXT "Változó &neve:", IDC_STATIC, 7, 14, 50, 8
+    EDITTEXT IDC_VARIABLE_NAME, 75, 12, 289, 12, ES_AUTOHSCROLL
+    LTEXT "Vál&tozó értéke:", IDC_STATIC, 7, 32, 50, 8
+    EDITTEXT IDC_VARIABLE_VALUE, 75, 30, 289, 12, ES_AUTOHSCROLL
+    DEFPUSHBUTTON "Rendben", IDOK, 260, 50, 50, 14
+    PUSHBUTTON "Mégse", IDCANCEL, 314, 50, 50, 14
+    PUSHBUTTON "Browse Directory...", IDC_BUTTON_BROWSE_FOLDER, 6, 50, 75, 14
+    PUSHBUTTON "Browse Files...", IDC_BUTTON_BROWSE_FILE, 86, 50, 75, 14
+END
+
+IDD_EDIT_VARIABLE_FANCY DIALOGEX 10, 15, 300, 250
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION | 
WS_VISIBLE | WS_THICKFRAME
 CAPTION "Változó szerkesztése"
 FONT 8, "MS Shell Dlg", 0, 0, 0x0
 BEGIN
-    LTEXT "Változó &neve:", IDC_STATIC, 7, 14, 68, 8
-    EDITTEXT IDC_VARIABLE_NAME, 75, 12, 145, 12, ES_AUTOHSCROLL
-    LTEXT "Vál&tozó értéke:", IDC_STATIC, 7, 32, 68, 8
-    EDITTEXT IDC_VARIABLE_VALUE, 75, 30, 145, 12, ES_AUTOHSCROLL
-    DEFPUSHBUTTON "Rendben", IDOK, 116, 50, 50, 14
-    PUSHBUTTON "Mégse", IDCANCEL, 170, 50, 50, 14
+    SCROLLBAR IDC_DIALOG_GRIP, 293, 243, 7, 7, SBS_SIZEGRIP
+    CONTROL "", IDC_LIST_VARIABLE_VALUE, "SysListView32", LVS_NOCOLUMNHEADER | 
LVS_EDITLABELS | LVS_SHOWSELALWAYS |
+                LVS_SINGLESEL | LVS_REPORT | WS_BORDER | WS_TABSTOP, 10, 10, 
224, 208, WS_EX_CLIENTEDGE
+    PUSHBUTTON "New", IDC_BUTTON_NEW, 242, 10, 50, 14
+    PUSHBUTTON "Edit", IDC_BUTTON_EDIT, 242, 30, 50, 14
+    PUSHBUTTON "Browse...", IDC_BUTTON_BROWSE_FOLDER, 242, 50, 50, 14
+    PUSHBUTTON "Delete", IDC_BUTTON_DELETE, 242, 70, 50, 14
+    PUSHBUTTON "Move Up", IDC_BUTTON_MOVE_UP, 242, 100, 50, 14
+    PUSHBUTTON "Move Down", IDC_BUTTON_MOVE_DOWN, 242, 120, 50, 14
+    PUSHBUTTON "Edit text...", IDC_BUTTON_EDIT_TEXT, 242, 150, 50, 14
+    DEFPUSHBUTTON "Rendben", IDOK, 188, 228, 50, 14
+    PUSHBUTTON "Mégse", IDCANCEL, 242, 228, 50, 14
 END
 
 IDD_LICENCE DIALOGEX 6, 5, 267, 159
@@ -346,4 +368,6 @@ BEGIN
     IDS_HWPROFILE_ALREADY_IN_USE "Ez a profilnév már használatban van."
     IDS_HWPROFILE_PROFILE "Profil"
     IDS_HWPROFILE_WARNING "Figyelmeztetés"
+    IDS_ENVIRONMENT_WARNING "Any changes that have been done will be discarded 
and the variable's value will be edited as text."
+    IDS_ENVIRONMENT_WARNING_TITLE "System Properties"
 END
diff --git a/dll/cpl/sysdm/lang/id-ID.rc b/dll/cpl/sysdm/lang/id-ID.rc
index 81a674c1874..407d422ee82 100644
--- a/dll/cpl/sysdm/lang/id-ID.rc
+++ b/dll/cpl/sysdm/lang/id-ID.rc
@@ -278,17 +278,39 @@ BEGIN
     PUSHBUTTON "Batal", IDCANCEL, 195, 224, 50, 14
 END
 
-IDD_EDIT_VARIABLE DIALOGEX 10, 15, 227, 71
-STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_VISIBLE | 
WS_CAPTION | WS_SYSMENU
+IDD_EDIT_VARIABLE DIALOGEX 10, 15, 372, 71
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION | 
WS_VISIBLE | WS_THICKFRAME
+CAPTION "Edit Variabel"
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
+BEGIN
+    SCROLLBAR IDC_DIALOG_GRIP, 365, 64, 7, 7, SBS_SIZEGRIP
+    LTEXT "&Nama Variabel:", IDC_STATIC, 7, 14, 50, 8
+    EDITTEXT IDC_VARIABLE_NAME, 75, 12, 289, 12, ES_AUTOHSCROLL
+    LTEXT "N&ilai Variabel:", IDC_STATIC, 7, 32, 50, 8
+    EDITTEXT IDC_VARIABLE_VALUE, 75, 30, 289, 12, ES_AUTOHSCROLL
+    DEFPUSHBUTTON "OK", IDOK, 260, 50, 50, 14
+    PUSHBUTTON "Batal", IDCANCEL, 314, 50, 50, 14
+    PUSHBUTTON "Browse Directory...", IDC_BUTTON_BROWSE_FOLDER, 6, 50, 75, 14
+    PUSHBUTTON "Browse Files...", IDC_BUTTON_BROWSE_FILE, 86, 50, 75, 14
+END
+
+IDD_EDIT_VARIABLE_FANCY DIALOGEX 10, 15, 300, 250
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION | 
WS_VISIBLE | WS_THICKFRAME
 CAPTION "Edit Variabel"
 FONT 8, "MS Shell Dlg", 0, 0, 0x0
 BEGIN
-    LTEXT "&Nama Variabel:", IDC_STATIC, 7, 14, 68, 8
-    EDITTEXT IDC_VARIABLE_NAME, 75, 12, 145, 12, ES_AUTOHSCROLL
-    LTEXT "N&ilai Variabel:", IDC_STATIC, 7, 32, 68, 8
-    EDITTEXT IDC_VARIABLE_VALUE, 75, 30, 145, 12, ES_AUTOHSCROLL
-    DEFPUSHBUTTON "OK", IDOK, 116, 50, 50, 14
-    PUSHBUTTON "Batal", IDCANCEL, 170, 50, 50, 14
+    SCROLLBAR IDC_DIALOG_GRIP, 293, 243, 7, 7, SBS_SIZEGRIP
+    CONTROL "", IDC_LIST_VARIABLE_VALUE, "SysListView32", LVS_NOCOLUMNHEADER | 
LVS_EDITLABELS | LVS_SHOWSELALWAYS |
+                LVS_SINGLESEL | LVS_REPORT | WS_BORDER | WS_TABSTOP, 10, 10, 
224, 208, WS_EX_CLIENTEDGE
+    PUSHBUTTON "New", IDC_BUTTON_NEW, 242, 10, 50, 14
+    PUSHBUTTON "Edit", IDC_BUTTON_EDIT, 242, 30, 50, 14
+    PUSHBUTTON "Browse...", IDC_BUTTON_BROWSE_FOLDER, 242, 50, 50, 14
+    PUSHBUTTON "Delete", IDC_BUTTON_DELETE, 242, 70, 50, 14
+    PUSHBUTTON "Move Up", IDC_BUTTON_MOVE_UP, 242, 100, 50, 14
+    PUSHBUTTON "Move Down", IDC_BUTTON_MOVE_DOWN, 242, 120, 50, 14
+    PUSHBUTTON "Edit text...", IDC_BUTTON_EDIT_TEXT, 242, 150, 50, 14
+    DEFPUSHBUTTON "OK", IDOK, 188, 228, 50, 14
+    PUSHBUTTON "Batal", IDCANCEL, 242, 228, 50, 14
 END
 
 IDD_LICENCE DIALOGEX 6, 5, 267, 159
@@ -344,4 +366,6 @@ BEGIN
     IDS_HWPROFILE_ALREADY_IN_USE "Nama profil telah digunakan."
     IDS_HWPROFILE_PROFILE "Profil"
     IDS_HWPROFILE_WARNING "Peringatan"
+    IDS_ENVIRONMENT_WARNING "Any changes that have been done will be discarded 
and the variable's value will be edited as text."
+    IDS_ENVIRONMENT_WARNING_TITLE "System Properties"
 END
diff --git a/dll/cpl/sysdm/lang/it-IT.rc b/dll/cpl/sysdm/lang/it-IT.rc
index 584b60682de..88eb47de85d 100644
--- a/dll/cpl/sysdm/lang/it-IT.rc
+++ b/dll/cpl/sysdm/lang/it-IT.rc
@@ -278,17 +278,39 @@ BEGIN
     PUSHBUTTON "Annulla", IDCANCEL, 195, 224, 50, 14
 END
 
-IDD_EDIT_VARIABLE DIALOGEX 10, 15, 227, 71
-STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_VISIBLE | 
WS_CAPTION | WS_SYSMENU
+IDD_EDIT_VARIABLE DIALOGEX 10, 15, 372, 71
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION | 
WS_VISIBLE | WS_THICKFRAME
+CAPTION "Modifica variabile"
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
+BEGIN
+    SCROLLBAR IDC_DIALOG_GRIP, 365, 64, 7, 7, SBS_SIZEGRIP
+    LTEXT "&Nome della variabile:", IDC_STATIC, 7, 14, 50, 8
+    EDITTEXT IDC_VARIABLE_NAME, 75, 12, 289, 12, ES_AUTOHSCROLL
+    LTEXT "&Valore della variabile:", IDC_STATIC, 7, 32, 50, 8
+    EDITTEXT IDC_VARIABLE_VALUE, 75, 30, 289, 12, ES_AUTOHSCROLL
+    DEFPUSHBUTTON "OK", IDOK, 260, 50, 50, 14
+    PUSHBUTTON "Annulla", IDCANCEL, 314, 50, 50, 14
+    PUSHBUTTON "Browse Directory...", IDC_BUTTON_BROWSE_FOLDER, 6, 50, 75, 14
+    PUSHBUTTON "Browse Files...", IDC_BUTTON_BROWSE_FILE, 86, 50, 75, 14
+END
+
+IDD_EDIT_VARIABLE_FANCY DIALOGEX 10, 15, 300, 250
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION | 
WS_VISIBLE | WS_THICKFRAME
 CAPTION "Modifica variabile"
 FONT 8, "MS Shell Dlg", 0, 0, 0x0
 BEGIN
-    LTEXT "&Nome della variabile:", IDC_STATIC, 7, 14, 68, 8
-    EDITTEXT IDC_VARIABLE_NAME, 75, 12, 145, 12, ES_AUTOHSCROLL
-    LTEXT "&Valore della variabile :", IDC_STATIC, 7, 32, 68, 8
-    EDITTEXT IDC_VARIABLE_VALUE, 75, 30, 145, 12, ES_AUTOHSCROLL
-    DEFPUSHBUTTON "OK", IDOK, 116, 50, 50, 14
-    PUSHBUTTON "Annulla", IDCANCEL, 170, 50, 50, 14
+    SCROLLBAR IDC_DIALOG_GRIP, 293, 243, 7, 7, SBS_SIZEGRIP
+    CONTROL "", IDC_LIST_VARIABLE_VALUE, "SysListView32", LVS_NOCOLUMNHEADER | 
LVS_EDITLABELS | LVS_SHOWSELALWAYS |
+                LVS_SINGLESEL | LVS_REPORT | WS_BORDER | WS_TABSTOP, 10, 10, 
224, 208, WS_EX_CLIENTEDGE
+    PUSHBUTTON "New", IDC_BUTTON_NEW, 242, 10, 50, 14
+    PUSHBUTTON "Edit", IDC_BUTTON_EDIT, 242, 30, 50, 14
+    PUSHBUTTON "Browse...", IDC_BUTTON_BROWSE_FOLDER, 242, 50, 50, 14
+    PUSHBUTTON "Delete", IDC_BUTTON_DELETE, 242, 70, 50, 14
+    PUSHBUTTON "Move Up", IDC_BUTTON_MOVE_UP, 242, 100, 50, 14
+    PUSHBUTTON "Move Down", IDC_BUTTON_MOVE_DOWN, 242, 120, 50, 14
+    PUSHBUTTON "Edit text...", IDC_BUTTON_EDIT_TEXT, 242, 150, 50, 14
+    DEFPUSHBUTTON "OK", IDOK, 188, 228, 50, 14
+    PUSHBUTTON "Annulla", IDCANCEL, 242, 228, 50, 14
 END
 
 IDD_LICENCE DIALOGEX 6, 5, 267, 159
@@ -344,4 +366,6 @@ BEGIN
     IDS_HWPROFILE_ALREADY_IN_USE "The profile name is already in use."
     IDS_HWPROFILE_PROFILE "Profile"
     IDS_HWPROFILE_WARNING "Warning"
+    IDS_ENVIRONMENT_WARNING "Any changes that have been done will be discarded 
and the variable's value will be edited as text."
+    IDS_ENVIRONMENT_WARNING_TITLE "System Properties"
 END
diff --git a/dll/cpl/sysdm/lang/ja-JP.rc b/dll/cpl/sysdm/lang/ja-JP.rc
index 134afa9d40b..13dffad6000 100644
--- a/dll/cpl/sysdm/lang/ja-JP.rc
+++ b/dll/cpl/sysdm/lang/ja-JP.rc
@@ -278,17 +278,39 @@ BEGIN
     PUSHBUTTON "キャンセル", IDCANCEL, 195, 224, 50, 14
 END
 
-IDD_EDIT_VARIABLE DIALOGEX 10, 15, 227, 71
-STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_VISIBLE | 
WS_CAPTION | WS_SYSMENU
+IDD_EDIT_VARIABLE DIALOGEX 10, 15, 372, 71
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION | 
WS_VISIBLE | WS_THICKFRAME
+CAPTION "変数の編集"
+FONT 9, "MS UI Gothic", 0, 0, 0x0
+BEGIN
+    SCROLLBAR IDC_DIALOG_GRIP, 365, 64, 7, 7, SBS_SIZEGRIP
+    LTEXT "変数名(&N):", IDC_STATIC, 7, 14, 50, 8
+    EDITTEXT IDC_VARIABLE_NAME, 75, 12, 289, 12, ES_AUTOHSCROLL
+    LTEXT "変数の値(&V):", IDC_STATIC, 7, 32, 50, 8
+    EDITTEXT IDC_VARIABLE_VALUE, 75, 30, 289, 12, ES_AUTOHSCROLL
+    DEFPUSHBUTTON "OK", IDOK, 260, 50, 50, 14
+    PUSHBUTTON "キャンセル", IDCANCEL, 314, 50, 50, 14
+    PUSHBUTTON "Browse Directory...", IDC_BUTTON_BROWSE_FOLDER, 6, 50, 75, 14
+    PUSHBUTTON "Browse Files...", IDC_BUTTON_BROWSE_FILE, 86, 50, 75, 14
+END
+
+IDD_EDIT_VARIABLE_FANCY DIALOGEX 10, 15, 300, 250
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION | 
WS_VISIBLE | WS_THICKFRAME
 CAPTION "変数の編集"
 FONT 9, "MS UI Gothic", 0, 0, 0x0
 BEGIN
-    LTEXT "変数名(&N):", IDC_STATIC, 7, 14, 68, 8
-    EDITTEXT IDC_VARIABLE_NAME, 75, 12, 145, 12, ES_AUTOHSCROLL
-    LTEXT "変数の値(&V):", IDC_STATIC, 7, 32, 68, 8
-    EDITTEXT IDC_VARIABLE_VALUE, 75, 30, 145, 12, ES_AUTOHSCROLL
-    DEFPUSHBUTTON "OK", IDOK, 116, 50, 50, 14
-    PUSHBUTTON "キャンセル", IDCANCEL, 170, 50, 50, 14
+    SCROLLBAR IDC_DIALOG_GRIP, 293, 243, 7, 7, SBS_SIZEGRIP
+    CONTROL "", IDC_LIST_VARIABLE_VALUE, "SysListView32", LVS_NOCOLUMNHEADER | 
LVS_EDITLABELS | LVS_SHOWSELALWAYS |
+                LVS_SINGLESEL | LVS_REPORT | WS_BORDER | WS_TABSTOP, 10, 10, 
224, 208, WS_EX_CLIENTEDGE
+    PUSHBUTTON "New", IDC_BUTTON_NEW, 242, 10, 50, 14
+    PUSHBUTTON "Edit", IDC_BUTTON_EDIT, 242, 30, 50, 14
+    PUSHBUTTON "Browse...", IDC_BUTTON_BROWSE_FOLDER, 242, 50, 50, 14
+    PUSHBUTTON "Delete", IDC_BUTTON_DELETE, 242, 70, 50, 14
+    PUSHBUTTON "Move Up", IDC_BUTTON_MOVE_UP, 242, 100, 50, 14
+    PUSHBUTTON "Move Down", IDC_BUTTON_MOVE_DOWN, 242, 120, 50, 14
+    PUSHBUTTON "Edit text...", IDC_BUTTON_EDIT_TEXT, 242, 150, 50, 14
+    DEFPUSHBUTTON "OK", IDOK, 188, 228, 50, 14
+    PUSHBUTTON "キャンセル", IDCANCEL, 242, 228, 50, 14
 END
 
 IDD_LICENCE DIALOGEX 6, 5, 267, 159
@@ -344,4 +366,6 @@ BEGIN
     IDS_HWPROFILE_ALREADY_IN_USE "プロファイル名は使用中です。"
     IDS_HWPROFILE_PROFILE "プロファイル"
     IDS_HWPROFILE_WARNING "警告"
+    IDS_ENVIRONMENT_WARNING "Any changes that have been done will be discarded 
and the variable's value will be edited as text."
+    IDS_ENVIRONMENT_WARNING_TITLE "System Properties"
 END
diff --git a/dll/cpl/sysdm/lang/nl-NL.rc b/dll/cpl/sysdm/lang/nl-NL.rc
index 5b70da973af..f72ba8a7cbf 100644
--- a/dll/cpl/sysdm/lang/nl-NL.rc
+++ b/dll/cpl/sysdm/lang/nl-NL.rc
@@ -278,17 +278,39 @@ BEGIN
     PUSHBUTTON "Annuleren", IDCANCEL, 195, 224, 50, 14
 END
 
-IDD_EDIT_VARIABLE DIALOGEX 10, 15, 227, 71
-STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_VISIBLE | 
WS_CAPTION | WS_SYSMENU
+IDD_EDIT_VARIABLE DIALOGEX 10, 15, 372, 71
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION | 
WS_VISIBLE | WS_THICKFRAME
+CAPTION "Variabele bewerken"
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
+BEGIN
+    SCROLLBAR IDC_DIALOG_GRIP, 365, 64, 7, 7, SBS_SIZEGRIP
+    LTEXT "Naam van variabele:", IDC_STATIC, 7, 14, 50, 8
+    EDITTEXT IDC_VARIABLE_NAME, 75, 12, 289, 12, ES_AUTOHSCROLL
+    LTEXT "Waarde van variabele:", IDC_STATIC, 7, 32, 50, 8
+    EDITTEXT IDC_VARIABLE_VALUE, 75, 30, 289, 12, ES_AUTOHSCROLL
+    DEFPUSHBUTTON "OK", IDOK, 260, 50, 50, 14
+    PUSHBUTTON "Annuleren", IDCANCEL, 314, 50, 50, 14
+    PUSHBUTTON "Browse Directory...", IDC_BUTTON_BROWSE_FOLDER, 6, 50, 75, 14
+    PUSHBUTTON "Browse Files...", IDC_BUTTON_BROWSE_FILE, 86, 50, 75, 14
+END
+
+IDD_EDIT_VARIABLE_FANCY DIALOGEX 10, 15, 300, 250
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION | 
WS_VISIBLE | WS_THICKFRAME
 CAPTION "Variabele bewerken"
 FONT 8, "MS Shell Dlg", 0, 0, 0x0
 BEGIN
-    LTEXT "Naam van variabele:", IDC_STATIC, 7, 14, 68, 8
-    EDITTEXT IDC_VARIABLE_NAME, 75, 12, 145, 12, ES_AUTOHSCROLL
-    LTEXT "Waarde van variabele:", IDC_STATIC, 7, 32, 68, 8
-    EDITTEXT IDC_VARIABLE_VALUE, 75, 30, 145, 12, ES_AUTOHSCROLL
-    DEFPUSHBUTTON "OK", IDOK, 116, 50, 50, 14
-    PUSHBUTTON "Annuleren", IDCANCEL, 170, 50, 50, 14
+    SCROLLBAR IDC_DIALOG_GRIP, 293, 243, 7, 7, SBS_SIZEGRIP
+    CONTROL "", IDC_LIST_VARIABLE_VALUE, "SysListView32", LVS_NOCOLUMNHEADER | 
LVS_EDITLABELS | LVS_SHOWSELALWAYS |
+                LVS_SINGLESEL | LVS_REPORT | WS_BORDER | WS_TABSTOP, 10, 10, 
224, 208, WS_EX_CLIENTEDGE
+    PUSHBUTTON "New", IDC_BUTTON_NEW, 242, 10, 50, 14
+    PUSHBUTTON "Edit", IDC_BUTTON_EDIT, 242, 30, 50, 14
+    PUSHBUTTON "Browse...", IDC_BUTTON_BROWSE_FOLDER, 242, 50, 50, 14
+    PUSHBUTTON "Delete", IDC_BUTTON_DELETE, 242, 70, 50, 14
+    PUSHBUTTON "Move Up", IDC_BUTTON_MOVE_UP, 242, 100, 50, 14
+    PUSHBUTTON "Move Down", IDC_BUTTON_MOVE_DOWN, 242, 120, 50, 14
+    PUSHBUTTON "Edit text...", IDC_BUTTON_EDIT_TEXT, 242, 150, 50, 14
+    DEFPUSHBUTTON "OK", IDOK, 188, 228, 50, 14
+    PUSHBUTTON "Annuleren", IDCANCEL, 242, 228, 50, 14
 END
 
 IDD_LICENCE DIALOGEX 6, 5, 267, 159
@@ -344,4 +366,6 @@ BEGIN
     IDS_HWPROFILE_ALREADY_IN_USE "The profile name is already in use."
     IDS_HWPROFILE_PROFILE "Profile"
     IDS_HWPROFILE_WARNING "Warning"
+    IDS_ENVIRONMENT_WARNING "Any changes that have been done will be discarded 
and the variable's value will be edited as text."
+    IDS_ENVIRONMENT_WARNING_TITLE "System Properties"
 END
diff --git a/dll/cpl/sysdm/lang/no-NO.rc b/dll/cpl/sysdm/lang/no-NO.rc
index e2a4fb0684a..4441431cd16 100644
--- a/dll/cpl/sysdm/lang/no-NO.rc
+++ b/dll/cpl/sysdm/lang/no-NO.rc
@@ -278,17 +278,39 @@ BEGIN
     PUSHBUTTON "Avbryt", IDCANCEL, 195, 224, 50, 14
 END
 
-IDD_EDIT_VARIABLE DIALOGEX 10, 15, 227, 71
-STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_VISIBLE | 
WS_CAPTION | WS_SYSMENU
+IDD_EDIT_VARIABLE DIALOGEX 10, 15, 372, 71
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION | 
WS_VISIBLE | WS_THICKFRAME
+CAPTION "Rediger variabel"
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
+BEGIN
+    SCROLLBAR IDC_DIALOG_GRIP, 365, 64, 7, 7, SBS_SIZEGRIP
+    LTEXT "Variabel &navn:", IDC_STATIC, 7, 14, 50, 8
+    EDITTEXT IDC_VARIABLE_NAME, 75, 12, 289, 12, ES_AUTOHSCROLL
+    LTEXT "Variabel &verdi:", IDC_STATIC, 7, 32, 50, 8
+    EDITTEXT IDC_VARIABLE_VALUE, 75, 30, 289, 12, ES_AUTOHSCROLL
+    DEFPUSHBUTTON "OK", IDOK, 260, 50, 50, 14
+    PUSHBUTTON "Avbryt", IDCANCEL, 314, 50, 50, 14
+    PUSHBUTTON "Browse Directory...", IDC_BUTTON_BROWSE_FOLDER, 6, 50, 75, 14
+    PUSHBUTTON "Browse Files...", IDC_BUTTON_BROWSE_FILE, 86, 50, 75, 14
+END
+
+IDD_EDIT_VARIABLE_FANCY DIALOGEX 10, 15, 300, 250
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION | 
WS_VISIBLE | WS_THICKFRAME
 CAPTION "Rediger variabel"
 FONT 8, "MS Shell Dlg", 0, 0, 0x0
 BEGIN
-    LTEXT "Variabel &navn:", IDC_STATIC, 7, 14, 68, 8
-    EDITTEXT IDC_VARIABLE_NAME, 75, 12, 145, 12, ES_AUTOHSCROLL
-    LTEXT "Variabel &verdi:", IDC_STATIC, 7, 32, 68, 8
-    EDITTEXT IDC_VARIABLE_VALUE, 75, 30, 145, 12, ES_AUTOHSCROLL
-    DEFPUSHBUTTON "OK", IDOK, 116, 50, 50, 14
-    PUSHBUTTON "Avbryt", IDCANCEL, 170, 50, 50, 14
+    SCROLLBAR IDC_DIALOG_GRIP, 293, 243, 7, 7, SBS_SIZEGRIP
+    CONTROL "", IDC_LIST_VARIABLE_VALUE, "SysListView32", LVS_NOCOLUMNHEADER | 
LVS_EDITLABELS | LVS_SHOWSELALWAYS |
+                LVS_SINGLESEL | LVS_REPORT | WS_BORDER | WS_TABSTOP, 10, 10, 
224, 208, WS_EX_CLIENTEDGE
+    PUSHBUTTON "New", IDC_BUTTON_NEW, 242, 10, 50, 14
+    PUSHBUTTON "Edit", IDC_BUTTON_EDIT, 242, 30, 50, 14
+    PUSHBUTTON "Browse...", IDC_BUTTON_BROWSE_FOLDER, 242, 50, 50, 14
+    PUSHBUTTON "Delete", IDC_BUTTON_DELETE, 242, 70, 50, 14
+    PUSHBUTTON "Move Up", IDC_BUTTON_MOVE_UP, 242, 100, 50, 14
+    PUSHBUTTON "Move Down", IDC_BUTTON_MOVE_DOWN, 242, 120, 50, 14
+    PUSHBUTTON "Edit text...", IDC_BUTTON_EDIT_TEXT, 242, 150, 50, 14
+    DEFPUSHBUTTON "OK", IDOK, 188, 228, 50, 14
+    PUSHBUTTON "Avbryt", IDCANCEL, 242, 228, 50, 14
 END
 
 IDD_LICENCE DIALOGEX 6, 5, 267, 159
@@ -344,4 +366,6 @@ BEGIN
     IDS_HWPROFILE_ALREADY_IN_USE "The profile name is already in use."
     IDS_HWPROFILE_PROFILE "Profile"
     IDS_HWPROFILE_WARNING "Warning"
+    IDS_ENVIRONMENT_WARNING "Any changes that have been done will be discarded 
and the variable's value will be edited as text."
+    IDS_ENVIRONMENT_WARNING_TITLE "System Properties"
 END
diff --git a/dll/cpl/sysdm/lang/pl-PL.rc b/dll/cpl/sysdm/lang/pl-PL.rc
index 8973446b116..61d89d3691b 100644
--- a/dll/cpl/sysdm/lang/pl-PL.rc
+++ b/dll/cpl/sysdm/lang/pl-PL.rc
@@ -287,17 +287,39 @@ BEGIN
     PUSHBUTTON "Anuluj", IDCANCEL, 195, 224, 50, 14
 END
 
-IDD_EDIT_VARIABLE DIALOGEX 10, 15, 227, 71
-STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_VISIBLE | 
WS_CAPTION | WS_SYSMENU
+IDD_EDIT_VARIABLE DIALOGEX 10, 15, 372, 71
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION | 
WS_VISIBLE | WS_THICKFRAME
+CAPTION "Edit Variable"
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
+BEGIN
+    SCROLLBAR IDC_DIALOG_GRIP, 365, 64, 7, 7, SBS_SIZEGRIP
+    LTEXT "&Nazwa zmiennej:", IDC_STATIC, 7, 14, 50, 8
+    EDITTEXT IDC_VARIABLE_NAME, 75, 12, 289, 12, ES_AUTOHSCROLL
+    LTEXT "&Wartość zmiennej:", IDC_STATIC, 7, 32, 50, 8
+    EDITTEXT IDC_VARIABLE_VALUE, 75, 30, 289, 12, ES_AUTOHSCROLL
+    DEFPUSHBUTTON "OK", IDOK, 260, 50, 50, 14
+    PUSHBUTTON "Anuluj", IDCANCEL, 314, 50, 50, 14
+    PUSHBUTTON "Browse Directory...", IDC_BUTTON_BROWSE_FOLDER, 6, 50, 75, 14
+    PUSHBUTTON "Browse Files...", IDC_BUTTON_BROWSE_FILE, 86, 50, 75, 14
+END
+
+IDD_EDIT_VARIABLE_FANCY DIALOGEX 10, 15, 300, 250
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION | 
WS_VISIBLE | WS_THICKFRAME
 CAPTION "Edycja zmiennej"
 FONT 8, "MS Shell Dlg", 0, 0, 0x0
 BEGIN
-    LTEXT "&Nazwa zmiennej:", IDC_STATIC, 7, 14, 68, 8
-    EDITTEXT IDC_VARIABLE_NAME, 75, 12, 145, 12, ES_AUTOHSCROLL
-    LTEXT "&Wartość zmiennej:", IDC_STATIC, 7, 32, 68, 8
-    EDITTEXT IDC_VARIABLE_VALUE, 75, 30, 145, 12, ES_AUTOHSCROLL
-    DEFPUSHBUTTON "OK", IDOK, 116, 50, 50, 14
-    PUSHBUTTON "Anuluj", IDCANCEL, 170, 50, 50, 14
+    SCROLLBAR IDC_DIALOG_GRIP, 293, 243, 7, 7, SBS_SIZEGRIP
+    CONTROL "", IDC_LIST_VARIABLE_VALUE, "SysListView32", LVS_NOCOLUMNHEADER | 
LVS_EDITLABELS | LVS_SHOWSELALWAYS |
+                LVS_SINGLESEL | LVS_REPORT | WS_BORDER | WS_TABSTOP, 10, 10, 
224, 208, WS_EX_CLIENTEDGE
+    PUSHBUTTON "New", IDC_BUTTON_NEW, 242, 10, 50, 14
+    PUSHBUTTON "Edit", IDC_BUTTON_EDIT, 242, 30, 50, 14
+    PUSHBUTTON "Browse...", IDC_BUTTON_BROWSE_FOLDER, 242, 50, 50, 14
+    PUSHBUTTON "Delete", IDC_BUTTON_DELETE, 242, 70, 50, 14
+    PUSHBUTTON "Move Up", IDC_BUTTON_MOVE_UP, 242, 100, 50, 14
+    PUSHBUTTON "Move Down", IDC_BUTTON_MOVE_DOWN, 242, 120, 50, 14
+    PUSHBUTTON "Edit text...", IDC_BUTTON_EDIT_TEXT, 242, 150, 50, 14
+    DEFPUSHBUTTON "OK", IDOK, 188, 228, 50, 14
+    PUSHBUTTON "Anuluj", IDCANCEL, 242, 228, 50, 14
 END
 
 IDD_LICENCE DIALOGEX 6, 5, 267, 159
@@ -353,4 +375,6 @@ BEGIN
     IDS_HWPROFILE_ALREADY_IN_USE "Nazwa profilu jest już w użyciu."
     IDS_HWPROFILE_PROFILE "Profil"
     IDS_HWPROFILE_WARNING "Uwaga"
+    IDS_ENVIRONMENT_WARNING "Any changes that have been done will be discarded 
and the variable's value will be edited as text."
+    IDS_ENVIRONMENT_WARNING_TITLE "System Properties"
 END
diff --git a/dll/cpl/sysdm/lang/pt-PT.rc b/dll/cpl/sysdm/lang/pt-PT.rc
index 47b31fa31e9..8689cc603c6 100644
--- a/dll/cpl/sysdm/lang/pt-PT.rc
+++ b/dll/cpl/sysdm/lang/pt-PT.rc
@@ -282,17 +282,39 @@ BEGIN
     PUSHBUTTON "&Cancelar", IDCANCEL, 195, 224, 50, 14
 END
 
-IDD_EDIT_VARIABLE DIALOGEX 10, 15, 227, 71
-STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_VISIBLE | 
WS_CAPTION | WS_SYSMENU
+IDD_EDIT_VARIABLE DIALOGEX 10, 15, 372, 71
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION | 
WS_VISIBLE | WS_THICKFRAME
+CAPTION "Editar variável"
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
+BEGIN
+    SCROLLBAR IDC_DIALOG_GRIP, 365, 64, 7, 7, SBS_SIZEGRIP
+    LTEXT "&Nome da variável:", IDC_STATIC, 7, 14, 50, 8
+    EDITTEXT IDC_VARIABLE_NAME, 75, 12, 289, 12, ES_AUTOHSCROLL
+    LTEXT "&Valor da variável:", IDC_STATIC, 7, 32, 50, 8
+    EDITTEXT IDC_VARIABLE_VALUE, 75, 30, 289, 12, ES_AUTOHSCROLL
+    DEFPUSHBUTTON "OK", IDOK, 260, 50, 50, 14
+    PUSHBUTTON "Cancelar", IDCANCEL, 314, 50, 50, 14
+    PUSHBUTTON "Browse Directory...", IDC_BUTTON_BROWSE_FOLDER, 6, 50, 75, 14
+    PUSHBUTTON "Browse Files...", IDC_BUTTON_BROWSE_FILE, 86, 50, 75, 14
+END
+
+IDD_EDIT_VARIABLE_FANCY DIALOGEX 10, 15, 300, 250
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION | 
WS_VISIBLE | WS_THICKFRAME
 CAPTION "Editar variável"
 FONT 8, "MS Shell Dlg", 0, 0, 0x0
 BEGIN
-    LTEXT "&Nome da variável:", IDC_STATIC, 7, 14, 68, 8
-    EDITTEXT IDC_VARIABLE_NAME, 75, 12, 145, 12, ES_AUTOHSCROLL
-    LTEXT "&Valor da variável:", IDC_STATIC, 7, 32, 68, 8
-    EDITTEXT IDC_VARIABLE_VALUE, 75, 30, 145, 12, ES_AUTOHSCROLL
-    DEFPUSHBUTTON "&OK", IDOK, 116, 50, 50, 14
-    PUSHBUTTON "&Cancelar", IDCANCEL, 170, 50, 50, 14
+    SCROLLBAR IDC_DIALOG_GRIP, 293, 243, 7, 7, SBS_SIZEGRIP
+    CONTROL "", IDC_LIST_VARIABLE_VALUE, "SysListView32", LVS_NOCOLUMNHEADER | 
LVS_EDITLABELS | LVS_SHOWSELALWAYS |
+                LVS_SINGLESEL | LVS_REPORT | WS_BORDER | WS_TABSTOP, 10, 10, 
224, 208, WS_EX_CLIENTEDGE
+    PUSHBUTTON "New", IDC_BUTTON_NEW, 242, 10, 50, 14
+    PUSHBUTTON "Edit", IDC_BUTTON_EDIT, 242, 30, 50, 14
+    PUSHBUTTON "Browse...", IDC_BUTTON_BROWSE_FOLDER, 242, 50, 50, 14
+    PUSHBUTTON "Delete", IDC_BUTTON_DELETE, 242, 70, 50, 14
+    PUSHBUTTON "Move Up", IDC_BUTTON_MOVE_UP, 242, 100, 50, 14
+    PUSHBUTTON "Move Down", IDC_BUTTON_MOVE_DOWN, 242, 120, 50, 14
+    PUSHBUTTON "Edit text...", IDC_BUTTON_EDIT_TEXT, 242, 150, 50, 14
+    DEFPUSHBUTTON "OK", IDOK, 188, 228, 50, 14
+    PUSHBUTTON "Cancelar", IDCANCEL, 242, 228, 50, 14
 END
 
 IDD_LICENCE DIALOGEX 6, 5, 267, 159
@@ -348,4 +370,6 @@ BEGIN
     IDS_HWPROFILE_ALREADY_IN_USE "O nome do perfil já está em uso."
     IDS_HWPROFILE_PROFILE "Perfil"
     IDS_HWPROFILE_WARNING "Aviso"
+    IDS_ENVIRONMENT_WARNING "Any changes that have been done will be discarded 
and the variable's value will be edited as text."
+    IDS_ENVIRONMENT_WARNING_TITLE "System Properties"
 END
diff --git a/dll/cpl/sysdm/lang/ro-RO.rc b/dll/cpl/sysdm/lang/ro-RO.rc
index efd123e40c7..f41b944947d 100644
--- a/dll/cpl/sysdm/lang/ro-RO.rc
+++ b/dll/cpl/sysdm/lang/ro-RO.rc
@@ -287,17 +287,39 @@ BEGIN
     PUSHBUTTON "A&nulează", IDCANCEL, 195, 224, 50, 14
 END
 
-IDD_EDIT_VARIABLE DIALOGEX 10, 15, 227, 71
-STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_VISIBLE | 
WS_CAPTION | WS_SYSMENU
+IDD_EDIT_VARIABLE DIALOGEX 10, 15, 372, 71
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION | 
WS_VISIBLE | WS_THICKFRAME
+CAPTION "Editare variablă"
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
+BEGIN
+    SCROLLBAR IDC_DIALOG_GRIP, 365, 64, 7, 7, SBS_SIZEGRIP
+    LTEXT "N&ume variabilă:", IDC_STATIC, 7, 14, 50, 8
+    EDITTEXT IDC_VARIABLE_NAME, 75, 12, 289, 12, ES_AUTOHSCROLL
+    LTEXT "&Valoare variabilă:", IDC_STATIC, 7, 32, 50, 8
+    EDITTEXT IDC_VARIABLE_VALUE, 75, 30, 289, 12, ES_AUTOHSCROLL
+    DEFPUSHBUTTON "Confirmă", IDOK, 260, 50, 50, 14
+    PUSHBUTTON "Anulează", IDCANCEL, 314, 50, 50, 14
+    PUSHBUTTON "Browse Directory...", IDC_BUTTON_BROWSE_FOLDER, 6, 50, 75, 14
+    PUSHBUTTON "Browse Files...", IDC_BUTTON_BROWSE_FILE, 86, 50, 75, 14
+END
+
+IDD_EDIT_VARIABLE_FANCY DIALOGEX 10, 15, 300, 250
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION | 
WS_VISIBLE | WS_THICKFRAME
 CAPTION "Editare variablă"
 FONT 8, "MS Shell Dlg", 0, 0, 0x0
 BEGIN
-    LTEXT "N&ume variabilă:", IDC_STATIC, 7, 14, 68, 8
-    EDITTEXT IDC_VARIABLE_NAME, 75, 12, 145, 12, ES_AUTOHSCROLL
-    LTEXT "&Valoare variabilă:", IDC_STATIC, 7, 32, 68, 8
-    EDITTEXT IDC_VARIABLE_VALUE, 75, 30, 145, 12, ES_AUTOHSCROLL
-    DEFPUSHBUTTON "Con&firmă", IDOK, 116, 50, 50, 14
-    PUSHBUTTON "A&nulează", IDCANCEL, 170, 50, 50, 14
+    SCROLLBAR IDC_DIALOG_GRIP, 293, 243, 7, 7, SBS_SIZEGRIP
+    CONTROL "", IDC_LIST_VARIABLE_VALUE, "SysListView32", LVS_NOCOLUMNHEADER | 
LVS_EDITLABELS | LVS_SHOWSELALWAYS |
+                LVS_SINGLESEL | LVS_REPORT | WS_BORDER | WS_TABSTOP, 10, 10, 
224, 208, WS_EX_CLIENTEDGE
+    PUSHBUTTON "New", IDC_BUTTON_NEW, 242, 10, 50, 14
+    PUSHBUTTON "Edit", IDC_BUTTON_EDIT, 242, 30, 50, 14
+    PUSHBUTTON "Browse...", IDC_BUTTON_BROWSE_FOLDER, 242, 50, 50, 14
+    PUSHBUTTON "Delete", IDC_BUTTON_DELETE, 242, 70, 50, 14
+    PUSHBUTTON "Move Up", IDC_BUTTON_MOVE_UP, 242, 100, 50, 14
+    PUSHBUTTON "Move Down", IDC_BUTTON_MOVE_DOWN, 242, 120, 50, 14
+    PUSHBUTTON "Edit text...", IDC_BUTTON_EDIT_TEXT, 242, 150, 50, 14
+    DEFPUSHBUTTON "Confirmă", IDOK, 188, 228, 50, 14
+    PUSHBUTTON "Anulează", IDCANCEL, 242, 228, 50, 14
 END
 
 IDD_LICENCE DIALOGEX 6, 5, 267, 159
@@ -353,4 +375,6 @@ BEGIN
     IDS_HWPROFILE_ALREADY_IN_USE "Profilul este deja în uz."
     IDS_HWPROFILE_PROFILE "Profil"
     IDS_HWPROFILE_WARNING "Avertisment"
+    IDS_ENVIRONMENT_WARNING "Any changes that have been done will be discarded 
and the variable's value will be edited as text."
+    IDS_ENVIRONMENT_WARNING_TITLE "System Properties"
 END
diff --git a/dll/cpl/sysdm/lang/ru-RU.rc b/dll/cpl/sysdm/lang/ru-RU.rc
index 8edb10cd575..0a479808c4a 100644
--- a/dll/cpl/sysdm/lang/ru-RU.rc
+++ b/dll/cpl/sysdm/lang/ru-RU.rc
@@ -278,17 +278,39 @@ BEGIN
     PUSHBUTTON "Отмена", IDCANCEL, 195, 224, 50, 14
 END
 
-IDD_EDIT_VARIABLE DIALOGEX 10, 15, 227, 71
-STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_VISIBLE | 
WS_CAPTION | WS_SYSMENU
+IDD_EDIT_VARIABLE DIALOGEX 10, 15, 372, 71
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION | 
WS_VISIBLE | WS_THICKFRAME
+CAPTION "Изменение переменной"
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
+BEGIN
+    SCROLLBAR IDC_DIALOG_GRIP, 365, 64, 7, 7, SBS_SIZEGRIP
+    LTEXT "Им&я переменной:", IDC_STATIC, 7, 14, 50, 8
+    EDITTEXT IDC_VARIABLE_NAME, 75, 12, 289, 12, ES_AUTOHSCROLL
+    LTEXT "Значение перемен&ной:", IDC_STATIC, 7, 32, 50, 8
+    EDITTEXT IDC_VARIABLE_VALUE, 75, 30, 289, 12, ES_AUTOHSCROLL
+    DEFPUSHBUTTON "OK", IDOK, 260, 50, 50, 14
+    PUSHBUTTON "Отмена", IDCANCEL, 314, 50, 50, 14
+    PUSHBUTTON "Browse Directory...", IDC_BUTTON_BROWSE_FOLDER, 6, 50, 75, 14
+    PUSHBUTTON "Browse Files...", IDC_BUTTON_BROWSE_FILE, 86, 50, 75, 14
+END
+
+IDD_EDIT_VARIABLE_FANCY DIALOGEX 10, 15, 300, 250
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION | 
WS_VISIBLE | WS_THICKFRAME
 CAPTION "Изменение переменной"
 FONT 8, "MS Shell Dlg", 0, 0, 0x0
 BEGIN
-    LTEXT "Им&я переменной:", IDC_STATIC, 7, 14, 68, 8
-    EDITTEXT IDC_VARIABLE_NAME, 75, 12, 145, 12, ES_AUTOHSCROLL
-    LTEXT "Значение перемен&ной:", IDC_STATIC, 7, 32, 68, 8
-    EDITTEXT IDC_VARIABLE_VALUE, 75, 30, 145, 12, ES_AUTOHSCROLL
-    DEFPUSHBUTTON "OK", IDOK, 116, 50, 50, 14
-    PUSHBUTTON "Отмена", IDCANCEL, 170, 50, 50, 14
+    SCROLLBAR IDC_DIALOG_GRIP, 293, 243, 7, 7, SBS_SIZEGRIP
+    CONTROL "", IDC_LIST_VARIABLE_VALUE, "SysListView32", LVS_NOCOLUMNHEADER | 
LVS_EDITLABELS | LVS_SHOWSELALWAYS |
+                LVS_SINGLESEL | LVS_REPORT | WS_BORDER | WS_TABSTOP, 10, 10, 
224, 208, WS_EX_CLIENTEDGE
+    PUSHBUTTON "New", IDC_BUTTON_NEW, 242, 10, 50, 14
+    PUSHBUTTON "Edit", IDC_BUTTON_EDIT, 242, 30, 50, 14
+    PUSHBUTTON "Browse...", IDC_BUTTON_BROWSE_FOLDER, 242, 50, 50, 14
+    PUSHBUTTON "Delete", IDC_BUTTON_DELETE, 242, 70, 50, 14
+    PUSHBUTTON "Move Up", IDC_BUTTON_MOVE_UP, 242, 100, 50, 14
+    PUSHBUTTON "Move Down", IDC_BUTTON_MOVE_DOWN, 242, 120, 50, 14
+    PUSHBUTTON "Edit text...", IDC_BUTTON_EDIT_TEXT, 242, 150, 50, 14
+    DEFPUSHBUTTON "OK", IDOK, 188, 228, 50, 14
+    PUSHBUTTON "Отмена", IDCANCEL, 242, 228, 50, 14
 END
 
 IDD_LICENCE DIALOGEX 6, 5, 267, 159
@@ -344,4 +366,6 @@ BEGIN
     IDS_HWPROFILE_ALREADY_IN_USE "Профиль с таким названием уже существует."
     IDS_HWPROFILE_PROFILE "Профиль"
     IDS_HWPROFILE_WARNING "Внимание"
+    IDS_ENVIRONMENT_WARNING "Any changes that have been done will be discarded 
and the variable's value will be edited as text."
+    IDS_ENVIRONMENT_WARNING_TITLE "System Properties"
 END
diff --git a/dll/cpl/sysdm/lang/sk-SK.rc b/dll/cpl/sysdm/lang/sk-SK.rc
index 4fc717a7b53..e5d3d1ced4c 100644
--- a/dll/cpl/sysdm/lang/sk-SK.rc
+++ b/dll/cpl/sysdm/lang/sk-SK.rc
@@ -286,17 +286,39 @@ BEGIN
     PUSHBUTTON "Zrušiť", IDCANCEL, 195, 224, 50, 14
 END
 
-IDD_EDIT_VARIABLE DIALOGEX 10, 15, 227, 71
-STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_VISIBLE | 
WS_CAPTION | WS_SYSMENU
+IDD_EDIT_VARIABLE DIALOGEX 10, 15, 372, 71
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION | 
WS_VISIBLE | WS_THICKFRAME
+CAPTION "Upraviť premennú"
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
+BEGIN
+    SCROLLBAR IDC_DIALOG_GRIP, 365, 64, 7, 7, SBS_SIZEGRIP
+    LTEXT "&Názov premennej:", IDC_STATIC, 7, 14, 50, 8
+    EDITTEXT IDC_VARIABLE_NAME, 75, 12, 289, 12, ES_AUTOHSCROLL
+    LTEXT "&Hodnota premennej:", IDC_STATIC, 7, 32, 50, 8
+    EDITTEXT IDC_VARIABLE_VALUE, 75, 30, 289, 12, ES_AUTOHSCROLL
+    DEFPUSHBUTTON "OK", IDOK, 260, 50, 50, 14
+    PUSHBUTTON "Zrušiť", IDCANCEL, 314, 50, 50, 14
+    PUSHBUTTON "Browse Directory...", IDC_BUTTON_BROWSE_FOLDER, 6, 50, 75, 14
+    PUSHBUTTON "Browse Files...", IDC_BUTTON_BROWSE_FILE, 86, 50, 75, 14
+END
+
+IDD_EDIT_VARIABLE_FANCY DIALOGEX 10, 15, 300, 250
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION | 
WS_VISIBLE | WS_THICKFRAME
 CAPTION "Upraviť premennú"
 FONT 8, "MS Shell Dlg", 0, 0, 0x0
 BEGIN
-    LTEXT "&Názov premennej:", IDC_STATIC, 7, 14, 68, 8
-    EDITTEXT IDC_VARIABLE_NAME, 75, 12, 145, 12, ES_AUTOHSCROLL
-    LTEXT "&Hodnota premennej:", IDC_STATIC, 7, 32, 68, 8
-    EDITTEXT IDC_VARIABLE_VALUE, 75, 30, 145, 12, ES_AUTOHSCROLL
-    DEFPUSHBUTTON "OK", IDOK, 116, 50, 50, 14
-    PUSHBUTTON "Zrušiť", IDCANCEL, 170, 50, 50, 14
+    SCROLLBAR IDC_DIALOG_GRIP, 293, 243, 7, 7, SBS_SIZEGRIP
+    CONTROL "", IDC_LIST_VARIABLE_VALUE, "SysListView32", LVS_NOCOLUMNHEADER | 
LVS_EDITLABELS | LVS_SHOWSELALWAYS |
+                LVS_SINGLESEL | LVS_REPORT | WS_BORDER | WS_TABSTOP, 10, 10, 
224, 208, WS_EX_CLIENTEDGE
+    PUSHBUTTON "New", IDC_BUTTON_NEW, 242, 10, 50, 14
+    PUSHBUTTON "Edit", IDC_BUTTON_EDIT, 242, 30, 50, 14
+    PUSHBUTTON "Browse...", IDC_BUTTON_BROWSE_FOLDER, 242, 50, 50, 14
+    PUSHBUTTON "Delete", IDC_BUTTON_DELETE, 242, 70, 50, 14
+    PUSHBUTTON "Move Up", IDC_BUTTON_MOVE_UP, 242, 100, 50, 14
+    PUSHBUTTON "Move Down", IDC_BUTTON_MOVE_DOWN, 242, 120, 50, 14
+    PUSHBUTTON "Edit text...", IDC_BUTTON_EDIT_TEXT, 242, 150, 50, 14
+    DEFPUSHBUTTON "OK", IDOK, 188, 228, 50, 14
+    PUSHBUTTON "Zrušiť", IDCANCEL, 242, 228, 50, 14
 END
 
 IDD_LICENCE DIALOGEX 6, 5, 267, 159
@@ -352,4 +374,6 @@ BEGIN
     IDS_HWPROFILE_ALREADY_IN_USE "The profile name is already in use."
     IDS_HWPROFILE_PROFILE "Profile"
     IDS_HWPROFILE_WARNING "Warning"
+    IDS_ENVIRONMENT_WARNING "Any changes that have been done will be discarded 
and the variable's value will be edited as text."
+    IDS_ENVIRONMENT_WARNING_TITLE "System Properties"
 END
diff --git a/dll/cpl/sysdm/lang/sq-AL.rc b/dll/cpl/sysdm/lang/sq-AL.rc
index e1f6e226845..aff00d43626 100644
--- a/dll/cpl/sysdm/lang/sq-AL.rc
+++ b/dll/cpl/sysdm/lang/sq-AL.rc
@@ -278,17 +278,39 @@ BEGIN
     PUSHBUTTON "Anulo", IDCANCEL, 195, 224, 50, 14
 END
 
-IDD_EDIT_VARIABLE DIALOGEX 10, 15, 227, 71
-STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_VISIBLE | 
WS_CAPTION | WS_SYSMENU
+IDD_EDIT_VARIABLE DIALOGEX 10, 15, 372, 71
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION | 
WS_VISIBLE | WS_THICKFRAME
+CAPTION "Modifiko Variablë"
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
+BEGIN
+    SCROLLBAR IDC_DIALOG_GRIP, 365, 64, 7, 7, SBS_SIZEGRIP
+    LTEXT "&Emrat Variablë:", IDC_STATIC, 7, 14, 50, 8
+    EDITTEXT IDC_VARIABLE_NAME, 75, 12, 289, 12, ES_AUTOHSCROLL
+    LTEXT "&Vlera Variablë:", IDC_STATIC, 7, 32, 50, 8
+    EDITTEXT IDC_VARIABLE_VALUE, 75, 30, 289, 12, ES_AUTOHSCROLL
+    DEFPUSHBUTTON "OK", IDOK, 260, 50, 50, 14
+    PUSHBUTTON "Anulo", IDCANCEL, 314, 50, 50, 14
+    PUSHBUTTON "Browse Directory...", IDC_BUTTON_BROWSE_FOLDER, 6, 50, 75, 14
+    PUSHBUTTON "Browse Files...", IDC_BUTTON_BROWSE_FILE, 86, 50, 75, 14
+END
+
+IDD_EDIT_VARIABLE_FANCY DIALOGEX 10, 15, 300, 250
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION | 
WS_VISIBLE | WS_THICKFRAME
 CAPTION "Modifiko Variablë"
 FONT 8, "MS Shell Dlg", 0, 0, 0x0
 BEGIN
-    LTEXT "&Emrat Variablë:", IDC_STATIC, 7, 14, 68, 8
-    EDITTEXT IDC_VARIABLE_NAME, 75, 12, 145, 12, ES_AUTOHSCROLL
-    LTEXT "&Vlera Variablë:", IDC_STATIC, 7, 32, 68, 8
-    EDITTEXT IDC_VARIABLE_VALUE, 75, 30, 145, 12, ES_AUTOHSCROLL
-    DEFPUSHBUTTON "OK", IDOK, 116, 50, 50, 14
-    PUSHBUTTON "Anulo", IDCANCEL, 170, 50, 50, 14
+    SCROLLBAR IDC_DIALOG_GRIP, 293, 243, 7, 7, SBS_SIZEGRIP
+    CONTROL "", IDC_LIST_VARIABLE_VALUE, "SysListView32", LVS_NOCOLUMNHEADER | 
LVS_EDITLABELS | LVS_SHOWSELALWAYS |
+                LVS_SINGLESEL | LVS_REPORT | WS_BORDER | WS_TABSTOP, 10, 10, 
224, 208, WS_EX_CLIENTEDGE
+    PUSHBUTTON "New", IDC_BUTTON_NEW, 242, 10, 50, 14
+    PUSHBUTTON "Edit", IDC_BUTTON_EDIT, 242, 30, 50, 14
+    PUSHBUTTON "Browse...", IDC_BUTTON_BROWSE_FOLDER, 242, 50, 50, 14
+    PUSHBUTTON "Delete", IDC_BUTTON_DELETE, 242, 70, 50, 14
+    PUSHBUTTON "Move Up", IDC_BUTTON_MOVE_UP, 242, 100, 50, 14
+    PUSHBUTTON "Move Down", IDC_BUTTON_MOVE_DOWN, 242, 120, 50, 14
+    PUSHBUTTON "Edit text...", IDC_BUTTON_EDIT_TEXT, 242, 150, 50, 14
+    DEFPUSHBUTTON "OK", IDOK, 188, 228, 50, 14
+    PUSHBUTTON "Anulo", IDCANCEL, 242, 228, 50, 14
 END
 
 IDD_LICENCE DIALOGEX 6, 5, 267, 159
@@ -344,4 +366,6 @@ BEGIN
     IDS_HWPROFILE_ALREADY_IN_USE "The profile name is already in use."
     IDS_HWPROFILE_PROFILE "Profile"
     IDS_HWPROFILE_WARNING "Warning"
+    IDS_ENVIRONMENT_WARNING "Any changes that have been done will be discarded 
and the variable's value will be edited as text."
+    IDS_ENVIRONMENT_WARNING_TITLE "System Properties"
 END
diff --git a/dll/cpl/sysdm/lang/sv-SE.rc b/dll/cpl/sysdm/lang/sv-SE.rc
index e2a57183a86..76331c99c91 100644
--- a/dll/cpl/sysdm/lang/sv-SE.rc
+++ b/dll/cpl/sysdm/lang/sv-SE.rc
@@ -280,17 +280,39 @@ BEGIN
     PUSHBUTTON "Avbryt", IDCANCEL, 195, 224, 50, 14
 END
 
-IDD_EDIT_VARIABLE DIALOGEX 10, 15, 227, 71
-STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_VISIBLE | 
WS_CAPTION | WS_SYSMENU
+IDD_EDIT_VARIABLE DIALOGEX 10, 15, 372, 71
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION | 
WS_VISIBLE | WS_THICKFRAME
+CAPTION "Redigera variabel"
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
+BEGIN
+    SCROLLBAR IDC_DIALOG_GRIP, 365, 64, 7, 7, SBS_SIZEGRIP
+    LTEXT "Variabel&namn:", IDC_STATIC, 7, 14, 50, 8
+    EDITTEXT IDC_VARIABLE_NAME, 75, 12, 289, 12, ES_AUTOHSCROLL
+    LTEXT "Variabel&värde:", IDC_STATIC, 7, 32, 50, 8
+    EDITTEXT IDC_VARIABLE_VALUE, 75, 30, 289, 12, ES_AUTOHSCROLL
+    DEFPUSHBUTTON "OK", IDOK, 260, 50, 50, 14
+    PUSHBUTTON "Avbryt", IDCANCEL, 314, 50, 50, 14
+    PUSHBUTTON "Browse Directory...", IDC_BUTTON_BROWSE_FOLDER, 6, 50, 75, 14
+    PUSHBUTTON "Browse Files...", IDC_BUTTON_BROWSE_FILE, 86, 50, 75, 14
+END
+
+IDD_EDIT_VARIABLE_FANCY DIALOGEX 10, 15, 300, 250
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION | 
WS_VISIBLE | WS_THICKFRAME
 CAPTION "Redigera variabel"
 FONT 8, "MS Shell Dlg", 0, 0, 0x0
 BEGIN
-    LTEXT "Variabel&namn:", IDC_STATIC, 7, 14, 68, 8
-    EDITTEXT IDC_VARIABLE_NAME, 75, 12, 145, 12, ES_AUTOHSCROLL
-    LTEXT "Variabel&värde:", IDC_STATIC, 7, 32, 68, 8
-    EDITTEXT IDC_VARIABLE_VALUE, 75, 30, 145, 12, ES_AUTOHSCROLL
-    DEFPUSHBUTTON "OK", IDOK, 116, 50, 50, 14
-    PUSHBUTTON "Avbryt", IDCANCEL, 170, 50, 50, 14
+    SCROLLBAR IDC_DIALOG_GRIP, 293, 243, 7, 7, SBS_SIZEGRIP
+    CONTROL "", IDC_LIST_VARIABLE_VALUE, "SysListView32", LVS_NOCOLUMNHEADER | 
LVS_EDITLABELS | LVS_SHOWSELALWAYS |
+                LVS_SINGLESEL | LVS_REPORT | WS_BORDER | WS_TABSTOP, 10, 10, 
224, 208, WS_EX_CLIENTEDGE
+    PUSHBUTTON "New", IDC_BUTTON_NEW, 242, 10, 50, 14
+    PUSHBUTTON "Edit", IDC_BUTTON_EDIT, 242, 30, 50, 14
+    PUSHBUTTON "Browse...", IDC_BUTTON_BROWSE_FOLDER, 242, 50, 50, 14
+    PUSHBUTTON "Delete", IDC_BUTTON_DELETE, 242, 70, 50, 14
+    PUSHBUTTON "Move Up", IDC_BUTTON_MOVE_UP, 242, 100, 50, 14
+    PUSHBUTTON "Move Down", IDC_BUTTON_MOVE_DOWN, 242, 120, 50, 14
+    PUSHBUTTON "Edit text...", IDC_BUTTON_EDIT_TEXT, 242, 150, 50, 14
+    DEFPUSHBUTTON "OK", IDOK, 188, 228, 50, 14
+    PUSHBUTTON "Avbryt", IDCANCEL, 242, 228, 50, 14
 END
 
 IDD_LICENCE DIALOGEX 6, 5, 267, 159
@@ -346,4 +368,6 @@ BEGIN
     IDS_HWPROFILE_ALREADY_IN_USE "The profile name is already in use."
     IDS_HWPROFILE_PROFILE "Profile"
     IDS_HWPROFILE_WARNING "Warning"
+    IDS_ENVIRONMENT_WARNING "Any changes that have been done will be discarded 
and the variable's value will be edited as text."
+    IDS_ENVIRONMENT_WARNING_TITLE "System Properties"
 END
diff --git a/dll/cpl/sysdm/lang/tr-TR.rc b/dll/cpl/sysdm/lang/tr-TR.rc
index 0c825e89e69..ba285d9ecb6 100644
--- a/dll/cpl/sysdm/lang/tr-TR.rc
+++ b/dll/cpl/sysdm/lang/tr-TR.rc
@@ -280,17 +280,39 @@ BEGIN
     PUSHBUTTON "İptal", IDCANCEL, 195, 224, 50, 14
 END
 
-IDD_EDIT_VARIABLE DIALOGEX 10, 15, 227, 71
-STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_VISIBLE | 
WS_CAPTION | WS_SYSMENU
+IDD_EDIT_VARIABLE DIALOGEX 10, 15, 372, 71
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION | 
WS_VISIBLE | WS_THICKFRAME
 CAPTION "Değişkenleri Düzenle"
 FONT 8, "MS Shell Dlg", 0, 0, 0x0
 BEGIN
-    LTEXT "&Değişken adı:", IDC_STATIC, 7, 14, 68, 8
-    EDITTEXT IDC_VARIABLE_NAME, 75, 12, 145, 12, ES_AUTOHSCROLL
-    LTEXT "D&eğişken değeri:", IDC_STATIC, 7, 32, 68, 8
-    EDITTEXT IDC_VARIABLE_VALUE, 75, 30, 145, 12, ES_AUTOHSCROLL
-    DEFPUSHBUTTON "Tamam", IDOK, 116, 50, 50, 14
-    PUSHBUTTON "İptal", IDCANCEL, 170, 50, 50, 14
+    SCROLLBAR IDC_DIALOG_GRIP, 365, 64, 7, 7, SBS_SIZEGRIP
+    LTEXT "&Değişken adı:", IDC_STATIC, 7, 14, 50, 8
+    EDITTEXT IDC_VARIABLE_NAME, 75, 12, 289, 12, ES_AUTOHSCROLL
+    LTEXT "D&eğişken değeri:", IDC_STATIC, 7, 32, 50, 8
+    EDITTEXT IDC_VARIABLE_VALUE, 75, 30, 289, 12, ES_AUTOHSCROLL
+    DEFPUSHBUTTON "Tamam", IDOK, 260, 50, 50, 14
+    PUSHBUTTON "İptal", IDCANCEL, 314, 50, 50, 14
+    PUSHBUTTON "Browse Directory...", IDC_BUTTON_BROWSE_FOLDER, 6, 50, 75, 14
+    PUSHBUTTON "Browse Files...", IDC_BUTTON_BROWSE_FILE, 86, 50, 75, 14
+END
+
+IDD_EDIT_VARIABLE_FANCY DIALOGEX 10, 15, 300, 250
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION | 
WS_VISIBLE | WS_THICKFRAME
+CAPTION "Değişken Düzenle"
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
+BEGIN
+    SCROLLBAR IDC_DIALOG_GRIP, 293, 243, 7, 7, SBS_SIZEGRIP
+    CONTROL "", IDC_LIST_VARIABLE_VALUE, "SysListView32", LVS_NOCOLUMNHEADER | 
LVS_EDITLABELS | LVS_SHOWSELALWAYS |
+                LVS_SINGLESEL | LVS_REPORT | WS_BORDER | WS_TABSTOP, 10, 10, 
224, 208, WS_EX_CLIENTEDGE
+    PUSHBUTTON "New", IDC_BUTTON_NEW, 242, 10, 50, 14
+    PUSHBUTTON "Edit", IDC_BUTTON_EDIT, 242, 30, 50, 14
+    PUSHBUTTON "Browse...", IDC_BUTTON_BROWSE_FOLDER, 242, 50, 50, 14
+    PUSHBUTTON "Delete", IDC_BUTTON_DELETE, 242, 70, 50, 14
+    PUSHBUTTON "Move Up", IDC_BUTTON_MOVE_UP, 242, 100, 50, 14
+    PUSHBUTTON "Move Down", IDC_BUTTON_MOVE_DOWN, 242, 120, 50, 14
+    PUSHBUTTON "Edit text...", IDC_BUTTON_EDIT_TEXT, 242, 150, 50, 14
+    DEFPUSHBUTTON "Tamam", IDOK, 188, 228, 50, 14
+    PUSHBUTTON "İptal", IDCANCEL, 242, 228, 50, 14
 END
 
 IDD_LICENCE DIALOGEX 6, 5, 267, 159
@@ -346,4 +368,6 @@ BEGIN
     IDS_HWPROFILE_ALREADY_IN_USE "Profil adı zaten kullanımda."
     IDS_HWPROFILE_PROFILE "Profil"
     IDS_HWPROFILE_WARNING "Uyarı"
+    IDS_ENVIRONMENT_WARNING "Any changes that have been done will be discarded 
and the variable's value will be edited as text."
+    IDS_ENVIRONMENT_WARNING_TITLE "System Properties"
 END
diff --git a/dll/cpl/sysdm/lang/uk-UA.rc b/dll/cpl/sysdm/lang/uk-UA.rc
index 3b280e6bc6b..de6dd0c79f9 100644
--- a/dll/cpl/sysdm/lang/uk-UA.rc
+++ b/dll/cpl/sysdm/lang/uk-UA.rc
@@ -286,17 +286,39 @@ BEGIN
     PUSHBUTTON "Скасувати", IDCANCEL, 195, 224, 50, 14
 END
 
-IDD_EDIT_VARIABLE DIALOGEX 10, 15, 227, 71
-STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_VISIBLE | 
WS_CAPTION | WS_SYSMENU
+IDD_EDIT_VARIABLE DIALOGEX 10, 15, 372, 71
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION | 
WS_VISIBLE | WS_THICKFRAME
+CAPTION "Редагування змінної"
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
+BEGIN
+    SCROLLBAR IDC_DIALOG_GRIP, 365, 64, 7, 7, SBS_SIZEGRIP
+    LTEXT "&Ім'я змінної:", IDC_STATIC, 7, 14, 50, 8
+    EDITTEXT IDC_VARIABLE_NAME, 75, 12, 289, 12, ES_AUTOHSCROLL
+    LTEXT "&Значення змінної:", IDC_STATIC, 7, 32, 50, 8
+    EDITTEXT IDC_VARIABLE_VALUE, 75, 30, 289, 12, ES_AUTOHSCROLL
+    DEFPUSHBUTTON "OK", IDOK, 260, 50, 50, 14
+    PUSHBUTTON "Скасувати", IDCANCEL, 314, 50, 50, 14
+    PUSHBUTTON "Browse Directory...", IDC_BUTTON_BROWSE_FOLDER, 6, 50, 75, 14
+    PUSHBUTTON "Browse Files...", IDC_BUTTON_BROWSE_FILE, 86, 50, 75, 14
+END
+
+IDD_EDIT_VARIABLE_FANCY DIALOGEX 10, 15, 300, 250
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION | 
WS_VISIBLE | WS_THICKFRAME
 CAPTION "Редагування змінної"
 FONT 8, "MS Shell Dlg", 0, 0, 0x0
 BEGIN
-    LTEXT "&Ім'я змінної:", IDC_STATIC, 7, 14, 68, 8
-    EDITTEXT IDC_VARIABLE_NAME, 75, 12, 145, 12, ES_AUTOHSCROLL
-    LTEXT "&Значення змінної:", IDC_STATIC, 7, 32, 68, 8
-    EDITTEXT IDC_VARIABLE_VALUE, 75, 30, 145, 12, ES_AUTOHSCROLL
-    DEFPUSHBUTTON "OK", IDOK, 116, 50, 50, 14
-    PUSHBUTTON "Скасувати", IDCANCEL, 170, 50, 50, 14
+    SCROLLBAR IDC_DIALOG_GRIP, 293, 243, 7, 7, SBS_SIZEGRIP
+    CONTROL "", IDC_LIST_VARIABLE_VALUE, "SysListView32", LVS_NOCOLUMNHEADER | 
LVS_EDITLABELS | LVS_SHOWSELALWAYS |
+                LVS_SINGLESEL | LVS_REPORT | WS_BORDER | WS_TABSTOP, 10, 10, 
224, 208, WS_EX_CLIENTEDGE
+    PUSHBUTTON "New", IDC_BUTTON_NEW, 242, 10, 50, 14
+    PUSHBUTTON "Edit", IDC_BUTTON_EDIT, 242, 30, 50, 14
+    PUSHBUTTON "Browse...", IDC_BUTTON_BROWSE_FOLDER, 242, 50, 50, 14
+    PUSHBUTTON "Delete", IDC_BUTTON_DELETE, 242, 70, 50, 14
+    PUSHBUTTON "Move Up", IDC_BUTTON_MOVE_UP, 242, 100, 50, 14
+    PUSHBUTTON "Move Down", IDC_BUTTON_MOVE_DOWN, 242, 120, 50, 14
+    PUSHBUTTON "Edit text...", IDC_BUTTON_EDIT_TEXT, 242, 150, 50, 14
+    DEFPUSHBUTTON "OK", IDOK, 188, 228, 50, 14
+    PUSHBUTTON "Скасувати", IDCANCEL, 242, 228, 50, 14
 END
 
 IDD_LICENCE DIALOGEX 6, 5, 267, 159
@@ -352,4 +374,6 @@ BEGIN
     IDS_HWPROFILE_ALREADY_IN_USE "Ім'я вже зайнято."
     IDS_HWPROFILE_PROFILE "Профіль"
     IDS_HWPROFILE_WARNING "Увага"
+    IDS_ENVIRONMENT_WARNING "Any changes that have been done will be discarded 
and the variable's value will be edited as text."
+    IDS_ENVIRONMENT_WARNING_TITLE "System Properties"
 END
diff --git a/dll/cpl/sysdm/lang/zh-CN.rc b/dll/cpl/sysdm/lang/zh-CN.rc
index b575cac1017..38c1dd73adc 100644
--- a/dll/cpl/sysdm/lang/zh-CN.rc
+++ b/dll/cpl/sysdm/lang/zh-CN.rc
@@ -281,17 +281,39 @@ BEGIN
     PUSHBUTTON "取消", IDCANCEL, 195, 224, 50, 14
 END
 
-IDD_EDIT_VARIABLE DIALOGEX 10, 15, 227, 71
-STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_VISIBLE | 
WS_CAPTION | WS_SYSMENU
+IDD_EDIT_VARIABLE DIALOGEX 10, 15, 372, 71
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION | 
WS_VISIBLE | WS_THICKFRAME
+CAPTION "编辑变量"
+FONT 9, "宋体", 0, 0, 0x0
+BEGIN
+    SCROLLBAR IDC_DIALOG_GRIP, 365, 64, 7, 7, SBS_SIZEGRIP
+    LTEXT "变量名称(&N):", IDC_STATIC, 7, 14, 50, 8
+    EDITTEXT IDC_VARIABLE_NAME, 75, 12, 289, 12, ES_AUTOHSCROLL
+    LTEXT "变量值(&V):", IDC_STATIC, 7, 32, 50, 8
+    EDITTEXT IDC_VARIABLE_VALUE, 75, 30, 289, 12, ES_AUTOHSCROLL
+    DEFPUSHBUTTON "确定", IDOK, 260, 50, 50, 14
+    PUSHBUTTON "取消", IDCANCEL, 314, 50, 50, 14
+    PUSHBUTTON "Browse Directory...", IDC_BUTTON_BROWSE_FOLDER, 6, 50, 75, 14
+    PUSHBUTTON "Browse Files...", IDC_BUTTON_BROWSE_FILE, 86, 50, 75, 14
+END
+
+IDD_EDIT_VARIABLE_FANCY DIALOGEX 10, 15, 300, 250
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION | 
WS_VISIBLE | WS_THICKFRAME
 CAPTION "编辑变量"
 FONT 9, "宋体", 0, 0, 0x0
 BEGIN
-    LTEXT "变量名称(&N):", IDC_STATIC, 7, 14, 68, 8
-    EDITTEXT IDC_VARIABLE_NAME, 75, 12, 145, 12, ES_AUTOHSCROLL
-    LTEXT "变量值(&V):", IDC_STATIC, 7, 32, 68, 8
-    EDITTEXT IDC_VARIABLE_VALUE, 75, 30, 145, 12, ES_AUTOHSCROLL
-    DEFPUSHBUTTON "确定", IDOK, 116, 50, 50, 14
-    PUSHBUTTON "取消", IDCANCEL, 170, 50, 50, 14
+    SCROLLBAR IDC_DIALOG_GRIP, 293, 243, 7, 7, SBS_SIZEGRIP
+    CONTROL "", IDC_LIST_VARIABLE_VALUE, "SysListView32", LVS_NOCOLUMNHEADER | 
LVS_EDITLABELS | LVS_SHOWSELALWAYS |
+                LVS_SINGLESEL | LVS_REPORT | WS_BORDER | WS_TABSTOP, 10, 10, 
224, 208, WS_EX_CLIENTEDGE
+    PUSHBUTTON "New", IDC_BUTTON_NEW, 242, 10, 50, 14
+    PUSHBUTTON "Edit", IDC_BUTTON_EDIT, 242, 30, 50, 14
+    PUSHBUTTON "Browse...", IDC_BUTTON_BROWSE_FOLDER, 242, 50, 50, 14
+    PUSHBUTTON "Delete", IDC_BUTTON_DELETE, 242, 70, 50, 14
+    PUSHBUTTON "Move Up", IDC_BUTTON_MOVE_UP, 242, 100, 50, 14
+    PUSHBUTTON "Move Down", IDC_BUTTON_MOVE_DOWN, 242, 120, 50, 14
+    PUSHBUTTON "Edit text...", IDC_BUTTON_EDIT_TEXT, 242, 150, 50, 14
+    DEFPUSHBUTTON "确定", IDOK, 188, 228, 50, 14
+    PUSHBUTTON "取消", IDCANCEL, 242, 228, 50, 14
 END
 
 IDD_LICENCE DIALOGEX 6, 5, 267, 159
@@ -347,4 +369,6 @@ BEGIN
     IDS_HWPROFILE_ALREADY_IN_USE "配置式名称已在使用。"
     IDS_HWPROFILE_PROFILE "配置文件"
     IDS_HWPROFILE_WARNING "警告"
+    IDS_ENVIRONMENT_WARNING "Any changes that have been done will be discarded 
and the variable's value will be edited as text."
+    IDS_ENVIRONMENT_WARNING_TITLE "System Properties"
 END
diff --git a/dll/cpl/sysdm/lang/zh-TW.rc b/dll/cpl/sysdm/lang/zh-TW.rc
index 9e2518e50d0..626688b5e3b 100644
--- a/dll/cpl/sysdm/lang/zh-TW.rc
+++ b/dll/cpl/sysdm/lang/zh-TW.rc
@@ -286,17 +286,39 @@ BEGIN
     PUSHBUTTON "取消", IDCANCEL, 195, 224, 50, 14
 END
 
-IDD_EDIT_VARIABLE DIALOGEX 10, 15, 227, 71
-STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_VISIBLE | 
WS_CAPTION | WS_SYSMENU
+IDD_EDIT_VARIABLE DIALOGEX 10, 15, 372, 71
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION | 
WS_VISIBLE | WS_THICKFRAME
+CAPTION "編輯變數"
+FONT 9, "新細明體", 0, 0, 0x0
+BEGIN
+    SCROLLBAR IDC_DIALOG_GRIP, 365, 64, 7, 7, SBS_SIZEGRIP
+    LTEXT "變數名稱(&N)︰", IDC_STATIC, 7, 14, 50, 8
+    EDITTEXT IDC_VARIABLE_NAME, 75, 12, 289, 12, ES_AUTOHSCROLL
+    LTEXT "變數值(&V)︰", IDC_STATIC, 7, 32, 50, 8
+    EDITTEXT IDC_VARIABLE_VALUE, 75, 30, 289, 12, ES_AUTOHSCROLL
+    DEFPUSHBUTTON "確定", IDOK, 260, 50, 50, 14
+    PUSHBUTTON "取消", IDCANCEL, 314, 50, 50, 14
+    PUSHBUTTON "Browse Directory...", IDC_BUTTON_BROWSE_FOLDER, 6, 50, 75, 14
+    PUSHBUTTON "Browse Files...", IDC_BUTTON_BROWSE_FILE, 86, 50, 75, 14
+END
+
+IDD_EDIT_VARIABLE_FANCY DIALOGEX 10, 15, 300, 250
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION | 
WS_VISIBLE | WS_THICKFRAME
 CAPTION "編輯變數"
 FONT 9, "新細明體", 0, 0, 0x0
 BEGIN
-    LTEXT "變數名稱(&N)︰", IDC_STATIC, 7, 14, 68, 8
-    EDITTEXT IDC_VARIABLE_NAME, 75, 12, 145, 12, ES_AUTOHSCROLL
-    LTEXT "變數值(&V)︰", IDC_STATIC, 7, 32, 68, 8
-    EDITTEXT IDC_VARIABLE_VALUE, 75, 30, 145, 12, ES_AUTOHSCROLL
-    DEFPUSHBUTTON "確定", IDOK, 116, 50, 50, 14
-    PUSHBUTTON "取消", IDCANCEL, 170, 50, 50, 14
+    SCROLLBAR IDC_DIALOG_GRIP, 293, 243, 7, 7, SBS_SIZEGRIP
+    CONTROL "", IDC_LIST_VARIABLE_VALUE, "SysListView32", LVS_NOCOLUMNHEADER | 
LVS_EDITLABELS | LVS_SHOWSELALWAYS |
+                LVS_SINGLESEL | LVS_REPORT | WS_BORDER | WS_TABSTOP, 10, 10, 
224, 208, WS_EX_CLIENTEDGE
+    PUSHBUTTON "New", IDC_BUTTON_NEW, 242, 10, 50, 14
+    PUSHBUTTON "Edit", IDC_BUTTON_EDIT, 242, 30, 50, 14
+    PUSHBUTTON "Browse...", IDC_BUTTON_BROWSE_FOLDER, 242, 50, 50, 14
+    PUSHBUTTON "Delete", IDC_BUTTON_DELETE, 242, 70, 50, 14
+    PUSHBUTTON "Move Up", IDC_BUTTON_MOVE_UP, 242, 100, 50, 14
+    PUSHBUTTON "Move Down", IDC_BUTTON_MOVE_DOWN, 242, 120, 50, 14
+    PUSHBUTTON "Edit text...", IDC_BUTTON_EDIT_TEXT, 242, 150, 50, 14
+    DEFPUSHBUTTON "確定", IDOK, 188, 228, 50, 14
+    PUSHBUTTON "取消", IDCANCEL, 242, 228, 50, 14
 END
 
 IDD_LICENCE DIALOGEX 6, 5, 267, 159
@@ -352,4 +374,6 @@ BEGIN
     IDS_HWPROFILE_ALREADY_IN_USE "設定檔名稱已在使用。"
     IDS_HWPROFILE_PROFILE "設定檔"
     IDS_HWPROFILE_WARNING "警告"
+    IDS_ENVIRONMENT_WARNING "Any changes that have been done will be discarded 
and the variable's value will be edited as text."
+    IDS_ENVIRONMENT_WARNING_TITLE "System Properties"
 END
diff --git a/dll/cpl/sysdm/resource.h b/dll/cpl/sysdm/resource.h
index 94744806b0a..d0a720f1619 100644
--- a/dll/cpl/sysdm/resource.h
+++ b/dll/cpl/sysdm/resource.h
@@ -63,6 +63,9 @@
 
 #define IDS_UPTIME_FORMAT 140
 
+#define IDS_ENVIRONMENT_WARNING            150
+#define IDS_ENVIRONMENT_WARNING_TITLE      151
+
 /* Propsheet - general */
 #define IDD_PROPPAGEGENERAL  100
 #define IDC_MACHINELINE1     101
@@ -131,9 +134,19 @@
 #define IDC_SYSTEM_VARIABLE_DELETE 608
 
 /* Edit environment variables */
-#define IDD_EDIT_VARIABLE  700
-#define IDC_VARIABLE_NAME  701
-#define IDC_VARIABLE_VALUE 702
+#define IDD_EDIT_VARIABLE        700
+#define IDC_VARIABLE_NAME        701
+#define IDC_VARIABLE_VALUE       702
+#define IDC_BUTTON_BROWSE_FILE   703
+#define IDC_BUTTON_BROWSE_FOLDER 704
+#define IDD_EDIT_VARIABLE_FANCY  705
+#define IDC_LIST_VARIABLE_VALUE  706
+#define IDC_BUTTON_NEW           707
+#define IDC_BUTTON_EDIT          708
+#define IDC_BUTTON_DELETE        709
+#define IDC_BUTTON_MOVE_UP       710
+#define IDC_BUTTON_MOVE_DOWN     711
+#define IDC_BUTTON_EDIT_TEXT     712
 
 /* Virtual memory */
 #define IDD_VIRTMEM      900
@@ -211,3 +224,5 @@
 #define RTDATA               1503
 
 #define IDS_DEVS 2000
+
+#define IDC_DIALOG_GRIP     3000

Reply via email to