1
#import
"
PeopleView.h
"
2 #import " Person.h "
3
4 @implementation PeopleView
5
6 - (id)initWithPeople:(NSArray * )persons
7 {
8 [super initWithFrame:NSMakeRect( 0 , 0 , 700 , 700 )];
9 people = [persons copy];
10 attributes = [[NSMutableDictionary alloc] init];
11 NSFont * font = [NSFont fontWithName: @" Monaco " size: 12.0 ];
12 lineHeight = [font capHeight] * 1.7 ;
13 [attributes setObject:font forKey:NSFontAttributeName];
14 return self;
15 }
16
17 - (id)initWithFrame:(NSRect)frame
18 {
19 self = [super initWithFrame:frame];
20 if (self) {
21 // Initialization code here.
22 }
23
24 return self;
25 }
26
27 - ( void )dealloc
28 {
29 [people release];
30 [attributes release];
31 [super dealloc];
32 }
33
34 #pragma mark Pagination
35
36 - (BOOL)knowsPageRange:(NSRange * )range
37 {
38 NSPrintOperation * po = [NSPrintOperation currentOperation];
39 NSPrintInfo * printInfo = [po printInfo];
40 pageRect = [printInfo imageablePageBounds];
41 NSRect newFrame;
42 newFrame.origin = NSZeroPoint;
43 newFrame.size = [printInfo paperSize];
44 [self setFrame:newFrame];
45
46 linesPerPage = pageRect.size.height / lineHeight;
47
48 range -> location = 1 ;
49 range -> length = [people count] / linesPerPage;
50 if ([people count] % linesPerPage)
51 {
52 range -> length = range -> length + 1 ;
53 }
54 return YES;
55 }
56
57 - (NSRect)rectForPage:(NSInteger)page
58 {
59 currentPage = page - 1 ;
60 return pageRect;
61 }
62
63 #pragma mark Drawing
64
65 - (BOOL)isFlipped
66 {
67 return YES;
68 }
69
70 - ( void )drawRect:(NSRect)dirtyRect
71 {
72 NSRect nameRect;
73 NSRect raiseRect;
74 raiseRect.size.height = nameRect.size.height = lineHeight;
75 nameRect.origin.x = pageRect.origin.x;
76 nameRect.size.width = 200.0 ;
77 raiseRect.origin.x = NSMaxX(nameRect);
78 raiseRect.size.width = 100.0 ;
79
80 int i;
81 for (i = 0 ;i < linesPerPage; i ++ )
82 {
83 int index = (currentPage * linesPerPage) + i;
84 if (index >= [people count])
85 {
86 break ;
87 }
88 Person * p = [people objectAtIndex:index];
89
90 nameRect.origin.y = pageRect.origin.y + (i * lineHeight);
91 NSString * nameString = [NSString stringWithFormat: @" %2d %@ " , index, [p personName]];
92 [nameString drawInRect:nameRect withAttributes:attributes];
93
94 raiseRect.origin.y = nameRect.origin.y;
95 NSString * raiseString = [NSString stringWithFormat: @" %4.lf%% " , [p expectedRaise]];
96 [raiseString drawInRect:raiseRect withAttributes:attributes];
97 }
98 }
99
100 @end
2 #import " Person.h "
3
4 @implementation PeopleView
5
6 - (id)initWithPeople:(NSArray * )persons
7 {
8 [super initWithFrame:NSMakeRect( 0 , 0 , 700 , 700 )];
9 people = [persons copy];
10 attributes = [[NSMutableDictionary alloc] init];
11 NSFont * font = [NSFont fontWithName: @" Monaco " size: 12.0 ];
12 lineHeight = [font capHeight] * 1.7 ;
13 [attributes setObject:font forKey:NSFontAttributeName];
14 return self;
15 }
16
17 - (id)initWithFrame:(NSRect)frame
18 {
19 self = [super initWithFrame:frame];
20 if (self) {
21 // Initialization code here.
22 }
23
24 return self;
25 }
26
27 - ( void )dealloc
28 {
29 [people release];
30 [attributes release];
31 [super dealloc];
32 }
33
34 #pragma mark Pagination
35
36 - (BOOL)knowsPageRange:(NSRange * )range
37 {
38 NSPrintOperation * po = [NSPrintOperation currentOperation];
39 NSPrintInfo * printInfo = [po printInfo];
40 pageRect = [printInfo imageablePageBounds];
41 NSRect newFrame;
42 newFrame.origin = NSZeroPoint;
43 newFrame.size = [printInfo paperSize];
44 [self setFrame:newFrame];
45
46 linesPerPage = pageRect.size.height / lineHeight;
47
48 range -> location = 1 ;
49 range -> length = [people count] / linesPerPage;
50 if ([people count] % linesPerPage)
51 {
52 range -> length = range -> length + 1 ;
53 }
54 return YES;
55 }
56
57 - (NSRect)rectForPage:(NSInteger)page
58 {
59 currentPage = page - 1 ;
60 return pageRect;
61 }
62
63 #pragma mark Drawing
64
65 - (BOOL)isFlipped
66 {
67 return YES;
68 }
69
70 - ( void )drawRect:(NSRect)dirtyRect
71 {
72 NSRect nameRect;
73 NSRect raiseRect;
74 raiseRect.size.height = nameRect.size.height = lineHeight;
75 nameRect.origin.x = pageRect.origin.x;
76 nameRect.size.width = 200.0 ;
77 raiseRect.origin.x = NSMaxX(nameRect);
78 raiseRect.size.width = 100.0 ;
79
80 int i;
81 for (i = 0 ;i < linesPerPage; i ++ )
82 {
83 int index = (currentPage * linesPerPage) + i;
84 if (index >= [people count])
85 {
86 break ;
87 }
88 Person * p = [people objectAtIndex:index];
89
90 nameRect.origin.y = pageRect.origin.y + (i * lineHeight);
91 NSString * nameString = [NSString stringWithFormat: @" %2d %@ " , index, [p personName]];
92 [nameString drawInRect:nameRect withAttributes:attributes];
93
94 raiseRect.origin.y = nameRect.origin.y;
95 NSString * raiseString = [NSString stringWithFormat: @" %4.lf%% " , [p expectedRaise]];
96 [raiseString drawInRect:raiseRect withAttributes:attributes];
97 }
98 }
99
100 @end