From 4bf9f6fa4ac1ddf3be0c6ab0f6fbec5037efe258 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Fri, 29 Dec 2017 19:37:28 +0100 Subject: [PATCH] [SETUP:REACTOS] Populate the list of existing installations. - In the 1st-stage GUI setup, display the list of existing discovered NTOS installations, with its name, installation path and vendor name, and an associated icon. --- base/setup/reactos/drivepage.c | 3 + base/setup/reactos/reactos.c | 715 +++++++++++++++------------ base/setup/reactos/reactos.h | 42 +- base/setup/reactos/reactos.rc | 4 +- base/setup/reactos/res/README.txt | 12 + base/setup/reactos/res/roslogo.ico | Bin 0 -> 10134 bytes base/setup/reactos/res/roslogo_2.ico | Bin 0 -> 10134 bytes base/setup/reactos/res/winlogo.ico | Bin 0 -> 10134 bytes base/setup/reactos/resource.h | 5 +- 9 files changed, 431 insertions(+), 350 deletions(-) create mode 100644 base/setup/reactos/res/README.txt create mode 100644 base/setup/reactos/res/roslogo.ico create mode 100644 base/setup/reactos/res/roslogo_2.ico create mode 100644 base/setup/reactos/res/winlogo.ico diff --git a/base/setup/reactos/drivepage.c b/base/setup/reactos/drivepage.c index 5130a2983c5..b8bc07f3ced 100644 --- a/base/setup/reactos/drivepage.c +++ b/base/setup/reactos/drivepage.c @@ -29,6 +29,9 @@ /* GLOBALS ******************************************************************/ +#define IDS_LIST_COLUMN_FIRST IDS_PARTITION_NAME +#define IDS_LIST_COLUMN_LAST IDS_PARTITION_TYPE + #define MAX_LIST_COLUMNS (IDS_LIST_COLUMN_LAST - IDS_LIST_COLUMN_FIRST + 1) static const UINT column_ids[MAX_LIST_COLUMNS] = {IDS_LIST_COLUMN_FIRST, IDS_LIST_COLUMN_FIRST + 1, IDS_LIST_COLUMN_FIRST + 2}; static const INT column_widths[MAX_LIST_COLUMNS] = {200, 150, 150}; diff --git a/base/setup/reactos/reactos.c b/base/setup/reactos/reactos.c index 23c659c3d58..7bc0581b9c7 100644 --- a/base/setup/reactos/reactos.c +++ b/base/setup/reactos/reactos.c @@ -39,8 +39,6 @@ SETUPDATA SetupData; /* FUNCTIONS ****************************************************************/ -LONG LoadGenentry(HINF hinf,PCTSTR name,PGENENTRY *gen,PINFCONTEXT context); - static VOID CenterWindow(HWND hWnd) { @@ -112,14 +110,14 @@ StartDlgProc( PSETUPDATA pSetupData; /* Retrieve pointer to the global setup data */ - pSetupData = (PSETUPDATA)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); + pSetupData = (PSETUPDATA)GetWindowLongPtrW(hwndDlg, GWLP_USERDATA); switch (uMsg) { case WM_INITDIALOG: /* Save pointer to the global setup data */ pSetupData = (PSETUPDATA)((LPPROPSHEETPAGE)lParam)->lParam; - SetWindowLongPtr(hwndDlg, GWLP_USERDATA, (DWORD_PTR)pSetupData); + SetWindowLongPtrW(hwndDlg, GWLP_USERDATA, (DWORD_PTR)pSetupData); /* Center the wizard window */ CenterWindow(GetParent(hwndDlg)); @@ -166,96 +164,34 @@ TypeDlgProc( PSETUPDATA pSetupData; /* Retrieve pointer to the global setup data */ - pSetupData = (PSETUPDATA)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); + pSetupData = (PSETUPDATA)GetWindowLongPtrW(hwndDlg, GWLP_USERDATA); switch (uMsg) { case WM_INITDIALOG: + { /* Save pointer to the global setup data */ pSetupData = (PSETUPDATA)((LPPROPSHEETPAGE)lParam)->lParam; - SetWindowLongPtr(hwndDlg, GWLP_USERDATA, (DWORD_PTR)pSetupData); + SetWindowLongPtrW(hwndDlg, GWLP_USERDATA, (DWORD_PTR)pSetupData); /* Check the 'install' radio button */ CheckDlgButton(hwndDlg, IDC_INSTALL, BST_CHECKED); - /* Disable the 'update' radio button and text */ - EnableWindow(GetDlgItem(hwndDlg, IDC_UPDATE), FALSE); - EnableWindow(GetDlgItem(hwndDlg, IDC_UPDATETEXT), FALSE); - break; - - case WM_NOTIFY: - { - LPNMHDR lpnm = (LPNMHDR)lParam; - - switch (lpnm->code) + /* + * Enable the 'update' radio button and text only if we have + * available NT installations, otherwise disable them. + */ + if (pSetupData->NtOsInstallsList && + GetNumberOfListEntries(pSetupData->NtOsInstallsList) != 0) { - case PSN_SETACTIVE: - PropSheet_SetWizButtons(GetParent(hwndDlg), PSWIZB_NEXT | PSWIZB_BACK); - break; - - case PSN_QUERYCANCEL: - SetWindowLongPtr(hwndDlg, - DWLP_MSGRESULT, - MessageBox(GetParent(hwndDlg), - pSetupData->szAbortMessage, - pSetupData->szAbortTitle, - MB_YESNO | MB_ICONQUESTION) != IDYES); - return TRUE; - - case PSN_WIZNEXT: // set the selected data - pSetupData->RepairUpdateFlag = !(SendMessage(GetDlgItem(hwndDlg, IDC_INSTALL), - BM_GETCHECK, - (WPARAM) 0, - (LPARAM) 0) == BST_CHECKED); - return TRUE; - - default: - break; + EnableWindow(GetDlgItem(hwndDlg, IDC_UPDATE), TRUE); + EnableWindow(GetDlgItem(hwndDlg, IDC_UPDATETEXT), TRUE); + } + else + { + EnableWindow(GetDlgItem(hwndDlg, IDC_UPDATE), FALSE); + EnableWindow(GetDlgItem(hwndDlg, IDC_UPDATETEXT), FALSE); } - } - break; - - default: - break; - - } - return FALSE; -} - -#define MAX_LIST_COLUMNS (IDS_LIST_COLUMN_LAST - IDS_LIST_COLUMN_FIRST + 1) -static const UINT column_ids[MAX_LIST_COLUMNS] = {IDS_LIST_COLUMN_FIRST, IDS_LIST_COLUMN_FIRST + 1, IDS_LIST_COLUMN_FIRST + 2}; -static const INT column_widths[MAX_LIST_COLUMNS] = {200, 150, 150}; -static const INT column_alignment[MAX_LIST_COLUMNS] = {LVCFMT_LEFT, LVCFMT_LEFT, LVCFMT_LEFT}; - -static INT_PTR CALLBACK -UpgradeRepairDlgProc( - IN HWND hwndDlg, - IN UINT uMsg, - IN WPARAM wParam, - IN LPARAM lParam) -{ - PSETUPDATA pSetupData; - HWND hList; - - /* Retrieve pointer to the global setup data */ - pSetupData = (PSETUPDATA)GetWindowLongPtrW(hwndDlg, GWL_USERDATA); - - switch (uMsg) - { - case WM_INITDIALOG: - { - /* Save pointer to the global setup data */ - pSetupData = (PSETUPDATA)((LPPROPSHEETPAGE)lParam)->lParam; - SetWindowLongPtrW(hwndDlg, GWL_USERDATA, (DWORD_PTR)pSetupData); - - hList = GetDlgItem(hwndDlg, IDC_LIST1); - - CreateListViewColumns(pSetupData->hInstance, - hList, - column_ids, - column_widths, - column_alignment, - MAX_LIST_COLUMNS); break; } @@ -272,18 +208,316 @@ UpgradeRepairDlgProc( case PSN_QUERYCANCEL: SetWindowLongPtrW(hwndDlg, - DWL_MSGRESULT, - MessageBox(GetParent(hwndDlg), - pSetupData->szAbortMessage, - pSetupData->szAbortTitle, - MB_YESNO | MB_ICONQUESTION) != IDYES); + DWLP_MSGRESULT, + MessageBoxW(GetParent(hwndDlg), + pSetupData->szAbortMessage, + pSetupData->szAbortTitle, + MB_YESNO | MB_ICONQUESTION) != IDYES); return TRUE; - case PSN_WIZNEXT: // set the selected data - pSetupData->RepairUpdateFlag = !(SendMessageW(GetDlgItem(hwndDlg, IDC_INSTALL), - BM_GETCHECK, - (WPARAM) 0, - (LPARAM) 0) == BST_CHECKED); + case PSN_WIZNEXT: /* Set the selected data */ + { + pSetupData->RepairUpdateFlag = + !(SendMessageW(GetDlgItem(hwndDlg, IDC_INSTALL), + BM_GETCHECK, + 0, 0) == BST_CHECKED); + + /* + * Display the existing NT installations page only + * if we have more than one available NT installations. + */ + if (pSetupData->NtOsInstallsList && + GetNumberOfListEntries(pSetupData->NtOsInstallsList) > 1) + { + /* Actually the best would be to dynamically insert the page only when needed */ + SetWindowLongPtrW(hwndDlg, DWLP_MSGRESULT, IDD_UPDATEREPAIRPAGE); + } + else + { + SetWindowLongPtrW(hwndDlg, DWLP_MSGRESULT, IDD_DEVICEPAGE); + } + + return TRUE; + } + + default: + break; + } + } + break; + + default: + break; + + } + return FALSE; +} + + + +typedef VOID +(NTAPI *PGET_ENTRY_DESCRIPTION)( + IN PGENERIC_LIST_ENTRY Entry, + OUT PWSTR Buffer, + IN SIZE_T cchBufferSize); + +VOID +InitGenericComboList( + IN HWND hWndList, + IN PGENERIC_LIST List, + IN PGET_ENTRY_DESCRIPTION GetEntryDescriptionProc) +{ + INT Index, CurrentEntryIndex = 0; + PGENERIC_LIST_ENTRY ListEntry; + PLIST_ENTRY Entry; + WCHAR CurrentItemText[256]; + + for (Entry = List->ListHead.Flink; + Entry != &List->ListHead; + Entry = Entry->Flink) + { + ListEntry = CONTAINING_RECORD(Entry, GENERIC_LIST_ENTRY, Entry); + + if (GetEntryDescriptionProc) + { + GetEntryDescriptionProc(ListEntry, + CurrentItemText, + ARRAYSIZE(CurrentItemText)); + Index = SendMessageW(hWndList, CB_ADDSTRING, 0, (LPARAM)CurrentItemText); + } + else + { + Index = SendMessageW(hWndList, CB_ADDSTRING, 0, (LPARAM)L"n/a"); + } + + if (ListEntry == List->CurrentEntry) + CurrentEntryIndex = Index; + + SendMessageW(hWndList, CB_SETITEMDATA, Index, (LPARAM)ListEntry); + } + + SendMessageW(hWndList, CB_SETCURSEL, CurrentEntryIndex, 0); +} + +INT +GetSelectedComboListItem( + IN HWND hWndList) +{ + LRESULT Index; + + Index = SendMessageW(hWndList, CB_GETCURSEL, 0, 0); + if (Index == CB_ERR) + return CB_ERR; + + // TODO: Update List->CurrentEntry? + // return SendMessageW(hWndList, CB_GETITEMDATA, (WPARAM)Index, 0); + return Index; +} + +typedef VOID +(NTAPI *PADD_ENTRY_ITEM)( + IN HWND hWndList, + IN LVITEM* plvItem, + IN PGENERIC_LIST_ENTRY Entry, + IN OUT PWSTR Buffer, + IN SIZE_T cchBufferSize); + +VOID +InitGenericListView( + IN HWND hWndList, + IN PGENERIC_LIST List, + IN PADD_ENTRY_ITEM AddEntryItemProc) +{ + INT CurrentEntryIndex = 0; + LVITEM lvItem; + PGENERIC_LIST_ENTRY ListEntry; + PLIST_ENTRY Entry; + WCHAR CurrentItemText[256]; + + for (Entry = List->ListHead.Flink; + Entry != &List->ListHead; + Entry = Entry->Flink) + { + ListEntry = CONTAINING_RECORD(Entry, GENERIC_LIST_ENTRY, Entry); + + if (!AddEntryItemProc) + continue; + + AddEntryItemProc(hWndList, + &lvItem, + ListEntry, + CurrentItemText, + ARRAYSIZE(CurrentItemText)); + + if (ListEntry == List->CurrentEntry) + CurrentEntryIndex = lvItem.iItem; + } + + SendMessageW(hWndList, LVM_ENSUREVISIBLE, CurrentEntryIndex, FALSE); + ListView_SetItemState(hWndList, CurrentEntryIndex, LVIS_SELECTED, LVIS_SELECTED); + ListView_SetItemState(hWndList, CurrentEntryIndex, LVIS_FOCUSED, LVIS_FOCUSED); +} + + +static VOID +NTAPI +GetSettingDescription( + IN PGENERIC_LIST_ENTRY Entry, + OUT PWSTR Buffer, + IN SIZE_T cchBufferSize) +{ + StringCchCopyW(Buffer, cchBufferSize, + ((PGENENTRY)GetListEntryData(Entry))->Value); +} + +static VOID +NTAPI +AddNTOSInstallationItem( + IN HWND hWndList, + IN LVITEM* plvItem, + IN PGENERIC_LIST_ENTRY Entry, + IN OUT PWSTR Buffer, // SystemRootPath + IN SIZE_T cchBufferSize) +{ + PNTOS_INSTALLATION NtOsInstall = (PNTOS_INSTALLATION)GetListEntryData(Entry); + PPARTENTRY PartEntry = NtOsInstall->PartEntry; + + if (PartEntry && PartEntry->DriveLetter) + { + /* We have retrieved a partition that is mounted */ + StringCchPrintfW(Buffer, cchBufferSize, + L"%C:%s", + PartEntry->DriveLetter, + NtOsInstall->PathComponent); + } + else + { + /* We failed somewhere, just show the NT path */ + StringCchPrintfW(Buffer, cchBufferSize, + L"%wZ", + &NtOsInstall->SystemNtPath); + } + + plvItem->mask = LVIF_IMAGE | LVIF_TEXT | LVIF_PARAM; + plvItem->iItem = 0; + plvItem->iSubItem = 0; + plvItem->lParam = (LPARAM)Entry; + plvItem->pszText = NtOsInstall->InstallationName; + + /* Associate vendor icon */ + if (FindSubStrI(NtOsInstall->VendorName, VENDOR_REACTOS)) + { + plvItem->mask |= LVIF_IMAGE; + plvItem->iImage = 0; + } + else if (FindSubStrI(NtOsInstall->VendorName, VENDOR_MICROSOFT)) + { + plvItem->mask |= LVIF_IMAGE; + plvItem->iImage = 1; + } + + plvItem->iItem = SendMessageW(hWndList, LVM_INSERTITEMW, 0, (LPARAM)plvItem); + + plvItem->iSubItem = 1; + plvItem->pszText = Buffer; // SystemRootPath; + SendMessageW(hWndList, LVM_SETITEMTEXTW, plvItem->iItem, (LPARAM)plvItem); + + plvItem->iSubItem = 2; + plvItem->pszText = NtOsInstall->VendorName; + SendMessageW(hWndList, LVM_SETITEMTEXTW, plvItem->iItem, (LPARAM)plvItem); +} + + +#define IDS_LIST_COLUMN_FIRST IDS_INSTALLATION_NAME +#define IDS_LIST_COLUMN_LAST IDS_INSTALLATION_VENDOR + +#define MAX_LIST_COLUMNS (IDS_LIST_COLUMN_LAST - IDS_LIST_COLUMN_FIRST + 1) +static const UINT column_ids[MAX_LIST_COLUMNS] = {IDS_LIST_COLUMN_FIRST, IDS_LIST_COLUMN_FIRST + 1, IDS_LIST_COLUMN_FIRST + 2}; +static const INT column_widths[MAX_LIST_COLUMNS] = {200, 150, 100}; +static const INT column_alignment[MAX_LIST_COLUMNS] = {LVCFMT_LEFT, LVCFMT_LEFT, LVCFMT_LEFT}; + +static INT_PTR CALLBACK +UpgradeRepairDlgProc( + IN HWND hwndDlg, + IN UINT uMsg, + IN WPARAM wParam, + IN LPARAM lParam) +{ + PSETUPDATA pSetupData; + HWND hList; + HIMAGELIST hSmall; + + /* Retrieve pointer to the global setup data */ + pSetupData = (PSETUPDATA)GetWindowLongPtrW(hwndDlg, GWLP_USERDATA); + + switch (uMsg) + { + case WM_INITDIALOG: + { + /* Save pointer to the global setup data */ + pSetupData = (PSETUPDATA)((LPPROPSHEETPAGE)lParam)->lParam; + SetWindowLongPtrW(hwndDlg, GWLP_USERDATA, (DWORD_PTR)pSetupData); + + hList = GetDlgItem(hwndDlg, IDC_NTOSLIST); + + CreateListViewColumns(pSetupData->hInstance, + hList, + column_ids, + column_widths, + column_alignment, + MAX_LIST_COLUMNS); + + /* Create the ImageList */ + hSmall = ImageList_Create(GetSystemMetrics(SM_CXSMICON), + GetSystemMetrics(SM_CYSMICON), + ILC_COLOR32 | ILC_MASK, // ILC_COLOR24 + 1, 1); + + /* Add event type icons to the ImageList */ + ImageList_AddIcon(hSmall, LoadIconW(pSetupData->hInstance, MAKEINTRESOURCEW(IDI_ROSICON))); + ImageList_AddIcon(hSmall, LoadIconW(pSetupData->hInstance, MAKEINTRESOURCEW(IDI_WINICON))); + + /* Assign the ImageList to the List View */ + ListView_SetImageList(hList, hSmall, LVSIL_SMALL); + + InitGenericListView(hList, pSetupData->NtOsInstallsList, AddNTOSInstallationItem); + + break; + } + + case WM_DESTROY: + { + hList = GetDlgItem(hwndDlg, IDC_NTOSLIST); + hSmall = ListView_GetImageList(hList, LVSIL_SMALL); + ListView_SetImageList(hList, NULL, LVSIL_SMALL); + ImageList_Destroy(hSmall); + return TRUE; + } + + 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: + SetWindowLongPtrW(hwndDlg, + DWLP_MSGRESULT, + MessageBoxW(GetParent(hwndDlg), + pSetupData->szAbortMessage, + pSetupData->szAbortTitle, + MB_YESNO | MB_ICONQUESTION) != IDYES); + return TRUE; + + case PSN_WIZNEXT: /* Set the selected data */ + pSetupData->RepairUpdateFlag = + !(SendMessageW(GetDlgItem(hwndDlg, IDC_INSTALL), + BM_GETCHECK, + 0, 0) == BST_CHECKED); return TRUE; default: @@ -307,47 +541,33 @@ DeviceDlgProc( IN LPARAM lParam) { PSETUPDATA pSetupData; - LONG i; - LRESULT tindex; HWND hList; /* Retrieve pointer to the global setup data */ - pSetupData = (PSETUPDATA)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); + pSetupData = (PSETUPDATA)GetWindowLongPtrW(hwndDlg, GWLP_USERDATA); switch (uMsg) { case WM_INITDIALOG: + { /* Save pointer to the global setup data */ pSetupData = (PSETUPDATA)((LPPROPSHEETPAGE)lParam)->lParam; - SetWindowLongPtr(hwndDlg, GWLP_USERDATA, (DWORD_PTR)pSetupData); + SetWindowLongPtrW(hwndDlg, GWLP_USERDATA, (DWORD_PTR)pSetupData); hList = GetDlgItem(hwndDlg, IDC_COMPUTER); - - for (i=0; i < pSetupData->CompCount; i++) - { - tindex = SendMessage(hList, CB_ADDSTRING, (WPARAM) 0, (LPARAM) pSetupData->pComputers[i].Value); - SendMessage(hList, CB_SETITEMDATA, tindex, i); - } - SendMessage(hList, CB_SETCURSEL, 0, 0); // set first as default + InitGenericComboList(hList, pSetupData->ComputerList, GetSettingDescription); hList = GetDlgItem(hwndDlg, IDC_DISPLAY); - - for (i=0; i < pSetupData->DispCount; i++) - { - tindex = SendMessage(hList, CB_ADDSTRING, (WPARAM) 0, (LPARAM) pSetupData->pDisplays[i].Value); - SendMessage(hList, CB_SETITEMDATA, tindex, i); - } - SendMessage(hList, CB_SETCURSEL, 0, 0); // set first as default + InitGenericComboList(hList, pSetupData->DisplayList, GetSettingDescription); hList = GetDlgItem(hwndDlg, IDC_KEYBOARD); + InitGenericComboList(hList, pSetupData->KeyboardList, GetSettingDescription); + + // hList = GetDlgItem(hwndDlg, IDC_KEYBOARD_LAYOUT); + // InitGenericComboList(hList, pSetupData->LayoutList, GetSettingDescription); - for (i=0; i < pSetupData->KeybCount; i++) - { - tindex = SendMessage(hList,CB_ADDSTRING,(WPARAM)0,(LPARAM)pSetupData->pKeyboards[i].Value); - SendMessage(hList,CB_SETITEMDATA,tindex,i); - } - SendMessage(hList,CB_SETCURSEL,0,0); // set first as default break; + } case WM_NOTIFY: { @@ -360,48 +580,25 @@ DeviceDlgProc( break; case PSN_QUERYCANCEL: - SetWindowLongPtr(hwndDlg, - DWLP_MSGRESULT, - MessageBox(GetParent(hwndDlg), - pSetupData->szAbortMessage, - pSetupData->szAbortTitle, - MB_YESNO | MB_ICONQUESTION) != IDYES); + SetWindowLongPtrW(hwndDlg, + DWLP_MSGRESULT, + MessageBoxW(GetParent(hwndDlg), + pSetupData->szAbortMessage, + pSetupData->szAbortTitle, + MB_YESNO | MB_ICONQUESTION) != IDYES); return TRUE; - case PSN_WIZNEXT: // set the selected data + case PSN_WIZNEXT: /* Set the selected data */ { - hList = GetDlgItem(hwndDlg, IDC_COMPUTER); - - tindex = SendMessage(hList, CB_GETCURSEL, (WPARAM) 0, (LPARAM) 0); - if (tindex != CB_ERR) - { - pSetupData->SelectedComputer = SendMessage(hList, - CB_GETITEMDATA, - (WPARAM) tindex, - (LPARAM) 0); - } + hList = GetDlgItem(hwndDlg, IDC_COMPUTER); + pSetupData->SelectedComputer = GetSelectedComboListItem(hList); hList = GetDlgItem(hwndDlg, IDC_DISPLAY); + pSetupData->SelectedDisplay = GetSelectedComboListItem(hList); - tindex = SendMessage(hList, CB_GETCURSEL, (WPARAM) 0, (LPARAM) 0); - if (tindex != CB_ERR) - { - pSetupData->SelectedDisplay = SendMessage(hList, - CB_GETITEMDATA, - (WPARAM) tindex, - (LPARAM) 0); - } + hList = GetDlgItem(hwndDlg, IDC_KEYBOARD); + pSetupData->SelectedKeyboard = GetSelectedComboListItem(hList); - hList =GetDlgItem(hwndDlg, IDC_KEYBOARD); - - tindex = SendMessage(hList, CB_GETCURSEL, (WPARAM) 0, (LPARAM) 0); - if (tindex != CB_ERR) - { - pSetupData->SelectedKeyboard = SendMessage(hList, - CB_GETITEMDATA, - (WPARAM) tindex, - (LPARAM) 0); - } return TRUE; } @@ -428,14 +625,14 @@ SummaryDlgProc( PSETUPDATA pSetupData; /* Retrieve pointer to the global setup data */ - pSetupData = (PSETUPDATA)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); + pSetupData = (PSETUPDATA)GetWindowLongPtrW(hwndDlg, GWLP_USERDATA); switch (uMsg) { case WM_INITDIALOG: /* Save pointer to the global setup data */ pSetupData = (PSETUPDATA)((LPPROPSHEETPAGE)lParam)->lParam; - SetWindowLongPtr(hwndDlg, GWLP_USERDATA, (DWORD_PTR)pSetupData); + SetWindowLongPtrW(hwndDlg, GWLP_USERDATA, (DWORD_PTR)pSetupData); break; case WM_NOTIFY: @@ -444,18 +641,19 @@ SummaryDlgProc( switch (lpnm->code) { - case PSN_SETACTIVE: + case PSN_SETACTIVE: PropSheet_SetWizButtons(GetParent(hwndDlg), PSWIZB_NEXT | PSWIZB_BACK); break; case PSN_QUERYCANCEL: - SetWindowLongPtr(hwndDlg, - DWLP_MSGRESULT, - MessageBox(GetParent(hwndDlg), - pSetupData->szAbortMessage, - pSetupData->szAbortTitle, - MB_YESNO | MB_ICONQUESTION) != IDYES); + SetWindowLongPtrW(hwndDlg, + DWLP_MSGRESULT, + MessageBoxW(GetParent(hwndDlg), + pSetupData->szAbortMessage, + pSetupData->szAbortTitle, + MB_YESNO | MB_ICONQUESTION) != IDYES); return TRUE; + default: break; } @@ -479,14 +677,14 @@ ProcessDlgProc( PSETUPDATA pSetupData; /* Retrieve pointer to the global setup data */ - pSetupData = (PSETUPDATA)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); + pSetupData = (PSETUPDATA)GetWindowLongPtrW(hwndDlg, GWLP_USERDATA); switch (uMsg) { case WM_INITDIALOG: /* Save pointer to the global setup data */ pSetupData = (PSETUPDATA)((LPPROPSHEETPAGE)lParam)->lParam; - SetWindowLongPtr(hwndDlg, GWLP_USERDATA, (DWORD_PTR)pSetupData); + SetWindowLongPtrW(hwndDlg, GWLP_USERDATA, (DWORD_PTR)pSetupData); break; case WM_NOTIFY: @@ -501,13 +699,14 @@ ProcessDlgProc( // PropSheet_SetWizButtons(GetParent(hwndDlg), 0 ); break; case PSN_QUERYCANCEL: - SetWindowLongPtr(hwndDlg, - DWLP_MSGRESULT, - MessageBox(GetParent(hwndDlg), - pSetupData->szAbortMessage, - pSetupData->szAbortTitle, - MB_YESNO | MB_ICONQUESTION) != IDYES); + SetWindowLongPtrW(hwndDlg, + DWLP_MSGRESULT, + MessageBoxW(GetParent(hwndDlg), + pSetupData->szAbortMessage, + pSetupData->szAbortTitle, + MB_YESNO | MB_ICONQUESTION) != IDYES); return TRUE; + default: break; } @@ -532,14 +731,14 @@ RestartDlgProc( PSETUPDATA pSetupData; /* Retrieve pointer to the global setup data */ - pSetupData = (PSETUPDATA)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); + pSetupData = (PSETUPDATA)GetWindowLongPtrW(hwndDlg, GWLP_USERDATA); switch (uMsg) { case WM_INITDIALOG: /* Save pointer to the global setup data */ pSetupData = (PSETUPDATA)((LPPROPSHEETPAGE)lParam)->lParam; - SetWindowLongPtr(hwndDlg, GWLP_USERDATA, (DWORD_PTR)pSetupData); + SetWindowLongPtrW(hwndDlg, GWLP_USERDATA, (DWORD_PTR)pSetupData); /* Set title font */ /*SendDlgItemMessage(hwndDlg, @@ -555,7 +754,7 @@ RestartDlgProc( HWND hWndProgress; hWndProgress = GetDlgItem(hwndDlg, IDC_RESTART_PROGRESS); - Position = SendMessage(hWndProgress, PBM_GETPOS, 0, 0); + Position = SendMessageW(hWndProgress, PBM_GETPOS, 0, 0); if (Position == 300) { KillTimer(hwndDlg, 1); @@ -563,7 +762,7 @@ RestartDlgProc( } else { - SendMessage(hWndProgress, PBM_SETPOS, Position + 1, 0); + SendMessageW(hWndProgress, PBM_SETPOS, Position + 1, 0); } return TRUE; } @@ -602,78 +801,34 @@ BOOL LoadSetupData( IN OUT PSETUPDATA pSetupData) { BOOL ret = TRUE; - INFCONTEXT InfContext; - TCHAR tmp[10]; - //TCHAR szValue[MAX_PATH]; - DWORD LineLength; - LONG Count; + // INFCONTEXT InfContext; + // TCHAR tmp[10]; + // DWORD LineLength; + // LONG Count; - // get language list - pSetupData->LangCount = SetupGetLineCount(pSetupData->SetupInf, _T("Language")); - if (pSetupData->LangCount > 0) - { - pSetupData->pLanguages = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(LANG) * pSetupData->LangCount); - if (pSetupData->pLanguages == NULL) - { - ret = FALSE; - goto done; - } + /* Load the hardware, language and keyboard layout lists */ - Count = 0; - if (SetupFindFirstLine(pSetupData->SetupInf, _T("Language"), NULL, &InfContext)) - { - do - { - SetupGetStringField(&InfContext, - 0, - pSetupData->pLanguages[Count].LangId, - sizeof(pSetupData->pLanguages[Count].LangId) / sizeof(TCHAR), - &LineLength); + pSetupData->ComputerList = CreateComputerTypeList(pSetupData->SetupInf); + pSetupData->DisplayList = CreateDisplayDriverList(pSetupData->SetupInf); + pSetupData->KeyboardList = CreateKeyboardDriverList(pSetupData->SetupInf); - SetupGetStringField(&InfContext, - 1, - pSetupData->pLanguages[Count].LangName, - sizeof(pSetupData->pLanguages[Count].LangName) / sizeof(TCHAR), - &LineLength); - ++Count; - } - while (SetupFindNextLine(&InfContext, &InfContext) && Count < pSetupData->LangCount); - } - } + pSetupData->LanguageList = CreateLanguageList(pSetupData->SetupInf, pSetupData->DefaultLanguage); - // get keyboard layout list - pSetupData->KbLayoutCount = SetupGetLineCount(pSetupData->SetupInf, _T("KeyboardLayout")); - if (pSetupData->KbLayoutCount > 0) - { - pSetupData->pKbLayouts = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(KBLAYOUT) * pSetupData->KbLayoutCount); - if (pSetupData->pKbLayouts == NULL) - { - ret = FALSE; - goto done; - } + pSetupData->PartitionList = CreatePartitionList(); - Count = 0; - if (SetupFindFirstLine(pSetupData->SetupInf, _T("KeyboardLayout"), NULL, &InfContext)) - { - do - { - SetupGetStringField(&InfContext, - 0, - pSetupData->pKbLayouts[Count].LayoutId, - sizeof(pSetupData->pKbLayouts[Count].LayoutId) / sizeof(TCHAR), - &LineLength); + pSetupData->NtOsInstallsList = CreateNTOSInstallationsList(pSetupData->PartitionList); + if (!pSetupData->NtOsInstallsList) + DPRINT1("Failed to get a list of NTOS installations; continue installation...\n"); - SetupGetStringField(&InfContext, - 1, - pSetupData->pKbLayouts[Count].LayoutName, - sizeof(pSetupData->pKbLayouts[Count].LayoutName) / sizeof(TCHAR), - &LineLength); - ++Count; - } - while (SetupFindNextLine(&InfContext, &InfContext) && Count < pSetupData->KbLayoutCount); - } - } + /* new part */ + pSetupData->SelectedLanguageId = pSetupData->DefaultLanguage; + wcscpy(pSetupData->DefaultLanguage, pSetupData->USetupData.LocaleID); + pSetupData->USetupData.LanguageId = (LANGID)(wcstol(pSetupData->SelectedLanguageId, NULL, 16) & 0xFFFF); + + pSetupData->LayoutList = CreateKeyboardLayoutList(pSetupData->SetupInf, pSetupData->SelectedLanguageId, pSetupData->DefaultKBLayout); + +#if 0 // get default for keyboard and language pSetupData->DefaultKBLayout = -1; pSetupData->DefaultLang = -1; @@ -681,7 +836,7 @@ BOOL LoadSetupData( // TODO: get defaults from underlaying running system if (SetupFindFirstLine(pSetupData->SetupInf, _T("NLS"), _T("DefaultLayout"), &InfContext)) { - SetupGetStringField(&InfContext, 1, tmp, sizeof(tmp) / sizeof(TCHAR), &LineLength); + SetupGetStringField(&InfContext, 1, tmp, ARRAYSIZE(tmp), &LineLength); for (Count = 0; Count < pSetupData->KbLayoutCount; Count++) { if (_tcscmp(tmp, pSetupData->pKbLayouts[Count].LayoutId) == 0) @@ -694,7 +849,7 @@ BOOL LoadSetupData( if (SetupFindFirstLine(pSetupData->SetupInf, _T("NLS"), _T("DefaultLanguage"), &InfContext)) { - SetupGetStringField(&InfContext, 1, tmp, sizeof(tmp) / sizeof(TCHAR), &LineLength); + SetupGetStringField(&InfContext, 1, tmp, ARRAYSIZE(tmp), &LineLength); for (Count = 0; Count < pSetupData->LangCount; Count++) { if (_tcscmp(tmp, pSetupData->pLanguages[Count].LangId) == 0) @@ -704,82 +859,11 @@ BOOL LoadSetupData( } } } - - // get computers list - pSetupData->CompCount = LoadGenentry(pSetupData->SetupInf,_T("Computer"),&pSetupData->pComputers,&InfContext); - - // get display list - pSetupData->DispCount = LoadGenentry(pSetupData->SetupInf,_T("Display"),&pSetupData->pDisplays,&InfContext); - - // get keyboard list - pSetupData->KeybCount = LoadGenentry(pSetupData->SetupInf, _T("Keyboard"),&pSetupData->pKeyboards,&InfContext); - - // get install directory - if (SetupFindFirstLine(pSetupData->SetupInf, _T("SetupData"), _T("DefaultPath"), &InfContext)) - { - SetupGetStringField(&InfContext, - 1, - pSetupData->USetupData.InstallationDirectory, - sizeof(pSetupData->USetupData.InstallationDirectory) / sizeof(TCHAR), - &LineLength); - } - -done: - if (ret == FALSE) - { - if (pSetupData->pKbLayouts != NULL) - { - HeapFree(GetProcessHeap(), 0, pSetupData->pKbLayouts); - pSetupData->pKbLayouts = NULL; - } - - if (pSetupData->pLanguages != NULL) - { - HeapFree(GetProcessHeap(), 0, pSetupData->pLanguages); - pSetupData->pLanguages = NULL; - } - } +#endif return ret; } -LONG LoadGenentry(HINF hinf,PCTSTR name,PGENENTRY *gen,PINFCONTEXT context) -{ - LONG TotalCount; - DWORD LineLength; - - TotalCount = SetupGetLineCount(hinf, name); - if (TotalCount > 0) - { - *gen = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(GENENTRY) * TotalCount); - if (*gen != NULL) - { - if (SetupFindFirstLine(hinf, name, NULL, context)) - { - LONG Count = 0; - do - { - SetupGetStringField(context, - 0, - (*gen)[Count].Id, - sizeof((*gen)[Count].Id) / sizeof(TCHAR), - &LineLength); - - SetupGetStringField(context, - 1, - (*gen)[Count].Value, - sizeof((*gen)[Count].Value) / sizeof(TCHAR), - &LineLength); - ++Count; - } - while (SetupFindNextLine(context, context) && Count < TotalCount); - } - } - else return 0; - } - return TotalCount; -} - /* * Attempts to convert a pure NT file path into a corresponding Win32 path. * Adapted from GetInstallSourceWin32() in dll/win32/syssetup/wizard.c @@ -866,6 +950,7 @@ _tWinMain(HINSTANCE hInst, { NTSTATUS Status; ULONG Error; + INITCOMMONCONTROLSEX iccx; PROPSHEETHEADER psh; HPROPSHEETPAGE ahpsp[8]; PROPSHEETPAGE psp = {0}; @@ -920,9 +1005,17 @@ _tWinMain(HINSTANCE hInst, CheckUnattendedSetup(&SetupData.USetupData); SetupData.bUnattend = IsUnattendedSetup; + /* Cache commonly-used strings */ LoadStringW(hInst, IDS_ABORTSETUP, SetupData.szAbortMessage, ARRAYSIZE(SetupData.szAbortMessage)); LoadStringW(hInst, IDS_ABORTSETUP2, SetupData.szAbortTitle, ARRAYSIZE(SetupData.szAbortTitle)); + /* Whenever any of the common controls are used in your app, + * you must call InitCommonControlsEx() to register the classes + * for those controls. */ + iccx.dwSize = sizeof(iccx); + iccx.dwICC = ICC_LISTVIEW_CLASSES | ICC_TREEVIEW_CLASSES /* | ICC_PROGRESS_CLASS */; + InitCommonControlsEx(&iccx); + /* Create title font */ SetupData.hTitleFont = CreateTitleFont(); diff --git a/base/setup/reactos/reactos.h b/base/setup/reactos/reactos.h index a27eea12a46..760b62708ab 100644 --- a/base/setup/reactos/reactos.h +++ b/base/setup/reactos/reactos.h @@ -40,10 +40,11 @@ #include #include +#include + #include /**/#include /**/ #include -// #include #define NTOS_MODE_USER #include // For CM_DISK stuff @@ -56,26 +57,14 @@ #include <../lib/setuplib.h> // #include "errorcode.h" - -typedef struct _LANG -{ - TCHAR LangId[9]; - TCHAR LangName[128]; -} LANG, *PLANG; - +#if 0 typedef struct _KBLAYOUT { TCHAR LayoutId[9]; TCHAR LayoutName[128]; TCHAR DllName[128]; } KBLAYOUT, *PKBLAYOUT; - -// generic entries with simple 1:1 mapping -typedef struct _GENENTRY -{ - TCHAR Id[24]; - TCHAR Value[128]; -} GENENTRY, *PGENENTRY; +#endif typedef struct _SETUPDATA @@ -92,7 +81,7 @@ typedef struct _SETUPDATA USETUP_DATA USetupData; HINF SetupInf; - // Settings + /* Settings */ LONG DestPartSize; // if partition doesn't exist, size of partition LONG FSType; // file system type on partition LONG FormatPart; // type of format the partition @@ -106,26 +95,10 @@ typedef struct _SETUPDATA BOOLEAN RepairUpdateFlag; // flag for update/repair an installed reactos - // txtsetup.sif data -#if 1 - LONG DefaultLang; // default language (table index) - PLANG pLanguages; - LONG LangCount; - LONG DefaultKBLayout; // default keyboard layout (table index) - PKBLAYOUT pKbLayouts; - LONG KbLayoutCount; - PGENENTRY pComputers; - LONG CompCount; - PGENENTRY pDisplays; - LONG DispCount; - PGENENTRY pKeyboards; - LONG KeybCount; - -#else - + /* txtsetup.sif data */ // LONG DefaultLang; // default language (table index) // LONG DefaultKBLayout; // default keyboard layout (table index) - PWCHAR SelectedLanguageId; + PCWSTR SelectedLanguageId; WCHAR DefaultLanguage[20]; // Copy of string inside LanguageList WCHAR DefaultKBLayout[20]; // Copy of string inside KeyboardList @@ -138,7 +111,6 @@ typedef struct _SETUPDATA PPARTLIST PartitionList; PNTOS_INSTALLATION CurrentInstallation; PGENERIC_LIST NtOsInstallsList; -#endif } SETUPDATA, *PSETUPDATA; diff --git a/base/setup/reactos/reactos.rc b/base/setup/reactos/reactos.rc index e20f4a6ab04..a1f7ac5eabe 100644 --- a/base/setup/reactos/reactos.rc +++ b/base/setup/reactos/reactos.rc @@ -12,7 +12,9 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL /* Icons */ -IDI_MAIN ICON "res/setup.ico" +IDI_MAIN ICON "res/setup.ico" +IDI_ROSICON ICON "res/roslogo.ico" +IDI_WINICON ICON "res/winlogo.ico" /* Bitmaps */ IDB_WATERMARK BITMAP "res/watermark.bmp" diff --git a/base/setup/reactos/res/README.txt b/base/setup/reactos/res/README.txt new file mode 100644 index 00000000000..54c0b111c49 --- /dev/null +++ b/base/setup/reactos/res/README.txt @@ -0,0 +1,12 @@ + +roslogo.ico +----------- +(C) 2018 ReactOS Team & Contributors +Distributed under CC-BY-SA 4.0 International License Terms. + +winlogo.ico +----------- +Adapted from the WinTango IconPack, by 'heebijeebi' +See http://heebijeebi.deviantart.com and http://wintango.blogspot.com/ +Distributed under CC-BY-SA 3.0 International License Terms. +Slightly modified by Hermès Bélusca-Maïto. diff --git a/base/setup/reactos/res/roslogo.ico b/base/setup/reactos/res/roslogo.ico new file mode 100644 index 0000000000000000000000000000000000000000..d2f5b8630851f7272e71dfbb3661a0fc5c7cf224 GIT binary patch literal 10134 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 Jzvb^^{tH5IJ^}y$ literal 0 HcmV?d00001 diff --git a/base/setup/reactos/res/roslogo_2.ico b/base/setup/reactos/res/roslogo_2.ico new file mode 100644 index 0000000000000000000000000000000000000000..2d73e1eba748ebe8688fa325521ecf519a2a799e GIT binary patch literal 10134 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 HJnDY{&Xf&8 literal 0 HcmV?d00001 diff --git a/base/setup/reactos/res/winlogo.ico b/base/setup/reactos/res/winlogo.ico new file mode 100644 index 0000000000000000000000000000000000000000..ab8632d566dbf08460a351dc6874052298f29187 GIT binary patch literal 10134 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 DA3}Sl literal 0 HcmV?d00001 diff --git a/base/setup/reactos/resource.h b/base/setup/reactos/resource.h index 05ea0868010..0cfb9897aeb 100644 --- a/base/setup/reactos/resource.h +++ b/base/setup/reactos/resource.h @@ -6,6 +6,8 @@ /* Icons */ #define IDI_MAIN 3000 +#define IDI_ROSICON 3001 +#define IDI_WINICON 3002 #define IDC_STATIC -1 @@ -84,6 +86,3 @@ #define IDS_PARTITION_NAME 5200 #define IDS_PARTITION_SIZE 5201 #define IDS_PARTITION_TYPE 5202 - -#define IDS_LIST_COLUMN_FIRST IDS_PARTITION_NAME -#define IDS_LIST_COLUMN_LAST IDS_PARTITION_TYPE