mirror of
https://github.com/pbatard/rufus.git
synced 2024-08-14 23:57:05 +00:00
[ui] add positioning, resizing & filling of the persistence controls
* Also add a test ISO to display these controls * The intent is to use the next round of translation to get these new UI elements localized, as any translation work takes _months_, and it is a precondition to start working on #691. * Also fix new issues with image options when switching language
This commit is contained in:
parent
05f8400451
commit
a394b9731a
9 changed files with 113 additions and 19 deletions
|
@ -18,6 +18,7 @@ For instance, MSG_114, that was introduced in v1.0.8 is MORE than one line!
|
||||||
o Version 1.0.24 (2018.??.??)
|
o Version 1.0.24 (2018.??.??)
|
||||||
- *NEW* MSG_087
|
- *NEW* MSG_087
|
||||||
- *NEW* MSG_172
|
- *NEW* MSG_172
|
||||||
|
- *NEW* MSG_199
|
||||||
|
|
||||||
o Version 1.0.23 (2018.03.27)
|
o Version 1.0.23 (2018.03.27)
|
||||||
- All positioning ('m', 's') has now been removed as well as some controls, for the 3.0 UI redesign
|
- All positioning ('m', 's') has now been removed as well as some controls, for the 3.0 UI redesign
|
||||||
|
|
BIN
res/localization/casper_test.iso
Normal file
BIN
res/localization/casper_test.iso
Normal file
Binary file not shown.
|
@ -424,6 +424,7 @@ t MSG_196 "IMPORTANT: THIS DRIVE USES A NONSTANDARD SECTOR SIZE!\n\n"
|
||||||
t MSG_197 "Nonstandard sector size detected"
|
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 "
|
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."
|
"the FIXED attribute set. The current drive was not detected as FIXED."
|
||||||
|
t MSG_199 "Persistent partition size"
|
||||||
|
|
||||||
# Status messages - these messages will appear on the status bar
|
# Status messages - these messages will appear on the status bar
|
||||||
t MSG_201 "Cancelling - Please wait..."
|
t MSG_201 "Cancelling - Please wait..."
|
||||||
|
|
|
@ -89,6 +89,7 @@ static const char* pe_file[] = { "ntdetect.com", "setupldr.bin", "txtsetup.sif"
|
||||||
static const char* reactos_name = "setupldr.sys"; // TODO: freeldr.sys doesn't seem to work
|
static const char* reactos_name = "setupldr.sys"; // TODO: freeldr.sys doesn't seem to work
|
||||||
static const char* kolibri_name = "kolibri.img";
|
static const char* kolibri_name = "kolibri.img";
|
||||||
static const char* autorun_name = "autorun.inf";
|
static const char* autorun_name = "autorun.inf";
|
||||||
|
static const char* casper_name = "CASPER";
|
||||||
static const char* stupid_antivirus = " NOTE: This is usually caused by a poorly designed security solution. "
|
static const char* stupid_antivirus = " NOTE: This is usually caused by a poorly designed security solution. "
|
||||||
"See https://rufus.akeo.ie/compatibility.\r\n This file will be skipped for now, but you should really "
|
"See https://rufus.akeo.ie/compatibility.\r\n This file will be skipped for now, but you should really "
|
||||||
"look into using a *SMARTER* antivirus solution.";
|
"look into using a *SMARTER* antivirus solution.";
|
||||||
|
@ -193,6 +194,9 @@ static BOOL check_iso_props(const char* psz_dirname, int64_t file_length, const
|
||||||
if (safe_stricmp(psz_basename, kolibri_name) == 0) {
|
if (safe_stricmp(psz_basename, kolibri_name) == 0) {
|
||||||
img_report.has_kolibrios = TRUE;
|
img_report.has_kolibrios = TRUE;
|
||||||
}
|
}
|
||||||
|
if (safe_stricmp(psz_basename, casper_name) == 0) {
|
||||||
|
img_report.has_casper = TRUE;
|
||||||
|
}
|
||||||
if (safe_stricmp(psz_basename, bootmgr_efi_name) == 0) {
|
if (safe_stricmp(psz_basename, bootmgr_efi_name) == 0) {
|
||||||
img_report.has_efi |= 1;
|
img_report.has_efi |= 1;
|
||||||
}
|
}
|
||||||
|
|
32
src/rufus.c
32
src/rufus.c
|
@ -105,7 +105,7 @@ BOOL advanced_mode_device, advanced_mode_format, allow_dual_uefi_bios, detect_fa
|
||||||
BOOL use_fake_units, preserve_timestamps = FALSE;
|
BOOL use_fake_units, preserve_timestamps = FALSE;
|
||||||
BOOL zero_drive = FALSE, list_non_usb_removable_drives = FALSE, enable_file_indexing, large_drive = FALSE, write_as_image = FALSE;
|
BOOL zero_drive = FALSE, list_non_usb_removable_drives = FALSE, enable_file_indexing, large_drive = FALSE, write_as_image = FALSE;
|
||||||
float fScale = 1.0f;
|
float fScale = 1.0f;
|
||||||
int dialog_showing = 0, selection_default, windows_to_go_selection = 0;
|
int dialog_showing = 0, selection_default = BT_IMAGE, windows_to_go_selection = 0, persistence_unit_selection = 0;
|
||||||
int default_fs, fs, bt, pt, tt; // file system, boot type, partition type, target type
|
int default_fs, fs, bt, pt, tt; // file system, boot type, partition type, target type
|
||||||
char szFolderPath[MAX_PATH], app_dir[MAX_PATH], system_dir[MAX_PATH], temp_dir[MAX_PATH], sysnative_dir[MAX_PATH];
|
char szFolderPath[MAX_PATH], app_dir[MAX_PATH], system_dir[MAX_PATH], temp_dir[MAX_PATH], sysnative_dir[MAX_PATH];
|
||||||
char embedded_sl_version_str[2][12] = { "?.??", "?.??" };
|
char embedded_sl_version_str[2][12] = { "?.??", "?.??" };
|
||||||
|
@ -1568,7 +1568,6 @@ static void InitDialog(HWND hDlg)
|
||||||
uprintf("If you think you can help update this translation, please e-mail the author of this application");
|
uprintf("If you think you can help update this translation, please e-mail the author of this application");
|
||||||
}
|
}
|
||||||
|
|
||||||
selection_default = BT_IMAGE;
|
|
||||||
CreateTaskbarList();
|
CreateTaskbarList();
|
||||||
SetTaskbarProgressState(TASKBAR_NORMAL);
|
SetTaskbarProgressState(TASKBAR_NORMAL);
|
||||||
|
|
||||||
|
@ -1591,6 +1590,11 @@ static void InitDialog(HWND hDlg)
|
||||||
IGNORE_RETVAL(ComboBox_SetItemData(hCtrl, ComboBox_AddStringU(hCtrl, lmprintf(MSG_117)), FALSE));
|
IGNORE_RETVAL(ComboBox_SetItemData(hCtrl, ComboBox_AddStringU(hCtrl, lmprintf(MSG_117)), FALSE));
|
||||||
IGNORE_RETVAL(ComboBox_SetItemData(hCtrl, ComboBox_AddStringU(hCtrl, lmprintf(MSG_118)), TRUE));
|
IGNORE_RETVAL(ComboBox_SetItemData(hCtrl, ComboBox_AddStringU(hCtrl, lmprintf(MSG_118)), TRUE));
|
||||||
|
|
||||||
|
// Fill up the Persistence Units dropdown
|
||||||
|
hCtrl = GetDlgItem(hMainDialog, IDC_PERSISTENCE_UNITS);
|
||||||
|
for (i = 0; i < 3; i++)
|
||||||
|
IGNORE_RETVAL(ComboBox_SetItemData(hCtrl, ComboBox_AddStringU(hCtrl, lmprintf(MSG_022 + i)), i));
|
||||||
|
|
||||||
// Fill up the MBR masqueraded disk IDs ("8 disks should be enough for anybody")
|
// Fill up the MBR masqueraded disk IDs ("8 disks should be enough for anybody")
|
||||||
IGNORE_RETVAL(ComboBox_SetItemData(hDiskID, ComboBox_AddStringU(hDiskID, lmprintf(MSG_030, LEFT_TO_RIGHT_EMBEDDING "0x80" POP_DIRECTIONAL_FORMATTING)), 0x80));
|
IGNORE_RETVAL(ComboBox_SetItemData(hDiskID, ComboBox_AddStringU(hDiskID, lmprintf(MSG_030, LEFT_TO_RIGHT_EMBEDDING "0x80" POP_DIRECTIONAL_FORMATTING)), 0x80));
|
||||||
for (i=1; i<=7; i++) {
|
for (i=1; i<=7; i++) {
|
||||||
|
@ -1614,6 +1618,8 @@ static void InitDialog(HWND hDlg)
|
||||||
AdjustForLowDPI(hDlg);
|
AdjustForLowDPI(hDlg);
|
||||||
// Because we created the log dialog before we computed our sizes, we need to send a custom message
|
// Because we created the log dialog before we computed our sizes, we need to send a custom message
|
||||||
SendMessage(hLogDialog, UM_RESIZE_BUTTONS, 0, 0);
|
SendMessage(hLogDialog, UM_RESIZE_BUTTONS, 0, 0);
|
||||||
|
// Limit the amount of characters for the Persistence size field
|
||||||
|
SendMessage(GetDlgItem(hDlg, IDC_PERSISTENCE_SIZE), EM_LIMITTEXT, 7, 0);
|
||||||
// Create the status line and initialize the taskbar icon for progress overlay
|
// Create the status line and initialize the taskbar icon for progress overlay
|
||||||
CreateStatusBar();
|
CreateStatusBar();
|
||||||
|
|
||||||
|
@ -1856,9 +1862,10 @@ out:
|
||||||
static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
|
static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
static DWORD DeviceNum = 0;
|
static DWORD DeviceNum = 0;
|
||||||
static uint64_t LastRefresh = 0;
|
static uint64_t LastRefresh = 0, pos;
|
||||||
static BOOL first_log_display = TRUE, isMarquee = FALSE, queued_hotplug_event = FALSE;
|
static BOOL first_log_display = TRUE, isMarquee = FALSE, queued_hotplug_event = FALSE;
|
||||||
static ULONG ulRegister = 0;
|
static ULONG ulRegister = 0;
|
||||||
|
static LONG lPos;
|
||||||
static LPITEMIDLIST pidlDesktop = NULL;
|
static LPITEMIDLIST pidlDesktop = NULL;
|
||||||
static SHChangeNotifyEntry NotifyEntry;
|
static SHChangeNotifyEntry NotifyEntry;
|
||||||
static DWORD_PTR thread_affinity[4];
|
static DWORD_PTR thread_affinity[4];
|
||||||
|
@ -2039,6 +2046,19 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
|
||||||
SetFileSystemAndClusterSize(NULL);
|
SetFileSystemAndClusterSize(NULL);
|
||||||
windows_to_go_selection = ComboBox_GetCurSel(GetDlgItem(hDlg, IDC_IMAGE_OPTION));
|
windows_to_go_selection = ComboBox_GetCurSel(GetDlgItem(hDlg, IDC_IMAGE_OPTION));
|
||||||
break;
|
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;
|
||||||
|
for (i = 0; i < persistence_unit_selection; i++)
|
||||||
|
pos *= 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
|
||||||
|
SetPersistenceSlider(pos, SelectedDrive.DiskSize - 4 * GB);
|
||||||
|
break;
|
||||||
case IDC_NB_PASSES:
|
case IDC_NB_PASSES:
|
||||||
if (HIWORD(wParam) != CBN_SELCHANGE)
|
if (HIWORD(wParam) != CBN_SELCHANGE)
|
||||||
break;
|
break;
|
||||||
|
@ -2379,6 +2399,12 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
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);
|
||||||
|
break;
|
||||||
|
|
||||||
case WM_DROPFILES:
|
case WM_DROPFILES:
|
||||||
droppedFileInfo = (HDROP)wParam;
|
droppedFileInfo = (HDROP)wParam;
|
||||||
wbuffer = calloc(MAX_PATH, sizeof(wchar_t));
|
wbuffer = calloc(MAX_PATH, sizeof(wchar_t));
|
||||||
|
|
|
@ -282,12 +282,7 @@ enum checksum_type {
|
||||||
#define IS_EFI_BOOTABLE(r) (r.has_efi != 0)
|
#define IS_EFI_BOOTABLE(r) (r.has_efi != 0)
|
||||||
#define IS_BIOS_BOOTABLE(r) (HAS_BOOTMGR(r) || HAS_SYSLINUX(r) || HAS_WINPE(r) || HAS_GRUB(r) || HAS_REACTOS(r) || HAS_KOLIBRIOS(r))
|
#define IS_BIOS_BOOTABLE(r) (HAS_BOOTMGR(r) || HAS_SYSLINUX(r) || HAS_WINPE(r) || HAS_GRUB(r) || HAS_REACTOS(r) || HAS_KOLIBRIOS(r))
|
||||||
#define HAS_WINTOGO(r) (HAS_BOOTMGR(r) && IS_EFI_BOOTABLE(r) && HAS_INSTALL_WIM(r) && (r.install_wim_version < MAX_WIM_VERSION))
|
#define HAS_WINTOGO(r) (HAS_BOOTMGR(r) && IS_EFI_BOOTABLE(r) && HAS_INSTALL_WIM(r) && (r.install_wim_version < MAX_WIM_VERSION))
|
||||||
#ifdef RUFUS_TEST
|
#define HAS_PERSISTENCE(r) (r.has_casper)
|
||||||
// TODO: have a better test for persistence/Linux
|
|
||||||
#define HAS_PERSISTENCE(r) HAS_SYSLINUX(r)
|
|
||||||
#else
|
|
||||||
#define HAS_PERSISTENCE(r) FALSE
|
|
||||||
#endif
|
|
||||||
#define IS_FAT(fs) ((fs == FS_FAT16) || (fs == FS_FAT32))
|
#define IS_FAT(fs) ((fs == FS_FAT16) || (fs == FS_FAT32))
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
@ -320,6 +315,7 @@ typedef struct {
|
||||||
BOOLEAN uses_minint;
|
BOOLEAN uses_minint;
|
||||||
BOOLEAN compression_type;
|
BOOLEAN compression_type;
|
||||||
BOOLEAN is_vhd;
|
BOOLEAN is_vhd;
|
||||||
|
BOOLEAN has_casper;
|
||||||
uint16_t sl_version; // Syslinux/Isolinux version
|
uint16_t sl_version; // Syslinux/Isolinux version
|
||||||
char sl_version_str[12];
|
char sl_version_str[12];
|
||||||
char sl_version_ext[32];
|
char sl_version_ext[32];
|
||||||
|
|
12
src/rufus.rc
12
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.2.1330"
|
CAPTION "Rufus 3.2.1331"
|
||||||
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
|
||||||
|
@ -47,7 +47,7 @@ BEGIN
|
||||||
LTEXT "Image option",IDS_IMAGE_OPTION_TXT,8,65,216,8
|
LTEXT "Image option",IDS_IMAGE_OPTION_TXT,8,65,216,8
|
||||||
COMBOBOX IDC_IMAGE_OPTION,8,74,96,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
COMBOBOX IDC_IMAGE_OPTION,8,74,96,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||||
CONTROL "",IDC_PERSISTENCE_SLIDER,"msctls_trackbar32",TBS_BOTH | TBS_NOTICKS | WS_TABSTOP,125,76,34,8
|
CONTROL "",IDC_PERSISTENCE_SLIDER,"msctls_trackbar32",TBS_BOTH | TBS_NOTICKS | WS_TABSTOP,125,76,34,8
|
||||||
EDITTEXT IDC_PERSISTENCE_SIZE,160,74,36,12,ES_AUTOHSCROLL
|
EDITTEXT IDC_PERSISTENCE_SIZE,160,74,36,12,ES_AUTOHSCROLL | ES_NUMBER,WS_EX_RIGHT
|
||||||
COMBOBOX IDC_PERSISTENCE_UNITS,200,74,24,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
COMBOBOX IDC_PERSISTENCE_UNITS,200,74,24,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||||
LTEXT "Partition scheme",IDS_PARTITION_TYPE_TXT,8,87,96,8
|
LTEXT "Partition scheme",IDS_PARTITION_TYPE_TXT,8,87,96,8
|
||||||
COMBOBOX IDC_PARTITION_TYPE,8,96,96,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
COMBOBOX IDC_PARTITION_TYPE,8,96,96,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||||
|
@ -392,8 +392,8 @@ END
|
||||||
//
|
//
|
||||||
|
|
||||||
VS_VERSION_INFO VERSIONINFO
|
VS_VERSION_INFO VERSIONINFO
|
||||||
FILEVERSION 3,2,1330,0
|
FILEVERSION 3,2,1331,0
|
||||||
PRODUCTVERSION 3,2,1330,0
|
PRODUCTVERSION 3,2,1331,0
|
||||||
FILEFLAGSMASK 0x3fL
|
FILEFLAGSMASK 0x3fL
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
FILEFLAGS 0x1L
|
FILEFLAGS 0x1L
|
||||||
|
@ -410,13 +410,13 @@ BEGIN
|
||||||
BEGIN
|
BEGIN
|
||||||
VALUE "CompanyName", "Akeo Consulting (http://akeo.ie)"
|
VALUE "CompanyName", "Akeo Consulting (http://akeo.ie)"
|
||||||
VALUE "FileDescription", "Rufus"
|
VALUE "FileDescription", "Rufus"
|
||||||
VALUE "FileVersion", "3.2.1330"
|
VALUE "FileVersion", "3.2.1331"
|
||||||
VALUE "InternalName", "Rufus"
|
VALUE "InternalName", "Rufus"
|
||||||
VALUE "LegalCopyright", "© 2011-2018 Pete Batard (GPL v3)"
|
VALUE "LegalCopyright", "© 2011-2018 Pete Batard (GPL v3)"
|
||||||
VALUE "LegalTrademarks", "http://www.gnu.org/copyleft/gpl.html"
|
VALUE "LegalTrademarks", "http://www.gnu.org/copyleft/gpl.html"
|
||||||
VALUE "OriginalFilename", "rufus.exe"
|
VALUE "OriginalFilename", "rufus.exe"
|
||||||
VALUE "ProductName", "Rufus"
|
VALUE "ProductName", "Rufus"
|
||||||
VALUE "ProductVersion", "3.2.1330"
|
VALUE "ProductVersion", "3.2.1331"
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
BLOCK "VarFileInfo"
|
BLOCK "VarFileInfo"
|
||||||
|
|
70
src/ui.c
70
src/ui.c
|
@ -30,7 +30,6 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <winioctl.h>
|
#include <winioctl.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <intrin.h>
|
|
||||||
|
|
||||||
#include "rufus.h"
|
#include "rufus.h"
|
||||||
#include "drive.h"
|
#include "drive.h"
|
||||||
|
@ -287,7 +286,7 @@ void PositionMainControls(HWND hDlg)
|
||||||
// Don't forget to add the dialog border width, since we resize the whole dialog
|
// Don't forget to add the dialog border width, since we resize the whole dialog
|
||||||
SetWindowPos(hDlg, NULL, -1, -1, fw + 2 * mw + dbw, rc.bottom - rc.top, SWP_NOMOVE | SWP_NOZORDER);
|
SetWindowPos(hDlg, NULL, -1, -1, fw + 2 * mw + dbw, rc.bottom - rc.top, SWP_NOMOVE | SWP_NOZORDER);
|
||||||
|
|
||||||
// Resize the height of the label and progress bar to the height of standard dropdowns
|
// Resize the height of the label, persistence size and progress bar to the height of standard dropdowns
|
||||||
hCtrl = GetDlgItem(hDlg, IDC_DEVICE);
|
hCtrl = GetDlgItem(hDlg, IDC_DEVICE);
|
||||||
GetWindowRect(hCtrl, &rc);
|
GetWindowRect(hCtrl, &rc);
|
||||||
MapWindowPoints(NULL, hDlg, (POINT*)&rc, 2);
|
MapWindowPoints(NULL, hDlg, (POINT*)&rc, 2);
|
||||||
|
@ -298,6 +297,10 @@ void PositionMainControls(HWND hDlg)
|
||||||
GetWindowRect(hCtrl, &rc);
|
GetWindowRect(hCtrl, &rc);
|
||||||
MapWindowPoints(NULL, hDlg, (POINT*)&rc, 2);
|
MapWindowPoints(NULL, hDlg, (POINT*)&rc, 2);
|
||||||
SetWindowPos(hCtrl, hAdvancedFormatToolbar, rc.left, rc.top, rc.right - rc.left, ddh, SWP_NOZORDER);
|
SetWindowPos(hCtrl, hAdvancedFormatToolbar, rc.left, rc.top, rc.right - rc.left, ddh, SWP_NOZORDER);
|
||||||
|
hCtrl = GetDlgItem(hDlg, IDC_PERSISTENCE_SIZE);
|
||||||
|
GetWindowRect(hCtrl, &rc);
|
||||||
|
MapWindowPoints(NULL, hDlg, (POINT*)&rc, 2);
|
||||||
|
SetWindowPos(hCtrl, GetDlgItem(hDlg, IDC_PERSISTENCE_SLIDER), rc.left, rc.top, rc.right - rc.left, ddh, SWP_NOZORDER);
|
||||||
GetWindowRect(hProgress, &rc);
|
GetWindowRect(hProgress, &rc);
|
||||||
MapWindowPoints(NULL, hDlg, (POINT*)&rc, 2);
|
MapWindowPoints(NULL, hDlg, (POINT*)&rc, 2);
|
||||||
SetWindowPos(hProgress, hNBPasses, rc.left, rc.top, rc.right - rc.left, ddh, SWP_NOZORDER);
|
SetWindowPos(hProgress, hNBPasses, rc.left, rc.top, rc.right - rc.left, ddh, SWP_NOZORDER);
|
||||||
|
@ -392,6 +395,25 @@ void PositionMainControls(HWND hDlg)
|
||||||
SendMessage(hHashToolbar, TB_SETPADDING, 0, MAKELPARAM(sz.cx + 3, sz.cy + 2));
|
SendMessage(hHashToolbar, TB_SETPADDING, 0, MAKELPARAM(sz.cx + 3, sz.cy + 2));
|
||||||
SetWindowPos(hHashToolbar, hBootType, mw + bsw + ssw, rc.top, sbw, ddbh, 0);
|
SetWindowPos(hHashToolbar, hBootType, mw + bsw + ssw, rc.top, sbw, ddbh, 0);
|
||||||
|
|
||||||
|
// Reposition the Persistence slider and resize it to the boot selection width
|
||||||
|
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);
|
||||||
|
|
||||||
|
// 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);
|
||||||
|
|
||||||
|
// 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);
|
||||||
|
|
||||||
// Reposition the CSM help tip
|
// Reposition the CSM help tip
|
||||||
hCtrl = GetDlgItem(hDlg, IDS_CSM_HELP_TXT);
|
hCtrl = GetDlgItem(hDlg, IDS_CSM_HELP_TXT);
|
||||||
GetWindowRect(hCtrl, &rc);
|
GetWindowRect(hCtrl, &rc);
|
||||||
|
@ -613,13 +635,45 @@ void ToggleAdvancedFormatOptions(BOOL enable)
|
||||||
InvalidateRect(hMainDialog, NULL, TRUE);
|
InvalidateRect(hMainDialog, NULL, TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SetPersistenceSlider(uint64_t pos, uint64_t max)
|
||||||
|
{
|
||||||
|
char tmp[12];
|
||||||
|
int i;
|
||||||
|
IGNORE_RETVAL(ComboBox_SetCurSel(GetDlgItem(hMainDialog, IDC_PERSISTENCE_UNITS), persistence_unit_selection));
|
||||||
|
pos /= MB;
|
||||||
|
max /= MB;
|
||||||
|
for (i = 0; i < persistence_unit_selection; i++) {
|
||||||
|
pos /= 1024;
|
||||||
|
max /= 1024;
|
||||||
|
}
|
||||||
|
SendMessage(GetDlgItem(hMainDialog, IDC_PERSISTENCE_SLIDER), TBM_SETRANGEMIN, (WPARAM)FALSE, (LPARAM)0);
|
||||||
|
SendMessage(GetDlgItem(hMainDialog, IDC_PERSISTENCE_SLIDER), TBM_SETRANGEMAX, (WPARAM)FALSE, (LPARAM)max);
|
||||||
|
SendMessage(GetDlgItem(hMainDialog, IDC_PERSISTENCE_SLIDER), TBM_SETPOS, (WPARAM)TRUE, (LPARAM)pos);
|
||||||
|
static_sprintf(tmp, "%ld", (LONG)pos);
|
||||||
|
SetWindowTextA(GetDlgItem(hMainDialog, IDC_PERSISTENCE_SIZE), tmp);
|
||||||
|
}
|
||||||
|
|
||||||
// Toggle the Image Option dropdown (Windows To Go or persistence settings)
|
// Toggle the Image Option dropdown (Windows To Go or persistence settings)
|
||||||
void ToggleImageOption(uint8_t mask)
|
void ToggleImageOption(uint8_t mask)
|
||||||
{
|
{
|
||||||
|
static BOOL relaunch = FALSE;
|
||||||
|
static char image_option_txt[128] = "";
|
||||||
int i, shift = (popcnt8(image_options) >= 2) ? 0 : rh;
|
int i, shift = (popcnt8(image_options) >= 2) ? 0 : rh;
|
||||||
|
|
||||||
assert(popcnt8(mask) <= 1);
|
assert(popcnt8(mask) <= 1);
|
||||||
|
|
||||||
|
// 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));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (mask & IMOP_WINTOGO) {
|
if (mask & IMOP_WINTOGO) {
|
||||||
if (nWindowsVersion < WINDOWS_8)
|
if (nWindowsVersion < WINDOWS_8)
|
||||||
return;
|
return;
|
||||||
|
@ -649,12 +703,22 @@ void ToggleImageOption(uint8_t mask)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
skip:
|
||||||
// Hide or show the boot options
|
// Hide or show the boot options
|
||||||
for (i = 0; i < ARRAYSIZE(image_option_toggle_ids); i++) {
|
for (i = 0; i < ARRAYSIZE(image_option_toggle_ids); i++) {
|
||||||
ShowWindow(GetDlgItem(hMainDialog, image_option_toggle_ids[i][0]),
|
ShowWindow(GetDlgItem(hMainDialog, image_option_toggle_ids[i][0]),
|
||||||
(image_options & image_option_toggle_ids[i][1]) ? SW_SHOW : SW_HIDE);
|
(image_options & image_option_toggle_ids[i][1]) ? SW_SHOW : SW_HIDE);
|
||||||
}
|
}
|
||||||
|
// Set the dropdown default selection
|
||||||
|
if (image_options & IMOP_WINTOGO) {
|
||||||
|
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;
|
||||||
|
SetPersistenceSlider(max_size / 2, max_size);
|
||||||
|
}
|
||||||
// If you don't force a redraw here, all kind of bad UI artifacts happen...
|
// If you don't force a redraw here, all kind of bad UI artifacts happen...
|
||||||
InvalidateRect(hMainDialog, NULL, TRUE);
|
InvalidateRect(hMainDialog, NULL, TRUE);
|
||||||
}
|
}
|
||||||
|
|
4
src/ui.h
4
src/ui.h
|
@ -50,7 +50,8 @@ extern BOOL advanced_mode_device, advanced_mode_format, force_large_fat32;
|
||||||
extern loc_cmd* selected_locale;
|
extern loc_cmd* selected_locale;
|
||||||
extern const char *sfd_name, *flash_type[BADLOCKS_PATTERN_TYPES];
|
extern const char *sfd_name, *flash_type[BADLOCKS_PATTERN_TYPES];
|
||||||
extern char *short_image_path;
|
extern char *short_image_path;
|
||||||
extern int advanced_device_section_height, advanced_format_section_height, windows_to_go_selection;
|
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;
|
extern int selection_default, cbw, ddw, ddbh, bh;
|
||||||
|
|
||||||
extern void SetComboEntry(HWND hDlg, int data);
|
extern void SetComboEntry(HWND hDlg, int data);
|
||||||
|
@ -61,6 +62,7 @@ extern void GetFullWidth(HWND hDlg);
|
||||||
extern void PositionMainControls(HWND hDlg);
|
extern void PositionMainControls(HWND hDlg);
|
||||||
extern void AdjustForLowDPI(HWND hDlg);
|
extern void AdjustForLowDPI(HWND hDlg);
|
||||||
extern void SetSectionHeaders(HWND hDlg);
|
extern void SetSectionHeaders(HWND hDlg);
|
||||||
|
extern void SetPersistenceSlider(uint64_t pos, uint64_t max);
|
||||||
extern void ToggleAdvancedDeviceOptions(BOOL enable);
|
extern void ToggleAdvancedDeviceOptions(BOOL enable);
|
||||||
extern void ToggleAdvancedFormatOptions(BOOL enable);
|
extern void ToggleAdvancedFormatOptions(BOOL enable);
|
||||||
extern void ToggleImageOption(uint8_t mask);
|
extern void ToggleImageOption(uint8_t mask);
|
||||||
|
|
Loading…
Reference in a new issue