1 /* 2 * PROJECT: ReactOS Applications 3 * LICENSE: LGPL - See COPYING in the top level directory 4 * FILE: base/applications/msconfig_new/generalpage.c 5 * PURPOSE: General page message handler 6 * COPYRIGHT: Copyright 2005-2006 Christoph von Wittich <Christoph@ApiViewer.de> 7 * Copyright 2011-2012 Hermes BELUSCA - MAITO <hermes.belusca@sfr.fr> 8 */ 9 10 #include "precomp.h" 11 #include "fileutils.h" 12 #include "utils.h" 13 #include "comctl32supp.h" 14 #include "fileextractdialog.h" 15 16 static LPCWSTR lpszRestoreProgPath1 = L"%SystemRoot%\\System32\\rstrui.exe"; 17 static LPCWSTR lpszRestoreProgPath2 = L"%SystemRoot%\\System32\\restore\\rstrui.exe"; 18 19 static HWND hGeneralPage = NULL; 20 static BOOL bIsOriginalBootIni = TRUE; 21 // static BOOL bIsStartupNotModified = TRUE; 22 23 static VOID EnableSelectiveStartupControls(BOOL bEnable) 24 { 25 assert(hGeneralPage); 26 27 EnableWindow(GetDlgItem(hGeneralPage, IDC_CBX_LOAD_SYSTEM_SERVICES), bEnable); 28 EnableWindow(GetDlgItem(hGeneralPage, IDC_CBX_LOAD_STARTUP_ITEMS) , bEnable); 29 30 EnableWindow(GetDlgItem(hGeneralPage, IDC_CBX_USE_ORIGINAL_BOOTCFG), bEnable); 31 32 // EnableWindow(GetDlgItem(hGeneralPage, IDC_RB_USE_ORIGINAL_BOOTCAT), bEnable); 33 // EnableWindow(GetDlgItem(hGeneralPage, IDC_RB_USE_MODIFIED_BOOTCAT), (bEnable ? !bIsOriginalBootIni : FALSE)); 34 35 EnableWindow(GetDlgItem(hGeneralPage, IDC_CBX_SYSTEM_INI), bEnable); 36 EnableWindow(GetDlgItem(hGeneralPage, IDC_CBX_WIN_INI) , bEnable); 37 38 return; 39 } 40 41 static VOID CheckSelectiveStartupControls(BOOL bCheck) 42 { 43 assert(hGeneralPage); 44 45 Button_SetCheck(GetDlgItem(hGeneralPage, IDC_CBX_LOAD_SYSTEM_SERVICES), (bCheck ? BST_CHECKED : BST_UNCHECKED)); 46 Button_SetCheck(GetDlgItem(hGeneralPage, IDC_CBX_LOAD_STARTUP_ITEMS) , (bCheck ? BST_CHECKED : BST_UNCHECKED)); 47 Button_SetCheck(GetDlgItem(hGeneralPage, IDC_CBX_USE_ORIGINAL_BOOTCFG), (bCheck ? BST_CHECKED : BST_UNCHECKED)); 48 Button_SetCheck(GetDlgItem(hGeneralPage, IDC_CBX_SYSTEM_INI) , (bCheck ? BST_CHECKED : BST_UNCHECKED)); 49 Button_SetCheck(GetDlgItem(hGeneralPage, IDC_CBX_WIN_INI) , (bCheck ? BST_CHECKED : BST_UNCHECKED)); 50 51 return; 52 } 53 54 INT_PTR CALLBACK 55 GeneralPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) 56 { 57 UNREFERENCED_PARAMETER(lParam); 58 59 switch (message) 60 { 61 case WM_INITDIALOG: 62 { 63 hGeneralPage = hDlg; 64 PropSheet_UnChanged(GetParent(hGeneralPage), hGeneralPage); 65 66 /* Search for the restore program and enable its button if needed */ 67 if ( MyFileExists(lpszRestoreProgPath1, NULL) || 68 MyFileExists(lpszRestoreProgPath2, NULL) ) 69 Button_Enable(GetDlgItem(hGeneralPage, IDC_BTN_SYSTEM_RESTORE_START), TRUE); 70 else 71 Button_Enable(GetDlgItem(hGeneralPage, IDC_BTN_SYSTEM_RESTORE_START), FALSE); 72 73 #if 0 74 /* FIXME */ 75 SendDlgItemMessage(hDlg, IDC_RB_NORMAL_STARTUP, BM_SETCHECK, BST_CHECKED, 0); 76 EnableCheckboxControls(hDlg, FALSE); 77 #endif 78 79 return TRUE; 80 } 81 82 case WM_COMMAND: 83 { 84 switch (LOWORD(wParam)) 85 { 86 case IDC_RB_NORMAL_STARTUP: 87 { 88 /* Be sure that only this button is activated and the others are not */ 89 CheckRadioButton(hGeneralPage, IDC_RB_NORMAL_STARTUP, IDC_RB_SELECTIVE_STARTUP, IDC_RB_NORMAL_STARTUP); 90 91 bIsOriginalBootIni = TRUE; 92 EnableSelectiveStartupControls(FALSE); 93 CheckSelectiveStartupControls(TRUE); 94 95 Button_SetCheck(GetDlgItem(hGeneralPage, IDC_CBX_USE_ORIGINAL_BOOTCFG), (bIsOriginalBootIni ? BST_CHECKED : BST_UNCHECKED)); 96 97 PropSheet_Changed(GetParent(hGeneralPage), hGeneralPage); 98 break; 99 } 100 101 case IDC_RB_DIAGNOSTIC_STARTUP: 102 { 103 /* Be sure that only this button is activated and the others are not */ 104 CheckRadioButton(hGeneralPage, IDC_RB_NORMAL_STARTUP, IDC_RB_SELECTIVE_STARTUP, IDC_RB_DIAGNOSTIC_STARTUP); 105 106 EnableSelectiveStartupControls(FALSE); 107 CheckSelectiveStartupControls(FALSE); 108 109 PropSheet_Changed(GetParent(hGeneralPage), hGeneralPage); 110 break; 111 } 112 113 case IDC_RB_SELECTIVE_STARTUP: 114 { 115 /* Be sure that only this button is activated and the others are not */ 116 CheckRadioButton(hGeneralPage, IDC_RB_NORMAL_STARTUP, IDC_RB_SELECTIVE_STARTUP, IDC_RB_SELECTIVE_STARTUP); 117 118 EnableSelectiveStartupControls(TRUE); 119 PropSheet_Changed(GetParent(hGeneralPage), hGeneralPage); 120 121 break; 122 } 123 124 case IDC_CBX_USE_ORIGINAL_BOOTCFG: 125 { 126 bIsOriginalBootIni = TRUE; 127 128 Button_SetCheck(GetDlgItem(hGeneralPage, IDC_CBX_USE_ORIGINAL_BOOTCFG), (bIsOriginalBootIni ? BST_CHECKED : BST_UNCHECKED)); 129 EnableWindow(GetDlgItem(hGeneralPage, IDC_CBX_USE_ORIGINAL_BOOTCFG), !bIsOriginalBootIni /*FALSE*/); 130 131 PropSheet_Changed(GetParent(hGeneralPage), hGeneralPage); 132 133 break; 134 } 135 136 case IDC_BTN_SYSTEM_RESTORE_START: 137 { 138 // NOTE: 'err' variable defined for debugging purposes only. 139 DWORD err = RunCommand(lpszRestoreProgPath1, NULL, SW_SHOW); 140 if (err == ERROR_FILE_NOT_FOUND) 141 err = RunCommand(lpszRestoreProgPath2, NULL, SW_SHOW); 142 143 break; 144 } 145 146 case IDC_BTN_FILE_EXTRACTION: 147 DialogBoxW(hInst, MAKEINTRESOURCEW(IDD_FILE_EXTRACT_DIALOG), hGeneralPage /* GetParent(hGeneralPage) */, FileExtractDialogWndProc); 148 break; 149 150 default: 151 //break; 152 return FALSE; 153 } 154 break; 155 } 156 157 case WM_NOTIFY: 158 { 159 switch (((LPNMHDR)lParam)->code) 160 { 161 case PSN_APPLY: 162 { 163 // TODO: Try to apply the modifications to the system. 164 PropSheet_UnChanged(GetParent(hGeneralPage), hGeneralPage); 165 return TRUE; 166 } 167 168 case PSN_HELP: 169 { 170 MessageBoxW(hGeneralPage, L"Help not implemented yet!", L"Help", MB_ICONINFORMATION | MB_OK); 171 return TRUE; 172 } 173 174 case PSN_KILLACTIVE: // Is going to lose activation. 175 { 176 // Changes are always valid of course. 177 SetWindowLongPtr(hGeneralPage, DWLP_MSGRESULT, FALSE); 178 return TRUE; 179 } 180 181 case PSN_QUERYCANCEL: 182 { 183 // Allows cancellation. 184 SetWindowLongPtr(hGeneralPage, DWLP_MSGRESULT, FALSE); 185 return TRUE; 186 } 187 188 case PSN_QUERYINITIALFOCUS: 189 { 190 // SetWindowLongPtr(hGeneralPage, DWLP_MSGRESULT, 191 // (LONG_PTR)GetDlgItem(hGeneralPage, (bIsOriginalBootIni ? IDC_RB_NORMAL_STARTUP : IDC_RB_SELECTIVE_STARTUP))); 192 return TRUE; 193 } 194 195 // 196 // DO NOT TOUCH THESE NEXT MESSAGES, THEY ARE OK LIKE THIS... 197 // 198 case PSN_RESET: // Perform final cleaning, called before WM_DESTROY. 199 return TRUE; 200 201 case PSN_SETACTIVE: // Is going to gain activation. 202 { 203 SetWindowLongPtr(hGeneralPage, DWLP_MSGRESULT, 0); 204 return TRUE; 205 } 206 207 default: 208 break; 209 } 210 211 return FALSE; 212 } 213 214 default: 215 return FALSE; 216 } 217 218 return FALSE; 219 } 220