From 2c31e3a8e022f20d72beab4592146b8a0c1d59cd Mon Sep 17 00:00:00 2001 From: rainwater Date: Thu, 19 Sep 2002 15:29:16 +0000 Subject: [PATCH] Makensisw now uses nsis version as branding. Added tooltips, updated icon. git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@1042 212acab6-be3b-0410-9dea-997c60f758d6 --- Contrib/Makensisw/Readme.txt | 7 +- Contrib/Makensisw/makensisw.cpp | 6 ++ Contrib/Makensisw/makensisw.dsp | 8 ++- Contrib/Makensisw/makensisw.h | 7 +- Contrib/Makensisw/resource.rc | 6 +- Contrib/Makensisw/utils.cpp | 115 ++++++++++++++++++++++++++++++-- Contrib/Makensisw/utils.h | 4 ++ 7 files changed, 139 insertions(+), 14 deletions(-) diff --git a/Contrib/Makensisw/Readme.txt b/Contrib/Makensisw/Readme.txt index d4eb3a9a..1d0bb78c 100644 --- a/Contrib/Makensisw/Readme.txt +++ b/Contrib/Makensisw/Readme.txt @@ -142,13 +142,16 @@ Version History - Text always scrolls to bottom (Kickik) - Updated link to new docs - Makensisw now takes the same parameters as makensis - - About Box is closeable + - About Box is closeable by clicking X - Fixed some random crashes - Drag and Drop Support into the Makensisw window - - Updated icon to Trace's modern NSIS icon + - Updated icon to more sexy one - Added Load Script option on File menu - Added Search Dialog (Ctrl+F) (Kickik) - Added Select All (Ctrl+A), Copy (Ctrl+C), Exit (Alt+X) keys + - Branding text now reflects NSIS version + - Bunch of other stuff not worth mentioning + - Added some simple tool tips Copyright Information diff --git a/Contrib/Makensisw/makensisw.cpp b/Contrib/Makensisw/makensisw.cpp index 496aef2f..108fed7c 100644 --- a/Contrib/Makensisw/makensisw.cpp +++ b/Contrib/Makensisw/makensisw.cpp @@ -47,6 +47,10 @@ int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, char *cmdParam, int cmd if (*g_script++=='"') while (*g_script++!='"'); else while (*g_script++!=' '); while (*g_script==' ') g_script++; + if (!InitBranding()) { + MessageBox(0,"Unable to find makensis.exe.","Error",MB_ICONEXCLAMATION|MB_OK); + return 1; + } ResetObjects(); HWND hDialog = CreateDialog(g_hInstance,MAKEINTRESOURCE(DLG_MAIN),0,DialogProc); if (!hDialog) { @@ -83,6 +87,7 @@ BOOL CALLBACK DialogProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { HICON hIcon = LoadIcon(g_hInstance,MAKEINTRESOURCE(IDI_ICON)); SetClassLong(hwndDlg,GCL_HICON,(long)hIcon); DragAcceptFiles(g_hwnd,FALSE); + InitTooltips(g_hwnd); HFONT hFont = CreateFont(14,0,0,0,FW_NORMAL,0,0,0,DEFAULT_CHARSET,OUT_CHARACTER_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,FIXED_PITCH|FF_DONTCARE,"Courier New"); SendDlgItemMessage(hwndDlg,IDC_LOGWIN,WM_SETFONT,(WPARAM)hFont,0); SendDlgItemMessage(hwndDlg,IDC_LOGWIN,EM_SETBKGNDCOLOR,0,GetSysColor(COLOR_BTNFACE)); @@ -93,6 +98,7 @@ BOOL CALLBACK DialogProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { case WM_DESTROY: { SaveWindowPos(g_hwnd); + DestroyTooltips(); PostQuitMessage(0); return TRUE; } diff --git a/Contrib/Makensisw/makensisw.dsp b/Contrib/Makensisw/makensisw.dsp index 9e89fb6d..4cf52a69 100644 --- a/Contrib/Makensisw/makensisw.dsp +++ b/Contrib/Makensisw/makensisw.dsp @@ -53,7 +53,7 @@ BSC32=bscmake.exe # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /entry:"WinMain" /subsystem:windows /machine:I386 /nodefaultlib /out:"../../makensisw.exe" /opt:nowin98 +# ADD LINK32 comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /entry:"WinMain" /subsystem:windows /machine:I386 /nodefaultlib /out:"../../makensisw.exe" /opt:nowin98 # SUBTRACT LINK32 /pdb:none !ELSEIF "$(CFG)" == "makensisw - Win32 Debug" @@ -80,7 +80,7 @@ BSC32=bscmake.exe # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept +# ADD LINK32 comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept !ENDIF @@ -129,6 +129,10 @@ SOURCE=.\noclib.h # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" # Begin Source File +SOURCE="..\Icons\adni18-installer-C-no48xp.ico" +# End Source File +# Begin Source File + SOURCE=..\..\Source\default1.bin # End Source File # Begin Source File diff --git a/Contrib/Makensisw/makensisw.h b/Contrib/Makensisw/makensisw.h index ca0fa773..baacd91e 100644 --- a/Contrib/Makensisw/makensisw.h +++ b/Contrib/Makensisw/makensisw.h @@ -30,7 +30,7 @@ // Defines #define NSIS_URL "http://sourceforge.net/projects/nsis/" -#define USAGE "Usage:\r\n\r\n - File | Load Script...\r\n - Drag .nsi file into this window\r\n - Right click .nsi and choose \"Compile NSI\"" +#define USAGE "Usage:\r\n\r\n - File | Load Script...\r\n - Drag the .nsi file into this window\r\n - Right click the .nsi file and choose \"Compile NSI\"" #define COPYRIGHT "Copyright (c) 2002 Robert Rainwater" #define CONTRIBUTOR "Portions Copyright (c) 2002 Justin Frankel, Fritz Elfert, and Amir Szekely" #define DOCPATH "http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/*checkout*/nsis/NSIS/docs/index.html?rev=HEAD" @@ -75,5 +75,8 @@ void EnableItems(HWND hwnd); void RestoreWindowPos(HWND hwnd); void SaveWindowPos(HWND hwnd); void ResetObjects(); - +int InitBranding(); +void InitTooltips(HWND h); +void DestroyTooltips(); +void AddTip(HWND hWnd,LPSTR lpszToolTip); #endif \ No newline at end of file diff --git a/Contrib/Makensisw/resource.rc b/Contrib/Makensisw/resource.rc index d7a09f75..4b7aa742 100644 --- a/Contrib/Makensisw/resource.rc +++ b/Contrib/Makensisw/resource.rc @@ -54,7 +54,7 @@ END // Icon with lowest ID value placed first to ensure application icon // remains consistent on all systems. -IDI_ICON ICON DISCARDABLE "..\\..\\contrib\\icons\\new_nsis.ico" +IDI_ICON ICON DISCARDABLE "..\\..\\contrib\\icons\\adni18-installer-C-no48xp.ico" ///////////////////////////////////////////////////////////////////////////// // @@ -128,8 +128,8 @@ BEGIN WS_VSCROLL,7,4,345,186 CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,7,202,346,1 LTEXT "",IDC_VERSION,7,212,200,12,WS_DISABLED - DEFPUSHBUTTON "Clo&se",IDC_CLOSE,303,209,49,14 - PUSHBUTTON "&Test",IDC_TEST,247,209,50,14,WS_DISABLED + DEFPUSHBUTTON "Clo&se",IDC_CLOSE,303,208,49,15 + PUSHBUTTON "&Test",IDC_TEST,247,208,50,15,WS_DISABLED END DLG_ABOUT DIALOG DISCARDABLE 0, 0, 235, 86 diff --git a/Contrib/Makensisw/utils.cpp b/Contrib/Makensisw/utils.cpp index 03350da9..494564ab 100644 --- a/Contrib/Makensisw/utils.cpp +++ b/Contrib/Makensisw/utils.cpp @@ -24,6 +24,8 @@ #include "makensisw.h" #include "noclib.h" +char *g_branding; + void SetTitle(HWND hwnd,char *substr) { char title[64]; if (substr==NULL) wsprintf(title,"MakeNSISW"); @@ -32,7 +34,7 @@ void SetTitle(HWND hwnd,char *substr) { } void SetBranding(HWND hwnd) { - SetDlgItemText(hwnd, IDC_VERSION, NSISW_VERSION); + SetDlgItemText(hwnd, IDC_VERSION, g_branding); } void CopyToClipboard(HWND hwnd) { @@ -164,10 +166,10 @@ void CompileNSISScript() { return; } if (!g_appended) { - if (s) GlobalFree(s); - s = (char *)GlobalAlloc(GPTR, lstrlen(g_script)+lstrlen(EXENAME)+2); + if (s) GlobalFree(s); + s = (char *)GlobalAlloc(GPTR, lstrlen(g_script)+lstrlen(EXENAME)+2); wsprintf(s,"%s %s",EXENAME,g_script); - g_script = s; + g_script = s; g_appended = TRUE; } // Disable buttons during compile @@ -209,4 +211,107 @@ void ResetObjects() { g_warnings = FALSE; g_retcode = -1; g_hThread = NULL; -} \ No newline at end of file +} + +int InitBranding() { + char *s; + s = (char *)GlobalAlloc(GPTR,lstrlen(EXENAME)+10); + wsprintf(s,"%s /version",EXENAME); + { + STARTUPINFO si={sizeof(si),}; + SECURITY_ATTRIBUTES sa={sizeof(sa),}; + SECURITY_DESCRIPTOR sd={0,}; + PROCESS_INFORMATION pi={0,}; + HANDLE newstdout=0,read_stdout=0; + + OSVERSIONINFO osv={sizeof(osv)}; + GetVersionEx(&osv); + if (osv.dwPlatformId == VER_PLATFORM_WIN32_NT) { + InitializeSecurityDescriptor(&sd,SECURITY_DESCRIPTOR_REVISION); + SetSecurityDescriptorDacl(&sd,true,NULL,false); + sa.lpSecurityDescriptor = &sd; + } + else sa.lpSecurityDescriptor = NULL; + sa.bInheritHandle = true; + if (!CreatePipe(&read_stdout,&newstdout,&sa,0)) { + return 0; + } + GetStartupInfo(&si); + si.dwFlags = STARTF_USESTDHANDLES|STARTF_USESHOWWINDOW; + si.wShowWindow = SW_HIDE; + si.hStdOutput = newstdout; + si.hStdError = newstdout; + if (!CreateProcess(NULL,s,NULL,NULL,TRUE,CREATE_NEW_CONSOLE,NULL,NULL,&si,&pi)) { + CloseHandle(newstdout); + CloseHandle(read_stdout); + return 0; + } + char szBuf[1024]; + DWORD dwRead = 1; + DWORD dwExit = !STILL_ACTIVE; + if (WaitForSingleObject(pi.hProcess,10000)!=WAIT_OBJECT_0) { + return 0; + } + ReadFile(read_stdout, szBuf, sizeof(szBuf)-1, &dwRead, NULL); + szBuf[dwRead] = 0; + if (lstrlen(szBuf)==0) return 0; + g_branding = (char *)GlobalAlloc(GPTR,lstrlen(szBuf)+6); + wsprintf(g_branding,"NSIS %s",szBuf); + GlobalFree(s); + } + return 1; +} + +HWND g_tip; +HWND g_tip_p; +HHOOK g_hook; +LRESULT CALLBACK TipHookProc(int nCode, WPARAM wParam, LPARAM lParam); + +void InitTooltips(HWND h) { + if (h == NULL) return; + g_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 = CreateWindowEx(dwExStyle,TOOLTIPS_CLASS, + NULL,dwStyle,0,0,0,0, + h, NULL, + GetModuleHandle(NULL),NULL); + if (!g_tip) { + return; + } + g_hook = SetWindowsHookEx(WH_GETMESSAGE,TipHookProc,NULL, GetCurrentThreadId()); + AddTip(GetDlgItem(h,IDC_CLOSE),TEXT("Close MakeNSISW")); + AddTip(GetDlgItem(h,IDC_TEST),TEXT("Test the installer generated by MakeNSISW")); +} + +void DestroyTooltips() { + UnhookWindowsHookEx(g_hook); +} + +void AddTip(HWND hWnd,LPSTR lpszToolTip) { + TOOLINFO ti; + ti.cbSize = sizeof(TOOLINFO); + ti.uFlags = TTF_IDISHWND; + ti.hwnd = g_tip_p; + ti.uId = (UINT) hWnd; + ti.lpszText = lpszToolTip; + SendMessage(g_tip, TTM_ADDTOOL, 0, (LPARAM) (LPTOOLINFO) &ti); +} + +LRESULT CALLBACK TipHookProc(int nCode, WPARAM wParam, LPARAM lParam) { + if (nCode < 0) return CallNextHookEx(g_hook, nCode, wParam, lParam); + switch (((MSG*)lParam)->message) { + case WM_MOUSEMOVE: + if (IsChild(g_tip_p,((MSG*)lParam)->hwnd)) + SendMessage(g_tip, TTM_RELAYEVENT, 0,lParam); + break; + default: + break; + } + return CallNextHookEx(g_hook, nCode, wParam, lParam); +} + diff --git a/Contrib/Makensisw/utils.h b/Contrib/Makensisw/utils.h index c29dfb13..f756399d 100644 --- a/Contrib/Makensisw/utils.h +++ b/Contrib/Makensisw/utils.h @@ -43,5 +43,9 @@ void EnableItems(HWND hwnd); void RestoreWindowPos(HWND hwnd); void SaveWindowPos(HWND hwnd); void ResetObjects(); +int InitBranding(); +void InitTooltips(HWND h); +void DestroyTooltips(); +void AddTip(HWND hWnd,LPSTR lpszToolTip); #endif \ No newline at end of file