This is Controler.m in view mode; [Download] [Up]
/* * Copyright (C) 1993 Raymond Lutz. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 1. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * This program illustrates the features of the CubicSlider. */ #import "Controler.h" #import "CubicSlider.h" #import "CubicSliderCell.h" #import "ProgressView.h" #import "SwitchBox.h" #import <appkit/Button.h> #import <appkit/TextField.h> #import <appkit/Form.h> #import <appkit/graphics.h> #import <math.h> #import <strings.h> #define UPTIME (float)0.7 @implementation Controler -appDidInit:sender { [sample setUpTarget:self action: @selector(upMouseMethod)]; [[[sample setCubic: NO] setMinValue:0] setMaxValue: 1]; [[sample setMinEditable: NO] setMaxEditable:NO]; [aboutView switchTo:0]; [[valForm cellAt:0:0] setFloatingPointFormat:NO left:1 right:6]; [[valForm cellAt:1:0] setFloatingPointFormat:NO left:1 right:6]; [self resetSliderValuesDisplay]; panel = 0; fastCubic = YES; return self; } void soon(teNum, now, theControl) DPSTimedEntry teNum; double now; id theControl; { [[theControl upToDown] stopTimedEntry]; return; } - stopTimedEntry { if (teNum) DPSRemoveTimedEntry (teNum); teNum = (DPSTimedEntry)0; return self; } - upToDown { [upTargetBut setState: 0]; [upTargetText setTextGray: NX_DKGRAY]; return self; } - upMouseMethod { [upTargetBut setState: 1]; [upTargetText setTextGray: NX_BLACK]; if (!teNum) teNum = DPSAddTimedEntry(UPTIME, &soon, self, NX_BASETHRESHOLD); return self; } - setPlainSample:sender { [[[[sample setCubic: NO] setMinValue:0] setMaxValue: 1] setFloatValue:0]; [minText setFloatValue: 0]; [maxText setFloatValue: 1]; [[sample setMinEditable: NO] setMaxEditable:NO]; [self resetSliderValuesDisplay]; panel = [[sender selectedCell] tag]; [aboutView switchTo: panel]; return self; } - setMouseSample:sender { [[[[sample setCubic: NO] setMinValue:0] setMaxValue: 1] setFloatValue:0]; [minText setFloatValue: 0]; [maxText setFloatValue: 1]; [[sample setMinEditable: NO] setMaxEditable:NO]; [self resetSliderValuesDisplay]; panel = [[sender selectedCell] tag]; [aboutView switchTo: panel]; return self; } - setMinLockedSample:sender { [[[[sample setCubic: NO] setMinValue:0] setMaxValue: 1] setFloatValue:0]; [minText setFloatValue: 0]; [maxText setFloatValue: 1]; [[sample setMinEditable: NO] setMaxEditable:YES]; [[sample clearAbsoluteMinValue] clearAbsoluteMaxValue]; panel = [[sender selectedCell] tag]; [aboutView switchTo: panel]; [[[barView reset] setMin: 0] setMax: 10]; [self clearLabels]; [labelMin setStringValue:"0"]; [label2MaxEdit setStringValue:"1"]; [labelMax setStringValue:"10"]; [barView setPosition: 0]; return self; } - setCubicSample:sender { [[[[sample setCubic: YES] setMinValue:0] setMaxValue: 1] setFloatValue:0]; [minText setFloatValue: 0]; [maxText setFloatValue: 1]; [[sample setMinEditable: NO] setMaxEditable:NO]; [self resetSliderValuesDisplay]; panel = [[sender selectedCell] tag]; [aboutView switchTo: panel]; return self; } - setMatriceSamples:sender; { [self resetSliderValuesDisplay]; panel = [[sender selectedCell] tag]; [[sample setMinEditable: NO] setMaxEditable:NO]; [aboutView switchTo: panel]; return self; } - setAbsRangeSample:sender { [[[[sample setCubic: NO] setMinValue:0] setMaxValue: 1] setFloatValue:0]; [minText setFloatValue: 0]; [maxText setFloatValue: 1]; [[sample setMinEditable: YES] setMaxEditable:YES]; [[sample setAbsoluteMinValue: -4] setAbsoluteMaxValue: 5]; panel = [[sender selectedCell] tag]; [aboutView switchTo: panel]; [[[barView reset] setMin: -4] setMax: 5]; [self clearLabels]; [labelMin setStringValue:"-4"]; [label1Abs setStringValue:"0"]; [label2Abs setStringValue:"1"]; [labelMax setStringValue:"5"]; [barView setPosition: 0]; return self; } - setInspectableSample:sender { panel = [[sender selectedCell] tag]; [aboutView switchTo: panel]; [self updateInspector]; return self; } - resetSliderValuesDisplay { [[[barView reset] setMin: 0] setMax: 1]; [self clearLabels]; return self; } - clearLabels { [labelMin setStringValue:""]; [label1Abs setStringValue:""]; [label2Abs setStringValue:""]; [label2MaxEdit setStringValue:""]; [labelMax setStringValue:""]; return self; } - takeCubicSliderStatusFrom:sender { [minText setDoubleValue: [sender minValue]]; [maxText setDoubleValue: [sender maxValue]]; [self updateInspector]; return self; } - cubicSpeed:sender; { fastCubic = [sender state]; [valForm setEnabled: 1 - fastCubic]; return self; } - sampleMoved:sender { float val = [sender floatValue]; [mouse setState: 1 - [sender mouseIsUp]]; [barView setPosition: val]; if ( panel == 2 && !fastCubic) { [valForm setFloatValue:val at:0]; [valForm setFloatValue: fabs(val - oldValue) at:1]; oldValue = val;} return self; } - ok:sender { if (strlen([absoluteValuesForm stringValueAt:0]) != 0) [sample setAbsoluteMinValue:[absoluteValuesForm doubleValueAt:0]]; else [sample clearAbsoluteMinValue]; if (strlen([absoluteValuesForm stringValueAt:1]) != 0) [sample setAbsoluteMaxValue:[absoluteValuesForm doubleValueAt:1]]; else [sample clearAbsoluteMaxValue]; [sample setMinEditable: 1-[[userEditableSwitches cellAt: 0:0] state]] ; [sample setMaxEditable: 1-[[userEditableSwitches cellAt: 1:0] state]] ; [sample setCubic: 1 - [functionMatrix selectedRow] ] ; [sample setMaxValue:[extremumValuesForm doubleValueAt:1]]; [sample setMinValue:[extremumValuesForm doubleValueAt:0]]; [self updateInspector]; return self; } - updateInspector { if ([sample absoluteMinValueSet]) [absoluteValuesForm setDoubleValue: [sample absoluteMinValue] at:0]; else [absoluteValuesForm setStringValue: "" at:0]; if ([sample absoluteMaxValueSet]) [absoluteValuesForm setDoubleValue: [sample absoluteMaxValue] at:1]; else [absoluteValuesForm setStringValue: "" at:1]; [userEditableSwitches setState: 1- [sample minIsEditable] at:0:0]; [userEditableSwitches setState: 1- [sample maxIsEditable] at:1:0]; [functionMatrix selectCellAt: 1 - [sample isCubic]:0]; [extremumValuesForm setDoubleValue: [sample minValue] at:0]; [extremumValuesForm setDoubleValue: [sample maxValue] at:1]; [minText setFloatValue: [sample minValue]]; [maxText setFloatValue: [sample maxValue]]; // [[barView setMin: [sample minValue]] setMax: [sample maxValue]]; return self; } - minChg:sender { [sample setMinValue:[sender doubleValue]]; [self updateInspector]; return self; } - maxChg:sender { [sample setMaxValue:[sender doubleValue]]; [self updateInspector]; return self; } - absMinChg:sender { if (strlen([sender stringValueAt:0]) != 0) [sample setAbsoluteMinValue:[sender doubleValueAt:0]]; else [sample clearAbsoluteMinValue]; [self updateInspector]; return self; } - absMaxChg:sender { if (strlen([sender stringValueAt:1]) != 0) [sample setAbsoluteMaxValue:[sender doubleValueAt:1]]; else [sample clearAbsoluteMaxValue]; [self updateInspector]; return self; } - minEditChg:sender { if ([[sender selectedCell] state]) [absoluteValuesForm setFloatValue: [sample minValue] at:0]; else [absoluteValuesForm setStringValue: "" at:0]; [sample setMinEditable: 1-[[sender cellAt: 0:0] state]] ; return self; } - maxEditChg:sender { if ([[sender selectedCell] state]) [absoluteValuesForm setFloatValue: [sample maxValue] at:1]; else [absoluteValuesForm setStringValue: "" at:1]; [sample setMaxEditable: 1-[[sender cellAt: 1:0] state]] ; return self; } - fctChg:sender { [sample setCubic: 1 - [sender selectedRow] ] ; return self; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.