1/* 2 Project: Cartotheque 3 4 Copyright (C) 2005 Stefan Urbanek 5 6 Author : Stefan Urbanek 7 Created: 2005-01-27 8 License: GNU LGPL 2.1 9*/ 10 11#import "CardController.m" 12 13#import <Foundation/NSException.h> 14#import <AppKit/NSTextView.h> 15#import <AppKit/NSTextStorage.h> 16 17@implementation CardWindowController 18- initWithCard:(Stack *)aStack 19{ 20 self = [super initWithWindowNibName:@"CardWindow"]; 21 stack = RETAIN(aStack); 22 return self; 23} 24 25- (void)dealloc 26{ 27 RELEASE(stack); 28 RELEASE(currentCard); 29} 30- (void)titleChanged:(id)sender 31{ 32 [currentCard setTitle:[titleField currentValue]]; 33} 34- (void)createCard:(id)sender 35{ 36 Card *newCard; 37 newCard = RETAIN([stack createCard]); 38 [self setCurrentCard:newCard]; 39} 40- (void)removeCard:(id)sender 41{ 42 if([currentCard isEqual:[wiki homeCard]]) 43 { 44 [NSException raise:@"CardException" 45 format:@"Should not remove home card"]; 46 return; 47 } 48 else 49 { 50 [wiki removeCard:currentCard]; 51 [self goToHomeCard]; 52 } 53} 54 55- (void)goToPreviousCard:(id)sender 56{ 57 [self setCurrentCard:[wiki previousCardRelativeToCard:currentCard]]; 58} 59- (void)goToNextCard:(id)sender 60{ 61 [self setCurrentCard:[wiki nextCardRelativeToCard:currentCard]]; 62} 63- (void)goToHomeCard:(id)sender 64{ 65 [self setCurrentCard:[wiki homeCard]]; 66} 67- (void)setCurrentCard:(Card *)card 68{ 69 NSAttributedString *string; 70 71 [self updateCardContents]; 72 73 string = [card contents]; 74 [[view textStorage] setAttributedString:string]; 75 [titleField setStringValue:[card title]]; 76} 77- (void)textDidChange:(NSNotification *)notif 78{ 79 /* FIXME: this is slow. try to delay this method to 1s after last editing */ 80 [self updateCardContents]; 81} 82- (void)updateCardContents 83{ 84 [currentCard setContents:[[view textStorage] attributedString]]; 85} 86@end 87/* BEGIN Generated by DevelKit */ 88 89@implementation CardController (DKGeneratedMethods) 90/* Accessor methods */ 91 92- (void)dealloc 93{ 94 95 [super dealloc]; 96} 97 98/* Encoding methods */ 99- (void)encodeWithCoder:(NSCoder *)coder 100{ 101 // NSLog(@"Encoding class %@", [self className]); 102 [super encodeWithCoder:coder]; 103 if ( [coder allowsKeyedCoding] ) 104 { 105 [coder encodeObject:currentCard forKey:@"currentCard"]; 106 [coder encodeObject:titleField forKey:@"titleField"]; 107 [coder encodeObject:view forKey:@"view"]; 108 [coder encodeObject:stack forKey:@"stack"]; 109 } 110 else 111 { 112 [coder encodeValueOfObjCType: @encode(Card *) at: ¤tCard]; 113 [coder encodeValueOfObjCType: @encode(NSTextField *) at: &titleField]; 114 [coder encodeValueOfObjCType: @encode(CardView *) at: &view]; 115 [coder encodeValueOfObjCType: @encode(Stack *) at: &stack]; 116 } 117} 118- initWithCoder:(NSCoder *)decoder 119{ 120 self = [super initWithCoder:decoder]; 121 if ( [decoder allowsKeyedCoding] ) 122 { 123 currentCard = [decoder decodeObjectForKey:@"currentCard"]; 124 titleField = [decoder decodeObjectForKey:@"titleField"]; 125 view = [decoder decodeObjectForKey:@"view"]; 126 stack = [decoder decodeObjectForKey:@"stack"]; 127 } 128 else 129 { 130 [decoder decodeValueOfObjCType: @encode(Card *) at: ¤tCard]; 131 [decoder decodeValueOfObjCType: @encode(NSTextField *) at: &titleField]; 132 [decoder decodeValueOfObjCType: @encode(CardView *) at: &view]; 133 [decoder decodeValueOfObjCType: @encode(Stack *) at: &stack]; 134 } 135 136 137 return self; 138} 139 140@end 141/* END Generated by DevelKit */ 142