Ray's playground

 

Printing(Chapter 27 of Cocoa Programming for Mac OS X)

  1 #import "PeopleView.h"
  2 #import "Person.h"
  3 
  4 @implementation PeopleView
  5 
  6 - (id)initWithPeople:(NSArray *)persons
  7 {
  8     [super initWithFrame:NSMakeRect(00700700)];
  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 *= [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

posted on 2011-03-14 11:43  Ray Z  阅读(273)  评论(0编辑  收藏  举报

导航