Buttons Header: Difference between revisions

From NSIS Wiki
Jump to navigationJump to search
No edit summary
(Undo revision 16464 by 125.16.147.226 (Talk))
 
(2 intermediate revisions by one other user not shown)
(No difference)

Latest revision as of 19:02, 3 January 2009

Below is a simple header file for handling common operations on the 3 main installer buttons; Back, Next and Cancel:

  • Disabling/Enabled a button
  • Hiding/Unhiding a button
  • Changing the button's label

Usage examples:

; For installers
; hide the Back button
${buttonVisible} "Back" 0
; enable the Next button
${buttonEnabled} "Next" 1
; Change the Cancel button's label to "Exit"
${buttonText} "Cancel" "Exit"
 
; For uninstallers, the same commands apply, prepended with 'un'.  E.g.
${unbuttonVisible} "Back" 0

; Defines
!define buttonVisible "!insertMacro buttonVisible"
!define buttonEnabled "!insertMacro buttonEnabled"
!define buttonText "!insertMacro buttonText"
!define unbuttonVisible "!insertMacro unbuttonVisible"
!define unbuttonEnabled "!insertMacro unbuttonEnabled"
!define unbuttonText "!insertMacro unbuttonText"
 
; Interim macros
!macro buttonVisible button value
	Push ${button}
	Push v
	Push ${value}
	Call Buttons
!macroend
!macro unbuttonVisible button value
	Push ${button}
	Push v
	Push ${value}
	Call Un.Buttons
!macroend
 
!macro buttonEnabled button value
	Push ${button}
	Push e
	Push ${value}
	Call Buttons
!macroend
!macro unbuttonEnabled button value
	Push ${button}
	Push e
	Push ${value}
	Call Un.Buttons
!macroend
 
!macro buttonText button value
	Push ${button}
	Push t
	Push "${value}"
	Call Buttons
!macroend
!macro unbuttonText button value
	Push ${button}
	Push t
	Push "${value}"
	Call Un.Buttons
!macroend
 
; Function (inserted via macros for installer vs uninstaller)
; Buttons FUnction
;   Used to interact with the three default buttons; Back, Next, Cancel
; Usage :
;   Push Back|Next|Cancel
;   Push v|e|t
;   Push 1|0|<string>
;   Call Buttons | Call Un.Buttons
; Result :
;   Interacts with the appropriate button
;   If 'v', then 1 will set visible and 0 will set invisible
;   If 'e', then 1 will set enabled and 0 will set disabled
;   If 't', then <string> will be set as the button's new label text
!macro ButtonsFunc Un
	Function ${Un}Buttons
									; Stack: <value> <mode> <button>
		Exch $2 ; value				; Stack: $2 <mode> <button>
		Exch						; Stack: <mode> $2 <button>
		Exch $1 ; mode				; Stack: $1 $2 <button>
		Exch 2						; Stack: <button> $2 $1
		Exch $0 ; button			; Stack: $0 $2 $1
		Push $3						; Stack: $3 $0 $2 $1
 
		StrCmp $0 "Back" 0 +3
			StrCpy $3 3
			goto _setbutton
		StrCmp $0 "Next" 0 +3
			StrCpy $3 1
			goto _setbutton
		StrCmp $0 "Cancel" 0 _end
			StrCpy $3 2
 
		_setbutton:
		GetDlgItem $3 $HWNDPARENT $3
 
		StrCmp $1 "v" 0 +3
			ShowWindow $3 $2
			goto _end
		StrCmp $1 "e" 0 +3
			EnableWindow $3 $2
			goto _end
		StrCmp $1 "t" 0 _end
			SendMessage $3 ${WM_SETTEXT} 0 "STR:$2"
 
		_end:
 
									; Stack: $3 $0 $2 $1
		Pop $3						; Stack: $0 $2 $1
		Pop $0						; Stack: $2 $1
		Pop $2						; Stack: $1
		Pop $1						; Stack: [clean]
	FunctionEnd
!macroend
!insertmacro ButtonsFunc ""
!insertmacro ButtonsFunc "Un."