;------------------------------------
;Settings
;------------------------------------
  !define GLOB2_PATH "C:\mingw\home\Kieran\glob2_runtime\"
  Name "Globulation 2"
  OutFile "glob2win32_alpha18.exe"
  InstallDir $PROGRAMFILES\Globulation_2
  ;------------------------------------
  ;Setup registery key
  ;------------------------------------
    InstallDirRegKey HKCU "Software\Globulation_2" ""
  ;------------------------------------
  ;Variables
  ;------------------------------------
    Var MUI_TEMP
    Var STARTMENU_FOLDER


;------------------------------------
;Style
;------------------------------------
  !include "MUI.nsh"
  !define MUI_HEADERIMAGE
  !define MUI_HEADERIMAGE_BITMAP "${NSISDIR}\Contrib\Graphics\Header\nsis.bmp"
  !define MUI_ABORTWARNING


;------------------------------------
;Pages
;------------------------------------
  !insertmacro MUI_PAGE_WELCOME
  !insertmacro MUI_PAGE_LICENSE "C:\mingw\home\Kieran\glob2\COPYING"
  !insertmacro MUI_PAGE_COMPONENTS
  !insertmacro MUI_PAGE_DIRECTORY
  !define MUI_STARTMENUPAGE_REGISTRY_ROOT "HKCU" 
  !define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\Globulation_2" 
  !define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder"
  !insertmacro MUI_PAGE_STARTMENU Application $STARTMENU_FOLDER
  !insertmacro MUI_PAGE_INSTFILES
  !insertmacro MUI_FINISHPAGE_RUN $INSTDIR\glob2.exe
  !insertmacro MUI_UNPAGE_CONFIRM
  !insertmacro MUI_UNPAGE_INSTFILES
  !insertmacro MUI_UNPAGE_FINISH


;------------------------------------
;Language Selection Dialog Settings
;------------------------------------
  !define MUI_LANGDLL_REGISTRY_ROOT "HKCU" 
  !define MUI_LANGDLL_REGISTRY_KEY "Software\Globulation_2" 
  !define MUI_LANGDLL_REGISTRY_VALUENAME "Installer Language"
  ;------------------------------------
  ;Languages
  ;------------------------------------
    !insertmacro MUI_LANGUAGE "English"


;------------------------------------
;Commands for the installer
;------------------------------------
  Section "$(LABEL_CoreFiles)" DESC_CoreFiles
  SectionIn RO
  ;------------------------------------
  ;Install Globulation 2 runtime
  ;------------------------------------
    SetOutPath $INSTDIR
    File /r ${GLOB2_PATH}\*.*
  ;------------------------------------
  ;Install shortcuts
  ;------------------------------------
    !insertmacro MUI_STARTMENU_WRITE_BEGIN Application
    CreateDirectory "$SMPROGRAMS\$STARTMENU_FOLDER"
    CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\Uninstall.lnk" "$INSTDIR\glob2win32-uninst.exe" "" "$INSTDIR\glob2win32-uninst.exe" 0
    CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\Globulation 2.lnk" "$INSTDIR\glob2.exe" "" "$INSTDIR\icon.ico"
    CreateShortCut "$DESKTOP\Globulation 2.lnk" "$INSTDIR\glob2.exe" "" "$INSTDIR\icon.ico"
    !insertmacro MUI_STARTMENU_WRITE_END
  ;------------------------------------
  ;Set registery values
  ;------------------------------------
    WriteRegStr HKCU "Software\Globulation_2" "" $INSTDIR
    WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Globulation_2" "DisplayName" "Globulation 2"
    WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Globulation_2" "UninstallString" "$INSTDIR\glob2win32-uninst.exe"
    WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Globulation_2" "DisplayIcon" "$INSTDIR\icon.ico"
    WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Globulation_2" "NoModify" "1"
    WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Globulation_2" "NoRepair" "1"
  ;------------------------------------
  ;Create uninstaller file
  ;------------------------------------
    WriteUninstaller "glob2win32-uninst.exe"
  SectionEnd


;------------------------------------
;Installer Functions
;------------------------------------
  Function .onInit
  ;------------------------------------
  ;Show already running installer
  ;------------------------------------  
    System::Call "kernel32::CreateMutexA(i 0, i 0, t '$(^Name)') i .r0 ?e"
    Pop $0
    StrCmp $0 0 launch
    StrLen $0 "$(^Name)"
    IntOp $0 $0 + 1
    loop:
    FindWindow $1 '#32770' '' 0 $1
    IntCmp $1 0 +4
    System::Call "user32::GetWindowText(i r1, t .r2, i r0) i."
    StrCmp $2 "$(^Name)" 0 loop
    System::Call "user32::SetForegroundWindow(i r1) i."
    Abort
    launch:
  !insertmacro MUI_LANGDLL_DISPLAY
  FunctionEnd


;------------------------------------
;Language Strings
;------------------------------------
  ;------------------------------------  
  ;Language translations
  ;------------------------------------
    LangString LABEL_CoreFiles ${LANG_ENGLISH} "Globulation 2 core files"
    LangString DESC_CoreFiles ${LANG_ENGLISH} "Installs all the core files and graphics need to run the game."
  ;------------------------------------
  ;Assign language strings to sections
  ;------------------------------------
    !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
    !insertmacro MUI_DESCRIPTION_TEXT ${DESC_CoreFiles} $(DESC_CoreFiles)
    !insertmacro MUI_FUNCTION_DESCRIPTION_END


;------------------------------------
;Commands for the uninstaller
;------------------------------------
  Section "Uninstall"
  ;------------------------------------
  ;Delete Globulation 2 files and directories
  ;------------------------------------
    RMDir /r "$INSTDIR"
  ;------------------------------------
  ;Delete shortcuts
  ;------------------------------------
    !insertmacro MUI_STARTMENU_GETFOLDER Application $MUI_TEMP
    Delete "$SMPROGRAMS\$MUI_TEMP\*.*"
    Delete "$DESKTOP\Globulation 2.lnk"
    ;------------------------------------
    ;Delete empty start menu diretories
    ;------------------------------------
      StrCpy $MUI_TEMP "$SMPROGRAMS\$MUI_TEMP"
      startMenuDeleteLoop:
      ClearErrors
      RMDir $MUI_TEMP
      GetFullPathName $MUI_TEMP "$MUI_TEMP\.."
      IfErrors startMenuDeleteLoopDone
      StrCmp $MUI_TEMP $SMPROGRAMS startMenuDeleteLoopDone startMenuDeleteLoop
      startMenuDeleteLoopDone:
  ;------------------------------------
  ;Delete registery keys
  ;------------------------------------
    DeleteRegKey /ifempty HKCU "Software\Globulation_2"
    DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Globulation_2"
  SectionEnd


;------------------------------------
;Uninstaller Functions
;------------------------------------
  Function un.onInit
  ;------------------------------------
  ;Show already running uninstaller
  ;------------------------------------  
    System::Call "kernel32::CreateMutexA(i 0, i 0, t '$(^Name)') i .r0 ?e"
    Pop $0
    StrCmp $0 0 launch
    StrLen $0 "$(^Name)"
    IntOp $0 $0 + 1
    loop:
    FindWindow $1 '#32770' '' 0 $1
    IntCmp $1 0 +4
    System::Call "user32::GetWindowText(i r1, t .r2, i r0) i."
    StrCmp $2 "$(^Name)" 0 loop
    System::Call "user32::SetForegroundWindow(i r1) i."
    Abort
    launch:
  ;------------------------------------
  ;Make sure Globulation 2 isn't running
  ;------------------------------------  
    FindWindow $0 "" "Globulation 2"
    StrCmp $0 0 continueInstall
    MessageBox MB_ICONSTOP|MB_OK "The application you are trying to remove is currently running. Close it and try again."
    Abort
    continueInstall:
  !insertmacro MUI_UNGETLANGUAGE
  FunctionEnd