/*਍ഀ ਍ഀ nsDialogs.nsh਍ഀ Header file for creating custom installer pages with nsDialogs਍ഀ ਍ഀ */਍ഀ ਍ഀ !ifndef NSDIALOGS_INCLUDED਍ഀ !define NSDIALOGS_INCLUDED਍ഀ !verbose push਍ഀ !verbose 3਍ഀ ਍ഀ !include LogicLib.nsh਍ഀ !include WinMessages.nsh਍ഀ ਍ഀ !define WS_EX_DLGMODALFRAME 0x00000001਍ഀ !define WS_EX_NOPARENTNOTIFY 0x00000004਍ഀ !define WS_EX_TOPMOST 0x00000008਍ഀ !define WS_EX_ACCEPTFILES 0x00000010਍ഀ !define WS_EX_TRANSPARENT 0x00000020਍ഀ !define WS_EX_MDICHILD 0x00000040਍ഀ !define WS_EX_TOOLWINDOW 0x00000080਍ഀ !define WS_EX_WINDOWEDGE 0x00000100਍ഀ !define WS_EX_CLIENTEDGE 0x00000200਍ഀ !define WS_EX_CONTEXTHELP 0x00000400਍ഀ !define WS_EX_RIGHT 0x00001000਍ഀ !define WS_EX_LEFT 0x00000000਍ഀ !define WS_EX_RTLREADING 0x00002000਍ഀ !define WS_EX_LTRREADING 0x00000000਍ഀ !define WS_EX_LEFTSCROLLBAR 0x00004000਍ഀ !define WS_EX_RIGHTSCROLLBAR 0x00000000਍ഀ !define WS_EX_CONTROLPARENT 0x00010000਍ഀ !define WS_EX_STATICEDGE 0x00020000਍ഀ !define WS_EX_APPWINDOW 0x00040000਍ഀ ਍ഀ !define WS_CHILD 0x40000000਍ഀ !define WS_VISIBLE 0x10000000਍ഀ !define WS_DISABLED 0x08000000਍ഀ !define WS_CLIPSIBLINGS 0x04000000਍ഀ !define WS_CLIPCHILDREN 0x02000000਍ഀ !define WS_MAXIMIZE 0x01000000਍ഀ !define WS_VSCROLL 0x00200000਍ഀ !define WS_HSCROLL 0x00100000਍ഀ !define WS_GROUP 0x00020000਍ഀ !define WS_TABSTOP 0x00010000਍ഀ ਍ഀ !define ES_LEFT 0x00000000਍ഀ !define ES_CENTER 0x00000001਍ഀ !define ES_RIGHT 0x00000002਍ഀ !define ES_MULTILINE 0x00000004਍ഀ !define ES_UPPERCASE 0x00000008਍ഀ !define ES_LOWERCASE 0x00000010਍ഀ !define ES_PASSWORD 0x00000020਍ഀ !define ES_AUTOVSCROLL 0x00000040਍ഀ !define ES_AUTOHSCROLL 0x00000080਍ഀ !define ES_NOHIDESEL 0x00000100਍ഀ !define ES_OEMCONVERT 0x00000400਍ഀ !define ES_READONLY 0x00000800਍ഀ !define ES_WANTRETURN 0x00001000਍ഀ !define ES_NUMBER 0x00002000਍ഀ ਍ഀ !define SS_LEFT 0x00000000਍ഀ !define SS_CENTER 0x00000001਍ഀ !define SS_RIGHT 0x00000002਍ഀ !define SS_ICON 0x00000003਍ഀ !define SS_BLACKRECT 0x00000004਍ഀ !define SS_GRAYRECT 0x00000005਍ഀ !define SS_WHITERECT 0x00000006਍ഀ !define SS_BLACKFRAME 0x00000007਍ഀ !define SS_GRAYFRAME 0x00000008਍ഀ !define SS_WHITEFRAME 0x00000009਍ഀ !define SS_USERITEM 0x0000000A਍ഀ !define SS_SIMPLE 0x0000000B਍ഀ !define SS_LEFTNOWORDWRAP 0x0000000C਍ഀ !define SS_OWNERDRAW 0x0000000D਍ഀ !define SS_BITMAP 0x0000000E਍ഀ !define SS_ENHMETAFILE 0x0000000F਍ഀ !define SS_ETCHEDHORZ 0x00000010਍ഀ !define SS_ETCHEDVERT 0x00000011਍ഀ !define SS_ETCHEDFRAME 0x00000012਍ഀ !define SS_TYPEMASK 0x0000001F਍ഀ !define SS_REALSIZECONTROL 0x00000040਍ഀ !define SS_NOPREFIX 0x00000080਍ഀ !define SS_NOTIFY 0x00000100਍ഀ !define SS_CENTERIMAGE 0x00000200਍ഀ !define SS_RIGHTJUST 0x00000400਍ഀ !define SS_REALSIZEIMAGE 0x00000800਍ഀ !define SS_SUNKEN 0x00001000਍ഀ !define SS_EDITCONTROL 0x00002000਍ഀ !define SS_ENDELLIPSIS 0x00004000਍ഀ !define SS_PATHELLIPSIS 0x00008000਍ഀ !define SS_WORDELLIPSIS 0x0000C000਍ഀ !define SS_ELLIPSISMASK 0x0000C000਍ഀ ਍ഀ !define BS_PUSHBUTTON 0x00000000਍ഀ !define BS_DEFPUSHBUTTON 0x00000001਍ഀ !define BS_CHECKBOX 0x00000002਍ഀ !define BS_AUTOCHECKBOX 0x00000003਍ഀ !define BS_RADIOBUTTON 0x00000004਍ഀ !define BS_3STATE 0x00000005਍ഀ !define BS_AUTO3STATE 0x00000006਍ഀ !define BS_GROUPBOX 0x00000007਍ഀ !define BS_USERBUTTON 0x00000008਍ഀ !define BS_AUTORADIOBUTTON 0x00000009਍ഀ !define BS_PUSHBOX 0x0000000A਍ഀ !define BS_OWNERDRAW 0x0000000B਍ഀ !define BS_TYPEMASK 0x0000000F਍ഀ !define BS_LEFTTEXT 0x00000020਍ഀ !define BS_TEXT 0x00000000਍ഀ !define BS_ICON 0x00000040਍ഀ !define BS_BITMAP 0x00000080਍ഀ !define BS_LEFT 0x00000100਍ഀ !define BS_RIGHT 0x00000200਍ഀ !define BS_CENTER 0x00000300਍ഀ !define BS_TOP 0x00000400਍ഀ !define BS_BOTTOM 0x00000800਍ഀ !define BS_VCENTER 0x00000C00਍ഀ !define BS_PUSHLIKE 0x00001000਍ഀ !define BS_MULTILINE 0x00002000਍ഀ !define BS_NOTIFY 0x00004000਍ഀ !define BS_FLAT 0x00008000਍ഀ !define BS_RIGHTBUTTON ${BS_LEFTTEXT}਍ഀ ਍ഀ !define CBS_SIMPLE 0x0001਍ഀ !define CBS_DROPDOWN 0x0002਍ഀ !define CBS_DROPDOWNLIST 0x0003਍ഀ !define CBS_OWNERDRAWFIXED 0x0010਍ഀ !define CBS_OWNERDRAWVARIABLE 0x0020਍ഀ !define CBS_AUTOHSCROLL 0x0040਍ഀ !define CBS_OEMCONVERT 0x0080਍ഀ !define CBS_SORT 0x0100਍ഀ !define CBS_HASSTRINGS 0x0200਍ഀ !define CBS_NOINTEGRALHEIGHT 0x0400਍ഀ !define CBS_DISABLENOSCROLL 0x0800਍ഀ !define CBS_UPPERCASE 0x2000਍ഀ !define CBS_LOWERCASE 0x4000਍ഀ ਍ഀ !define LBS_NOTIFY 0x0001਍ഀ !define LBS_SORT 0x0002਍ഀ !define LBS_NOREDRAW 0x0004਍ഀ !define LBS_MULTIPLESEL 0x0008਍ഀ !define LBS_OWNERDRAWFIXED 0x0010਍ഀ !define LBS_OWNERDRAWVARIABLE 0x0020਍ഀ !define LBS_HASSTRINGS 0x0040਍ഀ !define LBS_USETABSTOPS 0x0080਍ഀ !define LBS_NOINTEGRALHEIGHT 0x0100਍ഀ !define LBS_MULTICOLUMN 0x0200਍ഀ !define LBS_WANTKEYBOARDINPUT 0x0400਍ഀ !define LBS_EXTENDEDSEL 0x0800਍ഀ !define LBS_DISABLENOSCROLL 0x1000਍ഀ !define LBS_NODATA 0x2000਍ഀ !define LBS_NOSEL 0x4000਍ഀ !define LBS_COMBOBOX 0x8000਍ഀ ਍ഀ !define LR_DEFAULTCOLOR 0x0000਍ഀ !define LR_MONOCHROME 0x0001਍ഀ !define LR_COLOR 0x0002਍ഀ !define LR_COPYRETURNORG 0x0004਍ഀ !define LR_COPYDELETEORG 0x0008਍ഀ !define LR_LOADFROMFILE 0x0010਍ഀ !define LR_LOADTRANSPARENT 0x0020਍ഀ !define LR_DEFAULTSIZE 0x0040਍ഀ !define LR_VGACOLOR 0x0080਍ഀ !define LR_LOADMAP3DCOLORS 0x1000਍ഀ !define LR_CREATEDIBSECTION 0x2000਍ഀ !define LR_COPYFROMRESOURCE 0x4000਍ഀ !define LR_SHARED 0x8000਍ഀ ਍ഀ !define IMAGE_BITMAP 0਍ഀ !define IMAGE_ICON 1਍ഀ !define IMAGE_CURSOR 2਍ഀ !define IMAGE_ENHMETAFILE 3਍ഀ ਍ഀ !define GWL_STYLE -16਍ഀ !define GWL_EXSTYLE -20਍ഀ ਍ഀ !define DEFAULT_STYLES ${WS_CHILD}|${WS_VISIBLE}|${WS_CLIPSIBLINGS}਍ഀ ਍ഀ !define __NSD_HLine_CLASS STATIC਍ഀ !define __NSD_HLine_STYLE ${DEFAULT_STYLES}|${SS_ETCHEDHORZ}|${SS_SUNKEN}਍ഀ !define __NSD_HLine_EXSTYLE ${WS_EX_TRANSPARENT}਍ഀ ਍ഀ !define __NSD_VLine_CLASS STATIC਍ഀ !define __NSD_VLine_STYLE ${DEFAULT_STYLES}|${SS_ETCHEDVERT}|${SS_SUNKEN}਍ഀ !define __NSD_VLine_EXSTYLE ${WS_EX_TRANSPARENT}਍ഀ ਍ഀ !define __NSD_Label_CLASS STATIC਍ഀ !define __NSD_Label_STYLE ${DEFAULT_STYLES}|${SS_NOTIFY}਍ഀ !define __NSD_Label_EXSTYLE ${WS_EX_TRANSPARENT}਍ഀ ਍ഀ !define __NSD_Icon_CLASS STATIC਍ഀ !define __NSD_Icon_STYLE ${DEFAULT_STYLES}|${SS_ICON}|${SS_NOTIFY}਍ഀ !define __NSD_Icon_EXSTYLE 0਍ഀ ਍ഀ !define __NSD_Bitmap_CLASS STATIC਍ഀ !define __NSD_Bitmap_STYLE ${DEFAULT_STYLES}|${SS_BITMAP}|${SS_NOTIFY}਍ഀ !define __NSD_Bitmap_EXSTYLE 0਍ഀ ਍ഀ !define __NSD_BrowseButton_CLASS BUTTON਍ഀ !define __NSD_BrowseButton_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}਍ഀ !define __NSD_BrowseButton_EXSTYLE 0਍ഀ ਍ഀ !define __NSD_Link_CLASS LINK਍ഀ !define __NSD_Link_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${BS_OWNERDRAW}਍ഀ !define __NSD_Link_EXSTYLE 0਍ഀ ਍ഀ !define __NSD_Button_CLASS BUTTON਍ഀ !define __NSD_Button_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}਍ഀ !define __NSD_Button_EXSTYLE 0਍ഀ ਍ഀ !define __NSD_GroupBox_CLASS BUTTON਍ഀ !define __NSD_GroupBox_STYLE ${DEFAULT_STYLES}|${BS_GROUPBOX}਍ഀ !define __NSD_GroupBox_EXSTYLE ${WS_EX_TRANSPARENT}਍ഀ ਍ഀ !define __NSD_CheckBox_CLASS BUTTON਍ഀ !define __NSD_CheckBox_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${BS_TEXT}|${BS_VCENTER}|${BS_AUTOCHECKBOX}|${BS_MULTILINE}਍ഀ !define __NSD_CheckBox_EXSTYLE 0਍ഀ ਍ഀ !define __NSD_RadioButton_CLASS BUTTON਍ഀ !define __NSD_RadioButton_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${BS_TEXT}|${BS_VCENTER}|${BS_AUTORADIOBUTTON}|${BS_MULTILINE}਍ഀ !define __NSD_RadioButton_EXSTYLE 0਍ഀ ਍ഀ !define __NSD_Text_CLASS EDIT਍ഀ !define __NSD_Text_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${ES_AUTOHSCROLL}਍ഀ !define __NSD_Text_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE}਍ഀ ਍ഀ !define __NSD_Password_CLASS EDIT਍ഀ !define __NSD_Password_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${ES_AUTOHSCROLL}|${ES_PASSWORD}਍ഀ !define __NSD_Password_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE}਍ഀ ਍ഀ !define __NSD_Number_CLASS EDIT਍ഀ !define __NSD_Number_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${ES_AUTOHSCROLL}|${ES_NUMBER}਍ഀ !define __NSD_Number_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE}਍ഀ ਍ഀ !define __NSD_FileRequest_CLASS EDIT਍ഀ !define __NSD_FileRequest_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${ES_AUTOHSCROLL}਍ഀ !define __NSD_FileRequest_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE}਍ഀ ਍ഀ !define __NSD_DirRequest_CLASS EDIT਍ഀ !define __NSD_DirRequest_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${ES_AUTOHSCROLL}਍ഀ !define __NSD_DirRequest_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE}਍ഀ ਍ഀ !define __NSD_ComboBox_CLASS COMBOBOX਍ഀ !define __NSD_ComboBox_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${WS_VSCROLL}|${WS_CLIPCHILDREN}|${CBS_AUTOHSCROLL}|${CBS_HASSTRINGS}|${CBS_DROPDOWN}਍ഀ !define __NSD_ComboBox_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE}਍ഀ ਍ഀ !define __NSD_DropList_CLASS COMBOBOX਍ഀ !define __NSD_DropList_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${WS_VSCROLL}|${WS_CLIPCHILDREN}|${CBS_AUTOHSCROLL}|${CBS_HASSTRINGS}|${CBS_DROPDOWNLIST}਍ഀ !define __NSD_DropList_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE}਍ഀ ਍ഀ !define __NSD_ListBox_CLASS LISTBOX਍ഀ !define __NSD_ListBox_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${WS_VSCROLL}|${LBS_DISABLENOSCROLL}|${LBS_HASSTRINGS}|${LBS_NOINTEGRALHEIGHT}|${LBS_NOTIFY}਍ഀ !define __NSD_ListBox_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE}਍ഀ ਍ഀ !define __NSD_ProgressBar_CLASS msctls_progress32਍ഀ !define __NSD_ProgressBar_STYLE ${DEFAULT_STYLES}਍ഀ !define __NSD_ProgressBar_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE}਍ഀ ਍ഀ !macro __NSD_DefineControl NAME਍ഀ ਍ഀ !define NSD_Create${NAME} "nsDialogs::CreateControl ${__NSD_${Name}_CLASS} ${__NSD_${Name}_STYLE} ${__NSD_${Name}_EXSTYLE}"਍ഀ ਍ഀ !macroend਍ഀ ਍ഀ !insertmacro __NSD_DefineControl HLine਍ഀ !insertmacro __NSD_DefineControl VLine਍ഀ !insertmacro __NSD_DefineControl Label਍ഀ !insertmacro __NSD_DefineControl Icon਍ഀ !insertmacro __NSD_DefineControl Bitmap਍ഀ !insertmacro __NSD_DefineControl BrowseButton਍ഀ !insertmacro __NSD_DefineControl Link਍ഀ !insertmacro __NSD_DefineControl Button਍ഀ !insertmacro __NSD_DefineControl GroupBox਍ഀ !insertmacro __NSD_DefineControl CheckBox਍ഀ !insertmacro __NSD_DefineControl RadioButton਍ഀ !insertmacro __NSD_DefineControl Text਍ഀ !insertmacro __NSD_DefineControl Password਍ഀ !insertmacro __NSD_DefineControl Number਍ഀ !insertmacro __NSD_DefineControl FileRequest਍ഀ !insertmacro __NSD_DefineControl DirRequest਍ഀ !insertmacro __NSD_DefineControl ComboBox਍ഀ !insertmacro __NSD_DefineControl DropList਍ഀ !insertmacro __NSD_DefineControl ListBox਍ഀ !insertmacro __NSD_DefineControl ProgressBar਍ഀ ਍ഀ !macro __NSD_OnControlEvent EVENT HWND FUNCTION਍ഀ ਍ഀ Push $0਍ഀ Push $1਍ഀ ਍ഀ StrCpy $1 "${HWND}"਍ഀ ਍ഀ GetFunctionAddress $0 "${FUNCTION}"਍ഀ nsDialogs::On${EVENT} $1 $0਍ഀ ਍ഀ Pop $1਍ഀ Pop $0਍ഀ ਍ഀ !macroend਍ഀ ਍ഀ !macro __NSD_DefineControlCallback EVENT਍ഀ ਍ഀ !define NSD_On${EVENT} `!insertmacro __NSD_OnControlEvent ${EVENT}`਍ഀ ਍ഀ !macroend਍ഀ ਍ഀ !macro __NSD_OnDialogEvent EVENT FUNCTION਍ഀ ਍ഀ Push $0਍ഀ ਍ഀ GetFunctionAddress $0 "${FUNCTION}"਍ഀ nsDialogs::On${EVENT} $0਍ഀ ਍ഀ Pop $0਍ഀ ਍ഀ !macroend਍ഀ ਍ഀ !macro __NSD_DefineDialogCallback EVENT਍ഀ ਍ഀ !define NSD_On${EVENT} `!insertmacro __NSD_OnDialogEvent ${EVENT}`਍ഀ ਍ഀ !macroend਍ഀ ਍ഀ !insertmacro __NSD_DefineControlCallback Click਍ഀ !insertmacro __NSD_DefineControlCallback Change਍ഀ !insertmacro __NSD_DefineControlCallback Notify਍ഀ !insertmacro __NSD_DefineDialogCallback Back਍ഀ ਍ഀ !macro _NSD_CreateTimer FUNCTION INTERVAL਍ഀ ਍ഀ Push $0਍ഀ ਍ഀ GetFunctionAddress $0 "${FUNCTION}"਍ഀ nsDialogs::CreateTimer $0 "${INTERVAL}"਍ഀ ਍ഀ Pop $0਍ഀ ਍ഀ !macroend਍ഀ ਍ഀ !define NSD_CreateTimer `!insertmacro _NSD_CreateTimer`਍ഀ ਍ഀ !macro _NSD_KillTimer FUNCTION਍ഀ ਍ഀ Push $0਍ഀ ਍ഀ GetFunctionAddress $0 "${FUNCTION}"਍ഀ nsDialogs::KillTimer $0਍ഀ ਍ഀ Pop $0਍ഀ ਍ഀ !macroend਍ഀ ਍ഀ !define NSD_KillTimer `!insertmacro _NSD_KillTimer`਍ഀ ਍ഀ !macro _NSD_AddStyle CONTROL STYLE਍ഀ ਍ഀ Push $0਍ഀ ਍ഀ System::Call "user32::GetWindowLong(i ${CONTROL}, i ${GWL_STYLE}) i .r0"਍ഀ System::Call "user32::SetWindowLong(i ${CONTROL}, i ${GWL_STYLE}, i $0|${STYLE})"਍ഀ ਍ഀ Pop $0਍ഀ ਍ഀ !macroend਍ഀ ਍ഀ !define NSD_AddStyle "!insertmacro _NSD_AddStyle"਍ഀ ਍ഀ !macro _NSD_AddExStyle CONTROL EXSTYLE਍ഀ ਍ഀ Push $0਍ഀ ਍ഀ System::Call "user32::GetWindowLong(i ${CONTROL}, i ${GWL_EXSTYLE}) i .r0"਍ഀ System::Call "user32::SetWindowLong(i ${CONTROL}, i ${GWL_EXSTYLE}, i $0|${EXSTYLE})"਍ഀ ਍ഀ Pop $0਍ഀ ਍ഀ !macroend਍ഀ ਍ഀ !define NSD_AddExStyle "!insertmacro _NSD_AddExStyle"਍ഀ ਍ഀ !macro __NSD_GetText CONTROL VAR਍ഀ ਍ഀ System::Call user32::GetWindowText(i${CONTROL},t.s,i${NSIS_MAX_STRLEN})਍ഀ Pop ${VAR}਍ഀ ਍ഀ !macroend਍ഀ ਍ഀ !define NSD_GetText `!insertmacro __NSD_GetText`਍ഀ ਍ഀ !macro __NSD_SetText CONTROL TEXT਍ഀ ਍ഀ SendMessage ${CONTROL} ${WM_SETTEXT} 0 `STR:${TEXT}`਍ഀ ਍ഀ !macroend਍ഀ ਍ഀ !define NSD_SetText `!insertmacro __NSD_SetText`਍ഀ ਍ഀ !macro _NSD_SetTextLimit CONTROL LIMIT਍ഀ ਍ഀ SendMessage ${CONTROL} ${EM_SETLIMITTEXT} ${LIMIT} 0਍ഀ ਍ഀ !macroend਍ഀ ਍ഀ !define NSD_SetTextLimit "!insertmacro _NSD_SetTextLimit"਍ഀ ਍ഀ !macro __NSD_GetState CONTROL VAR਍ഀ ਍ഀ SendMessage ${CONTROL} ${BM_GETCHECK} 0 0 ${VAR}਍ഀ ਍ഀ !macroend਍ഀ ਍ഀ !define NSD_GetState `!insertmacro __NSD_GetState`਍ഀ ਍ഀ !macro __NSD_SetState CONTROL STATE਍ഀ ਍ഀ SendMessage ${CONTROL} ${BM_SETCHECK} ${STATE} 0਍ഀ ਍ഀ !macroend਍ഀ ਍ഀ !define NSD_SetState `!insertmacro __NSD_SetState`਍ഀ ਍ഀ !macro __NSD_Check CONTROL਍ഀ ਍ഀ ${NSD_SetState} ${CONTROL} ${BST_CHECKED}਍ഀ ਍ഀ !macroend਍ഀ ਍ഀ !define NSD_Check `!insertmacro __NSD_Check`਍ഀ ਍ഀ !macro __NSD_Uncheck CONTROL਍ഀ ਍ഀ ${NSD_SetState} ${CONTROL} ${BST_UNCHECKED}਍ഀ ਍ഀ !macroend਍ഀ ਍ഀ !define NSD_Uncheck `!insertmacro __NSD_Uncheck`਍ഀ ਍ഀ !macro __NSD_SetFocus HWND਍ഀ ਍ഀ System::Call "user32::SetFocus(i${HWND})"਍ഀ ਍ഀ !macroend਍ഀ ਍ഀ !define NSD_SetFocus `!insertmacro __NSD_SetFocus`਍ഀ ਍ഀ !macro _NSD_CB_AddString CONTROL STRING਍ഀ ਍ഀ SendMessage ${CONTROL} ${CB_ADDSTRING} 0 `STR:${STRING}`਍ഀ ਍ഀ !macroend਍ഀ ਍ഀ !define NSD_CB_AddString "!insertmacro _NSD_CB_AddString"਍ഀ ਍ഀ !macro _NSD_CB_SelectString CONTROL STRING਍ഀ ਍ഀ SendMessage ${CONTROL} ${CB_SELECTSTRING} -1 `STR:${STRING}`਍ഀ ਍ഀ !macroend਍ഀ ਍ഀ !define NSD_CB_SelectString "!insertmacro _NSD_CB_SelectString"਍ഀ ਍ഀ !macro _NSD_LB_AddString CONTROL STRING਍ഀ ਍ഀ SendMessage ${CONTROL} ${LB_ADDSTRING} 0 `STR:${STRING}`਍ഀ ਍ഀ !macroend਍ഀ ਍ഀ !define NSD_LB_AddString "!insertmacro _NSD_LB_AddString"਍ഀ ਍ഀ !macro __NSD_LB_DelString CONTROL STRING਍ഀ ਍ഀ SendMessage ${CONTROL} ${LB_DELETESTRING} 0 `STR:${STRING}`਍ഀ ਍ഀ !macroend਍ഀ ਍ഀ !define NSD_LB_DelString `!insertmacro __NSD_LB_DelString`਍ഀ ਍ഀ !macro __NSD_LB_Clear CONTROL VAR਍ഀ ਍ഀ SendMessage ${CONTROL} ${LB_RESETCONTENT} 0 0 ${VAR}਍ഀ ਍ഀ !macroend਍ഀ ਍ഀ !define NSD_LB_Clear `!insertmacro __NSD_LB_Clear`਍ഀ ਍ഀ !macro __NSD_LB_GetCount CONTROL VAR਍ഀ ਍ഀ SendMessage ${CONTROL} ${LB_GETCOUNT} 0 0 ${VAR}਍ഀ ਍ഀ !macroend਍ഀ ਍ഀ !define NSD_LB_GetCount `!insertmacro __NSD_LB_GetCount`਍ഀ ਍ഀ !macro _NSD_LB_SelectString CONTROL STRING਍ഀ ਍ഀ SendMessage ${CONTROL} ${LB_SELECTSTRING} -1 `STR:${STRING}`਍ഀ ਍ഀ !macroend਍ഀ ਍ഀ !define NSD_LB_SelectString "!insertmacro _NSD_LB_SelectString"਍ഀ ਍ഀ !macro __NSD_LB_GetSelection CONTROL VAR਍ഀ ਍ഀ SendMessage ${CONTROL} ${LB_GETCURSEL} 0 0 ${VAR}਍ഀ System::Call 'user32::SendMessage(i ${CONTROL}, i ${LB_GETTEXT}, i ${VAR}, t .s)'਍ഀ Pop ${VAR}਍ഀ ਍ഀ !macroend਍ഀ ਍ഀ !define NSD_LB_GetSelection `!insertmacro __NSD_LB_GetSelection`਍ഀ ਍ഀ ਍ഀ !macro __NSD_LoadAndSetImage _LIHINSTMODE _IMGTYPE _LIHINSTSRC _LIFLAGS CONTROL IMAGE HANDLE਍ഀ ਍ഀ Push $0਍ഀ Push $R0਍ഀ ਍ഀ StrCpy $R0 ${CONTROL} # in case ${CONTROL} is $0਍ഀ ਍ഀ !if "${_LIHINSTMODE}" == "exeresource"਍ഀ System::Call 'kernel32::GetModuleHandle(i0) i.r0'਍ഀ !undef _LIHINSTSRC਍ഀ !define _LIHINSTSRC r0਍ഀ !endif਍ഀ ਍ഀ System::Call 'user32::LoadImage(i ${_LIHINSTSRC}, ts, i ${_IMGTYPE}, i0, i0, i${_LIFLAGS}) i.r0' "${IMAGE}"਍ഀ SendMessage $R0 ${STM_SETIMAGE} ${_IMGTYPE} $0਍ഀ ਍ഀ Pop $R0਍ഀ Exch $0਍ഀ ਍ഀ Pop ${HANDLE}਍ഀ ਍ഀ !macroend਍ഀ ਍ഀ !macro __NSD_SetIconFromExeResource CONTROL IMAGE HANDLE਍ഀ !insertmacro __NSD_LoadAndSetImage exeresource ${IMAGE_ICON} 0 ${LR_DEFAULTSIZE} "${CONTROL}" "${IMAGE}" ${HANDLE}਍ഀ !macroend਍ഀ ਍ഀ !macro __NSD_SetIconFromInstaller CONTROL HANDLE਍ഀ !insertmacro __NSD_SetIconFromExeResource "${CONTROL}" "#103" ${HANDLE}਍ഀ !macroend਍ഀ ਍ഀ !define NSD_SetImage `!insertmacro __NSD_LoadAndSetImage file ${IMAGE_BITMAP} 0 "${LR_LOADFROMFILE}"`਍ഀ !define NSD_SetBitmap `${NSD_SetImage}`਍ഀ ਍ഀ !define NSD_SetIcon `!insertmacro __NSD_LoadAndSetImage file ${IMAGE_ICON} 0 "${LR_LOADFROMFILE}|${LR_DEFAULTSIZE}"`਍ഀ !define NSD_SetIconFromExeResource `!insertmacro __NSD_SetIconFromExeResource`਍ഀ !define NSD_SetIconFromInstaller `!insertmacro __NSD_SetIconFromInstaller`਍ഀ ਍ഀ ਍ഀ !macro __NSD_SetStretchedImage CONTROL IMAGE HANDLE਍ഀ ਍ഀ Push $0਍ഀ Push $1਍ഀ Push $2਍ഀ Push $R0਍ഀ ਍ഀ StrCpy $R0 ${CONTROL} # in case ${CONTROL} is $0਍ഀ ਍ഀ StrCpy $1 ""਍ഀ StrCpy $2 ""਍ഀ ਍ഀ System::Call '*(i, i, i, i) i.s'਍ഀ Pop $0਍ഀ ਍ഀ ${If} $0 <> 0਍ഀ ਍ഀ System::Call 'user32::GetClientRect(iR0, ir0)'਍ഀ System::Call '*$0(i, i, i .s, i .s)'਍ഀ System::Free $0਍ഀ Pop $1਍ഀ Pop $2਍ഀ ਍ഀ ${EndIf}਍ഀ ਍ഀ System::Call 'user32::LoadImage(i0, ts, i ${IMAGE_BITMAP}, ir1, ir2, i${LR_LOADFROMFILE}) i.s' "${IMAGE}"਍ഀ Pop $0਍ഀ SendMessage $R0 ${STM_SETIMAGE} ${IMAGE_BITMAP} $0਍ഀ ਍ഀ Pop $R0਍ഀ Pop $2਍ഀ Pop $1਍ഀ Exch $0਍ഀ ਍ഀ Pop ${HANDLE}਍ഀ ਍ഀ !macroend਍ഀ ਍ഀ !define NSD_SetStretchedImage `!insertmacro __NSD_SetStretchedImage`਍ഀ ਍ഀ !macro __NSD_FreeImage IMAGE਍ഀ ਍ഀ ${If} ${IMAGE} <> 0਍ഀ ਍ഀ System::Call gdi32::DeleteObject(is) ${IMAGE}਍ഀ ਍ഀ ${EndIf}਍ഀ ਍ഀ !macroend਍ഀ ਍ഀ !define NSD_FreeImage `!insertmacro __NSD_FreeImage`਍ഀ !define NSD_FreeBitmap `${NSD_FreeImage}`਍ഀ ਍ഀ !macro __NSD_FreeIcon IMAGE਍ഀ System::Call user32::DestroyIcon(is) ${IMAGE}਍ഀ !macroend਍ഀ ਍ഀ !define NSD_FreeIcon `!insertmacro __NSD_FreeIcon`਍ഀ ਍ഀ !macro __NSD_ClearImage _IMGTYPE CONTROL਍ഀ ਍ഀ SendMessage ${CONTROL} ${STM_SETIMAGE} ${_IMGTYPE} 0਍ഀ ਍ഀ !macroend਍ഀ ਍ഀ !define NSD_ClearImage `!insertmacro __NSD_ClearImage ${IMAGE_BITMAP}`਍ഀ !define NSD_ClearIcon `!insertmacro __NSD_ClearImage ${IMAGE_ICON}`਍ഀ ਍ഀ ਍ഀ !define DEBUG `System::Call kernel32::OutputDebugString(ts)`਍ഀ ਍ഀ !macro __NSD_ControlCase TYPE਍ഀ ਍ഀ ${Case} ${TYPE}਍ഀ ${NSD_Create${TYPE}} $R3u $R4u $R5u $R6u $R7਍ഀ Pop $R9਍ഀ ${Break}਍ഀ ਍ഀ !macroend਍ഀ ਍ഀ !macro __NSD_ControlCaseEx TYPE਍ഀ ਍ഀ ${Case} ${TYPE}਍ഀ Call ${TYPE}਍ഀ ${Break}਍ഀ ਍ഀ !macroend਍ഀ ਍ഀ !macro NSD_FUNCTION_INIFILE਍ഀ ਍ഀ !insertmacro NSD_INIFILE ""਍ഀ ਍ഀ !macroend਍ഀ ਍ഀ !macro NSD_UNFUNCTION_INIFILE਍ഀ ਍ഀ !insertmacro NSD_INIFILE un.਍ഀ ਍ഀ !macroend਍ഀ ਍ഀ !macro NSD_INIFILE UNINSTALLER_FUNCPREFIX਍ഀ ਍ഀ ;Functions to create dialogs based on old InstallOptions INI files਍ഀ ਍ഀ Function ${UNINSTALLER_FUNCPREFIX}CreateDialogFromINI਍ഀ ਍ഀ # $0 = ini਍ഀ ਍ഀ ReadINIStr $R0 $0 Settings RECT਍ഀ ${If} $R0 == ""਍ഀ StrCpy $R0 1018਍ഀ ${EndIf}਍ഀ ਍ഀ nsDialogs::Create $R0਍ഀ Pop $R9਍ഀ ਍ഀ ReadINIStr $R0 $0 Settings RTL਍ഀ nsDialogs::SetRTL $R0਍ഀ ਍ഀ ReadINIStr $R0 $0 Settings NumFields਍ഀ ਍ഀ ${DEBUG} "NumFields = $R0"਍ഀ ਍ഀ ${For} $R1 1 $R0਍ഀ ${DEBUG} "Creating field $R1"਍ഀ ReadINIStr $R2 $0 "Field $R1" Type਍ഀ ${DEBUG} " Type = $R2"਍ഀ ReadINIStr $R3 $0 "Field $R1" Left਍ഀ ${DEBUG} " Left = $R3"਍ഀ ReadINIStr $R4 $0 "Field $R1" Top਍ഀ ${DEBUG} " Top = $R4"਍ഀ ReadINIStr $R5 $0 "Field $R1" Right਍ഀ ${DEBUG} " Right = $R5"਍ഀ ReadINIStr $R6 $0 "Field $R1" Bottom਍ഀ ${DEBUG} " Bottom = $R6"਍ഀ IntOp $R5 $R5 - $R3਍ഀ ${DEBUG} " Width = $R5"਍ഀ IntOp $R6 $R6 - $R4਍ഀ ${DEBUG} " Height = $R6"਍ഀ ReadINIStr $R7 $0 "Field $R1" Text਍ഀ ${DEBUG} " Text = $R7"਍ഀ ${Switch} $R2਍ഀ !insertmacro __NSD_ControlCase HLine਍ഀ !insertmacro __NSD_ControlCase VLine਍ഀ !insertmacro __NSD_ControlCase Label਍ഀ !insertmacro __NSD_ControlCase Icon਍ഀ !insertmacro __NSD_ControlCase Bitmap਍ഀ !insertmacro __NSD_ControlCaseEx Link਍ഀ !insertmacro __NSD_ControlCase Button਍ഀ !insertmacro __NSD_ControlCase GroupBox਍ഀ !insertmacro __NSD_ControlCase CheckBox਍ഀ !insertmacro __NSD_ControlCase RadioButton਍ഀ !insertmacro __NSD_ControlCase Text਍ഀ !insertmacro __NSD_ControlCase Password਍ഀ !insertmacro __NSD_ControlCaseEx FileRequest਍ഀ !insertmacro __NSD_ControlCaseEx DirRequest਍ഀ !insertmacro __NSD_ControlCase ComboBox਍ഀ !insertmacro __NSD_ControlCase DropList਍ഀ !insertmacro __NSD_ControlCase ListBox਍ഀ ${EndSwitch}਍ഀ ਍ഀ WriteINIStr $0 "Field $R1" HWND $R9਍ഀ ${Next}਍ഀ ਍ഀ nsDialogs::Show਍ഀ ਍ഀ FunctionEnd਍ഀ ਍ഀ Function ${UNINSTALLER_FUNCPREFIX}UpdateINIState਍ഀ ਍ഀ ${DEBUG} "Updating INI state"਍ഀ ਍ഀ ReadINIStr $R0 $0 Settings NumFields਍ഀ ਍ഀ ${DEBUG} "NumField = $R0"਍ഀ ਍ഀ ${For} $R1 1 $R0਍ഀ ReadINIStr $R2 $0 "Field $R1" HWND਍ഀ ReadINIStr $R3 $0 "Field $R1" "Type"਍ഀ ${Switch} $R3਍ഀ ${Case} "CheckBox"਍ഀ ${Case} "RadioButton"਍ഀ ${DEBUG} " HWND = $R2"਍ഀ ${NSD_GetState} $R2 $R2਍ഀ ${DEBUG} " Window selection = $R2"਍ഀ ${Break}਍ഀ ${CaseElse}਍ഀ ${DEBUG} " HWND = $R2"਍ഀ ${NSD_GetText} $R2 $R2਍ഀ ${DEBUG} " Window text = $R2"਍ഀ ${Break}਍ഀ ${EndSwitch}਍ഀ WriteINIStr $0 "Field $R1" STATE $R2਍ഀ ${Next}਍ഀ ਍ഀ FunctionEnd਍ഀ ਍ഀ Function ${UNINSTALLER_FUNCPREFIX}FileRequest਍ഀ ਍ഀ IntOp $R5 $R5 - 15਍ഀ IntOp $R8 $R3 + $R5਍ഀ ਍ഀ ${NSD_CreateBrowseButton} $R8u $R4u 15u $R6u ...਍ഀ Pop $R8਍ഀ ਍ഀ nsDialogs::SetUserData $R8 $R1 # remember field id਍ഀ ਍ഀ WriteINIStr $0 "Field $R1" HWND2 $R8਍ഀ ਍ഀ ${NSD_OnClick} $R8 ${UNINSTALLER_FUNCPREFIX}OnFileBrowseButton਍ഀ ਍ഀ ReadINIStr $R9 $0 "Field $R1" State਍ഀ ਍ഀ ${NSD_CreateFileRequest} $R3u $R4u $R5u $R6u $R9਍ഀ Pop $R9਍ഀ ਍ഀ FunctionEnd਍ഀ ਍ഀ Function ${UNINSTALLER_FUNCPREFIX}DirRequest਍ഀ ਍ഀ IntOp $R5 $R5 - 15਍ഀ IntOp $R8 $R3 + $R5਍ഀ ਍ഀ ${NSD_CreateBrowseButton} $R8u $R4u 15u $R6u ...਍ഀ Pop $R8਍ഀ ਍ഀ nsDialogs::SetUserData $R8 $R1 # remember field id਍ഀ ਍ഀ WriteINIStr $0 "Field $R1" HWND2 $R8਍ഀ ਍ഀ ${NSD_OnClick} $R8 ${UNINSTALLER_FUNCPREFIX}OnDirBrowseButton਍ഀ ਍ഀ ReadINIStr $R9 $0 "Field $R1" State਍ഀ ਍ഀ ${NSD_CreateFileRequest} $R3u $R4u $R5u $R6u $R9਍ഀ Pop $R9਍ഀ ਍ഀ FunctionEnd਍ഀ ਍ഀ Function ${UNINSTALLER_FUNCPREFIX}OnFileBrowseButton਍ഀ ਍ഀ Pop $R0਍ഀ ਍ഀ nsDialogs::GetUserData $R0਍ഀ Pop $R1਍ഀ ਍ഀ ReadINIStr $R2 $0 "Field $R1" HWND਍ഀ ReadINIStr $R4 $0 "Field $R1" Filter਍ഀ ਍ഀ ${NSD_GetText} $R2 $R3਍ഀ ਍ഀ nsDialogs::SelectFileDialog save $R3 $R4਍ഀ Pop $R3਍ഀ ਍ഀ ${If} $R3 != ""਍ഀ SendMessage $R2 ${WM_SETTEXT} 0 STR:$R3਍ഀ ${EndIf}਍ഀ ਍ഀ FunctionEnd਍ഀ ਍ഀ Function ${UNINSTALLER_FUNCPREFIX}OnDirBrowseButton਍ഀ ਍ഀ Pop $R0਍ഀ ਍ഀ nsDialogs::GetUserData $R0਍ഀ Pop $R1਍ഀ ਍ഀ ReadINIStr $R2 $0 "Field $R1" HWND਍ഀ ReadINIStr $R3 $0 "Field $R1" Text਍ഀ ਍ഀ ${NSD_GetText} $R2 $R4਍ഀ ਍ഀ nsDialogs::SelectFolderDialog $R3 $R4਍ഀ Pop $R3਍ഀ ਍ഀ ${If} $R3 != error਍ഀ SendMessage $R2 ${WM_SETTEXT} 0 STR:$R3਍ഀ ${EndIf}਍ഀ ਍ഀ FunctionEnd਍ഀ ਍ഀ Function ${UNINSTALLER_FUNCPREFIX}Link਍ഀ ਍ഀ ${NSD_CreateLink} $R3u $R4u $R5u $R6u $R7਍ഀ Pop $R9਍ഀ ਍ഀ nsDialogs::SetUserData $R9 $R1 # remember field id਍ഀ ਍ഀ ${NSD_OnClick} $R9 ${UNINSTALLER_FUNCPREFIX}OnLink਍ഀ ਍ഀ FunctionEnd਍ഀ ਍ഀ Function ${UNINSTALLER_FUNCPREFIX}OnLink਍ഀ ਍ഀ Pop $R0਍ഀ ਍ഀ nsDialogs::GetUserData $R0਍ഀ Pop $R1਍ഀ ਍ഀ ReadINIStr $R1 $0 "Field $R1" STATE਍ഀ ਍ഀ ExecShell "" $R1਍ഀ ਍ഀ FunctionEnd਍ഀ ਍ഀ !macroend਍ഀ ਍ഀ !verbose pop਍ഀ !endif਍ഀ ਍ഀ