ref: 2040ff96317be6b93ca459c44bfea5d775a18692
parent: d8eb0de7c2210070adcf085e968658cbd00958d6
author: Simon Tatham <anakin@pobox.com>
date: Mon Jan 24 07:05:21 EST 2005
First cut at online help under OS X. I just built the HTML version 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! [originally from svn r5190]
--- a/Recipe
+++ b/Recipe
@@ -40,6 +40,16 @@
# 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
--- a/mkfiles.pl
+++ b/mkfiles.pl
@@ -1131,6 +1131,9 @@
&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 @@
".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 @@
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 @@
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";
--- a/osx-info.plist
+++ b/osx-info.plist
@@ -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>
--- a/osx.m
+++ b/osx.m
@@ -1,13 +1,16 @@
/*
* 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:
*
* - is there a better approach to frontend_default_colour?
@@ -1113,12 +1116,12 @@
@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;
@@ -1208,6 +1211,10 @@
menu = newsubmenu([NSApp mainMenu], "Window");
[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];
--- a/puzzles.but
+++ b/puzzles.but
@@ -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}