This is Responder.m in view mode; [Download] [Up]
// GNU OpenStep implementation file for Responder
// Copyright (C) 1993 Keith Mason. All Rights Reserved.
// Copyright (C) 1993, 1994, 1995 The Board of Trustees of
// The Leland Stanford Junior University. All Rights Reserved.
// Authors: Scott Francis, Paul Kunz, and Libing Wang (SLAC)
// Keith Mason
// Mike Kienenberger (Alaska)
#include "Responder.h"
#include "publicWraps.h"
extern char *ResponderInstanceName(void);
@implementation Responder:Object
- init
{
[super init];
instancename = ResponderInstanceName();
return self;
}
// Freeing an instance
- free
{
/* Insert code to remove self from the hash table used to locate help */
return [super free];
}
// Setting the next responder
- setNextResponder:aResponder
{
/* Should I check to see if aResponder is really a responder? */
nextResponder = aResponder;
return self;
}
- nextResponder
{
return nextResponder;
}
// Determining the first responder
- (BOOL)acceptsFirstResponder
{
return NO;
}
- becomeFirstResponder
{
return self;
}
- resignFirstResponder
{
return self;
}
// Aiding event processing
- (BOOL)performKeyEquivalent:(NXEvent *)theEvent
{
return NO;
}
- (BOOL)tryToPerform:(SEL)anAction
with:anObject
{
if ([self respondsTo:anAction] == YES)
if ([self perform:anAction with:anObject] != nil)
return YES;
if (nextResponder == nil)
return NO;
// Couldn't respond, or responded with nil
return [nextResponder tryToPerform:anAction with:anObject];
}
// Forwarding event messages
- mouseDown:(NXEvent *)theEvent
{
if (nextResponder == nil)
return [self noResponderFor:theEvent->type];
return [nextResponder mouseDown:theEvent];
}
- rightMouseDown:(NXEvent *)theEvent
{
if (nextResponder == nil)
return [self noResponderFor:theEvent->type];
return [nextResponder rightMouseDown:theEvent];
}
- mouseDragged:(NXEvent *)theEvent
{
if (nextResponder == nil)
return [self noResponderFor:theEvent->type];
return [nextResponder mouseDragged:theEvent];
}
- rightMouseDragged:(NXEvent *)theEvent
{
if (nextResponder == nil)
return [self noResponderFor:theEvent->type];
return [nextResponder rightMouseDragged:theEvent];
}
- mouseUp:(NXEvent *)theEvent
{
if (nextResponder == nil)
return [self noResponderFor:theEvent->type];
return [nextResponder mouseUp:theEvent];
}
- rightMouseUp:(NXEvent *)theEvent
{
if (nextResponder == nil)
return [self noResponderFor:theEvent->type];
return [nextResponder rightMouseUp:theEvent];
}
- mouseMoved:(NXEvent *)theEvent
{
if (nextResponder == nil)
return [self noResponderFor:theEvent->type];
return [nextResponder mouseMoved:theEvent];
}
- mouseEntered:(NXEvent *)theEvent
{
if (nextResponder == nil)
return [self noResponderFor:theEvent->type];
return [nextResponder mouseEntered:theEvent];
}
- mouseExited:(NXEvent *)theEvent
{
if (nextResponder == nil)
return [self noResponderFor:theEvent->type];
return [nextResponder mouseExited:theEvent];
}
- keyDown:(NXEvent *)theEvent
{
if (nextResponder == nil)
return [self noResponderFor:theEvent->type];
return [nextResponder keyDown:theEvent];
}
- keyUp:(NXEvent *)theEvent
{
if (nextResponder == nil)
return [self noResponderFor:theEvent->type];
return [nextResponder keyUp:theEvent];
}
- flagsChanged:(NXEvent *)theEvent
{
if (nextResponder == nil)
return [self noResponderFor:theEvent->type];
return [nextResponder flagsChanged:theEvent];
}
/* I haven't figured why the argument to noResponderFor: is a char pointer.
* It isn't portable to 64 bit machines and has changed in OpenStep.
* So we'll change it to a 'int'
* Keith Mason and Paul Kunz
*/
- noResponderFor:(int)eventType
{
if ((int)eventType == NX_KEYDOWN)
NXBeep();
return nil;
}
// Services menu support
- validRequestorForSendType:(NXAtom)typeSent
andReturnType:(NXAtom)typeReturned
{
if (nextResponder == nil)
return nil;
return [nextResponder validRequestorForSendType:typeSent
andReturnType:typeReturned];
}
// Help menu support
- helpRequested:(NXEvent *)eventPtr
{
if (nextResponder == nil) {
NXBeep();
return self;
}
return [nextResponder helpRequested:eventPtr];
}
// Archiving
- read:(NXTypedStream *)stream
{
[super read:stream];
// Note: put following back in afer translator is fixed
// nextResponder = NXReadObject(stream);
return self;
}
- awake
{
[super awake];
return self;
}
- write:(NXTypedStream *)stream
{
[super write:stream];
NXWriteObjectReference(stream, nextResponder);
return self;
}
- (void *)_widget
{
return widgetid;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.