This is MiscGaugeViewInspector.m in view mode; [Download] [Up]
/* MiscGaugeViewInspector.m */ #import <AppKit/AppKit.h> #import <MiscAppKit/MiscGaugeView.h> #import "MiscGaugeViewInspector.h" #import "MiscArrowButtonAndGaugeView.h" @implementation MiscGaugeViewInspector - init { NSString* nibPath; NSBundle* bundle; [super init]; // Load the inspector's nib file. bundle = [NSBundle bundleForClass:[MiscArrowButtonAndGaugeView class]]; nibPath = [bundle pathForResource:@"MiscGaugeViewInspector" ofType:@"nib"]; [NSBundle loadNibFile:nibPath externalNameTable:[NSDictionary dictionaryWithObjectsAndKeys:self, @"NSOwner", nil] withZone:[self zone]]; return self; } - (void) 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. [[self object] setStartAngle:[[sender cellAtIndex:0] floatValue]]; [[sender cellAtIndex:0] setFloatValue:[[self object] startAngle]]; break; case 1: // Angle range changed. [[self object] setAngleRange:[[sender cellAtIndex:1] floatValue]]; [[sender cellAtIndex:1] setFloatValue:[[self object] angleRange]]; break; case 2: // Hand ratio changed. [[self object] setHandRatio:[[sender cellAtIndex:2] floatValue]]; [[sender cellAtIndex:2] setFloatValue:[[self object] handRatio]]; break; case 3: // Tick ratio changed. [[self object] setTickRatio:[[sender cellAtIndex:3] floatValue]]; [[sender cellAtIndex:3] setFloatValue:[[self object] tickRatio]]; break; case 4: // Tick interval changed. [[self object] setTickInterval:[[sender cellAtIndex:4] intValue]]; [[sender cellAtIndex:4] setFloatValue:[[self object] tickInterval]]; break; } // Tick interval has no slider so don't send a message. if (selIndex != 4) { [[sliderMatrix cellAtRow:selIndex column:0] setFloatValue:[[sender cellAtIndex:selIndex] floatValue]]; } [super ok:sender]; } - (void) sliderChanged:sender { // A slider changed, so update the inspected object and // the attribForm. The sender is the sliderMatrix. NSCell* selectedCell = [sender selectedCell]; switch ([sender selectedTag]) { case 0: // Start angle changed. [[self object] setStartAngle:[selectedCell floatValue]]; break; case 1: // Angle range changed. [[self object] setAngleRange:[selectedCell floatValue]]; break; case 2: // Hand ratio changed. [[self object] setHandRatio:[selectedCell floatValue]]; break; case 3: // Tick ratio changed. [[self object] setTickRatio:[selectedCell floatValue]]; break; } // Set the matching attribute in the form, so it and it's // slider have the same value. [[attribsForm cellAtIndex:[sender selectedTag]] setFloatValue:[selectedCell floatValue]]; [super ok: sender]; } - (void) backgroundColorChanged:(id)sender { // The sender is a NXColorWell. [[self object] setBackgroundColor:[sender color]]; [super ok:sender]; } - (void) gaugeColorChanged:(id)sender { // The sender is a NXColorWell. [[self object] setGaugeColor:[sender color]]; [super ok:sender]; } - (void) textColorChanged:(id)sender { // The sender is the NXColorWell representing text color. [[self object] setTextColor:[sender color]]; [super ok:sender]; } - (void) valueChanged:(id)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 indexOfSelectedItem]; switch (selIndex) { case 0: // Min value changed. [[self object] setMinValue:[[sender cellAtIndex:0] floatValue]]; // The max. value may have changed if it became less than the min. [[sender cellAtIndex:1] setFloatValue:[[self object] maxValue]]; break; case 1: // Max value changed. [[self object] setMaxValue:[[sender cellAtIndex:1] floatValue] ]; // The min value may have changed if it became more than the max. [[sender cellAtIndex:0] setFloatValue:[[self object] minValue]]; break; case 2: // Current value changed. [[self object] setFloatValue:[[sender cellAtIndex:2] floatValue]]; 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 cellAtIndex:2] setFloatValue:[[self object] floatValue]]; [super ok:sender]; } - (void )titleFieldChanged:(id)sender { [[self object] setTitle:[sender stringValue]]; [super ok:sender]; } - (void) titlePositionChanged:(id)sender { switch ([sender selectedTag]) { case 0: [[self object] setTitlePosition:NSAtTop]; break; case 1: [[self object] setTitlePosition:NSAtBottom]; break; } [super ok:sender]; } - (void) revert:(id)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. [gaugeColorWell setColor:[[self object] gaugeColor]]; [textColorWell setColor: [[self object] textColor]]; [titleField setStringValue:[[self object] title]]; [[valueForm cellAtIndex:0] setFloatValue:[[self object] minValue]]; [[valueForm cellAtIndex:1] setFloatValue:[[self object] maxValue]]; [[valueForm cellAtIndex:2] setFloatValue:[[self object] floatValue]]; [[attribsForm cellAtIndex:0] setFloatValue:[[self object] startAngle]]; [[attribsForm cellAtIndex:1] setFloatValue:[[self object] angleRange]]; [[attribsForm cellAtIndex:2] setFloatValue:[[self object] handRatio]]; [[attribsForm cellAtIndex:3] setFloatValue:[[self object] tickRatio]]; [[attribsForm cellAtIndex:4] setIntValue:[[self object] tickInterval]]; [[sliderMatrix cellAtRow:0 column:0] setFloatValue:[[self object] startAngle]]; [[sliderMatrix cellAtRow:1 column:0] setFloatValue:[[self object] angleRange]]; [[sliderMatrix cellAtRow:2 column:0] setFloatValue:[[self object] handRatio]]; [[sliderMatrix cellAtRow:3 column:0] setFloatValue:[[self object] tickRatio]]; if ([[self object] titlePosition] == NSAtTop) { [titlePositionMatrix selectCellAtRow:0 column:0]; } else { [titlePositionMatrix selectCellAtRow:1 column:0]; } [super revert:sender]; } - (BOOL) wantsButtons { return NO; } @end @implementation MiscGaugeViewInspector (NibInitialization) - (void) awakeFromNib { // Set all the decimal places for the attributes. [[attribsForm cellAtRow:0 column:0] setFloatingPointFormat:YES left:3 right:1]; [[attribsForm cellAtRow:1 column:0] setFloatingPointFormat:YES left:3 right:1]; [[attribsForm cellAtRow:2 column:0] setFloatingPointFormat:YES left:1 right:2]; [[attribsForm cellAtRow:3 column:0] setFloatingPointFormat:YES left:1 right:2]; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.