Section Dependency: Difference between revisions

From NSIS Wiki
Jump to navigationJump to search
No edit summary
 
Line 31: Line 31:
Function .onInit
Function .onInit


  # This is necessary otherwise Sec3 won't be selectable for the first time you click it.
   SectionGetFlags ${Sec2} $R0
   SectionGetFlags ${Sec2} $R0
   IntOp $R0 $R0 & ${SF_SELECTED}
   IntOp $R0 $R0 & ${SF_SELECTED}
Line 41: Line 42:
Push $R1
Push $R1


  # Check if Sec2 was just selected then select Sec3 and Sec4.
   SectionGetFlags ${Sec2} $R0
   SectionGetFlags ${Sec2} $R0
   IntOp $R0 $R0 & ${SF_SELECTED}
   IntOp $R0 $R0 & ${SF_SELECTED}
Line 50: Line 52:
   Goto CheckDependentSections
   Goto CheckDependentSections


  # Select Sec2 if Sec3 or Sec4 was selected.
   SelectIndependentSection:
   SelectIndependentSection:


Line 63: Line 66:
   Goto End
   Goto End


  # Were Sec3 or Sec4 just unselected?
   CheckDependentSections:
   CheckDependentSections:


Line 75: Line 79:
   Goto End
   Goto End


  # Unselect Sec3 and Sec4 if Sec2 was unselected.
   UnselectDependentSections:
   UnselectDependentSections:



Latest revision as of 18:32, 10 January 2006

Author: Afrow UK (talk, contrib)


Description

Macro's that are inserted in a block by block basis to build a list of Sections that are dependent on another Section. By this we mean that 1 or more Sections must have 1 or more other Sections checked first.

Example

This is a complete working example script which can be compiled. This script defines Sec2 ("Section 2") as the component which must be selected to install the other two components Sec3 ("Section 3") and Sec4 ("Section 4").

Name SectionDependency
OutFile SectionDependency.exe
 
Var IndependentSectionState
 
Page Components
 
!include Sections.nsh
 
Section "Section 1" Sec1
  SectionIn RO
SectionEnd
 
Section "Section 2" Sec2
SectionEnd
 
Section /o "Section 3" Sec3
SectionEnd
 
Section /o "Section 4" Sec4
SectionEnd
 
Function .onInit
 
  # This is necessary otherwise Sec3 won't be selectable for the first time you click it.
  SectionGetFlags ${Sec2} $R0
  IntOp $R0 $R0 & ${SF_SELECTED}
  StrCpy $IndependentSectionState $R0
 
FunctionEnd
 
Function .onSelChange
Push $R0
Push $R1
 
  # Check if Sec2 was just selected then select Sec3 and Sec4.
  SectionGetFlags ${Sec2} $R0
  IntOp $R0 $R0 & ${SF_SELECTED}
  StrCmp $R0 $IndependentSectionState +3
    StrCpy $IndependentSectionState $R0
  Goto UnselectDependentSections
    StrCpy $IndependentSectionState $R0
 
  Goto CheckDependentSections
 
  # Select Sec2 if Sec3 or Sec4 was selected.
  SelectIndependentSection:
 
    SectionGetFlags ${Sec2} $R0
    IntOp $R1 $R0 & ${SF_SELECTED}
    StrCmp $R1 ${SF_SELECTED} +3
 
    IntOp $R0 $R0 | ${SF_SELECTED}
    SectionSetFlags ${Sec2} $R0
 
    StrCpy $IndependentSectionState ${SF_SELECTED}
 
  Goto End
 
  # Were Sec3 or Sec4 just unselected?
  CheckDependentSections:
 
  SectionGetFlags ${Sec3} $R0
  IntOp $R0 $R0 & ${SF_SELECTED}
  StrCmp $R0 ${SF_SELECTED} SelectIndependentSection
 
  SectionGetFlags ${Sec4} $R0
  IntOp $R0 $R0 & ${SF_SELECTED}
  StrCmp $R0 ${SF_SELECTED} SelectIndependentSection
 
  Goto End
 
  # Unselect Sec3 and Sec4 if Sec2 was unselected.
  UnselectDependentSections:
 
    SectionGetFlags ${Sec3} $R0
    IntOp $R1 $R0 & ${SF_SELECTED}
    StrCmp $R1 ${SF_SELECTED} 0 +3
 
    IntOp $R0 $R0 ^ ${SF_SELECTED}
    SectionSetFlags ${Sec3} $R0
 
    SectionGetFlags ${Sec4} $R0
    IntOp $R1 $R0 & ${SF_SELECTED}
    StrCmp $R1 ${SF_SELECTED} 0 +3
 
    IntOp $R0 $R0 ^ ${SF_SELECTED}
    SectionSetFlags ${Sec4} $R0
 
  End:
 
Pop $R1
Pop $R0
FunctionEnd

-Stu