This is GeneralPane.m in view mode; [Download] [Up]
/* * Copyright (C) 1993 Robert Davis * * This program is free software; you can redistribute it and/or * modify it under the terms of Version 2, or any later version, of * the GNU General Public License as published by the Free Software * Foundation. */ static char RCSId[]="$Id: GeneralPane.m,v 1.9 1993/05/18 03:55:06 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]]; icon = "InspectorGeneral.tiff"; return self; } /* * The following methods should be overridden by subclasses. */ - selectControl:sender { [titleField selectText:self]; return self; } - (BOOL)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; id anId; [(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]]; anId = [samplesMatrix findCellWithTag:Y_TAG]; [anId setIntValue:[status samples:Y_TAG]]; [anId setEnabled:isThreeD]; [self _updateSize]; [titleField setStringValue:[status title]]; [viewWindow reenableDisplay]; [self perform:@selector(selectControl:) with:self afterDelay:1 cancelPrevious:YES]; didSwap = NO; return YES; } return NO; } - didSwapIn:sender { didSwap = YES; return self; } - doSetPlotTitle:sender { [status setTitle: [sender stringValue]]; [sender setStringValue:[status title]]; /* status may have fixed title */ return self; } - doSetSizeProp:sender { float aValue; if ([sender state]) { [status setSizeProp: 1]; [status setSizeX:0 Y: aValue = [[sizeTextMatrix findCellWithTag:X_TAG] floatValue]]; [sizeYSlider setFloatValue:aValue]; [[sizeTextMatrix findCellWithTag:Y_TAG] setFloatValue:aValue]; } else [status setSizeProp: 0]; return self; } - doSetSize:sender { float val[((X_TAG > Y_TAG)? X_TAG : Y_TAG) + 1]; int tag; Cell *cell = [sender selectedCell]; val[tag = [sender selectedTag]] = [cell 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]]; if ([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 { int samples = [sender intValue]; if (samples > 1) [status setSamplesCoord:[sender selectedTag] to:samples]; else [sender setIntValue:[status samples:[sender selectedTag]]]; return self; } - 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]]; [[sizeTextMatrix findCellWithTag:X_TAG] setFloatValue:value]; if ([status sizeProp]) { [sizeYSlider setFloatValue:value = [status sizeY]]; [[sizeTextMatrix findCellWithTag:Y_TAG] setFloatValue:value]; [sizeButton setState:1]; } else { [sizeYSlider setFloatValue:value = [status sizeY]]; [[sizeTextMatrix findCellWithTag:Y_TAG] 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
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.