From fccfd04d997793b4ec8f4ec500db56e67ba83ac0 Mon Sep 17 00:00:00 2001 From: simon Date: Mon, 24 Jan 2005 12:05:21 +0000 Subject: [PATCH] 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 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 | 10 ++++++++++ mkfiles.pl | 7 ++++--- osx-info.plist | 4 ++++ osx.m | 23 +++++++++++++++-------- puzzles.but | 15 ++++++++++----- 5 files changed, 43 insertions(+), 16 deletions(-) diff --git a/Recipe b/Recipe index 36143a9..fa1a78f 100644 --- 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 diff --git a/mkfiles.pl b/mkfiles.pl index 8af1939..aa257ed 100755 --- a/mkfiles.pl +++ b/mkfiles.pl @@ -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"; diff --git a/osx-info.plist b/osx-info.plist index 54e8af3..afe6f58 100644 --- a/osx-info.plist +++ b/osx-info.plist @@ -4,5 +4,9 @@ CFBundleIconFile Puzzles.icns + CFBundleHelpBookFolder + Help + CFBundleHelpBookName + Puzzles Help diff --git a/osx.m b/osx.m index d5fab20..245672a 100644 --- 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]; } diff --git a/puzzles.but b/puzzles.but index de0bac3..305340a 100644 --- 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}{} +\cfg{html-leaf-level}{0} \cfg{info-filename}{puzzles.info} -- 2.11.0