This is IHeaderFormScrollView.m in view mode; [Download] [Up]
#import "IHeaderFormScrollView.h"
#import "IBetterForm.h"
#import <appkit/Font.h>
#import <appkit/FormCell.h>
#import <appkit/ScrollView.h>
#import <string.h>
@implementation IHeaderFormScrollView
- init
{
NXRect contRect = {{0.0, 0.0}, {0.0, 0.0}};
iForm = [[IBetterForm allocFromZone:[self zone]] initFrame:&contRect];
// [iForm setTitleFont:[Font newFont:"Helvetica-Bold" size:12]];
// [iForm setTextFont:[Font newFont:"Helvetica" size:12]];
// [iForm setBackgroundGray:NX_LTGRAY];
[iForm notifyAncestorWhenFrameChanged:YES];
// [iForm setScrollable:YES];
// [iForm setAutoscroll:NO];
iCellCount = 0;
return(self);
}
- showForm:sender
{
NXSize size;
NXRect frame;
[iForm sizeToFit];
// [[iForm superview] descendantFrameChanged:iForm];
// [iScrollView descendantFrameChanged:iForm];
// [iScrollView reflectScroll:[iForm superview]];
// scroll to top
[iScrollView getContentSize:&size];
[[iScrollView docView] getFrame:&frame];
frame.origin.x = 0.0;
frame.origin.y = - frame.size.height - size.height;
[[iScrollView docView] setFrame:&frame];
[iScrollView setBackgroundGray:NX_LTGRAY];
[iScrollView display];
return(self);
}
- initScrollView:scrollView
{
NXRect contRect, scrollRect;
id oldView;
[super init];
iScrollView = scrollView;
[iScrollView setHorizScrollerRequired:YES];
[iScrollView getFrame:&scrollRect];
[ScrollView getContentSize:&(contRect.size)
forFrameSize:&(scrollRect.size)
horizScroller:YES
vertScroller:YES
borderType:NX_BEZEL];
contRect.origin.x = contRect.origin.y = 0.0;
contRect.size.width = 1100.0;
contRect.size.height = 21.0;
[iScrollView setAutosizing:NX_WIDTHSIZABLE | NX_HEIGHTSIZABLE];
oldView = [iScrollView setDocView:iForm];
if (oldView != nil) {
[oldView free];
}
return(self);
}
- (void)writeToStream:(NXStream *)stream
{
int i;
const char *key, *value;
for (i = 0; i < iCellCount; ++i) {
key = [iForm titleAt:i];
if ((value = [iForm stringValueAt:i]) != NULL) {
for (; *value == ' '; ++value);
if (*value != '\0') {
NXPrintf(stream, "%s: %s\r\n", key, value);
}
}
}
}
- (const char *)stringValueAtTitle:(const char *)title
{
int i;
const char *value;
for (i = 0; i < iCellCount; i++) {
if (strcmp([iForm titleAt:i], title) == 0) {
if ((value = [iForm stringValueAt:i]) != NULL) {
for (; *value == ' '; ++value);
if (*value != '\0') {
return(value);
}
}
break;
}
}
return(NULL); /* no such title */
}
- (FormCell *)setStringValue:(const char *)aValue atTitle:(const char *)title
setEnabled:(BOOL)flag
{
const char *value;
int i;
FormCell *cell;
if (aValue == NULL) {
return(nil);
} else if (*aValue != '\0') {
value = aValue;
} else {
value = " ";
}
for (i = 0; i < iCellCount; i++) {
if (strcmp([iForm titleAt:i], title) == 0) {
cell = [iForm cellAt:i :0];
[cell setStringValue:value];
[cell setEnabled:flag];
return(cell);
}
}
cell = [iForm addEntry:title];
[cell setStringValue:value];
[cell setEnabled:flag];
++iCellCount;
return(cell);
}
- (FormCell *)selectCellAtTitle:(const char *)title
{
int i;
FormCell *cell;
for (i = 0; i < iCellCount; i++) {
if (strcmp([iForm titleAt:i], title) == 0) {
cell = [iForm cellAt:i :0];
[iForm selectCell:cell];
return(cell);
}
}
return(nil);
}
- (BOOL)setEnabled:(BOOL)flag atTitle:(const char *)title
{
int i;
for (i = 0; i < iCellCount; i++) {
if (strcmp([iForm titleAt:i], title) == 0) {
[[iForm cellAt:i :0] setEnabled:flag];
return(YES);
}
}
return(NO);
}
- (BOOL)removeCellAtTitle:(const char *)title
{
int i;
for (i = 0; i < iCellCount; i++) {
if (strcmp([iForm titleAt:i], title) == 0) {
[iForm removeEntryAt:i];
--iCellCount;
return(YES);
}
}
return(NO);
}
- removeAllCells
{
for (--iCellCount; iCellCount >= 0; --iCellCount) {
[iForm removeEntryAt:iCellCount];
}
iCellCount = 0;
return(self);
}
- addCellForNewEntry
{
newCell = [iForm addEntry:NULL];
[newCell setEnabled:YES];
++iCellCount;
return(self);
}
- setTarget:target andAction:(SEL)action
{
[iForm setTarget:target andAction:action];
return(self);
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.