# Include the "Modern UI" header, which gives us the usual Windows look-n-feel.
!include "MUI2.nsh"
+# Include the file association header so that we can register file extensions.
+!include "FileAssociation.nsh"
+
# --- Global stuff ------------------------------------------------------------
# Change this to where-ever you installed libsigrok.a and so on.
!define CROSS "@CMAKE_INSTALL_PREFIX@"
+# Defines for WinAPI SHChangeNotify call.
+!define SHCNE_ASSOCCHANGED 0x8000000
+!define SHCNF_IDLIST 0
+
+
+# --- Functions ---------------------------------------------------------------
+
+Function register_sr_files
+ ${registerExtension} "$INSTDIR\pulseview.exe" ".sr" "sigrok session file"
+
+ # Force Windows to update the icon cache so that the icon for .sr files shows up.
+ System::Call 'Shell32::SHChangeNotify(i ${SHCNE_ASSOCCHANGED}, i ${SHCNF_IDLIST}, i 0, i 0)'
+FunctionEnd
+
# --- MUI pages ---------------------------------------------------------------
# Perform the actual installation, i.e. install the files.
!insertmacro MUI_PAGE_INSTFILES
+# Insert the "Show Readme" button in the finish dialog. We repurpose it for
+# registering the .sr file extension. This way, we don't need to add in-depth
+# modifications to the finish page.
+!define MUI_FINISHPAGE_SHOWREADME ""
+!define MUI_FINISHPAGE_SHOWREADME_CHECKED
+!define MUI_FINISHPAGE_SHOWREADME_TEXT "Register .sr files with PulseView"
+!define MUI_FINISHPAGE_SHOWREADME_FUNCTION register_sr_files
+
# Show a final "We're done, click Finish to close this wizard" message.
!insertmacro MUI_PAGE_FINISH
# Delete the registry key(s).
DeleteRegKey HKLM "${REGSTR}"
+ # Unregister any previously registered file extension(s).
+ ${unregisterExtension} ".sr" "sigrok session file"
+
+ # Force Windows to update the icon cache so that the icon for .sr files is reset.
+ System::Call 'Shell32::SHChangeNotify(i ${SHCNE_ASSOCCHANGED}, i ${SHCNF_IDLIST}, i 0, i 0)'
SectionEnd