First cut at online help under OS X. I just built the HTML version
authorsimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Mon, 24 Jan 2005 12:05:21 +0000 (12:05 +0000)
committersimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Mon, 24 Jan 2005 12:05:21 +0000 (12:05 +0000)
of the manual using Halibut (with one additional magic tag in the
<HEAD> section), stuck it in the right part of the application
bundle, referenced it in Info.plist, and added a Help menu.
Everything else was automatic. Not bad!

git-svn-id: svn://svn.tartarus.org/sgt/puzzles@5190 cda61777-01e9-0310-a592-d414129be87e

Recipe
mkfiles.pl
osx-info.plist
osx.m
puzzles.but

diff --git a/Recipe b/Recipe
index 36143a9..fa1a78f 100644 (file)
--- a/Recipe
+++ b/Recipe
@@ -40,6 +40,16 @@ pattern  : [G] WINDOWS COMMON pattern
 
 # Mac OS X unified application containing all the puzzles.
 Puzzles  : [MX] osx osx.icns osx-info.plist COMMON ALL
+# For OS X, we must create the online help and include it in the
+# application bundle.)
+!begin osx
+Puzzles_extra = Puzzles.app/Contents/Resources/Help/index.html
+Puzzles.app/Contents/Resources/Help/index.html: \
+       Puzzles.app/Contents/Resources/Help puzzles.but
+       halibut --html=$@ puzzles.but
+Puzzles.app/Contents/Resources/Help: Puzzles.app/Contents/Resources
+       mkdir -p Puzzles.app/Contents/Resources/Help
+!end
 
 # The `nullgame' source file is a largely blank one, which contains
 # all the correct function definitions to compile and link, but
index 8af1939..aa257ed 100755 (executable)
@@ -1131,6 +1131,9 @@ if (defined $makefiles{'osx'}) {
     &splitline("CFLAGS = -O2 -Wall -Werror -g -DMAC_OS_X " .
               (join " ", map {"-I$dirpfx$_"} @srcdirs))."\n".
     "LDFLAGS = -framework Cocoa\n".
+    &splitline("all:" . join "", map { " $_" } &progrealnames("MX")) .
+    "\n" .
+    $makefile_extra{'osx'} .
     "\n".
     ".SUFFIXES: .o .c .m\n".
     "\n".
@@ -1139,7 +1142,6 @@ if (defined $makefiles{'osx'}) {
     ".m.o:\n".
     "\t\$(CC) -x objective-c \$(COMPAT) \$(FWHACK) \$(XFLAGS) \$(CFLAGS) -c \$<\n".
     "\n";
-    print &splitline("all:" . join "", map { " $_" } &progrealnames("MX"));
     print "\n\n";
     foreach $p (&prognames("MX")) {
       ($prog, $type) = split ",", $p;
@@ -1159,6 +1161,7 @@ if (defined $makefiles{'osx'}) {
        print "${prog}.app/Contents/Info.plist: ${prog}.app/Contents/Resources $infoplist\n\tcp $infoplist \$\@\n";
        $targets .= " ${prog}.app/Contents/Info.plist";
       }
+      $targets .= " \$(${prog}_extra)";
       print &splitline("${prog}: $targets", 69) . "\n\n";
       print &splitline("${prog}.app/Contents/MacOS/$prog: ".
                       "${prog}.app/Contents/MacOS " . $objstr), "\n";
@@ -1170,8 +1173,6 @@ if (defined $makefiles{'osx'}) {
       print &splitline(sprintf("%s: %s", $d->{obj}, join " ", @{$d->{deps}})),
           "\n";
     }
-    print "\n";
-    print $makefile_extra{'osx'};
     print "\nclean:\n".
     "\trm -f *.o\n".
     "\trm -rf *.app\n";
index 54e8af3..afe6f58 100644 (file)
@@ -4,5 +4,9 @@
 <dict>
        <key>CFBundleIconFile</key>
        <string>Puzzles.icns</string>
+       <key>CFBundleHelpBookFolder</key>
+       <string>Help</string>
+       <key>CFBundleHelpBookName</key>
+       <string>Puzzles Help</string>
 </dict>
 </plist>
diff --git a/osx.m b/osx.m
index d5fab20..245672a 100644 (file)
--- a/osx.m
+++ b/osx.m
@@ -1,12 +1,15 @@
 /*
  * Mac OS X / Cocoa front end to puzzles.
  *
- * Actually unfinished things left to do:
- *
- *  - Find out how to do help, and do some. We have a help file; at
- *    _worst_ this should involve a new Halibut back end, but I
- *    think help is HTML round here anyway so perhaps we can work
- *    with what we already have.
+ * Still to do:
+ * 
+ *  - Improve the help. For a start I probably ought to split it
+ *    into pieces (which means Halibut needs to acquire a mechanism
+ *    of putting something in the head section of _only one_ HTML
+ *    file); then I'd also like to be able to call up context help
+ *    for a specific game at a time. Also I just idly wonder
+ *    whether changing font might be nice, to match up to Apple
+ *    norms.
  * 
  * Mac interface issues that possibly could be done better:
  * 
@@ -1113,12 +1116,12 @@ void status_bar(frontend *fe, char *text)
 @interface AppController : NSObject
 {
 }
-- (IBAction)newGame:(id)sender;
+- (void)newGame:(id)sender;
 @end
 
 @implementation AppController
 
-- (IBAction)newGame:(id)sender
+- (void)newGame:(id)sender
 {
     const game *g = [sender getPayload];
     id win;
@@ -1209,6 +1212,10 @@ int main(int argc, char **argv)
     [NSApp setWindowsMenu: menu];
     item = newitem(menu, "Minimise Window", "m", NULL, @selector(performMiniaturize:));
 
+    menu = newsubmenu([NSApp mainMenu], "Help");
+    typemenu = menu;
+    item = newitem(menu, "Puzzles Help", "", NSApp, @selector(showHelp:));
+
     [NSApp run];
     [pool release];
 }
index de0bac3..305340a 100644 (file)
@@ -5,11 +5,16 @@
 
 \cfg{text-filename}{puzzles.txt}
 
-\cfg{xhtml-contents-filename}{index.html}
-\cfg{xhtml-leaf-level}{1}
-\cfg{xhtml-contents-depth-0}{1}
-\cfg{xhtml-contents-depth-1}{2}
-\cfg{xhtml-leaf-contains-contents}{true}
+\#
+\cfg{html-contents-filename}{index.html}
+\cfg{html-leaf-level}{1}
+\cfg{html-contents-depth-0}{1}
+\cfg{html-contents-depth-1}{2}
+\cfg{html-leaf-contains-contents}{true}
+
+\cfg{html-single-filename}{index.html}
+\cfg{html-head-end}{<meta name="AppleTitle" content="Puzzles Help">}
+\cfg{html-leaf-level}{0}
 
 \cfg{info-filename}{puzzles.info}