ref: 3aefe2f23c84f19044ed12264dba4f917d302f80
parent: 81b5839ab1ee28a5acd1e903ae83064bd5c80283
author: Simon Howard <[email protected]>
date: Sat Apr 26 17:15:08 EDT 2014
osx: Handle .hhe, .seh file extensions. These are the equivalents of .deh for Heretic and Strife. Add these as file associations and auto-switch to the appropriate game type when opened.
--- a/pkg/osx/AppController.m
+++ b/pkg/osx/AppController.m
@@ -113,6 +113,19 @@
{
[self->launcherManager addFileToCommandLine: fileName
forArgument: @"-deh"];
+ [self->launcherManager selectGameByName: "doom"];
+ }
+ else if (![extension caseInsensitiveCompare: @"hhe"])
+ {
+ [self->launcherManager addFileToCommandLine: fileName
+ forArgument: @"-deh"];
+ [self->launcherManager selectGameByName: "heretic"];
+ }
+ else if (![extension caseInsensitiveCompare: @"seh"])
+ {
+ [self->launcherManager addFileToCommandLine: fileName
+ forArgument: @"-deh"];
+ [self->launcherManager selectGameByName: "strife"];
}
else
{
--- a/pkg/osx/IWADController.h
+++ b/pkg/osx/IWADController.h
@@ -53,6 +53,7 @@
- (void) setEnvironment;
- (const char *) getGameName;
- (BOOL) addIWADPath: (NSString *) path;
+- (BOOL) selectGameByName: (const char *) name;
@end
--- a/pkg/osx/IWADController.m
+++ b/pkg/osx/IWADController.m
@@ -114,15 +114,9 @@
}
}
-// Get the name used for the executable for the selected IWAD.
-
-- (const char *) getGameName
+static const char *NameForIWAD(IWAD iwad)
{
- IWAD selectedIWAD;
-
- selectedIWAD = [self getSelectedIWAD];
-
- switch (selectedIWAD)
+ switch (iwad)
{
case IWAD_HERETIC:
return "heretic";
@@ -138,6 +132,13 @@
}
}
+// Get the name used for the executable for the selected IWAD.
+
+- (const char *) getGameName
+{
+ return NameForIWAD([self getSelectedIWAD]);
+}
+
- (void) setIWADConfig
{
IWADLocation *iwadList[NUM_IWAD_TYPES];
@@ -413,6 +414,41 @@
// No IWAD found with this name.
+ return NO;
+}
+
+- (BOOL) selectGameByName: (const char *) name
+{
+ IWADLocation *iwadList[NUM_IWAD_TYPES];
+ NSString *location;
+ const char *name2;
+ int i;
+
+ // Already selected an IWAD of the desired type? Just return
+ // success.
+ if (!strcmp(name, [self getGameName]))
+ {
+ return YES;
+ }
+
+ // Search through the configured IWADs and try to select the
+ // desired game.
+ [self getIWADList: iwadList];
+
+ for (i = 0; i < NUM_IWAD_TYPES; ++i)
+ {
+ location = [iwadList[i] getLocation];
+ name2 = NameForIWAD(i);
+
+ if (!strcmp(name, name2)
+ && location != nil && [location length] > 0)
+ {
+ [self->iwadSelector selectItemWithTitle:IWADLabels[i]];
+ return YES;
+ }
+ }
+
+ // User hasn't configured any WAD(s) for the desired game type.
return NO;
}
--- a/pkg/osx/Info.plist.in
+++ b/pkg/osx/Info.plist.in
@@ -45,7 +45,7 @@
</dict>
<dict>
<key>CFBundleTypeName</key>
- <string>Dehacked patch</string>
+ <string>Doom Dehacked patch</string>
<key>CFBundleTypeIconFile</key>
<string>wadfile.icns</string>
<key>CFBundleTypeRole</key>
@@ -53,6 +53,30 @@
<key>CFBundleTypeExtensions</key>
<array>
<string>deh</string>
+ </array>
+ </dict>
+ <dict>
+ <key>CFBundleTypeName</key>
+ <string>Heretic HHE patch</string>
+ <key>CFBundleTypeIconFile</key>
+ <string>wadfile.icns</string>
+ <key>CFBundleTypeRole</key>
+ <string>Viewer</string>
+ <key>CFBundleTypeExtensions</key>
+ <array>
+ <string>hhe</string>
+ </array>
+ </dict>
+ <dict>
+ <key>CFBundleTypeName</key>
+ <string>Strife Sehacked patch</string>
+ <key>CFBundleTypeIconFile</key>
+ <string>wadfile.icns</string>
+ <key>CFBundleTypeRole</key>
+ <string>Viewer</string>
+ <key>CFBundleTypeExtensions</key>
+ <array>
+ <string>seh</string>
</array>
</dict>
</array>
--- a/pkg/osx/LauncherManager.h
+++ b/pkg/osx/LauncherManager.h
@@ -44,6 +44,7 @@
- (BOOL) addIWADPath: (NSString *) path;
- (void) addFileToCommandLine: (NSString *) fileName
forArgument: (NSString *) args;
+- (BOOL) selectGameByName: (const char *) name;
- (void) openTerminal: (id) sender;
- (void) openREADME: (id) sender;
--- a/pkg/osx/LauncherManager.m
+++ b/pkg/osx/LauncherManager.m
@@ -388,5 +388,10 @@
return [self->iwadController addIWADPath: path];
}
+- (BOOL) selectGameByName: (const char *) name
+{
+ return [self->iwadController selectGameByName: name];
+}
+
@end