From 11f2456fdffc14d30bc80807324af27baa4a3c50 Mon Sep 17 00:00:00 2001 From: Matthias Kupfer Date: Fri, 18 Jul 2008 09:07:54 +0000 Subject: [PATCH] - gui template for 1st stage setup, english only - implemented, but still disabled - it's work in progress svn path=/trunk/; revision=34572 --- reactos/base/setup/reactos/lang/en-US.rc | 105 +++++ reactos/base/setup/reactos/reactos.c | 486 +++++++++++++++++++++- reactos/base/setup/reactos/reactos.rbuild | 1 + reactos/base/setup/reactos/res/header.bmp | Bin 2504 -> 7306 bytes reactos/base/setup/reactos/resource.h | 43 +- 5 files changed, 628 insertions(+), 7 deletions(-) diff --git a/reactos/base/setup/reactos/lang/en-US.rc b/reactos/base/setup/reactos/lang/en-US.rc index 3d879bf5bd2..2ce3cdecc38 100644 --- a/reactos/base/setup/reactos/lang/en-US.rc +++ b/reactos/base/setup/reactos/lang/en-US.rc @@ -14,4 +14,109 @@ BEGIN LTEXT "Click Finish to exit the Setup.", IDC_STATIC, 115, 169, 195, 17 END +IDD_LANGSELPAGE DIALOGEX DISCARDABLE 0, 0, 317, 193 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "ReactOS Setup" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Please choose the language used for the installation process." + , IDC_STATIC, 10, 0, 297, 10 + LTEXT "The selected language will be the default language for the final system.", IDC_STATIC, 10, 13, 297, 10 + LISTBOX IDC_LANGUAGES, 10,28,297,142,LBS_HASSTRINGS | WS_VSCROLL + LTEXT "Click Next to select the setup type.", IDC_STATIC, 10, 180 ,297, 10 +END + +IDD_TYPEPAGE DIALOGEX DISCARDABLE 0, 0, 317, 193 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "ReactOS Setup" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "Type of setup", IDC_STATIC, "Button", BS_GROUPBOX, 10,0,297,172 + CONTROL "Install ReactOS", IDC_INSTALL, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 20, 15, 277, 10 + CONTROL "Repair or update an installed ReactOS", IDC_SETUP, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP | WS_DISABLED , 20, 30, 277, 10 + LTEXT "Click Next to setup the devices.", IDC_STATIC, 10, 180 ,297, 10 +END + +IDD_DEVICEPAGE DIALOGEX DISCARDABLE 0, 0, 317, 193 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "ReactOS Setup" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "Device settings", IDC_STATIC, "Button", BS_GROUPBOX, 10,0,297,172 + LTEXT "Computer:", IDC_STATIC, 20,15, 80, 10 + CONTROL "", IDC_COMPUTER, "ComboBox", WS_TABSTOP | CBS_DROPDOWNLIST , 100, 15, 150, 80 + LTEXT "Display:", IDC_STATIC, 20,35, 80, 10 + CONTROL "", IDC_DISPLAY, "ComboBox", WS_TABSTOP | CBS_DROPDOWNLIST , 100, 35, 150, 80 + LTEXT "Keyboard:", IDC_STATIC, 20,55, 80, 10 + CONTROL "", IDC_KEYBOARD, "ComboBox", WS_TABSTOP | CBS_DROPDOWNLIST , 100, 55, 150, 80 + LTEXT "Keyboard layout:", IDC_STATIC, 20,75, 80, 10 + CONTROL "", IDC_KEYLAYOUT, "ComboBox", WS_TABSTOP | CBS_DROPDOWNLIST , 100, 75, 150, 80 + LTEXT "Click Next setup of the installation device.", IDC_STATIC, 10, 180 ,277, 20 +END + +IDD_DRIVEPAGE DIALOGEX DISCARDABLE 0, 0, 317, 193 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "ReactOS Setup" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "Partition for ReactOS installation", IDC_STATIC, "Button", BS_GROUPBOX, 10,0,297,102 + LISTBOX IDC_PARTITION, 20,13,277,70,LBS_HASSTRINGS | WS_VSCROLL + PUSHBUTTON "&Create" ,IDC_PARTCREATE, 20,83,50,15 + PUSHBUTTON "&Delete" ,IDC_PARTDELETE, 75,83,50,15 + + CONTROL "Installation folder", IDC_STATIC, "Button", BS_GROUPBOX, 10,103,297,30 + EDITTEXT IDC_PATH, 20,113,277,12, WS_VISIBLE + + CONTROL "Boot loader installation", IDC_STATIC, "Button", BS_GROUPBOX, 10,136,297,40 + + CONTROL "Install boot loader on the hard disk (MBR)", IDC_INSTFREELDR, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 20, 147, 277, 10 + CONTROL "No installation of bootloader", IDC_NOINSTFREELDR, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP /* | WS_DISABLED*/ , 20, 159, 277, 10 + LTEXT "Click Next to start the installation process.", IDC_STATIC, 10, 180 ,277, 20 +END + +IDD_PROCESSPAGE DIALOGEX 0, 0, 317, 193 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "ReactOS Setup" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "Setup action", IDC_ACTION, "Button", BS_GROUPBOX, 10,0,297,172 + LTEXT "Install files...", IDC_ACTIVITY, 20, 50, 277, 10 + LTEXT "test.txt", IDC_ITEM, 30, 80, 257, 10 + CONTROL "", IDC_PROCESSPROGRESS, "msctls_progress32", + PBS_SMOOTH | WS_CHILD | WS_VISIBLE | WS_BORDER, 20, 120, 277, 8 +END + + +IDD_RESTARTPAGE DIALOGEX DISCARDABLE 0, 0, 317, 193 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Completing ReactOS Setup" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "Completing the first stage of ReactOS Setup", IDC_FINISHTITLE, "Button", BS_GROUPBOX, 10,0,297,172 + LTEXT "You have successfully completed the first stage of ReactOS Setup.", IDC_STATIC, 20, 50, 277, 10 + + LTEXT "When you click Finish, your computer will restart.", IDC_STATIC, 20, 80, 277, 10 + CONTROL "", IDC_RESTART_PROGRESS, "msctls_progress32", PBS_SMOOTH | WS_CHILD | WS_VISIBLE | WS_BORDER, 20, 120, 277, 8 + LTEXT "If there is a CD in a drive, remove it. Then, to restart "\ + "your computer, click Finish.", IDC_STATIC, 10, 180, 297, 20 +END + + +STRINGTABLE +BEGIN + IDS_LANGTITLE "Language Selection" + IDS_LANGSUBTITLE "Choose language for setup and final system." + IDS_TYPETITLE "Welcome to ReactOS Setup" + IDS_TYPESUBTITLE "Choose setup type." + IDS_DEVICETITLE "Setup the basic devices" + IDS_DEVICESUBTITLE "Set the settings of display and keyboard." + IDS_DRIVETITLE "Setup the installation partition and system folder" + IDS_DRIVESUBTITLE "Prepare installation partition, system folder and boot loader." + IDS_PROCESSTITLE "Prepare partition, copy files and setup system" + IDS_PROCESSSUBTITLE "Create and format partition, copy files, install and setup boot loader" + IDS_RESTARTTITLE "First stage of setup finished" + IDS_RESTARTSUBTITLE "The first stage of setup has been completed, restart to continue with second stage" + IDS_ABORTSETUP "ReactOS is not completely installed on your computer. If you quit Setup now, you will need to run Setup again to install Reactos. Really quit?" + IDS_ABORTSETUP2 "Abort installation?" +END /* EOF */ diff --git a/reactos/base/setup/reactos/reactos.c b/reactos/base/setup/reactos/reactos.c index 172a2d6a0c1..48d6eca2e45 100644 --- a/reactos/base/setup/reactos/reactos.c +++ b/reactos/base/setup/reactos/reactos.c @@ -21,12 +21,14 @@ * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS GUI first stage setup application * FILE: subsys/system/reactos/reactos.c - * PROGRAMMERS: Eric Kohl, Matthias Kupfer + * PROGRAMMERS: Eric Kohl + * Matthias Kupfer */ #include #include #include +#include #include "resource.h" @@ -34,6 +36,24 @@ HFONT hTitleFont; +struct +{ + LONG DestDiskNumber; // physical disk + LONG DestPartNumber; // partition on disk + LONG DestPartSize; // if partition doesn't exist, size of partition + LONG FSType; // file system type on partition + LONG MBRInstallType; // install bootloader + LONG FormatPart; // type of format the partition + WCHAR SelectedLangId[4]; // selected language + WCHAR InstallationDirectory[MAX_PATH]; // installation directory on hdd + WCHAR DefaultLang[20]; // default language + WCHAR DefaultKBLayout[20]; // default keyboard layout + BOOLEAN RepairUpdateFlag; // flag for update/repair an installed reactos +} SetupData; + +TCHAR abort_msg[512],abort_title[64]; +BOOL isUnattend; + /* FUNCTIONS ****************************************************************/ static VOID @@ -106,7 +126,7 @@ StartDlgProc(HWND hwndDlg, SetWindowLong(hwndControl, GWL_STYLE, dwStyle & ~WS_SYSMENU); /* Hide and disable the 'Cancel' button at the moment, - * later we use this button to cancel the setup process + * we use this button to cancel the setup process * like F3 in usetup */ hwndControl = GetDlgItem(GetParent(hwndDlg), IDCANCEL); @@ -129,6 +149,7 @@ StartDlgProc(HWND hwndDlg, { case PSN_SETACTIVE: // Only "Finish" for closing the App PropSheet_SetWizButtons(GetParent(hwndDlg), PSWIZB_FINISH); + //PropSheet_SetWizButtons(GetParent(hwndDlg), PSWIZB_NEXT); break; default: break; @@ -142,6 +163,384 @@ StartDlgProc(HWND hwndDlg, return FALSE; } +static INT_PTR CALLBACK +LangSelDlgProc(HWND hwndDlg, + UINT uMsg, + WPARAM wParam, + LPARAM lParam) +{ + switch (uMsg) + { + case WM_INITDIALOG: + { + HWND hwndControl; + DWORD dwStyle; + + hwndControl = GetParent(hwndDlg); + + /* Center the wizard window */ + CenterWindow (hwndControl); + + dwStyle = GetWindowLong(hwndControl, GWL_STYLE); + SetWindowLong(hwndControl, GWL_STYLE, dwStyle & ~WS_SYSMENU); + + hwndControl = GetDlgItem(GetParent(hwndDlg), IDCANCEL); + ShowWindow (hwndControl, SW_SHOW); + EnableWindow (hwndControl, TRUE); + + /* Set title font */ + /*SendDlgItemMessage(hwndDlg, + IDC_STARTTITLE, + WM_SETFONT, + (WPARAM)hTitleFont, + (LPARAM)TRUE);*/ +} + break; + case WM_NOTIFY: + { + LPNMHDR lpnm = (LPNMHDR)lParam; + + switch (lpnm->code) + { + case PSN_SETACTIVE: + PropSheet_SetWizButtons(GetParent(hwndDlg), PSWIZB_NEXT | PSWIZB_BACK); + break; + case PSN_QUERYCANCEL: + SetWindowLong(hwndDlg, DWL_MSGRESULT,MessageBox(GetParent(hwndDlg), abort_msg, abort_title, MB_YESNO | MB_ICONQUESTION) != IDYES); + return TRUE; + default: + break; + } + break; + default: + break; + } + + } + return FALSE; +} + +static INT_PTR CALLBACK +TypeDlgProc(HWND hwndDlg, + UINT uMsg, + WPARAM wParam, + LPARAM lParam) +{ + switch (uMsg) + { + case WM_INITDIALOG: + { + HWND hwndControl; + DWORD dwStyle; + + hwndControl = GetParent(hwndDlg); + + /* Center the wizard window */ + CenterWindow (hwndControl); + + dwStyle = GetWindowLong(hwndControl, GWL_STYLE); + SetWindowLong(hwndControl, GWL_STYLE, dwStyle & ~WS_SYSMENU); + + CheckDlgButton(hwndDlg, IDC_INSTALL, BST_CHECKED); + + /* Set title font */ + /*SendDlgItemMessage(hwndDlg, + IDC_STARTTITLE, + WM_SETFONT, + (WPARAM)hTitleFont, + (LPARAM)TRUE);*/ +} + break; + case WM_NOTIFY: + { + LPNMHDR lpnm = (LPNMHDR)lParam; + + switch (lpnm->code) + { + case PSN_SETACTIVE: + PropSheet_SetWizButtons(GetParent(hwndDlg), PSWIZB_NEXT | PSWIZB_BACK); + break; + case PSN_QUERYCANCEL: + SetWindowLong(hwndDlg, DWL_MSGRESULT,MessageBox(GetParent(hwndDlg), abort_msg, abort_title, MB_YESNO | MB_ICONQUESTION) != IDYES); + return TRUE; + default: + break; + } + break; + default: + break; + } + + } + return FALSE; +} + +static INT_PTR CALLBACK +DeviceDlgProc(HWND hwndDlg, + UINT uMsg, + WPARAM wParam, + LPARAM lParam) +{ + switch (uMsg) + { + case WM_INITDIALOG: + { + HWND hwndControl; + DWORD dwStyle; + + hwndControl = GetParent(hwndDlg); + + /* Center the wizard window */ + CenterWindow (hwndControl); + + dwStyle = GetWindowLong(hwndControl, GWL_STYLE); + SetWindowLong(hwndControl, GWL_STYLE, dwStyle & ~WS_SYSMENU); + + /* Set title font */ + /*SendDlgItemMessage(hwndDlg, + IDC_STARTTITLE, + WM_SETFONT, + (WPARAM)hTitleFont, + (LPARAM)TRUE);*/ +} + break; + case WM_NOTIFY: + { + LPNMHDR lpnm = (LPNMHDR)lParam; + + switch (lpnm->code) + { + case PSN_SETACTIVE: + PropSheet_SetWizButtons(GetParent(hwndDlg), PSWIZB_NEXT | PSWIZB_BACK); + break; + case PSN_QUERYCANCEL: + SetWindowLong(hwndDlg, DWL_MSGRESULT,MessageBox(GetParent(hwndDlg), abort_msg, abort_title, MB_YESNO | MB_ICONQUESTION) != IDYES); + return TRUE; + default: + break; + } + break; + default: + break; + } + + } + return FALSE; +} + +static INT_PTR CALLBACK +DriveDlgProc(HWND hwndDlg, + UINT uMsg, + WPARAM wParam, + LPARAM lParam) +{ + switch (uMsg) + { + case WM_INITDIALOG: + { + HWND hwndControl; + DWORD dwStyle; + + hwndControl = GetParent(hwndDlg); + + /* Center the wizard window */ + CenterWindow (hwndControl); + + dwStyle = GetWindowLong(hwndControl, GWL_STYLE); + SetWindowLong(hwndControl, GWL_STYLE, dwStyle & ~WS_SYSMENU); + + CheckDlgButton(hwndDlg, IDC_INSTFREELDR, BST_CHECKED); + /* Set title font */ + /*SendDlgItemMessage(hwndDlg, + IDC_STARTTITLE, + WM_SETFONT, + (WPARAM)hTitleFont, + (LPARAM)TRUE);*/ +} + break; + case WM_NOTIFY: + { + LPNMHDR lpnm = (LPNMHDR)lParam; + + switch (lpnm->code) + { + case PSN_SETACTIVE: + PropSheet_SetWizButtons(GetParent(hwndDlg), PSWIZB_NEXT | PSWIZB_BACK); + break; + case PSN_QUERYCANCEL: + SetWindowLong(hwndDlg, DWL_MSGRESULT,MessageBox(GetParent(hwndDlg), abort_msg, abort_title, MB_YESNO | MB_ICONQUESTION) != IDYES); + return TRUE; + default: + break; + } + break; + default: + break; + } + + } + return FALSE; +} + +static INT_PTR CALLBACK +ProcessDlgProc(HWND hwndDlg, + UINT uMsg, + WPARAM wParam, + LPARAM lParam) +{ + switch (uMsg) + { + case WM_INITDIALOG: + { + HWND hwndControl; + DWORD dwStyle; + + hwndControl = GetParent(hwndDlg); + + /* Center the wizard window */ + CenterWindow (hwndControl); + + dwStyle = GetWindowLong(hwndControl, GWL_STYLE); + SetWindowLong(hwndControl, GWL_STYLE, dwStyle & ~WS_SYSMENU); + + hwndControl = GetDlgItem(GetParent(hwndDlg), IDCANCEL); + ShowWindow (hwndControl, SW_HIDE); + EnableWindow (hwndControl, FALSE); + + /* Set title font */ + /*SendDlgItemMessage(hwndDlg, + IDC_STARTTITLE, + WM_SETFONT, + (WPARAM)hTitleFont, + (LPARAM)TRUE);*/ +} + break; + case WM_NOTIFY: + { + LPNMHDR lpnm = (LPNMHDR)lParam; + + switch (lpnm->code) + { + case PSN_SETACTIVE: + PropSheet_SetWizButtons(GetParent(hwndDlg), PSWIZB_NEXT ); + break; + default: + break; + } + break; + default: + break; + } + + } + return FALSE; +} + +static INT_PTR CALLBACK +RestartDlgProc(HWND hwndDlg, + UINT uMsg, + WPARAM wParam, + LPARAM lParam) +{ + switch (uMsg) + { + case WM_INITDIALOG: + { + HWND hwndControl; + DWORD dwStyle; + + hwndControl = GetParent(hwndDlg); + + /* Center the wizard window */ + CenterWindow (hwndControl); + + dwStyle = GetWindowLong(hwndControl, GWL_STYLE); + SetWindowLong(hwndControl, GWL_STYLE, dwStyle & ~WS_SYSMENU); + + /* Set title font */ + /*SendDlgItemMessage(hwndDlg, + IDC_STARTTITLE, + WM_SETFONT, + (WPARAM)hTitleFont, + (LPARAM)TRUE);*/ + } + break; + case WM_TIMER: + { + INT Position; + HWND hWndProgress; + + hWndProgress = GetDlgItem(hwndDlg, IDC_RESTART_PROGRESS); + Position = SendMessage(hWndProgress, PBM_GETPOS, 0, 0); + if (Position == 300) + { + KillTimer(hwndDlg, 1); + PropSheet_PressButton(GetParent(hwndDlg), PSBTN_FINISH); + } + else + { + SendMessage(hWndProgress, PBM_SETPOS, Position + 1, 0); + } + return TRUE; + } + case WM_DESTROY: + return TRUE; + case WM_NOTIFY: + { + LPNMHDR lpnm = (LPNMHDR)lParam; + + switch (lpnm->code) + { + case PSN_SETACTIVE: // Only "Finish" for closing the App + PropSheet_SetWizButtons(GetParent(hwndDlg), PSWIZB_FINISH); + SendDlgItemMessage(hwndDlg, IDC_RESTART_PROGRESS, PBM_SETRANGE, 0, MAKELPARAM(0, 300)); + SendDlgItemMessage(hwndDlg, IDC_RESTART_PROGRESS, PBM_SETPOS, 0, 0); + SetTimer(hwndDlg, 1, 50, NULL); + break; + default: + break; + } + break; + default: + break; + } + + } + return FALSE; +} + +BOOL isUnattendSetup() +{ + WCHAR szPath[MAX_PATH]; + HINF hUnattendedInf; + INFCONTEXT InfContext; + TCHAR szValue[MAX_PATH]; + DWORD LineLength; + //HKEY hKey; + BOOL result = 0; + + GetCurrentDirectoryW(MAX_PATH, szPath); // FIXME + + wcscat(szPath, L"\\unattend.inf"); + hUnattendedInf = SetupOpenInfFileW(szPath, NULL, INF_STYLE_OLDNT, NULL); + if (hUnattendedInf != INVALID_HANDLE_VALUE) + { + if (SetupFindFirstLine(hUnattendedInf, _T("Unattend"), + _T("UnattendSetupEnabled"),&InfContext)) + { + if (SetupGetStringField(&InfContext, 1, szValue, + sizeof(szValue) / sizeof(TCHAR), &LineLength) && + (_tcsicmp(szValue, _T("yes"))==0)) + { + result = 1; // unattendSetup enabled + // read values and store in SetupData + } + } + SetupCloseInfFile(hUnattendedInf); + } + return result; +} + int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInstance, @@ -149,11 +548,18 @@ WinMain(HINSTANCE hInst, int nCmdShow) { PROPSHEETHEADER psh; - HPROPSHEETPAGE ahpsp[1]; + HPROPSHEETPAGE ahpsp[7]; PROPSHEETPAGE psp = {0}; UINT nPages = 0; + isUnattend = isUnattendSetup(); - /* Create the Start page */ + if (!isUnattend) + { + + LoadString(hInst,IDS_ABORTSETUP, abort_msg, sizeof(abort_msg)/sizeof(TCHAR)); + LoadString(hInst,IDS_ABORTSETUP2, abort_title,sizeof(abort_title)/sizeof(TCHAR)); + + /* Create the Start page, until setup is working */ psp.dwSize = sizeof(PROPSHEETPAGE); psp.dwFlags = PSP_DEFAULT | PSP_HIDEHEADER; psp.hInstance = hInst; @@ -162,7 +568,77 @@ WinMain(HINSTANCE hInst, psp.pszTemplate = MAKEINTRESOURCE(IDD_STARTPAGE); ahpsp[nPages++] = CreatePropertySheetPage(&psp); - // Here we can add the next pages and switch on later + /* Create language selection page */ + psp.dwSize = sizeof(PROPSHEETPAGE); + psp.dwFlags = PSP_DEFAULT | PSP_USEHEADERTITLE | PSP_USEHEADERSUBTITLE; + psp.pszHeaderTitle = MAKEINTRESOURCE(IDS_LANGTITLE); + psp.pszHeaderSubTitle = MAKEINTRESOURCE(IDS_LANGSUBTITLE); + psp.hInstance = hInst; + psp.lParam = 0; + psp.pfnDlgProc = LangSelDlgProc; + psp.pszTemplate = MAKEINTRESOURCE(IDD_LANGSELPAGE); + ahpsp[nPages++] = CreatePropertySheetPage(&psp); + // Change language with "SetThreadLocale(langid)" + + /* Create install type selection page */ + psp.dwSize = sizeof(PROPSHEETPAGE); + psp.dwFlags = PSP_DEFAULT | PSP_USEHEADERTITLE | PSP_USEHEADERSUBTITLE; + psp.pszHeaderTitle = MAKEINTRESOURCE(IDS_TYPETITLE); + psp.pszHeaderSubTitle = MAKEINTRESOURCE(IDS_TYPESUBTITLE); + psp.hInstance = hInst; + psp.lParam = 0; + psp.pfnDlgProc = TypeDlgProc; + psp.pszTemplate = MAKEINTRESOURCE(IDD_TYPEPAGE); + ahpsp[nPages++] = CreatePropertySheetPage(&psp); + + /* Create device settings page */ + psp.dwSize = sizeof(PROPSHEETPAGE); + psp.dwFlags = PSP_DEFAULT | PSP_USEHEADERTITLE | PSP_USEHEADERSUBTITLE; + psp.pszHeaderTitle = MAKEINTRESOURCE(IDS_DEVICETITLE); + psp.pszHeaderSubTitle = MAKEINTRESOURCE(IDS_DEVICESUBTITLE); + psp.hInstance = hInst; + psp.lParam = 0; + psp.pfnDlgProc = DeviceDlgProc; + psp.pszTemplate = MAKEINTRESOURCE(IDD_DEVICEPAGE); + ahpsp[nPages++] = CreatePropertySheetPage(&psp); + + /* Create install device settings page / boot method / install directory*/ + psp.dwSize = sizeof(PROPSHEETPAGE); + psp.dwFlags = PSP_DEFAULT | PSP_USEHEADERTITLE | PSP_USEHEADERSUBTITLE; + psp.pszHeaderTitle = MAKEINTRESOURCE(IDS_DRIVETITLE); + psp.pszHeaderSubTitle = MAKEINTRESOURCE(IDS_DRIVESUBTITLE); + psp.hInstance = hInst; + psp.lParam = 0; + psp.pfnDlgProc = DriveDlgProc; + psp.pszTemplate = MAKEINTRESOURCE(IDD_DRIVEPAGE); + ahpsp[nPages++] = CreatePropertySheetPage(&psp); + + } + + /* Create installation progress page */ + psp.dwSize = sizeof(PROPSHEETPAGE); + psp.dwFlags = PSP_DEFAULT | PSP_USEHEADERTITLE | PSP_USEHEADERSUBTITLE; + psp.pszHeaderTitle = MAKEINTRESOURCE(IDS_PROCESSTITLE); + psp.pszHeaderSubTitle = MAKEINTRESOURCE(IDS_PROCESSSUBTITLE); + psp.hInstance = hInst; + psp.lParam = 0; + psp.pfnDlgProc = ProcessDlgProc; + psp.pszTemplate = MAKEINTRESOURCE(IDD_PROCESSPAGE); + ahpsp[nPages++] = CreatePropertySheetPage(&psp); + + if (!isUnattend) + { + /* Create finish to reboot page */ + psp.dwSize = sizeof(PROPSHEETPAGE); + psp.dwFlags = PSP_DEFAULT | PSP_USEHEADERTITLE | PSP_USEHEADERSUBTITLE; + psp.pszHeaderTitle = MAKEINTRESOURCE(IDS_RESTARTTITLE); + psp.pszHeaderSubTitle = MAKEINTRESOURCE(IDS_RESTARTSUBTITLE); + psp.hInstance = hInst; + psp.lParam = 0; + psp.pfnDlgProc = RestartDlgProc; + psp.pszTemplate = MAKEINTRESOURCE(IDD_RESTARTPAGE); + ahpsp[nPages++] = CreatePropertySheetPage(&psp); + } /* Create the property sheet */ psh.dwSize = sizeof(PROPSHEETHEADER); diff --git a/reactos/base/setup/reactos/reactos.rbuild b/reactos/base/setup/reactos/reactos.rbuild index d1f477412c7..a4687f48e37 100644 --- a/reactos/base/setup/reactos/reactos.rbuild +++ b/reactos/base/setup/reactos/reactos.rbuild @@ -9,6 +9,7 @@ gdi32 user32 comctl32 + setupapi reactos.c reactos.rc diff --git a/reactos/base/setup/reactos/res/header.bmp b/reactos/base/setup/reactos/res/header.bmp index af7bf7a593517db9d34f0f9b26778e4af6d25c95..4648160dbf25622d902564965e5266b20ad25cf5 100644 GIT binary patch literal 7306 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 bQYMq}8Hc`96s&*u^_bSr`@bCdtHktQ&zY|_ literal 2504 zcmeH{F%AMT3*SEGptzF4j_h?dv5QsW$Mb!p z+kJwIvU%~ufu#Jkhx2K8C!Ca-nMY67AjT--N`dA_jwlqPwMMNKXS7*^n1+e7ex$qV zp{OzuVWB`M@HYy~S#x4>b~$Hm41_6jC2w4Qd#Q{Lp=5tO@gDRi;$QR$5;}}Y`csGR H1Qw