- Use 'MS Shell Dlg' font in all dialogs.
[reactos.git] / reactos / lib / syssetup / wizard.c
index bab00a7..677b934 100644 (file)
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-/* $Id: wizard.c,v 1.4 2004/06/17 21:23:50 kuehng Exp $
+/* $Id: wizard.c,v 1.5 2004/08/03 13:43:00 ekohl Exp $
  *
  * COPYRIGHT:         See COPYING in the top level directory
  * PROJECT:           ReactOS system libraries
  * PURPOSE:           System setup
  * FILE:              lib/syssetup/wizard.c
- * PROGRAMER:         Eric Kohl (ekohl@rz-online.de)
+ * PROGRAMER:         Eric Kohl
  */
 
 /* INCLUDES *****************************************************************/
@@ -125,37 +125,33 @@ WelcomeDlgProc(HWND hwndDlg,
 }
 
 
-INT_PTR CALLBACK
+BOOL CALLBACK
 OwnerPageDlgProc(HWND hwndDlg,
                  UINT uMsg,
                  WPARAM wParam,
                  LPARAM lParam)
 {
-  PSETUPDATA SetupData;
-
-  /* Retrieve pointer to the global setup data */
-  SetupData = (PSETUPDATA)GetWindowLong (hwndDlg, GWL_USERDATA);
+  TCHAR OwnerName[51];
+  TCHAR OwnerOrganization[51];
+  HKEY hKey;
+  LPNMHDR lpnm;
 
   switch (uMsg)
     {
       case WM_INITDIALOG:
         {
-          /* Save pointer to the global setup data */
-          SetupData = (PSETUPDATA)((LPPROPSHEETPAGE)lParam)->lParam;
-          SetWindowLong(hwndDlg, GWL_USERDATA, (LONG)SetupData);
-
           SendDlgItemMessage(hwndDlg, IDC_OWNERNAME, EM_LIMITTEXT, 50, 0);
           SendDlgItemMessage(hwndDlg, IDC_OWNERORGANIZATION, EM_LIMITTEXT, 50, 0);
 
-                 /* set focus to owner name */
-                 SetFocus(GetDlgItem(hwndDlg,IDC_OWNERNAME));
+          /* Set focus to owner name */
+          SetFocus(GetDlgItem(hwndDlg, IDC_OWNERNAME));
         }
         break;
 
 
       case WM_NOTIFY:
         {
-          LPNMHDR lpnm = (LPNMHDR)lParam;
+          lpnm = (LPNMHDR)lParam;
 
           switch (lpnm->code)
             {
@@ -165,16 +161,44 @@ OwnerPageDlgProc(HWND hwndDlg,
                 break;
 
               case PSN_WIZNEXT:
-                if (GetDlgItemText(hwndDlg, IDC_OWNERNAME, SetupData->OwnerName, 50) == 0)
+                OwnerName[0] = 0;
+                if (GetDlgItemText(hwndDlg, IDC_OWNERNAME, OwnerName, 50) == 0)
                 {
-                  MessageBox (hwndDlg,
-                              _T("Setup cannot continue until you enter your name."),
-                              _T("ReactOS Setup"),
-                              MB_ICONERROR | MB_OK);
+                  MessageBox(hwndDlg,
+                             _T("Setup cannot continue until you enter your name."),
+                             _T("ReactOS Setup"),
+                             MB_ICONERROR | MB_OK);
                   SetWindowLong(hwndDlg, DWL_MSGRESULT, -1);
                   return TRUE;
                 }
-                GetDlgItemText(hwndDlg, IDC_OWNERORGANIZATION, SetupData->OwnerOrganization, 50);
+
+                OwnerOrganization[0] = 0;
+                GetDlgItemText(hwndDlg, IDC_OWNERORGANIZATION, OwnerOrganization, 50);
+
+                RegOpenKeyEx(HKEY_LOCAL_MACHINE,
+                             _T("Software\\Microsoft\\Windows NT\\CurrentVersion"),
+                             0,
+                             KEY_ALL_ACCESS,
+                             &hKey);
+                /* FIXME: check error code */
+
+                RegSetValueEx(hKey,
+                              _T("RegisteredOwner"),
+                              0,
+                              REG_SZ,
+                              OwnerName,
+                              (_tcslen(OwnerName) + 1) * sizeof(TCHAR));
+                /* FIXME: check error code */
+
+                RegSetValueEx(hKey,
+                              _T("RegisteredOrganization"),
+                              0,
+                              REG_SZ,
+                              OwnerOrganization,
+                              (_tcslen(OwnerOrganization) + 1) * sizeof(TCHAR));
+                /* FIXME: check error code */
+
+                RegCloseKey(hKey);
                 break;
 
               default:
@@ -197,41 +221,37 @@ ComputerPageDlgProc(HWND hwndDlg,
                     WPARAM wParam,
                     LPARAM lParam)
 {
-  PSETUPDATA SetupData;
+  TCHAR ComputerName[MAX_COMPUTERNAME_LENGTH + 1];
   TCHAR Password1[15];
   TCHAR Password2[15];
-
-  /* Retrieve pointer to the global setup data */
-  SetupData = (PSETUPDATA)GetWindowLong (hwndDlg, GWL_USERDATA);
+  DWORD Length;
+  LPNMHDR lpnm;
 
   switch (uMsg)
     {
       case WM_INITDIALOG:
         {
-          DWORD Length;
-
-          /* Save pointer to the global setup data */
-          SetupData = (PSETUPDATA)((LPPROPSHEETPAGE)lParam)->lParam;
-          SetWindowLong(hwndDlg, GWL_USERDATA, (LONG)SetupData);
-
           /* Retrieve current computer name */
           Length = MAX_COMPUTERNAME_LENGTH + 1;
-          GetComputerNameA(SetupData->ComputerName, &Length);
+          GetComputerName(ComputerName, &Length);
 
           /* Display current computer name */
-          SetDlgItemTextA(hwndDlg, IDC_COMPUTERNAME, SetupData->ComputerName);
+          SetDlgItemText(hwndDlg, IDC_COMPUTERNAME, ComputerName);
 
           /* Set text limits */
           SendDlgItemMessage(hwndDlg, IDC_COMPUTERNAME, EM_LIMITTEXT, 64, 0);
           SendDlgItemMessage(hwndDlg, IDC_ADMINPASSWORD1, EM_LIMITTEXT, 14, 0);
           SendDlgItemMessage(hwndDlg, IDC_ADMINPASSWORD2, EM_LIMITTEXT, 14, 0);
+
+          /* Set focus to computer name */
+          SetFocus(GetDlgItem(hwndDlg, IDC_COMPUTERNAME));
         }
         break;
 
 
       case WM_NOTIFY:
         {
-          LPNMHDR lpnm = (LPNMHDR)lParam;
+          lpnm = (LPNMHDR)lParam;
 
           switch (lpnm->code)
             {
@@ -241,35 +261,96 @@ ComputerPageDlgProc(HWND hwndDlg,
                 break;
 
               case PSN_WIZNEXT:
-                if (GetDlgItemText(hwndDlg, IDC_COMPUTERNAME, SetupData->ComputerName, 64) == 0)
+                if (GetDlgItemText(hwndDlg, IDC_COMPUTERNAME, ComputerName, 64) == 0)
                 {
-                  MessageBox (hwndDlg,
-                              _T("Setup cannot continue until you enter the name of your computer."),
-                              _T("ReactOS Setup"),
-                              MB_ICONERROR | MB_OK);
+                  MessageBox(hwndDlg,
+                             _T("Setup cannot continue until you enter the name of your computer."),
+                             _T("ReactOS Setup"),
+                             MB_ICONERROR | MB_OK);
                   SetWindowLong(hwndDlg, DWL_MSGRESULT, -1);
                   return TRUE;
                 }
 
                 /* FIXME: check computer name for invalid characters */
 
+                if (!SetComputerName(ComputerName))
+                {
+                  MessageBox(hwndDlg,
+                             _T("Setup failed to set the computer name."),
+                             _T("ReactOS Setup"),
+                             MB_ICONERROR | MB_OK);
+                  SetWindowLong(hwndDlg, DWL_MSGRESULT, -1);
+                  return TRUE;
+                }
+
                 /* Check admin passwords */
                 GetDlgItemText(hwndDlg, IDC_ADMINPASSWORD1, Password1, 15);
                 GetDlgItemText(hwndDlg, IDC_ADMINPASSWORD2, Password2, 15);
-                if (_tcscmp (Password1, Password2))
+                if (_tcscmp(Password1, Password2))
                 {
-                  MessageBox (hwndDlg,
-                              _T("The passwords you entered do not match. Please enter "\
-                                 "the desired password again."),
-                              _T("ReactOS Setup"),
-                              MB_ICONERROR | MB_OK);
+                  MessageBox(hwndDlg,
+                             _T("The passwords you entered do not match. Please enter "\
+                                "the desired password again."),
+                             _T("ReactOS Setup"),
+                             MB_ICONERROR | MB_OK);
                   SetWindowLong(hwndDlg, DWL_MSGRESULT, -1);
                   return TRUE;
                 }
 
                 /* FIXME: check password for invalid characters */
 
-                _tcscpy (SetupData->AdminPassword, Password1);
+                /* FIXME: Set admin password */
+                break;
+
+              default:
+                break;
+            }
+        }
+        break;
+
+      default:
+        break;
+    }
+
+  return FALSE;
+}
+
+
+BOOL CALLBACK
+LocalePageDlgProc(HWND hwndDlg,
+                  UINT uMsg,
+                  WPARAM wParam,
+                  LPARAM lParam)
+{
+  PSETUPDATA SetupData;
+
+  /* Retrieve pointer to the global setup data */
+  SetupData = (PSETUPDATA)GetWindowLong (hwndDlg, GWL_USERDATA);
+
+  switch (uMsg)
+    {
+      case WM_INITDIALOG:
+        {
+          /* Save pointer to the global setup data */
+          SetupData = (PSETUPDATA)((LPPROPSHEETPAGE)lParam)->lParam;
+          SetWindowLong(hwndDlg, GWL_USERDATA, (LONG)SetupData);
+
+        }
+        break;
+
+
+      case WM_NOTIFY:
+        {
+          LPNMHDR lpnm = (LPNMHDR)lParam;
+
+          switch (lpnm->code)
+            {
+              case PSN_SETACTIVE:
+                /* Enable the Back and Next buttons */
+                PropSheet_SetWizButtons(GetParent(hwndDlg), PSWIZB_BACK | PSWIZB_NEXT);
+                break;
+
+              case PSN_WIZNEXT:
                 break;
 
               default:
@@ -332,20 +413,20 @@ FinishDlgProc(HWND hwndDlg,
 
 
 VOID
-InstallWizard (VOID)
+InstallWizard(VOID)
 {
   PROPSHEETHEADER psh;
-  HPROPSHEETPAGE ahpsp[4];
+  HPROPSHEETPAGE ahpsp[5];
   PROPSHEETPAGE psp;
 //  SHAREDWIZDATA wizdata;
 
   /* Clear setup data */
-  ZeroMemory (&SetupData, sizeof(SETUPDATA));
+  ZeroMemory(&SetupData, sizeof(SETUPDATA));
 
   /* Create the Welcome page */
   ZeroMemory (&psp, sizeof(PROPSHEETPAGE));
   psp.dwSize = sizeof(PROPSHEETPAGE);
-  psp.dwFlags = PSP_DEFAULT; // | PSP_HIDEHEADER;
+  psp.dwFlags = PSP_DEFAULT | PSP_HIDEHEADER;
   psp.hInstance = hDllInstance;
   psp.lParam = (LPARAM)&SetupData;
   psp.pfnDlgProc = WelcomeDlgProc;
@@ -354,38 +435,46 @@ InstallWizard (VOID)
 
   /* Create the Owner page */
   psp.dwFlags = PSP_DEFAULT; // | PSP_USEHEADERTITLE | PSP_USEHEADERSUBTITLE;
-//  psp.pszHeaderTitle = MAKEINTRESOURCE(IDS_TITLE2);
-//  psp.pszHeaderSubTitle = MAKEINTRESOURCE(IDS_SUBTITLE2);
+//  psp.pszHeaderTitle = MAKEINTRESOURCE(IDS_TITLE1);
+//  psp.pszHeaderSubTitle = MAKEINTRESOURCE(IDS_SUBTITLE1);
   psp.pszTemplate = MAKEINTRESOURCE(IDD_OWNERPAGE);
   psp.pfnDlgProc = OwnerPageDlgProc;
   ahpsp[1] = CreatePropertySheetPage(&psp);
 
   /* Create the Computer page */
   psp.dwFlags = PSP_DEFAULT; // | PSP_USEHEADERTITLE | PSP_USEHEADERSUBTITLE;
-//    psp.pszHeaderTitle =    MAKEINTRESOURCE(IDS_TITLE1);
-//    psp.pszHeaderSubTitle = MAKEINTRESOURCE(IDS_SUBTITLE1);
+//  psp.pszHeaderTitle =    MAKEINTRESOURCE(IDS_TITLE2);
+//  psp.pszHeaderSubTitle = MAKEINTRESOURCE(IDS_SUBTITLE2);
   psp.pfnDlgProc = ComputerPageDlgProc;
   psp.pszTemplate = MAKEINTRESOURCE(IDD_COMPUTERPAGE);
   ahpsp[2] = CreatePropertySheetPage(&psp);
 
 
+  /* Create the Locale page */
+  psp.dwFlags = PSP_DEFAULT; // | PSP_USEHEADERTITLE | PSP_USEHEADERSUBTITLE;
+//  psp.pszHeaderTitle =    MAKEINTRESOURCE(IDS_TITLE2);
+//  psp.pszHeaderSubTitle = MAKEINTRESOURCE(IDS_SUBTITLE2);
+  psp.pfnDlgProc = LocalePageDlgProc;
+  psp.pszTemplate = MAKEINTRESOURCE(IDD_LOCALEPAGE);
+  ahpsp[3] = CreatePropertySheetPage(&psp);
+
 
   /* Create the Finish page */
-  psp.dwFlags = PSP_DEFAULT; // | PSP_HIDEHEADER;
+  psp.dwFlags = PSP_DEFAULT | PSP_HIDEHEADER;
   psp.pfnDlgProc = FinishDlgProc;
   psp.pszTemplate = MAKEINTRESOURCE(IDD_FINISHPAGE);
-  ahpsp[3] = CreatePropertySheetPage(&psp);
+  ahpsp[4] = CreatePropertySheetPage(&psp);
 
   /* Create the property sheet */
   psh.dwSize = sizeof(PROPSHEETHEADER);
-  psh.dwFlags = PSH_WIZARD; //PSH_WIZARD97 | PSH_WATERMARK | PSH_HEADER;
+  psh.dwFlags = PSH_WIZARD; //97 | PSH_WATERMARK | PSH_HEADER;
   psh.hInstance = hDllInstance;
   psh.hwndParent = NULL;
-  psh.nPages = 4;
+  psh.nPages = 5;
   psh.nStartPage = 0;
   psh.phpage = ahpsp;
-//  psh.pszbmWatermark =    MAKEINTRESOURCE(IDB_WATERMARK);
-//  psh.pszbmHeader =       MAKEINTRESOURCE(IDB_BANNER);
+//  psh.pszbmWatermark = MAKEINTRESOURCE(IDB_WATERMARK);
+//  psh.pszbmHeader = MAKEINTRESOURCE(IDB_HEADER);
 
   /* Display the wizard */
   PropertySheet(&psh);