tests/nsis3/share/doc/nsis/Examples/InstallOptions/testnotify.nsi

Summary

Maintainability
Test Coverage
; InstallOptions script demonstrating custom buttons
;----------------------------------------------------

!include WinMessages.nsh

; The name of the installer
Name "InstallOptions Test"

; The file to write
OutFile "TestNotify.exe"

; Show install details
ShowInstDetails show

; Called before anything else as installer initialises
Function .onInit

  ; Extract InstallOptions files
  ; $PLUGINSDIR will automatically be removed when the installer closes
  InitPluginsDir
  File /oname=$PLUGINSDIR\test.ini "testnotify.ini"

FunctionEnd

; Our custom page
Page custom ShowCustom LeaveCustom ": Testing InstallOptions"

Function ShowCustom

  ; Initialise the dialog but don't show it yet
  MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "Test the right-to-left version?" IDNO +2
    WriteINIStr "$PLUGINSDIR\test.ini" "Settings" "RTL" "1"
  InstallOptions::initDialog "$PLUGINSDIR\test.ini"
  ; In this mode InstallOptions returns the window handle so we can use it
  Pop $0
  ; Now show the dialog and wait for it to finish
  InstallOptions::show
  ; Finally fetch the InstallOptions status value (we don't care what it is though)
  Pop $0

FunctionEnd

Function LeaveCustom

  ; At this point the user has either pressed Next or one of our custom buttons
  ; We find out which by reading from the INI file
  ReadINIStr $0 "$PLUGINSDIR\test.ini" "Settings" "State"
  StrCmp $0 0 validate  ; Next button?
  StrCmp $0 2 supportx  ; "Install support for X"?
  StrCmp $0 9 clearbtn  ; "Clear" button?
  StrCmp $0 11 droplist ; "Show|Hide" drop-list?
  Abort ; Return to the page

supportx:
  ; Make the FileRequest field depend on the first checkbox
  ReadINIStr $0 "$PLUGINSDIR\test.ini" "Field 2" "State"
  ReadINIStr $1 "$PLUGINSDIR\test.ini" "Field 5" "HWND"
  EnableWindow $1 $0
  ReadINIStr $1 "$PLUGINSDIR\test.ini" "Field 5" "HWND2"
  EnableWindow $1 $0
  ; Add the disabled flag too so when we return to this page it's disabled again
  StrCmp $0 0 0 +3

    WriteINIStr "$PLUGINSDIR\test.ini" "Field 5" "Flags" "GROUP|FILE_MUST_EXIST|FILE_EXPLORER|FILE_HIDEREADONLY|DISABLED"
    Goto +2

    WriteINIStr "$PLUGINSDIR\test.ini" "Field 5" "Flags" "GROUP|FILE_MUST_EXIST|FILE_EXPLORER|FILE_HIDEREADONLY"
  Abort ; Return to the page

clearbtn:
  ; Clear all text fields
  ReadINIStr $1 "$PLUGINSDIR\test.ini" "Field 5" "HWND"
  SendMessage $1 ${WM_SETTEXT} 0 "STR:"
  ReadINIStr $1 "$PLUGINSDIR\test.ini" "Field 6" "HWND"
  SendMessage $1 ${WM_SETTEXT} 0 "STR:"
  ReadINIStr $1 "$PLUGINSDIR\test.ini" "Field 8" "HWND"
  SendMessage $1 ${WM_SETTEXT} 0 "STR:"
  Abort ; Return to the page

droplist:
  ; Make the DirRequest field depend on the droplist
  ReadINIStr $0 "$PLUGINSDIR\test.ini" "Field 11" "State"
  StrCmp $0 "Show" +3
    StrCpy $0 0
  Goto +2
    StrCpy $0 1
  ReadINIStr $1 "$PLUGINSDIR\test.ini" "Field 6" "HWND"
  EnableWindow $1 $0
  ReadINIStr $1 "$PLUGINSDIR\test.ini" "Field 6" "HWND2"
  EnableWindow $1 $0
  ; Add the disabled flag too so when we return to this page it's disabled again
  StrCmp $0 0 0 +3

    WriteINIStr "$PLUGINSDIR\test.ini" "Field 6" "Flags" "DISABLED"
    Goto +2

    WriteINIStr "$PLUGINSDIR\test.ini" "Field 6" "Flags" ""
  Abort ; Return to the page

validate:
  ; At this point we know the Next button was pressed, so perform any validation
  ReadINIStr $0 "$PLUGINSDIR\test.ini" "Field 2" "State"
  StrCmp $0 1 done
  ReadINIStr $0 "$PLUGINSDIR\test.ini" "Field 3" "State"
  StrCmp $0 1 done
  ReadINIStr $0 "$PLUGINSDIR\test.ini" "Field 4" "State"
  StrCmp $0 1 done
    MessageBox MB_ICONEXCLAMATION|MB_OK "You must select at least one install option!"
    Abort
done:

FunctionEnd

; Installation page
Page instfiles

Section

  ;Get Install Options dialog user input
  ReadINIStr $0 "$PLUGINSDIR\test.ini" "Field 2" "State"
  DetailPrint "Install X=$0"
  ReadINIStr $0 "$PLUGINSDIR\test.ini" "Field 3" "State"
  DetailPrint "Install Y=$0"
  ReadINIStr $0 "$PLUGINSDIR\test.ini" "Field 4" "State"
  DetailPrint "Install Z=$0"
  ReadINIStr $0 "$PLUGINSDIR\test.ini" "Field 5" "State"
  DetailPrint "File=$0"
  ReadINIStr $0 "$PLUGINSDIR\test.ini" "Field 6" "State"
  DetailPrint "Dir=$0"
  ReadINIStr $0 "$PLUGINSDIR\test.ini" "Field 8" "State"
  DetailPrint "Info=$0"

SectionEnd