This is Form.m in view mode; [Download] [Up]
/* Implementation of Form class
*
* Copyright (C) 1993, 1994, 1995 The Board of Trustees of
* The Leland Stanford Junior University. All Rights Reserved.
*
* Authors: Scott Francis, Fred Harris, Paul Kunz,
* Imran Qureshi, and Libing Wang
*
* This file is part of an Objective-C class library for a window system
*
* Form.m,v 1.48 1995/12/13 22:33:00 fedor Exp
*/
#include "Form.h"
#include "Application.h"
#include "FormCell.h"
#include "TextFieldCell.h"
#include "Window.h"
#include <objc/List.h>
#include <stdlib.h>
#include "stdmacros.h"
extern char *FormInstanceName(void);
@interface Form(WidgetSet)
- _calcSize;
- _setEntryWidth:(NXCoord)width;
@end
@implementation Form : Matrix
static id defaultCellClass;
/* Private methods not declared in interface */
- _setCellTitleWidth
{
FormCell *aCell;
int i, count;
count = [cellList count];
for (i = 0; i < count; i++) {
aCell = [cellList objectAt:i];
[aCell setTitleWidth:maxTitleWidth];
}
return self;
}
/* Public methods */
+ setCellClass:classId
{
defaultCellClass = classId;
return self;
}
- initFrame:(const NXRect *)frameRect
{
[super initFrame:frameRect];
instancename = FormInstanceName();
cellClass = [FormCell class];
return self;
}
- calcSize
{
[self _calcSize];
return self;
}
- sizeTo:(NXCoord)width :(NXCoord)height
{
return [self notImplemented:_cmd];
}
- sizeToFit
{
return [self notImplemented:_cmd];
}
- (int)selectedIndex
{
return selectedRow;
}
- setEntryWidth:(NXCoord)width
{
[self _setEntryWidth:width];
return self;
}
- setInterline:(NXCoord)spacing
{
intercell.height = spacing;
return self;
}
- setBordered:(BOOL)flag
{
[cell setBordered: flag];
return self;
}
- setBezeled:(BOOL)flag
{
[cell setBezeled: flag];
return self;
}
- setTextAlignment:(int)mode
{
return [self notImplemented:_cmd];
}
- setTitleAlignment:(int)mode
{
return [self notImplemented:_cmd];
}
- setFont:fontObj
{
return [self notImplemented:_cmd];
}
- setTitleFont:fontObj
{
return [self notImplemented:_cmd];
}
- setTextFont:fontObj
{
return [self notImplemented:_cmd];
}
- drawCellAt:(int)index
{
return self;
}
- (const char *)titleAt:(int)index
{
FormCell *aCell;
aCell = [cellList objectAt:index];
return [aCell title];
}
- setTitle:(const char *)aTitle at:(int)index
{
FormCell *aCell;
aCell = [cellList objectAt:index];
[aCell setTitle:aTitle];
return self;
}
- addEntry:(const char *)aTitle
{
FormCell *entry;
[self addRow];
entry = [[cellList lastObject] setTitle:aTitle];
return entry;
}
- addEntry:(const char *)aTitle tag:(int)anInt
target:anObject action:(SEL)aSelector
{
FormCell *entry;
entry = [self addEntry:aTitle];
[entry setTag:anInt];
[entry setTarget:anObject];
[entry setAction:aSelector];
return entry;
}
- insertEntry:(const char *)aTitle at:(int)index
{
FormCell *entry;
[self insertRowAt:index];
entry = [[cellList objectAt:index] setTitle:aTitle];
return entry;
}
- insertEntry:(const char *)aTitle at:(int)index tag:(int)anInt
target:anObject action:(SEL)aSelector
{
id entry;
entry = [self insertEntry:aTitle at:index];
[entry setTag:anInt];
[entry setTarget:anObject];
[entry setAction:aSelector];
return entry;
}
- removeEntryAt:(int)index
{
[self removeRowAt:index andFree:YES];
return self;
}
- setTag:(int)anInt at:(int)index
{
FormCell *aCell;
aCell = [cellList objectAt:index];
[aCell setTag:anInt];
return self;
}
- setTarget:anObject at:(int)index
{
FormCell *aCell;
aCell = [cellList objectAt:index];
[aCell setTarget:anObject];
return self;
}
- setAction:(SEL)aSelector at:(int)index
{
FormCell *aCell;
aCell = [cellList objectAt:index];
[aCell setAction:aSelector];
return self;
}
- (int)findIndexWithTag:(int)aTag
{
FormCell *entry;
unsigned int i;
i = [cellList count];
while ( i-- ) {
entry = [cellList objectAt:i];
if ( [entry tag] == aTag ) {
return i;
}
}
return -1;
}
- (const char *)stringValueAt:(int)index
{
FormCell *entry;
entry = [cellList objectAt:index];
return [entry stringValue];
}
- setStringValue:(const char *)aString at:(int)index
{
FormCell *entry;
entry = [cellList objectAt:index];
[entry setStringValue:aString];
return self;
}
- (int)intValueAt:(int)index
{
FormCell *entry;
entry = [cellList objectAt:index];
return [entry intValue];
}
- setIntValue:(int)anInt at:(int)index
{
FormCell *entry;
entry = [cellList objectAt:index];
[entry setIntValue:anInt];
return self;
}
- (float)floatValueAt:(int)index
{
FormCell *entry;
entry = [cellList objectAt:index];
return [entry floatValue];
}
- setFloatValue:(float)aFloat at:(int)index
{
FormCell *entry;
entry = [cellList objectAt:index];
[entry setFloatValue:aFloat];
return self;
}
- (double)doubleValueAt:(int)index
{
FormCell *entry;
entry = [cellList objectAt:index];
return [entry doubleValue];
}
- setDoubleValue:(double)aDouble at:(int)index
{
FormCell *entry;
entry = [cellList objectAt:index];
[entry setDoubleValue:aDouble];
return self;
}
- selectCell:aCell
{
/*
* The textCell will invoke this method from its callback. In this case
* one wants to select its FormCell instead.
*/
FormCell *fCell;
int i;
if ( [aCell isKindOf:[FormCell class]] ) {
return [super selectCell:aCell];
}
i = [cellList count];
while ( i-- ) {
fCell = [cellList objectAt:i];
if ( [fCell textCell] == aCell ) {
[super selectCell:fCell];
}
}
return self;
}
- selectTextAt:(int)index;
{
FormCell *fCell;
fCell = [cellList objectAt:index];
if ( !fCell ) return nil;
[[fCell textCell] _selectText ];
return fCell;
}
- awake
{
[super awake];
instancename = FormInstanceName();
return self;
}
// + newFrame:(const NXRect *)frameRect;
/* Methods not in NeXTStep */
- _managedBy:parent wid:(void*)widget
{
[self calcSize]; /* get the maxWidth of titles */
[self _setCellTitleWidth]; /* set the title width up to the maxWidth */
[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.