mirror of
https://github.com/pbatard/rufus.git
synced 2025-05-22 10:55:19 -04:00
[ui] factorize code and remove unused one
* Merge Notification and Question * Remove bold and url related workarounds * also switch some files to UTF-8
This commit is contained in:
parent
454010c27c
commit
f1929d7014
6 changed files with 93 additions and 209 deletions
|
@ -1,7 +1,7 @@
|
||||||
/*
|
/*
|
||||||
* Rufus: The Reliable USB Formatting Utility
|
* Rufus: The Reliable USB Formatting Utility
|
||||||
* Licensing Data
|
* Licensing Data
|
||||||
* Copyright (c) 2011-2012 Pete Batard <pete@akeo.ie>
|
* Copyright © 2011-2012 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
|
||||||
|
@ -22,7 +22,7 @@ const char* about_blurb_format =
|
||||||
"{\\b\\fs20Rufus - The Reliable USB Formatting Utility}\\line\n"
|
"{\\b\\fs20Rufus - The Reliable USB Formatting Utility}\\line\n"
|
||||||
"\\fs18Version %d.%d.%d (Build %d)\\line\n"
|
"\\fs18Version %d.%d.%d (Build %d)\\line\n"
|
||||||
"\\line\n"
|
"\\line\n"
|
||||||
"Copyright © 2011-2012 Pete Batard / Akeo\\line\n"
|
"Copyright © 2011-2012 Pete Batard / Akeo\\line\n"
|
||||||
RUFUS_URL "\\line\n"
|
RUFUS_URL "\\line\n"
|
||||||
"\\line\n"
|
"\\line\n"
|
||||||
"Report bugs or request enhancements at:\\line\n"
|
"Report bugs or request enhancements at:\\line\n"
|
||||||
|
|
|
@ -12,8 +12,7 @@
|
||||||
#define IDS_VERSION 108
|
#define IDS_VERSION 108
|
||||||
#define IDI_UP 109
|
#define IDI_UP 109
|
||||||
#define IDI_DOWN 110
|
#define IDI_DOWN 110
|
||||||
#define IDD_QUESTION 111
|
#define IDD_UPDATE_POLICY 111
|
||||||
#define IDD_UPDATE_POLICY 112
|
|
||||||
#define IDR_BR_MBR_BIN 200
|
#define IDR_BR_MBR_BIN 200
|
||||||
#define IDR_FD_COMMAND_COM 300
|
#define IDR_FD_COMMAND_COM 300
|
||||||
#define IDR_FD_KERNEL_SYS 301
|
#define IDR_FD_KERNEL_SYS 301
|
||||||
|
@ -70,10 +69,7 @@
|
||||||
#define IDC_EXTRA_PARTITION 1023
|
#define IDC_EXTRA_PARTITION 1023
|
||||||
#define IDC_ABOUT_LICENSE 1030
|
#define IDC_ABOUT_LICENSE 1030
|
||||||
#define IDC_ABOUT_ICON 1031
|
#define IDC_ABOUT_ICON 1031
|
||||||
#define IDC_RUFUS_BOLD 1032
|
|
||||||
#define IDC_ABOUT_COPYRIGHTS 1033
|
#define IDC_ABOUT_COPYRIGHTS 1033
|
||||||
#define IDC_ABOUT_RUFUS_URL 1034
|
|
||||||
#define IDC_ABOUT_BUG_URL 1035
|
|
||||||
#define IDC_LICENSE_TEXT 1036
|
#define IDC_LICENSE_TEXT 1036
|
||||||
#define IDC_NOTIFICATION_ICON 1040
|
#define IDC_NOTIFICATION_ICON 1040
|
||||||
#define IDC_NOTIFICATION_TEXT 1041
|
#define IDC_NOTIFICATION_TEXT 1041
|
||||||
|
@ -84,7 +80,7 @@
|
||||||
#define IDC_LOG_EDIT 1050
|
#define IDC_LOG_EDIT 1050
|
||||||
#define IDC_LOG_SAVE 1051
|
#define IDC_LOG_SAVE 1051
|
||||||
#define IDC_LOG_CLEAR 1052
|
#define IDC_LOG_CLEAR 1052
|
||||||
#define IDC_QUESTION_MORE_INFO 1060
|
#define IDC_MORE_INFO 1060
|
||||||
#define IDC_UPDATES_POLICY 1061
|
#define IDC_UPDATES_POLICY 1061
|
||||||
#define IDC_UPDATE_FREQUENCY 1062
|
#define IDC_UPDATE_FREQUENCY 1062
|
||||||
#define IDC_INCLUDE_BETAS 1063
|
#define IDC_INCLUDE_BETAS 1063
|
||||||
|
@ -95,7 +91,7 @@
|
||||||
#ifdef APSTUDIO_INVOKED
|
#ifdef APSTUDIO_INVOKED
|
||||||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||||
#define _APS_NO_MFC 1
|
#define _APS_NO_MFC 1
|
||||||
#define _APS_NEXT_RESOURCE_VALUE 113
|
#define _APS_NEXT_RESOURCE_VALUE 112
|
||||||
#define _APS_NEXT_COMMAND_VALUE 40001
|
#define _APS_NEXT_COMMAND_VALUE 40001
|
||||||
#define _APS_NEXT_CONTROL_VALUE 1065
|
#define _APS_NEXT_CONTROL_VALUE 1065
|
||||||
#define _APS_NEXT_SYMED_VALUE 101
|
#define _APS_NEXT_SYMED_VALUE 101
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Rufus: The Reliable USB Formatting Utility
|
* Rufus: The Reliable USB Formatting Utility
|
||||||
* Copyright (c) 2011-2012 Pete Batard <pete@akeo.ie>
|
* Copyright © 2011-2012 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
|
||||||
|
@ -1627,7 +1627,8 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
|
||||||
break;
|
break;
|
||||||
#ifdef RUFUS_TEST
|
#ifdef RUFUS_TEST
|
||||||
case IDC_TEST:
|
case IDC_TEST:
|
||||||
testme = Question("Rufus updates", "Do you want to allow " APPLICATION_NAME " to check for updates?\n");
|
testme = Notification(MSG_QUESTION, IDD_UPDATE_POLICY, UpdateCallback,
|
||||||
|
"Rufus updates", "Do you want to allow " APPLICATION_NAME " to check for updates?\n");
|
||||||
uprintf("User said %s\n", testme?"YES":"NO");
|
uprintf("User said %s\n", testme?"YES":"NO");
|
||||||
// CheckForUpdates();
|
// CheckForUpdates();
|
||||||
/*
|
/*
|
||||||
|
@ -1903,12 +1904,12 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
|
||||||
SendMessage(hProgress, PBM_SETSTATE, (WPARAM)PBST_PAUSED, 0);
|
SendMessage(hProgress, PBM_SETSTATE, (WPARAM)PBST_PAUSED, 0);
|
||||||
SetTaskbarProgressState(TASKBAR_PAUSED);
|
SetTaskbarProgressState(TASKBAR_PAUSED);
|
||||||
PrintStatus(0, FALSE, "Cancelled");
|
PrintStatus(0, FALSE, "Cancelled");
|
||||||
Notification(MSG_INFO, "Cancelled", "Operation cancelled by the user.");
|
Notification(MSG_INFO, 0, NULL, "Cancelled", "Operation cancelled by the user.");
|
||||||
} else {
|
} else {
|
||||||
SendMessage(hProgress, PBM_SETSTATE, (WPARAM)PBST_ERROR, 0);
|
SendMessage(hProgress, PBM_SETSTATE, (WPARAM)PBST_ERROR, 0);
|
||||||
SetTaskbarProgressState(TASKBAR_ERROR);
|
SetTaskbarProgressState(TASKBAR_ERROR);
|
||||||
PrintStatus(0, FALSE, "FAILED");
|
PrintStatus(0, FALSE, "FAILED");
|
||||||
Notification(MSG_ERROR, "Error", "Error: %s.%s", StrError(FormatStatus),
|
Notification(MSG_ERROR, 0, NULL, "Error", "Error: %s.%s", StrError(FormatStatus),
|
||||||
(strchr(StrError(FormatStatus), '\n') != NULL)?"":"\nFor more information, please check the log.");
|
(strchr(StrError(FormatStatus), '\n') != NULL)?"":"\nFor more information, please check the log.");
|
||||||
}
|
}
|
||||||
return (INT_PTR)TRUE;
|
return (INT_PTR)TRUE;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Rufus: The Reliable USB Formatting Utility
|
* Rufus: The Reliable USB Formatting Utility
|
||||||
* Copyright (c) 2011-2012 Pete Batard <pete@akeo.ie>
|
* Copyright © 2011-2012 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
|
||||||
|
@ -92,8 +92,10 @@ enum user_message_type {
|
||||||
enum notification_type {
|
enum notification_type {
|
||||||
MSG_INFO,
|
MSG_INFO,
|
||||||
MSG_WARNING,
|
MSG_WARNING,
|
||||||
MSG_ERROR
|
MSG_ERROR,
|
||||||
|
MSG_QUESTION,
|
||||||
};
|
};
|
||||||
|
typedef INT_PTR (CALLBACK *Callback_t)(HWND, UINT, WPARAM, LPARAM);
|
||||||
|
|
||||||
/* Timers used throughout the program */
|
/* Timers used throughout the program */
|
||||||
enum timer_type {
|
enum timer_type {
|
||||||
|
@ -225,7 +227,7 @@ extern INT_PTR CreateAboutBox(void);
|
||||||
extern BOOL CreateTooltip(HWND hControl, const char* message, int duration);
|
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, char* title, char* format, ...);
|
extern BOOL Notification(int type, WORD extra_id, Callback_t extra_callback, char* title, char* format, ...);
|
||||||
extern BOOL Question(char* title, char* format, ...);
|
extern BOOL Question(char* title, char* format, ...);
|
||||||
extern BOOL ExtractDOS(const char* path);
|
extern BOOL ExtractDOS(const char* path);
|
||||||
extern BOOL ExtractISO(const char* src_iso, const char* dest_dir, BOOL scan);
|
extern BOOL ExtractISO(const char* src_iso, const char* dest_dir, BOOL scan);
|
||||||
|
@ -242,6 +244,7 @@ extern char* FileDialog(BOOL save, char* path, char* filename, char* ext, char*
|
||||||
extern BOOL FileIO(BOOL save, char* path, char** buffer, DWORD* size);
|
extern BOOL FileIO(BOOL save, char* path, char** buffer, DWORD* size);
|
||||||
extern LONG GetEntryWidth(HWND hDropDown, const char* entry);
|
extern LONG GetEntryWidth(HWND hDropDown, const char* entry);
|
||||||
extern BOOL DownloadFile(const char* url, const char* file);
|
extern BOOL DownloadFile(const char* url, const char* file);
|
||||||
|
extern INT_PTR CALLBACK UpdateCallback(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
|
||||||
extern BOOL CheckForUpdates(void);
|
extern BOOL CheckForUpdates(void);
|
||||||
extern BOOL IsShown(HWND hDlg);
|
extern BOOL IsShown(HWND hDlg);
|
||||||
extern char* get_token_data_file(const char* token, const char* filename);
|
extern char* get_token_data_file(const char* token, const char* filename);
|
||||||
|
|
34
src/rufus.rc
34
src/rufus.rc
|
@ -30,7 +30,7 @@ LANGUAGE LANG_ENGLISH, SUBLANG_NEUTRAL
|
||||||
IDD_DIALOG DIALOGEX 12, 12, 206, 316
|
IDD_DIALOG DIALOGEX 12, 12, 206, 316
|
||||||
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||||
EXSTYLE WS_EX_APPWINDOW
|
EXSTYLE WS_EX_APPWINDOW
|
||||||
CAPTION "Rufus v1.2.1.198"
|
CAPTION "Rufus v1.2.1.199"
|
||||||
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
||||||
BEGIN
|
BEGIN
|
||||||
DEFPUSHBUTTON "Start",IDC_START,94,278,50,14
|
DEFPUSHBUTTON "Start",IDC_START,94,278,50,14
|
||||||
|
@ -78,18 +78,6 @@ BEGIN
|
||||||
CONTROL "",IDC_ABOUT_BLURB,"RichEdit20W",WS_TABSTOP | 0x884,46,7,235,93
|
CONTROL "",IDC_ABOUT_BLURB,"RichEdit20W",WS_TABSTOP | 0x884,46,7,235,93
|
||||||
END
|
END
|
||||||
|
|
||||||
IDD_NOTIFICATION DIALOGEX 0, 0, 263, 63
|
|
||||||
STYLE DS_SETFONT | DS_FIXEDSYS | DS_NOFAILCREATE | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_THICKFRAME
|
|
||||||
CAPTION "Rufus"
|
|
||||||
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
|
||||||
BEGIN
|
|
||||||
LTEXT "",IDC_NOTIFICATION_LINE,0,0,263,39
|
|
||||||
CONTROL "",IDC_STATIC,"Static",SS_WHITERECT,0,0,263,38
|
|
||||||
ICON 32516,IDC_NOTIFICATION_ICON,6,6,20,20
|
|
||||||
LTEXT "",IDC_NOTIFICATION_TEXT,35,10,219,20
|
|
||||||
DEFPUSHBUTTON "Close",IDCANCEL,211,44,50,14
|
|
||||||
END
|
|
||||||
|
|
||||||
IDD_ISO_EXTRACT DIALOGEX 0, 0, 262, 66
|
IDD_ISO_EXTRACT DIALOGEX 0, 0, 262, 66
|
||||||
STYLE DS_SETFONT | DS_FIXEDSYS | WS_POPUP | WS_CAPTION
|
STYLE DS_SETFONT | DS_FIXEDSYS | WS_POPUP | WS_CAPTION
|
||||||
CAPTION "Copying ISO files..."
|
CAPTION "Copying ISO files..."
|
||||||
|
@ -120,7 +108,7 @@ BEGIN
|
||||||
PUSHBUTTON "Close Log",IDCANCEL,308,259,50,14
|
PUSHBUTTON "Close Log",IDCANCEL,308,259,50,14
|
||||||
END
|
END
|
||||||
|
|
||||||
IDD_QUESTION DIALOGEX 0, 0, 263, 63
|
IDD_NOTIFICATION DIALOGEX 0, 0, 263, 63
|
||||||
STYLE DS_SETFONT | DS_FIXEDSYS | DS_NOFAILCREATE | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_THICKFRAME
|
STYLE DS_SETFONT | DS_FIXEDSYS | DS_NOFAILCREATE | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_THICKFRAME
|
||||||
CAPTION "Rufus"
|
CAPTION "Rufus"
|
||||||
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
||||||
|
@ -130,8 +118,8 @@ BEGIN
|
||||||
ICON 32516,IDC_NOTIFICATION_ICON,6,6,20,20
|
ICON 32516,IDC_NOTIFICATION_ICON,6,6,20,20
|
||||||
LTEXT "",IDC_NOTIFICATION_TEXT,35,10,219,20
|
LTEXT "",IDC_NOTIFICATION_TEXT,35,10,219,20
|
||||||
DEFPUSHBUTTON "No",IDNO,211,44,50,14
|
DEFPUSHBUTTON "No",IDNO,211,44,50,14
|
||||||
DEFPUSHBUTTON "More info...",IDC_QUESTION_MORE_INFO,8,44,50,14
|
DEFPUSHBUTTON "More info...",IDC_MORE_INFO,8,44,50,14,NOT WS_VISIBLE
|
||||||
DEFPUSHBUTTON "Yes",IDYES,159,44,50,14
|
DEFPUSHBUTTON "Yes",IDYES,159,44,50,14,NOT WS_VISIBLE
|
||||||
END
|
END
|
||||||
|
|
||||||
IDD_UPDATE_POLICY DIALOGEX 0, 0, 287, 195
|
IDD_UPDATE_POLICY DIALOGEX 0, 0, 287, 195
|
||||||
|
@ -231,10 +219,6 @@ BEGIN
|
||||||
BEGIN
|
BEGIN
|
||||||
END
|
END
|
||||||
|
|
||||||
IDD_NOTIFICATION, DIALOG
|
|
||||||
BEGIN
|
|
||||||
END
|
|
||||||
|
|
||||||
IDD_ISO_EXTRACT, DIALOG
|
IDD_ISO_EXTRACT, DIALOG
|
||||||
BEGIN
|
BEGIN
|
||||||
END
|
END
|
||||||
|
@ -247,7 +231,7 @@ BEGIN
|
||||||
BEGIN
|
BEGIN
|
||||||
END
|
END
|
||||||
|
|
||||||
IDD_QUESTION, DIALOG
|
IDD_NOTIFICATION, DIALOG
|
||||||
BEGIN
|
BEGIN
|
||||||
END
|
END
|
||||||
|
|
||||||
|
@ -264,8 +248,8 @@ END
|
||||||
//
|
//
|
||||||
|
|
||||||
VS_VERSION_INFO VERSIONINFO
|
VS_VERSION_INFO VERSIONINFO
|
||||||
FILEVERSION 1,2,1,198
|
FILEVERSION 1,2,1,199
|
||||||
PRODUCTVERSION 1,2,1,198
|
PRODUCTVERSION 1,2,1,199
|
||||||
FILEFLAGSMASK 0x3fL
|
FILEFLAGSMASK 0x3fL
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
FILEFLAGS 0x1L
|
FILEFLAGS 0x1L
|
||||||
|
@ -282,13 +266,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", "1.2.1.198"
|
VALUE "FileVersion", "1.2.1.199"
|
||||||
VALUE "InternalName", "Rufus"
|
VALUE "InternalName", "Rufus"
|
||||||
VALUE "LegalCopyright", "(c) 2011-2012 Pete Batard (GPL v3)"
|
VALUE "LegalCopyright", "(c) 2011-2012 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", "1.2.1.198"
|
VALUE "ProductVersion", "1.2.1.199"
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
BLOCK "VarFileInfo"
|
BLOCK "VarFileInfo"
|
||||||
|
|
236
src/stdlg.c
236
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 (c) 2011-2012 Pete Batard <pete@akeo.ie>
|
* Copyright © 2011-2012 Pete Batard <pete@akeo.ie>
|
||||||
*
|
*
|
||||||
* Based on zadig_stdlg.c, part of libwdi: http://libwdi.sf.net
|
* Based on zadig_stdlg.c, part of libwdi: http://libwdi.sf.net
|
||||||
*
|
*
|
||||||
|
@ -63,8 +63,10 @@ static char* szMessageTitle = NULL;
|
||||||
enum WindowsVersion nWindowsVersion = WINDOWS_UNSUPPORTED;
|
enum WindowsVersion nWindowsVersion = WINDOWS_UNSUPPORTED;
|
||||||
static HWND hBrowseEdit;
|
static HWND hBrowseEdit;
|
||||||
static WNDPROC pOrgBrowseWndproc;
|
static WNDPROC pOrgBrowseWndproc;
|
||||||
HFONT hBoldFont = NULL;
|
|
||||||
static const SETTEXTEX friggin_microsoft_unicode_amateurs = {ST_DEFAULT, CP_UTF8};
|
static const SETTEXTEX friggin_microsoft_unicode_amateurs = {ST_DEFAULT, CP_UTF8};
|
||||||
|
static BOOL notification_is_question;
|
||||||
|
static WORD notification_info_id;
|
||||||
|
static Callback_t notification_info_callback;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Detect Windows version
|
* Detect Windows version
|
||||||
|
@ -561,30 +563,6 @@ fallback:
|
||||||
return filepath;
|
return filepath;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CreateBoldFont(HDC dc) {
|
|
||||||
TEXTMETRIC tm;
|
|
||||||
LOGFONT lf;
|
|
||||||
|
|
||||||
if (hBoldFont != NULL)
|
|
||||||
return;
|
|
||||||
GetTextMetrics(dc, &tm);
|
|
||||||
lf.lfHeight = tm.tmHeight+1;
|
|
||||||
lf.lfWidth = tm.tmAveCharWidth+1;
|
|
||||||
lf.lfEscapement = 0;
|
|
||||||
lf.lfOrientation = 0;
|
|
||||||
lf.lfWeight = FW_BOLD;
|
|
||||||
lf.lfItalic = tm.tmItalic;
|
|
||||||
lf.lfUnderline = FALSE;
|
|
||||||
lf.lfStrikeOut = tm.tmStruckOut;
|
|
||||||
lf.lfCharSet = tm.tmCharSet;
|
|
||||||
lf.lfOutPrecision = OUT_DEFAULT_PRECIS;
|
|
||||||
lf.lfClipPrecision = CLIP_DEFAULT_PRECIS;
|
|
||||||
lf.lfQuality = DEFAULT_QUALITY;
|
|
||||||
lf.lfPitchAndFamily = tm.tmPitchAndFamily;
|
|
||||||
GetTextFace(dc, LF_FACESIZE, lf.lfFaceName);
|
|
||||||
hBoldFont = CreateFontIndirect(&lf);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Create the application status bar
|
* Create the application status bar
|
||||||
*/
|
*/
|
||||||
|
@ -696,14 +674,6 @@ INT_PTR CALLBACK AboutCallback(HWND hDlg, UINT message, WPARAM wParam, LPARAM lP
|
||||||
SendMessage(hEdit[i], EM_SETBKGNDCOLOR, 0, (LPARAM)GetSysColor(COLOR_BTNFACE));
|
SendMessage(hEdit[i], EM_SETBKGNDCOLOR, 0, (LPARAM)GetSysColor(COLOR_BTNFACE));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case WM_CTLCOLORSTATIC:
|
|
||||||
if ((HWND)lParam == GetDlgItem(hDlg, IDC_RUFUS_BOLD)) {
|
|
||||||
CreateBoldFont((HDC)wParam);
|
|
||||||
SetBkMode((HDC)wParam, TRANSPARENT);
|
|
||||||
SelectObject((HDC)wParam, hBoldFont);
|
|
||||||
return (INT_PTR)CreateSolidBrush(GetSysColor(COLOR_BTNFACE));
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case WM_NOTIFY:
|
case WM_NOTIFY:
|
||||||
switch (((LPNMHDR)lParam)->code) {
|
switch (((LPNMHDR)lParam)->code) {
|
||||||
case EN_LINK:
|
case EN_LINK:
|
||||||
|
@ -738,53 +708,6 @@ INT_PTR CreateAboutBox(void)
|
||||||
return DialogBoxA(hMainInstance, MAKEINTRESOURCEA(IDD_ABOUTBOX), hMainDialog, AboutCallback);
|
return DialogBoxA(hMainInstance, MAKEINTRESOURCEA(IDD_ABOUTBOX), hMainDialog, AboutCallback);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Update policy and settings dialog callback
|
|
||||||
*/
|
|
||||||
INT_PTR CALLBACK UpdateCallback(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
|
|
||||||
{
|
|
||||||
HWND hPolicy, hCombo;
|
|
||||||
|
|
||||||
switch (message) {
|
|
||||||
case WM_INITDIALOG:
|
|
||||||
CenterDialog(hDlg);
|
|
||||||
hCombo = GetDlgItem(hDlg, IDC_UPDATE_FREQUENCY);
|
|
||||||
IGNORE_RETVAL(ComboBox_SetItemData(hCombo, ComboBox_AddStringU(hCombo, "Never (Disabled)"), -1));
|
|
||||||
IGNORE_RETVAL(ComboBox_SetItemData(hCombo, ComboBox_AddStringU(hCombo, "Daily (Default)"), 86400));
|
|
||||||
IGNORE_RETVAL(ComboBox_SetItemData(hCombo, ComboBox_AddStringU(hCombo, "Weekly"), 604800));
|
|
||||||
IGNORE_RETVAL(ComboBox_SetItemData(hCombo, ComboBox_AddStringU(hCombo, "Monthly"), 2629800));
|
|
||||||
IGNORE_RETVAL(ComboBox_SetCurSel(hCombo, 1));
|
|
||||||
hCombo = GetDlgItem(hDlg, IDC_INCLUDE_BETAS);
|
|
||||||
IGNORE_RETVAL(ComboBox_AddStringU(hCombo, "No"));
|
|
||||||
IGNORE_RETVAL(ComboBox_AddStringU(hCombo, "Yes"));
|
|
||||||
IGNORE_RETVAL(ComboBox_SetCurSel(hCombo, 0));
|
|
||||||
hPolicy = GetDlgItem(hDlg, IDC_UPDATES_POLICY);
|
|
||||||
SendMessage(hPolicy, EM_AUTOURLDETECT, 1, 0);
|
|
||||||
SendMessageA(hPolicy, EM_SETTEXTEX, (WPARAM)&friggin_microsoft_unicode_amateurs, (LPARAM)update_policy);
|
|
||||||
SendMessage(hPolicy, EM_SETSEL, -1, -1);
|
|
||||||
SendMessage(hPolicy, EM_SETEVENTMASK, 0, ENM_LINK);
|
|
||||||
SendMessageA(hPolicy, EM_SETBKGNDCOLOR, 0, (LPARAM)GetSysColor(COLOR_BTNFACE));
|
|
||||||
break;
|
|
||||||
case WM_CTLCOLORSTATIC:
|
|
||||||
if ((HWND)lParam == GetDlgItem(hDlg, IDC_RUFUS_BOLD)) {
|
|
||||||
CreateBoldFont((HDC)wParam);
|
|
||||||
SetBkMode((HDC)wParam, TRANSPARENT);
|
|
||||||
SelectObject((HDC)wParam, hBoldFont);
|
|
||||||
return (INT_PTR)CreateSolidBrush(GetSysColor(COLOR_BTNFACE));
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case WM_COMMAND:
|
|
||||||
switch (LOWORD(wParam)) {
|
|
||||||
case IDOK:
|
|
||||||
case IDCANCEL:
|
|
||||||
EndDialog(hDlg, LOWORD(wParam));
|
|
||||||
return (INT_PTR)TRUE;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return (INT_PTR)FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We use our own MessageBox for notifications to have greater control (center, no close button, etc)
|
* We use our own MessageBox for notifications to have greater control (center, no close button, etc)
|
||||||
*/
|
*/
|
||||||
|
@ -810,6 +733,15 @@ INT_PTR CALLBACK NotificationCallback(HWND hDlg, UINT message, WPARAM wParam, LP
|
||||||
if (szMessageTitle != NULL) {
|
if (szMessageTitle != NULL) {
|
||||||
SetWindowTextA(hDlg, szMessageTitle);
|
SetWindowTextA(hDlg, szMessageTitle);
|
||||||
}
|
}
|
||||||
|
// Enable/disable the buttons and set text
|
||||||
|
if (!notification_is_question) {
|
||||||
|
SetWindowTextA(GetDlgItem(hDlg, IDNO), "Close");
|
||||||
|
} else {
|
||||||
|
ShowWindow(GetDlgItem(hDlg, IDYES), SW_SHOW);
|
||||||
|
}
|
||||||
|
if (notification_info_callback != NULL) {
|
||||||
|
ShowWindow(GetDlgItem(hDlg, IDC_MORE_INFO), SW_SHOW);
|
||||||
|
}
|
||||||
// Set the control text
|
// Set the control text
|
||||||
if (szMessageText != NULL) {
|
if (szMessageText != NULL) {
|
||||||
SetWindowTextA(GetDlgItem(hDlg, IDC_NOTIFICATION_TEXT), szMessageText);
|
SetWindowTextA(GetDlgItem(hDlg, IDC_NOTIFICATION_TEXT), szMessageText);
|
||||||
|
@ -835,8 +767,13 @@ INT_PTR CALLBACK NotificationCallback(HWND hDlg, UINT message, WPARAM wParam, LP
|
||||||
switch (LOWORD(wParam)) {
|
switch (LOWORD(wParam)) {
|
||||||
case IDOK:
|
case IDOK:
|
||||||
case IDCANCEL:
|
case IDCANCEL:
|
||||||
|
case IDYES:
|
||||||
|
case IDNO:
|
||||||
EndDialog(hDlg, LOWORD(wParam));
|
EndDialog(hDlg, LOWORD(wParam));
|
||||||
return (INT_PTR)TRUE;
|
return (INT_PTR)TRUE;
|
||||||
|
case IDC_MORE_INFO:
|
||||||
|
DialogBoxA(hMainInstance, MAKEINTRESOURCEA(notification_info_id), hDlg, notification_info_callback);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -846,8 +783,9 @@ INT_PTR CALLBACK NotificationCallback(HWND hDlg, UINT message, WPARAM wParam, LP
|
||||||
/*
|
/*
|
||||||
* Display a custom notification
|
* Display a custom notification
|
||||||
*/
|
*/
|
||||||
BOOL Notification(int type, char* title, char* format, ...)
|
BOOL Notification(int type, WORD extra_id, Callback_t extra_callback, char* title, char* format, ...)
|
||||||
{
|
{
|
||||||
|
BOOL ret;
|
||||||
va_list args;
|
va_list args;
|
||||||
szMessageText = (char*)malloc(MAX_PATH);
|
szMessageText = (char*)malloc(MAX_PATH);
|
||||||
if (szMessageText == NULL) return FALSE;
|
if (szMessageText == NULL) return FALSE;
|
||||||
|
@ -856,6 +794,9 @@ BOOL Notification(int type, char* title, char* format, ...)
|
||||||
safe_vsnprintf(szMessageText, MAX_PATH-1, format, args);
|
safe_vsnprintf(szMessageText, MAX_PATH-1, format, args);
|
||||||
va_end(args);
|
va_end(args);
|
||||||
szMessageText[MAX_PATH-1] = 0;
|
szMessageText[MAX_PATH-1] = 0;
|
||||||
|
notification_info_callback = extra_callback;
|
||||||
|
notification_info_id = extra_id;
|
||||||
|
notification_is_question = FALSE;
|
||||||
|
|
||||||
switch(type) {
|
switch(type) {
|
||||||
case MSG_WARNING:
|
case MSG_WARNING:
|
||||||
|
@ -864,97 +805,16 @@ BOOL Notification(int type, char* title, char* format, ...)
|
||||||
case MSG_ERROR:
|
case MSG_ERROR:
|
||||||
hMessageIcon = LoadIcon(NULL, IDI_ERROR);
|
hMessageIcon = LoadIcon(NULL, IDI_ERROR);
|
||||||
break;
|
break;
|
||||||
|
case MSG_QUESTION:
|
||||||
|
hMessageIcon = LoadIcon(NULL, IDI_QUESTION);
|
||||||
|
notification_is_question = TRUE;
|
||||||
|
break;
|
||||||
case MSG_INFO:
|
case MSG_INFO:
|
||||||
default:
|
default:
|
||||||
hMessageIcon = LoadIcon(NULL, IDI_INFORMATION);
|
hMessageIcon = LoadIcon(NULL, IDI_INFORMATION);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
DialogBox(hMainInstance, MAKEINTRESOURCE(IDD_NOTIFICATION), hMainDialog, NotificationCallback);
|
ret = (DialogBox(hMainInstance, MAKEINTRESOURCE(IDD_NOTIFICATION), hMainDialog, NotificationCallback) == IDYES);
|
||||||
safe_free(szMessageText);
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Same for custom questions
|
|
||||||
*/
|
|
||||||
INT_PTR CALLBACK QuestionCallback(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
|
|
||||||
{
|
|
||||||
LRESULT loc;
|
|
||||||
int i;
|
|
||||||
// Prevent resizing
|
|
||||||
static LRESULT disabled[9] = { HTLEFT, HTRIGHT, HTTOP, HTBOTTOM, HTSIZE,
|
|
||||||
HTTOPLEFT, HTTOPRIGHT, HTBOTTOMLEFT, HTBOTTOMRIGHT };
|
|
||||||
static HBRUSH white_brush, separator_brush;
|
|
||||||
|
|
||||||
switch (message) {
|
|
||||||
case WM_INITDIALOG:
|
|
||||||
white_brush = CreateSolidBrush(WHITE);
|
|
||||||
separator_brush = CreateSolidBrush(SEPARATOR_GREY);
|
|
||||||
CenterDialog(hDlg);
|
|
||||||
// Change the default icon
|
|
||||||
if (Static_SetIcon(GetDlgItem(hDlg, IDC_NOTIFICATION_ICON), hMessageIcon) == 0) {
|
|
||||||
uprintf("Could not set dialog icon\n");
|
|
||||||
}
|
|
||||||
// Set the dialog title
|
|
||||||
if (szMessageTitle != NULL) {
|
|
||||||
SetWindowTextA(hDlg, szMessageTitle);
|
|
||||||
}
|
|
||||||
// Set the control text
|
|
||||||
if (szMessageText != NULL) {
|
|
||||||
SetWindowTextA(GetDlgItem(hDlg, IDC_NOTIFICATION_TEXT), szMessageText);
|
|
||||||
}
|
|
||||||
return (INT_PTR)TRUE;
|
|
||||||
case WM_CTLCOLORSTATIC:
|
|
||||||
// Change the background colour for static text and icon
|
|
||||||
SetBkMode((HDC)wParam, TRANSPARENT);
|
|
||||||
if ((HWND)lParam == GetDlgItem(hDlg, IDC_NOTIFICATION_LINE)) {
|
|
||||||
return (INT_PTR)separator_brush;
|
|
||||||
}
|
|
||||||
return (INT_PTR)white_brush;
|
|
||||||
case WM_NCHITTEST:
|
|
||||||
// Check coordinates to prevent resize actions
|
|
||||||
loc = DefWindowProc(hDlg, message, wParam, lParam);
|
|
||||||
for(i = 0; i < 9; i++) {
|
|
||||||
if (loc == disabled[i]) {
|
|
||||||
return (INT_PTR)TRUE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return (INT_PTR)FALSE;
|
|
||||||
case WM_COMMAND:
|
|
||||||
switch (LOWORD(wParam)) {
|
|
||||||
case IDYES:
|
|
||||||
case IDNO:
|
|
||||||
EndDialog(hDlg, LOWORD(wParam));
|
|
||||||
return (INT_PTR)TRUE;
|
|
||||||
case IDC_QUESTION_MORE_INFO:
|
|
||||||
DialogBoxA(hMainInstance, MAKEINTRESOURCEA(IDD_UPDATE_POLICY), hDlg, UpdateCallback);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return (INT_PTR)FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Display a custom question
|
|
||||||
* returns TRUE if the user answered yes, FALSE if no
|
|
||||||
* TODO: point to a static dialog for more info
|
|
||||||
*/
|
|
||||||
BOOL Question(char* title, char* format, ...)
|
|
||||||
{
|
|
||||||
va_list args;
|
|
||||||
BOOL ret;
|
|
||||||
szMessageText = (char*)malloc(MAX_PATH);
|
|
||||||
if (szMessageText == NULL) return FALSE;
|
|
||||||
szMessageTitle = title;
|
|
||||||
va_start(args, format);
|
|
||||||
safe_vsnprintf(szMessageText, MAX_PATH-1, format, args);
|
|
||||||
va_end(args);
|
|
||||||
szMessageText[MAX_PATH-1] = 0;
|
|
||||||
|
|
||||||
hMessageIcon = LoadIcon(NULL, IDI_QUESTION);
|
|
||||||
ret = (DialogBox(hMainInstance, MAKEINTRESOURCE(IDD_QUESTION), hMainDialog, QuestionCallback) == IDYES);
|
|
||||||
safe_free(szMessageText);
|
safe_free(szMessageText);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -1236,3 +1096,43 @@ BOOL SetTaskbarProgressValue(ULONGLONG ullCompleted, ULONGLONG ullTotal)
|
||||||
return !FAILED(ptbl->lpVtbl->SetProgressValue(ptbl, hMainDialog, ullCompleted, ullTotal));
|
return !FAILED(ptbl->lpVtbl->SetProgressValue(ptbl, hMainDialog, ullCompleted, ullTotal));
|
||||||
}
|
}
|
||||||
#pragma pop_macro("INTERFACE")
|
#pragma pop_macro("INTERFACE")
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Update policy and settings dialog callback
|
||||||
|
*/
|
||||||
|
INT_PTR CALLBACK UpdateCallback(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
|
||||||
|
{
|
||||||
|
HWND hPolicy, hCombo;
|
||||||
|
|
||||||
|
switch (message) {
|
||||||
|
case WM_INITDIALOG:
|
||||||
|
CenterDialog(hDlg);
|
||||||
|
hCombo = GetDlgItem(hDlg, IDC_UPDATE_FREQUENCY);
|
||||||
|
IGNORE_RETVAL(ComboBox_SetItemData(hCombo, ComboBox_AddStringU(hCombo, "Disabled"), -1));
|
||||||
|
IGNORE_RETVAL(ComboBox_SetItemData(hCombo, ComboBox_AddStringU(hCombo, "Daily (Default)"), 86400));
|
||||||
|
IGNORE_RETVAL(ComboBox_SetItemData(hCombo, ComboBox_AddStringU(hCombo, "Weekly"), 604800));
|
||||||
|
IGNORE_RETVAL(ComboBox_SetItemData(hCombo, ComboBox_AddStringU(hCombo, "Monthly"), 2629800));
|
||||||
|
IGNORE_RETVAL(ComboBox_SetCurSel(hCombo, 1));
|
||||||
|
hCombo = GetDlgItem(hDlg, IDC_INCLUDE_BETAS);
|
||||||
|
IGNORE_RETVAL(ComboBox_AddStringU(hCombo, "No"));
|
||||||
|
IGNORE_RETVAL(ComboBox_AddStringU(hCombo, "Yes"));
|
||||||
|
IGNORE_RETVAL(ComboBox_SetCurSel(hCombo, 0));
|
||||||
|
hPolicy = GetDlgItem(hDlg, IDC_UPDATES_POLICY);
|
||||||
|
SendMessage(hPolicy, EM_AUTOURLDETECT, 1, 0);
|
||||||
|
SendMessageA(hPolicy, EM_SETTEXTEX, (WPARAM)&friggin_microsoft_unicode_amateurs, (LPARAM)update_policy);
|
||||||
|
SendMessage(hPolicy, EM_SETSEL, -1, -1);
|
||||||
|
SendMessage(hPolicy, EM_SETEVENTMASK, 0, ENM_LINK);
|
||||||
|
SendMessageA(hPolicy, EM_SETBKGNDCOLOR, 0, (LPARAM)GetSysColor(COLOR_BTNFACE));
|
||||||
|
break;
|
||||||
|
case WM_COMMAND:
|
||||||
|
switch (LOWORD(wParam)) {
|
||||||
|
case IDOK:
|
||||||
|
case IDCANCEL:
|
||||||
|
EndDialog(hDlg, LOWORD(wParam));
|
||||||
|
return (INT_PTR)TRUE;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return (INT_PTR)FALSE;
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue