From 3aefe2f23c84f19044ed12264dba4f917d302f80 Mon Sep 17 00:00:00 2001
From: Simon Howard
Date: Sat, 26 Apr 2014 21:15:08 -0400
Subject: 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.
---
pkg/osx/AppController.m | 13 ++++++++++++
pkg/osx/IWADController.h | 1 +
pkg/osx/IWADController.m | 52 +++++++++++++++++++++++++++++++++++++++--------
pkg/osx/Info.plist.in | 26 +++++++++++++++++++++++-
pkg/osx/LauncherManager.h | 1 +
pkg/osx/LauncherManager.m | 5 +++++
6 files changed, 89 insertions(+), 9 deletions(-)
diff --git a/pkg/osx/AppController.m b/pkg/osx/AppController.m
index ba8dae9b..23e5ad57 100644
--- 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
{
diff --git a/pkg/osx/IWADController.h b/pkg/osx/IWADController.h
index 0e3c3ae5..68e1f1d5 100644
--- 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
diff --git a/pkg/osx/IWADController.m b/pkg/osx/IWADController.m
index fb9223c8..c2e6bf45 100644
--- a/pkg/osx/IWADController.m
+++ b/pkg/osx/IWADController.m
@@ -114,15 +114,9 @@ static NSString *IWADFilenames[NUM_IWAD_TYPES + 1] =
}
}
-// 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 @@ static NSString *IWADFilenames[NUM_IWAD_TYPES + 1] =
}
}
+// 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];
@@ -416,5 +417,40 @@ static NSString *IWADFilenames[NUM_IWAD_TYPES + 1] =
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;
+}
+
@end
diff --git a/pkg/osx/Info.plist.in b/pkg/osx/Info.plist.in
index 8b8436f7..5ea4f323 100644
--- a/pkg/osx/Info.plist.in
+++ b/pkg/osx/Info.plist.in
@@ -45,7 +45,7 @@
CFBundleTypeName
- Dehacked patch
+ Doom Dehacked patch
CFBundleTypeIconFile
wadfile.icns
CFBundleTypeRole
@@ -55,6 +55,30 @@
deh
+
+ CFBundleTypeName
+ Heretic HHE patch
+ CFBundleTypeIconFile
+ wadfile.icns
+ CFBundleTypeRole
+ Viewer
+ CFBundleTypeExtensions
+
+ hhe
+
+
+
+ CFBundleTypeName
+ Strife Sehacked patch
+ CFBundleTypeIconFile
+ wadfile.icns
+ CFBundleTypeRole
+ Viewer
+ CFBundleTypeExtensions
+
+ seh
+
+
diff --git a/pkg/osx/LauncherManager.h b/pkg/osx/LauncherManager.h
index 1c8a5187..72964f3d 100644
--- 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;
diff --git a/pkg/osx/LauncherManager.m b/pkg/osx/LauncherManager.m
index b041c99f..704003c6 100644
--- a/pkg/osx/LauncherManager.m
+++ b/pkg/osx/LauncherManager.m
@@ -388,5 +388,10 @@ static NSString *AppendQuotedFilename(NSString *str, NSString *fileName)
return [self->iwadController addIWADPath: path];
}
+- (BOOL) selectGameByName: (const char *) name
+{
+ return [self->iwadController selectGameByName: name];
+}
+
@end
--
cgit v1.2.3