home *** CD-ROM | disk | FTP | other *** search
-
- static char RCSId[]="$Id: GeneralPane.m,v 1.1.1.1 1993/03/18 03:33:19 davis Exp $";
-
-
- #import <appkit/Application.h>
- #import <appkit/Box.h>
- #import <appkit/Button.h>
- #import <appkit/Matrix.h>
- #import <appkit/Panel.h> /* NXRunAlertPanel() */
- #import <appkit/Slider.h>
- #import <appkit/Text.h> /* GeneralPane is a text delegate */
- #import <appkit/TextField.h>
- #import <appkit/TextFieldCell.h>
- #import <appkit/View.h>
-
- #import <objc/NXStringTable.h>
-
- #import "GeneralPane.h"
- #import "Status.h"
-
-
- @interface GeneralPane (Private)
-
- - _updateKeyIsThreeD:(BOOL)isThreeD;
- - _updateSize;
- - _updateTime;
-
- @end
-
-
- @implementation GeneralPane
-
-
- - init
- {
- [super init];
-
- [NXApp loadNibSection: "GeneralPane.nib"
- owner: self
- withNames: NO
- fromZone: [self zone]];
-
- view = [window setContentView:[[View alloc] init]];
- icon = "InspectorGeneral.tiff";
-
- return self;
- }
-
-
- /*
- * The following methods should be overridden by subclasses.
- */
- - selectControl:sender
- {
- [titleField selectText:self];
- return self;
- }
-
-
- - updateStatus:aStatus doc:aDoc
- {
- id oldStatus = status;
-
- /*
- * We only bother updating if status has changed since we last
- * updated, or if we just became the current pane (didSwap) --
- * assuming that status and aDoc are non-nil, of course.
- */
-
- if ([super updateStatus:aStatus doc:aDoc]
- && ((status != oldStatus) || didSwap)) {
-
- BOOL isThreeD = [status isThreeD];
- BOOL isPolar = [status isPolar];
- Window *viewWindow;
-
- [(viewWindow = [view window]) disableDisplay];
-
- [polarButton setState:isPolar];
- [polarButton setEnabled:!isThreeD];
- [parametricButton setState:[status parametric]];
- [borderButton setState:[status border]];
- [self _updateKeyIsThreeD:isThreeD];
- [self _updateTime];
- [[samplesMatrix findCellWithTag:X_TAG] setIntValue:
- [status samples:X_TAG]];
- [[samplesMatrix findCellWithTag:Y_TAG] setIntValue:
- [status samples:Y_TAG]];
- [self _updateSize];
- [titleField setStringValue:[status title]];
-
- [viewWindow reenableDisplay];
-
- [self perform:@selector(selectControl:)
- with:self
- afterDelay:1
- cancelPrevious:YES];
-
- didSwap = NO;
- return self;
- }
-
- return nil;
- }
-
-
- - didSwapIn:sender
- {
- didSwap = YES;
- return self;
- }
-
-
-
- - doSetPlotTitle:sender
- {
- return [status setTitle: [sender stringValue]];
- }
-
-
- - doSetSizeProp:sender
- {
- float aValue;
-
- if ([sender state]) {
-
- [status setSizeProp: 1];
-
- [status setSizeX:0 Y: aValue = [sizeXSlider floatValue]];
- [sizeYSlider setFloatValue:aValue];
- [sizeYField setFloatValue:aValue];
-
- } else
- [status setSizeProp: 0];
-
- return self;
- }
-
-
- - doSetSize:sender
- {
- float val[((X_TAG > Y_TAG)? X_TAG : Y_TAG) + 1];
- int tag;
-
- val[tag = [sender tag]] = [sender floatValue];
- if ([sizeButton state])
- val[(X_TAG == tag)? Y_TAG : X_TAG] = val[tag];
- else
- val[(X_TAG == tag)? Y_TAG : X_TAG] = 0.0;
-
- [status setSizeX:val[X_TAG] Y:val[Y_TAG]];
- [self _updateSize];
-
- return self;
- }
-
-
- - doSetBorder:sender
- {
- return [status setBorder:[sender state]];
- }
-
-
- - doSetPolar:sender
- {
- [status setPolar:[sender state]];
- [self forceUpdateStatus:status doc:doc];
- [view display];
- return self;
- }
-
-
-
-
- /*
- * This method informs the user the first time it is sent that
- * parametric plots have special requirements.
- */
- - doSetParametric:sender
- {
- static BOOL didInform = NO;
- int state = [sender state];
-
- if (!didInform && state) {
- didInform = YES;
- NXRunAlertPanel ([stringSet valueForStringKey: "parametric"],
- [stringSet valueForStringKey: "needEvenFunctions"],
- NULL, NULL, NULL);
- }
-
- return [status setParametric:state];
- }
-
-
- - doSetSamples:sender
- {
- return [status setSamplesCoord:[sender selectedTag] to:[sender intValue]];
- }
-
-
- - doSetKey:sender
- {
- [status setKey: [sender state]];
- [self _updateKeyIsThreeD:[status isThreeD]];
- if (![keyDefaultButton state])
- [keyMatrix selectCellWithTag:X_TAG];
-
- return self;
- }
-
-
- - doSetKeyLocation:sender
- {
- id cell = [sender selectedCell];
- int tag = [cell tag];
- double val = [cell doubleValue];
-
- if ([status isLogCoord:tag] && (val <= 0)) {
- NXRunAlertPanel ([stringSet valueForStringKey: "key"],
- [stringSet valueForStringKey: "logKey"],
- NULL, NULL, NULL);
- [self _updateKeyIsThreeD:[status isThreeD]];
- } else
- [status setKeyCoord:tag to:val];
-
- return self;
- }
-
-
- - doSetKeyDefault:sender
- {
- int i;
- BOOL ok = YES;
- BOOL isDefaultOn = [sender state];
-
- for (i = 0 ; i < 3 ; i++)
- if ([status isLogCoord:i] && ([[keyMatrix findCellWithTag:i]
- doubleValue] <= 0)) {
- NXRunAlertPanel ([stringSet valueForStringKey: "key"],
- [stringSet valueForStringKey: "logKey"],
- NULL, NULL, NULL);
- ok = NO;
- break;
- }
-
- if (ok)
- [status setKeyDefault: isDefaultOn];
-
- [self _updateKeyIsThreeD:[status isThreeD]];
-
- if (ok && !isDefaultOn)
- [keyMatrix selectCellWithTag:X_TAG];
-
- return self;
- }
-
-
- - doSetTime:sender
- {
- [status setTime: [sender state]];
- [self _updateTime];
-
- if (![timeDefaultButton state])
- [timeMatrix selectCellWithTag:X_TAG];
-
- return self;
- }
-
-
- - doSetTimeLocation:sender
- {
- id cell = [sender selectedCell];
- int tag = [cell tag];
- int val = [cell intValue];
-
- if ([status isLogCoord:tag] && (val <= 0)) {
- NXRunAlertPanel ([stringSet valueForStringKey: "time"],
- [stringSet valueForStringKey: "logTime"],
- NULL, NULL, NULL);
- [self _updateTime];
- } else
- [status setTimeCoord:tag to:val];
-
- return self;
- }
-
-
- - doSetTimeDefault:sender
- {
- int i;
- BOOL ok = YES;
- BOOL isDefaultOn = [sender state];
-
- for (i = 0 ; i < 2 ; i++)
- if ([status isLogCoord:i] && ([[timeMatrix findCellWithTag:i]
- doubleValue] <= 0)) {
- NXRunAlertPanel ([stringSet valueForStringKey: "time"],
- [stringSet valueForStringKey: "logTime"],
- NULL, NULL, NULL);
- ok = NO;
- break;
- }
-
- if (ok)
- [status setTimeDefault: isDefaultOn];
-
- [self _updateTime];
-
- if (ok && !isDefaultOn)
- [timeMatrix selectCellWithTag:X_TAG];
-
- return self;
- }
-
-
-
- // Shuts up the compiler about unused RCSId
- - (const char *) rcsid
- {
- return RCSId;
- }
-
-
- @end
-
-
- @implementation GeneralPane (Private)
-
-
- - _updateKeyIsThreeD:(BOOL)isThreeD
- {
- int keyState = [status key];
- int keyDefaultState = [status keyDefault];
- int i;
-
- for (i = 0 ; i <= 2 ; i++)
- [[keyMatrix findCellWithTag:i] setDoubleValue:[status keyCoord:i]];
-
- [keyButton setState: keyState];
- [keyDefaultButton setState: keyDefaultState];
- [keyDefaultButton setEnabled: keyState];
-
- if (keyState) { /* There is a key... */
-
- [[keyMatrix findCellWithTag:X_TAG] setEnabled:!keyDefaultState];
- [[keyLabelMatrix findCellWithTag:X_TAG]
- setTextGray:keyDefaultState? NX_DKGRAY: NX_BLACK];
-
- [[keyMatrix findCellWithTag:Y_TAG] setEnabled:!keyDefaultState];
- [[keyLabelMatrix findCellWithTag:Y_TAG]
- setTextGray:keyDefaultState? NX_DKGRAY: NX_BLACK];
-
- [[keyMatrix findCellWithTag:Z_TAG] setEnabled:!keyDefaultState
- && isThreeD];
- [[keyLabelMatrix findCellWithTag:Z_TAG]
- setTextGray:(keyDefaultState || !isThreeD)? NX_DKGRAY: NX_BLACK];
-
-
- } else /* There is no key */
- for (i = 0 ; i < 3 ; i++) {
- [[keyMatrix findCellWithTag:i] setEnabled:NO];
- [[keyLabelMatrix findCellWithTag:i] setTextGray:NX_DKGRAY];
- }
-
- return self;
- }
-
-
-
- - _updateSize
- {
- float value;
-
- [sizeXSlider setFloatValue:value = [status sizeX]];
- [sizeXField setFloatValue:value];
- if ([status sizeProp]) {
- [sizeYSlider setFloatValue:value];
- [sizeYField setFloatValue:value];
- [sizeButton setState:1];
- } else {
- [sizeYSlider setFloatValue:value = [status sizeY]];
- [sizeYField setFloatValue:value];
- [sizeButton setState:0];
- }
-
- return self;
- }
-
-
-
-
- - _updateTime
- {
- int timeState = [status time];
- int timeDefaultState = [status timeDefault];
-
- [[timeMatrix findCellWithTag:X_TAG] setIntValue: [status timeCoord:X_TAG]];
- [[timeMatrix findCellWithTag:Y_TAG] setIntValue: [status timeCoord:Y_TAG]];
-
- [timeButton setState: timeState];
- [timeDefaultButton setState: timeDefaultState];
- [timeDefaultButton setEnabled: timeState];
-
- if (timeState) { /* We do want to show time/date */
-
- [[timeMatrix findCellWithTag:X_TAG] setEnabled:!timeDefaultState];
- [[timeLabelMatrix findCellWithTag:X_TAG]
- setTextGray: timeDefaultState? NX_DKGRAY: NX_BLACK];
- [[timeMatrix findCellWithTag:Y_TAG] setEnabled:!timeDefaultState];
- [[timeLabelMatrix findCellWithTag:Y_TAG]
- setTextGray: timeDefaultState? NX_DKGRAY: NX_BLACK];
-
- } else { /* We don't want to show time */
-
- [[timeMatrix findCellWithTag:X_TAG] setEnabled:NO];
- [[timeLabelMatrix findCellWithTag:X_TAG] setTextGray: NX_DKGRAY];
- [[timeMatrix findCellWithTag:Y_TAG] setEnabled:NO];
- [[timeLabelMatrix findCellWithTag:Y_TAG] setTextGray: NX_DKGRAY];
-
- }
- return self;
- }
-
-
-
-
- @end
-