]> git.street.me.uk Git - andy/viking.git/commitdiff
Windows: Add .vik file extension association option in the installer
authorMathieu Albinet <mathieu17@gmail.com>
Sat, 16 Feb 2013 00:37:26 +0000 (00:37 +0000)
committerRob Norris <rw_norris@hotmail.com>
Sat, 16 Feb 2013 00:40:05 +0000 (00:40 +0000)
win32/installer/FileAssociation.nsh [new file with mode: 0644]
win32/installer/langmacros.nsh
win32/installer/translations/english.nsh
win32/installer/translations/french.nsh
win32/installer/translations/spanish.nsh
win32/installer/viking-installer.nsi

diff --git a/win32/installer/FileAssociation.nsh b/win32/installer/FileAssociation.nsh
new file mode 100644 (file)
index 0000000..223aa70
--- /dev/null
@@ -0,0 +1,190 @@
+/*\r
+_____________________________________________________________________________\r
\r
+                       File Association\r
+_____________________________________________________________________________\r
\r
+ Based on code taken from http://nsis.sourceforge.net/File_Association \r
\r
+ Usage in script:\r
+ 1. !include "FileAssociation.nsh"\r
+ 2. [Section|Function]\r
+      ${FileAssociationFunction} "Param1" "Param2" "..." $var\r
+    [SectionEnd|FunctionEnd]\r
\r
+ FileAssociationFunction=[RegisterExtension|UnRegisterExtension]\r
\r
+_____________________________________________________________________________\r
\r
+ ${RegisterExtension} "[executable]" "[extension]" "[description]"\r
\r
+"[executable]"     ; executable which opens the file format\r
+                   ;\r
+"[extension]"      ; extension, which represents the file format to open\r
+                   ;\r
+"[description]"    ; description for the extension. This will be display in Windows Explorer.\r
+                   ;\r
\r
\r
+ ${UnRegisterExtension} "[extension]" "[description]"\r
\r
+"[extension]"      ; extension, which represents the file format to open\r
+                   ;\r
+"[description]"    ; description for the extension. This will be display in Windows Explorer.\r
+                   ;\r
\r
+_____________________________________________________________________________\r
\r
+                         Macros\r
+_____________________________________________________________________________\r
\r
+ Change log window verbosity (default: 3=no script)\r
\r
+ Example:\r
+ !include "FileAssociation.nsh"\r
+ !insertmacro RegisterExtension\r
+ ${FileAssociation_VERBOSE} 4   # all verbosity\r
+ !insertmacro UnRegisterExtension\r
+ ${FileAssociation_VERBOSE} 3   # no script\r
+*/\r
\r
\r
+!ifndef FileAssociation_INCLUDED\r
+!define FileAssociation_INCLUDED\r
\r
+!include Util.nsh\r
\r
+!verbose push\r
+!verbose 3\r
+!ifndef _FileAssociation_VERBOSE\r
+  !define _FileAssociation_VERBOSE 3\r
+!endif\r
+!verbose ${_FileAssociation_VERBOSE}\r
+!define FileAssociation_VERBOSE `!insertmacro FileAssociation_VERBOSE`\r
+!verbose pop\r
\r
+!macro FileAssociation_VERBOSE _VERBOSE\r
+  !verbose push\r
+  !verbose 3\r
+  !undef _FileAssociation_VERBOSE\r
+  !define _FileAssociation_VERBOSE ${_VERBOSE}\r
+  !verbose pop\r
+!macroend\r
\r
\r
\r
+!macro RegisterExtensionCall _EXECUTABLE _EXTENSION _DESCRIPTION\r
+  !verbose push\r
+  !verbose ${_FileAssociation_VERBOSE}\r
+  Push `${_DESCRIPTION}`\r
+  Push `${_EXTENSION}`\r
+  Push `${_EXECUTABLE}`\r
+  ${CallArtificialFunction} RegisterExtension_\r
+  !verbose pop\r
+!macroend\r
\r
+!macro UnRegisterExtensionCall _EXTENSION _DESCRIPTION\r
+  !verbose push\r
+  !verbose ${_FileAssociation_VERBOSE}\r
+  Push `${_EXTENSION}`\r
+  Push `${_DESCRIPTION}`\r
+  ${CallArtificialFunction} UnRegisterExtension_\r
+  !verbose pop\r
+!macroend\r
\r
\r
\r
+!define RegisterExtension `!insertmacro RegisterExtensionCall`\r
+!define un.RegisterExtension `!insertmacro RegisterExtensionCall`\r
\r
+!macro RegisterExtension\r
+!macroend\r
\r
+!macro un.RegisterExtension\r
+!macroend\r
\r
+!macro RegisterExtension_\r
+  !verbose push\r
+  !verbose ${_FileAssociation_VERBOSE}\r
\r
+  Exch $R2 ;exe\r
+  Exch\r
+  Exch $R1 ;ext\r
+  Exch\r
+  Exch 2\r
+  Exch $R0 ;desc\r
+  Exch 2\r
+  Push $0\r
+  Push $1\r
\r
+  ReadRegStr $1 HKCR $R1 ""  ; read current file association\r
+  StrCmp "$1" "" NoBackup  ; is it empty\r
+  StrCmp "$1" "$R0" NoBackup  ; is it our own\r
+    WriteRegStr HKCR $R1 "backup_val" "$1"  ; backup current value\r
+NoBackup:\r
+  WriteRegStr HKCR $R1 "" "$R0"  ; set our file association\r
\r
+  ReadRegStr $0 HKCR $R0 ""\r
+  StrCmp $0 "" 0 Skip\r
+    WriteRegStr HKCR "$R0" "" "$R0"\r
+    WriteRegStr HKCR "$R0\shell" "" "open"\r
+    WriteRegStr HKCR "$R0\DefaultIcon" "" "$R2,0"\r
+Skip:\r
+  WriteRegStr HKCR "$R0\shell\open\command" "" '"$R2" "%1"'\r
+  WriteRegStr HKCR "$R0\shell\edit" "" "Edit $R0"\r
+  WriteRegStr HKCR "$R0\shell\edit\command" "" '"$R2" "%1"'\r
\r
+  Pop $1\r
+  Pop $0\r
+  Pop $R2\r
+  Pop $R1\r
+  Pop $R0\r
\r
+  !verbose pop\r
+!macroend\r
\r
\r
\r
+!define UnRegisterExtension `!insertmacro UnRegisterExtensionCall`\r
+!define un.UnRegisterExtension `!insertmacro UnRegisterExtensionCall`\r
\r
+!macro UnRegisterExtension\r
+!macroend\r
\r
+!macro un.UnRegisterExtension\r
+!macroend\r
\r
+!macro UnRegisterExtension_\r
+  !verbose push\r
+  !verbose ${_FileAssociation_VERBOSE}\r
\r
+  Exch $R1 ;desc\r
+  Exch\r
+  Exch $R0 ;ext\r
+  Exch\r
+  Push $0\r
+  Push $1\r
\r
+  ReadRegStr $1 HKCR $R0 ""\r
+  StrCmp $1 $R1 0 NoOwn ; only do this if we own it\r
+  ReadRegStr $1 HKCR $R0 "backup_val"\r
+  StrCmp $1 "" 0 Restore ; if backup="" then delete the whole key\r
+  DeleteRegKey HKCR $R0\r
+  Goto NoOwn\r
\r
+Restore:\r
+  WriteRegStr HKCR $R0 "" $1\r
+  DeleteRegValue HKCR $R0 "backup_val"\r
+  DeleteRegKey HKCR $R1 ;Delete key with association name settings\r
\r
+NoOwn:\r
\r
+  Pop $1\r
+  Pop $0\r
+  Pop $R1\r
+  Pop $R0\r
\r
+  !verbose pop\r
+!macroend\r
\r
+!endif # !FileAssociation_INCLUDED\r
index 509d1e7033ee40ae5c37013e5bbc13d87f5177f0..70cee9568017376cd3219c0ff7044d5b6dfe3f7c 100644 (file)
   !insertmacro VIKING_MACRO_LANGSTRING_INSERT VIKING_SHORTCUTS_SECTION_TITLE   ${CUR_LANG}
   !insertmacro VIKING_MACRO_LANGSTRING_INSERT VIKING_DESKTOP_SHORTCUT_SECTION_TITLE ${CUR_LANG}
   !insertmacro VIKING_MACRO_LANGSTRING_INSERT VIKING_STARTMENU_SHORTCUT_SECTION_TITLE  ${CUR_LANG}
+  !insertmacro VIKING_MACRO_LANGSTRING_INSERT VIKING_FILE_ASSOCIATION_SECTION_TITLE    ${CUR_LANG}
   !insertmacro VIKING_MACRO_LANGSTRING_INSERT VIKING_SECTION_DESCRIPTION               ${CUR_LANG}
   !insertmacro VIKING_MACRO_LANGSTRING_INSERT VIKING_SHORTCUTS_SECTION_DESCRIPTION     ${CUR_LANG}
   !insertmacro VIKING_MACRO_LANGSTRING_INSERT VIKING_DESKTOP_SHORTCUT_DESC             ${CUR_LANG}
   !insertmacro VIKING_MACRO_LANGSTRING_INSERT VIKING_STARTMENU_SHORTCUT_DESC   ${CUR_LANG}
+  !insertmacro VIKING_MACRO_LANGSTRING_INSERT VIKING_FILE_ASSOCIATION_DESC     ${CUR_LANG}
 
   ; Installer Finish Page
   !insertmacro VIKING_MACRO_LANGSTRING_INSERT VIKING_FINISH_VISIT_WEB_SITE             ${CUR_LANG}
index 4bb354d4d8c5953c93f5e6dcf2c4263b11041dc8..beefa1605b4772d04b722971296787ddf26e2a76 100644 (file)
 !insertmacro VIKING_MACRO_DEFAULT_STRING VIKING_SHORTCUTS_SECTION_TITLE                "Shortcuts"
 !insertmacro VIKING_MACRO_DEFAULT_STRING VIKING_DESKTOP_SHORTCUT_SECTION_TITLE "Desktop"
 !insertmacro VIKING_MACRO_DEFAULT_STRING VIKING_STARTMENU_SHORTCUT_SECTION_TITLE       "Start Menu"
+!insertmacro VIKING_MACRO_DEFAULT_STRING VIKING_FILE_ASSOCIATION_SECTION_TITLE "File association"
 !insertmacro VIKING_MACRO_DEFAULT_STRING VIKING_SECTION_DESCRIPTION            "Core Viking files and dlls"
 !insertmacro VIKING_MACRO_DEFAULT_STRING GTK_SECTION_DESCRIPTION               "A multi-platform GUI toolkit, used by Viking"
 
 !insertmacro VIKING_MACRO_DEFAULT_STRING VIKING_SHORTCUTS_SECTION_DESCRIPTION  "Shortcuts for starting Viking"
 !insertmacro VIKING_MACRO_DEFAULT_STRING VIKING_DESKTOP_SHORTCUT_DESC          "Create a shortcut to Viking on the Desktop"
 !insertmacro VIKING_MACRO_DEFAULT_STRING VIKING_STARTMENU_SHORTCUT_DESC                "Create a Start Menu entry for Viking"
+!insertmacro VIKING_MACRO_DEFAULT_STRING VIKING_FILE_ASSOCIATION_DESC    "Associate .vik files with Viking"
 
 ; Installer Finish Page
 !insertmacro VIKING_MACRO_DEFAULT_STRING VIKING_FINISH_VISIT_WEB_SITE          "Visit the Viking Web Page"
index 02f8ce34739657c1feaf27c257ac35be52130924..fae5d582c6d9732b09edcfc91899785af3e78d8e 100644 (file)
 !define VIKING_SHORTCUTS_SECTION_TITLE         "Raccourcis"
 !define VIKING_DESKTOP_SHORTCUT_SECTION_TITLE  "Bureau"
 !define VIKING_STARTMENU_SHORTCUT_SECTION_TITLE        "Menu Démarrer"
+!define VIKING_FILE_ASSOCIATION_SECTION_TITLE  "Extension .vik"
 !define VIKING_SECTION_DESCRIPTION             "Fichiers et DLLs de base de Viking"
 
 !define VIKING_SHORTCUTS_SECTION_DESCRIPTION   "Raccourcis pour lancer Viking"
 !define VIKING_DESKTOP_SHORTCUT_DESC           "Créer un raccourci pour Viking sur le bureau"
 !define VIKING_STARTMENU_SHORTCUT_DESC         "Créer un raccourci pour Viking dans le menu Démarrer"
+!define VIKING_FILE_ASSOCIATION_DESC    "Associer Viking avec l'extension .vik"
 
 ; Installer Finish Page
 !define VIKING_FINISH_VISIT_WEB_SITE           "Visitez la page web de Viking" 
index 48627e8a64307835d8800225ed384205f9d243c2..a66303309184419f136dd47a15a8517eac6dd879 100644 (file)
@@ -5,7 +5,7 @@
 ;;  Spanish language strings for the Windows Viking NSIS installer.\r
 ;;  Windows Code page: 1252\r
 ;;\r
-;;  Author: Roberto Camarero <rcamarero@gmail.com>\r
+;;  Author: Roberto\r
 ;;\r
 ;; Modified for Viking by Mathieu Albinet <mathieu_a@users.sourceforge.net>\r
 \r
 !define VIKING_SHORTCUTS_SECTION_TITLE         "Accesos directos"\r
 !define VIKING_DESKTOP_SHORTCUT_SECTION_TITLE  "Escritorio"\r
 !define VIKING_STARTMENU_SHORTCUT_SECTION_TITLE        "Menú Inicio"\r
+!define VIKING_FILE_ASSOCIATION_SECTION_TITLE  "Extensión.vik"\r
 !define VIKING_SECTION_DESCRIPTION             "Ficheros y DLLs de base de Viking"\r
 \r
 !define VIKING_SHORTCUTS_SECTION_DESCRIPTION   "Accesos directos para lanzar Viking"\r
 !define VIKING_DESKTOP_SHORTCUT_DESC           "Crear un acceso directo a Viking en el escritorio"\r
 !define VIKING_STARTMENU_SHORTCUT_DESC         "Crear un acceso directo a Viking en el menú de inicio"\r
+!define VIKING_FILE_ASSOCIATION_DESC    "Asociar Viking con la extensión .vik"\r
 \r
 ; Installer Finish Page\r
 !define VIKING_FINISH_VISIT_WEB_SITE           "Visite la página web de Viking" \r
index cfb2d91d91e66a873a6bdd40a7f02774f7416be5..2ce49dcb0428b77de17183765a0b24222c716bd5 100644 (file)
@@ -28,6 +28,8 @@ SetDateSave on
 !include "Sections.nsh"
 !include "WinVer.nsh"
 !include "LogicLib.nsh"
+;; http://nsis.sourceforge.net/File_Association
+!include "FileAssociation.nsh"
 
 !include "FileFunc.nsh"
 !insertmacro GetParameters
@@ -279,15 +281,12 @@ SectionGroup /e $(VIKING_SHORTCUTS_SECTION_TITLE) SecShortcuts
   SectionEnd
 SectionGroupEnd
 
+;--------------------------------
+;File association
 
-
-
-
-
-
-
-
-
+Section $(VIKING_FILE_ASSOCIATION_SECTION_TITLE) SecFileAssociation
+  ${registerExtension} "$INSTDIR\viking.exe" ".vik" "Viking File"
+SectionEnd
 
 
 ;--------------------------------
@@ -326,6 +325,9 @@ Section Uninstall
     ; Shortcuts..
     Delete "$DESKTOP\Viking.lnk"
 
+    ; File association
+    ${unregisterExtension} ".vik" "Viking File"
+
     Goto done
 
   cant_uninstall:
@@ -351,6 +353,8 @@ SectionEnd ; end of uninstall section
         $(VIKING_DESKTOP_SHORTCUT_DESC)
   !insertmacro MUI_DESCRIPTION_TEXT ${SecStartMenuShortcut} \
         $(VIKING_STARTMENU_SHORTCUT_DESC)
+  !insertmacro MUI_DESCRIPTION_TEXT ${SecFileAssociation} \
+        $(VIKING_FILE_ASSOCIATION_DESC)
 
 !insertmacro MUI_FUNCTION_DESCRIPTION_END