Contrib/ExperienceUI/XPUI.nsh
author Dan
Wed, 27 May 2009 15:35:04 -0400
changeset 5 1fdcff916039
parent 4 6e80a6828d0a
child 7 4b8e729b72fc
permissions -rwxr-xr-x
Fixed some license page drawing issues; InstallOptions INIs are now no longer overwritten if they exist

; NSIS ExperienceUI User Interface version 1.11
; Macro System and Main Logic
; Written by Dan Fuhry

; Copyright © 2004-2006 Dan Fuhry
; Portions written by Joost Verburg
; Copyright © 2002-2004 Joost Verburg

; This program is free software; you redistribute and/or modify it
; under the terms of the zlib/libpng license.

; This program is distributed in the hope that it will be useful,
; but WITHOUT ANY WARRANTY; without even the implied warranty of
; merchantability or fitness for a particular purpose.  See the
; zlib/libpng license for details.

; You should have received a copy of the zlib/libpng license with
; this program; if not, visit http://xpui.sf.net/docs/?start=legal.htm.

!ifdef XPUI_INCLUDED
!warning `The ExperienceUI was included multiple times. Please include it only once in your script.`
!endif

!ifndef XPUI_INCLUDED

; We're in. Set verbosity.

!ifndef XPUI_VERBOSE
  !define XPUI_VERBOSE 1
!endif

!verbose push
!verbose ${XPUI_VERBOSE}

!define XPUI_INCLUDED
!define XPUI_VERSION 1.11

!ifndef XPUI_SYSDIR
  !define XPUI_SYSDIR "${NSISDIR}\Contrib\ExperienceUI"
!endif

; Do some pretty stuff

!verbose 4

; my infamous (new) ASCII art
!ifndef XPUI_SILENT
!echo "\
+-------------------------------------------------------------------------------------------------+$\n\
|                                                                             /¯¯|  /¯¯|  /¯¯|    |$\n\
| |¯¯¯¯¯¯¯|                         _                           |¯|  |¯| |¯| / / | / / | / / |    |$\n\
| | |¯¯¯¯¯                         |_|                          | |  | | | |  ¯| |  ¯| |  ¯| |    |$\n\
| |  ¯¯¯|   _  _        ___   ___   _   ___   ____    ____  ___ | |  | | | |   | |   | |   | |    |$\n\
| | |¯¯¯    \\// |¯¯¯\ / __\ |  _| | | / __\ |  _  \ / __/ / __\| |__| | | |   | |   | |   | |    |$\n\
| |  ¯¯¯¯¯| //\\ | __/ \___/ |_|   |_| \___/ |_| |_| \___\ \___/\______/ |_|   |_| O |_|   |_|    |$\n\
|  ¯¯¯¯¯¯¯  ¯  ¯ |_|                                                       [ A better installer ] |$\n\
+-------------------------------------------------------------------------------------------------+$\n"

!echo `NSIS ExperienceUI User Interface version ${XPUI_VERSION}   $\n\
       Copyright © 2004-2005 Dan Fuhry                            $\n\
                                                                  $\n\
       Portions written by Joost Verburg                          $\n\
       Copyright © 2002-2004 Joost Verburg                        $\n\
                                                                  $\n\
       XPUI: Processing XPUI code...                       $\n`

!endif

!verbose ${XPUI_VERBOSE}

; Compiler check

!define XPUI_NSIS_REQUIRED_FLAGS "NSIS_CONFIG_VISIBLE_SUPPORT | \
                                  NSIS_CONFIG_ENHANCEDUI_SUPPORT | \
                                  NSIS_SUPPORT_CODECALLBACKS | \
                                  NSIS_SUPPORT_INTOPTS | \
                                  NSIS_SUPPORT_STROPTS | \
                                  NSIS_SUPPORT_STACK | \
                                  NSIS_SUPPORT_INIFILES | \
                                  NSIS_SUPPORT_EXECUTE | \
                                  NSIS_SUPPORT_FILE | \
                                  NSIS_SUPPORT_DELETE | \
                                  NSIS_SUPPORT_MESSAGEBOX | \
                                  NSIS_CONFIG_PLUGIN_SUPPORT"

  !ifndef ${XPUI_NSIS_REQUIRED_FLAGS}
          
    !verbose 4
    !error   "$\n  ExperienceUI: FATAL: MakeNSIS was compiled without certain options that are required in order for the \
                ExperienceUI to work.$\n  The compiler options required in order for core ExperienceUI functionality are: \
                ${XPUI_NSIS_REQUIRED_FLAGS}.$\n  Please remove the ExperienceUI from your script or recompile NSIS to \
                support these features."
  !endif
  
; Variables
  
Var /GLOBAL XPUI_TEMP1
Var /GLOBAL XPUI_TEMP2
Var /GLOBAL XPUI_ABORTED
Var /GLOBAL XPUI_HWND
Var /GLOBAL XPUI_NOABORTWARNING

; Basic macros

!macro XPUI_DEFAULT S V
  !ifndef `${S}`
    !define `${S}` `${V}`
  !endif
!macroend

!macro XPUI_SET S V
  !ifdef `${S}`
    !undef `${S}`
  !endif
  !define `${S}` `${V}`
!macroend

!macro XPUI_UNSET S
  !ifdef `${S}`
    !undef `${S}`
  !endif
!macroend

!macro MUI_DEFAULT S V
  !ifndef `${S}`
    !define `${S}` `${V}`
  !endif
!macroend

!macro XPUI_SET_QUOTE_ALT SYMBOL CONTENT
  !ifdef "${SYMBOL}"
    !undef "${SYMBOL}"
  !endif
  !define "${SYMBOL}" "${CONTENT}"
!macroEnd

!macro XPUI_CREATEID

  !ifndef XPUI_UNIQUEID
    !define XPUI_UNIQUEID ${__LINE__}
  !endif

  !ifdef XPUI_UNIQUEID
    !undef XPUI_UNIQUEID
    !define XPUI_UNIQUEID ${__LINE__}
  !endif

!macroend

!macro XPUI_CONVERT XPUI MUI

  !ifdef ${MUI}
    !insertmacro XPUI_SET ${XPUI} `${${MUI}}`
    !undef ${MUI}
  !endif

!macroend

!macro XPUI_CONVERT_QUOTE_ALT XPUI MUI

  !ifdef ${MUI}
    !insertmacro XPUI_SET_QUOTE_ALT ${XPUI} "${${MUI}}"
  !endif

!macroend

!macro XPUI_CONTROL_SKIN HWND
  !ifdef XPUI_FASTERSKINNING
    SetCtlColors ${HWND} `${XPUI_TEXT_COLOR}` `${XPUI_TEXT_BGCOLOR}`
  !else
  !ifdef XPUI_INTERNAL_INTERFACE_INSERTED
    SetCtlColors ${HWND} `${XPUI_TEXT_COLOR}` `${XPUI_TEXT_BGCOLOR}`
  !else
    !ifndef XPUI_EXTERNAL_SKINNER
      Push "${HWND}"
      Call ${XPUI_UNFUNC}xpui.SkinControl
      Pop "${HWND}"
    !endif
  !endif
  !endif
!macroend

!macro XPUI_CONTROL_SKIN_LIGHT HWND
  !ifdef XPUI_FASTERSKINNING
    SetCtlColors ${HWND} `${XPUI_TEXT_LIGHTCOLOR}` `${XPUI_TEXT_BGCOLOR}`
  !else
  !ifdef XPUI_INTERNAL_INTERFACE_INSERTED
    SetCtlColors ${HWND} `${XPUI_TEXT_LIGHTCOLOR}` `${XPUI_TEXT_BGCOLOR}`
  !else
  !ifndef XPUI_EXTERNAL_SKINNER
  Push "${HWND}"
  Call ${XPUI_UNFUNC}xpui.SkinControl.light
  Pop "${HWND}"
  !endif
  !endif
  !endif
!macroend

!macro XPUI_CONTROL_SKIN_TRANS HWND
  !ifdef XPUI_FASTERSKINNING
    SetCtlColors ${HWND} `${XPUI_TEXT_COLOR}` `Transparent`
  !else
  !ifdef XPUI_INTERNAL_INTERFACE_INSERTED
    SetCtlColors ${HWND} `${XPUI_TEXT_COLOR}` `Transparent`
  !else
  !ifndef XPUI_EXTERNAL_SKINNER
  Push "${HWND}"
  Call ${XPUI_UNFUNC}xpui.SkinControl.trans
  Pop "${HWND}"
  !endif
  !endif
  !endif
!macroend

!macro XPUI_CONTROL_SKIN_LIGHT_TRANS HWND
  !ifdef XPUI_FASTERSKINNING
    SetCtlColors ${HWND} `${XPUI_TEXT_LIGHTCOLOR}` `Transparent`
  !else
  !ifdef XPUI_INTERNAL_INTERFACE_INSERTED
    SetCtlColors ${HWND} `${XPUI_TEXT_LIGHTCOLOR}` `Transparent`
  !else
  !ifndef XPUI_EXTERNAL_SKINNER  
  Push "${HWND}"
  Call ${XPUI_UNFUNC}xpui.SkinControl.light.trans
  Pop "${HWND}"
  !endif
  !endif
  !endif
!macroend

!macro XPUI_PAGE_CUSTOMFUNCTION Z

  !ifdef XPUI_PAGE_CUSTOMFUNCTION_${Z}
    Call `${XPUI_PAGE_CUSTOMFUNCTION_${Z}}`
    !undef XPUI_PAGE_CUSTOMFUNCTION_${Z}
  !endif
  
  ; Modern UI Compatible
  !ifdef MUI_PAGE_CUSTOMFUNCTION_${Z}
    Call `${MUI_PAGE_CUSTOMFUNCTION_${Z}}`
    !undef MUI_PAGE_CUSTOMFUNCTION_${Z}
  !endif
  
!macroend

!macro XPUI_CONTROL_SKIN_PAGE HWND
  
  !ifndef XPUI_EXTERNAL_SKINNER
    !ifndef XPUI_BGIMAGE
      !insertmacro XPUI_CONTROL_SKIN ${HWND}
    !else
      !insertmacro XPUI_CONTROL_SKIN_TRANS ${HWND}
    !endif
  !endif
  
!macroend

!macro XPUI_CONTROL_SKIN_PAGE_NOTRANS HWND
  
  !ifndef XPUI_EXTERNAL_SKINNER
    !insertmacro XPUI_CONTROL_SKIN ${HWND}
  !endif
  
!macroend

!macro XPUI_PAGECOLOR_INIT ID

  Push $XPUI_HWND
  FindWindow $XPUI_HWND "#32770" "" $HWNDPARENT
  GetDlgItem $XPUI_HWND $XPUI_HWND ${ID}
  !insertmacro XPUI_CONTROL_SKIN_PAGE $XPUI_HWND
  Pop $XPUI_HWND

!macroend

!macro XPUI_PAGEMODE_INST
  !echo `XPUI Page Mode: INSTALL`
  !insertmacro XPUI_SET XPUI_PAGEMODE_INSERTED ``
  !insertmacro XPUI_SET XPUI_UN ``
  !insertmacro XPUI_SET XPUI_UNINST ``
  !insertmacro XPUI_SET XPUI_UNFUNC ``
  !insertmacro XPUI_SET XPUI_PAGEMODE `Install`
!macroend

!macro XPUI_PAGEMODE_UNINST
  !echo `XPUI Page Mode: UNINSTALL`
  !insertmacro XPUI_SET XPUI_PAGEMODE_INSERTED ``
  !insertmacro XPUI_SET XPUI_UN `UN`
  !insertmacro XPUI_SET XPUI_UNINST `Uninst`
  !insertmacro XPUI_SET XPUI_UNFUNC `un.`
  !insertmacro XPUI_SET XPUI_PAGEMODE `Uninstall`
  
  !ifndef XPUI_UNINSTALLER
    !define XPUI_UNINSTALLER
  !endif
!macroend

!macro XPUI_PAGEMODE_PUSH
  !insertmacro XPUI_SET XPUI_UN_PUSHED "${XPUI_UN}"
  !insertmacro XPUI_SET XPUI_UNINST_PUSHED "${XPUI_UNINST}"
  !insertmacro XPUI_SET XPUI_UNFUNC_PUSHED "${XPUI_UNFUNC}"
!macroend

!macro XPUI_PAGEMODE_POP
  !insertmacro XPUI_SET XPUI_UN "${XPUI_UN_PUSHED}"
  !insertmacro XPUI_SET XPUI_UNINST "${XPUI_UNINST_PUSHED}"
  !insertmacro XPUI_SET XPUI_UNFUNC "${XPUI_UNFUNC_PUSHED}"
!macroend

!macro XPUI_HEADER_TEXT T S
  Push $XPUI_TEMP1
  GetDlgItem $XPUI_TEMP1 $HWNDPARENT 1037
  SendMessage $XPUI_TEMP1 0xC 0 `STR:${T}`
  GetDlgItem $XPUI_TEMP1 $HWNDPARENT 1038
  SendMessage $XPUI_TEMP1 0xC 0 `STR:${S}`
  !ifdef TEMP
    !define TEMP_PUSH `${TEMP}`
    !undef TEMP
  !endif
  !ifdef XPUI_HEADERIMAGE_NORESIZETOFIT
    !define TEMP " "
  !else
    !define TEMP /RESIZETOFIT
  !endif
  !ifndef XPUI_BGIMAGE
  SetBrandingImage /IMGID=1046 ${TEMP} "$PLUGINSDIR\Header.bmp" ; ...finally...
  !else
  SetBrandingImage /IMGID=1099 ${TEMP} "$PLUGINSDIR\BgImage.bmp"
  !endif
  !undef TEMP
  !ifdef TEMP_PUSH
    !define TEMP `${TEMP_PUSH}`
    !undef TEMP_PUSH
  !endif
  Pop $XPUI_TEMP1
!macroend

!macro XPUI_USERABORT
  StrCmp $XPUI_NOABORTWARNING 1 +7
  IfFileExists $PLUGINSDIR\Finish.ini `` +3
  WriteINIStr $PLUGINSDIR\Finish.ini `Field 1` State 0
  WriteINIStr $PLUGINSDIR\Finish.ini `Field 2` State 0
  StrCpy $XPUI_ABORTED 1
  SendMessage $HWNDPARENT `0x408` `1` ``
  Abort
!macroend

!macro XPUI_INNERDIALOG_TEXT TEXT ID

  Push $XPUI_HWND
  FindWindow $XPUI_HWND "#32770" "" $HWNDPARENT
  GetDlgItem $XPUI_HWND $XPUI_HWND `${ID}`
  SendMessage $XPUI_HWND 0xC 0 `STR:${TEXT}`
  Pop $XPUI_HWND

!macroend

!ifdef XPUI_WANSIS
  !ifndef XPUI_EXTERNAL_SKINNER
    !define XPUI_EXTERNAL_SKINNER
  !endif
!endif

; Install Options

!insertmacro XPUI_DEFAULT XPUI_INSTALLOPTIONS_MAXFIELD 1250

!macro XPUI_INSTALLOPTIONS_EXTRACT FILE
  !verbose push
  !verbose ${XPUI_VERBOSE}
  InitPluginsDir
  IfFileExists "$PLUGINSDIR\${FILENAME}" +2
    File `/oname=$PLUGINSDIR\${FILE}` `${FILE}`
  
  !insertmacro XPUI_INSTALLOPTIONS_WRITE `${FILE}` `Settings` `RTL` `$(^RTL)`
  !verbose pop
!macroend

!macro XPUI_INSTALLOPTIONS_EXTRACT_AS FILE FILENAME
  !verbose push
  !verbose ${XPUI_VERBOSE}
  InitPluginsDir
  IfFileExists "$PLUGINSDIR\${FILENAME}" +2
    File `/oname=$PLUGINSDIR\${FILENAME}` `${FILE}`
    
  !insertmacro XPUI_INSTALLOPTIONS_WRITE `${FILENAME}` `Settings` `RTL` `$(^RTL)`
  !verbose pop
!macroend

!macro XPUI_INSTALLOPTIONS_DISPLAY FILE
  !verbose push
  !verbose ${XPUI_VERBOSE}
  !insertmacro XPUI_CREATEID
  StrCmp $XPUI_ABORTED 1 `` +2
  Abort
  WriteINIStr `$PLUGINSDIR\${FILE}` `Settings` `RTL` `$(^RTL)`

  !insertmacro XPUI_INSTALLOPTIONS_INITDIALOG `${FILE}`
  InstallOptions::show
  !verbose pop
!macroend

!macro XPUI_INSTALLOPTIONS_DISPLAY_RETURN FILE
  !verbose push
  !verbose ${XPUI_VERBOSE}
  !insertmacro XPUI_CREATEID
  StrCmp $XPUI_ABORTED 1 `` +2
  Abort
  WriteINIStr `$PLUGINSDIR\${FILE}` `Settings` `RTL` `$(^RTL)`

  !insertmacro XPUI_INSTALLOPTIONS_INITDIALOG `${FILE}` 
  InstallOptions::show
  !verbose pop
!macroend

!macro XPUI_INSTALLOPTIONS_INITDIALOG FILE
  !verbose push
  !verbose ${XPUI_VERBOSE}
  !insertmacro XPUI_CREATEID
  StrCmp $XPUI_ABORTED 1 `` +2
  Abort
  WriteINIStr `$PLUGINSDIR\${FILE}` `Settings` `RTL` `$(^RTL)`
  InstallOptions::initDialog /NOUNLOAD `$PLUGINSDIR\${FILE}`
  Pop $XPUI_HWND
  LockWindow on
  !insertmacro XPUI_CONTROL_SKIN_PAGE $XPUI_HWND
  
  Push $R0
  Push $R1
  
  StrCpy $R0 0
  StrCpy $R1 1199
  
  ; $R0 = field count
  ; $R1 = control count
  ; $XPUI_TEMP2 = total field count
  
  ReadINIStr $XPUI_TEMP2 `$PLUGINSDIR\${FILE}` "Settings" "NumFields"
  
  XPUI.loop.setctl.${XPUI_UNIQUEID}:
    
    IntOp $R0 $R0 + 1
    IntOp $R1 $R1 + 1
    
    ReadINIStr $XPUI_TEMP1 `$PLUGINSDIR\${FILE}` "Field $R0" "Type"
    StrCmp $XPUI_TEMP1 "Text"        XPUI.SkinNoTrans.${XPUI_UNIQUEID}
    StrCmp $XPUI_TEMP1 "Password"    XPUI.SkinNoTrans.${XPUI_UNIQUEID}
    StrCmp $XPUI_TEMP1 "Listbox"     XPUI.SkinNoTrans.${XPUI_UNIQUEID}
    StrCmp $XPUI_TEMP1 "Combobox"    XPUI.SkinNoTrans.${XPUI_UNIQUEID}
    StrCmp $XPUI_TEMP1 "Droplist"    XPUI.SkinNoTrans.${XPUI_UNIQUEID}
    
    StrCmp $XPUI_TEMP1 "FileRequest" XPUI.SkinMulti.${XPUI_UNIQUEID}
    StrCmp $XPUI_TEMP1 "DirRequest"  XPUI.SkinMulti.${XPUI_UNIQUEID}
    
      GetDlgItem $XPUI_TEMP1 $XPUI_HWND $R1
      !insertmacro XPUI_CONTROL_SKIN_PAGE $XPUI_TEMP1
      Goto XPUI.SkinDone.${XPUI_UNIQUEID}
      
    XPUI.SkinNoTrans.${XPUI_UNIQUEID}:
      GetDlgItem $XPUI_TEMP1 $XPUI_HWND $R1
      !insertmacro XPUI_CONTROL_SKIN_PAGE_NOTRANS $XPUI_TEMP1
      Goto XPUI.SkinDone.${XPUI_UNIQUEID}
      
    XPUI.SkinMulti.${XPUI_UNIQUEID}:
      GetDlgItem $XPUI_TEMP1 $XPUI_HWND $R1
      !insertmacro XPUI_CONTROL_SKIN_PAGE $XPUI_TEMP1
      IntOp $R1 $R1 + 1
      GetDlgItem $XPUI_TEMP1 $XPUI_HWND $R1
      !insertmacro XPUI_CONTROL_SKIN_PAGE $XPUI_TEMP1
      Goto XPUI.SkinDone.${XPUI_UNIQUEID}
    
    XPUI.SkinDone.${XPUI_UNIQUEID}:
    
    IntCmp $R0 $XPUI_TEMP1 0 XPUI.loop.setctl.${XPUI_UNIQUEID}
    
  Pop $R1
  Pop $R0
    
  SetBrandingImage /IMGID=1019 /RESIZETOFIT "$PLUGINSDIR\page.bmp"
  LockWindow off
  Push $XPUI_HWND
  !verbose pop
!macroend

!macro XPUI_INSTALLOPTIONS_SHOW

  !verbose push
  !verbose ${XPUI_VERBOSE}
  InstallOptions::show
  Pop $XPUI_TEMP1
  !verbose pop
!macroend

!macro XPUI_INSTALLOPTIONS_SHOW_RETURN

  !verbose push
  !verbose ${XPUI_VERBOSE}
  InstallOptions::show
  !verbose pop
!macroend

!macro XPUI_INSTALLOPTIONS_READ VAR FILE SECTION KEY
  !verbose push
  !verbose ${XPUI_VERBOSE}
  ReadIniStr ${VAR} `$PLUGINSDIR\${FILE}` `${SECTION}` `${KEY}`
  !verbose pop
!macroend

!macro XPUI_INSTALLOPTIONS_WRITE FILE SECTION KEY VALUE

  !verbose push
  !verbose ${XPUI_VERBOSE}
  WriteIniStr `$PLUGINSDIR\${FILE}` `${SECTION}` `${KEY}` `${VALUE}`
  !verbose pop
!macroend

!macro XPUI_RESERVEFILE_INSTALLOPTIONS
  !verbose push
  !verbose ${XPUI_VERBOSE}
  ReserveFile `${NSISDIR}\Plugins\InstallOptions.dll`
  !verbose pop
!macroend

!macro MUI_INSTALLOPTIONS_EXTRACT F
  !insertmacro XPUI_INSTALLOPTIONS_EXTRACT `${F}`
!macroend

!macro MUI_INSTALLOPTIONS_EXTRACT_AS O N
  !insertmacro XPUI_INSTALLOPTIONS_EXTRACT_AS `${O}` `${N}`
!macroend

!macro MUI_INSTALLOPTIONS_DISPLAY F
  !insertmacro XPUI_INSTALLOPTIONS_DISPLAY `${F}`
!macroend

!macro MUI_INSTALLOPTIONS_DISPLAY_RETURN F
  !insertmacro XPUI_INSTALLOPTIONS_DISPLAY_RETURN `${F}`
!macroend

!macro MUI_INSTALLOPTIONS_INITDIALOG F
  !insertmacro XPUI_INSTALLOPTIONS_INITDIALOG `${F}`
!macroend

!macro MUI_INSTALLOPTIONS_SHOW
  !insertmacro XPUI_INSTALLOPTIONS_SHOW
!macroend

!macro MUI_INSTALLOPTIONS_SHOW_RETURN
  !insertmacro XPUI_INSTALLOPTIONS_SHOW_RETURN
!macroend

!macro MUI_INSTALLOPTIONS_READ VAR FILE SECTION KEY
  !verbose push
  !verbose ${XPUI_VERBOSE}
  ReadIniStr ${VAR} `$PLUGINSDIR\${FILE}` `${SECTION}` `${KEY}`
  !verbose pop
!macroend

!macro MUI_INSTALLOPTIONS_WRITE FILE SECTION KEY VALUE

  !verbose push
  !verbose ${XPUI_VERBOSE}
  WriteIniStr `$PLUGINSDIR\${FILE}` `${SECTION}` `${KEY}` `${VALUE}`
  !verbose pop
!macroend

!macro MUI_RESERVEFILE_INSTALLOPTIONS
  !verbose push
  !verbose ${XPUI_VERBOSE}
  ReserveFile `${NSISDIR}\Plugins\InstallOptions.dll`
  !verbose pop
!macroend

; Interface - Compile time settings

!insertmacro XPUI_DEFAULT XPUI_UI          "${XPUI_SYSDIR}\UIs\UI.exe"

ChangeUI all `${XPUI_UI}`

!ifdef XPUI_WANSIS
  !ifndef XPUI_EXTERNAL_SKINNER
  !define XPUI_EXTERNAL_SKINNER
  !endif
!endif

!ifdef XPUI_BGIMAGE & XPUI_WANSIS
  !verbose push
  !verbose 4
  !warning "ExperienceUI: WARNING: The set of visual features you defined for the installer - XPUI_WANSIS and XPUI_BGIMAGE - does not work.  The ExperienceUI will use WAnsis support only."
  !undef XPUI_BGIMAGE
  !verbose pop
!endif

; Interface - Runtime Settings

!macro XPUI_INTERFACE

  ; Defaults
  
  ; Skin Includes
  !ifdef XPUI_SKIN
    !ifndef XPUI_SKIN_INCLUDED
    !define XPUI_SKIN_INCLUDED
    !verbose push
    !verbose 3 ; Allow errors to be exposed
    !include "${XPUI_SYSDIR}\Skins\${XPUI_SKIN}.xpuiskin"
    !verbose pop
    !endif
  !endif
  
  ; We'll just assume that if the user defined UMUI_SKIN he wants a UMUI-style installer
  !ifdef UMUI_SKIN
    !include "${NSISDIR}\Contrib\UltraModernUI\Skins\${UMUI_SKIN}.nsh"
    !insertmacro XPUI_LANGUAGE_CONVERT
  !endif
  
  !ifdef XPUI_BGIMAGE & XPUI_WANSIS
    !verbose 4
    !warning "ExperienceUI: WARNING: The set of visual features you defined for the installer - XPUI_WANSIS and XPUI_BGIMAGE - does not work.  The ExperienceUI will use WAnsis support only."
    !undef XPUI_BGIMAGE
  !endif
  
  ; WAnsis settings
  !ifdef XPUI_WANSIS
    !insertmacro XPUI_DEFAULT XPUI_WANSIS_SKIN Forum
    !insertmacro XPUI_DEFAULT XPUI_LEFTLOGO               `${XPUI_SYSDIR}\Skins\${XPUI_WANSIS_SKIN}\LeftLogo.bmp`
    !insertmacro XPUI_DEFAULT XPUI_BOTTOMIMAGE            ``
    !insertmacro XPUI_DEFAULT XPUI_UNBOTTOMIMAGE          ``
    !insertmacro XPUI_DEFAULT XPUI_BOTTOMIMAGE_BMP        `${XPUI_SYSDIR}\Skins\${XPUI_WANSIS_SKIN}\Bottom.bmp`
    !insertmacro XPUI_DEFAULT XPUI_WANSIS_GEN             `${XPUI_SYSDIR}\Skins\${XPUI_WANSIS_SKIN}\gen.bmp`
    !insertmacro XPUI_DEFAULT XPUI_WANSIS_GENEX           `${XPUI_SYSDIR}\Skins\${XPUI_WANSIS_SKIN}\genex.bmp`
    !insertmacro XPUI_DEFAULT XPUI_WANSIS_HEADERIMAGE_BMP `${XPUI_SYSDIR}\Skins\${XPUI_WANSIS_SKIN}\header.bmp`
    !insertmacro XPUI_DEFAULT XPUI_WANSIS_CHECKS          `${XPUI_SYSDIR}\Skins\${XPUI_WANSIS_SKIN}\checks.bmp`
    
    !insertmacro XPUI_DEFAULT XPUI_WANSIS_UI              `${XPUI_SYSDIR}\UIs\WAnsis_UI.exe`
    
    ChangeUI all `${XPUI_WANSIS_UI}`
    CheckBitmap `${XPUI_WANSIS_CHECKS}`
    
    !ifndef XPUI_EXTERNAL_SKINNER
      !define XPUI_EXTERNAL_SKINNER
    !endif
    
    !warning "ExperienceUI: WARNING: WAnsis has been known to be unstable with certain configurations."
    
  !endif
  
  ; Interface Colors
  !insertmacro XPUI_DEFAULT XPUI_TEXT_COLOR `0xB4D3EA`
  !insertmacro XPUI_DEFAULT XPUI_TEXT_BGCOLOR `0x566978`
  !insertmacro XPUI_DEFAULT XPUI_TEXT_LIGHTCOLOR `0xFFFFFF`
  
  !insertmacro XPUI_DEFAULT XPUI_HEADER_TEXT_COLOR "${XPUI_TEXT_COLOR}"
  
  ; Icons
  !insertmacro XPUI_DEFAULT XPUI_ICON `${XPUI_SYSDIR}\..\Graphics\Icons\XPUI-install.ico`
  !insertmacro XPUI_DEFAULT XPUI_UNICON `${XPUI_SYSDIR}\..\Graphics\Icons\XPUI-uninstall.ico`

  !ifdef XPUI_ICON
  Icon `${XPUI_ICON}`
  !Endif

  !ifdef XPUI_UNICON
  UninstallIcon `${XPUI_UNICON}`
  !Endif
  
  ; Check bitmap
  !ifndef XPUI_WANSIS
    !insertmacro XPUI_DEFAULT XPUI_CHECKBITMAP "${NSISDIR}\Contrib\Graphics\Checks\modern.bmp"
    CheckBitmap "${XPUI_CHECKBITMAP}"
  !endif
  
  ; Header image
  !insertmacro XPUI_DEFAULT XPUI_HEADERIMAGE `${XPUI_SYSDIR}\Skins\Default\Header.bmp`
  !insertmacro XPUI_DEFAULT XPUI_UNHEADERIMAGE `${XPUI_HEADERIMAGE}`

  ; Left Logo
  !insertmacro XPUI_DEFAULT XPUI_LEFTLOGO `${XPUI_SYSDIR}\Skins\Default\LeftBranding.bmp`
  !insertmacro XPUI_DEFAULT XPUI_UNLEFTLOGO `${XPUI_LEFTLOGO}`

  ; Bottom Image
  
  !ifndef XPUI_BOTTOMIMAGE
    !define XPUI_BOTTOMIMAGE
  !endif
  !ifdef XPUI_NOBOTTOMIMAGE
    !undef XPUI_BOTTOMIMAGE
  !endif

  !ifndef XPUI_UNBOTTOMIMAGE
    !define XPUI_UNBOTTOMIMAGE
  !endif
  !ifdef XPUI_NOUNBOTTOMIMAGE
    !undef XPUI_UNBOTTOMIMAGE
  !endif
  
  !ifdef XPUI_BGIMAGE
    !ifndef XPUI_BOTTOMIMAGE
      !define XPUI_NOBOTTOMIMAGE
    !endif
    !ifndef XPUI_COMPONENTSPAGE_NODESC
      !define XPUI_COMPONENTSPAGE_NODESC
    !endif
  !endif
  
  !insertmacro XPUI_DEFAULT XPUI_BOTTOMIMAGE_BMP `${XPUI_SYSDIR}\Skins\Default\Bottom.bmp`
  !insertmacro XPUI_DEFAULT XPUI_UNBOTTOMIMAGE_BMP `${XPUI_BOTTOMIMAGE_BMP}`
  
  !ifdef XPUI_BGIMAGE
    !insertmacro XPUI_DEFAULT XPUI_BGIMAGE_BMP "${XPUI_SYSDIR}\Skins\Default\BgImage.bmp"
    !insertmacro XPUI_DEFAULT XPUI_BGIMAGE_UI  "${XPUI_SYSDIR}\UIs\BGui.exe"
    ChangeUI all `${XPUI_BGIMAGE_UI}`
  !endif

  ; Branding Text
  !insertmacro XPUI_DEFAULT XPUI_BRANDINGTEXT ` `
  !insertmacro XPUI_DEFAULT XPUI_BRANDINGTEXT_COLOR_FG 606060
  !insertmacro XPUI_DEFAULT XPUI_BRANDINGTEXT_COLOR_BG 808080
  
  ; BG Gradient
  !ifndef XPUI_DISABLEBG
    !ifdef XPUI_BGGRADIENT
      !ifndef XPUI_BGGRADIENT_CUSTOMCOLORS
        BGGradient ${XPUI_TEXT_COLOR} ${XPUI_TEXT_BGCOLOR} ${XPUI_TEXT_LIGHTCOLOR}
      !endif
    !ifdef XPUI_BGGRADIENT_CUSTOMCOLORS
      !insertmacro XPUI_DEFAULT XPUI_BGGRADIENT_CUSTOMCOLORS_TOP `${XPUI_TEXT_COLOR}`
      !insertmacro XPUI_DEFAULT XPUI_BGGRADIENT_CUSTOMCOLORS_BOTTOM `${XPUI_TEXT_BGCOLOR}`
        !insertmacro XPUI_DEFAULT XPUI_BGGRADIENT_CUSTOMCOLORS_TEXT `${XPUI_TEXT_LIGHTCOLOR}`
        BGGradient `${XPUI_BGGRADIENT_CUSTOMCOLORS_TOP}` `${XPUI_BGGRADIENT_CUSTOMCOLORS_BOTTOM}` `${XPUI_BGGRADIENT_CUSTOMCOLORS_TEXT}`
      !endif
    !endif
  !endif
  
  ; Installer Attributes
  
  !ifdef XPUI_WANSIS
    XPStyle off
  !else
    XPStyle on
  !endif
  InstallColors `${XPUI_TEXT_COLOR}` `${XPUI_TEXT_BGCOLOR}`
  
  !insertmacro XPUI_DEFAULT XPUI_AUTOCLOSE false
  AutoCloseWindow ${XPUI_AUTOCLOSE}
  !insertmacro XPUI_DEFAULT XPUI_SHOWDETAILS show
  ShowInstDetails ${XPUI_SHOWDETAILS}
  
  ; Modern UI Compatibility
  !insertmacro XPUI_LANGUAGE_CONVERT
  
   !ifdef MUI_ABORTWARNING
  !ifndef XPUI_ABORTWARNING
  !define XPUI_ABORTWARNING
  !endif
  !endif
   !ifdef MUI_UNABORTWARNING
  !ifndef XPUI_UNABORTWARNING
  !define XPUI_UNABORTWARNING
  !endif
  !endif
  
  !ifndef XPUI_FASTERSKINNING
    !ifdef XPUI_INTERNAL_PAGEUSED_STARTMENU
      !insertmacro XPUI_STARTMENUPAGE_INITARRAY
    !endif
  !endif
  
  Function .onGUIInit
    !insertmacro XPUI_GUIINIT "" ""
  FunctionEnd
  
  !ifdef XPUI_UNINSTALLER
    Function un.onGUIInit
      !insertmacro XPUI_GUIINIT "UN" "un."
    FunctionEnd
  !endif

  !ifndef XPUI_FASTERSKINNING
    !ifdef XPUI_INTERNAL_PAGEUSED_STARTMENU
      !insertmacro XPUI_STARTMENUPAGE_INITARRAY
    !endif
  !endif
  
  Function .onGUIEnd
    LockWindow off
    !ifdef XPUI_WANSIS
      SetPluginUnload manual
      wansis::unskinit
    !endif
    
    !ifmacrodef XPUI_BGFILES_DELETE

        !ifdef XPUI_ENABLEBG

          !insertmacro XPUI_BGFILES_DELETE

        !endif

      !endif
      
  FunctionEnd
  
  !ifdef XPUI_UNINSTALLER
    Function un.onGUIEnd
      LockWindow off
      !ifdef XPUI_WANSIS
        SetPluginUnload manual
        wansis::unskinit
      !endif
      
     !ifmacrodef XPUI_BGFILES_DELETE

        !ifdef XPUI_ENABLEBG

          !insertmacro XPUI_BGFILES_DELETE

        !endif

      !endif
  
    FunctionEnd
  !endif
  
  !ifdef XPUI_ABORTWARNING

    Function .onUserAbort
    
      StrCmp $XPUI_NOABORTWARNING 1 xpui.exit

        MessageBox MB_YESNO|MB_ICONQUESTION "$(XPUI_ABORTWARNING_TEXT)" IDNO NoExit
        !insertmacro XPUI_USERABORT
        NoExit:
        Abort

      xpui.exit:
    
    FunctionEnd
  
  !endif
  
  !ifdef XPUI_ABORTWARNING & XPUI_UNINSTALLER
  
    Function un.onUserAbort

      StrCmp $XPUI_NOABORTWARNING 1 xpui.exit

        MessageBox MB_YESNO|MB_ICONQUESTION "$(XPUI_ABORTWARNING_TEXT)" IDNO NoExit
        !insertmacro XPUI_USERABORT
        NoExit:
        Abort

      xpui.exit:

    FunctionEnd

  !endif
  
  !ifdef XPUI_EXTERNAL_SKINNER | XPUI_FASTERSKINNING
  !else
  
    Function xpui.skinControl
      Exch "$XPUI_TEMP2"
      SetCtlColors $XPUI_TEMP2 "${XPUI_TEXT_COLOR}" "${XPUI_TEXT_BGCOLOR}"
      Exch "$XPUI_TEMP2"
    FunctionEnd
    
    Function xpui.skinControl.trans
      Exch "$XPUI_TEMP2"
      SetCtlColors $XPUI_TEMP2 "${XPUI_TEXT_COLOR}" "Transparent"
      Exch "$XPUI_TEMP2"
    FunctionEnd
    
    Function xpui.skinControl.light
      Exch "$XPUI_TEMP2"
      SetCtlColors $XPUI_TEMP2 "${XPUI_TEXT_LIGHTCOLOR}" "${XPUI_TEXT_BGCOLOR}"
      Exch "$XPUI_TEMP2"
    FunctionEnd
    
    Function xpui.skinControl.light.trans
      Exch "$XPUI_TEMP2"
      SetCtlColors $XPUI_TEMP2 "${XPUI_TEXT_LIGHTCOLOR}" "Transparent"
      Exch "$XPUI_TEMP2"
    FunctionEnd
    
    !ifdef XPUI_UNINSTALLER
  
      Function un.xpui.skinControl
        Exch "$XPUI_TEMP2"
        SetCtlColors $XPUI_TEMP2 "${XPUI_TEXT_COLOR}" "${XPUI_TEXT_BGCOLOR}"
        Exch "$XPUI_TEMP2"
      FunctionEnd
      
      Function un.xpui.skinControl.trans
        Exch "$XPUI_TEMP2"
        SetCtlColors $XPUI_TEMP2 "${XPUI_TEXT_COLOR}" "Transparent"
        Exch "$XPUI_TEMP2"
      FunctionEnd
      
      Function un.xpui.skinControl.light
        Exch "$XPUI_TEMP2"
        SetCtlColors $XPUI_TEMP2 "${XPUI_TEXT_LIGHTCOLOR}" "${XPUI_TEXT_BGCOLOR}"
        Exch "$XPUI_TEMP2"
      FunctionEnd
      
      Function un.xpui.skinControl.light.trans
        Exch "$XPUI_TEMP2"
        SetCtlColors $XPUI_TEMP2 "${XPUI_TEXT_LIGHTCOLOR}" "Transparent"
        Exch "$XPUI_TEMP2"
      FunctionEnd
    
    !endif
  
  !endif
  
!macroend

!macro XPUI_GUIINIT UN UNFUNC

  !insertmacro XPUI_PAGEMODE_PUSH
  !define XPUI_UNCHECK_${UN}
  !ifdef XPUI_UNCHECK_UN
    !insertmacro XPUI_PAGEMODE_UNINST
  !else
    !insertmacro XPUI_PAGEMODE_INST
  !endif
  !undef XPUI_UNCHECK_${UN}

  !ifndef XPUI_BGIMAGE
    InitPluginsDir
    SetOutPath $PLUGINSDIR
    File /oname=header.bmp "${XPUI_HEADERIMAGE}"
    !ifdef XPUI_BOTTOMIMAGE
    File /oname=btmimg.bmp "${XPUI_BOTTOMIMAGE_BMP}"
    !endif
    File /oname=leftimg.bmp "${XPUI_LEFTLOGO}"
  !else
    InitPluginsDir
    SetOutPath $PLUGINSDIR
    File /oname=BgImage.bmp "${XPUI_BGIMAGE_BMP}"
  !endif
  
  !ifndef XPUI_EXTERNAL_SKINNER  
    
    ; Skin the window background
    !ifndef XPUI_BGIMAGE
    GetDlgItem $XPUI_TEMP1 $HWNDPARENT 1099
    !insertmacro XPUI_CONTROL_SKIN $XPUI_TEMP1
    !endif
    
    !ifdef XPUI_BOTTOMIMAGE
      GetDlgItem $XPUI_TEMP1 $HWNDPARENT 1045
      ShowWindow $XPUI_TEMP1 0
    !else
      GetDlgItem $XPUI_TEMP1 $HWNDPARENT 1039
      ShowWindow $XPUI_TEMP1 0
    !endif
    
    ; Left Message Box rect - hidden for now
    GetDlgItem $XPUI_TEMP1 $HWNDPARENT 1304
    ShowWindow $XPUI_TEMP1 0
    
    ; Header text
    GetDlgItem $XPUI_TEMP1 $HWNDPARENT 1037
    SetCtlColors $XPUI_TEMP1 `${XPUI_HEADER_TEXT_COLOR}` `Transparent`
    CreateFont $XPUI_TEMP2 "$(^Font)" 8 700
    SendMessage $XPUI_TEMP1 0x30 $XPUI_TEMP2 0
    
    GetDlgItem $XPUI_TEMP1 $HWNDPARENT 1038
    SetCtlColors $XPUI_TEMP1 `${XPUI_HEADER_TEXT_COLOR}` `Transparent`
    CreateFont $XPUI_TEMP2 "$(^Font)" 8 350
    SendMessage $XPUI_TEMP1 0x30 $XPUI_TEMP2 0
    
  !else
  
    !ifdef XPUI_BOTTOMIMAGE
      GetDlgItem $XPUI_TEMP1 $HWNDPARENT 1045
      ShowWindow $XPUI_TEMP1 0
    !else
      GetDlgItem $XPUI_TEMP1 $HWNDPARENT 1039
      ShowWindow $XPUI_TEMP1 0
    !endif
    
    ; Left Message Box rect - hidden for now
    GetDlgItem $XPUI_TEMP1 $HWNDPARENT 1304
    ShowWindow $XPUI_TEMP1 0
    
    ; Header text
    GetDlgItem $XPUI_TEMP1 $HWNDPARENT 1037
    CreateFont $XPUI_TEMP2 "$(^Font)" 8 700
    SendMessage $XPUI_TEMP1 0x30 $XPUI_TEMP2 0
    
    GetDlgItem $XPUI_TEMP1 $HWNDPARENT 1038
    CreateFont $XPUI_TEMP2 "$(^Font)" 8 350
    SendMessage $XPUI_TEMP1 0x30 $XPUI_TEMP2 0
  
  !endif
    
  ; Header Image
  !ifdef TEMP
    !define TEMP_PUSH `${TEMP}`
    !undef TEMP
  !endif
  !ifdef XPUI_HEADERIMAGE_NORESIZETOFIT
    !define TEMP " "
  !else
    !define TEMP /RESIZETOFIT
  !endif
  !ifndef XPUI_BGIMAGE
  SetBrandingImage /IMGID=1046 ${TEMP} "$PLUGINSDIR\Header.bmp"
  !endif
  !undef TEMP
  !ifdef TEMP_PUSH
    !define TEMP `${TEMP_PUSH}`
    !undef TEMP_PUSH
  !endif
  
  ; Left Logo
  !ifdef TEMP
    !define TEMP_PUSH `${TEMP}`
    !undef TEMP
  !endif
  !ifdef XPUI_LEFTLOGO_NORESIZETOFIT
    !define TEMP " "
  !else
    !define TEMP /RESIZETOFIT
  !endif
  !ifndef XPUI_BGIMAGE
    SetBrandingImage /IMGID=1302 ${TEMP} "$PLUGINSDIR\Leftimg.bmp"
  !endif
  !undef TEMP
  !ifdef TEMP_PUSH
    !define TEMP `${TEMP_PUSH}`
    !undef TEMP_PUSH
  !endif
  
  ; Bottom Image
  !ifdef XPUI_BOTTOMIMAGE
    !ifdef TEMP
      !define TEMP_PUSH `${TEMP}`
      !undef TEMP
    !endif
    !ifdef XPUI_BOTTOMIMAGE_NORESIZETOFIT
      !define TEMP " "
    !else
      !define TEMP /RESIZETOFIT
    !endif
    SetBrandingImage /IMGID=1039 ${TEMP} "$PLUGINSDIR\Btmimg.bmp"
    !undef TEMP
    !ifdef TEMP_PUSH
      !define TEMP `${TEMP_PUSH}`
      !undef TEMP_PUSH
    !endif
  !endif
  
  !ifdef XPUI_BGIMAGE
    !ifdef TEMP
    !define TEMP_PUSH `${TEMP}`
    !undef TEMP
  !endif
  !ifdef XPUI_BGIMAGE_NORESIZETOFIT
    !define TEMP " "
  !else
    !define TEMP /RESIZETOFIT
  !endif

    SetBrandingImage /IMGID=1099 ${TEMP} "$PLUGINSDIR\BgImage.bmp"
    !undef TEMP
  !ifdef TEMP_PUSH
    !define TEMP `${TEMP_PUSH}`
    !undef TEMP_PUSH
  !endif
  !endif
    
    !ifndef XPUI_EXTERNAL_SKINNER
    
      ; Branding Text
      GetDlgItem $XPUI_TEMP1 $HWNDPARENT 1028
      CreateFont $XPUI_TEMP2 "Trebuchet MS" 10 700
      SendMessage $XPUI_TEMP1 0x30 $XPUI_TEMP2 0
      SendMessage $XPUI_TEMP1 0xC 0 "STR:${XPUI_BRANDINGTEXT}"
      SetCtlColors $XPUI_TEMP1 "${XPUI_BRANDINGTEXT_COLOR_FG}" "Transparent"
      
      GetDlgItem $XPUI_TEMP1 $HWNDPARENT 1256
      CreateFont $XPUI_TEMP2 "Trebuchet MS" 10 700
      SendMessage $XPUI_TEMP1 0x30 $XPUI_TEMP2 0
      SendMessage $XPUI_TEMP1 0xC 0 "STR:${XPUI_BRANDINGTEXT}"
      SetCtlColors $XPUI_TEMP1 "${XPUI_BRANDINGTEXT_COLOR_BG}" "Transparent"
      
      ; Left Info - Time Counter
      GetDlgItem $XPUI_TEMP1 $HWNDPARENT 1100
      CreateFont $XPUI_TEMP2 "Arial" 8 700
      SendMessage $XPUI_TEMP1 0x30 $XPUI_TEMP2 0
      !insertmacro XPUI_CONTROL_SKIN_TRANS $XPUI_TEMP1
      ShowWindow $XPUI_TEMP1 0
      
      GetDlgItem $XPUI_TEMP1 $HWNDPARENT 1101
      CreateFont $XPUI_TEMP2 "Arial" 8 350
      SendMessage $XPUI_TEMP1 0x30 $XPUI_TEMP2 0
      !insertmacro XPUI_CONTROL_SKIN_LIGHT_TRANS $XPUI_TEMP1
      ShowWindow $XPUI_TEMP1 0
      
      ; Skin the child window - to make flashes when changing pages less noticeable
      GetDlgItem $XPUI_TEMP1 $HWNDPARENT 1018
      !insertmacro XPUI_CONTROL_SKIN $XPUI_TEMP1
    
    !else
    
      ; Branding Text
      GetDlgItem $XPUI_TEMP1 $HWNDPARENT 1028
      ShowWindow $XPUI_TEMP1 0
      
      GetDlgItem $XPUI_TEMP1 $HWNDPARENT 1256
      ShowWindow $XPUI_TEMP1 0
      
      ; Left Info - Time Counter
      GetDlgItem $XPUI_TEMP1 $HWNDPARENT 1100
      CreateFont $XPUI_TEMP2 "Arial" 8 700
      SendMessage $XPUI_TEMP1 0x30 $XPUI_TEMP2 0
      ShowWindow $XPUI_TEMP1 0
      
      GetDlgItem $XPUI_TEMP1 $HWNDPARENT 1101
      CreateFont $XPUI_TEMP2 "Arial" 8 350
      SendMessage $XPUI_TEMP1 0x30 $XPUI_TEMP2 0
      ShowWindow $XPUI_TEMP1 0
      
    !endif
    
  !ifdef XPUI_WANSIS
  
    SetOutPath $PLUGINSDIR
    File /oname=gen.bmp   `${XPUI_WANSIS_GEN}`
    File /oname=genex.bmp `${XPUI_WANSIS_GENEX}`

     !ifdef XPUI_WANSIS_HEADERIMAGE

      File /oname=header.bmp `${XPUI_WANSIS_HEADERIMAGE_BMP}`
      GetDlgItem $XPUI_TEMP1 $HWNDPARENT 1047
      ShowWindow $XPUI_TEMP1 0
      SetBrandingImage /IMGID=1046 $PLUGINSDIR\Header.bmp

    !else

      GetDlgItem $XPUI_TEMP1 $HWNDPARENT 1046
      ShowWindow $XPUI_TEMP1 0

    !endif
    
    ; Check for msvcr71.dll (alerts user of incompatibility problems on older machines or [in my case] fresh Windows installations)
    ; FIXME: l10n
    IfFileExists $SYSDIR\msvcr71.dll FoundCRT
      MessageBox MB_OK|MB_ICONEXCLAMATION "Setup failed to load the Windows runtime library msvcr71.dll.  Setup will function, but the visual style will not work.  This is most likely caused by a fresh Windows installation." IDOK NoSkin
    FoundCRT:

    wansis::skinit /NOUNLOAD `$PLUGINSDIR\gen.bmp` `$PLUGINSDIR\genex.bmp`
    
    Pop $XPUI_TEMP1
      StrCmp $XPUI_TEMP1 "success" +2
      MessageBox MB_OK|MB_ICONINFORMATION "Setup encountered an error initializing WAnsis skinning engine. $(^Name) Setup will function, but it will not look very nice.$\n$\nReturn from wansis.dll: $XPUI_TEMP1"

    NoSkin:
  
  !endif
  
  ; NSIS is always raving about unused variables, so lets shut it up :)
  
  Goto +5 ; Ahh, the stupidity of computers...
  Push $XPUI_NOABORTWARNING
  Pop  $XPUI_NOABORTWARNING
  Push $XPUI_ABORTED
  Pop  $XPUI_ABORTED
  
  ; What the heck? Lets do it for functions too :D
  
  !ifdef XPUI_EXTERNAL_SKINNER | XPUI_FASTERSKINNING
  !else
  Goto +5 ; This effectively compiles code that will never be executed - costs ~40-50 bytes?
  Call ${UNFUNC}xpui.SkinControl
  Call ${UNFUNC}xpui.SkinControl.light
  Call ${UNFUNC}xpui.SkinControl.trans
  Call ${UNFUNC}xpui.SkinControl.light.trans
  !endif
  
  !ifmacrodef XPUI_SET_BG

    !ifdef XPUI_ENABLEBG

      !insertmacro XPUI_SET_BG

    !endif

  !endif
  
  ; If the faster skinner is disabled, this function will be inserted after pages.
  ; Therefore, we can take care of some page functions before the installer starts.
  ; This makes page initialization MUCH faster.
  
  !ifndef XPUI_FASTERSKINNING

    SetOutPath $PLUGINSDIR
    !ifdef XPUI_INTERNAL_PAGEUSED_WELCOME
      File `${XPUI_SYSDIR}\INI\isWelcome.ini`
    !endif
    !ifdef XPUI_INTERNAL_PAGEUSED_WELCOME2
      File `${XPUI_SYSDIR}\INI\Welcome.ini`
    !endif
    !ifdef XPUI_INTERNAL_PAGEUSED_INSTCONFIRM
      File `${XPUI_SYSDIR}\INI\Confirm.ini`
    !endif
    !ifdef XPUI_INTERNAL_PAGEUSED_INSTSUCCESS
      File `${XPUI_SYSDIR}\INI\Confirm.ini`
    !endif
    !ifdef XPUI_INTERNAL_PAGEUSED_FINISH
      File `${XPUI_SYSDIR}\INI\Finish.ini`
    !endif
    !ifdef XPUI_INTERNAL_PAGEUSED_STARTMENU
      !insertmacro XPUI_STARTMENUPAGE_CREATEINI
    !endif
    
  !endif
  
  !ifdef XPUI_${UN}CUSTOMFUNCTION_GUIINIT
    Call `${XPUI_${UN}CUSTOMFUNCTION_GUIINIT}`
    !undef XPUI_${UN}CUSTOMFUNCTION_GUIINIT
  !endif
  
  ; ShowWindow $HWNDPARENT 2
  
  !insertmacro XPUI_PAGEMODE_POP
!macroend

; Modern UI Compatibility Script

!include "${XPUI_SYSDIR}\MUIConvert.nsh"
!insertmacro XPUI_LANGUAGE_CONVERT

; Pages

!macro XPUI_PAGECHECKS
  ; any checks for settings, etc that will be checked before XPUI pages are inserted go here
  !verbose push
  !verbose ${XPUI_VERBOSE}
  
  !ifdef XPUI_INTERNAL_LANG_INSERTED
    !verbose 4
    !error "ExperienceUI: FATAL: Language files must be inserted after pages.  Please move all lines containing $\"!insertmacro XPUI_LANGUAGE$\" down below page macros."
  !endif
  
  !verbose 0
    !insertmacro XPUI_LANGUAGE_CONVERT
  !verbose ${XPUI_VERBOSE}
  
  !ifdef XPUI_WANSIS
  !ifndef XPUI_EXTERNAL_SKINNER
  !define XPUI_EXTERNAL_SKINNER
  !endif
  !endif
  
  !ifdef XPUI_BGIMAGE
    !ifndef XPUI_COMPONENTSPAGE_NODESC
      !define XPUI_COMPONENTSPAGE_NODESC
    !endif
  !endif
  
!macroend

!macro XPUI_ENDPAGECHECKS
  ; any preproccessor commands after page macros go here
  !verbose pop
!macroend

!macro XPUI_PAGE_WELCOME

  !insertmacro XPUI_PAGECHECKS
  
  !ifndef XPUI_INTERNAL_PAGEUSED_WELCOME
    !define XPUI_INTERNAL_PAGEUSED_WELCOME
  !endif
  
  !insertmacro XPUI_DEFAULT XPUI_${XPUI_UN}WELCOMEPAGE_TITLE "$(XPUI_${XPUI_UN}WELCOMEPAGE_TITLE)"
  !insertmacro XPUI_DEFAULT XPUI_${XPUI_UN}WELCOMEPAGE_SUBTITLE "$(XPUI_${XPUI_UN}WELCOMEPAGE_SUBTITLE)"
  !insertmacro XPUI_DEFAULT XPUI_${XPUI_UN}WELCOMEPAGE_TEXT_TOP "$(XPUI_${XPUI_UN}WELCOMEPAGE_TEXT_TOP)"
  !insertmacro XPUI_DEFAULT XPUI_${XPUI_UN}WELCOMEPAGE_TEXT "$(XPUI_${XPUI_UN}WELCOMEPAGE_TEXT)"
  !insertmacro XPUI_DEFAULT XPUI_${XPUI_UN}WELCOMEPAGE_CAPTION "$(XPUI_${XPUI_UN}WELCOMEPAGE_CAPTION)"
  
  !insertmacro XPUI_CREATEID
  
  PageEx ${XPUI_UNFUNC}custom
  PageCallbacks ${XPUI_UNFUNC}XPUI.io.WelcomePage.${XPUI_UNIQUEID} ${XPUI_UNFUNC}XPUI.io.WelcomePage.${XPUI_UNIQUEID}.leave
  Caption `${XPUI_${XPUI_UN}WELCOMEPAGE_CAPTION}`
  PageExEnd

  Function ${XPUI_UNFUNC}XPUI.io.WelcomePage.${XPUI_UNIQUEID}
    LockWindow on
    StrCmp $XPUI_ABORTED 1 0 +2
      Abort
    
    !ifdef XPUI_FASTERSKINNING
    SetOutPath $PLUGINSDIR
    File `${XPUI_SYSDIR}\INI\isWelcome.ini`
    !endif

    !insertmacro XPUI_PAGE_CUSTOMFUNCTION PRE    

    WriteINIStr $PLUGINSDIR\isWelcome.ini `Field 1` Text `${XPUI_${XPUI_UN}WELCOMEPAGE_TEXT_TOP}`
    WriteINIStr $PLUGINSDIR\isWelcome.ini `Field 2` Text `${XPUI_${XPUI_UN}WELCOMEPAGE_TEXT}`
    WriteINIStr `$PLUGINSDIR\isWelcome.ini` `Settings` `RTL` `$(^RTL)`
    
    InstallOptions::initDialog /NOUNLOAD `$PLUGINSDIR\isWelcome.ini`
      
      Pop $XPUI_HWND
      !insertmacro XPUI_CONTROL_SKIN_PAGE $XPUI_HWND
      
      GetDlgItem $XPUI_TEMP1 $XPUI_HWND 1200
        CreateFont $XPUI_TEMP2 `$(^Font)` 12 700 ; previously Tahoma
        SendMessage $XPUI_TEMP1 0x30 $XPUI_TEMP2 $XPUI_TEMP2
        !insertmacro XPUI_CONTROL_SKIN_PAGE $XPUI_TEMP1
      
      GetDlgItem $XPUI_TEMP1 $XPUI_HWND 1201
        CreateFont $XPUI_TEMP2 `$(^Font)` 8 350 ; previously Tahoma
        SendMessage $XPUI_TEMP1 0x30 $XPUI_TEMP2 $XPUI_TEMP2
        !insertmacro XPUI_CONTROL_SKIN_PAGE $XPUI_TEMP1
      
      !insertmacro XPUI_HEADER_TEXT `${XPUI_${XPUI_UN}WELCOMEPAGE_TITLE}` `${XPUI_${XPUI_UN}WELCOMEPAGE_SUBTITLE}`
      
      !insertmacro XPUI_PAGE_CUSTOMFUNCTION SHOW
      
      LockWindow off
      
    InstallOptions::show
    FunctionEnd
    
    Function ${XPUI_UNFUNC}XPUI.io.WelcomePage.${XPUI_UNIQUEID}.leave
    !ifndef XPUI_NOLOCK
    LockWindow on
    !endif
    !insertmacro XPUI_PAGE_CUSTOMFUNCTION LEAVE
  FunctionEnd
  
  !undef XPUI_${XPUI_UN}WELCOMEPAGE_TITLE
  !undef XPUI_${XPUI_UN}WELCOMEPAGE_SUBTITLE
  !undef XPUI_${XPUI_UN}WELCOMEPAGE_TEXT_TOP
  !undef XPUI_${XPUI_UN}WELCOMEPAGE_TEXT
  !undef XPUI_${XPUI_UN}WELCOMEPAGE_CAPTION
  
  !insertmacro XPUI_ENDPAGECHECKS

!macroend

!macro XPUI_PAGE_WELCOME2

  !insertmacro XPUI_PAGECHECKS
  
  !ifndef XPUI_INTERNAL_PAGEUSED_WELCOME2
    !define XPUI_INTERNAL_PAGEUSED_WELCOME2
  !endif
  
  !ifdef XPUI_WELCOMEPAGESTYLE2_TITLE | XPUI_WELCOMEPAGESTYLE2_SUBTITLE | XPUI_WELCOMEPAGESTYLE2_CAPTION | XPUI_WELCOMEPAGESTYLE2_TEXT_TOP | XPUI_WELCOMEPAGESTYLE2_TEXT
    !warning "The XPUI_WELCOMEPAGESTYLE2 defines are deprecated and have been renamed to XPUI_WELCOMEPAGE2_*.  Please update your script."
  !endif
  
  !insertmacro XPUI_DEFAULT XPUI_${XPUI_UN}WELCOMEPAGE2_TITLE "$(XPUI_${XPUI_UN}WELCOMEPAGE2_TITLE)"
  !insertmacro XPUI_DEFAULT XPUI_${XPUI_UN}WELCOMEPAGE2_SUBTITLE "$(XPUI_${XPUI_UN}WELCOMEPAGE2_SUBTITLE)"
  !insertmacro XPUI_DEFAULT XPUI_${XPUI_UN}WELCOMEPAGE2_TEXT_TOP "$(XPUI_${XPUI_UN}WELCOMEPAGE2_TEXT_TOP)"
  !insertmacro XPUI_DEFAULT XPUI_${XPUI_UN}WELCOMEPAGE2_TEXT "$(XPUI_${XPUI_UN}WELCOMEPAGE2_TEXT)"
  !insertmacro XPUI_DEFAULT XPUI_${XPUI_UN}WELCOMEPAGE2_CAPTION "$(XPUI_${XPUI_UN}WELCOMEPAGE2_CAPTION)"
  
  !insertmacro XPUI_CREATEID
  
  PageEx ${XPUI_UNFUNC}custom
  PageCallbacks ${XPUI_UNFUNC}XPUI.io.WelcomePage2.${XPUI_UNIQUEID} ${XPUI_UNFUNC}XPUI.io.WelcomePage2.${XPUI_UNIQUEID}.leave
  Caption `${XPUI_${XPUI_UN}WELCOMEPAGE2_CAPTION}`
  PageExEnd

  Function ${XPUI_UNFUNC}XPUI.io.WelcomePage2.${XPUI_UNIQUEID}
    LockWindow on
    StrCmp $XPUI_ABORTED 1 0 +2
      Abort
    
    !ifdef XPUI_FASTERSKINNING
    SetOutPath $PLUGINSDIR
    File `${XPUI_SYSDIR}\INI\Welcome.ini`
    !endif

    !insertmacro XPUI_PAGE_CUSTOMFUNCTION PRE    

    WriteINIStr $PLUGINSDIR\Welcome.ini `Field 1` Text `${XPUI_${XPUI_UN}WELCOMEPAGE2_TEXT_TOP}`
    WriteINIStr $PLUGINSDIR\Welcome.ini `Field 2` Text `${XPUI_${XPUI_UN}WELCOMEPAGE2_TEXT}`
    WriteINIStr `$PLUGINSDIR\Welcome.ini` `Settings` `RTL` `$(^RTL)`
    
    InstallOptions::initDialog /NOUNLOAD `$PLUGINSDIR\Welcome.ini`
      
      Pop $XPUI_HWND
      !insertmacro XPUI_CONTROL_SKIN_PAGE $XPUI_HWND
      
      GetDlgItem $XPUI_TEMP1 $XPUI_HWND 1200
        CreateFont $XPUI_TEMP2 `$(^Font)` 8 700 ; previously Tahoma
        SendMessage $XPUI_TEMP1 0x30 $XPUI_TEMP2 $XPUI_TEMP2
        !insertmacro XPUI_CONTROL_SKIN_PAGE $XPUI_TEMP1
      
      GetDlgItem $XPUI_TEMP1 $XPUI_HWND 1201
        CreateFont $XPUI_TEMP2 `$(^Font)` 8 350 ; previously Tahoma
        SendMessage $XPUI_TEMP1 0x30 $XPUI_TEMP2 $XPUI_TEMP2
        !insertmacro XPUI_CONTROL_SKIN_PAGE $XPUI_TEMP1
      
      !insertmacro XPUI_HEADER_TEXT `${XPUI_${XPUI_UN}WELCOMEPAGE2_TITLE}` `${XPUI_${XPUI_UN}WELCOMEPAGE2_SUBTITLE}`
      
      !insertmacro XPUI_PAGE_CUSTOMFUNCTION SHOW
      
      LockWindow off
      
    InstallOptions::show
    FunctionEnd
    
    Function ${XPUI_UNFUNC}XPUI.io.WelcomePage2.${XPUI_UNIQUEID}.leave
    !ifndef XPUI_NOLOCK
    LockWindow on
    !endif
    !insertmacro XPUI_PAGE_CUSTOMFUNCTION LEAVE
  FunctionEnd
  
  !undef XPUI_${XPUI_UN}WELCOMEPAGE2_TITLE
  !undef XPUI_${XPUI_UN}WELCOMEPAGE2_SUBTITLE
  !undef XPUI_${XPUI_UN}WELCOMEPAGE2_TEXT_TOP
  !undef XPUI_${XPUI_UN}WELCOMEPAGE2_TEXT
  !undef XPUI_${XPUI_UN}WELCOMEPAGE2_CAPTION
  
  !insertmacro XPUI_ENDPAGECHECKS

!macroend

!macro XPUI_PAGE_LICENSE DATA

  !insertmacro XPUI_PAGECHECKS
  
  !ifndef XPUI_INTERNAL_PAGEUSED_LICENSE
    !define XPUI_INTERNAL_PAGEUSED_LICENSE
  !endif
  
  !insertmacro XPUI_DEFAULT MUI_LICENSEPAGE_HEADER_TITLE    "$(XPUI_${XPUI_UN}LICENSEPAGE_TITLE)"
  !insertmacro XPUI_DEFAULT MUI_LICENSEPAGE_HEADER_SUBTITLE "$(XPUI_${XPUI_UN}LICENSEPAGE_SUBTITLE)"
  !insertmacro XPUI_DEFAULT MUI_LICENSEPAGE_TEXT_TOP        "$(XPUI_${XPUI_UN}LICENSEPAGE_TEXT_TOP)"
  !insertmacro XPUI_DEFAULT MUI_LICENSEPAGE_TEXT_BOTTOM     "$(XPUI_${XPUI_UN}LICENSEPAGE_TEXT_BOTTOM)"
  !insertmacro XPUI_DEFAULT MUI_LICENSEPAGE_CAPTION         "$(XPUI_${XPUI_UN}LICENSEPAGE_CAPTION)"
  
  !insertmacro XPUI_DEFAULT XPUI_${XPUI_UN}LICENSEPAGE_CAPTION     "${MUI_LICENSEPAGE_HEADER_CAPTION}"
  !insertmacro XPUI_DEFAULT XPUI_${XPUI_UN}LICENSEPAGE_TITLE       "${MUI_LICENSEPAGE_HEADER_TITLE}"
  !insertmacro XPUI_DEFAULT XPUI_${XPUI_UN}LICENSEPAGE_SUBTITLE    "${MUI_LICENSEPAGE_HEADER_SUBTITLE}"
  !insertmacro XPUI_DEFAULT XPUI_${XPUI_UN}LICENSEPAGE_TEXT_TOP    "${MUI_LICENSEPAGE_TEXT_TOP}"
  !insertmacro XPUI_DEFAULT XPUI_${XPUI_UN}LICENSEPAGE_TEXT_BOTTOM "${MUI_LICENSEPAGE_TEXT_BOTTOM}"
  
  ; Fix for John P. on the forums
  !ifdef XPUI_LICENSEPAGE_CHECKBOX
    !insertmacro XPUI_DEFAULT XPUI_${XPUI_UN}LICENSEPAGE_CHECKBOX_TEXT             "$(^AcceptBtn)"
  !else ifdef XPUI_LICENSEPAGE_RADIOBUTTONS
    !insertmacro XPUI_DEFAULT XPUI_${XPUI_UN}LICENSEPAGE_RADIOBUTTONS_TEXT_ACCEPT  "$(^AcceptBtn)"
    !insertmacro XPUI_DEFAULT XPUI_${XPUI_UN}LICENSEPAGE_RADIOBUTTONS_TEXT_DECLINE "$(^DontAcceptBtn)"
  !endif
  
  !insertmacro XPUI_CREATEID
  PageEx ${XPUI_UNFUNC}license
    
    Caption `$(XPUI_${XPUI_UN}LICENSEPAGE_CAPTION)`
    PageCallbacks ${XPUI_UNFUNC}XPUI.lic.${XPUI_UNIQUEID}.pre ${XPUI_UNFUNC}XPUI.lic.${XPUI_UNIQUEID}.show ${XPUI_UNFUNC}XPUI.lic.${XPUI_UNIQUEID}.leave
    LicenseData `${DATA}`
    
    !ifdef XPUI_LICENSEPAGE_RADIOBUTTONS
    LicenseForceSelection radiobuttons `${XPUI_${XPUI_UN}LICENSEPAGE_RADIOBUTTONS_TEXT_ACCEPT}` `${XPUI_${XPUI_UN}LICENSEPAGE_RADIOBUTTONS_TEXT_DECLINE}`
    !endif
    
    !ifdef XPUI_LICENSEPAGE_CHECKBOX
    LicenseForceSelection checkbox `${XPUI_${XPUI_UN}LICENSEPAGE_CHECKBOX_TEXT}`
    !endif
  
  PageExEnd
  
  !insertmacro XPUI_DEFAULT XPUI_LICENSEBKCOLOR 0xFFFFFF
  LicenseBkColor `${XPUI_LICENSEBKCOLOR}`
  
  Function ${XPUI_UNFUNC}XPUI.lic.${XPUI_UNIQUEID}.pre
    
    StrCmp $XPUI_ABORTED 1 0 +2
    Abort
    
    !insertmacro XPUI_PAGE_CUSTOMFUNCTION PRE
    
  FunctionEnd
  
  Function ${XPUI_UNFUNC}XPUI.lic.${XPUI_UNIQUEID}.show
    
    LockWindow On
  
    !insertmacro XPUI_HEADER_TEXT `${XPUI_${XPUI_UN}LICENSEPAGE_TITLE}` `${XPUI_${XPUI_UN}LICENSEPAGE_SUBTITLE}`
    
    FindWindow $XPUI_HWND `#32770` `` $HWNDPARENT
    !insertmacro XPUI_CONTROL_SKIN $XPUI_HWND
    
    GetDlgItem $XPUI_TEMP1 $XPUI_HWND 1034
    !insertmacro XPUI_CONTROL_SKIN_LIGHT $XPUI_TEMP1
      !ifdef XPUI_LICENSEPAGE_RESET
        SendMessage $XPUI_TEMP1 0x00F1 0 0
      !endif
    
    GetDlgItem $XPUI_TEMP1 $XPUI_HWND 1035
    !insertmacro XPUI_CONTROL_SKIN_LIGHT $XPUI_TEMP1
      !ifdef XPUI_LICENSEPAGE_RESET
        SendMessage $XPUI_TEMP1 0x00F1 0 0
        
        GetDlgItem $XPUI_TEMP1 $HWNDPARENT 1
        EnableWindow $XPUI_TEMP1 0
      !endif
      
    FindWindow $XPUI_HWND `#32770` `` $HWNDPARENT
      
    GetDlgItem $XPUI_TEMP1 $XPUI_HWND 1040
    !insertmacro XPUI_CONTROL_SKIN_PAGE $XPUI_TEMP1
    SendMessage $XPUI_TEMP1 0xC 0 `STR:${XPUI_${XPUI_UN}LICENSEPAGE_TEXT_TOP}`
    
    GetDlgItem $XPUI_TEMP1 $XPUI_HWND 1006
    !insertmacro XPUI_CONTROL_SKIN_PAGE $XPUI_TEMP1
    
    GetDlgItem $XPUI_TEMP1 $XPUI_HWND 1034
    !insertmacro XPUI_CONTROL_SKIN_LIGHT $XPUI_TEMP1
    
    GetDlgItem $XPUI_TEMP1 $XPUI_HWND 1035
    !insertmacro XPUI_CONTROL_SKIN_LIGHT $XPUI_TEMP1
    
    !ifndef XPUI_${XPUI_UN}LICENSEPAGE_RADIOBUTTONS
      !ifndef XPUI_${XPUI_UN}LICENSEPAGE_CHECKBOX
        !insertmacro XPUI_INNERDIALOG_TEXT `${XPUI_${XPUI_UN}LICENSEPAGE_TEXT_BOTTOM}` 1006
      !endif
    !endif
    
    !ifdef XPUI_${XPUI_UN}LICENSEPAGE_CHECKBOX
    !insertmacro XPUI_INNERDIALOG_TEXT `${XPUI_${XPUI_UN}LICENSEPAGE_TEXT_BOTTOM}` 1006
    !endif
    
    !ifdef XPUI_${XPUI_UN}LICENSEPAGE_RADIOBUTTONS
    !insertmacro XPUI_INNERDIALOG_TEXT `${XPUI_${XPUI_UN}LICENSEPAGE_TEXT_BOTTOM}` 1006
    !endif
    
    !insertmacro XPUI_CONTROL_SKIN_PAGE $XPUI_HWND
    
    !insertmacro XPUI_PAGE_CUSTOMFUNCTION SHOW
    
    LockWindow off
  FunctionEnd
  
  Function ${XPUI_UNFUNC}XPUI.lic.${XPUI_UNIQUEID}.leave
  !ifndef XPUI_NOLOCK
  LockWindow on
  !endif
  
  !insertmacro XPUI_PAGE_CUSTOMFUNCTION LEAVE
  
  FunctionEnd
  
  !insertmacro XPUI_UNSET XPUI_PAGE_CUSTOMFUNCTION_PRE
  !insertmacro XPUI_UNSET XPUI_PAGE_CUSTOMFUNCTION_SHOW
  !insertmacro XPUI_UNSET XPUI_PAGE_CUSTOMFUNCTION_LEAVE
  
  !undef XPUI_${XPUI_UN}LICENSEPAGE_CAPTION
  !undef XPUI_${XPUI_UN}LICENSEPAGE_TITLE
  !undef XPUI_${XPUI_UN}LICENSEPAGE_SUBTITLE
  !undef XPUI_${XPUI_UN}LICENSEPAGE_TEXT_TOP
  !undef XPUI_${XPUI_UN}LICENSEPAGE_TEXT_BOTTOM
  
  !insertmacro XPUI_UNSET XPUI_LICENSEPAGE_CHECKBOX
  !insertmacro XPUI_UNSET XPUI_LICENSEPAGE_RADIOBUTTONS
  
  !undef MUI_LICENSEPAGE_HEADER_TITLE
  !undef MUI_LICENSEPAGE_HEADER_SUBTITLE
  !undef MUI_LICENSEPAGE_TEXT_TOP
  !undef MUI_LICENSEPAGE_TEXT_BOTTOM
  !undef MUI_LICENSEPAGE_CAPTION
  
  !insertmacro XPUI_ENDPAGECHECKS

!macroend

!macro XPUI_PAGE_COMPONENTS

  !insertmacro XPUI_PAGECHECKS
  
  !ifndef XPUI_INTERNAL_PAGEUSED_COMPONENTS
    !define XPUI_INTERNAL_PAGEUSED_COMPONENTS
  !endif
  
  !insertmacro XPUI_DEFAULT XPUI_${XPUI_UN}COMPONENTSPAGE_TITLE "$(XPUI_${XPUI_UN}COMPONENTSPAGE_TITLE)"
  !insertmacro XPUI_DEFAULT XPUI_${XPUI_UN}COMPONENTSPAGE_SUBTITLE "$(XPUI_${XPUI_UN}COMPONENTSPAGE_SUBTITLE)"
  !insertmacro XPUI_DEFAULT XPUI_${XPUI_UN}COMPONENTSPAGE_CAPTION "$(XPUI_${XPUI_UN}COMPONENTSPAGE_CAPTION)"
  !insertmacro XPUI_DEFAULT XPUI_${XPUI_UN}COMPONENTSPAGE_TEXT_DESCRIPTION_INFO "$(XPUI_${XPUI_UN}COMPONENTSPAGE_TEXT_DESCRIPTION_INFO)"
  !insertmacro XPUI_DEFAULT XPUI_${XPUI_UN}COMPONENTSPAGE_TEXT_DESCRIPTION_TITLE "$(XPUI_${XPUI_UN}COMPONENTSPAGE_TEXT_DESCRIPTION_TITLE)"
  
  !insertmacro XPUI_DEFAULT XPUI_${XPUI_UN}COMPONENTSPAGE_TEXT_TOP      "$(^ComponentsText)"
  !insertmacro XPUI_DEFAULT XPUI_${XPUI_UN}COMPONENTSPAGE_TEXT_INSTTYPE "$(^ComponentsSubText1)"
  !insertmacro XPUI_DEFAULT XPUI_${XPUI_UN}COMPONENTSPAGE_TEXT_SECLIST  "$(^ComponentsSubText2)"
  !insertmacro XPUI_DEFAULT XPUI_${XPUI_UN}COMPONENTSPAGE_TEXT_SECLIST_NOINSTTYPE  "$(^ComponentsSubText2_NoInstTypes)"
  
  !insertmacro XPUI_CREATEID
  PageEx ${XPUI_UNFUNC}components
    Caption `$(XPUI_${XPUI_UN}COMPONENTSPAGE_CAPTION)`
    PageCallbacks ${XPUI_UNFUNC}XPUI.cmp.${XPUI_UNIQUEID}.pre ${XPUI_UNFUNC}XPUI.cmp.${XPUI_UNIQUEID}.show ${XPUI_UNFUNC}XPUI.cmp.${XPUI_UNIQUEID}.leave
    ComponentText "${XPUI_${XPUI_UN}COMPONENTSPAGE_TEXT_TOP}" "${XPUI_${XPUI_UN}COMPONENTSPAGE_TEXT_INSTTYPE}" "${XPUI_${XPUI_UN}COMPONENTSPAGE_TEXT_SECLIST}"
  PageExEnd
  
  Function ${XPUI_UNFUNC}XPUI.cmp.${XPUI_UNIQUEID}.pre
    
    StrCmp $XPUI_ABORTED 1 0 +2
      Abort
    
    !insertmacro XPUI_PAGE_CUSTOMFUNCTION PRE
  
  FunctionEnd
  
  Function ${XPUI_UNFUNC}XPUI.cmp.${XPUI_UNIQUEID}.show
  
    !insertmacro XPUI_HEADER_TEXT `${XPUI_${XPUI_UN}COMPONENTSPAGE_TITLE}` `${XPUI_${XPUI_UN}COMPONENTSPAGE_SUBTITLE}`
    
    !insertmacro XPUI_PAGECOLOR_INIT 1022
    !insertmacro XPUI_PAGECOLOR_INIT 1021
    !insertmacro XPUI_PAGECOLOR_INIT 1023
    !insertmacro XPUI_PAGECOLOR_INIT 1006
    !insertmacro XPUI_PAGECOLOR_INIT 1042
    !insertmacro XPUI_PAGECOLOR_INIT 1043
    
    FindWindow $XPUI_HWND "#32770" "" "$HWNDPARENT"
    GetDlgItem $XPUI_TEMP1 $XPUI_HWND 1032
    SetCtlColors $XPUI_TEMP1 0x000000 0xFFFFFF
    
    !insertmacro XPUI_CONTROL_SKIN_PAGE $XPUI_HWND
    
    GetDlgItem $XPUI_TEMP1 $XPUI_HWND 1043
      SendMessage $XPUI_TEMP1 0xC 0 `STR:${XPUI_${XPUI_UN}COMPONENTSPAGE_TEXT_DESCRIPTION_INFO}`
      StrCpy $XPUI_HWND "${XPUI_${XPUI_UN}COMPONENTSPAGE_TEXT_DESCRIPTION_INFO}"
      EnableWindow $XPUI_TEMP1 0
    
    InstTypeGetText 0 $XPUI_TEMP1
    StrCmp $XPUI_TEMP1 "" "" XPUI.using_insttypes
      !insertmacro XPUI_INNERDIALOG_TEXT "${XPUI_${XPUI_UN}COMPONENTSPAGE_TEXT_SECLIST_NOINSTTYPE}" 1022
      !insertmacro XPUI_INNERDIALOG_TEXT " " 1021
    XPUI.using_insttypes:
    
    !ifdef XPUI_COMPONENTSPAGE_NODESC
      FindWindow $XPUI_TEMP1 `#32770` `` `$HWNDPARENT`
      GetDlgItem $XPUI_TEMP2 $XPUI_TEMP1 1042
      ShowWindow $XPUI_TEMP2 0
      GetDlgItem $XPUI_TEMP2 $XPUI_TEMP1 1043
      ShowWindow $XPUI_TEMP2 0
    !endif
    
    !insertmacro XPUI_INNERDIALOG_TEXT `${XPUI_${XPUI_UN}COMPONENTSPAGE_TEXT_DESCRIPTION_TITLE}` 1042
    StrCpy $XPUI_TEMP2 "${XPUI_${XPUI_UN}COMPONENTSPAGE_TEXT_DESCRIPTION_TITLE}"
    
    !insertmacro XPUI_PAGE_CUSTOMFUNCTION SHOW
    
    !ifndef XPUI_NOLOCK
    LockWindow off
    !endif
  FunctionEnd
  
  Function ${XPUI_UNFUNC}XPUI.cmp.${XPUI_UNIQUEID}.leave
  
    !ifndef XPUI_NOLOCK
      LockWindow on
    !endif
    
    !insertmacro XPUI_PAGE_CUSTOMFUNCTION LEAVE
  
  FunctionEnd
  
  !insertmacro XPUI_UNSET XPUI_PAGE_CUSTOMFUNCTION_PRE
  !insertmacro XPUI_UNSET XPUI_PAGE_CUSTOMFUNCTION_SHOW
  !insertmacro XPUI_UNSET XPUI_PAGE_CUSTOMFUNCTION_LEAVE
  
  !undef XPUI_${XPUI_UN}COMPONENTSPAGE_TITLE
  !undef XPUI_${XPUI_UN}COMPONENTSPAGE_CAPTION
  !undef XPUI_${XPUI_UN}COMPONENTSPAGE_SUBTITLE
  !undef XPUI_${XPUI_UN}COMPONENTSPAGE_TEXT_DESCRIPTION_TITLE
  !undef XPUI_${XPUI_UN}COMPONENTSPAGE_TEXT_DESCRIPTION_INFO
  !undef XPUI_${XPUI_UN}COMPONENTSPAGE_TEXT_TOP
  !undef XPUI_${XPUI_UN}COMPONENTSPAGE_TEXT_INSTTYPE
  !undef XPUI_${XPUI_UN}COMPONENTSPAGE_TEXT_SECLIST
  !undef XPUI_${XPUI_UN}COMPONENTSPAGE_TEXT_SECLIST_NOINSTTYPE
  
  !insertmacro XPUI_ENDPAGECHECKS

!macroend

!macro XPUI_PAGE_DIRECTORY

  !insertmacro XPUI_PAGECHECKS
  
  !ifndef XPUI_INTERNAL_PAGEUSED_DIRECTORY
    !define XPUI_INTERNAL_PAGEUSED_DIRECTORY
  !endif
  
  !insertmacro XPUI_DEFAULT MUI_DIRECTORYPAGE_HEADER_TITLE     "$(XPUI_${XPUI_UN}DIRECTORYPAGE_TITLE)"
  !insertmacro XPUI_DEFAULT MUI_DIRECTORYPAGE_HEADER_SUBTITLE  "$(XPUI_${XPUI_UN}DIRECTORYPAGE_SUBTITLE)"
  !insertmacro XPUI_DEFAULT MUI_DIRECTORYPAGE_TEXT_TOP         "$(XPUI_${XPUI_UN}DIRECTORYPAGE_TEXT_TOP)"
  !insertmacro XPUI_DEFAULT MUI_DIRECTORYPAGE_CAPTION          "$(XPUI_${XPUI_UN}DIRECTORYPAGE_CAPTION)"
  !insertmacro XPUI_DEFAULT MUI_DIRECTORYPAGE_TEXT_DESTINATION "$(^DirSubText)"
  !insertmacro XPUI_DEFAULT MUI_DIRECTORYPAGE_BROWSEDIALOG     "$(^DirBrowseText)"
  !insertmacro XPUI_DEFAULT MUI_DIRECTORYPAGE_BROWSEBUTTON     "$(^BrowseBtn)"
    
  !insertmacro XPUI_DEFAULT XPUI_${XPUI_UN}DIRECTORYPAGE_TITLE         "${MUI_DIRECTORYPAGE_HEADER_TITLE}"
  !insertmacro XPUI_DEFAULT XPUI_${XPUI_UN}DIRECTORYPAGE_SUBTITLE      "${MUI_DIRECTORYPAGE_HEADER_SUBTITLE}"
  !insertmacro XPUI_DEFAULT XPUI_${XPUI_UN}DIRECTORYPAGE_CAPTION       "${MUI_DIRECTORYPAGE_CAPTION}"
  !insertmacro XPUI_DEFAULT XPUI_${XPUI_UN}DIRECTORYPAGE_TEXT_TOP      "${MUI_DIRECTORYPAGE_TEXT_TOP}"
  !insertmacro XPUI_DEFAULT XPUI_${XPUI_UN}DIRECTORYPAGE_SUBTEXT       "${MUI_DIRECTORYPAGE_TEXT_DESTINATION}"
  !insertmacro XPUI_DEFAULT XPUI_${XPUI_UN}DIRECTORYPAGE_BROWSEDIALOG  "${MUI_DIRECTORYPAGE_BROWSEDIALOG}"
  !insertmacro XPUI_DEFAULT XPUI_${XPUI_UN}DIRECTORYPAGE_BROWSEBUTTON  "${MUI_DIRECTORYPAGE_BROWSEBUTTON}"
  
  !insertmacro XPUI_DEFAULT MUI_DIRECTORYPAGE_VARIABLE "$INSTDIR"
  !insertmacro XPUI_DEFAULT XPUI_DIRVAR "${MUI_DIRECTORYPAGE_VARIABLE}"
  
  PageEx ${XPUI_UNFUNC}directory
    Caption `${XPUI_${XPUI_UN}DIRECTORYPAGE_CAPTION}`
    DirVar ${XPUI_DIRVAR}
    PageCallbacks ${XPUI_UNFUNC}XPUI.dir.${XPUI_UNIQUEID}.pre ${XPUI_UNFUNC}XPUI.dir.${XPUI_UNIQUEID}.show ${XPUI_UNFUNC}XPUI.dir.${XPUI_UNIQUEID}.leave
    DirText "${XPUI_${XPUI_UN}DIRECTORYPAGE_TEXT_TOP}" "${XPUI_${XPUI_UN}DIRECTORYPAGE_SUBTEXT}" "${XPUI_${XPUI_UN}DIRECTORYPAGE_BROWSEBUTTON}" "${XPUI_${XPUI_UN}DIRECTORYPAGE_BROWSEDIALOG}"
  PageExEnd
  
  Function ${XPUI_UNFUNC}XPUI.dir.${XPUI_UNIQUEID}.pre
    StrCmp $XPUI_ABORTED 1 0 +2
      Abort
    
    !insertmacro XPUI_PAGE_CUSTOMFUNCTION PRE
    
  FunctionEnd
  
  Function ${XPUI_UNFUNC}XPUI.dir.${XPUI_UNIQUEID}.show
  
    !insertmacro XPUI_HEADER_TEXT `${XPUI_${XPUI_UN}DIRECTORYPAGE_TITLE}` `${XPUI_${XPUI_UN}DIRECTORYPAGE_SUBTITLE}`
    
    FindWindow $XPUI_TEMP1 `#32770` `` $HWNDPARENT
    !insertmacro XPUI_CONTROL_SKIN $XPUI_TEMP1
    
    !insertmacro XPUI_DEFAULT XPUI_DIRECTORYPAGE_TEXTBOX_COLOR "${XPUI_TEXT_BGCOLOR}"
    
    GetDlgItem $XPUI_TEMP1 $XPUI_TEMP1 1019
    SetCtlColors $XPUI_TEMP1 0x000000 0xFFFFFF
    
    !insertmacro XPUI_PAGECOLOR_INIT 1001
    !insertmacro XPUI_PAGECOLOR_INIT 1008
    !insertmacro XPUI_PAGECOLOR_INIT 1006
    !insertmacro XPUI_PAGECOLOR_INIT 1020
    !insertmacro XPUI_PAGECOLOR_INIT 1023
    !insertmacro XPUI_PAGECOLOR_INIT 1024
    
    !insertmacro XPUI_PAGE_CUSTOMFUNCTION SHOW
    
    !ifndef XPUI_NOLOCK
    LockWindow off
    !endif
    FunctionEnd
    
  Function ${XPUI_UNFUNC}XPUI.dir.${XPUI_UNIQUEID}.leave
    
    !ifndef XPUI_NOLOCK
    LockWindow on
    !endif
    
    !insertmacro XPUI_PAGE_CUSTOMFUNCTION LEAVE
  
  FunctionEnd
  
  !undef XPUI_DIRVAR
  !insertmacro XPUI_UNSET XPUI_PAGE_CUSTOMFUNCTION_PRE
  !insertmacro XPUI_UNSET XPUI_PAGE_CUSTOMFUNCTION_SHOW
  !insertmacro XPUI_UNSET XPUI_PAGE_CUSTOMFUNCTION_LEAVE
  
  !undef XPUI_${XPUI_UN}DIRECTORYPAGE_TITLE
  !undef XPUI_${XPUI_UN}DIRECTORYPAGE_SUBTITLE
  !undef XPUI_${XPUI_UN}DIRECTORYPAGE_CAPTION
  !undef XPUI_${XPUI_UN}DIRECTORYPAGE_TEXT_TOP
  !undef XPUI_${XPUI_UN}DIRECTORYPAGE_SUBTEXT
  !undef XPUI_${XPUI_UN}DIRECTORYPAGE_BROWSEBUTTON
  !undef XPUI_${XPUI_UN}DIRECTORYPAGE_BROWSEDIALOG
  
  !undef MUI_DIRECTORYPAGE_HEADER_TITLE
  !undef MUI_DIRECTORYPAGE_HEADER_SUBTITLE
  !undef MUI_DIRECTORYPAGE_TEXT_TOP
  !undef MUI_DIRECTORYPAGE_CAPTION
  !undef MUI_DIRECTORYPAGE_TEXT_DESTINATION
  !undef MUI_DIRECTORYPAGE_BROWSEDIALOG
  !undef MUI_DIRECTORYPAGE_BROWSEBUTTON
  
  !insertmacro XPUI_ENDPAGECHECKS

!macroend

; Before you read this code, let me tell you a secret:
; I HAD TO WRITE THIS D*** THING MYSELF because the StartMenu.dll plugin is too shy - it has to hide behind any control
; below it - in this case, LABEL 1099, the background for the entire window.  The only other option was to discontinue
; the start menu page...be glad I chose to write a new one...

!macro XPUI_PAGE_STARTMENU_INIT ID VAR

  !insertmacro XPUI_PAGECHECKS

  !ifndef XPUI_INTERNAL_PAGEUSED_STARTMENU
    !define XPUI_INTERNAL_PAGEUSED_STARTMENU
  !endif
  
  !insertmacro XPUI_CREATEID
  
  !insertmacro XPUI_DEFAULT XPUI_INTERNAL_STARTMENUPAGE_ID_DEFAULT ${ID}

  !insertmacro XPUI_DEFAULT MUI_STARTMENUPAGE_DEFAULTFOLDER "$(^Name)"
  !insertmacro XPUI_DEFAULT XPUI_STARTMENUPAGE_DEFAULTFOLDER "${MUI_STARTMENUPAGE_DEFAULTFOLDER}"
  !insertmacro XPUI_DEFAULT XPUI_STARTMENUPAGE_FOLDER "${XPUI_STARTMENUPAGE_DEFAULTFOLDER}"
  
  !define XPUI_STARTMENUPAGE_VARIABLE "${VAR}"
  !define "XPUI_STARTMENUPAGE_${ID}_VARIABLE" "${XPUI_STARTMENUPAGE_VARIABLE}"
  !define "XPUI_STARTMENUPAGE_${ID}_DEFAULTFOLDER" "${XPUI_STARTMENUPAGE_FOLDER}"
  
  !ifdef MUI_STARTMENUPAGE_REGISTRY_ROOT & MUI_STARTMENUPAGE_REGISTRY_KEY & MUI_STARTMENUPAGE_REGISTRY_VALUENAME

  !ifdef MUI_STARTMENUPAGE_REGISTRY_ROOT
    !define "XPUI_STARTMENUPAGE_${ID}_REGISTRY_ROOT" "${MUI_STARTMENUPAGE_REGISTRY_ROOT}"
  !endif
  !ifdef MUI_STARTMENUPAGE_REGISTRY_KEY
    !define "XPUI_STARTMENUPAGE_${ID}_REGISTRY_KEY" "${MUI_STARTMENUPAGE_REGISTRY_KEY}"
  !endif
  !ifdef MUI_STARTMENUPAGE_REGISTRY_VALUENAME
    !define "XPUI_STARTMENUPAGE_${ID}_REGISTRY_VALUENAME" "${MUI_STARTMENUPAGE_REGISTRY_VALUENAME}"
  !endif
  
  !else ifdef XPUI_STARTMENUPAGE_REGISTRY_ROOT & XPUI_STARTMENUPAGE_REGISTRY_KEY & XPUI_STARTMENUPAGE_REGISTRY_VALUENAME
  
  !ifdef XPUI_STARTMENUPAGE_REGISTRY_ROOT
    !define "XPUI_STARTMENUPAGE_${ID}_REGISTRY_ROOT" "${XPUI_STARTMENUPAGE_REGISTRY_ROOT}"
  !endif
  !ifdef XPUI_STARTMENUPAGE_REGISTRY_KEY
    !define "XPUI_STARTMENUPAGE_${ID}_REGISTRY_KEY" "${XPUI_STARTMENUPAGE_REGISTRY_KEY}"
  !endif
  !ifdef XPUI_STARTMENUPAGE_REGISTRY_VALUENAME
    !define "XPUI_STARTMENUPAGE_${ID}_REGISTRY_VALUENAME" "${XPUI_STARTMENUPAGE_REGISTRY_VALUENAME}"
  !endif
  
  !endif
  
  !ifdef XPUI_FASTERSKINNING
    !insertmacro XPUI_STARTMENUPAGE_INITARRAY
  !endif
  
  !define XPUI_STARTMENUPAGE_${ID}_ID "${XPUI_UNIQUEID}"
  
  Function ${XPUI_UNFUNC}xpui.StartMenu.show.${XPUI_UNIQUEID}
    StrCmp $XPUI_ABORTED 1 0 +2
      Abort
    
    !insertmacro XPUI_PAGE_CUSTOMFUNCTION PRE

     !ifdef XPUI_STARTMENUPAGE_REGISTRY_ROOT & XPUI_STARTMENUPAGE_REGISTRY_KEY & XPUI_STARTMENUPAGE_REGISTRY_VALUENAME

      StrCmp "${XPUI_STARTMENUPAGE_VARIABLE}" "" 0 +4

      ReadRegStr $XPUI_TEMP1 "${XPUI_STARTMENUPAGE_REGISTRY_ROOT}" "${XPUI_STARTMENUPAGE_REGISTRY_KEY}" "${XPUI_STARTMENUPAGE_REGISTRY_VALUENAME}"
        StrCmp $XPUI_TEMP1 "" +2
          StrCpy "${XPUI_STARTMENUPAGE_VARIABLE}" $XPUI_TEMP1

    !endif
    
    StrCmp `${XPUI_STARTMENUPAGE_VARIABLE}` `` 0 +2
      StrCpy `${XPUI_STARTMENUPAGE_VARIABLE}` `${XPUI_STARTMENUPAGE_FOLDER}`
    !ifdef XPUI_FASTERSKINNING
    IfFileExists $PLUGINSDIR\StartMenu.ini 0 +2
      ReadINIStr ${XPUI_STARTMENUPAGE_VARIABLE} $PLUGINSDIR\StartMenu.ini "Field 2" State
    !else
    IfFileExists $PLUGINSDIR\StartMenu.ini 0 +2
      ReadINIStr $XPUI_TEMP1 $PLUGINSDIR\StartMenu.ini "Field 2" State
      StrCmp $XPUI_TEMP1 '$$(^Name)' +2
      StrCpy ${XPUI_STARTMENUPAGE_VARIABLE} $XPUI_TEMP1
    !endif
    
    !insertmacro XPUI_HEADER_TEXT $(XPUI_${XPUI_UN}STARTMENUPAGE_TITLE) $(XPUI_${XPUI_UN}STARTMENUPAGE_SUBTITLE)
    
    !ifdef XPUI_FASTERSKINNING
    
      !insertmacro XPUI_STARTMENUPAGE_CREATEINI
      
    !else
    
    !endif
    
      WriteINIStr $PLUGINSDIR\StartMenu.ini "Field 3" State "${XPUI_STARTMENUPAGE_VARIABLE}"
      WriteINIStr $PLUGINSDIR\StartMenu.ini `Settings` `RTL` `$(^RTL)`
      
      InstallOptions::initDialog /NOUNLOAD $PLUGINSDIR\Startmenu.ini
        Pop $XPUI_HWND
        !insertmacro XPUI_CONTROL_SKIN_PAGE $XPUI_HWND
        GetDlgItem $XPUI_TEMP1 $XPUI_HWND 1200
          !insertmacro XPUI_CONTROL_SKIN_PAGE $XPUI_TEMP1
          SendMessage $XPUI_TEMP1 0xC 0 `STR:$(XPUI_${XPUI_UN}STARTMENUPAGE_TEXT)`
        GetDlgItem $XPUI_TEMP1 $XPUI_HWND 1201
        !insertmacro XPUI_CONTROL_SKIN $XPUI_TEMP1
          SendMessage $XPUI_TEMP1 0xC 0 "STR:${XPUI_STARTMENUPAGE_VARIABLE}"
        GetDlgItem $XPUI_TEMP1 $XPUI_HWND 1202
        !insertmacro XPUI_CONTROL_SKIN_PAGE $XPUI_TEMP1
        GetDlgItem $XPUI_TEMP1 $XPUI_HWND 1203
        !insertmacro XPUI_CONTROL_SKIN $XPUI_TEMP1
        SendMessage $XPUI_TEMP1 0xC 0 `STR:$(XPUI_${XPUI_UN}STARTMENUPAGE_CHECKBOX)`
        !ifdef XPUI_STARTMENUPAGE_NODISABLE
          ShowWindow $XPUI_TEMP1 0
        !endif
        LockWindow off
        !insertmacro XPUI_PAGE_CUSTOMFUNCTION SHOW
        GetDlgItem $XPUI_TEMP1 $HWNDPARENT 1099
        ShowWindow $XPUI_TEMP1 0
        !ifndef XPUI_BGIMAGE
        SetBrandingImage /IMGID=1302 "$PLUGINSDIR\LeftImg.bmp"
        !else
        SetBrandingImage /IMGID=1099 "$PLUGINSDIR\BgImage.bmp"
        !endif
        GetDlgItem $XPUI_TEMP1 $HWNDPARENT 1099
        ShowWindow $XPUI_TEMP1 5
      InstallOptions::show

    LockWindow off
    
  FunctionEnd
  
  Function ${XPUI_UNFUNC}xpui.StartMenu.leave.${XPUI_UNIQUEID}
  
    LockWindow on
    ReadINIStr $XPUI_TEMP1 $PLUGINSDIR\StartMenu.ini Settings State
    StrCmp $XPUI_TEMP1 3 list
    StrCmp $XPUI_TEMP1 4 check
    goto done
    list:
      ReadINIStr $XPUI_TEMP1 $PLUGINSDIR\StartMenu.ini "Field 3" State
      GetDlgItem $XPUI_TEMP2 $XPUI_HWND 1201
      SendMessage $XPUI_TEMP2 0xC 0 STR:$XPUI_TEMP1
      LockWindow off
      abort
    check:
      ReadINIStr $XPUI_TEMP1 $PLUGINSDIR\StartMenu.ini "Field 4" State
      StrCmp $XPUI_TEMP1 1 +3
        StrCpy $XPUI_TEMP1 1
        goto +2
        StrCpy $XPUI_TEMP1 0
      GetDlgItem $XPUI_TEMP2 $XPUI_HWND 1201
      EnableWindow $XPUI_TEMP2 $XPUI_TEMP1
      GetDlgItem $XPUI_TEMP2 $XPUI_HWND 1202
      EnableWindow $XPUI_TEMP2 $XPUI_TEMP1
      
      StrCpy $XPUI_TEMP2 "NOTIFY"
      StrCmp $XPUI_TEMP1 0 0 +2
        StrCpy $XPUI_TEMP2 "NOTIFY|DISABLED"
      WriteINIStr $PLUGINSDIR\StartMenu.ini "Field 2" Flags $XPUI_TEMP2
      WriteINIStr $PLUGINSDIR\StartMenu.ini "Field 3" Flags $XPUI_TEMP2
      LockWindow off
      abort
    done:
      
      ReadINIStr ${XPUI_STARTMENUPAGE_VARIABLE} $PLUGINSDIR\StartMenu.ini "Field 2" State
      ReadINIStr $XPUI_TEMP1 $PLUGINSDIR\StartMenu.ini "Field 4" State
      StrCmp $XPUI_TEMP1 1 0 +2
        StrCpy ${XPUI_STARTMENUPAGE_VARIABLE} >${XPUI_STARTMENUPAGE_VARIABLE}
  
    !insertmacro XPUI_PAGE_CUSTOMFUNCTION LEAVE
    
    GetDlgItem $XPUI_TEMP1 $HWNDPARENT 1099
      ShowWindow $XPUI_TEMP1 5
    
  FunctionEnd

  !undef XPUI_STARTMENUPAGE_VARIABLE
  
  !ifdef XPUI_FASTERSKINNING
    !insertmacro XPUI_STARTMENUPAGE_KILLARRAY
  !endif
  
  !insertmacro XPUI_ENDPAGECHECKS
  
!macroend

!macro XPUI_PAGE_STARTMENU_SHOW ID
  
  PageEx ${XPUI_UNFUNC}custom 
    PageCallbacks ${XPUI_UNFUNC}xpui.StartMenu.show.${XPUI_STARTMENUPAGE_${ID}_ID} ${XPUI_UNFUNC}xpui.StartMenu.leave.${XPUI_STARTMENUPAGE_${ID}_ID}
    Caption "$(XPUI_${XPUI_UN}STARTMENUPAGE_CAPTION)"
  PageExEnd
  
  !undef XPUI_STARTMENUPAGE_${ID}_ID

!macroend

!macro XPUI_PAGE_STARTMENU ID VAR
  !insertmacro XPUI_PAGE_STARTMENU_INIT `${ID}` `${VAR}`
  !insertmacro XPUI_PAGE_STARTMENU_SHOW `${ID}`
!macroend

!macro XPUI_STARTMENUPAGE_INITARRAY

  !ifndef XPUI_INTERNAL_SMPAGE_ARRAY_DEFINED
  !define XPUI_INTERNAL_SMPAGE_ARRAY_DEFINED

  !include "${NSISDIR}\Include\NSISArray.nsh"
  ${Array} xpuiSM 1024 128
  ${ArrayFunc} Read
  ${ArrayFunc} Clear
  ${ArrayFunc} Push
  ${ArrayFunc} Reverse
  ${ArrayFunc} ReadFirst
  ${ArrayFunc} ReadNext
  ${ArrayFunc} Sort
  ${ArrayFunc} ExistsI
  ${ArrayFunc} ReadClose
  ${ArrayFunc} Debug
  !endif
!macroend

!macro XPUI_STARTMENUPAGE_KILLARRAY
  !ifdef xpui.ArrayNoValVar.notDefined
    !undef ArrayNoValVar
  !endif
!macroend

!macro XPUI_STARTMENUPAGE_CREATEINI
  !ifndef "xpuiSM${Array_Obj}Init"
    !insertmacro XPUI_STARTMENUPAGE_INITARRAY
  !endif
  SetOutPath $PLUGINSDIR
    IfFileExists $PLUGINSDIR\StartMenu.ini +2
    File "${XPUI_SYSDIR}\INI\StartMenu.ini"
    StrCpy $XPUI_TEMP2 ""

    !ifndef XPUI_INTERNAL_SMPAGE_ARRAY_INITED
    !define XPUI_INTERNAL_SMPAGE_ARRAY_INITED
    ${xpuiSM${Array_Obj}Init}
    !endif

    SetShellVarContext current
    FindFirst $XPUI_HWND $XPUI_TEMP1 "$SMPROGRAMS\*"
    FindNext  $XPUI_HWND $XPUI_TEMP1
      loop:
      FindNext  $XPUI_HWND $XPUI_TEMP1
      StrCmp $XPUI_TEMP1 "" exit
      IfFileExists $SMPROGRAMS\$XPUI_TEMP1\* add
      goto loop
      add:
        ${xpuiSM${Array_Obj}ExistsI} $XPUI_TEMP2 $XPUI_TEMP1 0
        StrCmp $XPUI_TEMP2 -1 "" NoAdd
          ${xpuiSM${Array_Obj}Push} $XPUI_TEMP1
        NoAdd:
      goto loop
      exit:
      FindClose $XPUI_HWND
    SetShellVarContext all
    FindFirst $XPUI_HWND $XPUI_TEMP1 "$SMPROGRAMS\*"
    FindNext  $XPUI_HWND $XPUI_TEMP1
      loop2:
      FindNext  $XPUI_HWND $XPUI_TEMP1
      StrCmp $XPUI_TEMP1 "" exit2
      IfFileExists $SMPROGRAMS\$XPUI_TEMP1\* add2
      goto loop2
      add2:
        ${xpuiSM${Array_Obj}ExistsI} $XPUI_TEMP2 $XPUI_TEMP1 0
        StrCmp $XPUI_TEMP2 -1 "" NoAdd2
          ${xpuiSM${Array_Obj}Push} $XPUI_TEMP1
        NoAdd2:
      goto loop2
      exit2:
      FindClose $XPUI_HWND

      ${xpuiSM${Array_Obj}Sort} ""

      ; Build the list
      StrCpy $XPUI_HWND  ""
      StrCpy $XPUI_TEMP1 ""
      StrCpy $XPUI_TEMP2 ""
      ClearErrors
      ${xpuiSM${Array_Obj}ReadFirst} $XPUI_TEMP1 $XPUI_TEMP2
        build:
        IfErrors finish
        StrCmp $XPUI_TEMP2 "" finish
        StrCpy $XPUI_HWND $XPUI_HWND|$XPUI_TEMP2
        ClearErrors
        ${xpuiSM${Array_Obj}ReadNext} $XPUI_TEMP1 $XPUI_TEMP2
        Goto build
      finish:
      ${xpuiSM${Array_Obj}ReadClose} $XPUI_TEMP1
      ${xpuiSM${Array_Obj}Delete}
      StrCpy $XPUI_HWND $XPUI_HWND "" 1
      
      WriteINIStr $PLUGINSDIR\StartMenu.ini "Field 3" ListItems $XPUI_HWND

!macroend

!macro XPUI_STARTMENU_GETFOLDER ID VAR

  !ifdef XPUI_STARTMENUPAGE_${ID}_REGISTRY_ROOT & XPUI_STARTMENUPAGE_${ID}_REGISTRY_KEY & XPUI_STARTMENUPAGE_${ID}_REGISTRY_VALUENAME

    ReadRegStr $XPUI_TEMP1 "${XPUI_STARTMENUPAGE_${ID}_REGISTRY_ROOT}" "${XPUI_STARTMENUPAGE_${ID}_REGISTRY_KEY}" "${XPUI_STARTMENUPAGE_${ID}_REGISTRY_VALUENAME}"
      StrCmp $XPUI_TEMP1 "" +3
        StrCpy "${VAR}" $XPUI_TEMP1
        Goto +2

        StrCpy "${VAR}" "${XPUI_STARTMENUPAGE_${ID}_DEFAULTFOLDER}"

   !else
   
     StrCpy "${VAR}" "${XPUI_STARTMENUPAGE_${ID}_DEFAULTFOLDER}"

   !endif

!macroend

!macro XPUI_STARTMENU_WRITE_BEGIN ID

  !verbose push
  !verbose ${XPUI_VERBOSE}

  !define XPUI_STARTMENUPAGE_CURRENT_ID "${ID}"

  StrCpy $XPUI_TEMP1 "${XPUI_STARTMENUPAGE_${XPUI_STARTMENUPAGE_CURRENT_ID}_VARIABLE}" 1
  StrCmp $XPUI_TEMP1 ">" XPUI.startmenu_write_${XPUI_STARTMENUPAGE_CURRENT_ID}_done

  StrCmp "${XPUI_STARTMENUPAGE_${XPUI_STARTMENUPAGE_CURRENT_ID}_VARIABLE}" "" 0 XPUI.startmenu_writebegin_${XPUI_STARTMENUPAGE_CURRENT_ID}_notempty

    !insertmacro XPUI_STARTMENU_GETFOLDER "${XPUI_STARTMENUPAGE_CURRENT_ID}" "${XPUI_STARTMENUPAGE_${XPUI_STARTMENUPAGE_CURRENT_ID}_VARIABLE}"

  XPUI.startmenu_writebegin_${XPUI_STARTMENUPAGE_CURRENT_ID}_notempty:

  !verbose pop

!macroend

!macro XPUI_STARTMENU_WRITE_END

  !verbose push
  !verbose ${XPUI_VERBOSE}

  !ifdef XPUI_STARTMENUPAGE_${XPUI_STARTMENUPAGE_CURRENT_ID}_REGISTRY_ROOT & XPUI_STARTMENUPAGE_${XPUI_STARTMENUPAGE_CURRENT_ID}_REGISTRY_KEY & XPUI_STARTMENUPAGE_${XPUI_STARTMENUPAGE_CURRENT_ID}_REGISTRY_VALUENAME
    WriteRegStr "${XPUI_STARTMENUPAGE_${XPUI_STARTMENUPAGE_CURRENT_ID}_REGISTRY_ROOT}" "${XPUI_STARTMENUPAGE_${XPUI_STARTMENUPAGE_CURRENT_ID}_REGISTRY_KEY}" "${XPUI_STARTMENUPAGE_${XPUI_STARTMENUPAGE_CURRENT_ID}_REGISTRY_VALUENAME}" "${XPUI_STARTMENUPAGE_${XPUI_STARTMENUPAGE_CURRENT_ID}_VARIABLE}"
  !endif

  XPUI.startmenu_write_${XPUI_STARTMENUPAGE_CURRENT_ID}_done:

  !undef XPUI_STARTMENUPAGE_CURRENT_ID

  !verbose pop

!macroend

; END START MENU PAGE

; INSTALL CONFIRMATION PAGE
!macro XPUI_PAGE_INSTCONFIRM

  !insertmacro XPUI_PAGECHECKS
  
  !ifndef XPUI_INTERNAL_PAGEUSED_INSTCONFIRM
    !define XPUI_INTERNAL_PAGEUSED_INSTCONFIRM
  !endif
  
  !insertmacro XPUI_DEFAULT XPUI_${XPUI_UN}INSTCONFIRMPAGE_TITLE "$(XPUI_${XPUI_UN}INSTCONFIRMPAGE_TITLE)"
  !insertmacro XPUI_DEFAULT XPUI_${XPUI_UN}INSTCONFIRMPAGE_SUBTITLE "$(XPUI_${XPUI_UN}INSTCONFIRMPAGE_SUBTITLE)"
  !insertmacro XPUI_DEFAULT XPUI_${XPUI_UN}INSTCONFIRMPAGE_CAPTION "$(XPUI_${XPUI_UN}INSTCONFIRMPAGE_CAPTION)"
  !insertmacro XPUI_DEFAULT XPUI_${XPUI_UN}INSTCONFIRMPAGE_TEXT_TOP "$(XPUI_${XPUI_UN}INSTCONFIRMPAGE_TEXT_TOP)"
  !insertmacro XPUI_DEFAULT XPUI_${XPUI_UN}INSTCONFIRMPAGE_TEXT_BOTTOM "$(XPUI_${XPUI_UN}INSTCONFIRMPAGE_TEXT_BOTTOM)"
  
  !insertmacro XPUI_CREATEID
  
  PageEx ${XPUI_UNFUNC}custom
    Caption `${XPUI_${XPUI_UN}INSTCONFIRMPAGE_CAPTION}`
    PageCallbacks `${XPUI_UNFUNC}XPUI.instconfirm.${XPUI_UNIQUEID}.show` `${XPUI_UNFUNC}XPUI.instconfirm.${XPUI_UNIQUEID}.verify`
  PageExEnd
  
  Function `${XPUI_UNFUNC}XPUI.instconfirm.${XPUI_UNIQUEID}.show`
    
    StrCmp $XPUI_ABORTED 1 0 +2
      Abort
      
    !ifdef XPUI_FASTERSKINNING
    SetOutPath $PLUGINSDIR
    File `${XPUI_SYSDIR}\INI\confirm.ini`
    !endif
    
    !insertmacro XPUI_HEADER_TEXT `${XPUI_${XPUI_UN}INSTCONFIRMPAGE_TITLE}` `${XPUI_${XPUI_UN}INSTCONFIRMPAGE_SUBTITLE}`
    
    !insertmacro XPUI_PAGE_CUSTOMFUNCTION PRE
    
    WriteINIStr $PLUGINSDIR\Confirm.ini `Field 1` Text `${XPUI_${XPUI_UN}INSTCONFIRMPAGE_TEXT_TOP}`
    WriteINIStr $PLUGINSDIR\Confirm.ini `Field 2` Text `${XPUI_${XPUI_UN}INSTCONFIRMPAGE_TEXT_BOTTOM}`
    !ifdef XPUI_INSTCONFIRMPAGE_INFOBOX
      WriteINIStr $PLUGINSDIR\Confirm.ini `Field 2` Bottom 98
      WriteINIStr $PLUGINSDIR\Confirm.ini `Field 5` Type Text
      WriteINIStr $PLUGINSDIR\Confirm.ini `Field 5` Flags GROUP|MULTILINE|READONLY
      WriteINIStr $PLUGINSDIR\Confirm.ini `Field 5` Left 6
      WriteINIStr $PLUGINSDIR\Confirm.ini `Field 5` Right -1
      WriteINIStr $PLUGINSDIR\Confirm.ini `Field 5` Top 104
      WriteINIStr $PLUGINSDIR\Confirm.ini `Field 5` Bottom 204
      WriteINIStr $PLUGINSDIR\Confirm.ini `Field 5` State `Installation Settings:\r\n______________________________________________________________\r\n\r\nDestination folder: $INSTDIR`
    
      !ifdef XPUI_INTERNAL_STARTMENUPAGE_ID_DEFAULT
        !insertmacro XPUI_STARTMENU_WRITE_BEGIN ${XPUI_INTERNAL_STARTMENUPAGE_ID_DEFAULT}
        WriteINIStr $PLUGINSDIR\Confirm.ini `Field 5` State `Installation Settings:\r\n______________________________________________________________\r\n\r\nDestination folder: $INSTDIR\r\nStart Menu Folder: ${XPUI_STARTMENUPAGE_${XPUI_INTERNAL_STARTMENUPAGE_ID_DEFAULT}_VARIABLE}`
        !insertmacro XPUI_STARTMENU_WRITE_END
      !endif
      
      WriteINIStr $PLUGINSDIR\Confirm.ini `Settings` Numfields 5
    !endif
    WriteINIStr `$PLUGINSDIR\Confirm.ini` `Settings` `RTL` `$(^RTL)`
    InstallOptions::initDialog /NOUNLOAD $PLUGINSDIR\confirm.ini
    Pop $XPUI_TEMP2
    !insertmacro XPUI_CONTROL_SKIN_PAGE $XPUI_TEMP2
    
    !insertmacro XPUI_PAGE_CUSTOMFUNCTION SHOW
    
    GetDlgItem $XPUI_TEMP1 $XPUI_TEMP2 1200
    !insertmacro XPUI_CONTROL_SKIN_PAGE $XPUI_TEMP1
    GetDlgItem $XPUI_TEMP1 $XPUI_TEMP2 1201
    !insertmacro XPUI_CONTROL_SKIN_PAGE $XPUI_TEMP1
    GetDlgItem $XPUI_TEMP1 $XPUI_TEMP2 1202
    !insertmacro XPUI_CONTROL_SKIN_PAGE $XPUI_TEMP1
    GetDlgItem $XPUI_TEMP1 $XPUI_TEMP2 1203
    !insertmacro XPUI_CONTROL_SKIN_PAGE $XPUI_TEMP1
    GetDlgItem $XPUI_TEMP1 $XPUI_TEMP2 1204
    !insertmacro XPUI_CONTROL_SKIN_PAGE $XPUI_TEMP1
    !ifndef XPUI_NOLOCK
    LockWindow off
    !endif
    
    !ifdef UMUI_CONFIRMPAGE_TEXTBOX
    Goto +2
    Call `${UMUI_CONFIRMPAGE_TEXTBOX}`
    !undef UMUI_CONFIRMPAGE_TEXTBOX
    !endif
          
    InstallOptions::show
    
  FunctionEnd
  
  Function `${XPUI_UNFUNC}XPUI.instconfirm.${XPUI_UNIQUEID}.verify`
    
    !ifndef XPUI_NOLOCK
    LockWindow on
    !endif
    
    !insertmacro XPUI_PAGE_CUSTOMFUNCTION LEAVE
  
  FunctionEnd
  
  !insertmacro XPUI_UNSET XPUI_PAGE_CUSTOMFUNCTION_PRE
  !insertmacro XPUI_UNSET XPUI_PAGE_CUSTOMFUNCTION_SHOW
  !insertmacro XPUI_UNSET XPUI_PAGE_CUSTOMFUNCTION_LEAVE
  
  !undef XPUI_${XPUI_UN}INSTCONFIRMPAGE_TITLE
  !undef XPUI_${XPUI_UN}INSTCONFIRMPAGE_SUBTITLE
  !undef XPUI_${XPUI_UN}INSTCONFIRMPAGE_CAPTION
  !undef XPUI_${XPUI_UN}INSTCONFIRMPAGE_TEXT_TOP
  !undef XPUI_${XPUI_UN}INSTCONFIRMPAGE_TEXT_BOTTOM
  
  !insertmacro XPUI_ENDPAGECHECKS
!macroend

; INSTFILES PAGE
!macro XPUI_PAGE_INSTFILES

  !ifdef UMUI_INSTFILEPAGE_ENABLE_CANCEL_BUTTON
    !ifndef UMUI_NB_CALL_FUNCTION_CANCEL_DEFINED
      !define UMUI_NB_CALL_FUNCTION_CANCEL_DEFINED
      Var UMUI_NB_CALL_FUNCTION_CANCEL
    !endif
  !endif

  !insertmacro XPUI_PAGECHECKS

  !ifndef XPUI_INTERNAL_PAGEUSED_INSTFILES
    !define XPUI_INTERNAL_PAGEUSED_INSTFILES
  !endif
  
  !insertmacro XPUI_DEFAULT XPUI_${XPUI_UN}INSTFILESPAGE_TITLE "$(XPUI_${XPUI_UN}INSTFILESPAGE_TITLE)"
  !insertmacro XPUI_DEFAULT XPUI_${XPUI_UN}INSTFILESPAGE_SUBTITLE "$(XPUI_${XPUI_UN}INSTFILESPAGE_SUBTITLE)"
  !insertmacro XPUI_DEFAULT XPUI_${XPUI_UN}INSTFILESPAGE_CAPTION "$(XPUI_${XPUI_UN}INSTFILESPAGE_CAPTION)"
  
  !insertmacro XPUI_CREATEID
  
  PageEx ${XPUI_UNFUNC}instfiles
    Caption `${XPUI_${XPUI_UN}INSTFILESPAGE_CAPTION}`
    PageCallbacks `${XPUI_UNFUNC}XPUI.cpy.${XPUI_UNIQUEID}.pre` `${XPUI_UNFUNC}XPUI.cpy.${XPUI_UNIQUEID}.show` `${XPUI_UNFUNC}XPUI.cpy.${XPUI_UNIQUEID}.leave`
  PageExEnd
  
  Function ${XPUI_UNFUNC}XPUI.cpy.${XPUI_UNIQUEID}.pre
    
    StrCmp $XPUI_ABORTED 1 0 +3
      SetAutoClose true
      Abort
    
    !insertmacro XPUI_PAGE_CUSTOMFUNCTION PRE
    
    Return
    
  FunctionEnd
  
  Function ${XPUI_UNFUNC}XPUI.cpy.${XPUI_UNIQUEID}.show
  
    !insertmacro XPUI_HEADER_TEXT `${XPUI_${XPUI_UN}INSTFILESPAGE_TITLE}` `${XPUI_${XPUI_UN}INSTFILESPAGE_SUBTITLE}`
    
    FindWindow $XPUI_TEMP1 "#32770" "" $HWNDPARENT
    !insertmacro XPUI_CONTROL_SKIN_PAGE $XPUI_TEMP1
  
    !insertmacro XPUI_PAGECOLOR_INIT 1027
    !insertmacro XPUI_PAGECOLOR_INIT 1004
    !insertmacro XPUI_PAGECOLOR_INIT 1006
    !insertmacro XPUI_PAGECOLOR_INIT 1016
    
    !ifdef XPUI_BGIMAGE
      FindWindow $XPUI_TEMP1 "#32770" "" $HWNDPARENT
      GetDlgItem $XPUI_TEMP1 $XPUI_TEMP1 1006
      ShowWindow $XPUI_TEMP1 0
    !endif
    
    !insertmacro XPUI_PAGE_CUSTOMFUNCTION SHOW
    
      !ifdef UMUI_INSTFILEPAGE_ENABLE_CANCEL_BUTTON
      	StrCpy $UMUI_NB_CALL_FUNCTION_CANCEL 0
	GetDlgItem $XPUI_TEMP1 $HWNDPARENT 2
	EnableWindow $XPUI_TEMP1 1
      !endif
    
    LockWindow off
  FunctionEnd
    
  Function ${XPUI_UNFUNC}XPUI.cpy.${XPUI_UNIQUEID}.leave
  
        !ifdef UMUI_INSTFILEPAGE_ENABLE_CANCEL_BUTTON
		StrCmp $XPUI_ABORTED 1 0 +5
		StrCmp $UMUI_NB_CALL_FUNCTION_CANCEL 0 0 +4
		StrCpy $UMUI_NB_CALL_FUNCTION_CANCEL 1
		Call `${UMUI_INSTFILEPAGE_ENABLE_CANCEL_BUTTON}`
		SetAutoClose true
	!endif
	!insertmacro XPUI_UNSET UMUI_INSTFILEPAGE_ENABLE_CANCEL_BUTTON
    
    LockWindow on
    IfAbort 0 Good
    !insertmacro XPUI_HEADER_TEXT `$(XPUI_${XPUI_UN}INSTFILESPAGE_FAIL_TITLE)` `$(XPUI_${XPUI_UN}INSTFILESPAGE_FAIL_SUBTITLE)`
    Goto TitleFinish
    Good:
    !insertmacro XPUI_HEADER_TEXT `$(XPUI_${XPUI_UN}INSTFILESPAGE_DONE_TITLE)` `$(XPUI_${XPUI_UN}INSTFILESPAGE_DONE_SUBTITLE)`
    TitleFinish:
    LockWindow off
    
    !insertmacro XPUI_PAGE_CUSTOMFUNCTION LEAVE
  
  FunctionEnd
  
  !insertmacro XPUI_UNSET XPUI_PAGE_CUSTOMFUNCTION_PRE
  !insertmacro XPUI_UNSET XPUI_PAGE_CUSTOMFUNCTION_SHOW
  !insertmacro XPUI_UNSET XPUI_PAGE_CUSTOMFUNCTION_LEAVE
  
  !undef XPUI_${XPUI_UN}INSTFILESPAGE_TITLE
  !undef XPUI_${XPUI_UN}INSTFILESPAGE_SUBTITLE
  !undef XPUI_${XPUI_UN}INSTFILESPAGE_CAPTION
  
  !insertmacro XPUI_ENDPAGECHECKS
!macroend

; FINISH PAGE
!macro XPUI_PAGE_FINISH

  !insertmacro XPUI_PAGECHECKS

  !ifndef XPUI_INTERNAL_PAGEUSED_FINISH
    !define XPUI_INTERNAL_PAGEUSED_FINISH
  !endif
  
  !ifdef MUI_FINISHPAGE_LINK
    !insertmacro XPUI_DEFAULT XPUI_${XPUI_UN}FINISHPAGE_LINK ""
    !insertmacro XPUI_SET XPUI_${XPUI_UN}FINISHPAGE_LINK_TEXT `${MUI_FINISHPAGE_LINK}`
    !ifdef MUI_FINISHPAGE_LINK_LOCATION
      !insertmacro XPUI_DEFAULT "XPUI_FINISHPAGE_LINK_LOCATION" "${MUI_FINISHPAGE_LINK_LOCATION}"
    !endif
  !endif
  
  !insertmacro XPUI_LANGUAGE_CONVERT
  
  !insertmacro XPUI_DEFAULT MUI_FINISHPAGE_TITLE             "$(XPUI_${XPUI_UN}FINISHPAGE_TEXT_TOP)"
  !insertmacro XPUI_DEFAULT MUI_FINISHPAGE_TEXT              "$(XPUI_${XPUI_UN}FINISHPAGE_TEXT)"
  !insertmacro XPUI_DEFAULT MUI_FINISHPAGE_BUTTON            "$(^CloseBtn)"
  !insertmacro XPUI_DEFAULT MUI_FINISHPAGE_TEXT_REBOOT       "$(XPUI_${XPUI_UN}FINISHPAGE_TEXT_REBOOT)"
  !insertmacro XPUI_DEFAULT MUI_FINISHPAGE_TEXT_REBOOTNOW    "$(XPUI_${XPUI_UN}FINISHPAGE_RADIOBUTTON_REBOOT)"
  !insertmacro XPUI_DEFAULT MUI_FINISHPAGE_TEXT_REBOOTLATER  "$(XPUI_${XPUI_UN}FINISHPAGE_RADIOBUTTON_NOREBOOT)"
  !insertmacro XPUI_DEFAULT MUI_FINISHPAGE_RUN_TEXT          "$(XPUI_${XPUI_UN}FINISHPAGE_CHECKBOX_RUN)"
  !insertmacro XPUI_DEFAULT MUI_FINISHPAGE_SHOWREADME_TEXT   "$(XPUI_${XPUI_UN}FINISHPAGE_CHECKBOX_DOCS)"
  !ifdef MUI_FINISHPAGE_NOREBOOTSUPPORT
    !define XPUI_${XPUI_UN}FINISHPAGE_REBOOT_DISABLE
    !undef MUI_FINISHPAGE_NOREBOOTSUPPORT
  !endif
  
  !insertmacro XPUI_DEFAULT XPUI_${XPUI_UN}FINISHPAGE_TITLE "$(XPUI_${XPUI_UN}FINISHPAGE_TITLE)"
  !insertmacro XPUI_DEFAULT XPUI_${XPUI_UN}FINISHPAGE_SUBTITLE "$(XPUI_${XPUI_UN}FINISHPAGE_SUBTITLE)"
  !insertmacro XPUI_DEFAULT XPUI_${XPUI_UN}FINISHPAGE_CAPTION "$(XPUI_${XPUI_UN}FINISHPAGE_CAPTION)"
  !insertmacro XPUI_DEFAULT XPUI_${XPUI_UN}FINISHPAGE_CHECKBOX_RUN  "$(XPUI_${XPUI_UN}FINISHPAGE_CHECKBOX_RUN)"   # No LangString for this one
  !insertmacro XPUI_DEFAULT XPUI_${XPUI_UN}FINISHPAGE_CHECKBOX_DOCS "$(XPUI_${XPUI_UN}FINISHPAGE_CHECKBOX_DOCS)"  # No LangString for this one
  !insertmacro XPUI_DEFAULT XPUI_${XPUI_UN}FINISHPAGE_TEXT "$(XPUI_${XPUI_UN}FINISHPAGE_TEXT)"
  !insertmacro XPUI_DEFAULT XPUI_${XPUI_UN}FINISHPAGE_TEXT_RUN "$(XPUI_${XPUI_UN}FINISHPAGE_TEXT_RUN)"
  !insertmacro XPUI_DEFAULT XPUI_${XPUI_UN}FINISHPAGE_TEXT_TOP "$(XPUI_${XPUI_UN}FINISHPAGE_TEXT_TOP)"
  !insertmacro XPUI_DEFAULT XPUI_${XPUI_UN}FINISHPAGE_TEXT_TOP_ALT "$(XPUI_${XPUI_UN}FINISHPAGE_TEXT_TOP_ALT)"
  !insertmacro XPUI_DEFAULT XPUI_${XPUI_UN}FINISHPAGE_TEXT_REBOOT "$(XPUI_${XPUI_UN}FINISHPAGE_TEXT_REBOOT)"
  !insertmacro XPUI_DEFAULT XPUI_${XPUI_UN}FINISHPAGE_REBOOT_MESSAGEBOX "$(XPUI_${XPUI_UN}FINISHPAGE_REBOOT_MESSAGEBOX)"
  !insertmacro XPUI_DEFAULT XPUI_${XPUI_UN}FINISHPAGE_RADIOBUTTON_REBOOT "$(XPUI_${XPUI_UN}FINISHPAGE_RADIOBUTTON_REBOOT)"
  !insertmacro XPUI_DEFAULT XPUI_${XPUI_UN}FINISHPAGE_RADIOBUTTON_NOREBOOT "$(XPUI_${XPUI_UN}FINISHPAGE_RADIOBUTTON_NOREBOOT)"
  
  PageEx ${XPUI_UNFUNC}custom
    Caption `${XPUI_${XPUI_UN}FINISHPAGE_CAPTION}`
    PageCallbacks `${XPUI_UNFUNC}XPUI.finish.${XPUI_UNIQUEID}.show` `${XPUI_UNFUNC}XPUI.finish.${XPUI_UNIQUEID}.verify`
  PageExEnd
  
  !ifndef XPUI_VAR_REBOOT
  Var XPUI_REBOOT
  !define XPUI_VAR_REBOOT
  !endif
  
  Function `${XPUI_UNFUNC}XPUI.FINISH.${XPUI_UNIQUEID}.show`
  
    StrCmp $XPUI_ABORTED 1 0 +2
      Abort
    
    ; SET THE XPUI LOCAL REBOOT FLAG
    StrCpy $XPUI_REBOOT 0
    
    !ifdef XPUI_${XPUI_UN}FINISHPAGE_REBOOT_FORCE
      StrCpy $XPUI_REBOOT 1
    !endif
    
    !ifndef XPUI_${XPUI_UN}FINISHPAGE_NOREBOOT
      IfRebootFlag `` +2
        StrCpy $XPUI_REBOOT 1
    !endif
    
    !ifdef `XPUI_${XPUI_UN}FINISHPAGE_ABORT_ON_NOREBOOT`
      StrCmp $XPUI_REBOOT 1 `` 0 +2
        Abort
    !endif
    
    ; Extract the INI
    !ifdef XPUI_FASTERSKINNING
    SetOutPath $PLUGINSDIR
    File `${XPUI_SYSDIR}\INI\finish.ini`
    !endif
    
    !insertmacro XPUI_HEADER_TEXT `${XPUI_${XPUI_UN}FINISHPAGE_TITLE}` `${XPUI_${XPUI_UN}FINISHPAGE_SUBTITLE}`
    
    StrCmp $XPUI_REBOOT 1 `` XPUI.finish.norb.${XPUI_UNIQUEID}
    WriteINIStr $PLUGINSDIR\Finish.ini `Field 1` Type RadioButton
    WriteINIStr $PLUGINSDIR\Finish.ini `Field 2` Type RadioButton
    WriteINIStr $PLUGINSDIR\Finish.ini `Field 1` Text `${XPUI_${XPUI_UN}FINISHPAGE_RADIOBUTTON_REBOOT}`
    WriteINIStr $PLUGINSDIR\Finish.ini `Field 2` Text `${XPUI_${XPUI_UN}FINISHPAGE_RADIOBUTTON_NOREBOOT}`
    XPUI.finish.norb.${XPUI_UNIQUEID}:
    
    StrCmp $XPUI_REBOOT 1 XPUI.nochk
    !ifdef XPUI_${XPUI_UN}FINISHPAGE_RUN_NOTCHECKED
    WriteINIStr $PLUGINSDIR\Finish.ini `Field 1` State 0
    !endif
    !ifdef XPUI_${XPUI_UN}FINISHPAGE_DOCS_NOTCHECKED
    WriteINIStr $PLUGINSDIR\Finish.ini `Field 2` State 0
    !endif
    XPUI.nochk:
    
    StrCmp $XPUI_REBOOT 1 `` +2
    WriteINIStr $PLUGINSDIR\Finish.ini `Field 2` State 0
    
    !ifdef XPUI_${XPUI_UN}FINISHPAGE_LINK_TEXT
    WriteINIStr $PLUGINSDIR\Finish.ini `Field 3` Text `${XPUI_${XPUI_UN}FINISHPAGE_LINK_TEXT}`
    !endif
    
    StrCmp $XPUI_REBOOT 1 `` +3
    WriteINIStr $PLUGINSDIR\Finish.ini `Field 5` Text  `${XPUI_${XPUI_UN}FINISHPAGE_TEXT_REBOOT}`
    Goto +2
    !ifdef XPUI_${XPUI_UN}FINISHPAGE_RUN & XPUI_${XPUI_UN}FINISHPAGE_DOCS
    WriteINIStr $PLUGINSDIR\Finish.ini `Field 5` Text `${XPUI_${XPUI_UN}FINISHPAGE_TEXT_RUN}`
    !else
    WriteINIStr $PLUGINSDIR\Finish.ini `Field 5` Text `${XPUI_${XPUI_UN}FINISHPAGE_TEXT}`
    !endif
    
    !ifdef XPUI_${XPUI_UN}FINISHPAGE_TEXT_USE_TOP_ALT
    WriteINIStr $PLUGINSDIR\Finish.ini `Field 4` Top 17
    !endif
    
    !ifndef XPUI_FINISHPAGE_NOCLOSEBUTTON
      WriteINIStr $PLUGINSDIR\Finish.ini Settings NextButtonText $(XPUI_BUTTONTEXT_CLOSE)
    !endif
    
    WriteINIStr `$PLUGINSDIR\Finish.ini` `Settings` `RTL` `$(^RTL)`
    InstallOptions::initDialog /NOUNLOAD $PLUGINSDIR\finish.ini
    Pop $XPUI_TEMP2
    !insertmacro XPUI_CONTROL_SKIN_PAGE $XPUI_TEMP2
    GetDlgItem $XPUI_TEMP1 $HWNDPARENT 1
    EnableWindow $XPUI_TEMP1 1
    !ifndef XPUI_FINISHPAGE_NOCLOSEBUTTON
    SendMessage $XPUI_TEMP1 0xC 0 STR:$(XPUI_BUTTONTEXT_CLOSE)
    !endif
    GetDlgItem $XPUI_TEMP1 $HWNDPARENT 2
    SendMessage $XPUI_TEMP1 0xC `` `STR:$(^CancelBtn)`
    EnableWindow $XPUI_TEMP1 1
    GetDlgItem $XPUI_TEMP1 $HWNDPARENT 3
    !ifdef XPUI_${XPUI_UN}FINISHPAGE_NO_REINSTALL
      EnableWindow $XPUI_TEMP1 0
    !endif
    
    LockWindow on
    GetDlgItem $XPUI_TEMP1 $XPUI_TEMP2 1200
    !insertmacro XPUI_CONTROL_SKIN_PAGE $XPUI_TEMP1
    StrCmp $XPUI_REBOOT 1 a
    !ifdef XPUI_${XPUI_UN}FINISHPAGE_RUN
    SendMessage $XPUI_TEMP1 0xC 0 `STR:${XPUI_${XPUI_UN}FINISHPAGE_CHECKBOX_RUN}`
    !endif
    a:
    
    StrCmp $XPUI_REBOOT 1 XPUI.norunchk
    !ifndef XPUI_${XPUI_UN}FINISHPAGE_RUN
    ShowWindow $XPUI_TEMP1 0
    !endif
    XPUI.norunchk:
    
    GetDlgItem $XPUI_TEMP1 $XPUI_TEMP2 1201
    !insertmacro XPUI_CONTROL_SKIN_PAGE $XPUI_TEMP1
    StrCmp $XPUI_REBOOT 1 b
    !ifdef XPUI_${XPUI_UN}FINISHPAGE_DOCS
    SendMessage $XPUI_TEMP1 0xC 0 `STR:${XPUI_${XPUI_UN}FINISHPAGE_CHECKBOX_DOCS}`
    !endif
    b:
    
    StrCmp $XPUI_REBOOT 1 XPUI.nodocchk
    !ifndef XPUI_${XPUI_UN}FINISHPAGE_DOCS
    ShowWindow $XPUI_TEMP1 0
    !endif
    XPUI.nodocchk:
    
    GetDlgItem $XPUI_TEMP1 $XPUI_TEMP2 1203
    !insertmacro XPUI_CONTROL_SKIN_PAGE $XPUI_TEMP1
    GetDlgItem $XPUI_TEMP1 $XPUI_TEMP2 1203
    !insertmacro XPUI_CONTROL_SKIN_PAGE $XPUI_TEMP1
    SendMessage $XPUI_TEMP1 0xC 0 `STR:${XPUI_${XPUI_UN}FINISHPAGE_TEXT_TOP}`
    CreateFont $XPUI_HWND `$(^Font)` 12 700 ; previously Tahoma
    SendMessage $XPUI_TEMP1 0x30 $XPUI_HWND $XPUI_HWND
    !ifdef XPUI_${XPUI_UN}FINISHPAGE_TEXT_USE_TOP_ALT
      SendMessage $XPUI_TEMP1 0xC 0 `STR:${XPUI_${XPUI_UN}FINISHPAGE_TEXT_TOP_ALT}`
      CreateFont $XPUI_HWND `$(^Font)` 8 700 ; previously MS Sans Serif
      SendMessage $XPUI_TEMP1 0x30 $XPUI_HWND $XPUI_HWND
    !endif
    GetDlgItem $XPUI_TEMP1 $XPUI_TEMP2 1204
    !insertmacro XPUI_CONTROL_SKIN_PAGE $XPUI_TEMP1
    
    !ifndef XPUI_${XPUI_UN}FINISHPAGE_RUN & XPUI_${XPUI_UN}FINISHPAGE_DOCS
    StrCmp $XPUI_REBOOT 1 XPUI.no-normal-text
    GetDlgItem $XPUI_TEMP1 $XPUI_TEMP2 1200
    ShowWindow $XPUI_TEMP1 0
    GetDlgItem $XPUI_TEMP1 $XPUI_TEMP2 1201
    ShowWindow $XPUI_TEMP1 0
    XPUI.no-normal-text:
    !endif
    
    GetDlgItem $XPUI_TEMP1 $XPUI_TEMP2 1202
    !insertmacro XPUI_CONTROL_SKIN_LIGHT $XPUI_TEMP1
    !ifdef XPUI_${XPUI_UN}FINISHPAGE_LINK_TEXT
    SendMessage $XPUI_TEMP1 0xC 0 `STR:${XPUI_${XPUI_UN}FINISHPAGE_LINK_TEXT}`
    !endif
    !ifndef XPUI_${XPUI_UN}FINISHPAGE_LINK
    ShowWindow $XPUI_TEMP1 0
    !endif
    
    !insertmacro XPUI_PAGE_CUSTOMFUNCTION SHOW
    SetBrandingImage /IMGID=1019 /RESIZETOFIT "$PLUGINSDIR\page.bmp"
    
    LockWindow off
    InstallOptions::show
  FunctionEnd
  
  Function `${XPUI_UNFUNC}XPUI.FINISH.${XPUI_UNIQUEID}.verify`
    StrCmp $XPUI_ABORTED 1 XPUI.grinding-halt
    
    !ifdef XPUI_${XPUI_UN}FINISHPAGE_LINK
    ReadINIStr $XPUI_TEMP1 `$PLUGINSDIR\Finish.ini` `Settings` `State`
    StrCmp $XPUI_TEMP1 3 `` XPUI.nolink
    !ifdef XPUI_${XPUI_UN}FINISHPAGE_LINK_FUNCTION
    Call `${XPUI_${XPUI_UN}FINISHPAGE_LINK_FUNCTION}`
    !else
      !ifdef XPUI_${XPUI_UN}FINISHPAGE_LINK_LOCATION
        ExecShell open `${XPUI_${XPUI_UN}FINISHPAGE_LINK_LOCATION}`
      !else
        MessageBox MB_OK|MB_ICONINFORMATION `Developer: Please specify a function for the Finish Page link to run in the symbol XPUI_${XPUI_UN}FINISHPAGE_LINK_FUNCTION or specify a location (local or http) to load in XPUI_${XPUI_UN}FINISHPAGE_LINK_LOCATION.  The Abort command is called automatically.$\n$\nUser: The developer of this setup program specified that a link be shown on this page, but he/she did not define what the link will do.  Please contact the company from which you obtained this installer and tell them about this message.`
      !endif
    !endif
    LockWindow off
    Abort
    XPUI.nolink:
    !endif
    
    !ifndef XPUI_${XPUI_UN}FINISHPAGE_NOREBOOT
    ReadINIStr $XPUI_TEMP1 `$PLUGINSDIR\Finish.ini` `Settings` `State`
    StrCmp $XPUI_TEMP1 1 `` XPUI.nodonebutton
    StrCmp $XPUI_TEMP1 2 `` XPUI.nodonebutton
    GetDlgItem $XPUI_TEMP1 $HWNDPARENT 1
    EnableWindow $XPUI_TEMP1 1
    Abort
    XPUI.nodonebutton:
    !endif
    
    ReadINIStr $XPUI_TEMP1 `$PLUGINSDIR\Finish.ini` `Field 1` `State`
    ReadINIStr $XPUI_TEMP2 `$PLUGINSDIR\Finish.ini` `Field 2` `State`
    
    StrCmp $XPUI_REBOOT 1 `` XPUI.norb2
    StrCmp $XPUI_TEMP1 1 `` XPUI.norb
    MessageBox MB_OKCANCEL|MB_ICONINFORMATION `${XPUI_${XPUI_UN}FINISHPAGE_REBOOT_MESSAGEBOX}` IDCANCEL XPUI.done
    # the big...
    Reboot # REBOOT! (Wow)
    XPUI.norb:
    Goto XPUI.done
    
    XPUI.norb2:
    
    !ifdef XPUI_${XPUI_UN}FINISHPAGE_RUN
      !ifdef XPUI_${XPUI_UN}FINISHPAGE_RUN_FILE
        StrCmp $XPUI_TEMP1 1 `` NoCallRun
        Exec `${XPUI_${XPUI_UN}FINISHPAGE_RUN_FILE}`
      !endif
      !ifdef XPUI_${XPUI_UN}FINISHPAGE_RUN_FUNCTION
        StrCmp $XPUI_TEMP1 1 `` NoCallRun
        Call `${XPUI_${XPUI_UN}FINISHPAGE_RUN_FUNCTION}`
      !endif
      NoCallRun:
    !endif
    
    !ifdef XPUI_${XPUI_UN}FINISHPAGE_DOCS
      !ifdef XPUI_${XPUI_UN}FINISHPAGE_DOCS_FILE
      StrCmp $XPUI_TEMP2 1 `` NoCallDocs
      ExecShell open `${XPUI_${XPUI_UN}FINISHPAGE_DOCS_FILE}`
      !endif
      !ifdef XPUI_${XPUI_UN}FINISHPAGE_DOCS_FUNCTION
      StrCmp $XPUI_TEMP2 1 `` NoCallDocs
      Call `${XPUI_${XPUI_UN}FINISHPAGE_DOCS_FUNCTION}`
      !endif
      NoCallDocs:
    !endif
    
    XPUI.done:
    
    !insertmacro XPUI_PAGE_CUSTOMFUNCTION LEAVE
    
    XPUI.grinding-halt:
    SetRebootFlag false
  
  FunctionEnd
  
  !insertmacro XPUI_UNSET XPUI_PAGE_CUSTOMFUNCTION_PRE
  !insertmacro XPUI_UNSET XPUI_PAGE_CUSTOMFUNCTION_SHOW
  !insertmacro XPUI_UNSET XPUI_PAGE_CUSTOMFUNCTION_LEAVE
  
  !insertmacro XPUI_UNSET XPUI_${XPUI_UN}FINISHPAGE_LINK
  !insertmacro XPUI_UNSET XPUI_${XPUI_UN}FINISHPAGE_LINK_FUNCTION
  
  !insertmacro XPUI_UNSET MUI_FINISHPAGE_LINK
  !insertmacro XPUI_UNSET MUI_FINISHPAGE_LINK_LOCATION
  !insertmacro XPUI_UNSET XPUI_${XPUI_UN}FINISHPAGE_LINK_LOCATION
  
  !insertmacro XPUI_UNSET XPUI_${XPUI_UN}FINISHPAGE_RUN
  !insertmacro XPUI_UNSET XPUI_${XPUI_UN}FINISHPAGE_RUN_FILE
  !insertmacro XPUI_UNSET XPUI_${XPUI_UN}FINISHPAGE_RUN_FUNCTION
  !insertmacro XPUI_UNSET XPUI_${XPUI_UN}FINISHPAGE_DOCS
  !insertmacro XPUI_UNSET XPUI_${XPUI_UN}FINISHPAGE_DOCS_FILE
  !insertmacro XPUI_UNSET XPUI_${XPUI_UN}FINISHPAGE_DOCS_FUNCTION
  !insertmacro XPUI_UNSET XPUI_${XPUI_UN}FINISHPAGE_REBOOT_DISABLE
  !insertmacro XPUI_UNSET XPUI_${XPUI_UN}FINISHPAGE_REBOOT_FORCE
  !insertmacro XPUI_UNSET XPUI_${XPUI_UN}FINISHPAGE_CHECKBOX_RUN
  !insertmacro XPUI_UNSET XPUI_${XPUI_UN}FINISHPAGE_CHECKBOX_DOCS
  !insertmacro XPUI_UNSET XPUI_UNFINISHPAGE_CHECKBOX_RUN
  !insertmacro XPUI_UNSET XPUI_UNFINISHPAGE_CHECKBOX_DOCS
  !insertmacro XPUI_UNSET XPUI_${XPUI_UN}FINISHPAGE_NOCLOSEBUTTON
  
  !undef XPUI_${XPUI_UN}FINISHPAGE_CAPTION
  !undef XPUI_${XPUI_UN}FINISHPAGE_TITLE
  !undef XPUI_${XPUI_UN}FINISHPAGE_SUBTITLE
  !undef XPUI_${XPUI_UN}FINISHPAGE_TEXT_TOP
  !undef XPUI_${XPUI_UN}FINISHPAGE_TEXT_TOP_ALT
  !undef XPUI_${XPUI_UN}FINISHPAGE_TEXT
  !undef XPUI_${XPUI_UN}FINISHPAGE_TEXT_RUN
  !undef XPUI_${XPUI_UN}FINISHPAGE_TEXT_REBOOT
  !undef XPUI_${XPUI_UN}FINISHPAGE_RADIOBUTTON_REBOOT
  !undef XPUI_${XPUI_UN}FINISHPAGE_RADIOBUTTON_NOREBOOT
  !undef XPUI_${XPUI_UN}FINISHPAGE_REBOOT_MESSAGEBOX
  
  !undef MUI_FINISHPAGE_TITLE
  !undef MUI_FINISHPAGE_TEXT
  !undef MUI_FINISHPAGE_BUTTON
  !undef MUI_FINISHPAGE_TEXT_REBOOT
  !undef MUI_FINISHPAGE_TEXT_REBOOTNOW
  !undef MUI_FINISHPAGE_TEXT_REBOOTLATER
  !undef MUI_FINISHPAGE_RUN_TEXT
  !undef MUI_FINISHPAGE_SHOWREADME_TEXT
  
  !verbose pop

!macroend

; INSTALL SUCCESS PAGE
!macro XPUI_PAGE_INSTSUCCESS

  !insertmacro XPUI_PAGECHECKS

  !ifndef XPUI_INTERNAL_PAGEUSED_INSTSUCCESS
    !define XPUI_INTERNAL_PAGEUSED_INSTSUCCESS
  !endif
  
  !insertmacro XPUI_DEFAULT XPUI_${XPUI_UN}INSTSUCCESSPAGE_TITLE "$(XPUI_${XPUI_UN}INSTSUCCESSPAGE_TITLE)"
  !insertmacro XPUI_DEFAULT XPUI_${XPUI_UN}INSTSUCCESSPAGE_SUBTITLE "$(XPUI_${XPUI_UN}INSTSUCCESSPAGE_SUBTITLE)"
  !insertmacro XPUI_DEFAULT XPUI_${XPUI_UN}INSTSUCCESSPAGE_CAPTION "$(XPUI_${XPUI_UN}INSTSUCCESSPAGE_CAPTION)"
  !insertmacro XPUI_DEFAULT XPUI_${XPUI_UN}INSTSUCCESSPAGE_TEXT_TOP "$(XPUI_${XPUI_UN}INSTSUCCESSPAGE_TEXT_TOP)"
  !insertmacro XPUI_DEFAULT XPUI_${XPUI_UN}INSTSUCCESSPAGE_TEXT_BOTTOM "$(XPUI_${XPUI_UN}INSTSUCCESSPAGE_TEXT_BOTTOM)"
  
  !insertmacro XPUI_CREATEID
  
  PageEx ${XPUI_UNFUNC}custom
    Caption `${XPUI_${XPUI_UN}INSTSUCCESSPAGE_CAPTION}`
    PageCallbacks `${XPUI_UNFUNC}XPUI.instSuccess.${XPUI_UNIQUEID}.show` `${XPUI_UNFUNC}XPUI.instSuccess.${XPUI_UNIQUEID}.verify`
  PageExEnd
  
  Function `${XPUI_UNFUNC}XPUI.instSuccess.${XPUI_UNIQUEID}.show`
    StrCmp $XPUI_ABORTED 1 0 +2
      Abort
      
    !ifdef XPUI_FASTERSKINNING
    SetOutPath $PLUGINSDIR
    File `${XPUI_SYSDIR}\INI\confirm.ini`
    !endif
    
    !insertmacro XPUI_HEADER_TEXT `${XPUI_${XPUI_UN}INSTSUCCESSPAGE_TITLE}` `${XPUI_${XPUI_UN}INSTSUCCESSPAGE_SUBTITLE}`
    
    WriteINIStr $PLUGINSDIR\Confirm.ini `Settings` NextButtonText `Close`
    WriteINIStr $PLUGINSDIR\Confirm.ini `Field 1` Text `${XPUI_${XPUI_UN}INSTSUCCESSPAGE_TEXT_TOP}`
    WriteINIStr $PLUGINSDIR\Confirm.ini `Field 2` Text `${XPUI_${XPUI_UN}INSTSUCCESSPAGE_TEXT_BOTTOM}`
    WriteINIStr `$PLUGINSDIR\Confirm.ini` `Settings` `RTL` `$(^RTL)`
    InstallOptions::initDialog /NOUNLOAD $PLUGINSDIR\confirm.ini
    GetDlgItem $XPUI_TEMP1 $HWNDPARENT 1
    EnableWindow $XPUI_TEMP1 0
    SendMessage $XPUI_TEMP1 0xC `` `STR:Next`
    GetDlgItem $XPUI_TEMP1 $HWNDPARENT 2
    SendMessage $XPUI_TEMP1 0xC `` `STR:Close`
    EnableWindow $XPUI_TEMP1 1
    Pop $XPUI_TEMP2
    !insertmacro XPUI_CONTROL_SKIN_PAGE $XPUI_TEMP2
    
    !insertmacro XPUI_PAGE_CUSTOMFUNCTION SHOW
    
    GetDlgItem $XPUI_TEMP1 $XPUI_TEMP2 1200
    !insertmacro XPUI_CONTROL_SKIN_PAGE $XPUI_TEMP1
    GetDlgItem $XPUI_TEMP1 $XPUI_TEMP2 1201
    !insertmacro XPUI_CONTROL_SKIN_PAGE $XPUI_TEMP1
    GetDlgItem $XPUI_TEMP1 $XPUI_TEMP2 1202
    !insertmacro XPUI_CONTROL_SKIN_PAGE $XPUI_TEMP1
    GetDlgItem $XPUI_TEMP1 $XPUI_TEMP2 1203
    !insertmacro XPUI_CONTROL_SKIN_PAGE $XPUI_TEMP1
    GetDlgItem $XPUI_TEMP1 $XPUI_TEMP2 1204
    !insertmacro XPUI_CONTROL_SKIN_PAGE $XPUI_TEMP1
    StrCpy $XPUI_NOABORTWARNING 1
    SetBrandingImage /IMGID=1019 /RESIZETOFIT "$PLUGINSDIR\page.bmp"
    !ifndef XPUI_NOLOCK
    LockWindow off
    !endif
    InstallOptions::show
  FunctionEnd
  
  Function `${XPUI_UNFUNC}XPUI.instSuccess.${XPUI_UNIQUEID}.verify`
    
    !ifndef XPUI_NOLOCK
    LockWindow on
    !endif
    
    !insertmacro XPUI_PAGE_CUSTOMFUNCTION LEAVE
    
  FunctionEnd
  
  !undef XPUI_${XPUI_UN}INSTSUCCESSPAGE_CAPTION
  !undef XPUI_${XPUI_UN}INSTSUCCESSPAGE_TITLE
  !undef XPUI_${XPUI_UN}INSTSUCCESSPAGE_SUBTITLE
  !undef XPUI_${XPUI_UN}INSTSUCCESSPAGE_TEXT_TOP
  !undef XPUI_${XPUI_UN}INSTSUCCESSPAGE_TEXT_BOTTOM
  
  !insertmacro XPUI_UNSET XPUI_PAGE_CUSTOMFUNCTION_PRE
  !insertmacro XPUI_UNSET XPUI_PAGE_CUSTOMFUNCTION_SHOW
  !insertmacro XPUI_UNSET XPUI_PAGE_CUSTOMFUNCTION_LEAVE
  
  !insertmacro XPUI_ENDPAGECHECKS
  
!macroend

!macro XPUI_PAGE_ABORT

  !insertmacro XPUI_PAGECHECKS
  
  !ifndef XPUI_INTERNAL_PAGEUSED_ABORT
    !define XPUI_INTERNAL_PAGEUSED_ABORT
  !endif
  
  !insertmacro XPUI_DEFAULT XPUI_${XPUI_UN}ABORTPAGE_TITLE "$(XPUI_${XPUI_UN}ABORTPAGE_TITLE)"
  !insertmacro XPUI_DEFAULT XPUI_${XPUI_UN}ABORTPAGE_SUBTITLE "$(XPUI_${XPUI_UN}ABORTPAGE_SUBTITLE)"
  !insertmacro XPUI_DEFAULT XPUI_${XPUI_UN}ABORTPAGE_TEXT_TOP "$(XPUI_${XPUI_UN}ABORTPAGE_TEXT_TOP)"
  !insertmacro XPUI_DEFAULT XPUI_${XPUI_UN}ABORTPAGE_TEXT "$(XPUI_${XPUI_UN}ABORTPAGE_TEXT)"
  !insertmacro XPUI_DEFAULT XPUI_${XPUI_UN}ABORTPAGE_CAPTION "$(XPUI_${XPUI_UN}ABORTPAGE_CAPTION)"
  
  !insertmacro XPUI_CREATEID
  
  PageEx ${XPUI_UNFUNC}custom
  PageCallbacks ${XPUI_UNFUNC}XPUI.io.ABORTPAGE.${XPUI_UNIQUEID} ${XPUI_UNFUNC}XPUI.io.ABORTPAGE.${XPUI_UNIQUEID}.leave
  Caption `${XPUI_${XPUI_UN}ABORTPAGE_CAPTION}`
  PageExEnd

  Function ${XPUI_UNFUNC}XPUI.io.ABORTPAGE.${XPUI_UNIQUEID}
    LockWindow on
    StrCmp $XPUI_ABORTED 1 +2
      Abort
    
    SetOutPath $PLUGINSDIR
    File `${XPUI_SYSDIR}\INI\isWelcome.ini`

    !insertmacro XPUI_PAGE_CUSTOMFUNCTION PRE    

    WriteINIStr $PLUGINSDIR\isWelcome.ini `Field 1` Text `${XPUI_${XPUI_UN}ABORTPAGE_TEXT_TOP}`
    WriteINIStr $PLUGINSDIR\isWelcome.ini `Field 2` Text `${XPUI_${XPUI_UN}ABORTPAGE_TEXT}`
    WriteINIStr `$PLUGINSDIR\isWelcome.ini` `Settings` `RTL` `$(^RTL)`
    
    InstallOptions::initDialog /NOUNLOAD `$PLUGINSDIR\isWelcome.ini`
      
      Pop $XPUI_HWND
      !insertmacro XPUI_CONTROL_SKIN_PAGE $XPUI_HWND
      
      GetDlgItem $XPUI_TEMP1 $XPUI_HWND 1200
        CreateFont $XPUI_TEMP2 `$(^Font)` 8 700 ; previously Tahoma
        SendMessage $XPUI_TEMP1 0x30 $XPUI_TEMP2 $XPUI_TEMP2
        !insertmacro XPUI_CONTROL_SKIN_PAGE $XPUI_TEMP1
      
      GetDlgItem $XPUI_TEMP1 $XPUI_HWND 1201
        CreateFont $XPUI_TEMP2 `$(^Font)` 8 350 ; previously Tahoma
        SendMessage $XPUI_TEMP1 0x30 $XPUI_TEMP2 $XPUI_TEMP2
        !insertmacro XPUI_CONTROL_SKIN_PAGE $XPUI_TEMP1
      
      !insertmacro XPUI_HEADER_TEXT `${XPUI_${XPUI_UN}ABORTPAGE_TITLE}` `${XPUI_${XPUI_UN}ABORTPAGE_SUBTITLE}`
      
      StrCpy $XPUI_NOABORTWARNING 1
      
      GetDlgItem $XPUI_TEMP1 $HWNDPARENT 1
      EnableWindow $XPUI_TEMP1 0
      SendMessage $XPUI_TEMP1 0xC 0 STR:$(^NextBtn)
      
      GetDlgItem $XPUI_TEMP1 $HWNDPARENT 3
      EnableWindow $XPUI_TEMP1 0
      SendMessage $XPUI_TEMP1 0xC 0 STR:$(^BackBtn)
      
      GetDlgItem $XPUI_TEMP1 $HWNDPARENT 2
      EnableWindow $XPUI_TEMP1 1
      SendMessage $XPUI_TEMP1 0xC 0 STR:$(^CloseBtn)
      
      !insertmacro XPUI_PAGE_CUSTOMFUNCTION SHOW
      
      LockWindow off
      
    InstallOptions::show
    FunctionEnd
    
    Function ${XPUI_UNFUNC}XPUI.io.ABORTPAGE.${XPUI_UNIQUEID}.leave
    !ifndef XPUI_NOLOCK
    LockWindow on
    !endif
    !insertmacro XPUI_PAGE_CUSTOMFUNCTION LEAVE
  FunctionEnd
  
  !undef XPUI_${XPUI_UN}ABORTPAGE_TITLE
  !undef XPUI_${XPUI_UN}ABORTPAGE_SUBTITLE
  !undef XPUI_${XPUI_UN}ABORTPAGE_TEXT_TOP
  !undef XPUI_${XPUI_UN}ABORTPAGE_TEXT
  !undef XPUI_${XPUI_UN}ABORTPAGE_CAPTION
  
  !insertmacro XPUI_ENDPAGECHECKS

!macroend

!macro XPUI_PAGE_UNINSTCONFIRM_NSIS

!insertmacro XPUI_PAGECHECKS

!insertmacro XPUI_CREATEID
PageEx un.uninstConfirm
Caption `$(XPUI_UNINSTCONFIRMPAGE_NSIS_CAPTION)`
PageCallbacks `un.XPUI.unc_NSIS.${XPUI_UNIQUEID}.pre` `un.XPUI.unc_NSIS.${XPUI_UNIQUEID}.show` `un.XPUI.unc_NSIS.${XPUI_UNIQUEID}.leave`
PageExEnd

Function `un.XPUI.unc_NSIS.${XPUI_UNIQUEID}.pre`
StrCmp $XPUI_ABORTED 1 `` +2
Abort
!insertmacro XPUI_PAGE_CUSTOMFUNCTION PRE
FunctionEnd

Function `un.XPUI.unc_NSIS.${XPUI_UNIQUEID}.show`

!insertmacro XPUI_HEADER_TEXT `$(XPUI_UNINSTCONFIRMPAGE_NSIS_TITLE)` `$(XPUI_UNINSTCONFIRMPAGE_NSIS_SUBTITLE)`

FindWindow $XPUI_TEMP1 `#32770` `` $HWNDPARENT
!insertmacro XPUI_CONTROL_SKIN $XPUI_TEMP1

!insertmacro XPUI_PAGECOLOR_INIT 1019
!insertmacro XPUI_PAGECOLOR_INIT 1029
!insertmacro XPUI_PAGECOLOR_INIT 1000
!insertmacro XPUI_PAGECOLOR_INIT 1006

!insertmacro XPUI_INNERDIALOG_TEXT `$(XPUI_UNINSTCONFIRMPAGE_NSIS_TEXT_TOP)` 1006
!insertmacro XPUI_INNERDIALOG_TEXT `$(XPUI_UNINSTCONFIRMPAGE_NSIS_TEXT_FOLDER)` 1029
!insertmacro XPUI_PAGE_CUSTOMFUNCTION SHOW
FunctionEnd

Function `un.XPUI.unc_NSIS.${XPUI_UNIQUEID}.leave`
!insertmacro XPUI_PAGE_CUSTOMFUNCTION LEAVE
FunctionEnd
!insertmacro XPUI_ENDPAGECHECKS
!macroEnd

; Page Command

!macro XPUI_PAGE pname
  !define `XPUI_PAGE_CHECK_${pname}`
    !ifdef `XPUI_PAGE_CHECK_Welcome`
    !insertmacro XPUI_PAGE_WELCOME
    !else ifdef `XPUI_PAGE_CHECK_Welcome2`
    !insertmacro XPUI_PAGE_WELCOME2
    !else ifdef `XPUI_PAGE_CHECK_Components`
    !insertmacro XPUI_PAGE_COMPONENTS
    !else ifdef `XPUI_PAGE_CHECK_Directory`
    !insertmacro XPUI_PAGE_DIRECTORY
    !else ifdef `XPUI_PAGE_CHECK_InstConfirm`
    !insertmacro XPUI_PAGE_INSTCONFIRM
    !else ifdef `XPUI_PAGE_CHECK_InstFiles`
    !insertmacro XPUI_PAGE_INSTFILES
    !else ifdef `XPUI_PAGE_CHECK_InstSuccess`
    !insertmacro XPUI_PAGE_INSTSUCCESS
    !else ifdef `XPUI_PAGE_CHECK_Finish`
    !insertmacro XPUI_PAGE_FINISH
    !else ifdef `XPUI_PAGE_CHECK_Abort`
    !insertmacro XPUI_PAGE_ABORT
    !else
    !verbose 4
    !define temp.TEXT {Page}
    !error "ExperienceUI: FATAL: Improper use of $${temp.TEXT} command.$\nUsage: $${temp.TEXT} (Welcome|Welcome2|Components|Directory|InstConfirm|InstFiles|Finish|InstSuccess|Abort)$\nNOTE: License and StartMenu pages must be inserted the old way."
    !endif
  !undef  `XPUI_PAGE_CHECK_${pname}`
!macroend

!macro XPUI_UNPAGE pname
  !insertmacro XPUI_PAGEMODE_PUSH
  !insertmacro XPUI_PAGEMODE_UNINST
  !define `XPUI_PAGE_CHECK_${pname}`
    !ifdef `XPUI_PAGE_CHECK_Welcome`
    !insertmacro XPUI_PAGE_WELCOME
    !else ifdef `XPUI_PAGE_CHECK_Welcome2`
    !insertmacro XPUI_PAGE_WELCOME2
    !else ifdef `XPUI_PAGE_CHECK_Components`
    !insertmacro XPUI_PAGE_COMPONENTS
    !else ifdef `XPUI_PAGE_CHECK_Directory`
    !insertmacro XPUI_PAGE_DIRECTORY
    !else ifdef `XPUI_PAGE_CHECK_InstConfirm`
    !insertmacro XPUI_PAGE_INSTCONFIRM
    !else ifdef `XPUI_PAGE_CHECK_InstFiles`
    !insertmacro XPUI_PAGE_INSTFILES
    !else ifdef `XPUI_PAGE_CHECK_InstSuccess`
    !insertmacro XPUI_PAGE_INSTSUCCESS
    !else ifdef `XPUI_PAGE_CHECK_Finish`
    !insertmacro XPUI_PAGE_FINISH
    !else ifdef `XPUI_PAGE_CHECK_Abort`
    !insertmacro XPUI_PAGE_ABORT
    !else ifdef `XPUI_PAGE_CHECK_UnConfirm`
    !insertmacro XPUI_PAGE_UNINSTCONFIRM_NSIS
    !else
    !verbose 4
    !define temp.TEXT {UnPage}
    !error "ExperienceUI: FATAL: Improper use of $${temp.TEXT} command.$\nUsage: $${temp.TEXT} (Welcome|Welcome2|Components|Directory|InstConfirm|InstFiles|Finish|InstSuccess|Abort)$\nNOTE: License and StartMenu pages must be inserted the old way."
    !endif
  !undef  `XPUI_PAGE_CHECK_${pname}`
  !insertmacro XPUI_PAGEMODE_POP
!macroend

!define Page "!insertmacro XPUI_PAGE"
!define UnPage "!insertmacro XPUI_UNPAGE"
!define StartMenuPage "!insertmacro XPUI_PAGE_STARTMENU"
!define LicensePage "!insertmacro XPUI_PAGE_LICENSE"

; SECTION DESCRIPTION CODE
; WRITTEN BY JOOST VERBURG

!macro XPUI_DESCRIPTION_BEGIN
FindWindow $XPUI_TEMP1 `#32770` `` $HWNDPARENT
GetDlgItem $XPUI_TEMP1 $XPUI_TEMP1 1043
StrCmp $0 -1 0 XPUI.description_begin_done
SendMessage $XPUI_TEMP1 0xC 0 `STR:$XPUI_HWND`
EnableWindow $XPUI_TEMP1 0

Goto XPUI.description_done
XPUI.description_begin_done:
!macroend

!macro XPUI_DESCRIPTION_TEXT VAR TEXT
!verbose push
  !verbose 4
  !ifndef XPUI_SILENT
    !echo `XPUI Section Description Text: Section ${VAR}, Text "${TEXT}"`
  !endif
  !verbose ${XPUI_VERBOSE}
StrCmp $0 ${VAR} 0 XPUI.description_${VAR}_done
SendMessage $XPUI_TEMP1 0xC 0 `STR:`
EnableWindow $XPUI_TEMP1 1
SendMessage $XPUI_TEMP1 0xC 0 `STR:${TEXT}`
Goto XPUI.description_done
XPUI.description_${VAR}_done:
!verbose pop
!macroend

!macro XPUI_DESCRIPTION_END
XPUI.description_done:
!macroend


!macro XPUI_FUNCTION_DESCRIPTION_BEGIN
!verbose push
  !verbose 4
  !ifndef XPUI_SILENT
    !echo `!insertmacro: XPUI_FUNCTION_DESCRIPTION_BEGIN (Start Description Function)`
  !endif
  !verbose ${XPUI_VERBOSE}
Function .onMouseOverSection
FindWindow $XPUI_TEMP1 `#32770` `` $HWNDPARENT
GetDlgItem $XPUI_TEMP1 $XPUI_TEMP1 1042
SendMessage $XPUI_TEMP1 0xC 0 `STR:$XPUI_TEMP2`
!insertmacro XPUI_DESCRIPTION_BEGIN
!verbose pop
!macroend

!macro XPUI_FUNCTION_DESCRIPTION_END
!verbose push
  !verbose 4
  !ifndef XPUI_SILENT
    !echo `!insertmacro: XPUI_FUNCTION_DESCRIPTION_END (End Description Function)`
  !endif
  !verbose ${XPUI_VERBOSE}
!insertmacro XPUI_DESCRIPTION_END
FunctionEnd
!verbose pop
!macroend

; END SECTION DESCRIPTION CODE

; Macros - Left Info Panel
!macro XPUI_LEFT_SETTIME M

  Push $XPUI_TEMP1
  
    !ifndef XPUI_BGIMAGE
    SetBrandingImage /IMGID=1302 "$PLUGINSDIR\LeftImg.bmp"
    !else
    SetBrandingImage /IMGID=1099 "$PLUGINSDIR\BgImage.bmp"
    !endif
  
    GetDlgItem $XPUI_TEMP1 $HWNDPARENT 1100
    ShowWindow $XPUI_TEMP1 0
    SendMessage $XPUI_TEMP1 0xC 0 "STR:Setup will complete in approximately:"
    ShowWindow $XPUI_TEMP1 5
    
    GetDlgItem $XPUI_TEMP1 $HWNDPARENT 1101
    ShowWindow $XPUI_TEMP1 0
    SendMessage $XPUI_TEMP1 0xC 0 "STR:${M}"
    ShowWindow $XPUI_TEMP1 5
    
  Pop $XPUI_TEMP1

!macroend

!macro XPUI_LEFT_STATUS T B

  Push $XPUI_TEMP1
  
    !ifndef XPUI_BGIMAGE
    SetBrandingImage /IMGID=1302 "$PLUGINSDIR\LeftImg.bmp"
    !else
    SetBrandingImage /IMGID=1099 "$PLUGINSDIR\BgImage.bmp"
    !endif
    
    GetDlgItem $XPUI_TEMP1 $HWNDPARENT 1100
    ShowWindow $XPUI_TEMP1 0
    SendMessage $XPUI_TEMP1 0xC 0 "STR:${T}"
    ShowWindow $XPUI_TEMP1 5

    GetDlgItem $XPUI_TEMP1 $HWNDPARENT 1101
    ShowWindow $XPUI_TEMP1 0
    SendMessage $XPUI_TEMP1 0xC 0 "STR:${B}"
    ShowWindow $XPUI_TEMP1 5
    
  Pop $XPUI_TEMP1

!macroend

!macro XPUI_LEFT_BLANK

  Push $XPUI_TEMP1
    GetDlgItem $XPUI_TEMP1 $HWNDPARENT 1100
    ShowWindow $XPUI_TEMP1 0

    GetDlgItem $XPUI_TEMP1 $HWNDPARENT 1101
    ShowWindow $XPUI_TEMP1 0
  Pop $XPUI_TEMP1

!macroend

!macro XPUI_LEFT_MESSAGE T M B

  !define XPUI_LMB_CHECK_${B}
  
  !ifdef XPUI_LMB_CHECK_1 | XPUI_LMB_CHECK_2 | XPUI_LMB_CHECK_3
  !else
    !error "XPUI_LEFT_MESSAGE: Syntax error$\nUsage: !insertmacro XPUI_LEFT_MESSAGE message_title message_text type(1|2|3)$\nType: 1 - OK button, 2 - OK and cancel buttons, 3 - Yes and No buttons"
  !endif
  
  !ifdef XPUI_BGIMAGE
    !insertmacro XPUI_DEFAULT XPUI_LMB_TRANSPARENT ""
  !endif
  
  StrCmp $XPUI_ABORTED 1 0 +2
    Abort
  
  !ifndef XPUI_LMB_TRANSPARENT
    GetDlgItem $XPUI_TEMP1 $HWNDPARENT 1302
    ShowWindow $XPUI_TEMP1 0
  !endif
  
  SetOutPath $PLUGINSDIR
  File "${XPUI_SYSDIR}\INI\MBSide.ini"
  
  InstallOptions::initDialog /NOUNLOAD $PLUGINSDIR\MBSide.ini

    Pop $XPUI_HWND
    
    !ifdef XPUI_LMB_TRANSPARENT
      !insertmacro XPUI_CONTROL_SKIN_TRANS $XPUI_HWND
    !else
      !insertmacro XPUI_CONTROL_SKIN $XPUI_HWND
    !endif
    
    GetDlgItem $XPUI_TEMP1 $XPUI_HWND 1203
    !insertmacro XPUI_CONTROL_SKIN_LIGHT_TRANS $XPUI_TEMP1
    CreateFont $XPUI_TEMP2 "Arial" 8 700
    SendMessage $XPUI_TEMP1 0x30 $XPUI_TEMP2 0
    SendMessage $XPUI_TEMP1 0xC 0 `STR:${T}`
    
    GetDlgItem $XPUI_TEMP1 $XPUI_HWND 1204
    !insertmacro XPUI_CONTROL_SKIN_TRANS $XPUI_TEMP1
    CreateFont $XPUI_TEMP2 "Arial" 8 350
    SendMessage $XPUI_TEMP1 0x30 $XPUI_TEMP2 0
    SendMessage $XPUI_TEMP1 0xC 0 `STR:${M}`
    
    ; Buttons
    !ifdef XPUI_LMB_CHECK_1

      GetDlgItem $XPUI_TEMP1 $XPUI_HWND 1200
      ShowWindow $XPUI_TEMP1 5
      SendMessage $XPUI_TEMP1 0xC 0 STR:OK
      
      GetDlgItem $XPUI_TEMP1 $XPUI_HWND 1201
      ShowWindow $XPUI_TEMP1 0
      
      GetDlgItem $XPUI_TEMP1 $XPUI_HWND 1202
      ShowWindow $XPUI_TEMP1 0
      
    !else ifdef XPUI_LMB_CHECK_2

      GetDlgItem $XPUI_TEMP1 $XPUI_HWND 1200
      ShowWindow $XPUI_TEMP1 0

      GetDlgItem $XPUI_TEMP1 $XPUI_HWND 1201
      ShowWindow $XPUI_TEMP1 5
      SendMessage $XPUI_TEMP1 0xC 0 STR:OK

      GetDlgItem $XPUI_TEMP1 $XPUI_HWND 1202
      ShowWindow $XPUI_TEMP1 5
      SendMessage $XPUI_TEMP1 0xC 0 STR:Cancel

    !else ifdef XPUI_LMB_CHECK_3

      GetDlgItem $XPUI_TEMP1 $XPUI_HWND 1200
      ShowWindow $XPUI_TEMP1 0

      GetDlgItem $XPUI_TEMP1 $XPUI_HWND 1201
      ShowWindow $XPUI_TEMP1 5
      SendMessage $XPUI_TEMP1 0xC 0 STR:Yes

      GetDlgItem $XPUI_TEMP1 $XPUI_HWND 1202
      ShowWindow $XPUI_TEMP1 5
      SendMessage $XPUI_TEMP1 0xC 0 STR:No

    !endif
    
    GetDlgItem $XPUI_TEMP1 $HWNDPARENT 1
    ShowWindow $XPUI_TEMP1 0
    
    LockWindow off
    
  InstallOptions::show
  
  !ifndef XPUI_LMB_TRANSPARENT
    GetDlgItem $XPUI_TEMP1 $HWNDPARENT 1302
    ShowWindow $XPUI_TEMP1 5
  !endif
  GetDlgItem $XPUI_TEMP1 $HWNDPARENT 1
  ShowWindow $XPUI_TEMP1 5
  
  ReadINIStr $XPUI_TEMP2 $PLUGINSDIR\MBSide.ini Settings State
  
  !undef XPUI_LMB_CHECK_${B}

!macroend

; This include is the entire multi-language system.  Without it, you're lost.  This is
; really the only part from the old code that was completely spared.
!include "${XPUI_SYSDIR}\Lang.nsh"
!define Language "!insertmacro XPUI_LANGUAGE"
!define LangDialog "!insertmacro XPUI_LANGDLL_DISPLAY"
!define LangPage "!insertmacro XPUI_LANGPAGE_DISPLAY"

!insertmacro XPUI_PAGEMODE_INST

; Skin Includes
  !ifdef XPUI_SKIN
    !ifndef XPUI_SKIN_INCLUDED
    !define XPUI_SKIN_INCLUDED
    !verbose push
    !verbose 3 ; Allow errors to be exposed
    !include "${XPUI_SYSDIR}\Skins\${XPUI_SKIN}.xpuiskin"
    !verbose pop
    !endif
  !endif

!ifdef XPUI_FASTERSKINNING
  !insertmacro XPUI_DEFAULT XPUI_INTERNAL_INTERFACE_INSERTED ""
  !insertmacro XPUI_INTERFACE
!endif

!verbose 4
!ifndef XPUI_SILENT
!echo `XPUI Processing Complete.$\n$\n`
!endif ;XPUI_SILENT
!verbose pop
!endif ;XPUI_INCLUDED