This is BBRegion.m in view mode; [Download] [Up]
/* BBRegion.m
*
* Here we have basic Region. It can handle references to bonds and
* atoms, it can create their shapes and knows about rendering settings.
* However. Really stroing atoms/bonds should be left to a molecule.
* Regions are only logical parts of a molecule.
*
* For interface-info see the header file. The comments in this file mostly
* cover only the real implementation details.
*
* Written by: Thomas Engel
* Created: 09.03.1994 (Copyleft)
* Last modified: 12.11.1994
*/
#define CURRENT_VERSION 1
#import "BBRegion.h"
#import "BBBasicShapeBallsSticks.h"
#import "BBCameraWindow.h"
#import <misckit/MiscString.h>
@implementation BBRegion
+ initialize
{
if ( self == [BBRegion class] )
[BBRegion setVersion:CURRENT_VERSION];
return self;
}
- init
{
self = [super init];
if( !self ) return self;
// OK. We really are an object...here we go with our init.
atomList = [BBSuitcase new];
[atomList setName:"Atoms"];
[atomList setImage:[NXImage findImageNamed:"AtomListIcon"]];
bondList = [BBSuitcase new];
[bondList setName:"Bonds"];
[bondList setImage:[NXImage findImageNamed:"BondListIcon"]];
[self setName:"Untitled Region"];
[self setImage:[NXImage findImageNamed:"RegionIcon"]];
[self addObject:atomList];
[self addObject:bondList];
[self setColor:NX_COLORWHITE];
[self setShapeClass:[BBBasicShapeBallsSticks class]];
[self setShapesInRegionColor:NO];
return self;
}
- free
{
// Let's free what we created. Don't real free the objects.
// If we had our own style settings we should free them.
if( [self doesHaveDrawingStyle] ) [drawingStyle free];
if( [self doesHaveRotationStyle] ) [rotationStyle free];
[[atomList empty] free];
[[bondList empty] free];
return [super free];
}
- setColor:(NXColor)aColor
{
color = aColor;
return self;
}
- (NXColor)color
{
return color;
}
- setShapesInRegionColor:(BOOL)flag
{
shapesInRegionColor = flag;
return self;
}
- (BOOL)shapesInRegionColor
{
return shapesInRegionColor;
}
- setDrawingStyle:aStyle
{
drawingStyle = aStyle;
return self;
}
- drawingStyle
{
if( !drawingStyle ) return [[self molecule] drawingStyle];
return drawingStyle;
}
- (BOOL)doesHaveDrawingStyle
{
if( drawingStyle ) return YES;
return NO;
}
- setRotationStyle:aStyle
{
rotationStyle = aStyle;
return self;
}
- rotationStyle
{
if( !rotationStyle ) return [[self molecule] rotationStyle];
return rotationStyle;
}
- (BOOL)doesHaveRotationStyle
{
if( rotationStyle ) return YES;
return NO;
}
- beaker
{
return [[self molecule] beaker];
}
- molecule
{
// We will tell to which molecule we belong.
// This is easy because every atom/bond carries this information.
if( [atomList count] > 0 )
return [[atomList objectAt:0] molecule];
if( [bondList count] > 0 )
return [[bondList objectAt:0] molecule];
else return nil;
}
- addAtom:anAtom
{
[atomList addObject:anAtom];
return self;
}
- atomList
{
return atomList;
}
- addBond:aBond
{
[bondList addObject:aBond];
return self;
}
- bondList
{
return bondList;
}
- open:sender
{
id aList;
aList = [List new];
[aList addObject:self];
[[[self displayClass] alloc] initFrom:aList
asPartOf:[self beaker]];
[aList free];
return self;
}
- displayClass
{
return [BBCameraWindow class];
}
- setShapeClass:aClass
{
shapeClass = aClass;
return self;
}
- shapeClass
{
return shapeClass;
}
- shape
{
id ourShape;
ourShape = [[[self shapeClass] alloc] initFrom:self
asPartOf:[self molecule]];
return ourShape;
}
- groupClass
{
return [BBSuitcase class];
}
/*
* Archiving the whole Region...
*/
- read:(NXTypedStream *)stream
{
int version;
[super read:stream];
version = NXTypedStreamClassVersion( stream, "BBRegion" );
// Version 1
if ( version == CURRENT_VERSION )
{
// NXReadTypes( stream, "@", &moleculeList );
// NXReadTypes( stream, "@", &cameraList );
}
else
NXRunAlertPanel( NULL, "Unknown version of the BBBeaker class.\n"\
"Maybe you should get a new release of BeakerBoy",
"Ooops", NULL, NULL );
return self;
}
- write:(NXTypedStream *)stream
{
[super write:stream];
// Version 1:
// Filename and all the browser stuff is not archived! Those infos are
// created at launch time.
//NXWriteTypes( stream, "@", &moleculeList );
//NXWriteTypes( stream, "@", &cameraList );
return self;
}
@end
/*
* History: 12.11.94 Added archiving and versioning.
*
* 30.10.94 Switched to the MiscString.
*
* 17.05.94 Added flexible shape creation.
*
* 27.03.94 Started to include the different renderSettings.
*
* 10.03.94 Switched to the shape method.
*
* 09.0.3.94 First coding
*
*
* Bugs: - Setting the name during init should support localization!
*/These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.