home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OpenStep 4.2J (Developer)
/
os42jdev.iso
/
NextDeveloper
/
Examples
/
NEXTIME
/
SimplePlayer
/
DocumentView.m
< prev
next >
Wrap
Text File
|
1996-06-24
|
5KB
|
200 lines
/*
* DocumentView.m
*
*/
#import "DocumentView.h"
#import "Controller.h"
#import "SimplePlayer_Globals.h"
#import <NEXTIME/NTMovieScreenCell.h>
@implementation DocumentView
#define CONTROL_Y_MARGIN (1.0)
#define CONTROL_Y_OFFSET (0.0)
- initWithFrame:(NSRect)frameRect
{
NSRect frame;
self = [super initWithFrame:(NSRect)frameRect];
if ( self == nil )
return nil;
// Get a NTControlView. The control view will bump the height up to
// the minimum it needs.
frame.size.width = frameRect.size.width;
frame.size.height = 0.0; // Adjusted by control
frame.origin.x = 0.0;
frame.origin.y = CONTROL_Y_OFFSET;
control = [[NTMovieControlView alloc] initWithFrame:frame];
[control setAutoresizingMask:NSViewWidthSizable];
[self addSubview:control];
// Get a NTVideoWell, framed above the NTControlView.
frame = [control frame]; // Get the control size.
frame.origin.y += (frame.size.height + CONTROL_Y_MARGIN);
frame.size.height = frameRect.size.height - frame.origin.y;
if ( frame.size.height < 0.0 )
frame.size.height = 0.0;
frame.origin.x = 0.0;
frame.size.width = frameRect.size.width;
videoWell = [[NTMovieScreen alloc] initWithFrame:frame];
[videoWell setAutoresizingMask:
(NSViewWidthSizable | NSViewHeightSizable)];
// Set sizing policy via defaults database
[[videoWell cell] setResizeMode:[Controller sizingPolicy]];
[[videoWell cell] setBezeled:NO];
[[videoWell cell] setBordered:NO];
[self addSubview:videoWell];
// Listen for changes in the defaults database regarding sizing
// policy.
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(_resizePolicyChanged:)
name:NTResizePolicyChangeNotification
object:nil];
return self;
}
- (void)dealloc
{
[control release];
[videoWell release];
[super dealloc];
}
- (BOOL)setMovieFile:(NSString *)file
{
NSRect frame;
NSRect controlFrame;
if ( [videoWell setMovieFile:file] == NO )
return NO;
// The videoWell cell is configured for the 'normal' size
// of the movie. Save this for use in resizing the movie.
frame.origin.x = frame.origin.y = 0.0;
frame.size = [[videoWell cell] cellSize];
frame = [[videoWell cell] drawingRectForBounds:frame];
movieSize = frame.size;
// Hook our control to the new media document created by the
// NTVideoWell and represented by the well's NTVideoCell.
// This will raise if the represented object doesn't conform to
// the NTMediaDocument protocol!
[control setMovieDocument:[[videoWell cell] representedObject]];
// Adjust the videoWell to just hold the movie at normal size.
[videoWell sizeToFit];
// Adjust the control to match the videoWell width
frame = [videoWell frame];
controlFrame = [control frame];
controlFrame.size.width = frame.size.width;
[control setFrameSize:controlFrame.size];
// Set a frame size just big enough to hold the videoWell and
// the control.
frame.size.height += (controlFrame.size.height + CONTROL_Y_MARGIN);
// Disable subview resize, and wrap this view
// snugly about our subviews.
[self setAutoresizesSubviews:NO];
[self setFrameSize:frame.size];
// Restore normal resize behavior for our view.
[self setAutoresizesSubviews:YES];
return YES;
}
- (id <NTMovieDocument>)document
{
return [[videoWell cell] representedObject];
}
- (NTMovieControlView *)control
{
return control;
}
- (NTMovieScreen *)videoWell
{
return videoWell;
}
// Put a little black stripe over the NTControlView
- (void)drawRect:(NSRect)rect
{
NSRect controlFrame;
NSRect marginFrame;
controlFrame = [control frame];
marginFrame.origin.x = controlFrame.origin.x;
marginFrame.size.width = controlFrame.size.width;
marginFrame.origin.y =
controlFrame.origin.y + controlFrame.size.height;
marginFrame.size.height = CONTROL_Y_MARGIN;
// Fill in the gap above the NSControlView
PSsetgray(NSBlack);
NSRectFill(marginFrame);
// And the gap below the NSControlView
marginFrame.origin.y = 0.0;
marginFrame.size.height = CONTROL_Y_OFFSET;
NSRectFill(marginFrame);
}
// Change in resize policy.
- (void)_resizePolicyChanged:(NSNotification *)note
{
[[videoWell cell] setResizeMode:[Controller sizingPolicy]];
}
- (NSSize)normalSize
{
NSSize size;
NSRect frame;
NSRect controlFrame;
frame.origin.x = frame.origin.y = 0.0;
frame.size = movieSize;
size = [[videoWell cell] cellSizeForBounds:frame];
// Size is now appropriate for the videoWell.
// Add in the controlView.
controlFrame = [control frame];
size.height += CONTROL_Y_OFFSET
+ controlFrame.size.height
+ CONTROL_Y_MARGIN;
return size;
}
- (NSSize)doubleSize
{
NSSize size;
NSRect frame;
NSRect controlFrame;
frame.origin.x = frame.origin.y = 0.0;
frame.size = movieSize;
frame.size.width *= 2.0;
frame.size.height *= 2.0;
size = [[videoWell cell] cellSizeForBounds:frame];
// Size is now appropriate for the videoWell.
// Add in the controlView.
controlFrame = [control frame];
size.height += CONTROL_Y_OFFSET
+ controlFrame.size.height
+ CONTROL_Y_MARGIN;
return size;
}
@end