mirror of
git://git.tartarus.org/simon/puzzles.git
synced 2025-04-21 16:05:44 -07:00
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]
This commit is contained in:
10
Recipe
10
Recipe
@ -40,6 +40,16 @@ pattern : [G] WINDOWS COMMON pattern
|
|||||||
|
|
||||||
# Mac OS X unified application containing all the puzzles.
|
# Mac OS X unified application containing all the puzzles.
|
||||||
Puzzles : [MX] osx osx.icns osx-info.plist COMMON ALL
|
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
|
# The `nullgame' source file is a largely blank one, which contains
|
||||||
# all the correct function definitions to compile and link, but
|
# all the correct function definitions to compile and link, but
|
||||||
|
@ -1131,6 +1131,9 @@ if (defined $makefiles{'osx'}) {
|
|||||||
&splitline("CFLAGS = -O2 -Wall -Werror -g -DMAC_OS_X " .
|
&splitline("CFLAGS = -O2 -Wall -Werror -g -DMAC_OS_X " .
|
||||||
(join " ", map {"-I$dirpfx$_"} @srcdirs))."\n".
|
(join " ", map {"-I$dirpfx$_"} @srcdirs))."\n".
|
||||||
"LDFLAGS = -framework Cocoa\n".
|
"LDFLAGS = -framework Cocoa\n".
|
||||||
|
&splitline("all:" . join "", map { " $_" } &progrealnames("MX")) .
|
||||||
|
"\n" .
|
||||||
|
$makefile_extra{'osx'} .
|
||||||
"\n".
|
"\n".
|
||||||
".SUFFIXES: .o .c .m\n".
|
".SUFFIXES: .o .c .m\n".
|
||||||
"\n".
|
"\n".
|
||||||
@ -1139,7 +1142,6 @@ if (defined $makefiles{'osx'}) {
|
|||||||
".m.o:\n".
|
".m.o:\n".
|
||||||
"\t\$(CC) -x objective-c \$(COMPAT) \$(FWHACK) \$(XFLAGS) \$(CFLAGS) -c \$<\n".
|
"\t\$(CC) -x objective-c \$(COMPAT) \$(FWHACK) \$(XFLAGS) \$(CFLAGS) -c \$<\n".
|
||||||
"\n";
|
"\n";
|
||||||
print &splitline("all:" . join "", map { " $_" } &progrealnames("MX"));
|
|
||||||
print "\n\n";
|
print "\n\n";
|
||||||
foreach $p (&prognames("MX")) {
|
foreach $p (&prognames("MX")) {
|
||||||
($prog, $type) = split ",", $p;
|
($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";
|
print "${prog}.app/Contents/Info.plist: ${prog}.app/Contents/Resources $infoplist\n\tcp $infoplist \$\@\n";
|
||||||
$targets .= " ${prog}.app/Contents/Info.plist";
|
$targets .= " ${prog}.app/Contents/Info.plist";
|
||||||
}
|
}
|
||||||
|
$targets .= " \$(${prog}_extra)";
|
||||||
print &splitline("${prog}: $targets", 69) . "\n\n";
|
print &splitline("${prog}: $targets", 69) . "\n\n";
|
||||||
print &splitline("${prog}.app/Contents/MacOS/$prog: ".
|
print &splitline("${prog}.app/Contents/MacOS/$prog: ".
|
||||||
"${prog}.app/Contents/MacOS " . $objstr), "\n";
|
"${prog}.app/Contents/MacOS " . $objstr), "\n";
|
||||||
@ -1170,8 +1173,6 @@ if (defined $makefiles{'osx'}) {
|
|||||||
print &splitline(sprintf("%s: %s", $d->{obj}, join " ", @{$d->{deps}})),
|
print &splitline(sprintf("%s: %s", $d->{obj}, join " ", @{$d->{deps}})),
|
||||||
"\n";
|
"\n";
|
||||||
}
|
}
|
||||||
print "\n";
|
|
||||||
print $makefile_extra{'osx'};
|
|
||||||
print "\nclean:\n".
|
print "\nclean:\n".
|
||||||
"\trm -f *.o\n".
|
"\trm -f *.o\n".
|
||||||
"\trm -rf *.app\n";
|
"\trm -rf *.app\n";
|
||||||
|
@ -4,5 +4,9 @@
|
|||||||
<dict>
|
<dict>
|
||||||
<key>CFBundleIconFile</key>
|
<key>CFBundleIconFile</key>
|
||||||
<string>Puzzles.icns</string>
|
<string>Puzzles.icns</string>
|
||||||
|
<key>CFBundleHelpBookFolder</key>
|
||||||
|
<string>Help</string>
|
||||||
|
<key>CFBundleHelpBookName</key>
|
||||||
|
<string>Puzzles Help</string>
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
|
21
osx.m
21
osx.m
@ -1,12 +1,15 @@
|
|||||||
/*
|
/*
|
||||||
* Mac OS X / Cocoa front end to puzzles.
|
* Mac OS X / Cocoa front end to puzzles.
|
||||||
*
|
*
|
||||||
* Actually unfinished things left to do:
|
* Still to do:
|
||||||
*
|
*
|
||||||
* - Find out how to do help, and do some. We have a help file; at
|
* - Improve the help. For a start I probably ought to split it
|
||||||
* _worst_ this should involve a new Halibut back end, but I
|
* into pieces (which means Halibut needs to acquire a mechanism
|
||||||
* think help is HTML round here anyway so perhaps we can work
|
* of putting something in the head section of _only one_ HTML
|
||||||
* with what we already have.
|
* 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:
|
* Mac interface issues that possibly could be done better:
|
||||||
*
|
*
|
||||||
@ -1113,12 +1116,12 @@ void status_bar(frontend *fe, char *text)
|
|||||||
@interface AppController : NSObject
|
@interface AppController : NSObject
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
- (IBAction)newGame:(id)sender;
|
- (void)newGame:(id)sender;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@implementation AppController
|
@implementation AppController
|
||||||
|
|
||||||
- (IBAction)newGame:(id)sender
|
- (void)newGame:(id)sender
|
||||||
{
|
{
|
||||||
const game *g = [sender getPayload];
|
const game *g = [sender getPayload];
|
||||||
id win;
|
id win;
|
||||||
@ -1209,6 +1212,10 @@ int main(int argc, char **argv)
|
|||||||
[NSApp setWindowsMenu: menu];
|
[NSApp setWindowsMenu: menu];
|
||||||
item = newitem(menu, "Minimise Window", "m", NULL, @selector(performMiniaturize:));
|
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];
|
[NSApp run];
|
||||||
[pool release];
|
[pool release];
|
||||||
}
|
}
|
||||||
|
15
puzzles.but
15
puzzles.but
@ -5,11 +5,16 @@
|
|||||||
|
|
||||||
\cfg{text-filename}{puzzles.txt}
|
\cfg{text-filename}{puzzles.txt}
|
||||||
|
|
||||||
\cfg{xhtml-contents-filename}{index.html}
|
\#
|
||||||
\cfg{xhtml-leaf-level}{1}
|
\cfg{html-contents-filename}{index.html}
|
||||||
\cfg{xhtml-contents-depth-0}{1}
|
\cfg{html-leaf-level}{1}
|
||||||
\cfg{xhtml-contents-depth-1}{2}
|
\cfg{html-contents-depth-0}{1}
|
||||||
\cfg{xhtml-leaf-contains-contents}{true}
|
\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}
|
\cfg{info-filename}{puzzles.info}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user