Install script fixes. .onSelChange is now called after installation type change too

git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@1866 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
kichik 2002-12-02 15:51:33 +00:00
parent 42b1615bbf
commit 3e0bfbd21f
2 changed files with 192 additions and 143 deletions

View file

@ -152,8 +152,8 @@ SubSection "Extra User Interfaces" SecContribUIs
File "..\Examples\Modern UI\ioA.ini" File "..\Examples\Modern UI\ioA.ini"
File "..\Examples\Modern UI\ioB.ini" File "..\Examples\Modern UI\ioB.ini"
File "..\Examples\Modern UI\ioC.ini" File "..\Examples\Modern UI\ioC.ini"
File "..\Examples\Modern UI\StartMenu.nsi" File "..\Examples\Modern UI\StartMenu.nsi"
File "..\Examples\Modern UI\WelcomeFinish.nsi" File "..\Examples\Modern UI\WelcomeFinish.nsi"
SetOutPath "$INSTDIR\Contrib\Modern UI" SetOutPath "$INSTDIR\Contrib\Modern UI"
File "..\Contrib\Modern UI\System.nsh" File "..\Contrib\Modern UI\System.nsh"
File "..\Contrib\Modern UI\Readme.jpg" File "..\Contrib\Modern UI\Readme.jpg"
@ -162,7 +162,7 @@ SubSection "Extra User Interfaces" SecContribUIs
File "..\Contrib\Modern UI\Screenshot.png" File "..\Contrib\Modern UI\Screenshot.png"
File "..\Contrib\Modern UI\Screenshot2.png" File "..\Contrib\Modern UI\Screenshot2.png"
File "..\Contrib\Modern UI\License.txt" File "..\Contrib\Modern UI\License.txt"
File "..\Contrib\Modern UI\ioSpecial.ini" File "..\Contrib\Modern UI\ioSpecial.ini"
SetOutPath "$INSTDIR\Contrib\Modern UI\Language files" SetOutPath "$INSTDIR\Contrib\Modern UI\Language files"
File "..\Contrib\Modern UI\Language files\*.nsh" File "..\Contrib\Modern UI\Language files\*.nsh"
SetOutPath "$INSTDIR\Contrib\UIs" SetOutPath "$INSTDIR\Contrib\UIs"
@ -171,7 +171,7 @@ SubSection "Extra User Interfaces" SecContribUIs
SetOutPath $INSTDIR\Contrib\Icons SetOutPath $INSTDIR\Contrib\Icons
File "..\Contrib\Icons\modern-install.ico" File "..\Contrib\Icons\modern-install.ico"
File "..\Contrib\Icons\modern-uninstall.ico" File "..\Contrib\Icons\modern-uninstall.ico"
File "..\Contrib\Icons\modern-wizard.bmp" File "..\Contrib\Icons\modern-wizard.bmp"
SectionEnd SectionEnd
Section "Default User Interface" SecContribDefaultUI Section "Default User Interface" SecContribDefaultUI
@ -221,6 +221,7 @@ Section "nsExec" SecContribnsExec
File ..\Plugins\nsExec.dll File ..\Plugins\nsExec.dll
SetOutPath $INSTDIR\Contrib\nsExec SetOutPath $INSTDIR\Contrib\nsExec
File ..\Contrib\nsExec\*.txt File ..\Contrib\nsExec\*.txt
File ..\Contrib\nsExec\*.nsi
SectionEnd SectionEnd
Section "Splash" SecContribSplash Section "Splash" SecContribSplash
@ -338,13 +339,16 @@ Section "NSIS Source Code" SecSrcNSIS
SectionEnd SectionEnd
SubSection "Contrib" SecSrcContrib SubSection "Contrib" SecSrcContrib
Section "ExDLL Source" SecSrcEx # required for other plugins sources
# text changes in .onSelChange
Section "ExDLL Source (required)" SecSrcEx
SectionIn 1 SectionIn 1
SetOutPath $INSTDIR\Contrib\ExDLL SetOutPath $INSTDIR\Contrib\ExDLL
File ..\Contrib\exdll\exdll.c File ..\Contrib\exdll\exdll.c
File ..\Contrib\exdll\exdll.dpr File ..\Contrib\exdll\exdll.dpr
File ..\Contrib\exdll\exdll.dsp File ..\Contrib\exdll\exdll.dsp
File ..\Contrib\exdll\exdll.dsw File ..\Contrib\exdll\exdll.dsw
File ..\Contrib\exdll\exdll.h
SectionEnd SectionEnd
Section "MakeNSISW Source" SecSrcMNW Section "MakeNSISW Source" SecSrcMNW
@ -357,7 +361,12 @@ Section "MakeNSISW Source" SecSrcMNW
File ..\Contrib\Makensisw\*.dsp File ..\Contrib\Makensisw\*.dsp
File ..\Contrib\Makensisw\*.rc File ..\Contrib\Makensisw\*.rc
File ..\Contrib\Makensisw\*.bmp File ..\Contrib\Makensisw\*.bmp
File ..\Contrib\Makensisw\*.ico
File ..\Contrib\Makensisw\*.psp
#File ..\Contrib\Makensisw\Makefile #File ..\Contrib\Makensisw\Makefile
SetOutPath $INSTDIR\Contrib\Makensisw\jnetlib
File ..\Contrib\Makensisw\jnetlib\*.cpp
File ..\Contrib\Makensisw\jnetlib\*.h
SectionEnd SectionEnd
Section "UI Holder Source" SecContribUIHolderS Section "UI Holder Source" SecContribUIHolderS
@ -484,6 +493,7 @@ Section "Zip2Exe Source" SecContribZ2ES
File ..\Contrib\zip2exe\*.rc File ..\Contrib\zip2exe\*.rc
File ..\Contrib\zip2exe\*.dsw File ..\Contrib\zip2exe\*.dsw
File ..\Contrib\zip2exe\*.dsp File ..\Contrib\zip2exe\*.dsp
File ..\Contrib\zip2exe\*.xml
SetOutPath $INSTDIR\Contrib\zip2exe\zlib SetOutPath $INSTDIR\Contrib\zip2exe\zlib
File ..\Contrib\zip2exe\zlib\*.* File ..\Contrib\zip2exe\zlib\*.*
SetDetailsPrint both SetDetailsPrint both
@ -492,37 +502,69 @@ SectionEnd
SubSectionEnd SubSectionEnd
SubSectionEnd SubSectionEnd
!define SF_SELECTED 1
!macro secSelected SEC
SectionGetFlags ${SEC} $R7
IntOp $R7 $R7 & ${SF_SELECTED}
StrCmp $R7 ${SF_SELECTED} 0 +2
IntOp $R0 $R0 + 1
!macroend
Function .onSelChange
StrCpy $R0 0
!insertmacro secSelected ${SecContribSplashTS}
!insertmacro secSelected ${SecContribBannerS}
!insertmacro secSelected ${SecContribBgImageS}
!insertmacro secSelected ${SecContribIOS}
!insertmacro secSelected ${SecContribLangDLLS}
!insertmacro secSelected ${SecContribnsExecS}
!insertmacro secSelected ${SecContribNSISdlS}
!insertmacro secSelected ${SecContribSplashS}
!insertmacro secSelected ${SecContribStartMenuS}
!insertmacro secSelected ${SecContribUserInfoS}
SectionGetFlags ${SecSrcEx} $R7
StrCmp $R0 0 notRequired
IntOp $R7 $R7 | ${SF_SELECTED}
SectionSetFlags ${SecSrcEx} $R7
SectionSetText ${SecSrcEx} "ExDLL Source (required)"
Goto done
notRequired:
SectionSetText ${SecSrcEx} "ExDLL Source"
done:
FunctionEnd
Function .onInit Function .onInit
!insertmacro MUI_WELCOMEFINISHPAGE_INIT !insertmacro MUI_WELCOMEFINISHPAGE_INIT
FunctionEnd FunctionEnd
Function AddContribToStartMenu Function AddContribToStartMenu
Pop $0 ; link Pop $0 ; link
Pop $1 ; file Pop $1 ; file
IfFileExists $INSTDIR\Contrib\$1 0 +2 IfFileExists $INSTDIR\Contrib\$1 0 +2
CreateShortCut $SMPROGRAMS\NSIS\Contrib\$0.lnk $INSTDIR\Contrib\$1 CreateShortCut $SMPROGRAMS\NSIS\Contrib\$0.lnk $INSTDIR\Contrib\$1
FunctionEnd FunctionEnd
Function AddWorkspaceToStartMenu Function AddWorkspaceToStartMenu
Pop $0 Pop $0
IfFileExists $INSTDIR\Contrib\$0\$0.dsw 0 done IfFileExists $INSTDIR\Contrib\$0\$0.dsw 0 done
Push $0\$0.dsw Push $0\$0.dsw
Push "Source\$0 project workspace" Push "Source\$0 project workspace"
Call AddContribToStartMenu Call AddContribToStartMenu
done: done:
FunctionEnd FunctionEnd
Function AddReadmeToStartMenu Function AddReadmeToStartMenu
Pop $0 Pop $0
IfFileExists $INSTDIR\Contrib\$0\$0.txt 0 +3 IfFileExists $INSTDIR\Contrib\$0\$0.txt 0 +3
Push $0\$0.txt Push $0\$0.txt
Goto create Goto create
IfFileExists $INSTDIR\Contrib\$0\Readme.txt 0 done IfFileExists $INSTDIR\Contrib\$0\Readme.txt 0 done
Push $0\Readme.txt Push $0\Readme.txt
create: create:
Push "$0 readme" Push "$0 readme"
Call AddContribToStartMenu Call AddContribToStartMenu
done: done:
FunctionEnd FunctionEnd
Section -post Section -post
@ -535,116 +577,116 @@ Section -post
IfFileExists $INSTDIR\Examples 0 +2 IfFileExists $INSTDIR\Examples 0 +2
CreateShortCut "$SMPROGRAMS\NSIS\NSIS Examples Directory.lnk" "$INSTDIR\Examples" CreateShortCut "$SMPROGRAMS\NSIS\NSIS Examples Directory.lnk" "$INSTDIR\Examples"
IfFileExists "$INSTDIR\Source" 0 +2 IfFileExists "$INSTDIR\Source" 0 +2
CreateShortCut "$SMPROGRAMS\NSIS\MakeNSIS project workspace.lnk" "$INSTDIR\source\makenssi.dsw" CreateShortCut "$SMPROGRAMS\NSIS\MakeNSIS project workspace.lnk" "$INSTDIR\source\makenssi.dsw"
CreateDirectory $SMPROGRAMS\NSIS\Contrib\Source CreateDirectory $SMPROGRAMS\NSIS\Contrib\Source
; MakeNSISW ; MakeNSISW
CreateDirectory $SMPROGRAMS\NSIS\Contrib CreateDirectory $SMPROGRAMS\NSIS\Contrib
CreateShortCut "$SMPROGRAMS\NSIS\Contrib\MakeNSISW readme.lnk" "$INSTDIR\contrib\MakeNsisw\readme.txt" CreateShortCut "$SMPROGRAMS\NSIS\Contrib\MakeNSISW readme.lnk" "$INSTDIR\contrib\MakeNsisw\readme.txt"
Push "MakeNSISW" Push "MakeNSISW"
Call AddWorkspaceToStartMenu Call AddWorkspaceToStartMenu
; ExDLL ; ExDLL
Push "ExDLL" Push "ExDLL"
Call AddWorkspaceToStartMenu Call AddWorkspaceToStartMenu
; InstallOptions ; InstallOptions
Push "InstallOptions\install options.html" Push "InstallOptions\install options.html"
Push "InstallOptions readme" Push "InstallOptions readme"
Call AddContribToStartMenu Call AddContribToStartMenu
Push "InstallOptions\io.dsw" Push "InstallOptions\io.dsw"
Push "Source\InstallOptions project workspace" Push "Source\InstallOptions project workspace"
Call AddContribToStartMenu Call AddContribToStartMenu
; ZIP2EXE ; ZIP2EXE
IfFileExists "$INSTDIR\Bin\zip2exe.exe" 0 +2 IfFileExists "$INSTDIR\Bin\zip2exe.exe" 0 +2
CreateShortCut "$SMPROGRAMS\NSIS\Contrib\ZIP 2 EXE converter.lnk" "$INSTDIR\Bin\zip2exe.exe" CreateShortCut "$SMPROGRAMS\NSIS\Contrib\ZIP 2 EXE converter.lnk" "$INSTDIR\Bin\zip2exe.exe"
Push ZIP2EXE Push ZIP2EXE
Call AddWorkspaceToStartMenu Call AddWorkspaceToStartMenu
; Modern UI ; Modern UI
Push "Modern UI\Readme.html" Push "Modern UI\Readme.html"
Push "Modern UI readme" Push "Modern UI readme"
Call AddContribToStartMenu Call AddContribToStartMenu
; Splash ; Splash
Push Splash Push Splash
Call AddReadmeToStartMenu Call AddReadmeToStartMenu
Push Splash Push Splash
Call AddWorkspaceToStartMenu Call AddWorkspaceToStartMenu
; Advanced splash ; Advanced splash
Push AdvSplash Push AdvSplash
Call AddReadmeToStartMenu Call AddReadmeToStartMenu
Push AdvSplash Push AdvSplash
Call AddWorkspaceToStartMenu Call AddWorkspaceToStartMenu
; NSISdl ; NSISdl
Push NSISdl Push NSISdl
Call AddReadmeToStartMenu Call AddReadmeToStartMenu
Push NSISdl Push NSISdl
Call AddWorkspaceToStartMenu Call AddWorkspaceToStartMenu
; UserInfo ; UserInfo
Push UserInfo Push UserInfo
Call AddWorkspaceToStartMenu Call AddWorkspaceToStartMenu
; nsExec ; nsExec
Push nsExec Push nsExec
Call AddReadmeToStartMenu Call AddReadmeToStartMenu
Push nsExec Push nsExec
Call AddWorkspaceToStartMenu Call AddWorkspaceToStartMenu
; LangDLL ; LangDLL
Push LangDLL Push LangDLL
Call AddWorkspaceToStartMenu Call AddWorkspaceToStartMenu
; StartMenu ; StartMenu
Push StartMenu Push StartMenu
Call AddReadmeToStartMenu Call AddReadmeToStartMenu
Push StartMenu Push StartMenu
Call AddWorkspaceToStartMenu Call AddWorkspaceToStartMenu
; BgImage ; BgImage
Push BgImage Push BgImage
Call AddReadmeToStartMenu Call AddReadmeToStartMenu
Push BgImage Push BgImage
Call AddWorkspaceToStartMenu Call AddWorkspaceToStartMenu
; Banner ; Banner
Push Banner Push Banner
Call AddReadmeToStartMenu Call AddReadmeToStartMenu
Push Banner Push Banner
Call AddWorkspaceToStartMenu Call AddWorkspaceToStartMenu
; System ; System
Push System Push System
Call AddReadmeToStartMenu Call AddReadmeToStartMenu
Push System\Source\System.sln Push System\Source\System.sln
Push "Source\System project workspace" Push "Source\System project workspace"
Call AddContribToStartMenu Call AddContribToStartMenu
; done ; done
; will only be removed if empty ; will only be removed if empty
SetDetailsPrint none SetDetailsPrint none
RMDir $INSTDIR\Contrib\Source RMDir $INSTDIR\Contrib\Source
SetDetailsPrint lastused SetDetailsPrint lastused
; open sesame ; open sesame
ExecShell open '$SMPROGRAMS\NSIS' ExecShell open '$SMPROGRAMS\NSIS'
Sleep 500 Sleep 500
BringToFront BringToFront

View file

@ -1116,54 +1116,13 @@ static BOOL CALLBACK SelProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPar
g_inst_section[hItem.lParam].flags|=SF_SELECTED; g_inst_section[hItem.lParam].flags|=SF_SELECTED;
CheckTreeItem(hwndTree1,&hItem,1); CheckTreeItem(hwndTree1,&hItem,1);
} }
#if defined(NSIS_SUPPORT_CODECALLBACKS) && defined(NSIS_CONFIG_COMPONENTPAGE) lParam = 0;
{
ExecuteCodeSegment(g_inst_header->code_onSelChange,NULL);
}
#endif//NSIS_SUPPORT_CODECALLBACKS && NSIS_CONFIG_COMPONENTPAGE
{
int r,x;
// check to see which install type we are
for (r = 0; r < m_num_insttypes; r ++)
{
HTREEITEM *ht=hTreeItems;
section *t=g_inst_section;
x=num_sections;
while (x--)
{
if (t->name_ptr && !(t->flags&(SF_SUBSEC|SF_SUBSECEND)))
{
TV_ITEM hItem;
hItem.hItem=*ht;
if (g_inst_header->no_custom_instmode_flag==1)
{
CheckTreeItem(hwndTree1,&hItem,(t->install_types>>m_whichcfg)&1);
}
else if (!(t->flags&SF_RO))
{
hItem.mask=TVIF_STATE;
TreeView_GetItem(hwndTree1,&hItem);
if (!(t->install_types&(1<<r)) != !((hItem.state>>12)>1 )) break;
}
}
t++;
ht++;
}
if (x < 0) break;
}
if (!g_inst_header->no_custom_instmode_flag)
{
SendMessage(hwndCombo1,CB_SETCURSEL,r,0);
m_whichcfg=r;
}
} // end of typecheckshit
uMsg = WM_IN_UPDATEMSG; uMsg = WM_IN_UPDATEMSG;
} // not ro } // not ro
} // was valid click } // was valid click
} // was click or hack } // was click or hack
#if defined(NSIS_SUPPORT_CODECALLBACKS) && defined(NSIS_CONFIG_ENHANCEDUI_SUPPORT) #if defined(NSIS_SUPPORT_CODECALLBACKS) && defined(NSIS_CONFIG_ENHANCEDUI_SUPPORT)
if (lpnmh->code == TVN_SELCHANGED) { if (lpnmh && lpnmh->code == TVN_SELCHANGED) {
SendMessage(hwndTree1, WM_USER+0x19, 0, ((LPNMTREEVIEW)lpnmh)->itemNew.lParam); SendMessage(hwndTree1, WM_USER+0x19, 0, ((LPNMTREEVIEW)lpnmh)->itemNew.lParam);
} }
#endif//NSIS_SUPPORT_CODECALLBACKS && NSIS_CONFIG_ENHANCEDUI_SUPPORT #endif//NSIS_SUPPORT_CODECALLBACKS && NSIS_CONFIG_ENHANCEDUI_SUPPORT
@ -1211,7 +1170,9 @@ static BOOL CALLBACK SelProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPar
ht++; ht++;
} }
SendMessage(hwndTree1,WM_VSCROLL,SB_TOP,0); SendMessage(hwndTree1,WM_VSCROLL,SB_TOP,0);
lParam = 0;
} }
else lParam = 1;
uMsg = WM_IN_UPDATEMSG; uMsg = WM_IN_UPDATEMSG;
} }
} }
@ -1225,6 +1186,52 @@ static BOOL CALLBACK SelProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPar
} }
if (uMsg == WM_IN_UPDATEMSG) if (uMsg == WM_IN_UPDATEMSG)
{ {
if (!lParam)
{
#if defined(NSIS_SUPPORT_CODECALLBACKS) && defined(NSIS_CONFIG_COMPONENTPAGE)
{
ExecuteCodeSegment(g_inst_header->code_onSelChange,NULL);
}
#endif//NSIS_SUPPORT_CODECALLBACKS && NSIS_CONFIG_COMPONENTPAGE
{
int r,x;
// check to see which install type we are
for (r = 0; r < m_num_insttypes; r ++)
{
HTREEITEM *ht=hTreeItems;
section *t=g_inst_section;
x=num_sections;
while (x--)
{
if (t->name_ptr && !(t->flags&(SF_SUBSEC|SF_SUBSECEND)))
{
TV_ITEM hItem;
hItem.hItem=*ht;
if (g_inst_header->no_custom_instmode_flag==1)
{
CheckTreeItem(hwndTree1,&hItem,(t->install_types>>m_whichcfg)&1);
}
else if (!(t->flags&SF_RO))
{
hItem.mask=TVIF_STATE;
TreeView_GetItem(hwndTree1,&hItem);
if (!(t->install_types&(1<<r)) != !((hItem.state>>12)>1 )) break;
}
}
t++;
ht++;
}
if (x < 0) break;
}
if (!g_inst_header->no_custom_instmode_flag)
{
SendMessage(hwndCombo1,CB_SETCURSEL,r,0);
m_whichcfg=r;
}
} // end of typecheckshit
}
if (g_inst_header->no_custom_instmode_flag==2) if (g_inst_header->no_custom_instmode_flag==2)
{ {
int c=(m_whichcfg == m_num_insttypes && m_num_insttypes)<<3;// SW_SHOWNA=8, SW_HIDE=0 int c=(m_whichcfg == m_num_insttypes && m_num_insttypes)<<3;// SW_SHOWNA=8, SW_HIDE=0