This is TitleLongevityView.m in view mode; [Download] [Up]
/*
File: TitleLongevityView.m
Contains: Source code for the custom View of the "Title Longevity/Edited" 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 "TitleLongevityView.h"
#import "ComicsObj.h"
@implementation TitleLongevityView
- (id)initWithFrame:(NSRect)rect
{
if (self = [super initWithFrame:rect])
{
font = [[NSFont fontWithName:@"Ohlfs" size:9] retain];
dictionary = [[NSMutableDictionary dictionary] retain];
[dictionary setObject:font forKey:NSFontAttributeName];
// I have a lttle less than 1500 titles currently, hence the following capacity...
array = [[NSMutableArray alloc] initWithCapacity:1500];
nbSelTitles = 0;
}
return self;
}
- (void)dealloc
{
[array release];
[font release];
[dictionary release];
[super dealloc];
}
#define orx 20
#define ory 20
- (void)drawRect:(NSRect)rect
{
NSString *theString;
short i, j, startEditMonth, lastEditMonth, tlarr[600];
// get the right array of titles
[comicsBase sortArray:array withBrand:brand withSeries:series withKind:1 withState:0 withSort:0];
nbSelTitles = [array count];
startEditMonth = [comicsBase startEditMonth];
lastEditMonth = [comicsBase lastEditMonth];
// clear and then fill the local array to be graphed
for(i=0; i<(lastEditMonth-startEditMonth); i++) tlarr[i] = 0;
for(i=0; i<nbSelTitles; i++)
{
CTitle *thisTitle = [array objectAtIndex:i];
NSMutableArray *theseIssues = [thisTitle issues];
// if edited then add 1 if there is an issue for this particular edit month
if (!editOrLong) for(j=0; j < [thisTitle nbIssues]; j++) tlarr[[[theseIssues objectAtIndex:j] editMonth] - startEditMonth] += 1;
// else add 1 for all months between the first published issue to the latest
else for(j=[[theseIssues objectAtIndex:0] editMonth]; j <= [[theseIssues lastObject] editMonth]; j++) tlarr[j-startEditMonth] += 1;
}
// draw the axes
PSsetrgbcolor(0, 0, 0);
PSmoveto(orx, ory-3); PSlineto(orx, 700); PSstroke();
PSmoveto(orx-3, ory); PSlineto(700, ory); PSstroke();
// put the labels on vertical axis
for(i=10; i<=130; i+=10)
{
PSmoveto(orx-3, ory+i*5); PSlineto(700, ory+i*5); PSstroke();
theString = [NSString stringWithCString:gnums[i]];
[theString drawAtPoint:NSMakePoint(orx-20, ory-12+i*5) withAttributes:dictionary];
}
[[NSString stringWithString:@"Number of Issues"] drawAtPoint:NSMakePoint(orx+10, ory+655)
withAttributes:dictionary];
// put the labels on horizontal axis
for(i=0; i<(lastEditMonth-startEditMonth+13); i++) if (((i + startEditMonth-1) % 12) == 0)
{
j = (i + startEditMonth-1) / 12;
PSmoveto(orx+i, ory); PSlineto(orx+i, ory-3-((j % 2)?7:0));PSstroke();
theString = [NSString stringWithCString:gnums[j]];
[theString drawAtPoint:NSMakePoint(orx+i-9, ory-21-((j % 2)?7:0)) withAttributes:dictionary];
}
[[NSString stringWithString:@"Years"] drawAtPoint:NSMakePoint(orx+lastEditMonth-startEditMonth+40, ory-21)
withAttributes:dictionary];
// draw the graph in blue
PSsetrgbcolor(0, 0, 32767);
for(i=0; i<(lastEditMonth-startEditMonth); i++)
{
PSmoveto(orx+i, ory);
PSlineto(orx+i, ory+tlarr[i]*5);
PSstroke();
}
}
- (short)nbSelTitles { return nbSelTitles; }
- (void)setBrand:(short)value { brand = value; }
- (void)setSeries:(short)value { series = value; }
- (void)setEditOrLong:(short)value { editOrLong = value; }
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.