|
1 #import "MyDocument.h"
2 #import "DepartmentViewController.h"
3 #import "EmployeeViewController.h"
4
5 @implementation MyDocument
6
7 - (id)init
8 {
9 [super init];
10 viewControllers = [[NSMutableArray alloc] init];
11
12 ManagingViewController *vc = [[DepartmentViewController alloc] init];
13 [vc setManagedObjectContext:[self managedObjectContext]];
14 [viewControllers addObject:vc];
15 [vc release];
16
17 vc = [[EmployeeViewController alloc] init];
18 [vc setManagedObjectContext:[self managedObjectContext]];
19 [viewControllers addObject:vc];
20 [vc release];
21
22 return self;
23 }
24
25 - (void)displayViewController:(ManagingViewController *)vc
26 {
27 NSWindow *w = [box window];
28 BOOL ended = [w makeFirstResponder:w];
29 if (!ended)
30 {
31 NSBeep();
32 return;
33 }
34
35 NSView *v = [vc view];
36
37 NSSize currentSize = [[box contentView] frame].size;
38 NSSize newSize = [v frame].size;
39 float deltaWidth = newSize.width - currentSize.width;
40 float deltaHeight = newSize.height - currentSize.height;
41 NSRect windowFrame = [w frame];
42 windowFrame.size.height += deltaHeight;
43 windowFrame.origin.y -= deltaHeight;
44 windowFrame.size.width += deltaWidth;
45
46 [box setContentView:nil];
47 [w setFrame:windowFrame display:YES animate:YES];
48
49 [box setContentView:v];
50 }
51
52 - (NSString *)windowNibName
53 {
54 // Override returning the nib file name of the document
55 // 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.
56 return @"MyDocument";
57 }
58
59 - (void)windowControllerDidLoadNib:(NSWindowController *)aController
60 {
61 [super windowControllerDidLoadNib:aController];
62 NSMenu *menu = [popUp menu];
63 int i, itemCount;
64 itemCount = [viewControllers count];
65 for(i=0; i<itemCount; i++)
66 {
67 NSViewController *vc = [viewControllers objectAtIndex:i];
68 NSMenuItem *mi = [[NSMenuItem alloc] initWithTitle:[vc title] action:@selector(changeViewController:) keyEquivalent:@""];
69 [mi setTag:i];
70 [menu addItem:mi];
71 [mi release];
72 }
73
74 [self displayViewController:[viewControllers objectAtIndex:0]];
75 [popUp selectItemAtIndex:0];
76 }
77
78 - (IBAction)changeViewController:(id)sender
79 {
80 int i = [sender tag];
81 ManagingViewController *vc = [viewControllers objectAtIndex:i];
82 [self displayViewController:vc];
83 }
84
85 - (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError {
86 /*
87 Insert code here to write your document to data of the specified type. If outError != NULL, ensure that you create and set an appropriate error when returning nil.
88 You can also choose to override -fileWrapperOfType:error:, -writeToURL:ofType:error:, or -writeToURL:ofType:forSaveOperation:originalContentsURL:error: instead.
89 */
90 if (outError) {
91 *outError = [NSError errorWithDomain:NSOSStatusErrorDomain code:unimpErr userInfo:NULL];
92 }
93 return nil;
94 }
95
96 - (BOOL)readFromData:(NSData *)data ofType:(NSString *)typeName error:(NSError **)outError {
97 /*
98 Insert code here to read your document from the given data of the specified type. If outError != NULL, ensure that you create and set an appropriate error when returning NO.
99 You can also choose to override -readFromFileWrapper:ofType:error: or -readFromURL:ofType:error: instead.
100 */
101 if (outError) {
102 *outError = [NSError errorWithDomain:NSOSStatusErrorDomain code:unimpErr userInfo:NULL];
103 }
104 return YES;
105 }
106
107 @end |
|