lyx_mirror/development/Win32/packaging/installer/gui/external.nsh
Joost Verburg d1a3055578 lots of installer improvements:
* use nsDialogs instead of InstallOptions for custom wizard pages, faster & easier to customize
* upgrade to Modern UI 2
* use MultiUser.nsh to support multiple installation modes (all users / current user) in a much more simple way
* use LangFile.nsh for the language files, again less scripting required
* simplified installer structure
* more meaningful variable names
* more comments
* minor fixes

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@24062 a592a061-630c-0410-9148-cb99ea01b6c8
2008-03-30 21:37:53 +00:00

217 lines
6.1 KiB
Plaintext

/*
external.nsh
Installation of external components: MiKTeX, ImageMagick, Ghostscript
Either an existing installation can be used or a the components can be
downloaded or installed (depending on the type of installer)
*/
Var ExternalPage
Var ExternalPage.Info
Var ExternalPage.Setup
Var ExternalPage.Existing
Var ExternalPage.Folder
Var ExternalPage.Folder_Text
Var ExternalPage.FolderBrowse
Var ExternalPage.FolderInfo
Var ExternalPage.NoInstall
Var ExternalPage.RadioButton.Click
Var ExternalPage.FolderBrowse.Click
Var LaTeXState
Var LaTeXSetup.State
Var LaTeXExisting.State
Var LaTeXNoInstall.State
Var ImageMagickState
Var ImageMagickSetup.State
Var ImageMagickExisting.State
Var ImageMagickNoInstall.State
Var GhostscriptState
Var GhostscriptSetup.State
Var GhostscriptExisting.State
Var GhostscriptNoInstall.State
Var ControlState
Var ComponentSize
!macro EXTERNAL_SHOWDIALOG COMPONENT
# Build the dialog
!insertmacro MUI_HEADER_TEXT $(TEXT_EXTERNAL_${COMPONENT}_TITLE) $(TEXT_EXTERNAL_${COMPONENT}_SUBTITLE)
GetFunctionAddress $ExternalPage.RadioButton.Click ExternalRadioButtonClick
GetFunctionAddress $ExternalPage.FolderBrowse.Click ExternalFolderBrowseClick
nsDialogs::Create /NOUNLOAD 1018
Pop $ExternalPage
${NSD_CreateLabel} 0u 0u 300u 20u $(TEXT_EXTERNAL_${COMPONENT}_INFO_${SETUPTYPE_NAME})
Pop $ExternalPage.Info
${NSD_CreateRadioButton} 0u 40u 300u 10u $(TEXT_EXTERNAL_${COMPONENT}_${SETUPTYPE_NAME})
Pop $ExternalPage.Setup
nsDialogs::OnClick /NOUNLOAD $ExternalPage.Setup $ExternalPage.RadioButton.Click
${NSD_CreateRadioButton} 0u 60u 300u 10u $(TEXT_EXTERNAL_${COMPONENT}_FOLDER)
Pop $ExternalPage.Existing
nsDialogs::OnClick /NOUNLOAD $ExternalPage.Existing $ExternalPage.RadioButton.Click
${NSD_CreateText} 10u 75u 255u 12u $Path${COMPONENT}
Pop $ExternalPage.Folder
${NSD_CreateBrowseButton} 270u 75u 20u 12u ...
Pop $ExternalPage.FolderBrowse
nsDialogs::OnClick /NOUNLOAD $ExternalPage.FolderBrowse $ExternalPage.FolderBrowse.Click
${NSD_CreateLabel} 5u 95u 295u 10u $(TEXT_EXTERNAL_${COMPONENT}_FOLDER_INFO)
Pop $ExternalPage.FolderInfo
${NSD_CreateRadioButton} 0u 115u 300u 10u $(TEXT_EXTERNAL_${COMPONENT}_NONE)
Pop $ExternalPage.NoInstall
nsDialogs::OnClick /NOUNLOAD $ExternalPage.NoInstall $ExternalPage.RadioButton.Click
# Set the state of the controls to the previous user selection (or the default)
${If} $${COMPONENT}State == ""
# Page is displayed for the first time, set the default
${If} $Path${COMPONENT} == ""
!if ${COMPONENT} != LaTeX
# ImageMagick and Ghostscript require Administrator or
# power user privileges for installation
${andif} $MultiUser.Privileges != "User"
${andif} $MultiUser.Privileges != "Guest"
!endif
${NSD_SetState} $ExternalPage.Setup ${BST_CHECKED}
${Else}
${NSD_SetState} $ExternalPage.Existing ${BST_CHECKED}
${EndIf}
${Else}
${NSD_SetState} $ExternalPage.Setup $${COMPONENT}Setup.State
${NSD_SetState} $ExternalPage.Existing $${COMPONENT}Existing.State
${NSD_SetState} $ExternalPage.NoInstall $${COMPONENT}NoInstall.State
${EndIf}
Call ExternalRadioButtonClick
nsDialogs::Show
!macroend
!macro EXTERNAL_VALIDATEDIALOG COMPONENT
# Save state of controls
StrCpy $${COMPONENT}State saved
${NSD_GetState} $ExternalPage.Setup $${COMPONENT}Setup.State
${NSD_GetState} $ExternalPage.Setup $${COMPONENT}Setup.State
${NSD_GetState} $ExternalPage.Existing $${COMPONENT}Existing.State
${NSD_GetState} $ExternalPage.NoInstall $${COMPONENT}NoInstall.State
${If} $${COMPONENT}Setup.State = ${BST_CHECKED}
StrCpy $Setup${COMPONENT} ${TRUE}
# Download or install, so we need hard drive space
# Add size of component installer
StrCpy $ComponentSize $Size${COMPONENT}
${If} $Path${COMPONENT} == ""
# Not yet installed, add size of component itself
IntOp $ComponentSize $ComponentSize + ${SIZE_${COMPONENT}}
${EndIf}
SectionSetSize ${External${COMPONENT}} $ComponentSize
${Else}
# No setup
StrCpy $Setup${COMPONENT} ${FALSE}
SectionSetSize ${External${COMPONENT}} 0
${EndIf}
${If} $${COMPONENT}Existing.State = ${BST_CHECKED}
# Update location of component
${NSD_GetText} $ExternalPage.Folder $ExternalPage.Folder_Text
# Verify whether the path exists
${IfNot} ${FileExists} "$ExternalPage.Folder_Text\${BIN_${COMPONENT}}"
MessageBox MB_OK|MB_ICONEXCLAMATION $(TEXT_EXTERNAL_${COMPONENT}_NOTFOUND)
Abort # Return to allow the user to correct the location
${EndIf}
StrCpy $Path${COMPONENT} $ExternalPage.Folder_Text
${EndIf}
!macroend
Function ExternalRadioButtonClick
# Enable the folder selection controls depending
# if the option to use an existing installation is selected
${NSD_GetState} $ExternalPage.Existing $ControlState
${If} $ControlState = ${BST_CHECKED}
EnableWindow $ExternalPage.Folder 1
EnableWindow $ExternalPage.FolderBrowse 1
EnableWindow $ExternalPage.FolderInfo 1
${Else}
EnableWindow $ExternalPage.Folder 0
EnableWindow $ExternalPage.FolderBrowse 0
EnableWindow $ExternalPage.FolderInfo 0
${EndIf}
FunctionEnd
Function ExternalFolderBrowseClick
# Browse button clicked
# Get current folder to set as default
${NSD_GetText} $ExternalPage.Folder $ExternalPage.Folder_Text
# Browse for new folder
nsDialogs::SelectFolderDialog /NOUNLOAD "" $ExternalPage.Folder_Text
Pop $ExternalPage.Folder_Text
${NSD_SetText} $ExternalPage.Folder $ExternalPage.Folder_Text
FunctionEnd
# Page functions
Function PageExternalLaTeX
!insertmacro EXTERNAL_SHOWDIALOG LaTeX
FunctionEnd
Function PageExternalLaTeXValidate
!insertmacro EXTERNAL_VALIDATEDIALOG LaTeX
FunctionEnd
Function PageExternalImageMagick
!insertmacro EXTERNAL_SHOWDIALOG ImageMagick
FunctionEnd
Function PageExternalImageMagickValidate
!insertmacro EXTERNAL_VALIDATEDIALOG ImageMagick
FunctionEnd
Function PageExternalGhostscript
!insertmacro EXTERNAL_SHOWDIALOG Ghostscript
FunctionEnd
Function PageExternalGhostscriptValidate
!insertmacro EXTERNAL_VALIDATEDIALOG Ghostscript
FunctionEnd