foxygit / doom Log in
commit 3aefe2f23c84f19044ed12264dba4f917d302f80
Author:     Simon Howard <fraggle@gmail.com>
AuthorDate: Sat Apr 26 21:15:08 2014 -0400
Commit:     Simon Howard <fraggle@gmail.com>
CommitDate: Sat Apr 26 21:15:08 2014 -0400

    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 @@
                 </dict>
                 <dict>
                         <key>CFBundleTypeName</key>
-                        <string>Dehacked patch</string>
+                        <string>Doom Dehacked patch</string>
                         <key>CFBundleTypeIconFile</key>
                         <string>wadfile.icns</string>
                         <key>CFBundleTypeRole</key>
@@ -55,6 +55,30 @@
                                 <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>
 </dict>
 </plist>
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