Refactored Tooltip text handling

git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@7299 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
anders_k 2021-08-20 14:56:26 +00:00
parent 2c79d33b56
commit 0302344430
5 changed files with 49 additions and 39 deletions

View file

@ -599,7 +599,7 @@ INT_PTR CALLBACK DialogProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam
{
TCHAR buf[MAX_PATH];
lstrcpyn(buf, FSPath::FindLastComponent(((PROMPT_FILEPATH_DATA*)cds->lpData)->Path), COUNTOF(buf));
OPENFILENAME of = { sizeof(of) };
OPENFILENAME of = { SizeOfStruct(of) };
of.hwndOwner = hwndDlg;
of.lpstrFilter = _T("*.exe\0*.exe\0*\0*.*\0");
of.lpstrFile = buf, of.nMaxFile = COUNTOF(buf);
@ -633,6 +633,7 @@ INT_PTR CALLBACK DialogProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam
case TID_CONFIGURECLOSEORABORT:
SendMessage(hCtl = GetDlgItem(hwndDlg, IDCANCEL), WM_SETTEXT, 0, (LPARAM) (g_sdata.thread ? _T("&Abort") : _T("&Close")));
EnableWindow(hCtl, true);
UpdateCloseButtonTooltip();
return KillTimer(hwndDlg, wParam);
}
break;
@ -666,7 +667,7 @@ INT_PTR CALLBACK DialogProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam
case IDM_LOADSCRIPT:
{
if (!g_sdata.thread) {
OPENFILENAME l={sizeof(l),};
OPENFILENAME l = { SizeOfStruct(l) };
TCHAR buf[MAX_PATH];
l.hwndOwner = hwndDlg;
l.lpstrFilter = _T("NSIS Script (*.nsi)\0*.nsi\0All Files (*.*)\0*.*\0");
@ -783,7 +784,7 @@ INT_PTR CALLBACK DialogProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam
return TRUE;
case IDM_SAVE:
{
OPENFILENAME l={sizeof(l),};
OPENFILENAME l = { SizeOfStruct(l) };
TCHAR buf[MAX_STRING];
l.hwndOwner = hwndDlg;
l.lpstrFilter = _T("Log Files (*.log)\0*.log\0Text Files (*.txt)\0*.txt\0All Files (*.*)\0*.*\0");

View file

@ -89,6 +89,8 @@ static inline bool IsWin95() { return SupportsW95() && (GetVersion() & (0x8000FF
#define SAVE_BUTTON_TEXT _T("Save")
#define LOAD_SYMBOL_SET_MESSAGE _T("Please select a name for the Symbol Definitions Set to load.")
#define SAVE_SYMBOL_SET_MESSAGE _T("Please enter or select a name for the Symbol Definitions Set to save.")
#define TESTBTN_TIPTEXT _T("Test the generated installer")
#define CLOSEBTN_TIPTEXT _T("Close MakeNSISW")
#define WM_MAKENSIS_PROCESSCOMPLETE (WM_USER+1001)
#define WM_MAKENSIS_LOADSYMBOLSET (WM_USER+1002)

View file

@ -78,7 +78,7 @@ void CreateToolBar()
tbbs[i].fsStyle = g_TBBtnsDesc[i].Style;
tbbs[i].dwData = 0, tbbs[i].iString = 0;
}
SendMessage(g_toolbar.hwnd, TB_ADDBUTTONS, BUTTONCOUNT, (LPARAM) &tbbs);
SendMessage(g_toolbar.hwnd, TB_ADDBUTTONS, BUTTONCOUNT, (LPARAM) &tbbs); // Note: TB_ADDBUTTONSW is IE4+
LoadToolBarImages();
}
@ -148,35 +148,18 @@ void UpdateToolBarCompressorButton()
lstrcat(szBuffer,_T("]"));
SendMessage(g_toolbar.hwnd, TB_CHANGEBITMAP, (WPARAM) IDM_COMPRESSOR, (LPARAM) MAKELPARAM(iBitmap, 0));
TOOLINFO ti = { sizeof(TOOLINFO), 0 };
ti.hwnd = g_toolbar.hwnd;
ti.uId = (UINT)TBB_COMPRESSOR;
ti.hinst = g_sdata.hInstance;
SendMessage(g_tip.tip, TTM_GETTOOLINFO, 0, (LPARAM) (LPTOOLINFO) &ti);
ti.lpszText = (LPTSTR)szBuffer;
SendMessage(g_tip.tip, TTM_SETTOOLINFO, 0, (LPARAM) (LPTOOLINFO) &ti);
SetTooltipText(g_toolbar.hwnd, (UINT) TBB_COMPRESSOR, szBuffer);
}
void AddToolBarButtonTooltip(UINT idx, int iString)
{
TOOLINFO ti;
TCHAR szBuffer[64];
RECT rect;
memset(&ti, 0, sizeof(TOOLINFO));
ti.cbSize = sizeof(TOOLINFO);
ti.cbSize = SizeOfStruct(ti);
ti.uFlags = 0;
ti.hwnd = g_toolbar.hwnd;
ti.hinst = g_sdata.hInstance;
ti.uId = idx;
LoadString(g_sdata.hInstance, iString, szBuffer, COUNTOF(szBuffer));
ti.lpszText = (LPTSTR) szBuffer;
SendMessage(g_toolbar.hwnd, TB_GETITEMRECT, idx, (LPARAM) &rect);
ti.rect.left =rect.left;
ti.rect.top = rect.top;
ti.rect.right = rect.right;
ti.rect.bottom = rect.bottom;
ti.hinst = g_sdata.hInstance, ti.lpszText = MAKEINTRESOURCE(iString);
SendMessage(g_toolbar.hwnd, TB_GETITEMRECT, idx, (LPARAM) &ti.rect);
SendMessage(g_tip.tip, TTM_ADDTOOL, 0, (LPARAM) &ti);
}

View file

@ -79,6 +79,13 @@ bool WriteUTF16LEBOM(HANDLE hFile)
return WriteFile(hFile, u16lb, sizeof(u16lb));
}
BOOL InitCCExHelper(UINT icc) {
INITCOMMONCONTROLSEX icx = { sizeof(icx), icc };
BOOL suppw95 = SupportsW95();
FARPROC icce = suppw95 ? GetSysProcAddr("COMCTL32", "InitCommonControlsEx") : (FARPROC) InitCommonControlsEx;
return (!suppw95 || icce) && ((BOOL(WINAPI*)(const INITCOMMONCONTROLSEX*))icce)(&icx);
}
int SetArgv(const TCHAR *cmdLine, TCHAR ***argv) {
const TCHAR *p;
TCHAR *arg, *argSpace;
@ -736,21 +743,31 @@ int InitBranding() {
return retval;
}
LRESULT SetTooltipText(HWND hWnd, UINT_PTR Id, LPCTSTR Text) {
TOOLINFO ti;
ti.cbSize = SizeOfStruct(ti);
ti.uFlags = Id > 0x7fff ? TTF_IDISHWND : 0;
ti.hwnd = hWnd, ti.uId = Id;
ti.hinst = g_sdata.hInstance, ti.lpszText = const_cast<LPTSTR>(Text);
return SendMessage(g_tip.tip, TTM_UPDATETIPTEXT, 0, (LPARAM) (LPTOOLINFO) &ti);
}
void UpdateCloseButtonTooltip() {
LPCTSTR txt = g_sdata.thread ? _T("") : CLOSEBTN_TIPTEXT;
SetTooltipText(g_tip.tip_p, (UINT_PTR) GetDlgItem(g_sdata.hwnd, IDCANCEL), txt);
}
void InitTooltips(HWND h) {
if (h == NULL) return;
memset(&g_tip,0,sizeof(NTOOLTIP));
InitCCEx(ICC_BAR_CLASSES);
DWORD s = WS_POPUP | WS_BORDER | TTS_ALWAYSTIP, xs = WS_EX_TOOLWINDOW | WS_EX_TOPMOST;
g_tip.hook = 0;
g_tip.tip_p = h;
INITCOMMONCONTROLSEX icx;
icx.dwSize = sizeof(icx);
icx.dwICC = ICC_BAR_CLASSES;
InitCommonControlsEx(&icx);
DWORD dwStyle = WS_POPUP | WS_BORDER | TTS_ALWAYSTIP;
DWORD dwExStyle = WS_EX_TOOLWINDOW | WS_EX_TOPMOST;
g_tip.tip = CreateWindowEx(dwExStyle,TOOLTIPS_CLASS,NULL,dwStyle,0,0,0,0,h,NULL,HINST_APPLICATION,NULL);
g_tip.tip = CreateWindowEx(xs, TOOLTIPS_CLASS, NULL, s, 0, 0, 0, 0, h, NULL, HINST_APPLICATION, NULL);
if (!g_tip.tip) return;
g_tip.hook = SetWindowsHookEx(WH_GETMESSAGE,TipHookProc,NULL, GetCurrentThreadId());
AddTip(GetDlgItem(h,IDCANCEL),_T("Close MakeNSISW"));
AddTip(GetDlgItem(h,IDC_TEST),_T("Test the generated installer"));
g_tip.hook = SetWindowsHookEx(WH_GETMESSAGE, TipHookProc, NULL, GetCurrentThreadId());
AddTip(GetDlgItem(h, IDCANCEL), CLOSEBTN_TIPTEXT);
AddTip(GetDlgItem(h, IDC_TEST), TESTBTN_TIPTEXT);
AddToolBarTooltips();
}
@ -758,9 +775,9 @@ void DestroyTooltips() {
UnhookWindowsHookEx(g_tip.hook);
}
void AddTip(HWND hWnd,LPCTSTR lpszToolTip) {
void AddTip(HWND hWnd, LPCTSTR lpszToolTip) {
TOOLINFO ti;
ti.cbSize = sizeof(TOOLINFO);
ti.cbSize = SizeOfStruct(ti);
ti.uFlags = TTF_IDISHWND;
ti.hwnd = g_tip.tip_p;
ti.uId = (UINT_PTR) hWnd;

View file

@ -54,6 +54,11 @@ HMODULE LoadSysLibrary(LPCSTR Mod);
FARPROC GetSysProcAddr(LPCSTR Mod, LPCSTR FuncName);
bool WriteUTF16LEBOM(HANDLE hFile);
BOOL InitCCExHelper(UINT icc);
static inline BOOL InitCCEx(UINT icc) { return icc > 0xff ? InitCCExHelper(icc) : true; }
static inline UINT SizeOfStruct(const TOOLINFO&x) { return FIELD_OFFSET(TOOLINFO, lParam); }
static inline UINT SizeOfStruct(const OPENFILENAME&x) { return sizeof(void*) < 8 ? 76 : sizeof(x); }
void FreeSpawn(PROCESS_INFORMATION *pPI, HANDLE hRd, HANDLE hWr);
BOOL InitSpawn(STARTUPINFO &si, HANDLE &hRd, HANDLE &hWr);
@ -89,7 +94,9 @@ void ResetSymbols();
int InitBranding();
void InitTooltips(HWND h);
void DestroyTooltips();
void AddTip(HWND hWnd,LPCTSTR lpszToolTip);
void AddTip(HWND hWnd, LPCTSTR lpszToolTip);
LRESULT SetTooltipText(HWND hWnd, UINT_PTR Id, LPCTSTR Text);
void UpdateCloseButtonTooltip();
void ShowDocs();
void RestoreCompressor();
void SaveCompressor();