This is Button.m in view mode; [Download] [Up]
/* Implementation of Button class
*
* Copyright (C) 1993, 1994, 1995 The Board of Trustees of
* The Leland Stanford Junior University. All Rights Reserved.
*
* Authors: Scott Francis, Paul Kunz, Tom Pavel, Imran Qureshi, and Libing Wang
* Mike Kienenberger (Alaska)
*
* This file is part of an Objective-C class library for a window system
*
* Button.m,v 1.44 1995/12/13 22:32:52 fedor Exp
*/
#include "Button.h"
/* Required for implementation: */
#include "ActionCell.h"
#include "ButtonCell.h"
#include <stdlib.h> /* for free() */
#include "stdmacros.h"
#include "PopUpList.h" /* since Button and PopUpList are partners */
@interface View(WidgetSet)
- _init;
@end
@implementation Button:Control
- init
{
NXRect rect = {{0, 0}, {50, 50}};
[self initFrame:&rect];
return self;
}
- initFrame:(const NXRect *)frameRect
{
if (!cell) {
cell = [[ButtonCell alloc] init];
[self setTitle:"Button"];
}
[super initFrame:frameRect];
instancename = "Button";
return self;
}
- initFrame:(const NXRect *)frameRect title:(const char *)aString
tag:(int)anInt target:anObject action:(SEL)aSelector
key:(unsigned short)charCode enabled:(BOOL)flag
{
return [self notImplemented:_cmd];
}
- initFrame:(const NXRect *)frameRect icon:(const char *)aString
tag:(int)anInt target:anObject action:(SEL)aSelector
key:(unsigned short)charCode enabled:(BOOL)flag
{
return [self notImplemented:_cmd];
}
- (const char *)title
{
return [cell title];
}
- setTitle:(const char*)aString
{
if ( !popup ) {
[cell setStringValue:aString];
}
return self;
}
- setTitleNoCopy:(const char *)aString
{
return [self notImplemented:_cmd];
}
- (const char *)altTitle
{
return [cell altTitle];
}
- setAltTitle:(const char *)aString
{
return [self notImplemented:_cmd];
}
- (const char *)icon
{
return [cell icon];
}
- setIcon:(const char *)iconName
{
[cell setIcon:iconName];
return self;
}
- (const char *)altIcon
{
return [cell altIcon];
}
- setAltIcon:(const char *)iconName
{
[cell setAltIcon:iconName];
return self;
}
- image
{
return [cell image];
}
- setImage:image
{
[cell setImage: image];
return self;
}
- altImage
{
return [cell altImage];
}
- setAltImage:image
{
[cell setAltImage: image];
return self;
}
- (int)iconPosition
{
return [cell iconPosition];
}
- setIconPosition:(int)aPosition
{
[cell setIconPosition: aPosition];
return self;
}
- setIcon:(const char *)iconName position:(int)aPosition
{
return [self notImplemented:_cmd];
}
- setType:(int)aType
{
return [self notImplemented:_cmd];
}
- (int) state
{
return [cell state];
}
- setState:(int)value
{
return [cell setState:value];
}
- (BOOL)isBordered
{
return [cell isBordered];
}
- setBordered:(BOOL)flag
{
[cell setBordered: flag];
return self;
}
- (BOOL)isTransparent
{
return [cell isTransparent];
}
- setTransparent:(BOOL)flag
{
[cell setTransparent: flag];
return self;
}
- setPeriodicDelay:(float)delay andInterval:(float)interval
{
return [self notImplemented:_cmd];
}
- getPeriodicDelay:(float *)delay andInterval:(float *)interval
{
return [self notImplemented:_cmd];
}
- (unsigned short)keyEquivalent
{
[self notImplemented:_cmd];
return 0;
}
- setKeyEquivalent:(unsigned short)charCode
{
return [self notImplemented:_cmd];
}
- sound
{
return [self notImplemented:_cmd];
}
- setSound:soundObj
{
return [self notImplemented:_cmd];
}
- display
{
/* FIXME: Implement */
return self;
}
- highlight:(BOOL)flag
{
return [self notImplemented:_cmd];
}
- (BOOL)performKeyEquivalent:(NXEvent *)theEvent
{
[self notImplemented:_cmd];
return 0;
}
- performClick:sender
{
[cell sendAction];
return self;
}
- (BOOL)acceptsFirstMouse
{
return YES;
}
+ new
{
return [[Button alloc] init];
}
+ newFrame:(const NXRect *)frameRect
{
return [[Button alloc] initFrame:frameRect];
}
// + newFrame:(const NXRect *)frameRect title:(const char *)aString
// tag:(int)anInt target:anObject action:(SEL)aSelector
// key:(unsigned short)charCode enabled:(BOOL)flag
// + newFrame:(const NXRect *)frameRect icon:(const char *)aString
// tag:(int)anInt target:anObject action:(SEL)aSelector
// key:(unsigned short)charCode enabled:(BOOL)flag
/* The following methods are not in NeXTSTEP */
- read:(TypedStream *)ts
{
[super read:ts];
objc_read_type(ts, "i", &popup);
return self;
}
- awake
{
if ( !popup ) {
if (!cell) {
cell = [[ButtonCell alloc] init];
[self setTitle:"Button"];
}
}
instancename = "Button";
return self;
}
- _init
{
ActionCell *savedCell;
if ( popup) {
savedCell = cell;
cell = [cell target];
[super _init];
cell = savedCell;
} else {
[super _init];
}
return self;
}
- _managedBy:parent wid:(void *)widget
{
/* In the case of having a PopUpList, the widget will be handled like a
* subclass of Cell which it isn't. We temporarily set the cell to its
* target so our super class will instansiate it instead of the cell.
* Doing this trick means we don't have re-code here everything done by
* super and it's super.
*/
ActionCell *savedCell;
if ( popup ) {
savedCell = cell;
cell = [cell target];
[super _managedBy:parent wid:widget];
cell = savedCell;
} else {
[super _managedBy:parent wid:widget];
}
return self;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.