OSDN Git Service

Add Lithuanian translation
[winmerge-jp/winmerge-jp.git] / Installer / InnoSetup / WinMerge.iss
1 ;           Programmed by:  Christian Blackburn, Christian List, Kimmo Varis,\r
2 ;                 Purpose:  The is the Inno Setup installation script for distributing our WinMerge application.\r
3 ; Tools Needed To Compile:  Inno Setup 5.1.7+ (http://www.jrsoftware.org/isdl.php), Inno Setup QuickStart Pack 5.1.7+(http://www.jrsoftware.org/isdl.php)\r
4 ;                           note: the versions of Inno Setup and the QuickStart Pack should be identical to ensure proper function\r
5 ;Directly Dependant Files:  Because this is an installer. It would be difficult to list and maintain each of the files referenced\r
6 ;                           throughout the script in the header.  If you search this plain text script for a particular file in our Subversio repository and it\r
7 ;                           doesn't appear then this script is not directly dependant on that file.\r
8 ;Compilation Instructions:  1.  Open this file in Inno Setup or ISTool\r
9 ;                           2.  Make sure Compression=LZMA/Ultra, InternalCompressLevel=Ultra, and SolidCompression=True these values are lowered during\r
10 ;                               development to speed up compilation, however at release we want the intaller to be as strong as possible.\r
11 ;                           3. Check all files are present:\r
12 ;                                   -From ISTool Click\r
13 ;                           4.  Compile the script: "Project" --> "Verify Files..."\r
14 ;                                   -From Inno Setup "Click "Build" --> "Compile"\r
15 ;                                   -From ISTool Click "Project" --> "Compile Setup"\r
16 ;                           5.  The compiled installer will appear in the \InnoSetup\Output\ directory at currently should be around 1.5MBs in size.\r
17 ;\r
18 ; Installer To Do List:\r
19 ; #  Make the Install7ZipDll() Function automatically work with future versions of Merge7zDLL (Use GetCurentFileName)\r
20 ; #  Provide the option to or not to assign the Ctrl+Alt+M accelerator to WinMerge., make sure it's turned on for at least one icon\r
21 ; #  Add WinMerge to the user's path so they can execute comparison's from a Dos Prompt (Cmd.exe/Command.exe)\r
22 ; #  We need to unregister, and delete the ShellExtension Dll if the user doesn't want it, during installation\r
23 \r
24 ; #  Display integration options in gray rather than hiding them if the user doesn't have the application in question installed\r
25 ; #  We need to ask those that have the RCLLocalization.dll in their plugins folder if they actually want it, their answer will need to be stored in the registry\r
26 ; #  Write code to detect "\Programs\WinMerge\WinMerge" type start menu installs\r
27 ;\r
28 ; Custom Installer Pages:\r
29 ; #  Bundle 7-Zip with WinMerge or provide on the fly download capability.\r
30 ; #  Allow users to set their working directory via a custom installer page\r
31 ;\r
32 ; Things that make the user's life easier:\r
33 ; #  Create instructions and a sample language file using the Inno Setup Translator Tool (http://www2.arnes.si/~sopjsimo/translator.html)\r
34 ; #  Add "WinMerge is running would you like to close it now?" support with programmatic termination\r
35 ;     -Note: We'll need to add a declares statement to our ISX code so that we can use FindWindowEx directly or a mutex search or two\r
36 ; #  Rather than requiring users to restart we could just kill all intances of Explorer.exe, but we'll need to prompt the user first and restart it\r
37 ;    once the ShellExtension.dll file has been added or removed.\r
38 ;\r
39 ; Non-Essential Features:\r
40 ; #  See about getting a higher resolution copy of the Users's Guide.ico source art from somebody (A 32x32, and or 48x48 would be nice)\r
41 ; #  Using the registry set the order our icons appear within their group in the start menu.:\r
42 ;      1.  WinMerge\r
43 ;      2.  Read Me\r
44 ;      3.  Users's Guide\r
45 ;      4.  WinMerge on the Web\r
46 ;      5.  Uninstall WinMerge\r
47 ; #  Create the ability to install to two start menu groups simultaneously\r
48 ;\r
49 ; Not yet possible (Limited by Inno Setup):\r
50 ; #  While uninstalling prompt the user as to whether or not they'd like to remove their WinMerge preferences too?\r
51 \r
52 #define AppVersion GetFileVersion(SourcePath + "\..\..\Build\MergeUnicodeRelease\WinMergeU.exe")\r
53 #define FriendlyAppVersion Copy(GetFileVersion(SourcePath + "\..\..\Build\MergeUnicodeRelease\WinMergeU.exe"), 1, 5)\r
54 #define VS120COMNTOOLS GetEnv('VS120COMNTOOLS')\r
55 #define VS140COMNTOOLS GetEnv('VS140COMNTOOLS')\r
56 \r
57 [Setup]\r
58 AppName=WinMerge\r
59 AppVersion={#AppVersion}\r
60 AppVerName=WinMerge {#AppVersion}\r
61 AppPublisher=Thingamahoochie Software\r
62 AppPublisherURL=http://WinMerge.org/\r
63 AppSupportURL=http://WinMerge.org/\r
64 AppUpdatesURL=http://WinMerge.org/\r
65 \r
66 ; Installer executable's version resource info\r
67 VersionInfoCompany=http://winmerge.org\r
68 VersionInfoDescription=WinMerge Installer\r
69 VersionInfoVersion={#AppVersion}\r
70 \r
71 ;This is in case an older version of the installer happened to be\r
72 DirExistsWarning=no\r
73 \r
74 ;Tells the installer to only display a select language dialog if the an exact match wasn't found\r
75 ShowLanguageDialog=auto\r
76 \r
77 DefaultDirName={pf}\WinMerge\r
78 DefaultGroupName=WinMerge\r
79 DisableStartupPrompt=true\r
80 AllowNoIcons=true\r
81 InfoBeforeFile=..\..\Docs\users\GPL.rtf\r
82 InfoAfterFile=..\..\Docs\users\ReadMe.txt\r
83 \r
84 OutputBaseFilename=WinMerge-{#AppVersion}-Setup\r
85 \r
86 ;This must be admin to install C++ Runtimes and shell extension\r
87 PrivilegesRequired=admin\r
88 \r
89 ;Windows 2000 or later required\r
90 MinVersion=0,5.0\r
91 \r
92 UninstallDisplayIcon={app}\{code:ExeName}\r
93 \r
94 ;Artwork References\r
95 WizardImageFile=Art\Large Logo.bmp\r
96 WizardSmallImageFile=Art\Small Logo.bmp\r
97 WizardImageStretch=true\r
98 \r
99 ;It is confusing, if Setup/Uninstall use the same icon like WinMerge!\r
100 ;SetupIconFile=..\..\src\res\Merge.ico\r
101 \r
102 ;Compression Parameters\r
103 ;Please note while Compression=lzma/ultra and InternalCompressLevel=Ultra are better than max\r
104 ;they also require 320 MB of memory for compression. If you're system has at least 256MB RAM then by all\r
105 ;means set it to ultra before compilation\r
106 Compression=lzma/ultra\r
107 InternalCompressLevel=ultra\r
108 SolidCompression=true\r
109 \r
110 ; Update file associations for shell (project files)\r
111 ChangesAssociations=true\r
112 ; Updates PATH\r
113 ChangesEnvironment=true\r
114 OutputDir=..\..\Build\r
115 AlwaysShowComponentsList=true\r
116 \r
117 ;SignTool=signbat $f\r
118 ;SignedUninstaller=yes\r
119 \r
120 [Languages]\r
121 ;Inno Setup's Native Language\r
122 Name: English; MessagesFile: ..\..\Translations\InnoSetup\English.isl\r
123 \r
124 ;Localizations:\r
125 Name: Basque; MessagesFile: ..\..\Translations\InnoSetup\Basque.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Basque.txt\r
126 Name: Bulgarian; MessagesFile: ..\..\Translations\InnoSetup\Bulgarian.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Bulgarian.txt\r
127 Name: Catalan; MessagesFile: ..\..\Translations\InnoSetup\Catalan.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Catalan.txt\r
128 Name: Chinese_Simplified; MessagesFile: ..\..\Translations\InnoSetup\Chinese_Simplified.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-ChineseSimplified.txt\r
129 Name: Chinese_Traditional; MessagesFile: ..\..\Translations\InnoSetup\Chinese_Traditional.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-ChineseTraditional.txt\r
130 Name: Croatian; MessagesFile: ..\..\Translations\InnoSetup\Croatian.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Croatian.txt\r
131 Name: Czech; MessagesFile: ..\..\Translations\InnoSetup\Czech.isl\r
132 Name: Danish; MessagesFile: ..\..\Translations\InnoSetup\Danish.isl\r
133 Name: Dutch; MessagesFile: ..\..\Translations\InnoSetup\Dutch.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Dutch.txt\r
134 Name: Finnish; MessagesFile: ..\..\Translations\InnoSetup\Finnish.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Finnish.txt\r
135 Name: French; MessagesFile: ..\..\Translations\InnoSetup\French.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-French.txt\r
136 Name: Galician; MessagesFile: ..\..\Translations\InnoSetup\Galician.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Galician.txt\r
137 Name: German; MessagesFile: ..\..\Translations\InnoSetup\German.isl\r
138 Name: Greek; MessagesFile: ..\..\Translations\InnoSetup\Greek.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Greek.txt\r
139 Name: Hungarian; MessagesFile: ..\..\Translations\InnoSetup\Hungarian.isl\r
140 Name: Italian; MessagesFile: ..\..\Translations\InnoSetup\Italian.isl\r
141 Name: Japanese; MessagesFile: ..\..\Translations\InnoSetup\Japanese.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Japanese.txt\r
142 Name: Korean; MessagesFile: ..\..\Translations\InnoSetup\Korean.isl\r
143 Name: Lithuanian; MessagesFile: ..\..\Translations\InnoSetup\Lithuanian.isl\r
144 Name: Norwegian; MessagesFile: ..\..\Translations\InnoSetup\Norwegian.isl\r
145 Name: Persian; MessagesFile: ..\..\Translations\InnoSetup\Persian.isl\r
146 Name: Polish; MessagesFile: ..\..\Translations\InnoSetup\Polish.isl\r
147 Name: Portuguese; MessagesFile: ..\..\Translations\InnoSetup\Portuguese.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Portuguese.txt\r
148 Name: PortugueseBrazilian; MessagesFile: ..\..\Translations\InnoSetup\Brazilian_Portuguese.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Brazilian.txt\r
149 Name: Romanian; MessagesFile: ..\..\Translations\InnoSetup\Romanian.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Romanian.txt\r
150 Name: Russian; MessagesFile: ..\..\Translations\InnoSetup\Russian.isl\r
151 Name: Serbian; MessagesFile: ..\..\Translations\InnoSetup\Serbian.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Serbian.txt\r
152 Name: Sinhala; MessagesFile: ..\..\Translations\InnoSetup\Sinhala.isl\r
153 Name: Slovak; MessagesFile: ..\..\Translations\InnoSetup\Slovak.isl\r
154 Name: Slovenian; MessagesFile: ..\..\Translations\InnoSetup\Slovenian.isl\r
155 Name: Spanish; MessagesFile: ..\..\Translations\InnoSetup\Spanish.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Spanish.txt\r
156 Name: Swedish; MessagesFile: ..\..\Translations\InnoSetup\Swedish.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Swedish.txt\r
157 Name: Turkish; MessagesFile: ..\..\Translations\InnoSetup\Turkish.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Turkish.txt\r
158 Name: Ukrainian; MessagesFile: ..\..\Translations\InnoSetup\Ukrainian.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Ukrainian.txt\r
159 \r
160 \r
161 [Messages]\r
162 English.FinishedLabel=Setup has finished installing WinMerge on your computer.\r
163 English.SetupAppTitle=Setup - WinMerge {#AppVersion}\r
164 English.WizardInfoBefore=License Agreement\r
165 English.InfoBeforeLabel=GNU General Public License\r
166 \r
167 \r
168 [Types]\r
169 Name: typical; Description: {cm:TypicalInstallation}\r
170 Name: full; Description: {cm:FullInstallation}\r
171 Name: compact; Description: {cm:CompactInstallation}\r
172 Name: custom; Description: {cm:CustomInstallation}; Flags: iscustom\r
173 \r
174 \r
175 [Components]\r
176 ; Executable, libraries, documentation\r
177 Name: Core; Description: {cm:AppCoreFiles}; Types: full custom typical compact; Flags: fixed\r
178 \r
179 Name: filters; Description: {cm:Filters}; Flags: disablenouninstallwarning; Types: full typical\r
180 Name: Plugins; Description: {cm:Plugins}; Flags: disablenouninstallwarning; Types: full typical\r
181 Name: Frhed; Description: {cm:Frhed}; Flags: disablenouninstallwarning; Types: full typical\r
182 Name: WinIMerge; Description: {cm:WinIMerge}; Flags: disablenouninstallwarning; Types: full typical\r
183 Name: ArchiveSupport; Description: {cm:ArchiveSupport}; Flags: disablenouninstallwarning; Types: full typical\r
184 Name: Patch; Description: {cm:Patch}; Flags: disablenouninstallwarning; Types: full typical\r
185 \r
186 ;Language components\r
187 Name: Languages; Description: {cm:Languages}; Flags: disablenouninstallwarning\r
188 Name: Languages\Basque; Description: {cm:BasqueLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Basque\r
189 Name: Languages\Basque; Description: {cm:BasqueLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Basque\r
190 \r
191 Name: Languages\Bulgarian; Description: {cm:BulgarianLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Bulgarian\r
192 Name: Languages\Bulgarian; Description: {cm:BulgarianLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Bulgarian\r
193 \r
194 Name: Languages\Catalan; Description: {cm:CatalanLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Catalan\r
195 Name: Languages\Catalan; Description: {cm:CatalanLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Catalan\r
196 \r
197 Name: Languages\Chinese_Simplified; Description: {cm:ChineseSimplifiedLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Chinese_Simplified\r
198 Name: Languages\Chinese_Simplified; Description: {cm:ChineseSimplifiedLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Chinese_Simplified\r
199 \r
200 Name: Languages\Chinese_Traditional; Description: {cm:ChineseTraditionalLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Chinese_Traditional\r
201 Name: Languages\Chinese_Traditional; Description: {cm:ChineseTraditionalLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Chinese_Traditional\r
202 \r
203 Name: Languages\Croatian; Description: {cm:CroatianLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Croatian\r
204 Name: Languages\Croatian; Description: {cm:CroatianLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Croatian\r
205 \r
206 Name: Languages\Czech; Description: {cm:CzechLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Czech\r
207 Name: Languages\Czech; Description: {cm:CzechLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Czech\r
208 \r
209 Name: Languages\Danish; Description: {cm:DanishLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Danish\r
210 Name: Languages\Danish; Description: {cm:DanishLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Danish\r
211 \r
212 Name: Languages\Dutch; Description: {cm:DutchLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Dutch\r
213 Name: Languages\Dutch; Description: {cm:DutchLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Dutch\r
214 \r
215 Name: Languages\Finnish; Description: {cm:FinnishLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Finnish\r
216 Name: Languages\Finnish; Description: {cm:FinnishLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Finnish\r
217 \r
218 Name: Languages\French; Description: {cm:FrenchLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not French\r
219 Name: Languages\French; Description: {cm:FrenchLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: French\r
220 \r
221 Name: Languages\Galician; Description: {cm:GalicianLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Galician\r
222 Name: Languages\Galician; Description: {cm:GalicianLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Galician\r
223 \r
224 Name: Languages\German; Description: {cm:GermanLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not German\r
225 Name: Languages\German; Description: {cm:GermanLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: German\r
226 \r
227 Name: Languages\Greek; Description: {cm:GreekLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Greek\r
228 Name: Languages\Greek; Description: {cm:GreekLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Greek\r
229 \r
230 Name: Languages\Hungarian; Description: {cm:HungarianLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Hungarian\r
231 Name: Languages\Hungarian; Description: {cm:HungarianLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Hungarian\r
232 \r
233 Name: Languages\Italian; Description: {cm:ItalianLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Italian\r
234 Name: Languages\Italian; Description: {cm:ItalianLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Italian\r
235 \r
236 Name: Languages\Japanese; Description: {cm:JapaneseLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Japanese\r
237 Name: Languages\Japanese; Description: {cm:JapaneseLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Japanese\r
238 \r
239 Name: Languages\Korean; Description: {cm:KoreanLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Korean\r
240 Name: Languages\Korean; Description: {cm:KoreanLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Korean\r
241 \r
242 Name: Languages\Lithuanian; Description: {cm:LithuanianLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Lithuanian\r
243 Name: Languages\Lithuanian; Description: {cm:LithuanianLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Lithuanian\r
244 \r
245 Name: Languages\Norwegian; Description: {cm:NorwegianLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Norwegian\r
246 Name: Languages\Norwegian; Description: {cm:NorwegianLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Norwegian\r
247 \r
248 Name: Languages\Persian; Description: {cm:PersianLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Persian\r
249 Name: Languages\Persian; Description: {cm:PersianLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Persian\r
250 \r
251 Name: Languages\Polish; Description: {cm:PolishLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Polish\r
252 Name: Languages\Polish; Description: {cm:PolishLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Polish\r
253 \r
254 Name: Languages\Portuguese; Description: {cm:PortugueseLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Portuguese\r
255 Name: Languages\Portuguese; Description: {cm:PortugueseLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Portuguese\r
256 \r
257 Name: Languages\PortugueseBrazilian; Description: {cm:PortugueseBrazilLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not PortugueseBrazilian\r
258 Name: Languages\PortugueseBrazilian; Description: {cm:PortugueseBrazilLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: PortugueseBrazilian\r
259 \r
260 Name: Languages\Romanian; Description: {cm:RomanianLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Romanian\r
261 Name: Languages\Romanian; Description: {cm:RomanianLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Romanian\r
262 \r
263 Name: Languages\Russian; Description: {cm:RussianLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Russian\r
264 Name: Languages\Russian; Description: {cm:RussianLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Russian\r
265 \r
266 Name: Languages\Serbian; Description: {cm:SerbianLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Serbian\r
267 Name: Languages\Serbian; Description: {cm:SerbianLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Serbian\r
268 \r
269 Name: Languages\Sinhala; Description: {cm:SinhalaLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Sinhala\r
270 Name: Languages\Sinhala; Description: {cm:SinhalaLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Sinhala\r
271 \r
272 Name: Languages\Slovak; Description: {cm:SlovakLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Slovak\r
273 Name: Languages\Slovak; Description: {cm:SlovakLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Slovak\r
274 \r
275 Name: Languages\Slovenian; Description: {cm:SlovenianLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Slovenian\r
276 Name: Languages\Slovenian; Description: {cm:SlovenianLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Slovenian\r
277 \r
278 Name: Languages\Spanish; Description: {cm:SpanishLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Spanish\r
279 Name: Languages\Spanish; Description: {cm:SpanishLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Spanish\r
280 \r
281 Name: Languages\Swedish; Description: {cm:SwedishLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Swedish\r
282 Name: Languages\Swedish; Description: {cm:SwedishLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Swedish\r
283 \r
284 Name: Languages\Turkish; Description: {cm:TurkishLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Turkish\r
285 Name: Languages\Turkish; Description: {cm:TurkishLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Turkish\r
286 \r
287 Name: Languages\Ukrainian; Description: {cm:UkrainianLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Ukrainian\r
288 Name: Languages\Ukrainian; Description: {cm:UkrainianLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Ukrainian\r
289 \r
290 \r
291 [Tasks]\r
292 Name: ShellExtension; Description: {cm:ExplorerContextMenu}; GroupDescription: {cm:OptionalFeatures}\r
293 Name: modifypath; Description: {cm:AddToPath}; GroupDescription: {cm:OptionalFeatures}; Flags: unchecked\r
294 Name: TortoiseCVS; Description: {cm:IntegrateTortoiseCVS}; GroupDescription: {cm:OptionalFeatures}; Check: TortoiseCVSInstalled\r
295 Name: TortoiseGit; Description: {cm:IntegrateTortoiseGit}; GroupDescription: {cm:OptionalFeatures}; Check: TortoiseGitInstalled; MinVersion: 0,5.0.2195sp3\r
296 Name: TortoiseSVN; Description: {cm:IntegrateTortoiseSVN}; GroupDescription: {cm:OptionalFeatures}; Check: TortoiseSVNInstalled; MinVersion: 0,5.0.2195sp3\r
297 Name: ClearCase; Description: {cm:IntegrateClearCase}; GroupDescription: {cm:OptionalFeatures}; Check: ClearCaseInstalled\r
298 Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked\r
299 Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; OnlyBelowVersion: 0,6.1\r
300 \r
301 [InstallDelete]\r
302 ; Diff.txt is a file left over from previous versions of WinMerge (before version 2.0), we just delete it to be nice.\r
303 Type: files; Name: {app}\Diff.txt\r
304 \r
305 ;All of these files are removed so if the user upgrades their operating system or changes their language selections only the\r
306 ;necessary files will be left in the installation folder\r
307 ;Another reason these files might be strays is if a user extracted one of the experimental builds such as:\r
308 ;WinMerge.{#AppVersion}-exe.7z.\r
309 Name: {app}\WinMerge.exe; Type: files\r
310 Name: {app}\WinMergeU.exe; Type: files; MinVersion: 0, 4\r
311 \r
312 ;Remove manifest files as we don't need them in 2.6.2 / 2.7.1.1 or later\r
313 Name: {app}\WinMerge.exe.manifest; Type: files\r
314 Name: {app}\WinMergeU.exe.manifest; Type: files\r
315 \r
316 Name: {app}\Merge7z311.dll; Type: files\r
317 Name: {app}\Merge7z311U.dll; Type: files; MinVersion: 0, 4\r
318 \r
319 Name: {app}\Merge7z312.dll; Type: files\r
320 Name: {app}\Merge7z312U.dll; Type: files; MinVersion: 0, 4\r
321 \r
322 Name: {app}\Merge7z313.dll; Type: files\r
323 Name: {app}\Merge7z313U.dll; Type: files; MinVersion: 0, 4\r
324 \r
325 Name: {app}\Merge7z420.dll; Type: files\r
326 Name: {app}\Merge7z420U.dll; Type: files; MinVersion: 0, 4\r
327 \r
328 Name: {app}\Merge7z423.dll; Type: files\r
329 Name: {app}\Merge7z423U.dll; Type: files; MinVersion: 0, 4\r
330 \r
331 Name: {app}\Merge7z431.dll; Type: files\r
332 Name: {app}\Merge7z431U.dll; Type: files; MinVersion: 0, 4\r
333 \r
334 Name: {app}\Merge7z432.dll; Type: files\r
335 Name: {app}\Merge7z432U.dll; Type: files; MinVersion: 0, 4\r
336 \r
337 Name: {app}\Merge7z442.dll; Type: files\r
338 Name: {app}\Merge7z442U.dll; Type: files; MinVersion: 0, 4\r
339 \r
340 Name: {app}\Merge7z457.dll; Type: files\r
341 Name: {app}\Merge7z457U.dll; Type: files; MinVersion: 0, 4\r
342 \r
343 Name: {app}\Merge7z465.dll; Type: files\r
344 Name: {app}\Merge7z465U.dll; Type: files; MinVersion: 0, 4\r
345 \r
346 Name: {app}\Merge7z920.dll; Type: files\r
347 Name: {app}\Merge7z920U.dll; Type: files; MinVersion: 0, 4\r
348 \r
349 ;This won't work, because the file has to be unregistered, and explorer closed, first.\r
350 ;Name: {app}\ShellExtension.dll; Type: files; Check: TaskDisabled('ShellExtension')\r
351 \r
352 ; Remove existing .lang files - we don't need them anymore as we are\r
353 ; using PO files now.\r
354 Name: {app}\Languages\MergeBrazilian.lang; Type: files\r
355 Name: {app}\Languages\MergeBulgarian.lang; Type: files\r
356 Name: {app}\Languages\MergeCatalan.lang; Type: files\r
357 Name: {app}\Languages\MergeChineseSimplified.lang; Type: files\r
358 Name: {app}\Languages\MergeChineseTraditional.lang; Type: files\r
359 Name: {app}\Languages\MergeCzech.lang; Type: files\r
360 Name: {app}\Languages\MergeDanish.lang; Type: files\r
361 Name: {app}\Languages\MergeDutch.lang; Type: files\r
362 Name: {app}\Languages\MergeFrench.lang; Type: files\r
363 Name: {app}\Languages\MergeGerman.lang; Type: files\r
364 Name: {app}\Languages\MergeHungarian.lang; Type: files\r
365 Name: {app}\Languages\MergeItalian.lang; Type: files\r
366 Name: {app}\Languages\MergeJapanese.lang; Type: files\r
367 Name: {app}\Languages\MergeKorean.lang; Type: files\r
368 Name: {app}\Languages\MergeNorwegian.lang; Type: files\r
369 Name: {app}\Languages\MergePersian.lang; Type: files\r
370 Name: {app}\Languages\MergePolish.lang; Type: files\r
371 Name: {app}\Languages\MergePortuguese.lang; Type: files\r
372 Name: {app}\Languages\MergeSlovak.lang; Type: files\r
373 Name: {app}\Languages\MergeSpanish.lang; Type: files\r
374 Name: {app}\Languages\MergeRussian.lang; Type: files\r
375 Name: {app}\Languages\MergeSerbian.lang; Type: files\r
376 Name: {app}\Languages\MergeSwedish.lang; Type: files\r
377 Name: {app}\Languages\MergeTurkish.lang; Type: files\r
378 Name: {app}\MergePlugins\list.txt; Type: files; Check: not IsComponentSelected('Plugins')\r
379 \r
380 ;Removes the user's guide icon if the user deselects the user's guide component.\r
381 Name: {group}\{cm:UsersGuide}.lnk; Type: files; Check: not IsComponentSelected('Docs')\r
382 \r
383 ;This removes the quick launch icon in case the user chooses not to install it after previously having it installed\r
384 Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\WinMerge.lnk; Type: files; Check: not IsTaskSelected('QuickLauchIcon')\r
385 Name: {commonappdata}\Microsoft\Internet Explorer\Quick Launch\WinMerge.lnk; Type: files; Check: not IsTaskSelected('QuickLauchIcon')\r
386 \r
387 ;This removes the desktop icon in case the user chooses not to install it after previously having it installed\r
388 Name: {userdesktop}\WinMerge.lnk; Type: files; Check: not IsTaskSelected('DesktopIcon')\r
389 Name: {commondesktop}\WinMerge.lnk; Type: files; Check: not IsTaskSelected('DesktopIcon')\r
390 \r
391 ;Removes the Uninstall icon from the start menu...\r
392 Name: {group}\{cm:UninstallProgram,WinMerge}.lnk; Type: files;\r
393 \r
394 ;Remove ANSI executable link from start menu for NT-based Windows versions\r
395 ;This was installed earlier, but not anymore.\r
396 Name: {group}\WinMerge (ANSI).lnk; Type: files; MinVersion: 0,4\r
397 Name: {app}\Docs; Type: filesandordirs\r
398 \r
399 Name: {app}\MergePlugins\editor addin.sct; Type: Files; Check: not IsComponentSelected('Plugins')\r
400 Name: {app}\MergePlugins\insert datetime.sct; Type: Files; Check: not IsComponentSelected('Plugins')\r
401 Name: {app}\MergePlugins\CompareMSExcelFiles.dll; Type: Files; Check: IsComponentSelected('Plugins')\r
402 Name: {app}\MergePlugins\CompareMSWordFiles.dll; Type: Files; Check: IsComponentSelected('Plugins')\r
403 Name: {app}\MergePlugins; Type: DirIfEmpty; Check: not IsComponentSelected('Plugins')\r
404 \r
405 Name: {app}\Filters\ADAMulti.flt; Type: Files; Check: not IsComponentSelected('Filters')\r
406 Name: {app}\Filters\ASPNET.flt; Type: Files; Check: not IsComponentSelected('Filters')\r
407 Name: {app}\Filters\CSharp_loose.flt; Type: Files; Check: not IsComponentSelected('Filters')\r
408 Name: {app}\Filters\Delphi.flt; Type: Files; Check: not IsComponentSelected('Filters')\r
409 Name: {app}\Filters\MASM.flt; Type: Files; Check: not IsComponentSelected('Filters')\r
410 Name: {app}\Filters\Merge_GnuC_loose.flt; Type: Files; Check: not IsComponentSelected('Filters')\r
411 Name: {app}\Filters\Merge_VC_loose.flt; Type: Files; Check: not IsComponentSelected('Filters')\r
412 Name: {app}\Filters\Merge_VB_loose.flt; Type: Files; Check: not IsComponentSelected('Filters')\r
413 Name: {app}\Filters\SourceControl.flt; Type: Files; Check: not IsComponentSelected('Filters')\r
414 Name: {app}\Filters\Symbian.flt; Type: Files; Check: not IsComponentSelected('Filters')\r
415 Name: {app}\Filters\XML_html.flt; Type: Files; Check: not IsComponentSelected('Filters')\r
416 Name: {app}\Filters\FileFilter.tmpl; Type: Files; Check: not IsComponentSelected('Filters')\r
417 Name: {app}\Filters; Type: DirIfEmpty; Check: not IsComponentSelected('Filters')\r
418 \r
419 \r
420 \r
421 [Dirs]\r
422 ;The always uninstall flag tells the uninstaller to remove the folder if it's empty regardless of whether or not it existed prior to the installation\r
423 Name: {app}; Flags: uninsalwaysuninstall\r
424 \r
425 \r
426 [Files]\r
427 ; WinMerge itself\r
428 Source: ..\..\Build\MergeUnicodeRelease\WinMergeU.exe; DestDir: {app}; Flags: promptifolder; Components: Core\r
429 \r
430 ; List of installed files\r
431 Source: ..\..\Docs\Users\Files.txt; DestDir: {app}; Flags: promptifolder; Components: Core\r
432 \r
433 ; Shell extension\r
434 Source: ..\..\Build\ShellExtension\ShellExtensionU.dll; DestDir: {app}; Flags: regserver uninsrestartdelete restartreplace promptifolder; MinVersion: 0, 4; Check: not IsWin64\r
435 ; 64-bit version of ShellExtension\r
436 Source: ..\..\Build\ShellExtension\ShellExtensionX64.dll; DestDir: {app}; Flags: regserver uninsrestartdelete restartreplace promptifolder 64bit; MinVersion: 0,5.01.2600; Check: IsWin64\r
437 \r
438 ;Please do not reorder the 7z Dlls by version they compress better ordered by platform and then by version\r
439 Source: ..\..\Build\Merge7z\Merge7z1805U.dll; DestDir: {app}\Merge7z; Flags: promptifolder; MinVersion: 0, 4; Components: ArchiveSupport\r
440 Source: ..\..\Build\Merge7z\7z.dll; DestDir: {app}\Merge7z; Flags: promptifolder; MinVersion: 0, 4; Components: ArchiveSupport\r
441 Source: ..\..\Build\Merge7z\*.txt; DestDir: {app}\Merge7z; Flags: promptifolder; MinVersion: 0, 4; Components: ArchiveSupport\r
442 Source: ..\..\Build\Merge7z\Lang\*.txt; DestDir: {app}\Merge7z\Lang; Flags: promptifolder; MinVersion: 0, 4; Components: ArchiveSupport\r
443 \r
444 ; MergeLang.dll - translation helper dll\r
445 Source: ..\..\Build\MergeUnicodeRelease\MergeLang.dll; DestDir: {app}; Flags: promptifolder ignoreversion; Components: Core\r
446 \r
447 ; Language files\r
448 Source: ..\..\Translations\WinMerge\Basque.po; DestDir: {app}\Languages; Components: Languages\Basque; Flags: ignoreversion comparetimestamp\r
449 Source: ..\..\Translations\Docs\Readme\ReadMe-Basque.txt; DestDir: {app}\Docs; Components: Languages\Basque\r
450 Source: ..\..\Translations\WinMerge\Brazilian.po; DestDir: {app}\Languages; Components: Languages\PortugueseBrazilian; Flags: ignoreversion comparetimestamp\r
451 Source: ..\..\Translations\Docs\Readme\ReadMe-Brazilian.txt; DestDir: {app}\Docs; Components: Languages\PortugueseBrazilian\r
452 Source: ..\..\Translations\WinMerge\Bulgarian.po; DestDir: {app}\Languages; Components: Languages\Bulgarian; Flags: ignoreversion comparetimestamp\r
453 Source: ..\..\Translations\Docs\Readme\ReadMe-Bulgarian.txt; DestDir: {app}\Docs; Components: Languages\Bulgarian\r
454 Source: ..\..\Translations\WinMerge\Catalan.po; DestDir: {app}\Languages; Components: Languages\Catalan; Flags: ignoreversion comparetimestamp\r
455 Source: ..\..\Translations\Docs\Readme\ReadMe-Catalan.txt; DestDir: {app}\Docs; Components: Languages\Catalan\r
456 Source: ..\..\Translations\WinMerge\ChineseSimplified.po; DestDir: {app}\Languages; Components: Languages\Chinese_Simplified; Flags: ignoreversion comparetimestamp\r
457 Source: ..\..\Translations\Docs\Readme\ReadMe-ChineseSimplified.txt; DestDir: {app}\Docs; Components: Languages\Chinese_Simplified\r
458 Source: ..\..\Translations\WinMerge\ChineseTraditional.po; DestDir: {app}\Languages; Components: Languages\Chinese_Traditional; Flags: ignoreversion comparetimestamp\r
459 Source: ..\..\Translations\Docs\Readme\ReadMe-ChineseTraditional.txt; DestDir: {app}\Docs; Components: Languages\Chinese_Traditional\r
460 Source: ..\..\Translations\WinMerge\Croatian.po; DestDir: {app}\Languages; Components: Languages\Croatian; Flags: ignoreversion comparetimestamp\r
461 Source: ..\..\Translations\Docs\Readme\ReadMe-Croatian.txt; DestDir: {app}\Docs; Components: Languages\Croatian\r
462 Source: ..\..\Translations\WinMerge\Czech.po; DestDir: {app}\Languages; Components: Languages\Czech; Flags: ignoreversion comparetimestamp\r
463 Source: ..\..\Translations\WinMerge\Danish.po; DestDir: {app}\Languages; Components: Languages\Danish; Flags: ignoreversion comparetimestamp\r
464 Source: ..\..\Translations\WinMerge\Dutch.po; DestDir: {app}\Languages; Components: Languages\Dutch; Flags: ignoreversion comparetimestamp\r
465 Source: ..\..\Translations\Docs\Readme\ReadMe-Dutch.txt; DestDir: {app}\Docs; Components: Languages\Dutch\r
466 Source: ..\..\Translations\WinMerge\Finnish.po; DestDir: {app}\Languages; Components: Languages\Finnish; Flags: ignoreversion comparetimestamp\r
467 Source: ..\..\Translations\Docs\Readme\ReadMe-Finnish.txt; DestDir: {app}\Docs; Components: Languages\Finnish\r
468 Source: ..\..\Translations\WinMerge\French.po; DestDir: {app}\Languages; Components: Languages\French; Flags: ignoreversion comparetimestamp\r
469 Source: ..\..\Translations\Docs\Readme\ReadMe-French.txt; DestDir: {app}\Docs; Components: Languages\French\r
470 Source: ..\..\Translations\WinMerge\Galician.po; DestDir: {app}\Languages; Components: Languages\Galician; Flags: ignoreversion comparetimestamp\r
471 Source: ..\..\Translations\Docs\Readme\ReadMe-Galician.txt; DestDir: {app}\Docs; Components: Languages\Galician\r
472 Source: ..\..\Translations\WinMerge\German.po; DestDir: {app}\Languages; Components: Languages\German; Flags: ignoreversion comparetimestamp\r
473 Source: ..\..\Translations\WinMerge\Greek.po; DestDir: {app}\Languages; Components: Languages\Greek; Flags: ignoreversion comparetimestamp\r
474 Source: ..\..\Translations\Docs\Readme\ReadMe-Greek.txt; DestDir: {app}\Docs; Components: Languages\Greek\r
475 Source: ..\..\Translations\WinMerge\Hungarian.po; DestDir: {app}\Languages; Components: Languages\Hungarian; Flags: ignoreversion comparetimestamp\r
476 Source: ..\..\Translations\WinMerge\Italian.po; DestDir: {app}\Languages; Components: Languages\Italian; Flags: ignoreversion comparetimestamp\r
477 Source: ..\..\Translations\WinMerge\Japanese.po; DestDir: {app}\Languages; Components: Languages\Japanese; Flags: ignoreversion comparetimestamp\r
478 Source: ..\..\Translations\Docs\Readme\ReadMe-Japanese.txt; DestDir: {app}\Docs; Components: Languages\Japanese\r
479 Source: ..\..\Translations\WinMerge\Korean.po; DestDir: {app}\Languages; Components: Languages\Korean; Flags: ignoreversion comparetimestamp\r
480 Source: ..\..\Translations\Docs\Readme\ReadMe-Lithuanian.txt; DestDir: {app}\Docs; Components: Languages\Lithuanian\r
481 Source: ..\..\Translations\WinMerge\Norwegian.po; DestDir: {app}\Languages; Components: Languages\Norwegian; Flags: ignoreversion comparetimestamp\r
482 Source: ..\..\Translations\WinMerge\Persian.po; DestDir: {app}\Languages; Components: Languages\Persian; Flags: ignoreversion comparetimestamp\r
483 Source: ..\..\Translations\WinMerge\Polish.po; DestDir: {app}\Languages; Components: Languages\Polish; Flags: ignoreversion comparetimestamp\r
484 Source: ..\..\Translations\WinMerge\Portuguese.po; DestDir: {app}\Languages; Components: Languages\Portuguese; Flags: ignoreversion comparetimestamp\r
485 Source: ..\..\Translations\Docs\Readme\ReadMe-Portuguese.txt; DestDir: {app}\Docs; Components: Languages\Portuguese\r
486 Source: ..\..\Translations\WinMerge\Romanian.po; DestDir: {app}\Languages; Components: Languages\Romanian; Flags: ignoreversion comparetimestamp\r
487 Source: ..\..\Translations\Docs\Readme\ReadMe-Romanian.txt; DestDir: {app}\Docs; Components: Languages\Romanian\r
488 Source: ..\..\Translations\WinMerge\Russian.po; DestDir: {app}\Languages; Components: Languages\Russian; Flags: ignoreversion comparetimestamp\r
489 Source: ..\..\Translations\WinMerge\Serbian.po; DestDir: {app}\Languages; Components: Languages\Serbian; Flags: ignoreversion comparetimestamp\r
490 Source: ..\..\Translations\Docs\Readme\ReadMe-Serbian.txt; DestDir: {app}\Docs; Components: Languages\Serbian\r
491 Source: ..\..\Translations\WinMerge\Sinhala.po; DestDir: {app}\Languages; Components: Languages\Sinhala; Flags: ignoreversion comparetimestamp\r
492 Source: ..\..\Translations\WinMerge\Slovak.po; DestDir: {app}\Languages; Components: Languages\Slovak; Flags: ignoreversion comparetimestamp\r
493 Source: ..\..\Translations\WinMerge\Slovenian.po; DestDir: {app}\Languages; Components: Languages\Slovenian; Flags: ignoreversion comparetimestamp\r
494 Source: ..\..\Translations\WinMerge\Spanish.po; DestDir: {app}\Languages; Components: Languages\Spanish; Flags: ignoreversion comparetimestamp\r
495 Source: ..\..\Translations\Docs\Readme\ReadMe-Spanish.txt; DestDir: {app}\Docs; Components: Languages\Spanish\r
496 Source: ..\..\Translations\WinMerge\Swedish.po; DestDir: {app}\Languages; Components: Languages\Swedish; Flags: ignoreversion comparetimestamp\r
497 Source: ..\..\Translations\Docs\Readme\ReadMe-Swedish.txt; DestDir: {app}\Docs; Components: Languages\Swedish\r
498 Source: ..\..\Translations\WinMerge\Turkish.po; DestDir: {app}\Languages; Components: Languages\Turkish; Flags: ignoreversion comparetimestamp\r
499 Source: ..\..\Translations\Docs\Readme\ReadMe-Turkish.txt; DestDir: {app}\Docs; Components: Languages\Turkish\r
500 Source: ..\..\Translations\WinMerge\Ukrainian.po; DestDir: {app}\Languages; Components: Languages\Ukrainian; Flags: ignoreversion comparetimestamp\r
501 Source: ..\..\Translations\Docs\Readme\ReadMe-Ukrainian.txt; DestDir: {app}\Docs; Components: Languages\Ukrainian\r
502 \r
503 Source: ..\..\Filters\*.flt; DestDir: {app}\Filters; Flags: sortfilesbyextension comparetimestamp ignoreversion; Components: filters\r
504 Source: ..\..\Filters\FileFilter.tmpl; DestDir: {app}\Filters; Flags: sortfilesbyextension comparetimestamp ignoreversion; Components: filters\r
505 \r
506 ;Documentation\r
507 Source: ..\..\Docs\Users\ReadMe.txt; DestDir: {app}\Docs; Flags: comparetimestamp ignoreversion promptifolder; Components: Core\r
508 Source: ..\..\Docs\Users\Contributors.txt; DestDir: {app}; Flags: comparetimestamp ignoreversion promptifolder; Components: Core\r
509 Source: ..\..\Docs\Users\ReleaseNotes.html; DestDir: {app}\Docs; Flags: comparetimestamp ignoreversion promptifolder; Components: Core\r
510 Source: ..\..\Docs\Users\ChangeLog.txt; DestDir: {app}\Docs; Flags: comparetimestamp ignoreversion promptifolder; Components: Core\r
511 Source: ..\..\Build\Manual\htmlhelp\WinMerge.chm; DestDir: {app}\Docs\; Flags: overwritereadonly uninsremovereadonly; Components: Core\r
512 Source: ..\..\Docs\users\GPL.rtf; DestDir: {app}\Docs\; Flags: comparetimestamp ignoreversion promptifolder; Components: Core\r
513 \r
514 ;Plugins\r
515 ;Please note IgnoreVersion and CompareTimeStamp are to instruct the installer to not not check for version info and go straight to comparing modification dates\r
516 Source: ..\..\Plugins\dlls\editor addin.sct; DestDir: {app}\MergePlugins; Flags: IgnoreVersion CompareTimeStamp; Components: Plugins\r
517 Source: ..\..\Plugins\dlls\insert datetime.sct; DestDir: {app}\MergePlugins; Flags: IgnoreVersion CompareTimeStamp; Components: Plugins\r
518 Source: ..\..\Plugins\dlls\CompareMSExcelFiles.sct; DestDir: {app}\MergePlugins; Flags: IgnoreVersion CompareTimeStamp; Components: Plugins\r
519 Source: ..\..\Plugins\dlls\CompareMSWordFiles.sct; DestDir: {app}\MergePlugins; Flags: IgnoreVersion CompareTimeStamp; Components: Plugins\r
520 Source: ..\..\Plugins\dlls\CompareMSPowerPointFiles.sct; DestDir: {app}\MergePlugins; Flags: IgnoreVersion CompareTimeStamp; Components: Plugins\r
521 Source: ..\..\Plugins\dlls\ApplyPatch.sct; DestDir: {app}\MergePlugins; Flags: IgnoreVersion CompareTimeStamp; Components: Plugins\r
522 Source: ..\..\Plugins\dlls\PrediffLineFilter.sct; DestDir: {app}\MergePlugins; Flags: IgnoreVersion CompareTimeStamp; Components: Plugins\r
523 Source: ..\..\Plugins\dlls\IgnoreColumns.dll; DestDir: {app}\MergePlugins; Flags: ignoreversion replacesameversion; Components: Plugins\r
524 Source: ..\..\Plugins\dlls\IgnoreCommentsC.dll; DestDir: {app}\MergePlugins; Flags: ignoreversion replacesameversion; Components: Plugins\r
525 Source: ..\..\Plugins\dlls\IgnoreFieldsComma.dll; DestDir: {app}\MergePlugins; Flags: ignoreversion replacesameversion; Components: Plugins\r
526 Source: ..\..\Plugins\dlls\IgnoreFieldsTab.dll; DestDir: {app}\MergePlugins; Flags: ignoreversion replacesameversion; Components: Plugins\r
527 Source: ..\..\Plugins\dlls\IgnoreLeadingLineNumbers.dll; DestDir: {app}\MergePlugins; Flags: ignoreversion replacesameversion; Components: Plugins\r
528 \r
529 ;Frhed\r
530 Source: ..\..\Build\Frhed\GPL.txt; DestDir: {app}\Frhed; Components: Frhed\r
531 ;Source: ..\..\Build\Frhed\frhed.exe; DestDir: {app}\Frhed; Components: Frhed\r
532 Source: ..\..\Build\Frhed\hekseditU.dll; DestDir: {app}\Frhed; Flags: ignoreversion replacesameversion; Components: Frhed\r
533 Source: ..\..\Build\Frhed\Docs\ChangeLog.txt; DestDir: {app}\Frhed\Docs; Components: Frhed\r
534 Source: ..\..\Build\Frhed\Docs\Contributors.txt; DestDir: {app}\Frhed\Docs; Components: Frhed\r
535 Source: ..\..\Build\Frhed\Docs\History.txt; DestDir: {app}\Frhed\Docs; Components: Frhed\r
536 Source: ..\..\Build\Frhed\Docs\Links.txt; DestDir: {app}\Frhed\Docs; Components: Frhed\r
537 Source: ..\..\Build\Frhed\Docs\Sample.tpl  ; DestDir: {app}\Frhed\Docs; Components: Frhed\r
538 Source: ..\..\Build\Frhed\Languages\de.po; DestDir: {app}\Frhed\Languages; Components: Frhed\r
539 Source: ..\..\Build\Frhed\Languages\fr.po; DestDir: {app}\Frhed\Languages; Components: Frhed\r
540 Source: ..\..\Build\Frhed\Languages\ja.po; DestDir: {app}\Frhed\Languages; Components: Frhed\r
541 Source: ..\..\Build\Frhed\Languages\nl.po; DestDir: {app}\Frhed\Languages; Components: Frhed\r
542 Source: ..\..\Build\Frhed\Languages\heksedit.lng; DestDir: {app}\Frhed\Languages; Components: Frhed\r
543 \r
544 ;WinIMerge\r
545 Source: ..\..\Build\WinIMerge\GPL.txt; DestDir: {app}\WinIMerge; Components: WinIMerge\r
546 Source: ..\..\Build\WinIMerge\freeimage-license-gplv2.txt; DestDir: {app}\WinIMerge; Components: WinIMerge\r
547 ;Source: ..\..\Build\WinIMerge\bin\WinIMerge.exe; DestDir: {app}\WinIMerge; Components: WinIMerge\r
548 Source: ..\..\Build\WinIMerge\bin\WinIMergeLib.dll; DestDir: {app}\WinIMerge; Flags: ignoreversion replacesameversion; Components: WinIMerge\r
549 Source: ..\..\Build\WinIMerge\bin\vcomp140.dll; DestDir: {app}; Components: WinIMerge\r
550 \r
551 ;GnuWin32 Patch for Windows\r
552 Source: ..\..\Build\GnuWin32\*.*; DestDir: {app}\GnuWin32; Flags: recursesubdirs; Components: Patch\r
553 \r
554 [Dirs]\r
555 Name: "{app}\MergePlugins"\r
556 \r
557 [Icons]\r
558 ;Start Menu Icons\r
559 Name: {group}\WinMerge; Filename: {app}\{code:ExeName}; AppUserModelID: "Thingamahoochie.WinMerge"\r
560 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe.txt; IconFileName: {win}\NOTEPAD.EXE\r
561 Name: {group}\{cm:UsersGuide}; Filename: {app}\Docs\WinMerge.chm\r
562 Name: {group}\{cm:UninstallProgram,WinMerge}; Filename: {uninstallexe}\r
563 Name: {group}\{cm:ProgramOnTheWeb,WinMerge}; Filename: http://winmerge.org\r
564 \r
565 ;Link to translated ReadMe in Start Menu\r
566 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-Basque.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: Basque\r
567 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-Brazilian.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: PortugueseBrazilian\r
568 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-Bulgarian.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: Bulgarian\r
569 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-Catalan.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: Catalan\r
570 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-ChineseSimplified.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: Chinese_Simplified\r
571 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-ChineseTraditional.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: Chinese_Traditional\r
572 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-Croatian.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: Croatian\r
573 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-Dutch.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: Dutch\r
574 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-Finnish.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: Finnish\r
575 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-French.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: French\r
576 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-Galician.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: Galician\r
577 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-Greek.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: Greek\r
578 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-Japanese.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: Japanese\r
579 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-Portuguese.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: Portuguese\r
580 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-Romanian.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: Romanian\r
581 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-Serbian.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: Serbian\r
582 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-Spanish.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: Spanish\r
583 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-Swedish.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: Swedish\r
584 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-Turkish.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: Turkish\r
585 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-Ukrainian.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: Ukrainian\r
586 \r
587 ;Desktop Icon\r
588 Name: {commondesktop}\WinMerge; Filename: {app}\{code:ExeName}; Tasks: desktopicon\r
589 \r
590 ;Quick Launch Icon\r
591 Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\WinMerge; Filename: {app}\{code:ExeName}; Tasks: quicklaunchicon\r
592 \r
593 [Registry]\r
594 Root: HKCU; Subkey: Software\Thingamahoochie; Flags: uninsdeletekeyifempty\r
595 Root: HKCU; Subkey: Software\Thingamahoochie\WinMerge; Flags: uninsdeletekey\r
596 Root: HKLM; Subkey: Software\Thingamahoochie; Flags: uninsdeletekeyifempty\r
597 Root: HKLM; Subkey: Software\Thingamahoochie\WinMerge; Flags: uninsdeletekey\r
598 \r
599 ;Add Project file extension (.WinMerge) to known extensions and\r
600 ;set WinMerge to open those files\r
601 ;set Notepad to edit project files\r
602 Root: HKCR; Subkey: .WinMerge; ValueType: String; ValueData: WinMerge.Project.File; Flags: uninsdeletekey\r
603 Root: HKCR; Subkey: WinMerge.Project.File; ValueType: String; ValueData: {cm:ProjectFileDesc}; Flags: uninsdeletekey\r
604 Root: HKCR; Subkey: WinMerge.Project.File\shell\open\command; ValueType: String; ValueData: """{app}\{code:ExeName}"" ""%1"""; Flags: uninsdeletekey\r
605 Root: HKCR; Subkey: WinMerge.Project.File\shell\edit\command; ValueType: String; ValueData: """NOTEPAD.EXE"" ""%1"""; Flags: uninsdeletekey\r
606 Root: HKCR; Subkey: WinMerge.Project.File\DefaultIcon; ValueType: String; ValueData: """{app}\{code:ExeName}"",1"; Flags: uninsdeletekey\r
607 \r
608 ; delete obsolete values\r
609 ;In Inno Setup Version 4.18 ValueData couldn't be null and compile,\r
610 ;if this is fixed in a later version feel free to remove the parameter\r
611 Root: HKCU; Subkey: Software\Thingamahoochie\WinMerge\Settings; ValueType: none; ValueName: LeftMax; Flags: deletevalue\r
612 Root: HKCU; Subkey: Software\Thingamahoochie\WinMerge\Settings; ValueType: none; ValueName: DirViewMax; Flags: deletevalue\r
613 \r
614 ;This removes the key that remembers which messageboxes to hide from the user, this is because the text of that message\r
615 ;can change and make it more clear as to the user why they might want to pay attention to a particular dialog and also\r
616 ;because a particular message might be added or removed and a new message might occupy a previous message's ID number\r
617 Root: HKLM; Subkey: Software\Thingamahoochie\WinMerge\MessageBoxes; ValueType: none; Flags: deletekey\r
618 \r
619 Root: HKCR; SubKey: Directory\Shell\WinMerge\command; ValueType: none; Flags: deletekey noerror\r
620 Root: HKCR; SubKey: Directory\Shell\WinMerge; ValueType: none; Flags: deletekey noerror\r
621 \r
622 ;Adds "Start Menu" --> "Run" Support for WinMerge\r
623 Root: HKLM; Subkey: Software\Microsoft\Windows\CurrentVersion\App Paths\WinMerge.exe; ValueType: none; Flags: uninsdeletekey\r
624 Root: HKLM; Subkey: Software\Microsoft\Windows\CurrentVersion\App Paths\WinMergeU.exe; ValueType: none; Flags: uninsdeletekey\r
625 Root: HKLM; SubKey: SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\WinMerge.exe; ValueType: string; ValueName: ; ValueData: {app}\{code:ExeName}\r
626 Root: HKLM; SubKey: SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\WinMergeU.exe; ValueType: string; ValueName: ; ValueData: {app}\{code:ExeName}\r
627 \r
628 ;Registry Keys for use by ShellExtension.dll\r
629 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge; ValueType: string; ValueName: Executable; ValueData: {app}\{code:ExeName}\r
630 \r
631 ;Enables or disables the Context Menu preference based on what the user selects during install\r
632 ;Initially the Context menu is explicitly disabled:\r
633 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge; ValueType: dword; ValueName: ContextMenuEnabled; ValueData: 0;\r
634 \r
635 ;If the user chose to use the context menu then we re-enable it.  This is necessary so it'll turn on and off not just on.\r
636 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge; ValueType: dword; ValueName: ContextMenuEnabled; ValueData: 1; Tasks: ShellExtension\r
637 Root: HKCU; SubKey: Software\Thingamahoochie\WinMerge; ValueType: dword; ValueName: ContextMenuEnabled; ValueData: {code:ShellMenuEnabled}\r
638 \r
639 ;If WinMerge.exe is installed then we'll automatically configure WinMerge as the differencing application\r
640 Root: HKCU; SubKey: Software\TortoiseCVS; ValueType: string; ValueName: External Diff Application; ValueData: {app}\{code:ExeName}; Flags: uninsdeletevalue; Tasks: TortoiseCVS\r
641 Root: HKCU; SubKey: Software\TortoiseCVS; ValueType: dword; ValueName: DiffAsUnicode; ValueData: $00000001; Flags: uninsdeletevalue; Tasks: TortoiseCVS\r
642 Root: HKCU; SubKey: Software\TortoiseCVS\Prefs\External Diff Application; ValueType: string; ValueName: _; ValueData: {app}\{code:ExeName}; Flags: uninsdeletevalue dontcreatekey; Tasks: TortoiseCVS\r
643 Root: HKCU; SubKey: Software\TortoiseCVS\Prefs\External Diff2 Params; ValueType: string; ValueName: _; ValueData: """%1"" ""%2"""; Flags: uninsdeletevalue dontcreatekey; Tasks: TortoiseCVS\r
644 \r
645 ;Tells TortoiseCVS to use WinMerge as its differencing application (this happens whether or not Tortoise is current installed, that way\r
646 ;if it is installed at a later date this will automatically support it)\r
647 Root: HKCU; SubKey: Software\TortoiseCVS; ValueType: string; ValueName: External Merge Application; ValueData: {app}\{code:ExeName}; Flags: uninsdeletevalue; Tasks: TortoiseCVS\r
648 Root: HKCU; SubKey: Software\TortoiseCVS; ValueType: dword; ValueName: MergeAsUnicode; ValueData: $00000001; Flags: uninsdeletevalue; Tasks: TortoiseCVS\r
649 Root: HKCU; SubKey: Software\TortoiseCVS\Prefs\External Merge Application; ValueType: string; ValueName: _; ValueData: {app}\{code:ExeName}; Flags: uninsdeletevalue dontcreatekey; Tasks: TortoiseCVS\r
650 Root: HKCU; SubKey: Software\TortoiseCVS\Prefs\External Merge2 Params; ValueType: string; ValueName: _; ValueData: """%mine"" ""%yours"""; Flags: uninsdeletevalue dontcreatekey; Tasks: TortoiseCVS\r
651 \r
652 ;Set WinMerge as TortoiseGit diff tool\r
653 Root: HKCU; SubKey: Software\TortoiseGit; ValueType: string; ValueName: Diff; ValueData: {app}\{code:ExeName} -e -ub -dl %bname -dr %yname %base %mine; Flags: uninsdeletevalue; Tasks: TortoiseGit\r
654 Root: HKCU; SubKey: Software\TortoiseGit; ValueType: string; ValueName: Merge; ValueData: {code:TortoiseSVNGITMergeToolCommandLine}; Flags: uninsdeletevalue; Check: UseAs3WayMergeTool\r
655 \r
656 ;Set WinMerge as TortoiseSVN diff tool\r
657 Root: HKCU; SubKey: Software\TortoiseSVN; ValueType: string; ValueName: Diff; ValueData: {app}\{code:ExeName} -e -ub -dl %bname -dr %yname %base %mine; Flags: uninsdeletevalue; Tasks: TortoiseSVN\r
658 Root: HKCU; SubKey: Software\TortoiseSVN; ValueType: string; ValueName: Merge; ValueData: {code:TortoiseSVNGITMergeToolCommandLine}; Flags: uninsdeletevalue; Check: UseAs3WayMergeTool\r
659 \r
660 ;Whatever the user chooses at the [Select Setup Language] dialog should also determine what language WinMerge will start up in\r
661 ;(unless the user already has a startup language specified)\r
662 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $0000042d; Flags: deletevalue; Languages: Basque\r
663 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000402; Flags: deletevalue; Languages: Bulgarian\r
664 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000403; Flags: deletevalue; Languages: Catalan\r
665 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000804; Flags: deletevalue; Languages: Chinese_Simplified\r
666 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000404; Flags: deletevalue; Languages: Chinese_Traditional\r
667 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $0000041a; Flags: deletevalue; Languages: Croatian\r
668 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000405; Flags: deletevalue; Languages: Czech\r
669 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000406; Flags: deletevalue; Languages: Danish\r
670 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000413; Flags: deletevalue; Languages: Dutch\r
671 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000409; Flags: deletevalue; Languages: English\r
672 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $0000040b; Flags: deletevalue; Languages: Finnish\r
673 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $0000040c; Flags: deletevalue; Languages: French\r
674 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000456; Flags: deletevalue; Languages: Galician\r
675 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000407; Flags: deletevalue; Languages: German\r
676 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000408; Flags: deletevalue; Languages: Greek\r
677 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $0000040e; Flags: deletevalue; Languages: Hungarian\r
678 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000410; Flags: deletevalue; Languages: Italian\r
679 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000411; Flags: deletevalue; Languages: Japanese\r
680 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000412; Flags: deletevalue; Languages: Korean\r
681 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000427; Flags: deletevalue; Languages: Lithuanian \r
682 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000414; Flags: deletevalue; Languages: Norwegian\r
683 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000429; Flags: deletevalue; Languages: Persian\r
684 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000415; Flags: deletevalue; Languages: Polish\r
685 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000816; Flags: deletevalue; Languages: Portuguese\r
686 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000416; Flags: deletevalue; Languages: PortugueseBrazilian\r
687 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000418; Flags: deletevalue; Languages: Romanian\r
688 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000419; Flags: deletevalue; Languages: Russian\r
689 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000c1a; Flags: deletevalue; Languages: Serbian\r
690 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $0000045b; Flags: deletevalue; Languages: Sinhala\r
691 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $0000041b; Flags: deletevalue; Languages: Slovak\r
692 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000424; Flags: deletevalue; Languages: Slovenian\r
693 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000c0a; Flags: deletevalue; Languages: Spanish\r
694 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $0000041D; Flags: deletevalue; Languages: Swedish\r
695 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $0000041f; Flags: deletevalue; Languages: Turkish\r
696 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000422; Flags: deletevalue; Languages: Ukrainian\r
697 \r
698 \r
699 [Run]\r
700 ;This will no longer appear unless the user chose to make a start menu group in the first place\r
701 Filename: {win}\Explorer.exe; Description: {cm:ViewStartMenuFolder}; Parameters: """{group}"""; Flags: waituntilidle postinstall skipifsilent unchecked; Check: GroupCreated\r
702 \r
703 Filename: {app}\{code:ExeName}; Description: {cm:LaunchProgram,WinMerge}; Flags: nowait postinstall skipifsilent runmaximized\r
704 \r
705 \r
706 [UninstallDelete]\r
707 ;Remove 7-zip integration dlls possibly installed (by hand or using separate installer)\r
708 Name: {app}\Merge7z*.dll; Type: files\r
709 Name: {app}\7zip_pad.xml; Type: files\r
710 Name: {app}\Codecs; Type: filesandordirs\r
711 Name: {app}\Formats; Type: filesandordirs\r
712 Name: {app}\Lang; Type: filesandordirs\r
713 \r
714 Name: {group}; Type: dirifempty\r
715 Name: {app}; Type: dirifempty\r
716 \r
717 \r
718 [Code]\r
719 Var\r
720     g_CheckListBox: TNewCheckListBox;\r
721 \r
722 {Determines whether or not the user chose to create a start menu}\r
723 Function GroupCreated(): boolean;\r
724 Var\r
725     {Stores the path of the start menu group Inno Setup may have created}\r
726     strGroup_Path: string;\r
727 Begin\r
728     {Saves the path that Inno Setup intended to create the start menu group at}\r
729     strGroup_Path := ExpandConstant('{group}');\r
730 \r
731     {If the start menu path isn't blank then..}\r
732     if strGroup_Path <> '' Then\r
733         Begin\r
734             {If the user choose to create the start menu then this folder will exist.\r
735             If the folder exists then GroupCreated = True otherwise it does not.}\r
736             Result := DirExists(strGroup_Path)\r
737         end\r
738     else\r
739         {Since the start menu path is null, we know that the user chose not to create a\r
740         start menu group (note in Inno Setup 4.18 this didn't yet work, but I'm sure it will in the future}\r
741         Result := False;\r
742 \r
743      {Debug\r
744 \r
745     If DirExists(strGroup_Path) = True Then\r
746         Msgbox('The group "' + ExpandConstant('group') + '" was found', mbInformation, mb_ok)\r
747     Else\r
748         Msgbox('The group "' + ExpandConstant('group') + '" doesn''t exist.', mbInformation, mb_ok); }\r
749 End;\r
750 \r
751 \r
752 {Returns the appropriate name of the .EXE being installed}\r
753 Function ExeName(Unused: string): string;\r
754 Begin\r
755   Result := 'WinMergeU.exe';\r
756 End;\r
757 \r
758 Function FixVersion(strInput: string): string;\r
759 {Returns a version with four segments A.B.C.D}\r
760 Var\r
761   {Stores the number of periods found within the version string}\r
762   intPeriods: integer;\r
763 \r
764   {Creates a counter}\r
765   i: integer;\r
766 \r
767   {Generates the string to be returned to the user}\r
768   strVersion: string;\r
769 Begin\r
770 \r
771   {Creates a copy of the input string before we tear it apart}\r
772   strVersion := strInput;\r
773 \r
774   {Until strInput is empty do..}\r
775   While Length(strInput) > 0 do\r
776     Begin\r
777       {if the first character of the input string is a period then}\r
778       If Copy(strInput, 1, 1) = '.' Then\r
779 \r
780         {Incriment the number of periods found}\r
781         intPeriods := intPeriods + 1;\r
782 \r
783       {Remove the first character from the Input string}\r
784       strInput := Copy(strINput, 2, length(strINput));\r
785     End;\r
786 \r
787   {For every period shy of 3 do..}\r
788   For i := 1 to 3 - intperiods do\r
789 \r
790     {Add a '.0' to the version string}\r
791     strVersion := strVersion + '.0';\r
792 \r
793   {Returns the Version string with the correct number of segments}\r
794   Result := strVersion;\r
795 \r
796 End;\r
797 \r
798 Function RemoveLeadingZeros(strInput: string): string;\r
799 {Removes the leading zeros if any from a numeric string}\r
800 Begin\r
801 \r
802   {While the first character of the string is a zero}\r
803   While Copy(strInput, 1, 1) = '0' Do\r
804     begin\r
805 \r
806     {Removes one leading zero from the input string}\r
807       strInput := Copy(strInput, 2, Length(strINput));\r
808     end;\r
809 \r
810   {Returns the formatted string}\r
811   Result := strInput;\r
812 \r
813 End;\r
814 \r
815 \r
816 {Returns whether or not the version string detected is meets the version number requirement}\r
817 Function VersionAtLeast(strVersion_Installed: string; intMajor: integer; intMinor: integer; intRevision: integer; intBuild: integer): boolean;\r
818 Var\r
819 \r
820   {Stores the Major of the Version installed (X.0.0.0)}\r
821   intMajor_Installed: Integer;\r
822 \r
823   {Stores the Minor of the Version installed (1.X.0.0)}\r
824   intMinor_Installed: Integer;\r
825 \r
826   {Stores the Revision of the Version installed (1.0.X.0)}\r
827   intRevision_Installed: Integer;\r
828 \r
829   {Stores the Revision of the Version installed (1.0.0.X)}\r
830   intBuild_Installed: Integer;\r
831 \r
832   {Stores the last valid character of a particular segment (Major, Minor, Revision) of the Version string}\r
833   intEnd_Pos: Integer;\r
834 \r
835 begin\r
836   {Debug\r
837   Msgbox('The version installed is ' + strVersion_Installed + ' and the required version is ' + IntToStr(intMajor) + '.' + IntToStr(intMinor) + '.' + IntToStr(intRevision) + '.' + IntToStr(intBuild), mbINformation, mb_OK)\r
838         }\r
839 \r
840   {Makes sure the version string contains four numberic segments 5.2 ---> 5.2.0.0}\r
841   strVersion_Installed := FixVersion(strVersion_Installed);\r
842 \r
843   {If the version number is empty then quit the function}\r
844   if strVersion_Installed = '' Then\r
845     begin\r
846       Result := False;\r
847 \r
848       {Stops analyzing the version installed and returns that the version installed was inadequate}\r
849       exit;\r
850     end;\r
851 \r
852   {Starts detecting the Major value of the Version Installed}\r
853 \r
854   {Sets the end position equal to one character before the first period in the version number}\r
855   intEnd_Pos := Pos('.', strVersion_Installed) -1\r
856 \r
857   {Sets the major version equal to all character before the first period }\r
858   intMajor_installed := StrToIntDef(RemoveLeadingZeros(Copy(strVersion_Installed, 1, intEnd_Pos)), 0);\r
859 \r
860   {Debug\r
861   msgbox('The Major version installed is ' + IntToStr(intMajor_installed) + ' and the required Major is ' + IntToStr(intMajor) + '.', mbInformation, MB_OK)\r
862         }\r
863 \r
864   {If the Major Version Installed is greater than the required value then...}\r
865   if intMajor_Installed > intMajor Then\r
866     begin\r
867       {Returns that the version number was adequate, since it actually exceeded the requirement}\r
868       Result := True;\r
869 \r
870         {Debug\r
871         msgbox(IntToStr(intMajor_installed) + ' > ' +  IntToStr(intMajor), mbInformation, MB_OK)\r
872         }\r
873 \r
874       {Stops analyzing the version number since we already know it met the requirement}\r
875       exit;\r
876     end;\r
877 \r
878   {If the Major version installed is less than the requirement then...}\r
879   If intMajor_Installed < intMajor Then\r
880     begin\r
881       {Debug\r
882        msgbox(IntToStr(intMajor_installed) + ' < ' +  IntToStr(intMajor), mbInformation, MB_OK)\r
883        }\r
884 \r
885       Result := False;\r
886 \r
887       {Stops analyzing the version number since we already know it's inadequate and returns False (inadequate)}\r
888       exit;\r
889     end;\r
890 \r
891 \r
892   {Starts detecting the Minor version of the Version Installed}\r
893 \r
894   {Modifies strVersion_Installed removing the first period and everything prior to it (Removes the Major Version)}\r
895   strVersion_Installed := Copy(strVersion_Installed, intEnd_Pos + 2, Length(strVersion_Installed));\r
896 \r
897   {Sets the end position equal to one character before the first period in the version number}\r
898   intEnd_Pos := Pos('.', strVersion_Installed) -1\r
899 \r
900   {Sets the Minor version equal to all character before the first period }\r
901         intMinor_installed := StrToIntDef(RemoveLeadingZeros(Copy(strVersion_Installed, 1, intEnd_Pos)), 0)\r
902 \r
903         {Debug\r
904   msgbox('The Minor version installed is ' + IntToStr(intMinor_installed) + ' and the required Minor is ' + IntToStr(intMinor) + '.', mbInformation, MB_OK)\r
905         }\r
906 \r
907         {If the Minor Version Installed is greater than the required value then...}\r
908         If intMinor_Installed > intMinor Then\r
909     begin\r
910       {Returns that the version number was adequate}\r
911       Result := True;\r
912 \r
913       {Stops further analyzation of the version number}\r
914       exit\r
915     end;\r
916 \r
917   {If the minor installed is less than what was required}\r
918   If intMinor_Installed < intMinor Then\r
919     Begin\r
920       Result := False;\r
921 \r
922       {Returns that the version installed did not meet the required value and stops analyzing the version number}\r
923       exit;\r
924     end;\r
925 \r
926 \r
927   {Starts Detecting the Revision of the Version Installed}\r
928 \r
929         {Modifies strVersion_Installed removing the first period and everything prior to it (Removes the Minor Version)}\r
930         strVersion_Installed := Copy(strVersion_Installed, intEnd_Pos + 2, Length(strVersion_Installed));\r
931 \r
932         {Sets the last character of the Revision to last character before the first period}\r
933         intEnd_Pos := Pos('.', strVersion_Installed) -1\r
934 \r
935         {Sets the Revision Installed equal to everything before the first period}\r
936         intRevision_Installed := strToIntDef(RemoveLeadingZeros(Copy(strVersion_Installed, 1, intEnd_Pos)), 0);\r
937 \r
938         {Debug\r
939   msgbox('The Revision version installed is ' + IntToStr(intRevision_installed) + ' and the required Revision is ' + IntToStr(intRevision) + '.', mbInformation, MB_OK)\r
940         }\r
941 \r
942         {If the Revision Installed is greater than the required value then...}\r
943   If intRevision_Installed > intRevision Then\r
944     begin\r
945       {Return that the version installed was adequate}\r
946       Result := True;\r
947 \r
948       {Stops further analyzation of the version number}\r
949       exit\r
950     end;\r
951 \r
952   {If the revision installed did not meet the requirement then...}\r
953   If intRevision_Installed < intRevision Then\r
954     begin\r
955       Result := False;\r
956 \r
957     {Return that the version number failed to meet the requirement and stops further analyzation of the version number}\r
958       exit;\r
959     end;\r
960 \r
961   {Start Detection the Build Installed}\r
962 \r
963         {Modifies strVersion_Installed removing the first period and everything prior to it (Removes the Revision) leaving behind only the build number}\r
964         strVersion_Installed := Copy(strVersion_Installed, intEnd_Pos + 2, Length(strVersion_Installed));\r
965 \r
966         {Set the build installed = to what's left of the strVersion_Installed text}\r
967         intBuild_installed := strToIntDef(RemoveLeadingZeros(strVersion_Installed), 0);\r
968 \r
969         {Debug\r
970   msgbox('The Build version installed is ' + IntToStr(intBuild_installed) + ' and the required Build is ' + IntToStr(intBuild) + '.', mbInformation, MB_OK)\r
971         }\r
972 \r
973         {If the build installed is greater than or equal to the requirement then...}\r
974         if intBuild_installed >= intBuild Then\r
975 \r
976          {Report that the version installed was adequate}\r
977     Result := True\r
978   else\r
979 \r
980     {Reports the inadequacy of the version installed and seases processing }\r
981     Result := False;\r
982 end;\r
983 \r
984 \r
985 {Determines whether or not TortoiseCVS is installed}\r
986 Function TortoiseCVSInstalled(): boolean;\r
987 Begin\r
988         {This absolutely must remain as \CustomIcons, because our application used to create some TortoiseCVS keys even if the application wasn't installed!}\r
989     Result := RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\TortoiseCVS\CustomIcons') or RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\TortoiseCVS\Icons');\r
990 End;\r
991 \r
992 {Determines whether or not TortoiseGit is installed}\r
993 Function TortoiseGitInstalled(): boolean;\r
994 Begin\r
995     Result := RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\TortoiseGit') or RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\Classes\Directory\Background\shellex\ContextMenuHandlers\TortoiseGit');\r
996 End;\r
997 \r
998 {Determines whether or not TortoiseSVN is installed}\r
999 Function TortoiseSVNInstalled(): boolean;\r
1000 Begin\r
1001     Result := RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\TortoiseSVN') or RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\Classes\Directory\Background\shellex\ContextMenuHandlers\TortoiseSVN');\r
1002 End;\r
1003 \r
1004 Function OldGroup(): string;\r
1005 Begin\r
1006     {Stores where in \All Users\Programs\ our start menu used to be located}\r
1007      RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\WinMerge_is1', 'Inno Setup: Icon Group', Result)\r
1008 End;\r
1009 \r
1010 Procedure DeletePreviousStartMenu();\r
1011 Var\r
1012         strOld: string;\r
1013         strNew: string;\r
1014         strMessage: string;\r
1015 Begin\r
1016     {Detects the previous start menu group's path, if any}\r
1017     strOld := OldGroup();\r
1018 \r
1019     {Detects the current start menu group's path, if any (not creating a group is a valid option)}\r
1020     strNew := ExpandConstant('{group}');\r
1021 \r
1022     {removes the start menu portion of the path from the group path making it match the format of strOld}\r
1023     StringChange(strNew, ExpandConstant('{commonprograms}\'), '')\r
1024 \r
1025     {if the user does have a previous start menu location then..}\r
1026     If strOld <> '' Then\r
1027         Begin\r
1028             {If the current and previous start menu locations are different then...}\r
1029             If Uppercase(strOld) <> UpperCase(strNew) Then\r
1030                 Begin\r
1031                     strMessage := ExpandConstant('{cm:DeletePreviousStartMenu}');\r
1032                     strMessage := Format(strMessage, [strOld, strNew]);\r
1033 \r
1034                     {Display a dialog asking the user if they'd like to delete the previous start menu group}\r
1035                     {If they'd like to delete the previous start menu group then...}\r
1036                     If Msgbox(strMessage, mbConfirmation, mb_YesNo) = mrYes Then\r
1037                         Begin\r
1038                             strOld := ExpandConstant('{commonprograms}\') + strOld;\r
1039                             {Remove old start menu}\r
1040                             DelTree(strOld, True, True, True);\r
1041                         End;\r
1042                 End;\r
1043         End;\r
1044 End;\r
1045 \r
1046 {This event procedure is queed each time the user changes pages within the installer}\r
1047 Procedure CurPageChanged(CurPage: integer);\r
1048 Begin\r
1049     {if the installer reaches the file copy page then...}\r
1050     If CurPage = wpInstalling Then\r
1051             {Delete the previous start menu group if the location has changed since the last install}\r
1052             DeletePreviousStartMenu;\r
1053 End;\r
1054 \r
1055 // Checks if context menu is already enabled for shell extension\r
1056 // If so, we won't overwrite its existing value in [Registry] section\r
1057 Function ShellMenuEnabled(Unused: string): string;\r
1058 Var\r
1059   ContextMenuEnabled: DWORD;\r
1060 Begin\r
1061   ContextMenuEnabled := 0;\r
1062   RegQueryDWORDValue(HKCU, 'Software\Thingamahoochie\WinMerge', 'ContextMenuEnabled', ContextMenuEnabled);\r
1063   if IsTaskSelected('ShellExtension') then\r
1064     Result := inttostr(ContextMenuEnabled or 1)\r
1065   else\r
1066     Result := '0';\r
1067 End;\r
1068 \r
1069 {Replace one occurrence of OldStr in Str with NewStr}\r
1070 Function ReplaceSubString(Src: string; OldStr: string; NewStr: string) : string;\r
1071 Var\r
1072     OldStrStartAt: Integer;\r
1073 \r
1074 Begin\r
1075     OldStrStartAt := Pos(OldStr, Src);\r
1076     if OldStrStartAt > 0 then\r
1077     begin\r
1078         {Remove old string}\r
1079         Delete(Src, OldStrStartAt, Length(OldStr));\r
1080         {Insert new string}\r
1081         Insert(NewStr, Src, OldStrStartAt);\r
1082     end;\r
1083     Result := Src;\r
1084 End;\r
1085 \r
1086 {Returns WinMerge installed exeutable file name}\r
1087 Function WinMergeExeName(): string;\r
1088 Var\r
1089         Unused: String;\r
1090 \r
1091 Begin\r
1092     Result := ExpandConstant('{app}\') + ExeName(Unused);\r
1093 End;\r
1094 \r
1095 {Returns ClearCase external tools configuration file name}\r
1096 Function ClearCaseMapFile(): string;\r
1097 Begin\r
1098     if not RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Rational Software\', 'RSINSTALLDIR', Result) then\r
1099     begin\r
1100         Result := {pf} + '\Rational\';\r
1101     end;\r
1102     Result := Result + 'ClearCase\lib\mgrs\map';\r
1103 End;\r
1104 \r
1105 {Determines whether or not Rational ClearCase is installed}\r
1106 Function ClearCaseInstalled(): boolean;\r
1107 Begin\r
1108     Result := FileExists(ClearCaseMapFile());\r
1109 End;\r
1110 \r
1111 {Intergrate WinMerge as ClearCase external diff tool}\r
1112 Procedure IntegrateClearCase(OldExe: String; NewExe: String);\r
1113 Var\r
1114     MapFile: TStringList;\r
1115     FileName: String;\r
1116     I: Integer;\r
1117     BakFile: String;\r
1118 \r
1119 Begin\r
1120     FileName := ClearCaseMapFile();\r
1121     {Create a backup file of the original file first time it gets modified}\r
1122     BakFile := FileName + '.original';\r
1123     if not FileExists(BakFile) then\r
1124     begin\r
1125         FileCopy(FileName, BakFile, True);\r
1126     end;\r
1127     MapFile := TStringList.Create();\r
1128     {Read the entire map file to a string list}\r
1129     MapFile.LoadFromFile(FileName);\r
1130     if MapFile.Count > 0 then\r
1131     begin\r
1132         for I := 0 to MapFile.Count do\r
1133         begin\r
1134             {Search for the 'text_file_delta xcompare ...' line}\r
1135                         if (MapFile.Strings[I][1] <> ';') and (Pos('text_file_delta', MapFile.Strings[I]) > 0) and (Pos('xcompare', MapFile.Strings[I]) > 0) then\r
1136                         begin\r
1137                                 {Replace old executable name with a new executable name}\r
1138                                 MapFile.Strings[I] := ReplaceSubString(MapFile.Strings[I], OldExe, NewExe);\r
1139                             break;\r
1140                         end;\r
1141                 end;\r
1142                 { Save the modified file. }\r
1143                 MapFile.SaveToFile(FileName);\r
1144         end;\r
1145 End;\r
1146 \r
1147 // Add WinMerge to system path.\r
1148 // This requires certain order of things to work:\r
1149 // #1 ModPathDir function must be first (it gets called by others)\r
1150 // #2 include of modpath.iss so modpath code gets included\r
1151 // #3 CurStepChanged and CurUninstallStepChanged procedures as they call\r
1152 //    ModPath (in modpath.iss)\r
1153 function ModPathDir(): TArrayOfString;\r
1154 var\r
1155     Dir:        TArrayOfString;\r
1156 begin\r
1157     setArrayLength(Dir, 1)\r
1158         Dir[0] := ExpandConstant('{app}');\r
1159         Result := Dir;\r
1160 end;\r
1161 \r
1162 function UseAs3WayMergeTool(): Boolean;\r
1163 begin\r
1164     Result := g_CheckListBox.Checked[0];\r
1165 end;\r
1166 \r
1167 function TortoiseSVNGITMergeToolCommandLine(Unused: string): string;\r
1168 var\r
1169     lmr: string;\r
1170     Args: string;\r
1171 begin\r
1172     if g_CheckListBox.Checked[1] then begin\r
1173         lmr := 'r';\r
1174         Args := '/e /ub /fr /wl /wm /dl %bname /dm %tname /dr %yname  %base %theirs %mine /o %merged';\r
1175     end else if g_CheckListBox.Checked[2] then begin\r
1176         lmr := 'm';\r
1177         Args := '/e /ub /fm /wl /wr /dl %tname /dm %bname /dr %yname  %theirs %base %mine /o %merged';\r
1178     end else begin\r
1179         lmr := 'l';\r
1180         Args := '/e /ub /fl /wm /wr /dl %yname /dm %tname /dr %bname  %mine %theirs %base /o %merged';\r
1181     end;\r
1182     if g_CheckListBox.Checked[4] then begin\r
1183         Args := Args + ' /a' + lmr;\r
1184     end;\r
1185     Result := WinMergeExeName() + ' ' + Args;\r
1186 end;\r
1187 \r
1188 function ThreeWayMergePage_ShouldSkipPage(Page: TWizardPage): Boolean;\r
1189 begin\r
1190     Result := not (IsTaskSelected('TortoiseSVN') or IsTaskSelected('TortoiseGIT'));\r
1191 end;\r
1192 \r
1193 #include "modpath.iss"\r
1194 \r
1195 procedure CurStepChanged(CurStep: TSetupStep);\r
1196 Begin\r
1197     if CurStep = ssPostInstall then\r
1198     begin\r
1199                 if IsTaskSelected('modifypath') then\r
1200                         ModPath();\r
1201         if IsTaskSelected('ClearCase') then\r
1202         begin\r
1203             IntegrateClearCase('..\..\bin\cleardiffmrg.exe', WinMergeExeName());\r
1204         end;\r
1205     end;\r
1206 End;\r
1207 \r
1208 Procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);\r
1209 var\r
1210         appdir:                 String;\r
1211         selectedTasks:  AnsiString;\r
1212 Begin\r
1213         appdir := ExpandConstant('{app}')\r
1214         if CurUninstallStep = usUninstall then begin\r
1215                 if LoadStringFromFile(appdir + '\uninsTasks.txt', selectedTasks) then\r
1216                         if Pos('modifypath', selectedTasks) > 0 then\r
1217                                 ModPath();\r
1218                 DeleteFile(appdir + '\uninsTasks.txt')\r
1219         end;\r
1220 \r
1221     if CurUninstallStep = usPostUninstall then\r
1222     begin\r
1223       if ClearCaseInstalled() then\r
1224         IntegrateClearCase(WinMergeExeName(), '..\..\bin\cleardiffmrg.exe');\r
1225     end;\r
1226 End;\r
1227 \r
1228 function BooleanToString(Value : Boolean) : String; \r
1229 begin\r
1230   if Value then\r
1231     Result := 'true'\r
1232   else\r
1233     Result := 'false';\r
1234 end;\r
1235 \r
1236 function StringToBoolean(Value : String) : Boolean; \r
1237 begin\r
1238   if Value = 'true' then\r
1239     Result := true\r
1240   else\r
1241     Result := false;\r
1242 end;\r
1243 \r
1244 procedure RegisterPreviousData(PreviousDataKey: Integer);\r
1245 begin\r
1246   SetPreviousData(PreviousDataKey, 'UseAs3WayMergeTool', BooleanToString(g_CheckListBox.Checked[0]));\r
1247   SetPreviousData(PreviousDataKey, 'MergeAtRightPane', BooleanToString(g_CheckListBox.Checked[1]));\r
1248   SetPreviousData(PreviousDataKey, 'MergeAtCenterPane', BooleanToString(g_CheckListBox.Checked[2]));\r
1249   SetPreviousData(PreviousDataKey, 'MergeAtLeftPane', BooleanToString(g_CheckListBox.Checked[3]));\r
1250   SetPreviousData(PreviousDataKey, 'AutoMergeAtStartup', BooleanToString(g_CheckListBox.Checked[4]));\r
1251 end;\r
1252 \r
1253 function GetSysColor(ColorType: Integer): Integer;\r
1254 external 'GetSysColor@user32.dll';\r
1255 \r
1256 procedure InitializeWizard();\r
1257 var\r
1258   Page: TWizardPage;\r
1259 begin\r
1260   Page := CreateCustomPage(wpSelectTasks, ExpandConstant('{cm:ThreeWayMergeWizardPageCaption}'), ExpandConstant('{cm:ThreeWayMergeWizardPageDescription}'));\r
1261   Page.OnShouldSkipPage := @ThreeWayMergePage_ShouldSkipPage;\r
1262 \r
1263   g_CheckListBox := TNewCheckListBox.Create(Page);\r
1264   g_CheckListBox.Width := Page.SurfaceWidth;\r
1265   g_CheckListBox.Height := ScaleY(128);\r
1266   g_CheckListBox.Flat := True;\r
1267   g_CheckListBox.BorderStyle := bsNone;\r
1268   g_CheckListBox.Color := GetSysColor(15);\r
1269   g_CheckListBox.Parent := Page.Surface;\r
1270   g_CheckListBox.AddCheckBox(ExpandConstant('{cm:RegisterWinMergeAs3WayMergeTool}'), '', 0, StringToBoolean(GetPreviousData('UseAs3WayMergeTool', 'true')), True, False, True, nil);\r
1271   g_CheckListBox.AddRadioButton(ExpandConstant('{cm:MergeAtRightPane}'), '', 1, StringToBoolean(GetPreviousData('MergeAtRightPane', 'true')), True, nil);\r
1272   g_CheckListBox.AddRadioButton(ExpandConstant('{cm:MergeAtCenterPane}'), '', 1, StringToBoolean(GetPreviousData('MergeAtCenterPane', 'false')), True, nil);\r
1273   g_CheckListBox.AddRadioButton(ExpandConstant('{cm:MergeAtLeftPane}'), '', 1, StringToBoolean(GetPreviousData('MergeAtLeftPane', 'false')), True, nil);\r
1274   g_CheckListBox.AddCheckBox(ExpandConstant('{cm:AutoMergeAtStartup}'), '', 1, StringToBoolean(GetPreviousData('AutoMergeAtStartup', 'true')), True, False, True, nil);\r
1275 end;\r