From 121e7e4d60002c327f3d7336146bc7cd479f7663 Mon Sep 17 00:00:00 2001 From: Matthias Kupfer Date: Wed, 12 Nov 2008 16:08:28 +0000 Subject: [PATCH] - basic install drive listing code (due to lack of reactos functionality not working yet) - add and enable advanced settings dialog - get install directory from txtsetup.sif - set changed install directory - fix dialog resource for several languages svn path=/trunk/; revision=37309 --- reactos/base/setup/reactos/lang/bg-BG.rc | 2 + reactos/base/setup/reactos/lang/cs-CZ.rc | 2 + reactos/base/setup/reactos/lang/de-DE.rc | 2 + reactos/base/setup/reactos/lang/en-US.rc | 2 + reactos/base/setup/reactos/lang/es-ES.rc | 2 + reactos/base/setup/reactos/lang/fr-FR.rc | 2 + reactos/base/setup/reactos/lang/it-IT.rc | 2 + reactos/base/setup/reactos/lang/no-NO.rc | 2 + reactos/base/setup/reactos/lang/pl-PL.rc | 2 + reactos/base/setup/reactos/lang/ru-RU.rc | 2 + reactos/base/setup/reactos/lang/sk-SK.rc | 2 + reactos/base/setup/reactos/reactos.c | 94 ++++++++++++++++++++++- reactos/base/setup/reactos/reactos.rbuild | 1 + reactos/base/setup/reactos/resource.h | 1 + 14 files changed, 115 insertions(+), 3 deletions(-) diff --git a/reactos/base/setup/reactos/lang/bg-BG.rc b/reactos/base/setup/reactos/lang/bg-BG.rc index 6e9849c7e92..df15c47b8d5 100644 --- a/reactos/base/setup/reactos/lang/bg-BG.rc +++ b/reactos/base/setup/reactos/lang/bg-BG.rc @@ -76,6 +76,8 @@ BEGIN CONTROL "Слагане на начален зареждач (MBR) на твърдия диск", IDC_INSTFREELDR, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 10,46,278,11 CONTROL "Без слагане на начален зареждач", IDC_NOINSTFREELDR, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP | WS_DISABLED , 10,57,278,11 + PUSHBUTTON "&OK", IDOK, 180,83,50,15, WS_TABSTOP | WS_VISIBLE + PUSHBUTTON "&Cancel", IDCANCEL, 240,83,50,15, WS_TABSTOP | WS_VISIBLE END IDD_PROCESSPAGE DIALOGEX 0, 0, 317, 193 diff --git a/reactos/base/setup/reactos/lang/cs-CZ.rc b/reactos/base/setup/reactos/lang/cs-CZ.rc index c57f6eacd30..e89b8dd5064 100644 --- a/reactos/base/setup/reactos/lang/cs-CZ.rc +++ b/reactos/base/setup/reactos/lang/cs-CZ.rc @@ -78,6 +78,8 @@ BEGIN CONTROL "Install boot loader on the hard disk (MBR)", IDC_INSTFREELDR, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 10,46,278,11 CONTROL "No installation of bootloader", IDC_NOINSTFREELDR, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP | WS_DISABLED , 10,57,278,11 + PUSHBUTTON "&OK", IDOK, 180,83,50,15, WS_TABSTOP | WS_VISIBLE + PUSHBUTTON "&Cancel", IDCANCEL, 240,83,50,15, WS_TABSTOP | WS_VISIBLE END IDD_PROCESSPAGE DIALOGEX 0, 0, 317, 193 diff --git a/reactos/base/setup/reactos/lang/de-DE.rc b/reactos/base/setup/reactos/lang/de-DE.rc index 1161b414462..a5af5015692 100644 --- a/reactos/base/setup/reactos/lang/de-DE.rc +++ b/reactos/base/setup/reactos/lang/de-DE.rc @@ -76,6 +76,8 @@ BEGIN CONTROL "Install boot loader on the hard disk (MBR)", IDC_INSTFREELDR, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 10,46,278,11 CONTROL "No installation of bootloader", IDC_NOINSTFREELDR, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP | WS_DISABLED , 10,57,278,11 + PUSHBUTTON "&OK", IDOK, 180,83,50,15, WS_TABSTOP | WS_VISIBLE + PUSHBUTTON "&Cancel", IDCANCEL, 240,83,50,15, WS_TABSTOP | WS_VISIBLE END IDD_PROCESSPAGE DIALOGEX 0, 0, 317, 193 diff --git a/reactos/base/setup/reactos/lang/en-US.rc b/reactos/base/setup/reactos/lang/en-US.rc index 86e4a3e345c..f9b5c327bb9 100644 --- a/reactos/base/setup/reactos/lang/en-US.rc +++ b/reactos/base/setup/reactos/lang/en-US.rc @@ -76,6 +76,8 @@ BEGIN CONTROL "Install boot loader on the hard disk (MBR)", IDC_INSTFREELDR, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 10,46,278,11 CONTROL "No installation of bootloader", IDC_NOINSTFREELDR, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP | WS_DISABLED , 10,57,278,11 + PUSHBUTTON "&OK", IDOK, 180,83,50,15, WS_TABSTOP | WS_VISIBLE + PUSHBUTTON "&Cancel", IDCANCEL, 240,83,50,15, WS_TABSTOP | WS_VISIBLE END IDD_PROCESSPAGE DIALOGEX 0, 0, 317, 193 diff --git a/reactos/base/setup/reactos/lang/es-ES.rc b/reactos/base/setup/reactos/lang/es-ES.rc index 0573d71e845..c2591143258 100644 --- a/reactos/base/setup/reactos/lang/es-ES.rc +++ b/reactos/base/setup/reactos/lang/es-ES.rc @@ -79,6 +79,8 @@ BEGIN CONTROL "Instalar el cargador de arranque en el disco duro (MBR)", IDC_INSTFREELDR, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 10,46,278,11 CONTROL "No instalar el cargador de arranque", IDC_NOINSTFREELDR, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP | WS_DISABLED , 10,57,278,11 + PUSHBUTTON "&OK", IDOK, 180,83,50,15, WS_TABSTOP | WS_VISIBLE + PUSHBUTTON "&Cancel", IDCANCEL, 240,83,50,15, WS_TABSTOP | WS_VISIBLE END IDD_PROCESSPAGE DIALOGEX 0, 0, 317, 193 diff --git a/reactos/base/setup/reactos/lang/fr-FR.rc b/reactos/base/setup/reactos/lang/fr-FR.rc index f736f0ce23c..82cd48bb3d3 100644 --- a/reactos/base/setup/reactos/lang/fr-FR.rc +++ b/reactos/base/setup/reactos/lang/fr-FR.rc @@ -74,6 +74,8 @@ BEGIN CONTROL "Install boot loader on the hard disk (MBR)", IDC_INSTFREELDR, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 10,46,278,11 CONTROL "No installation of bootloader", IDC_NOINSTFREELDR, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP | WS_DISABLED , 10,57,278,11 + PUSHBUTTON "&OK", IDOK, 180,83,50,15, WS_TABSTOP | WS_VISIBLE + PUSHBUTTON "&Cancel", IDCANCEL, 240,83,50,15, WS_TABSTOP | WS_VISIBLE END IDD_PROCESSPAGE DIALOGEX 0, 0, 317, 193 diff --git a/reactos/base/setup/reactos/lang/it-IT.rc b/reactos/base/setup/reactos/lang/it-IT.rc index d0c3a5c821b..0b04158bcf7 100644 --- a/reactos/base/setup/reactos/lang/it-IT.rc +++ b/reactos/base/setup/reactos/lang/it-IT.rc @@ -76,6 +76,8 @@ BEGIN CONTROL "Installazione del Boot loader sul disco fisso (MBR)", IDC_INSTFREELDR, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 10,46,278,11 CONTROL "Non installare il Boot loader", IDC_NOINSTFREELDR, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP | WS_DISABLED , 10,57,278,11 + PUSHBUTTON "&OK", IDOK, 180,83,50,15, WS_TABSTOP | WS_VISIBLE + PUSHBUTTON "&Cancel", IDCANCEL, 240,83,50,15, WS_TABSTOP | WS_VISIBLE END IDD_PROCESSPAGE DIALOGEX 0, 0, 317, 193 diff --git a/reactos/base/setup/reactos/lang/no-NO.rc b/reactos/base/setup/reactos/lang/no-NO.rc index f9a8e0ace56..e8eb57f5bc6 100644 --- a/reactos/base/setup/reactos/lang/no-NO.rc +++ b/reactos/base/setup/reactos/lang/no-NO.rc @@ -76,6 +76,8 @@ BEGIN CONTROL "Installer oppstartslaster pе harddiskens (MBR)", IDC_INSTFREELDR, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 10,46,278,11 CONTROL "Ikke installer oppstartslaster", IDC_NOINSTFREELDR, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP | WS_DISABLED , 10,57,278,11 + PUSHBUTTON "&OK", IDOK, 180,83,50,15, WS_TABSTOP | WS_VISIBLE + PUSHBUTTON "&Cancel", IDCANCEL, 240,83,50,15, WS_TABSTOP | WS_VISIBLE END IDD_PROCESSPAGE DIALOGEX 0, 0, 317, 193 diff --git a/reactos/base/setup/reactos/lang/pl-PL.rc b/reactos/base/setup/reactos/lang/pl-PL.rc index 82452cfaed5..97b257f29a9 100644 --- a/reactos/base/setup/reactos/lang/pl-PL.rc +++ b/reactos/base/setup/reactos/lang/pl-PL.rc @@ -82,6 +82,8 @@ BEGIN CONTROL "Install boot loader on the hard disk (MBR)", IDC_INSTFREELDR, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 10,46,278,11 CONTROL "No installation of bootloader", IDC_NOINSTFREELDR, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP | WS_DISABLED , 10,57,278,11 + PUSHBUTTON "&OK", IDOK, 180,83,50,15, WS_TABSTOP | WS_VISIBLE + PUSHBUTTON "&Cancel", IDCANCEL, 240,83,50,15, WS_TABSTOP | WS_VISIBLE END IDD_PROCESSPAGE DIALOGEX 0, 0, 317, 193 diff --git a/reactos/base/setup/reactos/lang/ru-RU.rc b/reactos/base/setup/reactos/lang/ru-RU.rc index fc8895b074b..835ed71ce4f 100644 --- a/reactos/base/setup/reactos/lang/ru-RU.rc +++ b/reactos/base/setup/reactos/lang/ru-RU.rc @@ -76,6 +76,8 @@ BEGIN CONTROL "Установить загрузчик на диск (MBR)", IDC_INSTFREELDR, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 10,49,278,11 CONTROL "Не устанавливать загрузчик", IDC_NOINSTFREELDR, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP | WS_DISABLED , 10,60,278,11 + PUSHBUTTON "&OK", IDOK, 180,83,50,15, WS_TABSTOP | WS_VISIBLE + PUSHBUTTON "&Cancel", IDCANCEL, 240,83,50,15, WS_TABSTOP | WS_VISIBLE END IDD_PROCESSPAGE DIALOGEX 0, 0, 317, 193 diff --git a/reactos/base/setup/reactos/lang/sk-SK.rc b/reactos/base/setup/reactos/lang/sk-SK.rc index dc0fd2cbf55..de548653951 100644 --- a/reactos/base/setup/reactos/lang/sk-SK.rc +++ b/reactos/base/setup/reactos/lang/sk-SK.rc @@ -81,6 +81,8 @@ BEGIN CONTROL "Install boot loader on the hard disk (MBR)", IDC_INSTFREELDR, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 10,46,278,11 CONTROL "No installation of bootloader", IDC_NOINSTFREELDR, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP | WS_DISABLED , 10,57,278,11 + PUSHBUTTON "&OK", IDOK, 180,83,50,15, WS_TABSTOP | WS_VISIBLE + PUSHBUTTON "&Cancel", IDCANCEL, 240,83,50,15, WS_TABSTOP | WS_VISIBLE END IDD_PROCESSPAGE DIALOGEX 0, 0, 317, 193 diff --git a/reactos/base/setup/reactos/reactos.c b/reactos/base/setup/reactos/reactos.c index 9717129135c..a1d0b138283 100644 --- a/reactos/base/setup/reactos/reactos.c +++ b/reactos/base/setup/reactos/reactos.c @@ -29,6 +29,8 @@ #include #include #include +#include +#include #include #include "resource.h" @@ -69,7 +71,7 @@ struct LONG FormatPart; // type of format the partition LONG SelectedLangId; // selected language (table index) LONG SelectedKBLayout; // selected keyboard layout (table index) - WCHAR InstallationDirectory[MAX_PATH]; // installation directory on hdd + TCHAR InstallDir[MAX_PATH]; // installation directory on hdd LONG SelectedComputer; // selected computer type (table index) LONG SelectedDisplay; // selected display type (table index) LONG SelectedKeyboard; // selected keyboard type (table index) @@ -512,12 +514,47 @@ DeviceDlgProc(HWND hwndDlg, return FALSE; } +static INT_PTR CALLBACK +MoreOptDlgProc(HWND hwndDlg, + UINT uMsg, + WPARAM wParam, + LPARAM lParam) +{ + switch (uMsg) + { + case WM_INITDIALOG: + CheckDlgButton(hwndDlg, IDC_INSTFREELDR, BST_CHECKED); + SendMessage(GetDlgItem(hwndDlg, IDC_PATH),WM_SETTEXT, + (WPARAM)0,(LPARAM)SetupData.InstallDir); + break; + case WM_COMMAND: + switch(LOWORD(wParam)) + { + case IDOK: + SendMessage(GetDlgItem(hwndDlg, IDC_PATH),WM_GETTEXT, + (WPARAM)sizeof(SetupData.InstallDir)/sizeof(TCHAR),(LPARAM)SetupData.InstallDir); + + EndDialog(hwndDlg, IDOK); + break; + case IDCANCEL: + EndDialog(hwndDlg, IDCANCEL); + break; + } + } + return FALSE; +} + + static INT_PTR CALLBACK DriveDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { + HDEVINFO h; + HWND hList; + SP_DEVINFO_DATA DevInfoData; + DWORD i; switch (uMsg) { case WM_INITDIALOG: @@ -530,15 +567,55 @@ DriveDlgProc(HWND hwndDlg, 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);*/ -} + h = SetupDiGetClassDevs(&GUID_DEVCLASS_DISKDRIVE, NULL, NULL, + DIGCF_PRESENT); + if (h != INVALID_HANDLE_VALUE) + { + hList =GetDlgItem(hwndDlg, IDC_PARTITION); + DevInfoData.cbSize = sizeof(SP_DEVINFO_DATA); + for (i=0;SetupDiEnumDeviceInfo(h,i,&DevInfoData);i++) + { + DWORD DataT; + LPTSTR buffer = NULL; + DWORD buffersize = 0; + while (!SetupDiGetDeviceRegistryProperty( + h,&DevInfoData, + SPDRP_DEVICEDESC,&DataT,(PBYTE)buffer, + buffersize,&buffersize)) + { + if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) + { + if (buffer) LocalFree(buffer); + buffer = LocalAlloc(LPTR,buffersize * 2); + } else + break; + } + if (buffer) + { + SendMessage(hList,LB_ADDSTRING,(WPARAM)0,(LPARAM)buffer); + LocalFree(buffer); + } + } + SetupDiDestroyDeviceInfoList(h); + } + } break; + case WM_COMMAND: + { + switch(LOWORD(wParam)) + { + case IDC_PARTMOREOPTS: + DialogBox(hInstance,MAKEINTRESOURCE(IDD_BOOTOPTIONS),hwndDlg,MoreOptDlgProc); + break; + } + + } case WM_NOTIFY: { LPNMHDR lpnm = (LPNMHDR)lParam; @@ -601,6 +678,8 @@ ProcessDlgProc(HWND hwndDlg, { case PSN_SETACTIVE: PropSheet_SetWizButtons(GetParent(hwndDlg), PSWIZB_NEXT ); + // disable all buttons during installation process + // PropSheet_SetWizButtons(GetParent(hwndDlg), 0 ); break; default: break; @@ -827,6 +906,14 @@ void LoadSetupData() while (SetupFindNextLine(&InfContext, &InfContext) && Count < SetupData.KeybCount); } } + // get install directory + if (SetupFindFirstLine(hTxtsetupSif, _T("SetupData"), + _T("DefaultPath"),&InfContext)) + { + SetupGetStringField(&InfContext, 1, + SetupData.InstallDir, + sizeof(SetupData.InstallDir) / sizeof(TCHAR), &LineLength); + } SetupCloseInfFile(hTxtsetupSif); } } @@ -859,6 +946,7 @@ BOOL isUnattendSetup() (_tcsicmp(szValue, _T("yes"))==0)) { result = 1; // unattendSetup enabled + // read values and store in SetupData } } diff --git a/reactos/base/setup/reactos/reactos.rbuild b/reactos/base/setup/reactos/reactos.rbuild index 1f2d64ff472..036469dd323 100644 --- a/reactos/base/setup/reactos/reactos.rbuild +++ b/reactos/base/setup/reactos/reactos.rbuild @@ -8,6 +8,7 @@ user32 comctl32 setupapi + uuid reactos.c reactos.rc diff --git a/reactos/base/setup/reactos/resource.h b/reactos/base/setup/reactos/resource.h index d1d6edc2b38..7194d906602 100644 --- a/reactos/base/setup/reactos/resource.h +++ b/reactos/base/setup/reactos/resource.h @@ -50,6 +50,7 @@ #define IDS_ABORTSETUP2 2039 #define IDC_ACTION 2040 #define IDC_PARTMOREOPTS 2041 +#define IDD_BOOTOPTIONS 2042 #define IDI_MAIN 3000