lyx_mirror/development/Win32/packaging/installer/download.nsh

459 lines
10 KiB
Plaintext
Raw Normal View History

; File download.nsh
; This file is part of LyX, the document processor.
; http://www.lyx.org/
; Licence details can be found in the file COPYING or copy at
; http://www.lyx.org/about/license.php3
; Author Angus Leeming
; Full author contact details are available in file CREDITS or copy at
; http://www.lyx.org/about/credits.php
!ifndef _DOWNLOAD_NSH_
!define _DOWNLOAD_NSH_
!include "lyxfunc.nsh"
!include "LogicLib.nsh"
!insertmacro LYX_DEFFUNC `ReadDownloadValues`
!insertmacro LYX_DEFFUNC `EnableBrowseControls`
!insertmacro LYX_DEFFUNC `SearchRegistry`
!insertmacro LYX_DEFFUNC `DownloadEnter`
!insertmacro LYX_DEFFUNC `DownloadLeave`
!macro LYX_FUNCTION_ReadDownloadValues
!insertmacro LYX_FUNC `ReadDownloadValues`
; The stack contains:
; TOP
; FolderPath
; SelectFolder
; Download
; DoNothing
; After this point:
; $0 = FolderPath
; $1 = SelectFolder
; $2 = Download
; $3 = DoNothing
; $4 = temp
Exch $0
Exch
Exch $1
Exch 2
Exch $2
Exch 3
Exch $3
; Populate the registers with the values in the widgets.
; DoNothing.
; If the widget is disabled then set DoNothing ($3) to 0.
; Otherwise, set it equal to the "state" variable of the field.
!insertmacro MUI_INSTALLOPTIONS_READ $3 "io_download.ini" "Field 2" "Flags"
IntOp $3 $3 & DISABLED
${if} $3 == 1
StrCpy $3 0
${else}
!insertmacro MUI_INSTALLOPTIONS_READ $3 "io_download.ini" "Field 2" "State"
${endif}
; Download
!insertmacro MUI_INSTALLOPTIONS_READ $2 "io_download.ini" "Field 3" "State"
; SelectFolder
!insertmacro MUI_INSTALLOPTIONS_READ $1 "io_download.ini" "Field 4" "State"
; FolderPath
!insertmacro MUI_INSTALLOPTIONS_READ $0 "io_download.ini" "Field 5" "State"
; Return output to user.
; The stack available to the user contains:
; TOP
; Modified FolderPath
; Modified SelectFolder
; Modified Download
; Modified DoNothing
; $0 = FolderPath
; $1 = SelectFolder
; $2 = Download
; $3 = DoNothing
Exch $3
Exch 3
Exch $2
Exch 2
Exch $1
Exch
Exch $0
FunctionEnd
!macroend
!macro LYX_FUNCTION_EnableBrowseControls
!insertmacro LYX_FUNC `EnableBrowseControls`
; After this point:
; $0 = SelectFolder
; $1 = temp
; $2 = temp
; $3 = temp
Push $0
Push $1
Push $2
Push $3
; Populate the registers with the values in the widgets.
; We're interested only in $0 (SelectFolder) here.
${ReadDownloadValues} $1 $2 $0 $3
; Get the dialog HWND, storing it in $1
FindWindow $1 "#32770" "" $HWNDPARENT
; To get the HWND of the controls use:
; GetDlgItem (output var)
; (hwnd of the custom dialog) (1200 + Field number - 1)
; Get the Browse textbox ID
GetDlgItem $2 $1 1204
; Enable it if the SelectFolder ($0) checkbox is selected.
EnableWindow $2 $0
; get Browse button ID
GetDlgItem $2 $1 1205
; Enable it if the Folder checkbox is selected.
EnableWindow $2 $0
; Remove temporaries from stack.
Pop $3
Pop $2
Pop $1
Pop $0
FunctionEnd
!macroend
!macro SearchRegistry_Private ExePath RegistryKey RegistrySubKey RemoveFromPath AddtoPath
${if} ${ExePath} == ""
ReadRegStr ${ExePath} HKLM "${RegistryKey}" "${RegistrySubKey}"
${if} ${ExePath} != ""
${StrRep} "${ExePath}" "${ExePath}" "${RemoveFromPath}" ""
StrCpy ${ExePath} "${ExePath}${AddtoPath}"
${endif}
${endif}
!macroend
!macro LYX_FUNCTION_SearchRegistry
!insertmacro LYX_FUNC `SearchRegistry`
; The stack contains:
; TOP
; ExePath
; RegistryKey
; RegistrySubKey
; RemoveFromPath
; AddtoPath
; After this point:
; $0 = ExePath
; $1 = RegistryKey
; $2 = RegistrySubKey
; $3 = RemoveFromPath
; $4 = AddtoPath
Exch $0
Exch
Exch $1
Exch 2
Exch $2
Exch 3
Exch $3
Exch 4
Exch $4
; Use a macro simply to make life understandable.
!insertmacro SearchRegistry_Private "$0" "$1" "$2" "$3" "$4"
; Return output to user.
Exch $4
Exch 4
Exch $3
Exch 3
Exch $2
Exch 2
Exch $1
Exch
Exch $0
FunctionEnd
!macroend
!macro DownloadEnter_Private ExePath Required DownloadLabel HomeLabel PageHeader PageDescription
!insertmacro MUI_INSTALLOPTIONS_WRITE "io_download.ini" "Field 1" "Text" ""
!insertmacro MUI_INSTALLOPTIONS_WRITE "io_download.ini" "Field 2" "Text" "$(DownloadPageField2)"
Push $0
${if} ${Required} == 1
StrCpy $0 "NOTIFY"
${else}
StrCpy $0 "DISABLED"
${endif}
!insertmacro MUI_INSTALLOPTIONS_WRITE "io_download.ini" "Field 2" "Flags" $0
Pop $0
!insertmacro MUI_INSTALLOPTIONS_WRITE "io_download.ini" "Field 2" "State" "0"
!insertmacro MUI_INSTALLOPTIONS_WRITE "io_download.ini" "Field 3" "Text" "${DownloadLabel}"
!insertmacro MUI_INSTALLOPTIONS_WRITE "io_download.ini" "Field 4" "Text" "${HomeLabel}"
${if} ${ExePath} == ""
!insertmacro MUI_INSTALLOPTIONS_WRITE "io_download.ini" "Field 3" "State" "1"
!insertmacro MUI_INSTALLOPTIONS_WRITE "io_download.ini" "Field 4" "State" "0"
!insertmacro MUI_INSTALLOPTIONS_WRITE "io_download.ini" "Field 5" "Flags" PATH_MUST_EXIST|DISABLED
!insertmacro MUI_INSTALLOPTIONS_WRITE "io_download.ini" "Field 5" "State" ""
${else}
!insertmacro MUI_INSTALLOPTIONS_WRITE "io_download.ini" "Field 3" "State" "0"
!insertmacro MUI_INSTALLOPTIONS_WRITE "io_download.ini" "Field 4" "State" "1"
!insertmacro MUI_INSTALLOPTIONS_WRITE "io_download.ini" "Field 5" "Flags" PATH_MUST_EXIST
!insertmacro MUI_INSTALLOPTIONS_WRITE "io_download.ini" "Field 5" "State" "${ExePath}"
${endif}
ClearErrors
!insertmacro MUI_HEADER_TEXT "${PageHeader}" "${PageDescription}"
!insertmacro MUI_INSTALLOPTIONS_DISPLAY "io_download.ini"
!macroend
!macro LYX_FUNCTION_DownloadEnter
!insertmacro LYX_FUNC `DownloadEnter`
; The stack contains:
; TOP
; ExePath
; Required
; DownloadLabel
; HomeLabel
; PageHeader
; PageDescription
; After this point:
; $0 = ExePath
; $1 = Required
; $2 = DownloadLabel
; $3 = HomeLabel
; $4 = PageHeader
; $5 = PageDescription
Exch $0
Exch
Exch $1
Exch 2
Exch $2
Exch 3
Exch $3
Exch 4
Exch $4
Exch 5
Exch $5
; Use a macro simply to make life understandable.
!insertmacro DownloadEnter_Private "$0" "$1" "$2" "$3" "$4" "$5"
; Return output to user.
Exch $5
Exch 5
Exch $4
Exch 4
Exch $3
Exch 3
Exch $2
Exch 2
Exch $1
Exch
Exch $0
FunctionEnd
!macroend
!macro DownloadLeave_Private DoNotRequire Download FolderPath URL EnterFolder ExeName InvalidFolder
!insertmacro MUI_INSTALLOPTIONS_READ $0 "io_download.ini" "Settings" "State"
StrCmp $0 0 go_on ; Next button?
${EnableBrowseControls}
Abort ; Return to the page
go_on:
${ReadDownloadValues} ${DoNotRequire} ${Download} $0 ${FolderPath}
${if} ${DoNotRequire} == 1
;
${elseif} ${Download} == 1
StrCpy ${FolderPath} ""
ExecShell open "${URL}"
${else}
${StrTrim} ${FolderPath} ${FolderPath}
${StrRTrimChar} ${FolderPath} ${FolderPath} '\'
${if} ${FolderPath} == ""
MessageBox MB_OK "${EnterFolder}"
Abort
${endif}
${if} ${FileExists} "${FolderPath}"
${StrRep} ${FolderPath} ${FolderPath} "${ExeName}" ""
${StrRTrimChar} ${FolderPath} ${FolderPath} '\'
${if} ${FileExists} "${FolderPath}\${ExeName}"
${else}
MessageBox MB_OK "${InvalidFolder}"
Abort
${endif}
${else}
MessageBox MB_OK "${InvalidFolder}"
Abort
${endif}
${endif}
!macroend
!macro LYX_FUNCTION_DownloadLeave
!insertmacro LYX_FUNC `DownloadLeave`
; The stack contains:
; TOP
; DoNotRequire
; Download
; FolderPath
; URL
; EnterFolder
; ExeName
; InvalidFolder
; After this point:
; $0 = DoNotRequire
; $1 = Download
; $2 = FolderPath
; $3 = URL
; $4 = EnterFolder
; $5 = ExeName
; $6 = InvalidFolder
Exch $0
Exch
Exch $1
Exch 2
Exch $2
Exch 3
Exch $3
Exch 4
Exch $4
Exch 5
Exch $5
Exch 6
Exch $6
; Use a macro simply to make life understandable.
!insertmacro DownloadLeave_Private "$0" "$1" "$2" "$3" "$4" "$5" "$6"
; Return output to user.
Exch $6
Exch 6
Exch $5
Exch 5
Exch $4
Exch 4
Exch $3
Exch 3
Exch $2
Exch 2
Exch $1
Exch
Exch $0
FunctionEnd
!macroend
!macro LYX_FUNCTION_ReadDownloadValues_Call DoNothing Download SelectFolder FolderPath
Push `${DoNothing}`
Push `${Download}`
Push `${SelectFolder}`
Push `${FolderPath}`
Call ReadDownloadValues
Pop `${FolderPath}`
Pop `${SelectFolder}`
Pop `${Download}`
Pop `${DoNothing}`
!macroend
!macro LYX_FUNCTION_EnableBrowseControls_Call
Call EnableBrowseControls
!macroend
!macro LYX_FUNCTION_SearchRegistry_Call ExePath RegistryKey RegistrySubKey RemoveFromPath AddtoPath
Push `${AddtoPath}`
Push `${RemoveFromPath}`
Push `${RegistrySubKey}`
Push `${RegistryKey}`
Push `${ExePath}`
Call SearchRegistry
; Empty the stack of all the stuff we've just added.
; We're not interested in most of it, so just fill $0 repeatedly.
Pop `${ExePath}`
Pop `$0`
Pop `$0`
Pop `$0`
Pop `$0`
!macroend
!macro LYX_FUNCTION_DownloadEnter_Call ExePath Required DownloadLabel HomeLabel PageHeader PageDescription
Push `${PageDescription}`
Push `${PageHeader}`
Push `${HomeLabel}`
Push `${DownloadLabel}`
Push `${Required}`
Push `${ExePath}`
Call DownloadEnter
; Empty the stack of all the stuff we've just added.
; We're not interested in keeping it, so just fill $0 repeatedly.
Pop `$0`
Pop `$0`
Pop `$0`
Pop `$0`
Pop `$0`
Pop `$0`
!macroend
!macro LYX_FUNCTION_DownloadLeave_Call DoNotRequire Download FolderPath URL EnterFolder ExeName InvalidFolder
Push `${InvalidFolder}`
Push `${ExeName}`
Push `${EnterFolder}`
Push `${URL}`
Push `${FolderPath}`
Push `${Download}`
Push `${DoNotRequire}`
Call DownloadLeave
; Empty the stack of all the stuff we've just added.
Pop `${DoNotRequire}`
Pop `${Download}`
Pop `${FolderPath}`
Pop `$0`
Pop `$0`
Pop `$0`
Pop `$0`
!macroend
!endif ; _DOWNLOAD_NSH_