/* 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.Folder.Return 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 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 !ifdef BUNDLESETUP_${COMPONENT} ${NSD_CreateLabel} 0u 0u 300u 20u $(TEXT_EXTERNAL_${COMPONENT}_INFO_INSTALL) !else ${NSD_CreateLabel} 0u 0u 300u 20u $(TEXT_EXTERNAL_${COMPONENT}_INFO_DOWNLOAD) !endif Pop $ExternalPage.Info !ifdef BUNDLESETUP_${COMPONENT} ${NSD_CreateRadioButton} 0u 40u 300u 10u $(TEXT_EXTERNAL_${COMPONENT}_INSTALL) !else ${NSD_CreateRadioButton} 0u 40u 300u 10u $(TEXT_EXTERNAL_${COMPONENT}_DOWNLOAD) !endif 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 80u 255u 12u $Path${COMPONENT} Pop $ExternalPage.Folder ${NSD_CreateBrowseButton} 270u 80u 20u 12u ... Pop $ExternalPage.FolderBrowse nsDialogs::OnClick /NOUNLOAD $ExternalPage.FolderBrowse $ExternalPage.FolderBrowse.Click ${NSD_CreateLabel} 10u 100u 290u 10u $(TEXT_EXTERNAL_${COMPONENT}_FOLDER_INFO) Pop $ExternalPage.FolderInfo ${NSD_CreateRadioButton} 0u 120u 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 # Setup won't be checked because it's disabled ${If} $MultiUser.Privileges != "User" ${AndIf} $MultiUser.Privileges != "Guest" !endif ${NSD_SetState} $ExternalPage.Setup ${BST_CHECKED} !if ${COMPONENT} != LaTeX ${Else} ${NSD_SetState} $ExternalPage.NoInstall ${BST_CHECKED} ${EndIf} !endif ${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.Return ${If} $ExternalPage.Folder.Return != error StrCpy $ExternalPage.Folder.Text $ExternalPage.Folder.Return ${EndIf} ${NSD_SetText} $ExternalPage.Folder $ExternalPage.Folder.Text FunctionEnd # Page functions #Function PageExternalLaTeX # !insertmacro EXTERNAL_SHOWDIALOG LaTeX #FunctionEnd #Function PageExternalLaTeXValidate # !insertmacro EXTERNAL_VALIDATEDIALOG LaTeX #FunctionEnd