From 89ddb8a2455887ff9ec29e4c01ea8e64b1d715db Mon Sep 17 00:00:00 2001 From: kichik Date: Mon, 11 Nov 2002 17:17:33 +0000 Subject: [PATCH] Added /checknoshortcuts git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@1669 212acab6-be3b-0410-9dea-997c60f758d6 --- Contrib/StartMenu/Example.nsi | 18 ++++-- Contrib/StartMenu/Readme.txt | 6 +- Contrib/StartMenu/StartMenu.c | 97 +++++++++++++++++---------------- Contrib/StartMenu/StartMenu.rc | 4 +- Contrib/StartMenu/resource.h | 3 +- Plugins/StartMenu.dll | Bin 5632 -> 6144 bytes 6 files changed, 71 insertions(+), 57 deletions(-) diff --git a/Contrib/StartMenu/Example.nsi b/Contrib/StartMenu/Example.nsi index 64fc8edf..8eb19305 100644 --- a/Contrib/StartMenu/Example.nsi +++ b/Contrib/StartMenu/Example.nsi @@ -19,7 +19,7 @@ FunctionEnd Page custom StartMenuGroupSelect ": Start Menu Folder" Function StartMenuGroupSelect - StartMenu::Select /autoadd /lastused $R0 "StartMenu.dll test" + StartMenu::Select /checknoshortcuts "Don't create a start menu folder" /autoadd /lastused $R0 "StartMenu.dll test" Pop $R1 StrCpy $R2 $R1 5 @@ -33,10 +33,16 @@ FunctionEnd Page instfiles Section - CreateDirectory $SMPROGRAMS\$R0 - CreateShortCut $SMPROGRAMS\$R0\MakeNSIS.lnk $INSTDIR\makensis.exe + # this part is only necessary if you used /checknoshortcuts + StrCpy $R1 $R0 1 + StrCmp $R1 ">" skip - SetShellVarContext All - CreateDirectory $SMPROGRAMS\$R0 - CreateShortCut "$SMPROGRAMS\$R0\All users MakeNSIS.lnk" $INSTDIR\makensis.exe + CreateDirectory $SMPROGRAMS\$R0 + CreateShortCut $SMPROGRAMS\$R0\MakeNSIS.lnk $INSTDIR\makensis.exe + + SetShellVarContext All + CreateDirectory $SMPROGRAMS\$R0 + CreateShortCut "$SMPROGRAMS\$R0\All users MakeNSIS.lnk" $INSTDIR\makensis.exe + + skip: SectionEnd \ No newline at end of file diff --git a/Contrib/StartMenu/Readme.txt b/Contrib/StartMenu/Readme.txt index e288a529..dd1843ed 100644 --- a/Contrib/StartMenu/Readme.txt +++ b/Contrib/StartMenu/Readme.txt @@ -9,7 +9,11 @@ which is the program group default name, and some more optional parameters: "Select the Start Menu folder in which..." /lastused [folder] - sets the edit box to a specific value folder. Use this to make this plug-in remember the last - folder selected by the user + folder selected by the user + /checknoshortcuts text - Shows a check box with the text "text". If + the user checks this box, the return value + will have ^ as its first character and you + should not create the program group. The function pushes the folder selection back to the stack. It does not push the full path but only the selected sub-folder. It's up to you to decide if to put diff --git a/Contrib/StartMenu/StartMenu.c b/Contrib/StartMenu/StartMenu.c index 5e283839..b7242667 100644 --- a/Contrib/StartMenu/StartMenu.c +++ b/Contrib/StartMenu/StartMenu.c @@ -13,11 +13,13 @@ HWND hwIcon; HWND hwText; HWND hwLocation; HWND hwDirList; +HWND hwCheckBox; char buf[MAX_PATH]; char text[1024]; char progname[1024]; char lastused[1024]; +char checkbox[1024]; int autoadd = 0; int g_done = 0; @@ -25,17 +27,10 @@ int noicon = 0; void *lpWndProcOld; -typedef struct { - char *pszName; - int nValue; -} TableEntry; - BOOL CALLBACK dlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); LRESULT CALLBACK ParentWndProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); void AddFolderFromReg(char *name, HKEY rootKey); void PopulateListWithDir(char *dir); -int LookupToken(TableEntry*, char*); -int LookupTokens(TableEntry*, char*); void __declspec(dllexport) Select(HWND hwndParent, int string_size, char *variables, stack_t **stacktop) { @@ -74,6 +69,10 @@ void __declspec(dllexport) Select(HWND hwndParent, int string_size, char *variab { popstring(lastused); } + else if (!lstrcmpi(buf+1, "checknoshortcuts")) + { + popstring(checkbox); + } if (popstring(buf)) *buf = 0; } @@ -143,7 +142,7 @@ BOOL CALLBACK dlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { case WM_INITDIALOG: { - RECT dialog_r, temp_r, icon_r; + RECT dialog_r, temp_r; HFONT hFont = (HFONT)SendMessage(hwParent, WM_GETFONT, 0, 0); @@ -166,12 +165,14 @@ BOOL CALLBACK dlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) hwText = GetDlgItem(hwndDlg, IDC_TEXT); hwLocation = GetDlgItem(hwndDlg, IDC_LOCATION); hwDirList = GetDlgItem(hwndDlg, IDC_DIRLIST); + hwCheckBox = GetDlgItem(hwndDlg, IDC_CHECK); SendMessage(hwndDlg, WM_SETFONT, (WPARAM) hFont, TRUE); SendMessage(hwIcon, WM_SETFONT, (WPARAM) hFont, TRUE); SendMessage(hwText, WM_SETFONT, (WPARAM) hFont, TRUE); SendMessage(hwLocation, WM_SETFONT, (WPARAM) hFont, TRUE); SendMessage(hwDirList, WM_SETFONT, (WPARAM) hFont, TRUE); + SendMessage(hwCheckBox, WM_SETFONT, (WPARAM) hFont, TRUE); if (!noicon) { @@ -195,16 +196,16 @@ BOOL CALLBACK dlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) if (!*text) lstrcpy(text, "Select the Start Menu folder in which you would like to create the program's shortcuts:"); - GetWindowRect(hwIcon, &icon_r); - icon_r.right += 5; - icon_r.bottom += 5; - ScreenToClient(hwndDlg, ((LPPOINT) &icon_r) + 1); + GetWindowRect(hwIcon, &temp_r); + temp_r.right += 5; + temp_r.bottom += 5; + ScreenToClient(hwndDlg, ((LPPOINT) &temp_r) + 1); ProgressiveSetWindowPos( hwText, - noicon ? 0 : icon_r.right, - dialog_r.right - dialog_r.left - (noicon ? 0 : icon_r.right), - icon_r.bottom + 2 + noicon ? 0 : temp_r.right, + dialog_r.right - dialog_r.left - (noicon ? 0 : temp_r.right), + temp_r.bottom + 2 ); SendMessage(hwText, WM_SETTEXT, 0, (LPARAM) text); @@ -218,15 +219,39 @@ BOOL CALLBACK dlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) temp_r.bottom - temp_r.top ); + if (*lastused == '>') + { + SendMessage(hwCheckBox, BM_SETCHECK, BST_CHECKED, 0); + lstrcpy(buf, lastused); + lstrcpy(lastused, buf + 1); + } + SendMessage(hwLocation, WM_SETTEXT, 0, (LPARAM) (*lastused ? lastused : progname)); + GetWindowRect(hwCheckBox, &temp_r); + ScreenToClient(hwndDlg, ((LPPOINT) &temp_r)); + ScreenToClient(hwndDlg, ((LPPOINT) &temp_r) + 1); + ProgressiveSetWindowPos( hwDirList, 0, dialog_r.right - dialog_r.left, - dialog_r.bottom - dialog_r.top - y_offset + dialog_r.bottom - dialog_r.top - y_offset - (*checkbox ? temp_r.bottom - temp_r.top + 5 : 0) ); + ProgressiveSetWindowPos( + hwCheckBox, + 0, + dialog_r.right - dialog_r.left, + temp_r.bottom - temp_r.top + ); + + if (*checkbox) + { + ShowWindow(hwCheckBox, SW_SHOWNA); + SendMessage(hwCheckBox, WM_SETTEXT, 0, (LPARAM) checkbox); + } + AddFolderFromReg("Programs", HKEY_LOCAL_MACHINE); AddFolderFromReg("Programs", HKEY_CURRENT_USER); @@ -252,7 +277,13 @@ BOOL CALLBACK dlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) pushstring("cancel"); else { - SendMessage(hwLocation, WM_GETTEXT, MAX_PATH, (LPARAM) buf); + if (SendMessage(hwCheckBox, BM_GETCHECK, 0, 0) == BST_CHECKED) + { + buf[0] = '>'; + buf[1] = 0; + } + else *buf = 0; + SendMessage(hwLocation, WM_GETTEXT, MAX_PATH, (LPARAM) buf + lstrlen(buf)); pushstring(buf); } break; @@ -323,34 +354,4 @@ void PopulateListWithDir(char *dir) } } } while (FindNextFile(hSearch, &FileData)); -} - -int LookupToken(TableEntry* psTable_, char* pszToken_) -{ - int i; - for (i = 0; psTable_[i].pszName; i++) - if (!lstrcmpi(pszToken_, psTable_[i].pszName)) - return psTable_[i].nValue; - return 0; -} - -int LookupTokens(TableEntry* psTable_, char* pszTokens_) -{ - int n = 0; - char *pszStart = pszTokens_; - char *pszEnd = pszTokens_; - for (;;) { - if (*pszEnd == '\0') { - n |= LookupToken(psTable_, pszStart); - break; - } - if (*pszEnd == '|') { - *pszEnd = '\0'; - n |= LookupToken(psTable_, pszStart); - *pszEnd = '|'; - pszStart = pszEnd + 1; - } - pszEnd++; - } - return n; -} +} \ No newline at end of file diff --git a/Contrib/StartMenu/StartMenu.rc b/Contrib/StartMenu/StartMenu.rc index 502cad35..38d8a650 100644 --- a/Contrib/StartMenu/StartMenu.rc +++ b/Contrib/StartMenu/StartMenu.rc @@ -35,7 +35,9 @@ BEGIN WS_CLIPSIBLINGS LTEXT "",IDC_TEXT,17,65,55,11,WS_CLIPSIBLINGS LISTBOX IDC_DIRLIST,76,42,48,40,LBS_SORT | LBS_NOINTEGRALHEIGHT | - WS_CLIPSIBLINGS | WS_VSCROLL | WS_TABSTOP | LBS_NOTIFY + WS_CLIPSIBLINGS | WS_VSCROLL | WS_TABSTOP + CONTROL "",IDC_CHECK,"Button",BS_AUTOCHECKBOX | NOT WS_VISIBLE | + WS_TABSTOP,21,44,16,8 END diff --git a/Contrib/StartMenu/resource.h b/Contrib/StartMenu/resource.h index d64b9fcf..b59e92e6 100644 --- a/Contrib/StartMenu/resource.h +++ b/Contrib/StartMenu/resource.h @@ -7,6 +7,7 @@ #define IDC_LOCATION 1002 #define IDC_TEXT 1003 #define IDC_DIRLIST 1004 +#define IDC_CHECK 1005 // Next default values for new objects // @@ -14,7 +15,7 @@ #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 102 #define _APS_NEXT_COMMAND_VALUE 40001 -#define _APS_NEXT_CONTROL_VALUE 1005 +#define _APS_NEXT_CONTROL_VALUE 1006 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif diff --git a/Plugins/StartMenu.dll b/Plugins/StartMenu.dll index d82c2e8e2b665089af5d4d51770805aea2868bf0..93ce65c60d81a25df03940c606fa6acf4777d41e 100644 GIT binary patch literal 6144 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 w`#t+TPkEmAyy^Lq=OfPr&voU+<{9 literal 5632 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