Added /checknoshortcuts
git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@1669 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
parent
e6ed3bdf82
commit
89ddb8a245
6 changed files with 71 additions and 57 deletions
|
@ -19,7 +19,7 @@ FunctionEnd
|
||||||
|
|
||||||
Page custom StartMenuGroupSelect ": Start Menu Folder"
|
Page custom StartMenuGroupSelect ": Start Menu Folder"
|
||||||
Function StartMenuGroupSelect
|
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
|
Pop $R1
|
||||||
|
|
||||||
StrCpy $R2 $R1 5
|
StrCpy $R2 $R1 5
|
||||||
|
@ -33,10 +33,16 @@ FunctionEnd
|
||||||
|
|
||||||
Page instfiles
|
Page instfiles
|
||||||
Section
|
Section
|
||||||
CreateDirectory $SMPROGRAMS\$R0
|
# this part is only necessary if you used /checknoshortcuts
|
||||||
CreateShortCut $SMPROGRAMS\$R0\MakeNSIS.lnk $INSTDIR\makensis.exe
|
StrCpy $R1 $R0 1
|
||||||
|
StrCmp $R1 ">" skip
|
||||||
|
|
||||||
SetShellVarContext All
|
CreateDirectory $SMPROGRAMS\$R0
|
||||||
CreateDirectory $SMPROGRAMS\$R0
|
CreateShortCut $SMPROGRAMS\$R0\MakeNSIS.lnk $INSTDIR\makensis.exe
|
||||||
CreateShortCut "$SMPROGRAMS\$R0\All users MakeNSIS.lnk" $INSTDIR\makensis.exe
|
|
||||||
|
SetShellVarContext All
|
||||||
|
CreateDirectory $SMPROGRAMS\$R0
|
||||||
|
CreateShortCut "$SMPROGRAMS\$R0\All users MakeNSIS.lnk" $INSTDIR\makensis.exe
|
||||||
|
|
||||||
|
skip:
|
||||||
SectionEnd
|
SectionEnd
|
|
@ -9,7 +9,11 @@ which is the program group default name, and some more optional parameters:
|
||||||
"Select the Start Menu folder in which..."
|
"Select the Start Menu folder in which..."
|
||||||
/lastused [folder] - sets the edit box to a specific value folder.
|
/lastused [folder] - sets the edit box to a specific value folder.
|
||||||
Use this to make this plug-in remember the last
|
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
|
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
|
full path but only the selected sub-folder. It's up to you to decide if to put
|
||||||
|
|
|
@ -13,11 +13,13 @@ HWND hwIcon;
|
||||||
HWND hwText;
|
HWND hwText;
|
||||||
HWND hwLocation;
|
HWND hwLocation;
|
||||||
HWND hwDirList;
|
HWND hwDirList;
|
||||||
|
HWND hwCheckBox;
|
||||||
|
|
||||||
char buf[MAX_PATH];
|
char buf[MAX_PATH];
|
||||||
char text[1024];
|
char text[1024];
|
||||||
char progname[1024];
|
char progname[1024];
|
||||||
char lastused[1024];
|
char lastused[1024];
|
||||||
|
char checkbox[1024];
|
||||||
|
|
||||||
int autoadd = 0;
|
int autoadd = 0;
|
||||||
int g_done = 0;
|
int g_done = 0;
|
||||||
|
@ -25,17 +27,10 @@ int noicon = 0;
|
||||||
|
|
||||||
void *lpWndProcOld;
|
void *lpWndProcOld;
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
char *pszName;
|
|
||||||
int nValue;
|
|
||||||
} TableEntry;
|
|
||||||
|
|
||||||
BOOL CALLBACK dlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
BOOL CALLBACK dlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||||
LRESULT CALLBACK ParentWndProc(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 AddFolderFromReg(char *name, HKEY rootKey);
|
||||||
void PopulateListWithDir(char *dir);
|
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)
|
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);
|
popstring(lastused);
|
||||||
}
|
}
|
||||||
|
else if (!lstrcmpi(buf+1, "checknoshortcuts"))
|
||||||
|
{
|
||||||
|
popstring(checkbox);
|
||||||
|
}
|
||||||
if (popstring(buf))
|
if (popstring(buf))
|
||||||
*buf = 0;
|
*buf = 0;
|
||||||
}
|
}
|
||||||
|
@ -143,7 +142,7 @@ BOOL CALLBACK dlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
case WM_INITDIALOG:
|
case WM_INITDIALOG:
|
||||||
{
|
{
|
||||||
RECT dialog_r, temp_r, icon_r;
|
RECT dialog_r, temp_r;
|
||||||
|
|
||||||
HFONT hFont = (HFONT)SendMessage(hwParent, WM_GETFONT, 0, 0);
|
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);
|
hwText = GetDlgItem(hwndDlg, IDC_TEXT);
|
||||||
hwLocation = GetDlgItem(hwndDlg, IDC_LOCATION);
|
hwLocation = GetDlgItem(hwndDlg, IDC_LOCATION);
|
||||||
hwDirList = GetDlgItem(hwndDlg, IDC_DIRLIST);
|
hwDirList = GetDlgItem(hwndDlg, IDC_DIRLIST);
|
||||||
|
hwCheckBox = GetDlgItem(hwndDlg, IDC_CHECK);
|
||||||
|
|
||||||
SendMessage(hwndDlg, WM_SETFONT, (WPARAM) hFont, TRUE);
|
SendMessage(hwndDlg, WM_SETFONT, (WPARAM) hFont, TRUE);
|
||||||
SendMessage(hwIcon, WM_SETFONT, (WPARAM) hFont, TRUE);
|
SendMessage(hwIcon, WM_SETFONT, (WPARAM) hFont, TRUE);
|
||||||
SendMessage(hwText, WM_SETFONT, (WPARAM) hFont, TRUE);
|
SendMessage(hwText, WM_SETFONT, (WPARAM) hFont, TRUE);
|
||||||
SendMessage(hwLocation, WM_SETFONT, (WPARAM) hFont, TRUE);
|
SendMessage(hwLocation, WM_SETFONT, (WPARAM) hFont, TRUE);
|
||||||
SendMessage(hwDirList, WM_SETFONT, (WPARAM) hFont, TRUE);
|
SendMessage(hwDirList, WM_SETFONT, (WPARAM) hFont, TRUE);
|
||||||
|
SendMessage(hwCheckBox, WM_SETFONT, (WPARAM) hFont, TRUE);
|
||||||
|
|
||||||
if (!noicon)
|
if (!noicon)
|
||||||
{
|
{
|
||||||
|
@ -195,16 +196,16 @@ BOOL CALLBACK dlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||||
if (!*text)
|
if (!*text)
|
||||||
lstrcpy(text, "Select the Start Menu folder in which you would like to create the program's shortcuts:");
|
lstrcpy(text, "Select the Start Menu folder in which you would like to create the program's shortcuts:");
|
||||||
|
|
||||||
GetWindowRect(hwIcon, &icon_r);
|
GetWindowRect(hwIcon, &temp_r);
|
||||||
icon_r.right += 5;
|
temp_r.right += 5;
|
||||||
icon_r.bottom += 5;
|
temp_r.bottom += 5;
|
||||||
ScreenToClient(hwndDlg, ((LPPOINT) &icon_r) + 1);
|
ScreenToClient(hwndDlg, ((LPPOINT) &temp_r) + 1);
|
||||||
|
|
||||||
ProgressiveSetWindowPos(
|
ProgressiveSetWindowPos(
|
||||||
hwText,
|
hwText,
|
||||||
noicon ? 0 : icon_r.right,
|
noicon ? 0 : temp_r.right,
|
||||||
dialog_r.right - dialog_r.left - (noicon ? 0 : icon_r.right),
|
dialog_r.right - dialog_r.left - (noicon ? 0 : temp_r.right),
|
||||||
icon_r.bottom + 2
|
temp_r.bottom + 2
|
||||||
);
|
);
|
||||||
|
|
||||||
SendMessage(hwText, WM_SETTEXT, 0, (LPARAM) text);
|
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
|
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));
|
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(
|
ProgressiveSetWindowPos(
|
||||||
hwDirList,
|
hwDirList,
|
||||||
0,
|
0,
|
||||||
dialog_r.right - dialog_r.left,
|
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_LOCAL_MACHINE);
|
||||||
AddFolderFromReg("Programs", HKEY_CURRENT_USER);
|
AddFolderFromReg("Programs", HKEY_CURRENT_USER);
|
||||||
|
|
||||||
|
@ -252,7 +277,13 @@ BOOL CALLBACK dlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||||
pushstring("cancel");
|
pushstring("cancel");
|
||||||
else
|
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);
|
pushstring(buf);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -323,34 +354,4 @@ void PopulateListWithDir(char *dir)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} while (FindNextFile(hSearch, &FileData));
|
} 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;
|
|
||||||
}
|
|
|
@ -35,7 +35,9 @@ BEGIN
|
||||||
WS_CLIPSIBLINGS
|
WS_CLIPSIBLINGS
|
||||||
LTEXT "",IDC_TEXT,17,65,55,11,WS_CLIPSIBLINGS
|
LTEXT "",IDC_TEXT,17,65,55,11,WS_CLIPSIBLINGS
|
||||||
LISTBOX IDC_DIRLIST,76,42,48,40,LBS_SORT | LBS_NOINTEGRALHEIGHT |
|
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
|
END
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
#define IDC_LOCATION 1002
|
#define IDC_LOCATION 1002
|
||||||
#define IDC_TEXT 1003
|
#define IDC_TEXT 1003
|
||||||
#define IDC_DIRLIST 1004
|
#define IDC_DIRLIST 1004
|
||||||
|
#define IDC_CHECK 1005
|
||||||
|
|
||||||
// Next default values for new objects
|
// Next default values for new objects
|
||||||
//
|
//
|
||||||
|
@ -14,7 +15,7 @@
|
||||||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||||
#define _APS_NEXT_RESOURCE_VALUE 102
|
#define _APS_NEXT_RESOURCE_VALUE 102
|
||||||
#define _APS_NEXT_COMMAND_VALUE 40001
|
#define _APS_NEXT_COMMAND_VALUE 40001
|
||||||
#define _APS_NEXT_CONTROL_VALUE 1005
|
#define _APS_NEXT_CONTROL_VALUE 1006
|
||||||
#define _APS_NEXT_SYMED_VALUE 101
|
#define _APS_NEXT_SYMED_VALUE 101
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
Binary file not shown.
Loading…
Add table
Add a link
Reference in a new issue