[NETCFGX] Do not update the TCP/IP properties when the cancels the advanced propertie...
[reactos.git] / dll / win32 / netcfgx / tcpipconf_notify.c
index 1ba4eeb..208a949 100644 (file)
@@ -123,6 +123,7 @@ HRESULT InitializeTcpipBasicDlgCtrls(HWND hwndDlg, TcpipSettings * pCurSettings)
 VOID InsertColumnToListView(HWND hDlgCtrl, UINT ResId, UINT SubItem, UINT Size);
 INT_PTR StoreTcpipBasicSettings(HWND hwndDlg, TcpipConfNotifyImpl * This, BOOL bApply);
 HRESULT Initialize(TcpipConfNotifyImpl * This);
+UINT GetIpAddressFromStringW(WCHAR *szBuffer);
 
 VOID
 DisplayError(UINT ResTxt, UINT ResTitle, UINT Type)
@@ -665,6 +666,31 @@ InsertIpAddressToListView(
     }
 }
 
+static
+VOID
+EnableIpButtons(
+    HWND hwndDlg)
+{
+    BOOL bEnable;
+
+    bEnable = (ListView_GetItemCount(GetDlgItem(hwndDlg, IDC_IPLIST)) != 0);
+
+    EnableWindow(GetDlgItem(hwndDlg, IDC_IPMOD), bEnable);
+    EnableWindow(GetDlgItem(hwndDlg, IDC_IPDEL), bEnable);
+}
+
+static
+VOID
+EnableGwButtons(
+    HWND hwndDlg)
+{
+    BOOL bEnable;
+
+    bEnable = (ListView_GetItemCount(GetDlgItem(hwndDlg, IDC_GWLIST)) != 0);
+
+    EnableWindow(GetDlgItem(hwndDlg, IDC_GWMOD), bEnable);
+    EnableWindow(GetDlgItem(hwndDlg, IDC_GWDEL), bEnable);
+}
 
 VOID
 InitializeTcpipAdvancedIpDlg(
@@ -696,6 +722,7 @@ InitializeTcpipAdvancedIpDlg(
     else
     {
         InsertIpAddressToListView(GetDlgItem(hwndDlg, IDC_IPLIST), This->pCurrentConfig->Ip, TRUE);
+        EnableIpButtons(hwndDlg);
     }
 
     InsertColumnToListView(GetDlgItem(hwndDlg, IDC_GWLIST), IDS_GATEWAY, 0, 100);
@@ -703,6 +730,8 @@ InitializeTcpipAdvancedIpDlg(
     InsertColumnToListView(GetDlgItem(hwndDlg, IDC_GWLIST), IDS_METRIC, 1, (rect.right - rect.left - 100));
 
     InsertIpAddressToListView(GetDlgItem(hwndDlg, IDC_GWLIST), This->pCurrentConfig->Gw, FALSE);
+    EnableGwButtons(hwndDlg);
+
     SendDlgItemMessageW(hwndDlg, IDC_METRIC, EM_LIMITTEXT, 4, 0);
 
 }
@@ -727,6 +756,12 @@ TcpipAdvGwDlg(
         case WM_INITDIALOG:
             pGwSettings = (TcpipGwSettings *)lParam;
             SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)lParam);
+
+            SendDlgItemMessageW(hwndDlg, IDC_IPADDR, IPM_SETRANGE, 0, MAKEIPRANGE(1, 223));
+            SendDlgItemMessageW(hwndDlg, IDC_IPADDR, IPM_SETRANGE, 1, MAKEIPRANGE(0, 255));
+            SendDlgItemMessageW(hwndDlg, IDC_IPADDR, IPM_SETRANGE, 2, MAKEIPRANGE(0, 255));
+            SendDlgItemMessageW(hwndDlg, IDC_IPADDR, IPM_SETRANGE, 3, MAKEIPRANGE(0, 255));
+
             if (pGwSettings->bAdd)
             {
                 if (LoadStringW(netcfgx_hInstance, IDS_ADD, szBuffer, sizeof(szBuffer)/sizeof(WCHAR)))
@@ -744,7 +779,9 @@ TcpipAdvGwDlg(
                     szBuffer[(sizeof(szBuffer)/sizeof(WCHAR))-1] = L'\0';
                     SendDlgItemMessageW(hwndDlg, IDC_OK, WM_SETTEXT, 0, (LPARAM)szBuffer);
                 }
-                SendDlgItemMessageW(hwndDlg, IDC_IPADDR, WM_SETTEXT, 0, (LPARAM)pGwSettings->szIP);
+
+                SendDlgItemMessageW(hwndDlg, IDC_IPADDR, IPM_SETADDRESS, 0, (LPARAM)GetIpAddressFromStringW(pGwSettings->szIP));
+
                 if (pGwSettings->Metric)
                 {
                     SetDlgItemInt(hwndDlg, IDC_METRIC, pGwSettings->Metric, FALSE);
@@ -758,10 +795,6 @@ TcpipAdvGwDlg(
                     EnableWindow(GetDlgItem(hwndDlg, IDC_METRICTXT), FALSE);
                 }
             }
-            SendDlgItemMessageW(hwndDlg, IDC_IPADDR, IPM_SETRANGE, 0, MAKEIPRANGE(1, 223));
-            SendDlgItemMessageW(hwndDlg, IDC_IPADDR, IPM_SETRANGE, 1, MAKEIPRANGE(0, 255));
-            SendDlgItemMessageW(hwndDlg, IDC_IPADDR, IPM_SETRANGE, 2, MAKEIPRANGE(0, 255));
-            SendDlgItemMessageW(hwndDlg, IDC_IPADDR, IPM_SETRANGE, 3, MAKEIPRANGE(0, 255));
             return TRUE;
         case WM_COMMAND:
             if (LOWORD(wParam) == IDC_USEMETRIC)
@@ -906,8 +939,9 @@ TcpipAddIpDlg(
                     szBuffer[(sizeof(szBuffer)/sizeof(WCHAR))-1] = L'\0';
                     SendDlgItemMessageW(hwndDlg, IDC_OK, WM_SETTEXT, 0, (LPARAM)szBuffer);
                 }
-                SendDlgItemMessageW(hwndDlg, IDC_IPADDR, WM_SETTEXT, 0, (LPARAM)pIpSettings->szIP);
-                SendDlgItemMessageW(hwndDlg, IDC_SUBNETMASK, WM_SETTEXT, 0, (LPARAM)pIpSettings->szMask);
+
+                SendDlgItemMessageW(hwndDlg, IDC_IPADDR, IPM_SETADDRESS, 0, (LPARAM)GetIpAddressFromStringW(pIpSettings->szIP));
+                SendDlgItemMessageW(hwndDlg, IDC_SUBNETMASK, IPM_SETADDRESS, 0, (LPARAM)GetIpAddressFromStringW(pIpSettings->szMask));
             }
             return TRUE;
         case WM_NOTIFY:
@@ -1285,7 +1319,7 @@ TcpipAdvancedIpDlg(
                 if (!This->pCurrentConfig->DhcpEnabled && ListView_GetItemCount(GetDlgItem(hwndDlg, IDC_IPLIST)) == 0)
                 {
                     DisplayError(IDS_NO_IPADDR_SET, IDS_TCPIP, MB_ICONWARNING);
-                    SetWindowLongPtr(hwndDlg, DWL_MSGRESULT, TRUE);
+                    SetWindowLongPtr(hwndDlg, DWLP_MSGRESULT, TRUE);
                     return TRUE;
                 }
             }
@@ -1298,7 +1332,7 @@ TcpipAdvancedIpDlg(
                 This->pCurrentConfig->Ip = NULL;
                 StoreIPSettings(GetDlgItem(hwndDlg, IDC_IPLIST), This, TRUE);
                 StoreIPSettings(GetDlgItem(hwndDlg, IDC_GWLIST), This, FALSE);
-                SetWindowLong(hwndDlg, DWL_MSGRESULT, PSNRET_NOERROR);
+                SetWindowLongPtr(hwndDlg, DWLP_MSGRESULT, PSNRET_NOERROR);
                 return TRUE;
             }
             break;
@@ -1329,6 +1363,8 @@ TcpipAdvancedIpDlg(
                         li.pszText = Ip.szMask;
                         SendDlgItemMessageW(hwndDlg, IDC_IPLIST, LVM_SETITEMW, 0, (LPARAM)&li);
                     }
+
+                    EnableIpButtons(hwndDlg);
                 }
             }
             else if (LOWORD(wParam) == IDC_IPMOD)
@@ -1361,6 +1397,7 @@ TcpipAdvancedIpDlg(
             else if (LOWORD(wParam) == IDC_IPDEL)
             {
                 DeleteItemFromList(GetDlgItem(hwndDlg, IDC_IPLIST));
+                EnableIpButtons(hwndDlg);
                 break;
             }
             else if (LOWORD(wParam) == IDC_GWADD)
@@ -1395,6 +1432,8 @@ TcpipAdvancedIpDlg(
                             }
                         }
                     }
+
+                    EnableGwButtons(hwndDlg);
                 }
                 break;
             }
@@ -1443,6 +1482,7 @@ TcpipAdvancedIpDlg(
             else if (LOWORD(wParam) == IDC_GWDEL)
             {
                 DeleteItemFromList(GetDlgItem(hwndDlg, IDC_GWLIST));
+                EnableGwButtons(hwndDlg);
                 break;
             }
     }
@@ -1808,7 +1848,7 @@ TcpipAdvancedDnsDlg(
                     SendDlgItemMessageW(hwndDlg, IDC_DNSSUFFIXLIST, LB_GETCOUNT, 0, 0) == 0)
                 {
                     DisplayError(IDS_NO_SUFFIX, IDS_TCPIP, MB_ICONWARNING);
-                    SetWindowLongPtr(hwndDlg, DWL_MSGRESULT, TRUE);
+                    SetWindowLongPtr(hwndDlg, DWLP_MSGRESULT, TRUE);
                     return TRUE;
                 }
                 if (SendDlgItemMessageW(hwndDlg, IDC_SUFFIX, WM_GETTEXT, sizeof(szSuffix)/sizeof(WCHAR), (LPARAM)szSuffix))
@@ -1826,7 +1866,7 @@ TcpipAdvancedDnsDlg(
                                 szFormat[0] = L'\0';
 
                             MessageBoxW(hwndDlg, szBuffer, szFormat, MB_ICONWARNING);
-                            SetWindowLongPtr(hwndDlg, DWL_MSGRESULT, TRUE);
+                            SetWindowLongPtr(hwndDlg, DWLP_MSGRESULT, TRUE);
                             SetFocus(GetDlgItem(hwndDlg, IDC_SUFFIX));
                             return TRUE;
                         }
@@ -2050,6 +2090,23 @@ TcpipAdvancedDnsDlg(
     return FALSE;
 }
 
+static int CALLBACK
+PropSheetProc(HWND hwndDlg, UINT uMsg, LPARAM lParam)
+{
+    // NOTE: This callback is needed to set large icon correctly.
+    HICON hIcon;
+    switch (uMsg)
+    {
+        case PSCB_INITIALIZED:
+        {
+            hIcon = LoadIconW(netcfgx_hInstance, MAKEINTRESOURCEW(IDI_NETWORK));
+            SendMessageW(hwndDlg, WM_SETICON, ICON_BIG, (LPARAM)hIcon);
+            break;
+        }
+    }
+    return 0;
+}
+
 VOID
 LaunchAdvancedTcpipSettings(
     HWND hwndDlg,
@@ -2071,17 +2128,22 @@ LaunchAdvancedTcpipSettings(
 
     ZeroMemory(&pinfo, sizeof(PROPSHEETHEADERW));
     pinfo.dwSize = sizeof(PROPSHEETHEADERW);
-    pinfo.dwFlags = PSH_NOCONTEXTHELP | PSH_PROPTITLE | PSH_NOAPPLYNOW;
+    pinfo.dwFlags = PSH_NOCONTEXTHELP | PSH_PROPTITLE | PSH_NOAPPLYNOW |
+                    PSH_USEICONID | PSH_USECALLBACK;
     pinfo.u3.phpage = hppages;
     pinfo.nPages = 3;
     pinfo.hwndParent = hwndDlg;
+    pinfo.hInstance = netcfgx_hInstance;
     pinfo.pszCaption = szBuffer;
+    pinfo.u.pszIcon = MAKEINTRESOURCEW(IDI_NETWORK);
+    pinfo.pfnCallback = PropSheetProc;
 
     StoreTcpipBasicSettings(hwndDlg, This, FALSE);
-    PropertySheetW(&pinfo);
-
-    InitializeTcpipBasicDlgCtrls(hwndDlg, This->pCurrentConfig);
-    PropSheet_Changed(GetParent(hwndDlg), hwndDlg); 
+    if (PropertySheetW(&pinfo) > 0)
+    {
+        InitializeTcpipBasicDlgCtrls(hwndDlg, This->pCurrentConfig);
+        PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
+    }
 }
 
 INT_PTR
@@ -2462,9 +2524,9 @@ TcpipBasicDlg(
             {
                 This = (TcpipConfNotifyImpl*)GetWindowLongPtr(hwndDlg, DWLP_USER);
                 if (SUCCEEDED(StoreTcpipBasicSettings(hwndDlg, This, TRUE)))
-                    SetWindowLong(hwndDlg, DWL_MSGRESULT, PSNRET_NOERROR);
+                    SetWindowLongPtr(hwndDlg, DWLP_MSGRESULT, PSNRET_NOERROR);
                 else
-                    SetWindowLong(hwndDlg, DWL_MSGRESULT, PSNRET_INVALID);
+                    SetWindowLongPtr(hwndDlg, DWLP_MSGRESULT, PSNRET_INVALID);
 
                 return TRUE;
             }
@@ -2666,8 +2728,8 @@ LoadDNSSettings(
         RegQueryValueExW(hKey, L"RegisterAdapterName", NULL, NULL, (LPBYTE)&This->pCurrentConfig->pDNS->RegisterAdapterName, &dwSize);
         RegQueryValueExW(hKey, L"RegistrationEnabled", NULL, NULL, (LPBYTE)&This->pCurrentConfig->pDNS->RegistrationEnabled, &dwSize);
 
-        dwSize = sizeof(This->pCurrentConfig->pDNS->szDomain) / sizeof(WCHAR);
-        RegQueryValueExW(hKey, L"Domain", NULL, NULL, (LPBYTE)szBuffer, &dwSize);
+        dwSize = sizeof(This->pCurrentConfig->pDNS->szDomain);
+        RegQueryValueExW(hKey, L"Domain", NULL, NULL, (LPBYTE)This->pCurrentConfig->pDNS->szDomain, &dwSize);
 
         RegCloseKey(hKey);
     }