Controlling Available Install Options: Difference between revisions
m (Adding new author and category links.) |
|||
Line 8: | Line 8: | ||
== The Script == | == The Script == | ||
Here's the script for NSIS 2.0a0 up to 2.0b0 that solves the problem. If you are using version 2.0b0 and above use Examples\one-section.nsi. This script can work on version 1.98 too. All you need to do is remove "SectionIn RO", sec1, sec2, sec3, and sec4, and replace every ${sec*} with the appropriate section number. | Here's the script for NSIS 2.0a0 up to 2.0b0 that solves the problem. If you are using version 2.0b0 and above use Examples\one-section.nsi. This script can work on version 1.98 too. All you need to do is remove "SectionIn RO", sec1, sec2, sec3, and sec4, and replace every ${sec*} with the appropriate section number. | ||
NOTE on using this sample: | |||
Before it would work I had to change | |||
SECTION_ON to 0x00000001 | |||
SECTION_OFF to 0xfffffff7 | |||
I also use | |||
RO_ON 0x00000010 | |||
RO_OFF 0xffffff7f | |||
<highlight-nsis> | <highlight-nsis> |
Revision as of 20:12, 27 October 2005
Author: KiCHiK (talk, contrib) |
Description
I wrote this script in answer to the following question on the forum by user Sailo:
I have 5 install options 1 is required and the other 4 are optional. The only problem is i want the user to only be able to select 1 of the 4 options so that when you check 1 box the check disappears from 1 of the other options. Is this possible?
The Script
Here's the script for NSIS 2.0a0 up to 2.0b0 that solves the problem. If you are using version 2.0b0 and above use Examples\one-section.nsi. This script can work on version 1.98 too. All you need to do is remove "SectionIn RO", sec1, sec2, sec3, and sec4, and replace every ${sec*} with the appropriate section number.
NOTE on using this sample: Before it would work I had to change SECTION_ON to 0x00000001 SECTION_OFF to 0xfffffff7 I also use RO_ON 0x00000010 RO_OFF 0xffffff7f
# This example demonstrates how to control section selection. # It allows only one of the four optional section to be # selected at any given time. # # Please note that the initial value will not be what you expect # it to be if you are are using InstType because InstType is taken # into consideration after the .onInit, where the initial state is # set, executes. # To use this code with InstType you will either have to specify # you first InstType to match the initial value you set in .onInit # (only StrCpy $1 ${sec1} is important in this case because the # other set the section and that will be done by InstType), or set # the initial section selection from .onSelChange when it is called # for the first time. Name example OutFile setup.exe ComponentText "please choose just one but the default" Section !Required SectionIn RO SectionEnd Section "optional #1" sec1 SectionEnd Section "optional #2" sec2 SectionEnd Section "optional #3" sec3 SectionEnd Section "optional #4" sec4 SectionEnd !define SECTION_ON 0x80000000 !define SECTION_OFF 0x7FFFFFFF Function .onInit Push $0 StrCpy $1 ${sec1} ; Gotta remember which section we are at now... SectionGetFlags ${sec1} $0 IntOp $0 $0 | ${SECTION_ON} SectionSetFlags ${sec1} $0 SectionGetFlags ${sec2} $0 IntOp $0 $0 & ${SECTION_OFF} SectionSetFlags ${sec2} $0 SectionGetFlags ${sec3} $0 IntOp $0 $0 & ${SECTION_OFF} SectionSetFlags ${sec3} $0 SectionGetFlags ${sec4} $0 IntOp $0 $0 & ${SECTION_OFF} SectionSetFlags ${sec4} $0 Pop $0 FunctionEnd Function .onSelChange Push $0 ; Turn off old selected section SectionGetFlags $1 $0 IntOp $0 $0 & ${SECTION_OFF} SectionSetFlags $1 $0 ; Now remember the current selection Push $2 StrCpy $2 $1 SectionGetFlags ${sec1} $0 IntOp $0 $0 & ${SECTION_ON} IntCmp $0 ${SECTION_ON} 0 +2 +2 StrCpy $1 ${sec1} SectionGetFlags ${sec2} $0 IntOp $0 $0 & ${SECTION_ON} IntCmp $0 ${SECTION_ON} 0 +2 +2 StrCpy $1 ${sec2} SectionGetFlags ${sec3} $0 IntOp $0 $0 & ${SECTION_ON} IntCmp $0 ${SECTION_ON} 0 +2 +2 StrCpy $1 ${sec3} SectionGetFlags ${sec4} $0 IntOp $0 $0 & ${SECTION_ON} IntCmp $0 ${SECTION_ON} 0 +2 +2 StrCpy $1 ${sec4} StrCmp $2 $1 0 +4 ; selection hasn't changed SectionGetFlags $1 $0 IntOp $0 $0 | ${SECTION_ON} SectionSetFlags $1 $0 Pop $2 Pop $0 FunctionEnd