mirror of
				https://github.com/pbatard/rufus.git
				synced 2024-08-14 23:57:05 +00:00 
			
		
		
		
	[ui] update persistence size controls
* Also refactor ToggleImageOptions()
This commit is contained in:
		
							parent
							
								
									0fa19d7019
								
							
						
					
					
						commit
						1004a6e066
					
				
					 7 changed files with 170 additions and 106 deletions
				
			
		|  | @ -1,24 +1,18 @@ | |||
| This file lists any change that has been applied to the en-US translation of | ||||
| rufus.loc since its original version. Translators are expected to keep their | ||||
| translations up to date by monitoring this file on regular basis and applying | ||||
| the same changes. | ||||
| rufus.loc since its original version. | ||||
| 
 | ||||
| When editing an existing translation, make sure you always follow: | ||||
| When editing an existing translation, make sure to follow: | ||||
| https://github.com/pbatard/rufus/wiki/Localization#Editing_a_translation | ||||
| 
 | ||||
| Remember to also update the version number for your translation ('v x.y.z') | ||||
| once you have matched all the changes that occurred for the en-US translation. | ||||
| 
 | ||||
| !!IMPORTANT!! The changes below may NOT contain the full message and only tell | ||||
| you WHERE, in the English translation, you should look to find the full message | ||||
| content. PLEASE, do not just look at this Changelog when updating your | ||||
| translation, but always use the English section of rufus.loc as your base. | ||||
| For instance, MSG_114, that was introduced in v1.0.8 is MORE than one line! | ||||
| 
 | ||||
| o v3.2 (2018.??.??) | ||||
|   - *NEW*      MSG_087 | ||||
|     *NEW*      MSG_123 | ||||
|     *NEW*      MSG_124 | ||||
|     *NEW*      MSG_125 | ||||
|     *NEW*      MSG_126 | ||||
|     *NEW*      MSG_127 | ||||
|   - *NEW*      MSG_172 | ||||
|   - *NEW*      MSG_199 | ||||
|   - *NEW*      MSG_240 | ||||
|   - *NEW*      MSG_306 | ||||
| 
 | ||||
| o v3.0 (2018.03.27) | ||||
|  | @ -80,7 +74,8 @@ o v2.16 (2017.07.17) | |||
|   - *NEW* MSG_298 "The ISO file you have selected does not match its declared size: %s of data is missing!\n\nIf you obtained " | ||||
|     "this file from the Internet, you should try to download a new copy and verify that the MD5 or SHA checksums match the " | ||||
|     "official ones.\n\nNote that you can compute the MD5 or SHA in Rufus by clicking the '#' button." | ||||
|   Note: You can test MSG_297/MSG_298 using https://rufus.akeo.ie/testing/arch_trunc.iso (A truncated version of archlinux-2017.07.01-x86_64.iso) | ||||
|   Note: You can test MSG_297/MSG_298 using https://github.com/pbatard/rufus/raw/master/res/loc/test/arch_trunc.iso | ||||
|   A truncated version of archlinux-2017.07.01-x86_64.iso) | ||||
| 
 | ||||
| o v2.12 (2017.01.16) | ||||
|   - *NEW* MSG_288 "Missing elevated privileges" | ||||
|  | @ -138,7 +133,7 @@ o v2.4 (2015.09.03) | |||
|     Note: You can see the message above by hovering on the language button | ||||
|   - *NEW* MSG_274 "ISOHybrid image detected" | ||||
|     Note: You can test this message and the one below by downloading and trying to write the latest menu_c32_test.iso (120 KB) from: | ||||
|     https://github.com/pbatard/rufus/raw/master/res/localization/menu_c32_test.iso | ||||
|     https://github.com/pbatard/rufus/raw/master/res/loc/test/menu_c32_test.iso | ||||
| 	- *NEW* MSG_275 "The image you have selected is..." [TRANSLATORS: Please refer to the English section of 'rufus.loc' for the FULL message] | ||||
| 	  For more info on the messages below, also see the comments in the English section of rufus.loc | ||||
|   - *NEW* MSG_276 "Write in %s mode (Recommended)" | ||||
|  | @ -151,8 +146,8 @@ o v2.4 (2015.09.03) | |||
| o v2.0 (2015.02.04) | ||||
|   - *NEW CONTROL* IDC_WINDOWS_INSTALL "Standard Windows installation" (Main dialog) | ||||
|   - *NEW CONTROL* IDC_WINDOWS_TO_GO "Windows To Go" (Main dialog) | ||||
|   Note: to see the 2 controls above displayed, you will need to load the "Windows To Go.iso" image from | ||||
|   https://github.com/pbatard/rufus/raw/master/res/localization/Windows%20To%20Go.iso (356 KB) | ||||
|   Note: to see the 2 controls above displayed, you will need to load the "windows_to_go.iso" image from | ||||
|   https://github.com/pbatard/rufus/raw/master/res/loc/test/windows_to_go.iso (356 KB) | ||||
|   Also see the comment for IDC_WINDOWS_TO_GO in the English translation. | ||||
|   - *NEW* MSG_096 "The file system currently selected can not be used with this type of ISO (...)" | ||||
|   - *NEW* MSG_097 "'Windows To Go' can only be applied if the file system is NTFS." | ||||
|  |  | |||
|  | @ -308,6 +308,11 @@ t MSG_119 "advanced drive properties" | |||
| t MSG_120 "advanced format options" | ||||
| t MSG_121 "Show %s" | ||||
| t MSG_122 "Hide %s" | ||||
| t MSG_123 "Persistent partition size" | ||||
| t MSG_124 "No persistence" | ||||
| t MSG_125 "Use this slider to set the size of the persistent partition. Setting the size to 0 disables the persistent partition." | ||||
| t MSG_126 "Use this field to enter the size of the persistent partition. Setting the size to 0 disables the persistent partition." | ||||
| t MSG_127 "Set the persistent partition size unit." | ||||
| t MSG_150 "Type of computer you plan to use this bootable drive with. It is your responsibility to determine whether " | ||||
| 	"your target is of BIOS or UEFI type before you start creating the drive, as it may fail to boot otherwise." | ||||
| # You shouldn't translate 'Legacy Mode' as this is an option that usually appears in English in the UEFI settings. | ||||
|  | @ -372,7 +377,6 @@ t MSG_196 "IMPORTANT: THIS DRIVE USES A NONSTANDARD SECTOR SIZE!\n\n" | |||
| t MSG_197 "Nonstandard sector size detected" | ||||
| t MSG_198 "'Windows To Go' can only be installed on a GPT partitioned drive if it has " | ||||
| 	"the FIXED attribute set. The current drive was not detected as FIXED." | ||||
| t MSG_199 "Persistent partition size" | ||||
| 
 | ||||
| t MSG_201 "Cancelling - Please wait..." | ||||
| t MSG_202 "Scanning image..." | ||||
|  |  | |||
							
								
								
									
										104
									
								
								src/rufus.c
									
										
									
									
									
								
							
							
						
						
									
										104
									
								
								src/rufus.c
									
										
									
									
									
								
							|  | @ -90,7 +90,7 @@ RUFUS_UPDATE update = { { 0,0,0 },{ 0,0 }, NULL, NULL }; | |||
| HINSTANCE hMainInstance; | ||||
| HWND hMainDialog, hMultiToolbar, hSaveToolbar, hHashToolbar, hAdvancedDeviceToolbar, hAdvancedFormatToolbar, hUpdatesDlg = NULL; | ||||
| HFONT hInfoFont; | ||||
| uint8_t image_options = 0x00; | ||||
| uint8_t image_options = IMOP_WINTOGO; | ||||
| uint16_t rufus_version[3], embedded_sl_version[2]; | ||||
| uint32_t dur_mins, dur_secs, DrivePort[MAX_DRIVES];; | ||||
| loc_cmd* selected_locale = NULL; | ||||
|  | @ -102,8 +102,9 @@ BOOL use_own_c32[NB_OLD_C32] = { FALSE, FALSE }, mbr_selected_by_user = FALSE; | |||
| BOOL iso_op_in_progress = FALSE, format_op_in_progress = FALSE, right_to_left_mode = FALSE, has_uefi_csm; | ||||
| BOOL enable_HDDs = FALSE, force_update = FALSE, enable_ntfs_compression = FALSE, no_confirmation_on_cancel = FALSE, lock_drive = TRUE; | ||||
| BOOL advanced_mode_device, advanced_mode_format, allow_dual_uefi_bios, detect_fakes, enable_vmdk, force_large_fat32, usb_debug; | ||||
| BOOL use_fake_units, preserve_timestamps = FALSE, fast_zeroing = FALSE; | ||||
| BOOL use_fake_units, preserve_timestamps = FALSE, fast_zeroing = FALSE, app_changed_size = FALSE; | ||||
| BOOL zero_drive = FALSE, list_non_usb_removable_drives = FALSE, enable_file_indexing, large_drive = FALSE, write_as_image = FALSE; | ||||
| uint64_t persistence_size = 0; | ||||
| float fScale = 1.0f; | ||||
| int dialog_showing = 0, selection_default = BT_IMAGE, windows_to_go_selection = 0, persistence_unit_selection = -1; | ||||
| int default_fs, fs, bt, pt, tt; // file system, boot type, partition type, target type
 | ||||
|  | @ -112,6 +113,7 @@ char embedded_sl_version_str[2][12] = { "?.??", "?.??" }; | |||
| char embedded_sl_version_ext[2][32]; | ||||
| char ClusterSizeLabel[MAX_CLUSTER_SIZES][64]; | ||||
| char msgbox[1024], msgbox_title[32], *ini_file = NULL, *image_path = NULL, *short_image_path; | ||||
| char image_option_txt[128]; | ||||
| StrArray DriveID, DriveLabel, DriveHub, BlockingProcess, ImageList; | ||||
| // Number of steps for each FS for FCC_STRUCTURE_PROGRESS
 | ||||
| const int nb_steps[FS_MAX] = { 5, 5, 12, 1, 10 }; | ||||
|  | @ -600,26 +602,6 @@ static void SetMBRProps(void) | |||
| 	IGNORE_RETVAL(ComboBox_SetCurSel(hDiskID, needs_masquerading?1:0)); | ||||
| } | ||||
| 
 | ||||
| static void SetImageOptions(void) | ||||
| { | ||||
| 	if ((bt != BT_IMAGE) || (image_path == NULL)) { | ||||
| 		if (image_options & IMOP_WINTOGO) | ||||
| 			ToggleImageOption(IMOP_WINTOGO); | ||||
| 		if (image_options & IMOP_PERSISTENCE) | ||||
| 			ToggleImageOption(IMOP_PERSISTENCE); | ||||
| 		return; | ||||
| 	} | ||||
| 
 | ||||
| 	if ( (!HAS_WINTOGO(img_report) && ( (image_options & IMOP_WINTOGO))) || | ||||
| 		 ( HAS_WINTOGO(img_report) && (!(image_options & IMOP_WINTOGO))) ) { | ||||
| 		ToggleImageOption(IMOP_WINTOGO); | ||||
| 	} | ||||
| 	if ( (!HAS_PERSISTENCE(img_report) && ( (image_options & IMOP_PERSISTENCE))) || | ||||
| 		 ( HAS_PERSISTENCE(img_report) && (!(image_options & IMOP_PERSISTENCE))) ) { | ||||
| 		ToggleImageOption(IMOP_PERSISTENCE); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| static void SetProposedLabel(int ComboIndex) | ||||
| { | ||||
| 	const char no_label[] = STR_NO_LABEL, empty[] = ""; | ||||
|  | @ -731,8 +713,8 @@ static void EnableBootOptions(BOOL enable, BOOL remove_checkboxes) | |||
| 
 | ||||
| 	EnableWindow(GetDlgItem(hMainDialog, IDC_IMAGE_OPTION), actual_enable); | ||||
| 	EnableWindow(GetDlgItem(hMainDialog, IDC_PERSISTENCE_SLIDER), actual_enable); | ||||
| 	EnableWindow(GetDlgItem(hMainDialog, IDC_PERSISTENCE_SIZE), actual_enable); | ||||
| 	EnableWindow(GetDlgItem(hMainDialog, IDC_PERSISTENCE_UNITS), actual_enable); | ||||
| 	EnableWindow(GetDlgItem(hMainDialog, IDC_PERSISTENCE_SIZE), (persistence_size != 0) && actual_enable); | ||||
| 	EnableWindow(GetDlgItem(hMainDialog, IDC_PERSISTENCE_UNITS), (persistence_size != 0) && actual_enable); | ||||
| 	EnableMBRBootOptions(actual_enable, remove_checkboxes); | ||||
| 
 | ||||
| 	EnableWindow(GetDlgItem(hMainDialog, IDC_LABEL), actual_enable); | ||||
|  | @ -1001,8 +983,6 @@ static void DisplayISOProps(void) | |||
| 	} | ||||
| 	PRINT_ISO_PROP(img_report.has_symlinks, "  Note: This ISO uses symbolic links, which will not be replicated due to file system limitations."); | ||||
| 	PRINT_ISO_PROP(img_report.has_symlinks, "  Because of this, some features from this image may not work..."); | ||||
| 
 | ||||
| 	SetImageOptions(); | ||||
| } | ||||
| 
 | ||||
| // Insert the image name into the Boot selection dropdown
 | ||||
|  | @ -1084,6 +1064,7 @@ DWORD WINAPI ISOScanThread(LPVOID param) | |||
| 			UpdateImage(); | ||||
| 			uprintf("Using image: %s (%s)", short_image_path, SizeToHumanReadable(img_report.image_size, FALSE, FALSE)); | ||||
| 		} | ||||
| 		ToggleImageOptions(); | ||||
| 		EnableControls(TRUE); | ||||
| 		// Set Target and FS accordingly
 | ||||
| 		if (img_report.is_iso) { | ||||
|  | @ -1643,12 +1624,15 @@ static void InitDialog(HWND hDlg) | |||
| 	CreateTooltip(hTargetSystem, lmprintf(MSG_150), 30000); | ||||
| 	CreateTooltip(GetDlgItem(hDlg, IDS_CSM_HELP_TXT), lmprintf(MSG_151), 30000); | ||||
| 	CreateTooltip(GetDlgItem(hDlg, IDC_IMAGE_OPTION), lmprintf(MSG_305), 30000); | ||||
| 	CreateTooltip(GetDlgItem(hDlg, IDC_PERSISTENCE_SLIDER), lmprintf(MSG_125), 30000); | ||||
| 	CreateTooltip(GetDlgItem(hDlg, IDC_PERSISTENCE_SIZE), lmprintf(MSG_126), 30000); | ||||
| 	CreateTooltip(GetDlgItem(hDlg, IDC_PERSISTENCE_UNITS), lmprintf(MSG_127), 30000); | ||||
| 
 | ||||
| 	if (!advanced_mode_device)	// Hide as needed, since we display the advanced controls by default
 | ||||
| 		ToggleAdvancedDeviceOptions(FALSE); | ||||
| 	if (!advanced_mode_format) | ||||
| 		ToggleAdvancedFormatOptions(FALSE); | ||||
| 	ToggleImageOption(0); | ||||
| 	ToggleImageOptions(); | ||||
| 
 | ||||
| 	// Process commandline parameters
 | ||||
| 	if (iso_provided) { | ||||
|  | @ -1860,14 +1844,14 @@ out: | |||
| static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) | ||||
| { | ||||
| 	static DWORD DeviceNum = 0; | ||||
| 	static uint64_t LastRefresh = 0, pos; | ||||
| 	static uint64_t LastRefresh = 0; | ||||
| 	static BOOL first_log_display = TRUE, isMarquee = FALSE, queued_hotplug_event = FALSE; | ||||
| 	static ULONG ulRegister = 0; | ||||
| 	static LONG lPos; | ||||
| 	static LPITEMIDLIST pidlDesktop = NULL; | ||||
| 	static SHChangeNotifyEntry NotifyEntry; | ||||
| 	static DWORD_PTR thread_affinity[4]; | ||||
| 	static HFONT hyperlink_font = NULL; | ||||
| 	LONG lPos; | ||||
| 	BOOL set_selected_fs; | ||||
| 	DRAWITEMSTRUCT* pDI; | ||||
| 	LPTOOLTIPTEXT lpttt; | ||||
|  | @ -2044,18 +2028,52 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA | |||
| 			SetFileSystemAndClusterSize(NULL); | ||||
| 			windows_to_go_selection = ComboBox_GetCurSel(GetDlgItem(hDlg, IDC_IMAGE_OPTION)); | ||||
| 			break; | ||||
| 		case IDC_PERSISTENCE_SIZE: | ||||
| 			if (HIWORD(wParam) == EN_CHANGE) { | ||||
| 				uint64_t pos; | ||||
| 				// We get EN_CHANGE when we change the size automatically, so we need to detect that
 | ||||
| 				if (app_changed_size) { | ||||
| 					app_changed_size = FALSE; | ||||
| 					break; | ||||
| 				} | ||||
| 				GetWindowTextA(GetDlgItem(hDlg, IDC_PERSISTENCE_SIZE), tmp, sizeof(tmp)); | ||||
| 				lPos = atol(tmp); | ||||
| 				persistence_unit_selection = ComboBox_GetCurSel(GetDlgItem(hDlg, IDC_PERSISTENCE_UNITS)); | ||||
| 				persistence_size = lPos * MB; | ||||
| 				for (i = 0; i < persistence_unit_selection; i++) | ||||
| 					persistence_size *= 1024; | ||||
| 				if (persistence_size > SelectedDrive.DiskSize - img_report.projected_size) | ||||
| 					persistence_size = SelectedDrive.DiskSize - img_report.projected_size; | ||||
| 				pos = persistence_size / MB; | ||||
| 				for (i = 0; i < persistence_unit_selection; i++) | ||||
| 					pos /= 1024; | ||||
| 				lPos = (LONG)pos; | ||||
| 				SendMessage(GetDlgItem(hMainDialog, IDC_PERSISTENCE_SLIDER), TBM_SETPOS, TRUE, lPos); | ||||
| 				if (persistence_size >= (SelectedDrive.DiskSize - img_report.projected_size)) { | ||||
| 					static_sprintf(tmp, "%d", lPos); | ||||
| 					app_changed_size = TRUE; | ||||
| 					SetWindowTextU(GetDlgItem(hMainDialog, IDC_PERSISTENCE_SIZE), tmp); | ||||
| 				} | ||||
| 			} else if (HIWORD(wParam) == EN_KILLFOCUS) { | ||||
| 				if (persistence_size == 0) { | ||||
| 					TogglePersistenceControls(FALSE); | ||||
| 					static_sprintf(tmp, "0 (%s)", lmprintf(MSG_124)); | ||||
| 					app_changed_size = TRUE; | ||||
| 					SetWindowTextU(GetDlgItem(hMainDialog, IDC_PERSISTENCE_SIZE), tmp); | ||||
| 				} | ||||
| 			} | ||||
| 			break; | ||||
| 		case IDC_PERSISTENCE_UNITS: | ||||
| 			if (HIWORD(wParam) != CBN_SELCHANGE) | ||||
| 				break; | ||||
| 			if (ComboBox_GetCurSel(GetDlgItem(hDlg, IDC_PERSISTENCE_UNITS)) == persistence_unit_selection) | ||||
| 				break; | ||||
| 			GetWindowTextA(GetDlgItem(hMainDialog, IDC_PERSISTENCE_SIZE), tmp, sizeof(tmp)); | ||||
| 			pos = atol(tmp) * MB; | ||||
| 			persistence_size = atol(tmp) * MB; | ||||
| 			for (i = 0; i < persistence_unit_selection; i++) | ||||
| 				pos *= 1024; | ||||
| 				persistence_size *= 1024; | ||||
| 			persistence_unit_selection = ComboBox_GetCurSel(GetDlgItem(hDlg, IDC_PERSISTENCE_UNITS)); | ||||
| 			// TODO: Use projected size. For now force the selected ISO to a 4 GB size
 | ||||
| 			SetPersistenceSize(pos, SelectedDrive.DiskSize - 4 * GB); | ||||
| 			SetPersistenceSize(persistence_size, SelectedDrive.DiskSize - img_report.projected_size); | ||||
| 			break; | ||||
| 		case IDC_NB_PASSES: | ||||
| 			if (HIWORD(wParam) != CBN_SELCHANGE) | ||||
|  | @ -2115,7 +2133,7 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA | |||
| 			if ((selected_fs == -1) && (SelectedDrive.DeviceNumber != 0)) | ||||
| 				GetDrivePartitionData(SelectedDrive.DeviceNumber, tmp, sizeof(tmp), TRUE); | ||||
| 			SetFileSystemAndClusterSize(tmp); | ||||
| 			SetImageOptions(); | ||||
| 			ToggleImageOptions(); | ||||
| 			SetProposedLabel(ComboBox_GetCurSel(hDeviceList)); | ||||
| 			EnableControls(TRUE); | ||||
| 			tt = (int)ComboBox_GetItemData(hPartitionScheme, ComboBox_GetCurSel(hPartitionScheme)); | ||||
|  | @ -2399,8 +2417,19 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA | |||
| 
 | ||||
| 	case WM_HSCROLL: | ||||
| 		lPos = (LONG)SendMessage(GetDlgItem(hMainDialog, IDC_PERSISTENCE_SLIDER), TBM_GETPOS, 0, 0); | ||||
| 		sprintf(tmp, "%ld", lPos); | ||||
| 		SetWindowTextA(GetDlgItem(hMainDialog, IDC_PERSISTENCE_SIZE), tmp); | ||||
| 		if (lPos != 0) { | ||||
| 			if (persistence_size == 0) | ||||
| 				TogglePersistenceControls(TRUE); | ||||
| 			sprintf(tmp, "%ld", lPos); | ||||
| 		} else { | ||||
| 			TogglePersistenceControls(FALSE); | ||||
| 			static_sprintf(tmp, "0 (%s)", lmprintf(MSG_124)); | ||||
| 		} | ||||
| 		persistence_size = lPos * MB; | ||||
| 		for (i = 0; i < persistence_unit_selection; i++) | ||||
| 			persistence_size *= 1024; | ||||
| 		app_changed_size = TRUE; | ||||
| 		SetWindowTextU(GetDlgItem(hMainDialog, IDC_PERSISTENCE_SIZE), tmp); | ||||
| 		break; | ||||
| 
 | ||||
| 	case WM_DROPFILES: | ||||
|  | @ -3012,6 +3041,9 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine | |||
| relaunch: | ||||
| 	ubprintf("Localization set to '%s'", selected_locale->txt[0]); | ||||
| 	right_to_left_mode = ((selected_locale->ctrl_id) & LOC_RIGHT_TO_LEFT); | ||||
| 	// We always launch with the image options displaying
 | ||||
| 	image_options = IMOP_WINTOGO; | ||||
| 	image_option_txt[0] = 0; | ||||
| 	SetProcessDefaultLayout(right_to_left_mode?LAYOUT_RTL:0); | ||||
| 	if (get_loc_data_file(loc_file, selected_locale)) | ||||
| 		WriteSettingStr(SETTING_LOCALE, selected_locale->txt[0]); | ||||
|  |  | |||
|  | @ -230,7 +230,8 @@ enum fs_type { | |||
| }; | ||||
| 
 | ||||
| enum boot_type { | ||||
| 	BT_MSDOS = 0, | ||||
| 	BT_NON_BOOTABLE = 0, | ||||
| 	BT_MSDOS, | ||||
| 	BT_FREEDOS, | ||||
| 	BT_IMAGE, | ||||
| 	BT_SYSLINUX_V4,		// Start of indexes that only display in advanced mode
 | ||||
|  | @ -239,7 +240,6 @@ enum boot_type { | |||
| 	BT_GRUB4DOS, | ||||
| 	BT_GRUB2, | ||||
| 	BT_UEFI_NTFS, | ||||
| 	BT_NON_BOOTABLE, | ||||
| 	BT_MAX | ||||
| }; | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										10
									
								
								src/rufus.rc
									
										
									
									
									
								
							
							
						
						
									
										10
									
								
								src/rufus.rc
									
										
									
									
									
								
							|  | @ -33,7 +33,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL | |||
| IDD_DIALOG DIALOGEX 12, 12, 232, 326 | ||||
| STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU | ||||
| EXSTYLE WS_EX_ACCEPTFILES | ||||
| CAPTION "Rufus 3.2.1341" | ||||
| CAPTION "Rufus 3.2.1342" | ||||
| FONT 9, "Segoe UI Symbol", 400, 0, 0x0 | ||||
| BEGIN | ||||
|     LTEXT           "Drive Properties",IDS_DRIVE_PROPERTIES_TXT,8,6,53,12,NOT WS_GROUP | ||||
|  | @ -392,8 +392,8 @@ END | |||
| // | ||||
| 
 | ||||
| VS_VERSION_INFO VERSIONINFO | ||||
|  FILEVERSION 3,2,1341,0 | ||||
|  PRODUCTVERSION 3,2,1341,0 | ||||
|  FILEVERSION 3,2,1342,0 | ||||
|  PRODUCTVERSION 3,2,1342,0 | ||||
|  FILEFLAGSMASK 0x3fL | ||||
| #ifdef _DEBUG | ||||
|  FILEFLAGS 0x1L | ||||
|  | @ -411,13 +411,13 @@ BEGIN | |||
|             VALUE "Comments", "https://akeo.ie" | ||||
|             VALUE "CompanyName", "Akeo Consulting" | ||||
|             VALUE "FileDescription", "Rufus" | ||||
|             VALUE "FileVersion", "3.2.1341" | ||||
|             VALUE "FileVersion", "3.2.1342" | ||||
|             VALUE "InternalName", "Rufus" | ||||
|             VALUE "LegalCopyright", "© 2011-2018 Pete Batard (GPL v3)" | ||||
|             VALUE "LegalTrademarks", "https://www.gnu.org/copyleft/gpl.html" | ||||
|             VALUE "OriginalFilename", "rufus-3.2.exe" | ||||
|             VALUE "ProductName", "Rufus" | ||||
|             VALUE "ProductVersion", "3.2.1341" | ||||
|             VALUE "ProductVersion", "3.2.1342" | ||||
|         END | ||||
|     END | ||||
|     BLOCK "VarFileInfo" | ||||
|  |  | |||
							
								
								
									
										113
									
								
								src/ui.c
									
										
									
									
									
								
							
							
						
						
									
										113
									
								
								src/ui.c
									
										
									
									
									
								
							|  | @ -237,7 +237,7 @@ void GetFullWidth(HWND hDlg) | |||
| 	bsw = max(bsw, GetTextSize(hBootType, lmprintf(MSG_281, lmprintf(MSG_280))).cx + ddw); | ||||
| 
 | ||||
| 	// Initialize full width to the UI's default size
 | ||||
| 	GetWindowRect(GetDlgItem(hDlg, IDC_IMAGE_OPTION), &rc); | ||||
| 	GetWindowRect(GetDlgItem(hDlg, IDS_DEVICE_TXT), &rc); | ||||
| 	MapWindowPoints(NULL, hDlg, (POINT*)&rc, 2); | ||||
| 	fw = rc.right - rc.left - ddw; | ||||
| 
 | ||||
|  | @ -399,20 +399,22 @@ void PositionMainControls(HWND hDlg) | |||
| 	hCtrl = GetDlgItem(hDlg, IDC_PERSISTENCE_SLIDER); | ||||
| 	GetWindowRect(hCtrl, &rc); | ||||
| 	MapWindowPoints(NULL, hDlg, (POINT*)&rc, 2); | ||||
| 	SetWindowPos(hCtrl, hTargetSystem, mw, rc.top, bsw, rc.bottom - rc.top, 0); | ||||
| 	SetWindowPos(hCtrl, GetDlgItem(hDlg, IDC_IMAGE_OPTION), mw, rc.top, bsw, rc.bottom - rc.top, 0); | ||||
| 
 | ||||
| 	// Reposition the Persistence Units dropdown (no need to resize)
 | ||||
| 	hCtrl = GetDlgItem(hDlg, IDC_PERSISTENCE_UNITS); | ||||
| 	GetWindowRect(hCtrl, &rc); | ||||
| 	MapWindowPoints(NULL, hDlg, (POINT*)&rc, 2); | ||||
| 	sz.cx = fw - (rc.right - rc.left); | ||||
| 	SetWindowPos(hCtrl, hTargetSystem, mw + sz.cx, rc.top, rc.right - rc.left, rc.bottom - rc.top, 0); | ||||
| 	SetWindowPos(hCtrl, GetDlgItem(hDlg, IDC_PERSISTENCE_SIZE), mw + sz.cx, rc.top, rc.right - rc.left, rc.bottom - rc.top, 0); | ||||
| 	ShowWindow(hCtrl, SW_HIDE); | ||||
| 
 | ||||
| 	// Reposition and resize the Persistence Size edit
 | ||||
| 	hCtrl = GetDlgItem(hDlg, IDC_PERSISTENCE_SIZE); | ||||
| 	GetWindowRect(hCtrl, &rc); | ||||
| 	MapWindowPoints(NULL, hDlg, (POINT*)&rc, 2); | ||||
| 	SetWindowPos(hCtrl, hTargetSystem, mw + bsw + ssw, rc.top, sz.cx - bsw - 2*ssw, rc.bottom - rc.top, 0); | ||||
| 	SetWindowPos(hCtrl, GetDlgItem(hDlg, IDC_PERSISTENCE_SLIDER), mw + bsw + ssw, rc.top, fw - bsw - ssw, rc.bottom - rc.top, 0); | ||||
| 	EnableWindow(hCtrl, FALSE); | ||||
| 
 | ||||
| 	// Reposition the CSM help tip
 | ||||
| 	hCtrl = GetDlgItem(hDlg, IDS_CSM_HELP_TXT); | ||||
|  | @ -635,9 +637,40 @@ void ToggleAdvancedFormatOptions(BOOL enable) | |||
| 	InvalidateRect(hMainDialog, NULL, TRUE); | ||||
| } | ||||
| 
 | ||||
| // Toggle the display of peristence unit dropdown and resize the size field
 | ||||
| void TogglePersistenceControls(BOOL display) | ||||
| { | ||||
| 	RECT rc; | ||||
| 	HWND hSize, hUnits; | ||||
| 	LONG style, width = fw - bsw - ssw; | ||||
| 	hSize = GetDlgItem(hMainDialog, IDC_PERSISTENCE_SIZE); | ||||
| 	hUnits = GetDlgItem(hMainDialog, IDC_PERSISTENCE_UNITS); | ||||
| 
 | ||||
| 	style = GetWindowLong(hSize, GWL_EXSTYLE); | ||||
| 	if (display) | ||||
| 		style |= WS_EX_RIGHT; | ||||
| 	else | ||||
| 		style &= ~WS_EX_RIGHT; | ||||
| 	SetWindowLong(hSize, GWL_EXSTYLE, style); | ||||
| 
 | ||||
| 	if (display) { | ||||
| 		GetWindowRect(hUnits, &rc); | ||||
| 		MapWindowPoints(NULL, hMainDialog, (POINT*)&rc, 2); | ||||
| 		width -= (rc.right - rc.left) + ssw; | ||||
| 	} | ||||
| 
 | ||||
| 	GetWindowRect(hSize, &rc); | ||||
| 	MapWindowPoints(NULL, hMainDialog, (POINT*)&rc, 2); | ||||
| 	SetWindowPos(hSize, GetDlgItem(hMainDialog, IDC_PERSISTENCE_SLIDER), mw + bsw + ssw, rc.top, width, rc.bottom - rc.top, 0); | ||||
| 
 | ||||
| 	EnableWindow(hSize, display ? TRUE : FALSE); | ||||
| 	EnableWindow(hUnits, display ? TRUE : FALSE); | ||||
| 	ShowWindow(hUnits, display ? SW_SHOW : SW_HIDE); | ||||
| } | ||||
| 
 | ||||
| void SetPersistenceSize(uint64_t pos, uint64_t max) | ||||
| { | ||||
| 	char tmp[12]; | ||||
| 	char tmp[64]; | ||||
| 	int i, proposed_unit_selection = 0; | ||||
| 	LONGLONG base_unit = MB; | ||||
| 	HWND hCtrl; | ||||
|  | @ -670,61 +703,60 @@ void SetPersistenceSize(uint64_t pos, uint64_t max) | |||
| 	SendMessage(hCtrl, TBM_SETRANGEMIN, (WPARAM)FALSE, (LPARAM)0); | ||||
| 	SendMessage(hCtrl, TBM_SETRANGEMAX, (WPARAM)FALSE, (LPARAM)max); | ||||
| 	SendMessage(hCtrl, TBM_SETPOS, (WPARAM)TRUE, (LPARAM)pos); | ||||
| 	static_sprintf(tmp, "%ld", (LONG)pos); | ||||
| 	SetWindowTextA(GetDlgItem(hMainDialog, IDC_PERSISTENCE_SIZE), tmp); | ||||
| 	if (pos != 0) { | ||||
| 		static_sprintf(tmp, "%ld", (LONG)pos); | ||||
| 	} else { | ||||
| 		static_sprintf(tmp, "0 (%s)", lmprintf(MSG_124)); | ||||
| 	} | ||||
| 	app_changed_size = TRUE; | ||||
| 	SetWindowTextU(GetDlgItem(hMainDialog, IDC_PERSISTENCE_SIZE), tmp); | ||||
| } | ||||
| 
 | ||||
| // Toggle the Image Option dropdown (Windows To Go or persistence settings)
 | ||||
| void ToggleImageOption(uint8_t mask) | ||||
| void ToggleImageOptions(void) | ||||
| { | ||||
| 	static BOOL relaunch = FALSE; | ||||
| 	static char image_option_txt[128] = ""; | ||||
| 	int i, shift = (popcnt8(image_options) >= 2) ? 0 : rh; | ||||
| 	BOOL has_wintogo, has_persistence; | ||||
| 	uint8_t entry_image_options = image_options; | ||||
| 	int i, shift = rh; | ||||
| 
 | ||||
| 	assert(popcnt8(mask) <= 1); | ||||
| 	has_wintogo = ((bt == BT_IMAGE) && (image_path != NULL) && (img_report.is_iso) && (nWindowsVersion >= WINDOWS_8) && (HAS_WINTOGO(img_report))); | ||||
| 	has_persistence = ((bt == BT_IMAGE) && (image_path != NULL) && (img_report.is_iso) && (HAS_PERSISTENCE(img_report))); | ||||
| 
 | ||||
| 	// mask is set to 0 when called during (re)init
 | ||||
| 	if (mask == 0) { | ||||
| 		if (relaunch) { | ||||
| 			if ((selection_default == BT_IMAGE) && (image_path != NULL)) | ||||
| 				goto skip; | ||||
| 		} else { | ||||
| 			relaunch = TRUE; | ||||
| 			// Keep a copy of the original image option translation, as it'll be easier to toggle
 | ||||
| 			GetWindowTextU(GetDlgItem(hMainDialog, IDS_IMAGE_OPTION_TXT), image_option_txt, sizeof(image_option_txt)); | ||||
| 		} | ||||
| 	} | ||||
| 	assert(popcnt8(image_options) <= 1); | ||||
| 
 | ||||
| 	if (mask & IMOP_WINTOGO) { | ||||
| 		if (nWindowsVersion < WINDOWS_8) | ||||
| 			return; | ||||
| 	// Keep a copy of the "Image Option" text (so that we don't have to duplicate its transation in the .loc)
 | ||||
| 	if (image_option_txt[0] == 0) | ||||
| 		GetWindowTextU(GetDlgItem(hMainDialog, IDS_IMAGE_OPTION_TXT), image_option_txt, sizeof(image_option_txt)); | ||||
| 
 | ||||
| 	if ( ((has_wintogo) && !(image_options & IMOP_WINTOGO)) || | ||||
| 		 ((!has_wintogo) && (image_options & IMOP_WINTOGO)) ) { | ||||
| 		image_options ^= IMOP_WINTOGO; | ||||
| 		// Set the Windows To Go selection in the dropdown
 | ||||
| 		IGNORE_RETVAL(ComboBox_SetCurSel(GetDlgItem(hMainDialog, IDC_IMAGE_OPTION), windows_to_go_selection)); | ||||
| 	} else if (mask & IMOP_PERSISTENCE) { | ||||
| 	} | ||||
| 
 | ||||
| 	if (((has_persistence) && !(image_options & IMOP_PERSISTENCE)) || | ||||
| 		((!has_persistence) && (image_options & IMOP_PERSISTENCE))) { | ||||
| 		image_options ^= IMOP_PERSISTENCE; | ||||
| 	} | ||||
| 
 | ||||
| 	if (popcnt8(image_options) >= 2) | ||||
| 	if ( ((entry_image_options != 0) && (has_wintogo || has_persistence)) || | ||||
| 		 ((entry_image_options == 0) && !(has_wintogo || has_persistence)) ) | ||||
| 		shift = 0; | ||||
| 
 | ||||
| 	if (shift != 0) { | ||||
| 		if ((mask == 0) || (image_options == 0)) | ||||
| 		if (entry_image_options != 0) | ||||
| 			shift = -shift; | ||||
| 		section_vpos[1] += shift; | ||||
| 		section_vpos[2] += shift; | ||||
| 
 | ||||
| 		if (popcnt8(image_options) <= 1) { | ||||
| 			// Move the controls up or down
 | ||||
| 			for (i = 0; i < ARRAYSIZE(image_option_move_ids); i++) | ||||
| 				MoveCtrlY(hMainDialog, image_option_move_ids[i], shift); | ||||
| 		for (i = 0; i < ARRAYSIZE(image_option_move_ids); i++) | ||||
| 			MoveCtrlY(hMainDialog, image_option_move_ids[i], shift); | ||||
| 
 | ||||
| 			// Resize the main dialog and log window
 | ||||
| 			ResizeDialogs(shift); | ||||
| 		} | ||||
| 		// Resize the main dialog and log window
 | ||||
| 		ResizeDialogs(shift); | ||||
| 	} | ||||
| 
 | ||||
| skip: | ||||
| 	// Hide or show the boot options
 | ||||
| 	for (i = 0; i < ARRAYSIZE(image_option_toggle_ids); i++) { | ||||
| 		ShowWindow(GetDlgItem(hMainDialog, image_option_toggle_ids[i][0]), | ||||
|  | @ -735,10 +767,9 @@ skip: | |||
| 		SetWindowTextU(GetDlgItem(hMainDialog, IDS_IMAGE_OPTION_TXT), image_option_txt); | ||||
| 		IGNORE_RETVAL(ComboBox_SetCurSel(GetDlgItem(hMainDialog, IDC_IMAGE_OPTION), windows_to_go_selection)); | ||||
| 	} else if (image_options & IMOP_PERSISTENCE) { | ||||
| 		SetWindowTextU(GetDlgItem(hMainDialog, IDS_IMAGE_OPTION_TXT), lmprintf(MSG_199)); | ||||
| 		// TODO: Use projected size and reuse existing pos. For now force the selected ISO to a 4 GB size
 | ||||
| 		uint64_t max_size = SelectedDrive.DiskSize - 4 * GB; | ||||
| 		SetPersistenceSize(max_size / 2, max_size); | ||||
| 		SetWindowTextU(GetDlgItem(hMainDialog, IDS_IMAGE_OPTION_TXT), lmprintf(MSG_123)); | ||||
| 		TogglePersistenceControls(persistence_size != 0); | ||||
| 		SetPersistenceSize(persistence_size, SelectedDrive.DiskSize - img_report.projected_size); | ||||
| 	} | ||||
| 	// If you don't force a redraw here, all kind of bad UI artifacts happen...
 | ||||
| 	InvalidateRect(hMainDialog, NULL, TRUE); | ||||
|  |  | |||
							
								
								
									
										8
									
								
								src/ui.h
									
										
									
									
									
								
							
							
						
						
									
										8
									
								
								src/ui.h
									
										
									
									
									
								
							|  | @ -46,10 +46,11 @@ | |||
| extern HWND hMultiToolbar, hSaveToolbar, hHashToolbar, hAdvancedDeviceToolbar, hAdvancedFormatToolbar; | ||||
| extern HFONT hInfoFont; | ||||
| extern UINT_PTR UM_LANGUAGE_MENU_MAX; | ||||
| extern BOOL advanced_mode_device, advanced_mode_format, force_large_fat32; | ||||
| extern BOOL advanced_mode_device, advanced_mode_format, force_large_fat32, app_changed_size; | ||||
| extern loc_cmd* selected_locale; | ||||
| extern uint64_t persistence_size; | ||||
| extern const char *sfd_name, *flash_type[BADLOCKS_PATTERN_TYPES]; | ||||
| extern char *short_image_path; | ||||
| extern char *short_image_path, image_option_txt[128]; | ||||
| extern int advanced_device_section_height, advanced_format_section_height; | ||||
| extern int windows_to_go_selection, persistence_unit_selection; | ||||
| extern int selection_default, cbw, ddw, ddbh, bh; | ||||
|  | @ -63,9 +64,10 @@ extern void PositionMainControls(HWND hDlg); | |||
| extern void AdjustForLowDPI(HWND hDlg); | ||||
| extern void SetSectionHeaders(HWND hDlg); | ||||
| extern void SetPersistenceSize(uint64_t pos, uint64_t max); | ||||
| extern void TogglePersistenceControls(BOOL display); | ||||
| extern void ToggleAdvancedDeviceOptions(BOOL enable); | ||||
| extern void ToggleAdvancedFormatOptions(BOOL enable); | ||||
| extern void ToggleImageOption(uint8_t mask); | ||||
| extern void ToggleImageOptions(void); | ||||
| extern void CreateSmallButtons(HWND hDlg); | ||||
| extern void CreateAdditionalControls(HWND hDlg); | ||||
| extern void InitProgress(BOOL bOnlyFormat); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue