Question

Can PRE function of a MUI dialog be called only when required?

!define MUI_PAGE_CUSTOMFUNCTION_PRE SkipComponentsPage
!insertmacro MUI_PAGE_COMPONENTS

Function SkipComponentsPage
 Abort
MessageBox MB_OK "You chose to UPDATE your current version"
FunctionEnd

//This section will be checked by default, that is , user will not be able to select or unselect this section , this has to be executed..........how to do this?To hide it , i have included a - sign in its name. its name is "mandatory"

Section "-mandatory" SEC_UPDATE
    #Do update............
SectionEnd

I have two RadioButtons (Demo & Update) on my custom dialog page in the NSIS installer. I want that when the user choses to install the UPDATE (choses the UPDATE RadioButton), then the Components Page is skipped , and a specified Section is auto CHECKED and executed.

But if the user choses to install the DEM (choses the DEMO RadioButton) , then the Components page is not skipped & the user can Check or Uncheck Sections on that Component page.

Was it helpful?

Solution

A page callback is always called, but you can put logic inside the function:

...
section "" SEC_UPDATE 
sectionend

Function SkipComponentsPage
!insertmacro UnSelectSection ${SEC_UPDATE} ; Don't include update with demo by default?
${If} $InstallType == UPDATE
    !insertmacro SelectSection ${SEC_UPDATE}
    Abort
${EndIf}
Functionend

It is not really clear to me if you want the user to be able to choose update in the demo mode, but if you want to force the update you can make the section read only:

section "Update" SEC_UPDATE 
SectionIn RO
sectionend

(And remove the UnSelectSection call from the pre function)

...or just make the section invisible with the -name prefix like you suggested.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top