aboutsummaryrefslogtreecommitdiff
path: root/Src/installer/winamp/uiEvents.nsh
diff options
context:
space:
mode:
Diffstat (limited to 'Src/installer/winamp/uiEvents.nsh')
-rw-r--r--Src/installer/winamp/uiEvents.nsh400
1 files changed, 400 insertions, 0 deletions
diff --git a/Src/installer/winamp/uiEvents.nsh b/Src/installer/winamp/uiEvents.nsh
new file mode 100644
index 00000000..2ef19e87
--- /dev/null
+++ b/Src/installer/winamp/uiEvents.nsh
@@ -0,0 +1,400 @@
+!ifndef WINAMP_PAGES_INSTALL_HEADER
+!define WINAMP_PAGES_INSTALL_HEADER
+
+!include ".\ui.nsh"
+!include "nx.nsh"
+
+!ifdef EXPRESS_MODE
+!define WINAMP_LICENSE_AGREEMENT ${LICENSE_PATH}
+!define WINAMP_PRIVACY_POLICY ${PRIVACY_POLICY_PATH}
+!endif ; defined(EXPRESS_MODE)
+
+Var waui.button.advanced
+
+!ifdef EXPRESS_MODE
+Var waui.WelcomePage.PrivacyNote
+!endif ; defined(EXPRESS_MODE)
+
+Var waui.WelcomePage.IsLicensePresented
+
+Function UI_OnInit
+ Push $R0
+ StrCpy $R0 0
+ StrCpy $IDX_INSTTYPE_FULL $R0
+ !ifdef FULL
+ InstTypeSetText $R0 $(installFull)
+ IntOp $R0 $R0 + 1
+ !endif ; FULL
+
+ StrCpy $IDX_INSTTYPE_STANDARD $R0
+ !ifdef FULL
+ InstTypeSetText $R0 $(installStandard)
+ IntOp $R0 $R0 + 1
+ !endif ; FULL
+
+ InstTypeSetText $R0 $(installLite)
+ IntOp $R0 $R0 + 1
+ InstTypeSetText $R0 $(installMinimal)
+
+ StrCpy $IDX_INSTTYPE_PREVIOUS $R0
+ StrCpy $waui.WelcomePage.IsLicensePresented "no"
+
+ ${ExpressMode_InitializePage}
+FunctionEnd
+
+Function .onGUIEnd
+FunctionEnd
+
+!ifdef EXPRESS_MODE
+Function onXPClickLink
+ Pop $0 ; don't forget to pop HWND of the stack
+ ExecShell open "http://www.winamp.com/legal/eula/pc"
+FunctionEnd
+!endif
+
+Function UI_OnWelcomePageShow
+!ifdef EXPRESS_MODE
+ ${If} ${AtLeastWinVista}
+ ${NX_GetMappedWindowRect} $mui.WelcomePage.Image $mui.WelcomePage $2 $3 $4 $5
+ ; Adjust Image Control Size
+ IntOp $4 $4 - $2
+ IntOp $5 $R1 - $3
+ ${NX_SetWindowSize} $mui.WelcomePage.Image $4 $5
+
+ ; Clear previous image
+ ${NSD_ClearImage} $mui.WelcomePage.Image
+ ${NSD_FreeImage} $mui.WelcomePage.Image.Bitmap
+ StrCpy $mui.WelcomePage.Image.Bitmap 0
+
+ ; Reload Banner Image
+ ${If} $PLUGINSDIR == ""
+ ${OrIfNot} ${FileExists} "$PLUGINSDIR"
+ InitPluginsDir
+ ${EndIf}
+
+ StrCpy $0 "$PLUGINSDIR\welcomeImage.bmp"
+ ${IfNot} ${FileExists} "$0"
+ ReserveFile "${WELCOMEFINISH_IMAGE_PATH}"
+ File /oname=$0 "${WELCOMEFINISH_IMAGE_PATH}"
+ ${EndIf}
+
+ System::Call 'user32::LoadImageW(i 0, w "$0", i ${IMAGE_BITMAP}, i $4, i $5, i ${LR_LOADFROMFILE}) i.s'
+ Pop $mui.WelcomePage.Image.Bitmap
+
+ SendMessage $mui.WelcomePage.Image ${STM_SETIMAGE} \
+ ${IMAGE_BITMAP} \
+ $mui.WelcomePage.Image.Bitmap
+
+ ; Get Dialog Height
+ ${NX_GetWindowSize} $mui.WelcomePage $2 $R2
+
+ ; Create License and Privacy Note
+ IntOp $0 $R1 + 0
+ IntOp $1 $R2 - $0
+ IntOp $1 $1 - 4
+ StrCpy $2 "$(IDS_PAGE_WELCOME_LEGAL)"
+
+ ; TODO really don't want to have to do this as it's pretty lame as reason is
+ ; on XP, using a SysLink will crash when it's destroyed i.e. page change
+ ${If} ${IsWinXP}
+ IntOp $R2 $R2 - 16
+ ${NSD_CreateLink} 8u $R2 316u 16 "By clicking “Next”, you agree to the Winamp License Agreement."
+ Pop $waui.WelcomePage.PrivacyNote
+ ${NSD_OnClick} $waui.WelcomePage.PrivacyNote onXPClickLink
+ SetCtlColors $waui.WelcomePage.PrivacyNote 0xFF0000 transparent
+ ${Else}
+ nsDialogs::CreateControl "SysLink" \
+ ${WS_CHILD}|${WS_TABSTOP}|${WS_VISIBLE}\
+ |${WS_CLIPSIBLINGS}\
+ |${LWS_TRANSPARENT}|${LWS_NOPREFIX} \
+ ${WS_EX_NOPARENTNOTIFY} \
+ 8u $0 316u $1 $2
+ Pop $waui.WelcomePage.PrivacyNote
+ ${EndIf}
+
+ ${If} $waui.WelcomePage.PrivacyNote != 0
+ ${NSD_OnNotify} $waui.WelcomePage.PrivacyNote UI_OnWelcomePageNotify
+
+ SendMessage $HWNDPARENT ${WM_GETFONT} 0 0 $0
+ SendMessage $waui.WelcomePage.PrivacyNote ${WM_SETFONT} $0 0
+
+ ${IfNot} ${IsWinXP}
+ ; Adjust Link Control Size & Position
+ ${NX_GetMappedWindowRect} $waui.WelcomePage.PrivacyNote $mui.WelcomePage $2 $3 $4 $5
+ IntOp $4 $4 - $2 ; Link Control Max Width
+ IntOp $5 $5 - $3 ; Link Control Max Height
+
+ System::Call '*${stSIZE}($4, $5) .r1'
+ SendMessage $waui.WelcomePage.PrivacyNote ${LM_GETIDEALSIZE} $4 $1 $0
+ ${If} $0 <= $5
+ System::Call "*$1${stSIZE} (.r6, .r7)"
+
+ IntOp $8 $4 - $6
+ IntOp $2 $2 + $8
+
+ IntOp $8 $5 - $0
+ IntOp $3 $3 + $8
+
+ ${NX_SetWindowPosAndSize} $waui.WelcomePage.PrivacyNote $2 $3 $6 $0
+ ${EndIf}
+ System::Free $1
+ ${EndIf}
+ StrCpy $waui.WelcomePage.IsLicensePresented "yes"
+ ${EndIf}
+ ${EndIf}
+!endif ; EXPRESS_MODE
+FunctionEnd
+
+!ifdef EXPRESS_MODE
+Function UI_OnWelcomePageNotify
+ Exch $R0
+ Exch
+ Exch $R1
+ Exch 2
+ Exch $R2
+
+ ${If} $R1 = ${NM_CLICK}
+ ${OrIf} $R1 = ${NM_RETURN}
+ Push $R3
+ Push $R4
+ Push $0
+ System::Call `*$R2(i, i, i, i, i, i, i, &w48 .R3)`
+
+ ${If} $R3 == "winamp_eula"
+ StrCpy $R4 "http://www.winamp.com/legal/eula/pc"
+ ${ElseIf} $R3 == "winamp_privacy_policy"
+ StrCpy $R4 "http://www.winamp.com/legal/privacy"
+ ${Else}
+ StrCpy $R4 ""
+ ${EndIf}
+
+ ${If} $R4 != ""
+ Call ConnectInternet
+ Pop $0
+ ${If} $0 == "online"
+ Call IsInternetAvailable
+ Pop $0
+ ${EndIf}
+ ${Else}
+ StrCpy $0 "offline"
+ ${EndIf}
+
+ ${If} $0 != "online"
+ ${If} $PLUGINSDIR == ""
+ ${OrIfNot} ${FileExists} "$PLUGINSDIR"
+ InitPluginsDir
+ ${EndIf}
+
+ ${If} $R3 == "winamp_eula"
+ StrCpy $R4 "${WINAMP_LICENSE_AGREEMENT}"
+ ${ElseIf} $R3 == "winamp_privacy_policy"
+ StrCpy $R4 "${WINAMP_PRIVACY_POLICY}"
+ ${Else}
+ StrCpy $R4 ""
+ ${EndIf}
+
+ ${If} $R4 != ""
+ ${GetFileName} $R4 $R4
+ StrCpy $R4 "$PLUGINSDIR\$R4"
+ ${IfNot} ${FileExists} "$R4"
+ ${If} $R3 == "winamp_eula"
+ ReserveFile "${WINAMP_LICENSE_AGREEMENT}"
+ File /oname=$R4 "${WINAMP_LICENSE_AGREEMENT}"
+ ${ElseIf} $R3 == "winamp_privacy_policy"
+ ReserveFile "${WINAMP_PRIVACY_POLICY}"
+ File /oname=$R4 "${WINAMP_PRIVACY_POLICY}"
+ ${EndIf}
+ ${EndIf}
+ ExecShell open $R4
+ ${EndIf}
+ ${Else}
+ ExecShell open $R4
+ ${EndIf}
+ Pop $0
+ Pop $R4
+ Pop $R3
+ ${EndIf}
+ Pop $R2
+ Pop $R0
+ Pop $R1
+FunctionEnd
+!endif ;defined(EXPRESS_MODE)
+
+Function UI_OnDirectoryPagePre
+ Push $0
+ ${ExpressMode_IsEnabled} $0
+ ${If} $0 == "yes"
+ Pop $0
+ Call UI_OnDirectoryPageLeave
+ Abort
+ ${EndIf}
+ Pop $0
+FunctionEnd
+
+Function UI_OnDirectoryPageShow
+ FindWindow $1 "#32770" "" $HWNDPARENT
+ GetDlgItem $0 $1 0x3FF
+ ShowWindow $0 ${SW_HIDE}
+
+ GetDlgItem $0 $HWNDPARENT 0x02
+ ${NX_GetMappedWindowRect} $0 $HWNDPARENT $2 $3 $4 $5
+
+ IntOp $4 $4 - $2
+ IntOp $5 $5 - $3
+
+ System::Call `user32::CreateWindowExW(i 0, w "BUTTON", w "Advanced...", i ${WS_TABSTOP}|${WS_CHILD}, i 12, i r3, i r4 , i r5, i $HWNDPARENT, i 0, i 0, i 0) i.s`
+ Pop $waui.button.advanced
+
+ SendMessage $HWNDPARENT ${WM_GETFONT} 0 0 $0
+ SendMessage $waui.button.advanced ${WM_SETFONT} $0 0
+FunctionEnd
+
+Function UI_OnDirectoryPageLeave
+ ${NX_Log} "Directory page leave!!!"
+ ${If} $waui.button.advanced <> 0
+ System::Call "${fnDestroyWindow}($waui.button.advanced)"
+ StrCpy $waui.button.advanced 0
+ ${EndIf}
+ Call SetupWinampDirectories
+FunctionEnd
+
+Function UI_OnLicensePagePre
+ ${If} $waui.WelcomePage.IsLicensePresented == "yes"
+ Call UI_OnLicensePageLeave
+ Abort
+ ${EndIf}
+FunctionEnd
+
+Function UI_OnLicensePageShow
+ ${If} $waui.button.advanced <> 0
+ System::Call "${fnDestroyWindow}($waui.button.advanced)"
+ StrCpy $waui.button.advanced 0
+ ${EndIf}
+FunctionEnd
+
+Function UI_OnLicensePageLeave
+FunctionEnd
+
+Function UI_OnComponentsPagePre
+ Push $0
+ ${ExpressMode_IsEnabled} $0
+ ${If} $0 == "yes"
+ Pop $0
+ Abort
+ ${EndIf}
+ Pop $0
+FunctionEnd
+
+Function UI_OnComponentsPageShow
+ Push $0
+ Push $1
+ Push $2
+ Push $3
+ Push $R1
+
+ ${If} $mui.ComponentsPage.DescriptionText <> 0
+ ${AndIf} $mui.ComponentsPage.DescriptionTitle <> 0
+ ${NX_GetMappedWindowRect} $mui.ComponentsPage.DescriptionTitle \
+ $mui.ComponentsPage \
+ $0 $1 $2 $3
+
+ ${NX_ConvertHorzDLU} $mui.ComponentsPage 5 $R1
+ IntOp $0 $0 + $R1
+
+ ${NX_ConvertHorzDLU} $mui.ComponentsPage 1 $R1
+ IntOp $3 $3 - $R1
+
+ ${NX_ConvertVertDLU} $mui.ComponentsPage 10 $R1
+ IntOp $1 $1 + $R1
+
+ ${If} $R1 > 10
+ IntOp $1 $1 - 1 ; rollback 1px
+ ${EndIf}
+
+ ${NX_ConvertVertDLU} $mui.ComponentsPage 1 $R1
+ IntOp $2 $2 - $R1
+ IntOp $2 $2 - $0
+ IntOp $3 $3 - $1
+
+ ${NX_SetWindowPosAndSize} $mui.ComponentsPage.DescriptionText \
+ $0 $1 \
+ $2 $3
+ ${EndIf}
+
+ Pop $R1
+ Pop $3
+ Pop $2
+ Pop $1
+ Pop $0
+FunctionEnd
+
+Function UI_OnMouseOverSection
+ Push $0
+ Call GetSectionDescription
+ Exch $0
+ EnableWindow $mui.ComponentsPage.DescriptionText 1
+ SendMessage $mui.ComponentsPage.DescriptionText ${WM_SETTEXT} 0 "STR:$0"
+ Pop $0
+FunctionEnd
+
+Function UI_OnFinsihPagePre
+ Push $0
+
+ !ifndef _DEBUG
+
+ ${ExpressMode_IsEnabled} $0
+ ${If} $0 == "yes"
+ Pop $0
+ !ifndef MUI_FINISHPAGE_SHOWREADME_NOTCHECKED
+ Call UI_OnFinishPageReadMe
+ !endif
+ Abort
+ ${EndIf}
+
+ !endif ; defined(_DEBUG)
+ Pop $0
+FunctionEnd
+
+Function UI_OnFinishPageReadMe
+ SetPluginUnload alwaysoff
+ ; Find Window info for the window we're displaying
+ System::Call "*${stRECT} .r1"
+ System::Call 'User32::GetWindowRect(i, i) i ($HWNDPARENT, r1) .r2'
+ ; Get left/top/right/bottom
+ System::Call "*$1${stRECT} (.r2, .r3, .r4, .r5)"
+ System::Free $1
+ WriteINIStr "$WINAMPINI" "SETUP" "left" $2
+ WriteINIStr "$WINAMPINI" "SETUP" "top" $3
+ WriteINIStr "$WINAMPINI" "SETUP" "right" $4
+ WriteINIStr "$WINAMPINI" "SETUP" "bottom" $5
+
+ ;SetPluginUnload manual
+ HideWindow
+
+ Push $1
+ StrCpy $1 1
+ File "/oname=$PLUGINSDIR\ShellDispatch.dll" "${NSISDIR}\Plugins\x86-unicode\ShellDispatch.dll"
+ ${If} ${FileExists} "$PLUGINSDIR\ShellDispatch.dll"
+ ${AndIf} ${FileExists} "$INSTDIR\${WINAMPEXE}"
+ Push $0
+ StrCpy $0 ""
+ ClearErrors
+ GetFullPathName /SHORT $0 "$PLUGINSDIR\ShellDispatch.dll"
+ ${IfNot} ${Errors}
+ ${AndIf} $0 != ""
+ ExecWait 'rundll32.exe $0,RunDll_ShellExecute "open" "$INSTDIR\${WINAMPEXE}" "/NEW /REG=S" "$INSTDIR" 1' $1
+ ${If} ${Errors}
+ StrCpy $1 1
+ ${EndIf}
+ ${EndIf}
+ Pop $0
+ ${EndIf}
+
+ ${If} $1 != 0
+ Exec "$INSTDIR\${WINAMPEXE} /NEW /REG=S"
+ ${EndIf}
+ Pop $1
+
+ Sleep 500
+FunctionEnd
+!endif \ No newline at end of file