This is MiscGaugeViewInspector.m in view mode; [Download] [Up]
/**************************************************************************** CLASS: MiscGaugeViewInspector See the interface file for more information on this class. ****************************************************************************/ #import <appkit/appkit.h> #import "MiscGaugeView.subproj/MiscGaugeView.h" #import "MiscGaugeViewInspector.h" @implementation MiscGaugeViewInspector - init { char buf[MAXPATHLEN+1]; id bundle; [super init]; // Load the inspector's nib file. bundle = [NXBundle bundleForClass:[MiscGaugeView class]]; [bundle getPath: buf forResource: "MiscGaugeViewInspector" ofType:"nib"]; [NXApp loadNibFile:buf owner:self withNames:NO fromZone:[self zone]]; return self; } - attribChanged:sender { // One of the attributes changed, so find out which one and update us. // Syncronize the slider with it's matching form cell. The sender is // the attribForm. After we set the attrib. we check back with the // object and see what the value was really set to (since it may have // been illegal) and update the form cell. int selIndex = [sender selectedRow]; switch (selIndex) { case 0: // Start angle changed. [object setStartAngle: [sender floatValueAt: 0] ]; [sender setFloatValue: [object startAngle] at: 0]; break; case 1: // Angle range changed. [object setAngleRange: [sender floatValueAt: 1] ]; [sender setFloatValue: [object angleRange] at: 1]; break; case 2: // Hand ratio changed. [object setHandRatio: [sender floatValueAt: 2] ]; [sender setFloatValue: [object handRatio] at: 2]; break; case 3: // Tick ratio changed. [object setTickRatio: [sender floatValueAt: 3] ]; [sender setFloatValue: [object tickRatio] at: 3]; break; case 4: // Tick interval changed. [object setTickInterval: [sender intValueAt: 4] ]; [sender setFloatValue: [object tickInterval] at: 4]; break; } // Tick interval has no slider so don't send a message. if (selIndex != 4) [ [sliderMatrix cellAt: selIndex : 0] setFloatValue: [sender floatValueAt: selIndex] ]; return [super ok: sender]; } - sliderChanged: sender { // A slider changed, so update the inspected object and // the attribForm. The sender is the sliderMatrix. Cell *selectedCell = [sender selectedCell]; switch ([sender selectedTag]) { case 0: // Start angle changed. [object setStartAngle: [selectedCell floatValue] ]; break; case 1: // Angle range changed. [object setAngleRange: [selectedCell floatValue] ]; break; case 2: // Hand ratio changed. [object setHandRatio: [selectedCell floatValue] ]; break; case 3: // Tick ratio changed. [object setTickRatio: [selectedCell floatValue] ]; break; } // Set the matching attribute in the form, so it and it's // slider have the same value. [attribsForm setFloatValue: [selectedCell floatValue] at: [sender selectedTag] ]; return [super ok: sender]; } - backgroundColorChanged:sender { // The sender is a NXColorWell. [object setBackgroundColor: [sender color] ]; return [super ok: sender]; } - gaugeColorChanged:sender { // The sender is a NXColorWell. [object setGaugeColor: [sender color] ]; return [super ok: sender]; } - textColorChanged:sender { // The sender is the NXColorWell representing text color. [object setTextColor: [sender color] ]; return [super ok: sender]; } - valueChanged:sender { // A value in the value form changed, so find out which one and // update the object. The sender is the valueForm. int selIndex = [sender selectedIndex]; switch (selIndex) { case 0: // Min value changed. [(MiscGaugeView *)object setMinValue: [sender floatValueAt: 0] ]; // The max. value may have changed if it became less than the min. [sender setFloatValue: [(MiscGaugeView *)object maxValue] at: 1]; break; case 1: // Max value changed. [(MiscGaugeView *)object setMaxValue: [sender floatValueAt: 1] ]; // The min value may have changed if it became more than the max. [sender setFloatValue: [(MiscGaugeView *)object minValue] at: 0]; break; case 2: // Current value changed. [object setFloatValue: [sender floatValueAt: 2] ]; break; } // Since any of the above could have changed the value of the gauge // (or the new value wasn't acceptable..above or below the max and // min), get the current value from the object itself and update the // formcell. [sender setFloatValue: [object floatValue] at: 2]; return [super ok: sender]; } - titleFieldChanged: sender { [object setTitle: [sender stringValue] ]; return [super ok: sender]; } - titlePositionChanged: sender { switch ([sender selectedTag]) { case 0: [object setTitlePosition: NX_ATTOP]; break; case 1: [object setTitlePosition: NX_ATBOTTOM]; break; } return [super ok: sender]; } - revert: sender { // The place to ask the inspected object for all it's values, so we // can fill up the inspector's fields and color wells. // [backgroundColorWell setColor: [object backgroundColor] ]; [gaugeColorWell setColor: [object gaugeColor] ]; [textColorWell setColor: [object textColor] ]; [titleField setStringValue: [object title] ]; [valueForm setFloatValue: [(MiscGaugeView *)object minValue] at: 0]; [valueForm setFloatValue: [(MiscGaugeView *)object maxValue] at: 1]; [valueForm setFloatValue: [object floatValue] at: 2]; [attribsForm setFloatValue: [object startAngle] at: 0]; [attribsForm setFloatValue: [object angleRange] at: 1]; [attribsForm setFloatValue: [object handRatio] at: 2]; [attribsForm setFloatValue: [object tickRatio] at: 3]; [attribsForm setIntValue: [object tickInterval] at: 4]; [ [sliderMatrix cellAt: 0 : 0] setFloatValue: [object startAngle] ]; [ [sliderMatrix cellAt: 1 : 0] setFloatValue: [object angleRange] ]; [ [sliderMatrix cellAt: 2 : 0] setFloatValue: [object handRatio] ]; [ [sliderMatrix cellAt: 3 : 0] setFloatValue: [object tickRatio] ]; if ([object titlePosition] == NX_ATTOP) [titlePositionMatrix selectCellAt: 0 : 0]; else [titlePositionMatrix selectCellAt: 1 : 0]; return [super revert: sender]; } - (BOOL)wantsButtons { return NO; } @end @implementation MiscGaugeViewInspector (NibInitialization) - awakeFromNib { // Set all the decimal places for the attributes. [[attribsForm cellAt: 0 : 0] setFloatingPointFormat: YES left: 3 right: 1]; [[attribsForm cellAt: 1 : 0] setFloatingPointFormat: YES left: 3 right: 1]; [[attribsForm cellAt: 2 : 0] setFloatingPointFormat: YES left: 1 right: 2]; [[attribsForm cellAt: 3 : 0] setFloatingPointFormat: YES left: 1 right: 2]; return self; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.