diff --git a/stepmania/Installer/custom.bmp b/stepmania/Installer/custom.bmp new file mode 100644 index 0000000000..977f1ac364 Binary files /dev/null and b/stepmania/Installer/custom.bmp differ diff --git a/stepmania/Installer/custom.ini b/stepmania/Installer/custom.ini new file mode 100644 index 0000000000..840b11d4f9 --- /dev/null +++ b/stepmania/Installer/custom.ini @@ -0,0 +1,47 @@ +[Settings] +NumFields=5 + +[Field 1] +Type=Button +Flags=NOTIFY +Text=&Install +Left=160 +Right=-10 +Top=50 +Bottom=70 + +[Field 2] +Type=Button +Flags=NOTIFY +Text=&Play +Left=160 +Right=-10 +Top=30 +Bottom=50 + +[Field 3] +Type=Button +Flags=NOTIFY +Text=&Re-Install +Left=160 +Right=-10 +Top=60 +Bottom=80 + +[Field 4] +Type=Link +Text=http://www.urlhere.com +State=http://www.urlhere.com +Left=160 +Right=-10 +Top=130 +Bottom=140 + +[Field 5] +Type=Bitmap +Text=custom.bmp +Flags=TRANSPARENT +Left=0 +Right=150 +Top=0 +Bottom=120 \ No newline at end of file diff --git a/stepmania/src/ProductInfo.inc b/stepmania/src/ProductInfo.inc index 0b276a34ec..5d4dab82af 100644 --- a/stepmania/src/ProductInfo.inc +++ b/stepmania/src/ProductInfo.inc @@ -13,3 +13,4 @@ !define PRODUCT_URL "http://www.stepmania.com" ;!define INSTALL_TYPE_PCKS +;!define SHOW_AUTORUN diff --git a/stepmania/stepmania.nsi b/stepmania/stepmania.nsi index 3c3fdcecdd..3aa7280750 100644 --- a/stepmania/stepmania.nsi +++ b/stepmania/stepmania.nsi @@ -61,6 +61,10 @@ ;-------------------------------- ;Pages +!ifdef SHOW_AUTORUN + Page custom ShowCustom LeaveCustom +!endif + ;!insertmacro MUI_PAGE_LICENSE "${NSISDIR}\Docs\Modern UI\License.txt" ;!insertmacro MUI_PAGE_COMPONENTS !insertmacro MUI_PAGE_DIRECTORY @@ -329,9 +333,80 @@ SectionEnd ;-------------------------------- ;Installer Functions -Function .onInit +LangString TEXT_IO_TITLE ${LANG_ENGLISH} "InstallOptions page" +LangString TEXT_IO_SUBTITLE ${LANG_ENGLISH} "This is a page created using the InstallOptions plug-in." - !insertmacro MUI_LANGDLL_DISPLAY +Var hwnd ; Window handle of the custom page + +Function ShowCustom + + !insertmacro MUI_HEADER_TEXT "$(TEXT_IO_TITLE)" "$(TEXT_IO_SUBTITLE)" + + InstallOptions::initDialog /NOUNLOAD "$PLUGINSDIR\custom.ini" + ; In this mode InstallOptions returns the window handle so we can use it + Pop $hwnd + + GetDlgItem $1 $HWNDPARENT 1 ; Next button + ShowWindow $1 0 + + + StrCpy $R1 "$INSTDIR\uninst.exe" + StrCpy $R2 "_=" + IfFileExists "$R1" uninstall_available + StrCpy $R1 "$INSTDIR\uninstall.exe" + StrCpy $R2 "_?=" + IfFileExists "$R1" uninstall_available + + GetDlgItem $1 $hwnd 1201 ; Second cutom control + ShowWindow $1 0 + GetDlgItem $1 $hwnd 1202 ; Third cutom control + ShowWindow $1 0 + Goto uninstall_done + + uninstall_available: + GetDlgItem $1 $hwnd 1200 ; First cutom control + ShowWindow $1 0 + + uninstall_done: + + ; Now show the dialog and wait for it to finish + InstallOptions::show + + ; Finally fetch the InstallOptions status value (we don't care what it is though) + Pop $0 + +FunctionEnd + +Function LeaveCustom + + ; At this point the user has either pressed Next or one of our custom buttons + ; We find out which by reading from the INI file + ReadINIStr $0 "$PLUGINSDIR\custom.ini" "Settings" "State" + StrCmp $0 1 install + StrCmp $0 2 play + StrCmp $0 3 install + Goto proceed + + install: + Call PreInstall + GoTo proceed + + play: + Exec "$INSTDIR\Program\${PRODUCT_NAME}.exe" + IfErrors play_error + quit + + play_error: + MessageBox MB_ICONEXCLAMATION "Could not execute $INSTDIR\Program\${PRODUCT_NAME}.exe" + abort + + proceed: + GetDlgItem $1 $HWNDPARENT 1 ; Next button + ShowWindow $1 1 + +FunctionEnd + +Function PreInstall ; force uninstall of previous version using NSIS ; We need to wait until the uninstaller finishes before continuing, since it's possible @@ -394,6 +469,28 @@ Function .onInit FunctionEnd +Function .onInit + + ; Show language selection for debugging + ;!insertmacro MUI_LANGDLL_DISPLAY + +!ifdef SHOW_AUTORUN + ; + ; Extract files for the InstallOptions page + ; + !insertmacro MUI_INSTALLOPTIONS_EXTRACT_AS "Installer\custom.ini" "custom.ini" + ;$PLUGINSDIR will automatically be removed when the installer closes + InitPluginsDir + WriteINIStr $PLUGINSDIR\custom.ini "Field 4" "Text" "${PRODUCT_URL}" + WriteINIStr $PLUGINSDIR\custom.ini "Field 4" "State" "${PRODUCT_URL}" + File /oname=$PLUGINSDIR\image.bmp "Installer\custom.bmp" + WriteINIStr $PLUGINSDIR\custom.ini "Field 5" "Text" $PLUGINSDIR\image.bmp +!else + call PreInstall +!endif + +FunctionEnd + ;-------------------------------- ;Descriptions