Search code examples
radio-buttonnsis

using radio button followed by custom button in nsis


i have created an installer using NSIS. In that i have included 2 radio buttons. whenever user selects any of the radio buttons it immediately starts execution , but i want after selecting a radio button execution should start only after user presses a custom button say Next.

So how to add button(say Next) in my script and how can i connect my radio button selection with it ?

the partial code snippet is as follows:

Function mode_selection

    nsDialogs::Create 1018
    Pop $dialog
    ${NSD_CreateLabel} 0 10 75% 20u "Choose your preference....."
    Pop $0 

    ${NSD_CreateRadioButton}  20 60 100% 25u "Execution Mode"
    Pop $hwnd
    ${NSD_AddStyle} $hwnd ${WS_GROUP}
    ${NSD_OnClick} $hwnd exec_mode

    ${NSD_CreateRadioButton} 20 90 100% 25u "Debug Mode "
    Pop $hwnd
    ${NSD_OnClick} $hwnd debug_mode


nsDialogs::Show

FunctionEnd

Function exec_mode

    ;some code

FunctionEnd
Function debug_mode

     ;some code

FunctionEnd

Solution

  • !include nsDialogs.nsh
    !include LogicLib.nsh
    Page custom mode_selection
    
    var hwndExecModeRadio
    
    Function mode_selection
    nsDialogs::Create 1018 
    Pop $0
    ${NSD_CreateLabel} 0 10 75% 20u "Choose your preference....."
    Pop $0 
    
    ${NSD_CreateRadioButton} 20 60 80% 25u "Execution Mode"
    Pop $hwndExecModeRadio
    ${NSD_AddStyle} $hwndExecModeRadio ${WS_GROUP}
    
    ${NSD_CreateRadioButton} 20 90 80% 25u "Debug Mode "
    Pop $0
    
    ${NSD_CreateButton} 20 150 -40 14u "Do it"
    Pop $0
    ${NSD_OnClick} $0 perform_mode
    
    nsDialogs::Show
    FunctionEnd
    
    Function perform_mode
        ${NSD_GetState} $hwndExecModeRadio $0
        ${If} $0 = ${BST_CHECKED}
            Call exec_mode
        ${Else}
            Call debug_mode
        ${EndIF}
    FunctionEnd
    
    Function exec_mode
        MessageBox mb_ok "exec_mode"
    FunctionEnd 
    
    Function debug_mode
        MessageBox mb_ok "debug_mode"
    FunctionEnd