This is CalendarView.m in view mode; [Download] [Up]
/*
File: CalendarView.m
Contains: Source code for the custom View of the "Calendar" window
Written by: Eric Simenel
Created: May 1997
Copyright: (c)1997 by Apple Computer, Inc., all rights reserved.
Change History (most recent first):
You may incorporate this sample code into your applications without
restriction, though the sample code has been provided "AS IS" and the
responsibility for its operation is 100% yours. However, what you are
not permitted to do is to redistribute the source as "DSC Sample Code"
after having made changes. If you're going to re-distribute the source,
we require that you make it clear in the source that the code was
descended from Apple Sample Code, but that you've made changes.
*/
#import "CalendarView.h"
#import "ComicsObj.h"
@implementation CalendarView
- (id)initWithFrame:(NSRect)rect
{
if (self = [super initWithFrame:rect])
{
font = [[NSFont fontWithName:@"Ohlfs" size:10] retain];
dictionary = [[NSMutableDictionary dictionary] retain];
[dictionary setObject:font forKey:NSFontAttributeName];
array = [[NSMutableArray alloc] initWithCapacity:189];
nbSelTitles = 0;
}
return self;
}
- (void)dealloc
{
[array release];
[font release];
[dictionary release];
[super dealloc];
}
- (void)drawRect:(NSRect)rect
{
char strtit[] = " OCT NOV DEC 97 FEB MAR APR MAY JUN OCT NOV DEC 97 FEB MAR APR MAY JUN OCT NOV DEC 97 FEB MAR APR MAY JUN\n", strlin[200], strstart[7];
short i, j, k, n, lastEditMonth, isharr[189][9];
// get the right array of titles
[comicsBase sortArray:array withBrand:brand withSeries:series withKind:kind withState:2 withSort:sort];
nbSelTitles = [array count];
lastEditMonth = [comicsBase lastEditMonth];
// fill the correct month names or year value in strtit based upon the model in its declaration above
for(i=1; i<=3; i++) for(j=1; j<=9; j++)
strncpy(&strtit[6 + (i-1)*45 + (j-1)*4], (k = (lastEditMonth-1-9+j) % 12)?gmonths[k]:gnums[(lastEditMonth-1-9+j) / 12], 3);
// and draw it
[[NSString stringWithCString:strtit] drawAtPoint:NSMakePoint(0,rect.size.height-20) withAttributes:dictionary];
// clear and fill the local array of issue numbers to be displayed
for(i=0; i<189; i++) for(j=0; j<9; j++) isharr[i][j] = -1;
for(i=0; i<nbSelTitles; i++)
{
CTitle *thisTitle = [array objectAtIndex:i];
CIssue *thisIssue;
short nbish = [thisTitle nbIssues];
for(j=nbish-1; (j >= 0) && (k = [(thisIssue = [[thisTitle issues] objectAtIndex:j]) editMonth]) > (lastEditMonth-9); j--)
if (!([thisIssue issueFlags] & mskMiss)) isharr[i][k-lastEditMonth+8] = [thisIssue issueNumber];
else isharr[i][k-lastEditMonth+8] = -2;
for(k=j, n=-1; (k >= 0) && (n == -1); j--)
if (!([(thisIssue = [[thisTitle issues] objectAtIndex:k]) issueFlags] & mskMiss)) n = [thisIssue issueNumber];
for(j=8; (j >= 0) && (isharr[i][j] == -1); j--);
for(k=0; k<j; k++) if (isharr[i][k] != -1) n = isharr[i][k]; else isharr[i][k] = n;
}
// and display it
for(i=0; i<63; i++)
{
strcpy(strlin, "");
for(j=i; j < nbSelTitles; j += 63)
{
strcpy(strstart, [[[array objectAtIndex:j] abb] cString]);
while (strlen(strstart) < 6) strcat(strstart, " ");
strcat(strlin, strstart);
for(k=0; k<9; k++)
strcat(strcat(strlin, ((n = isharr[j][k]) < 0)?" ":(char *)gnums[n]), " ");
strcat(strlin, " ");
}
[[NSString stringWithCString:strlin] drawAtPoint:NSMakePoint(0,rect.size.height-11*(i+3)) withAttributes:dictionary];
}
}
- (short)nbSelTitles { return nbSelTitles; }
- (void)setKind:(short)value { kind = value; }
- (void)setSort:(short)value { sort = value; }
- (void)setBrand:(short)value { brand = value; }
- (void)setSeries:(short)value { series = value; }
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.