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: &currentCard];
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: &currentCard];
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