This is TicOptionsPanel.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: TicOptionsPanel.m,v 1.13 1993/05/29 04:32:56 davis Exp $";
#import <appkit/Application.h>
#import <appkit/Button.h>
#import <appkit/MenuCell.h>
#import <appkit/PopUpList.h>
#import <appkit/Matrix.h>
#import "AutoTicsPane.h"
#import "Gnuplot.h"
#import "GnuplotPlot.h"
#import "SeriesTicsPane.h"
#import "Status.h"
#import "StatusTics.h"
#import "TicOptionsPanel.h"
#import "UserTicsPane.h"
@interface TicOptionsPanel (Private)
- _setupPane:(Pane *)aPane;
- _selectPane:(int)aPane;
- _swapPane:(Pane *)new;
- _updatePanel; /** Overridden from OptionsPanel (Private) **/
@end
@implementation TicOptionsPanel
- init
{
[super init];
[NXApp loadNibSection: "TicOptionsPanel.nib"
owner: self
withNames: NO
fromZone: [self zone]];
[panel setFrameUsingName:"TicOptionsPanel"];
[panel setFrameAutosaveName:"TicOptionsPanel"];
return self;
}
- free
{
[seriesPane free];
[userPane free];
[autoPane free];
[[coordButton target] free];
return [super free];
}
- changeCoord:sender
{
[coordButton setTag:[sender selectedTag]];
[self _updatePanel];
return self;
}
- (int)coord
{
PopUpList *popUp = [coordButton target];
Matrix *matrix = [popUp itemList];
int tag = [[matrix selectedCell] tag];
return tag;
}
- doSetTicsType:sender
{
int tag = [sender selectedTag];
[status setTicTypeCoord:[[coordButton target] indexOfItem:
[coordButton title]] to:tag];
[typeButton setTag:tag];
[self _updatePanel];
return self;
}
/*
* Overridden because the superclass (OptionsPanel) only checks to
* see if the current status has changed -- we need to know if the 3D
* state of the doc has changed, too.
*/
- windowDidUpdate:sender
{
static BOOL wasThreeD = NO;
id mainWindow = [NXApp mainWindow];
Status *newStatus;
BOOL newThreeD = wasThreeD;
if (mainWindow)
newStatus = [[mainWindow delegate] status];
else {
id doc;
if (doc = [[NXApp delegate] currentDoc])
newStatus = [doc status];
else
newStatus = nil;
}
/*
* Update if the current status object is different or if the 3D
* status has changed (so we can enable/disable the third choice
* in the pop up list).
*/
newThreeD = newStatus? [newStatus isThreeD] : wasThreeD;
if ((newStatus != status) || (newThreeD != wasThreeD)) {
status = newStatus;
[self _updatePanel];
}
wasThreeD = newThreeD;
return self;
}
// Shuts up the compiler about unused RCSId
- (const char *) rcsid
{
return RCSId;
}
@end
@implementation TicOptionsPanel (Private)
- _setupPane:(Pane *)aPane
{
if (aPane) {
View *panesView = [aPane view];
[[panel contentView] addSubview: panesView];
[[panesView allocateGState] lockFocus];
[panesView unlockFocus];
[panesView moveTo:0:0];
}
return self;
}
- _selectPane:(int)aPane
{
switch (aPane) {
case TIC_SERIES:
if (!seriesPane) {
seriesPane = [[SeriesTicsPane allocFromZone:[self zone]] init];
[self _setupPane:seriesPane];
}
[self _swapPane:seriesPane];
break;
case TIC_USER:
if (!userPane) {
userPane = [[UserTicsPane allocFromZone:[self zone]] init];
[self _setupPane:userPane];
}
[self _swapPane:userPane];
break;
default:
if (!autoPane) {
autoPane = [[AutoTicsPane allocFromZone:[self zone]] init];
[self _setupPane:autoPane];
}
[self _swapPane:autoPane];
break;
}
[currentPane perform:@selector(selectControl:)
with:self
afterDelay:1
cancelPrevious:YES];
return self;
}
- _swapPane:(Pane *)new
{
/*
* If the new pane is not already visible, move it into the panel.
*/
if (new != currentPane) {
[[panel contentView] replaceSubview:[currentPane view]
with:[new view]];
[currentPane didSwapOut:self];
/*
* Notice we send ourself as the doc so that the pane can
* query us for such things as the current coordinate.
*/
[[new didSwapIn:self] updateStatus:status doc:self];
[panel setTitle:[new title]];
[panel setMiniwindowIcon:[new icon]];
currentPane = new;
}
return self;
}
- _updatePanel
{
int coord = [coordButton tag];
int type = [typeButton tag];
BOOL isEnabled;
[panel disableDisplay];
/*
* If the current status is not nil, update the values of all the
* controls.
*/
if (status) {
MenuCell *cell;
BOOL isThreeD = [status isThreeD];
if (!isThreeD && (coord == Z_TAG)) {
cell = [[coordButton target] findCellWithTag:X_TAG];
[coordButton setTitle:[cell title]];
[coordButton setTag:coord = [cell tag]];
}
type = [status ticTypeCoord:coord];
cell = [[typeButton target] findCellWithTag:type];
[typeButton setTitle:[cell title]];
[typeButton setTag:type];
/*
* Enabling/Disabling of the Z coordinate button in the pop
* up list.
*/
[[[coordButton target] findCellWithTag:Z_TAG] setEnabled:isThreeD];
}
/* Enable/disable our controls */
[coordButton setEnabled: isEnabled = (status? YES : NO)];
[coordLabelField setEnabled: isEnabled];
[typeButton setEnabled: isEnabled];
[typeLabelField setEnabled: isEnabled];
[self _selectPane:type];
[currentPane updateStatus:status doc:self];
[panel reenableDisplay];
[panel display];
return self;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.