* recreate it.
*/
+#define COMBINED /* we put all the puzzles in one binary in this port */
+
#include <ctype.h>
#include <sys/time.h>
#import <Cocoa/Cocoa.h>
{
}
+/*
+ * setAppleMenu isn't listed in the NSApplication header, but an
+ * NSApp responds to it, so we're adding it here to silence
+ * warnings. (This was removed from the headers in 10.4, so we
+ * only need to include it for 10.4+.)
+ */
+#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1040
+@interface NSApplication(NSAppleMenu)
+- (void)setAppleMenu:(NSMenu *)menu;
+@end
+#endif
+
/* ----------------------------------------------------------------------
* Tiny extension to NSMenuItem which carries a payload of a `void
* *', allowing several menu items to invoke the same message but
NSTextField *status;
}
- (id)initWithGame:(const game *)g;
-- dealloc;
+- (void)dealloc;
- (void)processButton:(int)b x:(int)x y:(int)y;
- (void)keyDown:(NSEvent *)ev;
- (void)activateTimer;
- (void)deactivateTimer;
- (void)setStatusLine:(char *)text;
- (void)resizeForNewGameParams;
+- (void)updateTypeMenuTick;
@end
@implementation MyImageView
fe.window = self;
- me = midend_new(&fe, ourgame, osx_drawing, &fe);
+ me = midend_new(&fe, ourgame, &osx_drawing, &fe);
/*
* If we ever need to open a fresh window using a provided game
* ID, I think the right thing is to move most of this method
/*
* Create the status bar, which will just be an NSTextField.
*/
- if (ourgame->wants_statusbar()) {
+ if (midend_wants_statusbar(me)) {
status = [[NSTextField alloc] initWithFrame:NSMakeRect(0,0,100,50)];
[status setEditable:NO];
[status setSelectable:NO];
return self;
}
-- dealloc
+- (void)dealloc
{
int i;
for (i = 0; i < fe.ncolours; i++) {
}
sfree(fe.colours);
midend_free(me);
- return [super dealloc];
+ [super dealloc];
}
- (void)processButton:(int)b x:(int)x y:(int)y
NSSavePanel *sp = [NSSavePanel savePanel];
if ([sp runModal] == NSFileHandlingPanelOKButton) {
- const char *name = [[sp filename] cString];
+ const char *name = [[sp filename] UTF8String];
FILE *fp = fopen(name, "w");
}
[self resizeForNewGameParams];
+ [self updateTypeMenuTick];
}
}
- (void)undoMove:(id)sender
- (BOOL)validateMenuItem:(NSMenuItem *)item
{
if ([item action] == @selector(copy:))
- return (ourgame->can_format_as_text ? YES : NO);
+ return (ourgame->can_format_as_text_ever &&
+ midend_can_format_as_text_now(me) ? YES : NO);
else if ([item action] == @selector(solveGame:))
return (ourgame->can_solve ? YES : NO);
else
{
while ([typemenu numberOfItems] > 1)
[typemenu removeItemAtIndex:0];
+ [[typemenu itemAtIndex:0] setState:NSOffState];
+}
+
+- (void)updateTypeMenuTick
+{
+ int i, total, n;
+
+ total = [typemenu numberOfItems];
+ n = midend_which_preset(me);
+ if (n < 0)
+ n = total - 1; /* that's always where "Custom" lives */
+ for (i = 0; i < total; i++)
+ [[typemenu itemAtIndex:i] setState:(i == n ? NSOnState : NSOffState)];
}
- (void)becomeKeyWindow
[typemenu insertItem:item atIndex:0];
}
}
+
+ [self updateTypeMenuTick];
}
- (void)resignKeyWindow
midend_new_game(me);
[self resizeForNewGameParams];
+ [self updateTypeMenuTick];
}
- (void)startConfigureSheet:(int)which
case C_STRING:
sfree(i->sval);
i->sval = dupstr([[[(id)cfg_controls[k+1] cell]
- title] cString]);
+ title] UTF8String]);
k += 2;
break;
case C_BOOLEAN:
} else {
midend_new_game(me);
[self resizeForNewGameParams];
+ [self updateTypeMenuTick];
}
}
sfree(cfg_controls);
- (void)setStatusLine:(char *)text
{
- char *rewritten = midend_rewrite_statusbar(me, text);
- [[status cell] setTitle:[NSString stringWithCString:rewritten]];
- sfree(rewritten);
+ [[status cell] setTitle:[NSString stringWithCString:text]];
}
@end
point.x -= size.width / 2;
if (align & ALIGN_VCENTRE)
point.y -= size.height / 2;
+ else
+ point.y -= size.height;
[string drawAtPoint:point withAttributes:attr];
}
}
static void osx_blitter_load(void *handle, blitter *bl, int x, int y)
{
- frontend *fe = (frontend *)handle;
+ /* frontend *fe = (frontend *)handle; */
if (x == BLITTER_FROMSAVED && y == BLITTER_FROMSAVED) {
x = bl->x;
y = bl->y;
osx_draw_text,
osx_draw_rect,
osx_draw_line,
- osx_draw_poly,
+ osx_draw_polygon,
osx_draw_circle,
osx_draw_update,
osx_clip,
[NSApp run];
[pool release];
+
+ return 0;
}