X-Git-Url: http://www.entropy.ch/git/LeanCalc.git/blobdiff_plain/37cf92c0cb27ae14e6ed507cd63f7035e00c8887..c63394a796dd31e2e7ccdc85e2630629e90080c6:/Sources/MyDocument.m diff --git a/Sources/MyDocument.m b/Sources/MyDocument.m index 51823fe..514b3ed 100644 --- a/Sources/MyDocument.m +++ b/Sources/MyDocument.m @@ -11,7 +11,6 @@ - num lock / esc clear expression - */ @@ -21,34 +20,28 @@ @implementation MyDocument - (id)init { - self = [super init]; if (!self) return nil; - calculations = [[NSMutableArray alloc] init]; - - return self; + return self; } - - (void)dealloc { [calculations release]; + [super dealloc]; } - - (void)awakeFromNib { - if (![self fileName]) { [arrayController add:self]; } - [arrayController setSelectionIndex:[calculations count] - 1]; - } + - (IBAction)commit:(id)sender { if (![[sender stringValue] length]) return; @@ -63,28 +56,22 @@ - (BOOL)lastItemIsSelected { - id lastObject = [calculations lastObject]; id selectedObject = [[arrayController selectedObjects] objectAtIndex:0]; - return selectedObject == lastObject; - } - (void)addItem { - - [arrayController add:self]; + Calculation *newcalc = [[[Calculation alloc] init] autorelease]; + [arrayController addObject:newcalc]; int count = [calculations count]; - id last = [calculations objectAtIndex:count - 1]; id secondtolast = [calculations objectAtIndex:count - 2]; - [secondtolast setValue:last forKey:@"next"]; - + [secondtolast setValue:newcalc forKey:@"next"]; } - (void)insertPrevious:(NSNumber *)sender { - int index = [sender intValue]; if ([calculations count] <= index) return; @@ -93,36 +80,51 @@ } - - - - (NSArray *)control:(NSControl *)control textView:(NSTextView *)textView completions:(NSArray *)words forPartialWordRange:(NSRange)charRange indexOfSelectedItem:(int *)index { NSString *partialWord = [[textView string] substringWithRange:charRange]; NSArray *completions = [[[NSApplication sharedApplication] delegate] completionsForPartialWord:partialWord]; return completions; - } +// enable copy: menu command only when a previous result is selected +- (BOOL)validateMenuItem:(NSMenuItem *)item { + if ([item action] != @selector(copy:)) return YES; + id selectedObject = [[arrayController selectedObjects] objectAtIndex:0]; + return selectedObject && ![self lastItemIsSelected] && ![selectedObject expressionIsEmpty]; +} + +/* +- (BOOL)textView:(NSTextView *)aTextView doCommandBySelector:(SEL)aSelector { + NSLog(@"text view by selector %d", aSelector); + return NO; +} +*/ + + +- (IBAction)copy:(id)sender { + NSPasteboard *pboard = [NSPasteboard generalPasteboard]; + [pboard declareTypes:[NSArray arrayWithObject:NSStringPboardType] owner:nil]; + id selectedObject = [[arrayController selectedObjects] objectAtIndex:0]; + [pboard setString:[selectedObject result] forType:NSStringPboardType]; +} + -- (NSString *)windowNibName -{ - // Override returning the nib file name of the document - // If you need to use a subclass of NSWindowController or if your document supports multiple NSWindowControllers, you should remove this method and override -makeWindowControllers instead. +- (NSString *)windowNibName { return @"MyDocument"; } -- (void)windowControllerDidLoadNib:(NSWindowController *) aController -{ - [super windowControllerDidLoadNib:aController]; - // Add any code here that needs to be executed once the windowController has loaded the document's window. +- (void)windowControllerDidLoadNib:(NSWindowController *)aController { + NSWindow *win = [aController window]; + [win performSelector:@selector(makeFirstResponder:) withObject:expressionField afterDelay:0.0]; + [super windowControllerDidLoadNib:aController]; } -- (NSData *)dataRepresentationOfType:(NSString *)aType { +- (NSData *)dataRepresentationOfType:(NSString *)aType { NSMutableData *data = [[[NSMutableData alloc] init] autorelease]; NSKeyedArchiver *archiver = [[[NSKeyedArchiver alloc] initForWritingWithMutableData:data] autorelease]; [archiver setOutputFormat:NSPropertyListXMLFormat_v1_0]; @@ -133,11 +135,9 @@ - (BOOL)loadDataRepresentation:(NSData *)data ofType:(NSString *)aType { - NSKeyedUnarchiver *unarchiver = [[[NSKeyedUnarchiver alloc] initForReadingWithData:data] autorelease]; [self setValue:[unarchiver decodeObjectForKey:@"calculations"] forKey:@"calculations"]; [unarchiver finishDecoding]; - return YES; }