mirror of
				https://github.com/pbatard/rufus.git
				synced 2024-08-14 23:57:05 +00:00 
			
		
		
		
	[ui] extend SelectionDialog() to support checkbox selection
This commit is contained in:
		
							parent
							
								
									a9a97b6f10
								
							
						
					
					
						commit
						9690742d91
					
				
					 7 changed files with 57 additions and 61 deletions
				
			
		
							
								
								
									
										17
									
								
								src/format.c
									
										
									
									
									
								
							
							
						
						
									
										17
									
								
								src/format.c
									
										
									
									
									
								
							|  | @ -1268,11 +1268,11 @@ int SetWinToGoIndex(void) | ||||||
| 	if (img_report.wininst_index > 1) { | 	if (img_report.wininst_index > 1) { | ||||||
| 		for (i = 0; i < img_report.wininst_index; i++) | 		for (i = 0; i < img_report.wininst_index; i++) | ||||||
| 			install_names[i] = &img_report.wininst_path[i][2]; | 			install_names[i] = &img_report.wininst_path[i][2]; | ||||||
| 		wininst_index = SelectionDialog(lmprintf(MSG_130), lmprintf(MSG_131), install_names, img_report.wininst_index); | 		wininst_index = _log2(SelectionDialog(BS_AUTORADIOBUTTON, lmprintf(MSG_130), | ||||||
|  | 			lmprintf(MSG_131), install_names, img_report.wininst_index, 1)); | ||||||
| 		if (wininst_index < 0) | 		if (wininst_index < 0) | ||||||
| 			return -2; | 			return -2; | ||||||
| 		wininst_index--; | 		if (wininst_index >= MAX_WININST) | ||||||
| 		if ((wininst_index < 0) || (wininst_index >= MAX_WININST)) |  | ||||||
| 			wininst_index = 0; | 			wininst_index = 0; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -1323,14 +1323,15 @@ int SetWinToGoIndex(void) | ||||||
| 		uprintf("Warning: Nonstandard Windows image (missing <DISPLAYNAME> entries)"); | 		uprintf("Warning: Nonstandard Windows image (missing <DISPLAYNAME> entries)"); | ||||||
| 
 | 
 | ||||||
| 	if (i > 1) | 	if (i > 1) | ||||||
| 		i = SelectionDialog(lmprintf(MSG_291), lmprintf(MSG_292), version_name.String, i); | 		// NB: _log2 returns -2 if SelectionDialog() returns negative (user cancelled)
 | ||||||
| 	if (i < 0) { | 		i = _log2(SelectionDialog(BS_AUTORADIOBUTTON, | ||||||
|  | 			lmprintf(MSG_291), lmprintf(MSG_292), version_name.String, i, 1)) + 1; | ||||||
|  | 	if (i < 0) | ||||||
| 		wintogo_index = -2;	// Cancelled by the user
 | 		wintogo_index = -2;	// Cancelled by the user
 | ||||||
| 	} else if (i == 0) { | 	else if (i == 0) | ||||||
| 		wintogo_index = 1; | 		wintogo_index = 1; | ||||||
| 	} else { | 	else | ||||||
| 		wintogo_index = atoi(version_index.String[i - 1]); | 		wintogo_index = atoi(version_index.String[i - 1]); | ||||||
| 	} |  | ||||||
| 	if (i > 0) { | 	if (i > 0) { | ||||||
| 		// Get the build version
 | 		// Get the build version
 | ||||||
| 		build = get_token_data_file_indexed("BUILD", xml_file, i); | 		build = get_token_data_file_indexed("BUILD", xml_file, i); | ||||||
|  |  | ||||||
|  | @ -1,7 +1,7 @@ | ||||||
| /*
 | /*
 | ||||||
| * Rufus: The Reliable USB Formatting Utility | * Rufus: The Reliable USB Formatting Utility | ||||||
| * Constants and defines missing from various toolchains | * Constants and defines missing from various toolchains | ||||||
| * Copyright © 2016-2017 Pete Batard <pete@akeo.ie> | * Copyright © 2016-2022 Pete Batard <pete@akeo.ie> | ||||||
| * | * | ||||||
| * This program is free software: you can redistribute it and/or modify | * This program is free software: you can redistribute it and/or modify | ||||||
| * it under the terms of the GNU General Public License as published by | * it under the terms of the GNU General Public License as published by | ||||||
|  | @ -105,6 +105,16 @@ static __inline void *_reallocf(void *ptr, size_t size) { | ||||||
| 	return ret; | 	return ret; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | static __inline int _log2(register int val) | ||||||
|  | { | ||||||
|  | 	int ret = 0; | ||||||
|  | 	if (val < 0) | ||||||
|  | 		return -2; | ||||||
|  | 	while (val >>= 1) | ||||||
|  | 		ret++; | ||||||
|  | 	return ret; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| /* Why oh why does Microsoft have to make everybody suffer with their braindead use of Unicode? */ | /* Why oh why does Microsoft have to make everybody suffer with their braindead use of Unicode? */ | ||||||
| #define _RT_ICON			MAKEINTRESOURCEA(3) | #define _RT_ICON			MAKEINTRESOURCEA(3) | ||||||
| #define _RT_DIALOG			MAKEINTRESOURCEA(5) | #define _RT_DIALOG			MAKEINTRESOURCEA(5) | ||||||
|  |  | ||||||
|  | @ -31,27 +31,6 @@ | ||||||
| #define IDI_LOG_32                      144 | #define IDI_LOG_32                      144 | ||||||
| #define IDI_SAVE_32                     145 | #define IDI_SAVE_32                     145 | ||||||
| #define IDI_HASH_32                     146 | #define IDI_HASH_32                     146 | ||||||
| #define IDD_DIALOG_XP                   151 |  | ||||||
| #define IDD_ABOUTBOX_XP                 152 |  | ||||||
| #define IDD_NOTIFICATION_XP             153 |  | ||||||
| #define IDD_LICENSE_XP                  154 |  | ||||||
| #define IDD_LOG_XP                      155 |  | ||||||
| #define IDD_UPDATE_POLICY_XP            156 |  | ||||||
| #define IDD_NEW_VERSION_XP              157 |  | ||||||
| #define IDD_DIALOG_RTL                  201 |  | ||||||
| #define IDD_ABOUTBOX_RTL                202 |  | ||||||
| #define IDD_NOTIFICATION_RTL            203 |  | ||||||
| #define IDD_LICENSE_RTL                 204 |  | ||||||
| #define IDD_LOG_RTL                     205 |  | ||||||
| #define IDD_UPDATE_POLICY_RTL           206 |  | ||||||
| #define IDD_NEW_VERSION_RTL             207 |  | ||||||
| #define IDD_DIALOG_RTL_XP               251 |  | ||||||
| #define IDD_ABOUTBOX_RTL_XP             252 |  | ||||||
| #define IDD_NOTIFICATION_RTL_XP         253 |  | ||||||
| #define IDD_LICENSE_RTL_XP              254 |  | ||||||
| #define IDD_LOG_RTL_XP                  255 |  | ||||||
| #define IDD_UPDATE_POLICY_RTL_XP        256 |  | ||||||
| #define IDD_NEW_VERSION_RTL_XP          257 |  | ||||||
| #define IDR_FD_COMMAND_COM              300 | #define IDR_FD_COMMAND_COM              300 | ||||||
| #define IDR_FD_KERNEL_SYS               301 | #define IDR_FD_KERNEL_SYS               301 | ||||||
| #define IDR_FD_DISPLAY_EXE              302 | #define IDR_FD_DISPLAY_EXE              302 | ||||||
|  |  | ||||||
							
								
								
									
										24
									
								
								src/rufus.c
									
										
									
									
									
								
							
							
						
						
									
										24
									
								
								src/rufus.c
									
										
									
									
									
								
							|  | @ -1,6 +1,6 @@ | ||||||
| /*
 | /*
 | ||||||
|  * Rufus: The Reliable USB Formatting Utility |  * Rufus: The Reliable USB Formatting Utility | ||||||
|  * Copyright © 2011-2021 Pete Batard <pete@akeo.ie> |  * Copyright © 2011-2022 Pete Batard <pete@akeo.ie> | ||||||
|  * |  * | ||||||
|  * This program is free software: you can redistribute it and/or modify |  * This program is free software: you can redistribute it and/or modify | ||||||
|  * it under the terms of the GNU General Public License as published by |  * it under the terms of the GNU General Public License as published by | ||||||
|  | @ -1454,23 +1454,20 @@ static DWORD WINAPI BootCheckThread(LPVOID param) | ||||||
| 				if ((img_report.projected_size < MAX_ISO_TO_ESP_SIZE * MB) && HAS_REGULAR_EFI(img_report) && | 				if ((img_report.projected_size < MAX_ISO_TO_ESP_SIZE * MB) && HAS_REGULAR_EFI(img_report) && | ||||||
| 					(partition_type == PARTITION_STYLE_GPT) && IS_FAT(fs_type)) { | 					(partition_type == PARTITION_STYLE_GPT) && IS_FAT(fs_type)) { | ||||||
| 					char* choices[3] = { lmprintf(MSG_276, iso_image), lmprintf(MSG_277, "ISO → ESP"), lmprintf(MSG_277, dd_image) }; | 					char* choices[3] = { lmprintf(MSG_276, iso_image), lmprintf(MSG_277, "ISO → ESP"), lmprintf(MSG_277, dd_image) }; | ||||||
| 					i = SelectionDialog(lmprintf(MSG_274, "ISOHybrid"), lmprintf(MSG_275, iso_image, dd_image, iso_image, dd_image), | 					i = SelectionDialog(BS_AUTORADIOBUTTON, lmprintf(MSG_274, "ISOHybrid"), | ||||||
| 						choices, 3); | 						lmprintf(MSG_275, iso_image, dd_image, iso_image, dd_image), choices, 3, 1); | ||||||
| 					if (i < 0)	// Cancel
 | 					if (i < 0)	// Cancel
 | ||||||
| 						goto out; | 						goto out; | ||||||
| 					else if (i == 2) | 					write_as_esp = (i & 2); | ||||||
| 						write_as_esp = TRUE; | 					write_as_image = (i & 4); | ||||||
| 					else if (i == 3) |  | ||||||
| 						write_as_image = TRUE; |  | ||||||
| 					esp_already_asked = TRUE; | 					esp_already_asked = TRUE; | ||||||
| 				} else { | 				} else { | ||||||
| 					char* choices[2] = { lmprintf(MSG_276, iso_image), lmprintf(MSG_277, dd_image) }; | 					char* choices[2] = { lmprintf(MSG_276, iso_image), lmprintf(MSG_277, dd_image) }; | ||||||
| 					i = SelectionDialog(lmprintf(MSG_274, "ISOHybrid"), lmprintf(MSG_275, iso_image, dd_image, iso_image, dd_image), | 					i = SelectionDialog(BS_AUTORADIOBUTTON, lmprintf(MSG_274, "ISOHybrid"), | ||||||
| 						choices, 2); | 						lmprintf(MSG_275, iso_image, dd_image, iso_image, dd_image), choices, 2, 1); | ||||||
| 					if (i < 0)	// Cancel
 | 					if (i < 0)	// Cancel
 | ||||||
| 						goto out; | 						goto out; | ||||||
| 					else if (i == 2) | 					write_as_image = (i & 2); | ||||||
| 						write_as_image = TRUE; |  | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
|  | @ -1541,11 +1538,10 @@ static DWORD WINAPI BootCheckThread(LPVOID param) | ||||||
| 			// so ask the users if they want to write it as an ESP.
 | 			// so ask the users if they want to write it as an ESP.
 | ||||||
| 			char* iso_image = lmprintf(MSG_036); | 			char* iso_image = lmprintf(MSG_036); | ||||||
| 			char* choices[2] = { lmprintf(MSG_276, iso_image), lmprintf(MSG_277, "ISO → ESP") }; | 			char* choices[2] = { lmprintf(MSG_276, iso_image), lmprintf(MSG_277, "ISO → ESP") }; | ||||||
| 			i = SelectionDialog(lmprintf(MSG_274, "ESP"), lmprintf(MSG_310), choices, 2); | 			i = SelectionDialog(BS_AUTORADIOBUTTON, lmprintf(MSG_274, "ESP"), lmprintf(MSG_310), choices, 2, 1); | ||||||
| 			if (i < 0)	// Cancel
 | 			if (i < 0)	// Cancel
 | ||||||
| 				goto out; | 				goto out; | ||||||
| 			else if (i == 2) | 			write_as_esp = (i & 2); | ||||||
| 				write_as_esp = TRUE; |  | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		// If the selected target doesn't include BIOS, skip file downloads for GRUB/Syslinux
 | 		// If the selected target doesn't include BIOS, skip file downloads for GRUB/Syslinux
 | ||||||
|  |  | ||||||
|  | @ -1,6 +1,6 @@ | ||||||
| /*
 | /*
 | ||||||
|  * Rufus: The Reliable USB Formatting Utility |  * Rufus: The Reliable USB Formatting Utility | ||||||
|  * Copyright © 2011-2021 Pete Batard <pete@akeo.ie> |  * Copyright © 2011-2022 Pete Batard <pete@akeo.ie> | ||||||
|  * |  * | ||||||
|  * This program is free software: you can redistribute it and/or modify |  * This program is free software: you can redistribute it and/or modify | ||||||
|  * it under the terms of the GNU General Public License as published by |  * it under the terms of the GNU General Public License as published by | ||||||
|  | @ -558,7 +558,7 @@ extern BOOL CreateTooltip(HWND hControl, const char* message, int duration); | ||||||
| extern void DestroyTooltip(HWND hWnd); | extern void DestroyTooltip(HWND hWnd); | ||||||
| extern void DestroyAllTooltips(void); | extern void DestroyAllTooltips(void); | ||||||
| extern BOOL Notification(int type, const char* dont_display_setting, const notification_info* more_info, char* title, char* format, ...); | extern BOOL Notification(int type, const char* dont_display_setting, const notification_info* more_info, char* title, char* format, ...); | ||||||
| extern int SelectionDialog(char* title, char* message, char** choices, int size); | extern int SelectionDialog(int style, char* title, char* message, char** choices, int size, int mask); | ||||||
| extern void ListDialog(char* title, char* message, char** items, int size); | extern void ListDialog(char* title, char* message, char** items, int size); | ||||||
| extern SIZE GetTextSize(HWND hCtrl, char* txt); | extern SIZE GetTextSize(HWND hCtrl, char* txt); | ||||||
| extern BOOL ExtractAppIcon(const char* filename, BOOL bSilent); | extern BOOL ExtractAppIcon(const char* filename, BOOL bSilent); | ||||||
|  |  | ||||||
							
								
								
									
										10
									
								
								src/rufus.rc
									
										
									
									
									
								
							
							
						
						
									
										10
									
								
								src/rufus.rc
									
										
									
									
									
								
							|  | @ -33,7 +33,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL | ||||||
| IDD_DIALOG DIALOGEX 12, 12, 232, 326 | IDD_DIALOG DIALOGEX 12, 12, 232, 326 | ||||||
| STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU | STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU | ||||||
| EXSTYLE WS_EX_ACCEPTFILES | EXSTYLE WS_EX_ACCEPTFILES | ||||||
| CAPTION "Rufus 3.19.1898" | CAPTION "Rufus 3.19.1899" | ||||||
| FONT 9, "Segoe UI Symbol", 400, 0, 0x0 | FONT 9, "Segoe UI Symbol", 400, 0, 0x0 | ||||||
| BEGIN | BEGIN | ||||||
|     LTEXT           "Drive Properties",IDS_DRIVE_PROPERTIES_TXT,8,6,53,12,NOT WS_GROUP |     LTEXT           "Drive Properties",IDS_DRIVE_PROPERTIES_TXT,8,6,53,12,NOT WS_GROUP | ||||||
|  | @ -395,8 +395,8 @@ END | ||||||
| // | // | ||||||
| 
 | 
 | ||||||
| VS_VERSION_INFO VERSIONINFO | VS_VERSION_INFO VERSIONINFO | ||||||
|  FILEVERSION 3,19,1898,0 |  FILEVERSION 3,19,1899,0 | ||||||
|  PRODUCTVERSION 3,19,1898,0 |  PRODUCTVERSION 3,19,1899,0 | ||||||
|  FILEFLAGSMASK 0x3fL |  FILEFLAGSMASK 0x3fL | ||||||
| #ifdef _DEBUG | #ifdef _DEBUG | ||||||
|  FILEFLAGS 0x1L |  FILEFLAGS 0x1L | ||||||
|  | @ -414,13 +414,13 @@ BEGIN | ||||||
|             VALUE "Comments", "https://rufus.ie" |             VALUE "Comments", "https://rufus.ie" | ||||||
|             VALUE "CompanyName", "Akeo Consulting" |             VALUE "CompanyName", "Akeo Consulting" | ||||||
|             VALUE "FileDescription", "Rufus" |             VALUE "FileDescription", "Rufus" | ||||||
|             VALUE "FileVersion", "3.19.1898" |             VALUE "FileVersion", "3.19.1899" | ||||||
|             VALUE "InternalName", "Rufus" |             VALUE "InternalName", "Rufus" | ||||||
|             VALUE "LegalCopyright", "© 2011-2022 Pete Batard (GPL v3)" |             VALUE "LegalCopyright", "© 2011-2022 Pete Batard (GPL v3)" | ||||||
|             VALUE "LegalTrademarks", "https://www.gnu.org/licenses/gpl-3.0.html" |             VALUE "LegalTrademarks", "https://www.gnu.org/licenses/gpl-3.0.html" | ||||||
|             VALUE "OriginalFilename", "rufus-3.19.exe" |             VALUE "OriginalFilename", "rufus-3.19.exe" | ||||||
|             VALUE "ProductName", "Rufus" |             VALUE "ProductName", "Rufus" | ||||||
|             VALUE "ProductVersion", "3.19.1898" |             VALUE "ProductVersion", "3.19.1899" | ||||||
|         END |         END | ||||||
|     END |     END | ||||||
|     BLOCK "VarFileInfo" |     BLOCK "VarFileInfo" | ||||||
|  |  | ||||||
							
								
								
									
										30
									
								
								src/stdlg.c
									
										
									
									
									
								
							
							
						
						
									
										30
									
								
								src/stdlg.c
									
										
									
									
									
								
							|  | @ -1,7 +1,7 @@ | ||||||
| /*
 | /*
 | ||||||
|  * Rufus: The Reliable USB Formatting Utility |  * Rufus: The Reliable USB Formatting Utility | ||||||
|  * Standard Dialog Routines (Browse for folder, About, etc) |  * Standard Dialog Routines (Browse for folder, About, etc) | ||||||
|  * Copyright © 2011-2021 Pete Batard <pete@akeo.ie> |  * Copyright © 2011-2022 Pete Batard <pete@akeo.ie> | ||||||
|  * |  * | ||||||
|  * This program is free software: you can redistribute it and/or modify |  * This program is free software: you can redistribute it and/or modify | ||||||
|  * it under the terms of the GNU General Public License as published by |  * it under the terms of the GNU General Public License as published by | ||||||
|  | @ -859,13 +859,16 @@ BOOL Notification(int type, const char* dont_display_setting, const notification | ||||||
| 	return ret; | 	return ret; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // We only ever display one selection dialog, so set some params as globals
 | ||||||
|  | static int selection_dialog_style, selection_dialog_mask; | ||||||
|  | 
 | ||||||
| /*
 | /*
 | ||||||
|  * Custom dialog for radio button selection dialog |  * Custom dialog for radio button selection dialog | ||||||
|  */ |  */ | ||||||
| INT_PTR CALLBACK SelectionCallback(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) | INT_PTR CALLBACK SelectionCallback(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) | ||||||
| { | { | ||||||
| 	LRESULT loc; | 	LRESULT loc; | ||||||
| 	int i, dh, r  = -1; | 	int i, m, dh, r  = -1; | ||||||
| 	// Prevent resizing
 | 	// Prevent resizing
 | ||||||
| 	static LRESULT disabled[9] = { HTLEFT, HTRIGHT, HTTOP, HTBOTTOM, HTSIZE, | 	static LRESULT disabled[9] = { HTLEFT, HTRIGHT, HTTOP, HTBOTTOM, HTSIZE, | ||||||
| 		HTTOPLEFT, HTTOPRIGHT, HTBOTTOMLEFT, HTBOTTOMRIGHT }; | 		HTTOPLEFT, HTTOPRIGHT, HTBOTTOMLEFT, HTBOTTOMRIGHT }; | ||||||
|  | @ -885,6 +888,9 @@ INT_PTR CALLBACK SelectionCallback(HWND hDlg, UINT message, WPARAM wParam, LPARA | ||||||
| 				nDialogItems, IDC_SELECTION_CHOICEMAX - IDC_SELECTION_CHOICE1); | 				nDialogItems, IDC_SELECTION_CHOICEMAX - IDC_SELECTION_CHOICE1); | ||||||
| 			nDialogItems = IDC_SELECTION_CHOICEMAX - IDC_SELECTION_CHOICE1; | 			nDialogItems = IDC_SELECTION_CHOICEMAX - IDC_SELECTION_CHOICE1; | ||||||
| 		} | 		} | ||||||
|  | 		// Switch to checkboxes or some other style if requested
 | ||||||
|  | 		for (i = 0; i < nDialogItems; i++) | ||||||
|  | 			Button_SetStyle(GetDlgItem(hDlg, IDC_SELECTION_CHOICE1 + i), selection_dialog_style, TRUE); | ||||||
| 		// Get the system message box font. See http://stackoverflow.com/a/6057761
 | 		// Get the system message box font. See http://stackoverflow.com/a/6057761
 | ||||||
| 		ncm.cbSize = sizeof(ncm); | 		ncm.cbSize = sizeof(ncm); | ||||||
| 		SystemParametersInfo(SPI_GETNONCLIENTMETRICS, ncm.cbSize, &ncm, 0); | 		SystemParametersInfo(SPI_GETNONCLIENTMETRICS, ncm.cbSize, &ncm, 0); | ||||||
|  | @ -936,9 +942,9 @@ INT_PTR CALLBACK SelectionCallback(HWND hDlg, UINT message, WPARAM wParam, LPARA | ||||||
| 		ResizeButtonHeight(hDlg, IDOK); | 		ResizeButtonHeight(hDlg, IDOK); | ||||||
| 		ResizeButtonHeight(hDlg, IDCANCEL); | 		ResizeButtonHeight(hDlg, IDCANCEL); | ||||||
| 
 | 
 | ||||||
| 		// Set the radio selection
 | 		// Set the default selection
 | ||||||
| 		Button_SetCheck(GetDlgItem(hDlg, IDC_SELECTION_CHOICE1), BST_CHECKED); | 		for (i = 0, m = 1; i < nDialogItems; i++, m <<= 1) | ||||||
| 		Button_SetCheck(GetDlgItem(hDlg, IDC_SELECTION_CHOICE2), BST_UNCHECKED); | 			Button_SetCheck(GetDlgItem(hDlg, IDC_SELECTION_CHOICE1 + i), (m & selection_dialog_mask) ? BST_CHECKED : BST_UNCHECKED); | ||||||
| 		return (INT_PTR)TRUE; | 		return (INT_PTR)TRUE; | ||||||
| 	case WM_CTLCOLORSTATIC: | 	case WM_CTLCOLORSTATIC: | ||||||
| 		// Change the background colour for static text and icon
 | 		// Change the background colour for static text and icon
 | ||||||
|  | @ -959,10 +965,9 @@ INT_PTR CALLBACK SelectionCallback(HWND hDlg, UINT message, WPARAM wParam, LPARA | ||||||
| 	case WM_COMMAND: | 	case WM_COMMAND: | ||||||
| 		switch (LOWORD(wParam)) { | 		switch (LOWORD(wParam)) { | ||||||
| 		case IDOK: | 		case IDOK: | ||||||
| 			for (i = 0; (i < nDialogItems) && | 			for (r = 0, i = 0, m = 1; i < nDialogItems; i++, m <<= 1) | ||||||
| 				(Button_GetCheck(GetDlgItem(hDlg, IDC_SELECTION_CHOICE1 + i)) != BST_CHECKED); i++); | 				if (Button_GetCheck(GetDlgItem(hDlg, IDC_SELECTION_CHOICE1 + i)) == BST_CHECKED) | ||||||
| 			if (i < nDialogItems) | 					r += m; | ||||||
| 				r = i + 1; |  | ||||||
| 			// Fall through
 | 			// Fall through
 | ||||||
| 		case IDNO: | 		case IDNO: | ||||||
| 		case IDCANCEL: | 		case IDCANCEL: | ||||||
|  | @ -977,7 +982,7 @@ INT_PTR CALLBACK SelectionCallback(HWND hDlg, UINT message, WPARAM wParam, LPARA | ||||||
| /*
 | /*
 | ||||||
|  * Display an item selection dialog |  * Display an item selection dialog | ||||||
|  */ |  */ | ||||||
| int SelectionDialog(char* title, char* message, char** choices, int size) | int SelectionDialog(int style, char* title, char* message, char** choices, int size, int mask) | ||||||
| { | { | ||||||
| 	int ret; | 	int ret; | ||||||
| 
 | 
 | ||||||
|  | @ -986,6 +991,9 @@ int SelectionDialog(char* title, char* message, char** choices, int size) | ||||||
| 	szMessageText = message; | 	szMessageText = message; | ||||||
| 	szDialogItem = choices; | 	szDialogItem = choices; | ||||||
| 	nDialogItems = size; | 	nDialogItems = size; | ||||||
|  | 	selection_dialog_style = style; | ||||||
|  | 	selection_dialog_mask = mask; | ||||||
|  | 	assert(selection_dialog_style == BS_AUTORADIOBUTTON || selection_dialog_style == BS_AUTOCHECKBOX); | ||||||
| 	ret = (int)MyDialogBox(hMainInstance, IDD_SELECTION, hMainDialog, SelectionCallback); | 	ret = (int)MyDialogBox(hMainInstance, IDD_SELECTION, hMainDialog, SelectionCallback); | ||||||
| 	dialog_showing--; | 	dialog_showing--; | ||||||
| 
 | 
 | ||||||
|  | @ -1971,6 +1979,7 @@ LPCDLGTEMPLATE GetDialogTemplate(int Dialog_ID) | ||||||
| HWND MyCreateDialog(HINSTANCE hInstance, int Dialog_ID, HWND hWndParent, DLGPROC lpDialogFunc) | HWND MyCreateDialog(HINSTANCE hInstance, int Dialog_ID, HWND hWndParent, DLGPROC lpDialogFunc) | ||||||
| { | { | ||||||
| 	LPCDLGTEMPLATE rcTemplate = GetDialogTemplate(Dialog_ID); | 	LPCDLGTEMPLATE rcTemplate = GetDialogTemplate(Dialog_ID); | ||||||
|  | 	assert(rcTemplate != NULL); | ||||||
| 	HWND hDlg = CreateDialogIndirect(hInstance, rcTemplate, hWndParent, lpDialogFunc); | 	HWND hDlg = CreateDialogIndirect(hInstance, rcTemplate, hWndParent, lpDialogFunc); | ||||||
| 	safe_free(rcTemplate); | 	safe_free(rcTemplate); | ||||||
| 	return hDlg; | 	return hDlg; | ||||||
|  | @ -1987,6 +1996,7 @@ INT_PTR MyDialogBox(HINSTANCE hInstance, int Dialog_ID, HWND hWndParent, DLGPROC | ||||||
| 	// main dialog was reduced => Ensure the main dialog is visible before we display anything.
 | 	// main dialog was reduced => Ensure the main dialog is visible before we display anything.
 | ||||||
| 	ShowWindow(hMainDialog, SW_NORMAL); | 	ShowWindow(hMainDialog, SW_NORMAL); | ||||||
| 
 | 
 | ||||||
|  | 	assert(rcTemplate != NULL); | ||||||
| 	ret = DialogBoxIndirect(hMainInstance, rcTemplate, hWndParent, lpDialogFunc); | 	ret = DialogBoxIndirect(hMainInstance, rcTemplate, hWndParent, lpDialogFunc); | ||||||
| 	safe_free(rcTemplate); | 	safe_free(rcTemplate); | ||||||
| 	return ret; | 	return ret; | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue