This is OATextFieldInspector.m in view mode; [Download] [Up]
#import "OATextFieldInspector.h" #import "OATextField.subproj/OATextField.h" #import "OATextField.subproj/OATextFieldCell.h" #import "OATextField.subproj/OATextFieldFormatter.h" #import "OATextField.subproj/OATextFieldFormatterInspector.h" #import "RZBundle.h" #import <objc/HashTable.h> @interface OATextField (IB) - (const char *)getInspectorClassName; @end @implementation OATextField (IB) - (const char *)getInspectorClassName { return "OATextFieldInspector"; } @end @interface OATextFieldCell (IB) - (const char *)getInspectorClassName; @end @implementation OATextFieldCell (IB) - (const char *)getInspectorClassName { return "OATextFieldInspector"; } @end @implementation OATextFieldInspector - init { int i, nelem; List *formatterList; char pathname[MAXPATHLEN+1]; [super init]; if ([[NXBundle bundleForClass:[self class]] getPath:pathname forResource:"OATextFieldInspector" ofType:"nib"]) { [NXApp loadNibFile:pathname owner:self withNames:NO fromZone:[self zone]]; } formatterTable = [[HashTable allocFromZone:[self zone]] initKeyDesc:@encode(char*) valueDesc:@encode(id)]; formatterList = [RZBundle bundlesWithValue:"OATextFieldFormatter" forString:"BundleType"]; for (i = 0, nelem = [formatterList count]; i < nelem; i++) { const char *title; const char *className; const char *inspectorName; OATextFieldFormatter *formatter; OATextFieldFormatterInspector *inspector; List *formatterInfo = [[List allocFromZone:[self zone]] initCount:3]; RZBundle *aBundle = [formatterList objectAt:i]; title = [aBundle valueForString:"Title"]; className = [aBundle valueForString:"ClassName"]; inspectorName = [aBundle valueForString:"InspectorName"]; formatter = [[[aBundle classNamed:className] alloc] init]; inspector = [[[aBundle classNamed:inspectorName] alloc] init]; [formatterInfo addObject:formatter]; [formatterInfo addObject:inspector]; [formatterInfo addObject:[inspector view]]; [[formatterPopUpButton target] addItem:title]; [formatterTable insertKey:title value:formatterInfo]; } [[formatterPopUpButton target] setTarget:self]; [[formatterPopUpButton target] setAction:@selector(takeFormatterFrom:)]; formatterNotApplicableView = [formatterNotApplicableWindow contentView]; return self; } - (BOOL)wantsButtons { return NO; } - ok:sender { [object setChecksMaximumLength:[checkMaximum state]?YES:NO]; [object setMaximumLength:[maximumLength intValue]]; [object setChecksMinimumLength:[checkMinimum state]?YES:NO]; [object setMinimumLength:[minimumLength intValue]]; [object setChecksMaximumValue:[checkMaximumValue state]?YES:NO]; [object setMaximumValue:[maximumValue intValue]]; [object setChecksMinimumValue:[checkMinimumValue state]?YES:NO]; [object setMinimumValue:[minimumValue intValue]]; [object setNullable:[nullable state]?YES:NO]; [object setMandatory:[mandatory state]?YES:NO]; [object setCaseMapping:[[caseMapping selectedCell] tag]]; [object setCharacterFiltering: [[[characterFiltering target] itemList] selectedTag]]; [object setFilteringExceptions:[filteringExceptions stringValue]]; [object setRemovesLeadingWhitespace: [clipLeadingWhitespace state]?YES:NO]; [object setRemovesTrailingWhitespace: [clipTrailingWhitespace state]?YES:NO]; [formatterInspector ok:sender]; return [super ok:sender]; } - revert:sender { [mandatory setState: [object isMandatory]?1:0]; [nullable setState: [object isNullable]?1:0]; [caseMapping selectCellWithTag:[object caseMapping]]; [characterFiltering setTitle: [[[[characterFiltering target] itemList] findCellWithTag:[object characterFiltering]] title]]; [[[characterFiltering target] itemList] selectCell: [[[characterFiltering target] itemList] findCellWithTag: [object characterFiltering]]]; [filteringExceptions setStringValue:[object filteringExceptions]]; [clipLeadingWhitespace setState: [object doesRemoveLeadingWhitespace]?1:0]; [clipTrailingWhitespace setState: [object doesRemoveTrailingWhitespace]?1:0]; [maximumLength setIntValue:[object maximumLength]]; [minimumLength setIntValue:[object minimumLength]]; [maximumValue setIntValue:[object maximumValue]]; [minimumValue setIntValue:[object minimumValue]]; if ([object doesCheckMaximumLength]) { [checkMaximum setState:YES]; [maximumLength setEnabled:YES]; [maximumLength setEditable:YES]; } else { [checkMaximum setState:NO]; [maximumLength setEnabled:NO]; } if ([object doesCheckMinimumLength]) { [nullable setState:YES]; [checkMinimum setState:YES]; [minimumLength setEnabled:YES]; [minimumLength setEditable:YES]; } else { [nullable setState:NO]; [checkMinimum setState:NO]; [minimumLength setEnabled:NO]; } if ([object doesCheckMaximumValue]) { [checkMaximumValue setState:YES]; [maximumValue setEnabled:YES]; [maximumValue setEditable:YES]; } else { [checkMaximumValue setState:NO]; [maximumValue setEnabled:NO]; } if ([object doesCheckMinimumValue]) { [checkMinimumValue setState:YES]; [minimumValue setEnabled:YES]; [minimumValue setEditable:YES]; } else { [checkMinimumValue setState:NO]; [minimumValue setEnabled:NO]; } [self setFormatterPopUpButtonTitle]; return [super revert:sender]; } - takeCheckMinimumFrom:sender { BOOL checks = [sender state] ? YES : NO; if (checks) { [minimumLength setEnabled:YES]; [minimumLength setEditable:YES]; } else { [minimumLength setEnabled:NO]; } return [self ok:sender]; } - takeCheckMaximumFrom:sender { BOOL checks = [sender state] ? YES : NO; if (checks) { [maximumLength setEnabled:YES]; [maximumLength setEditable:YES]; } else { [maximumLength setEnabled:NO]; } return [self ok:sender]; } - takeCheckMinimumValueFrom:sender { BOOL checks = [sender state] ? YES : NO; if (checks) { [minimumValue setEnabled:YES]; [minimumValue setEditable:YES]; } else { [minimumValue setEnabled:NO]; } return [self ok:sender]; } - takeCheckMaximumValueFrom:sender { BOOL checks = [sender state] ? YES : NO; if (checks) { [maximumValue setEnabled:YES]; [maximumValue setEditable:YES]; } else { [maximumValue setEnabled:NO]; } return [self ok:sender]; } - takeIsMandatoryFrom:sender { [self ok:sender]; return [self revert:sender]; } - takeFormatterFrom:sender { const char *title = [[sender selectedCell] title]; id formatter = [(List *)[formatterTable valueForKey:title] objectAt:0]; [object setTextFieldFormatter:formatter]; return [self revert:sender]; } - setFormatterPopUpButtonTitle { OATextFieldFormatter *formatter; if ((formatter = [object textFieldFormatter]) == nil) { [formatterPopUpButton setTitle:"None"]; [formatterInspectorBox setContentView:formatterNotApplicableView]; [formatterInspectorBox update]; } else { const char *key; List *value; NXHashState state = [formatterTable initState]; while ([formatterTable nextState:&state key:(void*)&key value:(void *)&value]) { if ([formatter class] == [[value objectAt:0] class]) { [formatterPopUpButton setTitle:key]; if ([value count] > 1) { formatterInspector = [value objectAt:1]; [formatterInspector setObject:[object textFieldFormatter]]; [formatterInspector revert:self]; if ([value count] > 2) { [formatterInspectorBox setContentView:[value objectAt:2]]; } else { [formatterInspectorBox setContentView:formatterNotApplicableView]; } [formatterInspectorBox update]; } else { [formatterInspectorBox setContentView:formatterNotApplicableView]; [formatterInspectorBox update]; } break; } } } return self; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.