* 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>
- (void)deactivateTimer;
- (void)setStatusLine:(char *)text;
- (void)resizeForNewGameParams;
+- (void)updateTypeMenuTick;
@end
@implementation MyImageView
}
[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
} else {
midend_new_game(me);
[self resizeForNewGameParams];
+ [self updateTypeMenuTick];
}
}
sfree(cfg_controls);
int fontsize, int align, int colour, char *text)
{
frontend *fe = (frontend *)handle;
- NSString *string = [NSString stringWithCString:text];
+ NSString *string = [NSString stringWithCString:text
+ encoding:NSUTF8StringEncoding];
NSDictionary *attr;
NSFont *font;
NSSize size;
[string drawAtPoint:point withAttributes:attr];
}
+static char *osx_text_fallback(void *handle, const char *const *strings,
+ int nstrings)
+{
+ /*
+ * We assume OS X can cope with any UTF-8 likely to be emitted
+ * by a puzzle.
+ */
+ return dupstr(strings[0]);
+}
struct blitter {
int w, h;
int x, y;
osx_blitter_save,
osx_blitter_load,
NULL, NULL, NULL, NULL, NULL, NULL, /* {begin,end}_{doc,page,puzzle} */
- NULL, /* line_width */
+ NULL, NULL, /* line_width, line_dotted */
+ osx_text_fallback,
};
void deactivate_timer(frontend *fe)