mirror of
https://github.com/pbatard/rufus.git
synced 2025-05-28 21:54:15 -04:00
[ui] added FS selection and tooltip
This commit is contained in:
parent
4f3ebdf92c
commit
f661e5c585
4 changed files with 42 additions and 12 deletions
39
rufus.c
39
rufus.c
|
@ -72,7 +72,8 @@ struct {
|
||||||
char FSType[32];
|
char FSType[32];
|
||||||
} SelectedDrive;
|
} SelectedDrive;
|
||||||
|
|
||||||
static HWND hDeviceList, hCapacity, hFileSystem, hLabel, hDeviceToolTip = NULL;
|
static HWND hDeviceList, hCapacity, hFileSystem, hLabel;
|
||||||
|
static HWND hDeviceTooltip = NULL, hFSTooltip = NULL;
|
||||||
static StrArray DriveID, DriveLabel;
|
static StrArray DriveID, DriveLabel;
|
||||||
|
|
||||||
#ifdef RUFUS_DEBUG
|
#ifdef RUFUS_DEBUG
|
||||||
|
@ -315,7 +316,7 @@ static BOOL GetDriveInfo(void)
|
||||||
void* drive_layout = (void*)layout;
|
void* drive_layout = (void*)layout;
|
||||||
PDISK_GEOMETRY_EX DiskGeometry = (PDISK_GEOMETRY_EX)disk_geometry;
|
PDISK_GEOMETRY_EX DiskGeometry = (PDISK_GEOMETRY_EX)disk_geometry;
|
||||||
PDRIVE_LAYOUT_INFORMATION_EX DriveLayout = (PDRIVE_LAYOUT_INFORMATION_EX)drive_layout;
|
PDRIVE_LAYOUT_INFORMATION_EX DriveLayout = (PDRIVE_LAYOUT_INFORMATION_EX)drive_layout;
|
||||||
char DrivePath[] = "#:\\";
|
char DrivePath[] = "#:\\", tmp[128];
|
||||||
DWORD i, nb_partitions = 0;
|
DWORD i, nb_partitions = 0;
|
||||||
|
|
||||||
SelectedDrive.DiskSize = 0;
|
SelectedDrive.DiskSize = 0;
|
||||||
|
@ -340,11 +341,19 @@ static BOOL GetDriveInfo(void)
|
||||||
if (!r || size <= 0) {
|
if (!r || size <= 0) {
|
||||||
uprintf("IOCTL_DISK_GET_DRIVE_LAYOUT_EX failed: %s\n", WindowsErrorString());
|
uprintf("IOCTL_DISK_GET_DRIVE_LAYOUT_EX failed: %s\n", WindowsErrorString());
|
||||||
} else {
|
} else {
|
||||||
|
DestroyTooltip(hFSTooltip);
|
||||||
|
hFSTooltip = NULL;
|
||||||
switch (DriveLayout->PartitionStyle) {
|
switch (DriveLayout->PartitionStyle) {
|
||||||
case PARTITION_STYLE_MBR:
|
case PARTITION_STYLE_MBR:
|
||||||
for (i=0; i<DriveLayout->PartitionCount; i++) {
|
for (i=0; i<DriveLayout->PartitionCount; i++) {
|
||||||
if (DriveLayout->PartitionEntry[i].Mbr.PartitionType != PARTITION_ENTRY_UNUSED) {
|
if (DriveLayout->PartitionEntry[i].Mbr.PartitionType != PARTITION_ENTRY_UNUSED) {
|
||||||
uprintf("Partition #%d:\n", ++nb_partitions);
|
uprintf("Partition #%d:\n", ++nb_partitions);
|
||||||
|
if (hFSTooltip == NULL) {
|
||||||
|
safe_sprintf(tmp, sizeof(tmp), "Existing file system: %s (0x%02X)",
|
||||||
|
GetPartitionType(DriveLayout->PartitionEntry[i].Mbr.PartitionType),
|
||||||
|
DriveLayout->PartitionEntry[i].Mbr.PartitionType);
|
||||||
|
hFSTooltip = CreateTooltip(hFileSystem, tmp, -1);
|
||||||
|
}
|
||||||
uprintf(" Type: %s (0x%02X)\n Boot: %s\n Recognized: %s\n Hidden Sectors: %d\n",
|
uprintf(" Type: %s (0x%02X)\n Boot: %s\n Recognized: %s\n Hidden Sectors: %d\n",
|
||||||
GetPartitionType(DriveLayout->PartitionEntry[i].Mbr.PartitionType),
|
GetPartitionType(DriveLayout->PartitionEntry[i].Mbr.PartitionType),
|
||||||
DriveLayout->PartitionEntry[i].Mbr.PartitionType,
|
DriveLayout->PartitionEntry[i].Mbr.PartitionType,
|
||||||
|
@ -366,9 +375,18 @@ static BOOL GetDriveInfo(void)
|
||||||
|
|
||||||
safe_closehandle(hDrive);
|
safe_closehandle(hDrive);
|
||||||
|
|
||||||
if (!GetVolumeInformationA(DrivePath, NULL, 0, NULL, NULL, NULL,
|
IGNORE_RETVAL(ComboBox_SetCurSel(hFileSystem, FS_DEFAULT));
|
||||||
|
if (GetVolumeInformationA(DrivePath, NULL, 0, NULL, NULL, NULL,
|
||||||
SelectedDrive.FSType, sizeof(SelectedDrive.FSType))) {
|
SelectedDrive.FSType, sizeof(SelectedDrive.FSType))) {
|
||||||
safe_sprintf(SelectedDrive.FSType, sizeof(SelectedDrive.FSType), "Non Windows (Please Select)");
|
// re-select existing FS if it's one we know
|
||||||
|
for (i=0; i<FS_MAX; i++) {
|
||||||
|
tmp[0] = 0;
|
||||||
|
IGNORE_RETVAL(ComboBox_GetLBTextU(hFileSystem, i, tmp));
|
||||||
|
if (safe_strcmp(SelectedDrive.FSType, tmp) == 0) {
|
||||||
|
IGNORE_RETVAL(ComboBox_SetCurSel(hFileSystem, i));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
@ -388,14 +406,19 @@ static BOOL PopulateProperties(int ComboIndex)
|
||||||
IGNORE_RETVAL(ComboBox_ResetContent(hCapacity));
|
IGNORE_RETVAL(ComboBox_ResetContent(hCapacity));
|
||||||
IGNORE_RETVAL(ComboBox_ResetContent(hFileSystem));
|
IGNORE_RETVAL(ComboBox_ResetContent(hFileSystem));
|
||||||
SetWindowTextA(hLabel, "");
|
SetWindowTextA(hLabel, "");
|
||||||
DestroyTooltip(hDeviceToolTip);
|
DestroyTooltip(hDeviceTooltip);
|
||||||
hDeviceToolTip = NULL;
|
hDeviceTooltip = NULL;
|
||||||
memset(&SelectedDrive, 0, sizeof(SelectedDrive));
|
memset(&SelectedDrive, 0, sizeof(SelectedDrive));
|
||||||
|
|
||||||
if (ComboIndex < 0) {
|
if (ComboIndex < 0) {
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Populate the FileSystem values
|
||||||
|
IGNORE_RETVAL(ComboBox_AddStringU(hFileSystem, "FAT"));
|
||||||
|
IGNORE_RETVAL(ComboBox_AddStringU(hFileSystem, "FAT32"));
|
||||||
|
IGNORE_RETVAL(ComboBox_AddStringU(hFileSystem, "NTFS"));
|
||||||
|
|
||||||
SelectedDrive.DeviceNumber = (DWORD)ComboBox_GetItemData(hDeviceList, ComboIndex);
|
SelectedDrive.DeviceNumber = (DWORD)ComboBox_GetItemData(hDeviceList, ComboIndex);
|
||||||
if (!GetDriveInfo())
|
if (!GetDriveInfo())
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
@ -410,9 +433,7 @@ static BOOL PopulateProperties(int ComboIndex)
|
||||||
}
|
}
|
||||||
IGNORE_RETVAL(ComboBox_AddStringU(hCapacity, capacity));
|
IGNORE_RETVAL(ComboBox_AddStringU(hCapacity, capacity));
|
||||||
IGNORE_RETVAL(ComboBox_SetCurSel(hCapacity, 0));
|
IGNORE_RETVAL(ComboBox_SetCurSel(hCapacity, 0));
|
||||||
IGNORE_RETVAL(ComboBox_AddStringU(hFileSystem, SelectedDrive.FSType));
|
hDeviceTooltip = CreateTooltip(hDeviceList, DriveID.Table[ComboIndex], -1);
|
||||||
IGNORE_RETVAL(ComboBox_SetCurSel(hFileSystem, 0));
|
|
||||||
hDeviceToolTip = CreateTooltip(hDeviceList, DriveID.Table[ComboIndex], -1);
|
|
||||||
|
|
||||||
// If no existing label is available, propose one according to the size (eg: "256MB", "8GB")
|
// If no existing label is available, propose one according to the size (eg: "256MB", "8GB")
|
||||||
if (safe_strcmp(no_label, DriveLabel.Table[ComboIndex]) == 0) {
|
if (safe_strcmp(no_label, DriveLabel.Table[ComboIndex]) == 0) {
|
||||||
|
|
11
rufus.h
11
rufus.h
|
@ -27,6 +27,7 @@
|
||||||
#define MAX_DRIVES 16
|
#define MAX_DRIVES 16
|
||||||
#define MAX_TOOLTIPS 16
|
#define MAX_TOOLTIPS 16
|
||||||
#define PROPOSEDLABEL_TOLERANCE 0.10
|
#define PROPOSEDLABEL_TOLERANCE 0.10
|
||||||
|
#define FS_DEFAULT FS_FAT32
|
||||||
#define WHITE RGB(255,255,255)
|
#define WHITE RGB(255,255,255)
|
||||||
#define SEPARATOR_GREY RGB(223,223,223)
|
#define SEPARATOR_GREY RGB(223,223,223)
|
||||||
#define RUFUS_URL "https://github.com/pbatard/rufus/wiki/Rufus"
|
#define RUFUS_URL "https://github.com/pbatard/rufus/wiki/Rufus"
|
||||||
|
@ -73,7 +74,7 @@ extern char *WindowsErrorString(void);
|
||||||
extern void CenterDialog(HWND hDlg);
|
extern void CenterDialog(HWND hDlg);
|
||||||
extern void CreateStatusBar(void);
|
extern void CreateStatusBar(void);
|
||||||
extern INT_PTR CreateAboutBox(void);
|
extern INT_PTR CreateAboutBox(void);
|
||||||
extern HWND CreateTooltip(HWND hControl, char* message, int duration);
|
extern HWND 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 void Notification(int type, char* text, char* title);
|
extern void Notification(int type, char* text, char* title);
|
||||||
|
@ -104,6 +105,14 @@ enum MessageType {
|
||||||
MSG_ERROR
|
MSG_ERROR
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* File system indexes in our FS combobox */
|
||||||
|
enum FSType {
|
||||||
|
FS_FAT16 = 0,
|
||||||
|
FS_FAT32,
|
||||||
|
FS_NTFS,
|
||||||
|
FS_MAX
|
||||||
|
};
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
DWORD DeviceType;
|
DWORD DeviceType;
|
||||||
ULONG DeviceNumber;
|
ULONG DeviceNumber;
|
||||||
|
|
2
rufus.rc
2
rufus.rc
|
@ -37,7 +37,7 @@ BEGIN
|
||||||
PUSHBUTTON "Close",IDCANCEL,156,224,50,14
|
PUSHBUTTON "Close",IDCANCEL,156,224,50,14
|
||||||
COMBOBOX IDC_DEVICE,16,18,190,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
COMBOBOX IDC_DEVICE,16,18,190,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||||
CONTROL "&Device",IDC_STATIC,"Static",SS_LEFTNOWORDWRAP | WS_GROUP,17,7,22,8
|
CONTROL "&Device",IDC_STATIC,"Static",SS_LEFTNOWORDWRAP | WS_GROUP,17,7,22,8
|
||||||
COMBOBOX IDC_FILESYSTEM,16,76,190,30,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
COMBOBOX IDC_FILESYSTEM,16,76,190,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||||
LTEXT "&File system",IDC_STATIC,17,65,51,10
|
LTEXT "&File system",IDC_STATIC,17,65,51,10
|
||||||
COMBOBOX IDC_CAPACITY,16,47,190,30,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
COMBOBOX IDC_CAPACITY,16,47,190,30,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
||||||
LTEXT "Ca&pacity",IDC_STATIC,17,36,29,8
|
LTEXT "Ca&pacity",IDC_STATIC,17,36,29,8
|
||||||
|
|
2
stdlg.c
2
stdlg.c
|
@ -619,7 +619,7 @@ INT_PTR CALLBACK TooltipCallback(HWND hDlg, UINT message, WPARAM wParam, LPARAM
|
||||||
* duration sets the duration in ms. Use -1 for default
|
* duration sets the duration in ms. Use -1 for default
|
||||||
* message is an UTF-8 string
|
* message is an UTF-8 string
|
||||||
*/
|
*/
|
||||||
HWND CreateTooltip(HWND hControl, char* message, int duration)
|
HWND CreateTooltip(HWND hControl, const char* message, int duration)
|
||||||
{
|
{
|
||||||
TOOLINFOW toolInfo = {0};
|
TOOLINFOW toolInfo = {0};
|
||||||
int i;
|
int i;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue