This is TonePanelCtrl.m in view mode; [Download] [Up]
#import  "TonePanelCtrl.h"
#import  <appkit/Control.h>
#import  <appkit/Matrix.h>
#import  <stdio.h>
#import  "../common.h"
#import  "../ImageOpCtr.h"
#import  "../ImageOpr.h"
@implementation TonePanelCtrl
- init
{
	return [self reset:nil];
}
- reset: sender
{
	int	i;
	if (sender && [sender selectedTag] != 0)
		[mainSlider setFloatValue: 1.0];
	for (i = 0; i < N_Colors; i++)
		ratios[i] = 1.0;
	return [self changeMainValue: self];
}
/* Local Method */
- setFormatFloat:(float)value to:target
{
	char	buf[16];
	sprintf(buf, "%4.2f", (int)(value * 20.0) / 20.0);
	return [target setStringValue: buf];
}
- changeMainValue: sender
{
	int	i;
	float	v, cv;
	v = [mainSlider floatValue];
	[self setFormatFloat:v to:mainIndicator];
	for (i = 0; i < N_Colors; i++) {
		cv = v * ratios[i];
		if (cv > Colors_MAXVAL) cv = Colors_MAXVAL;
		[[colorSliders cellAt:i :0] setFloatValue: cv];
		[self setFormatFloat:cv to:[colorIndicators cellAt:i :0]];
	}
	return self;
}
- changeColorValue: sender
{
	id	cell;
	int	tag;
	float	v, mv;
	cell = [sender selectedCell];
	tag = [cell tag];
	v = [cell floatValue];
	mv = [mainSlider floatValue];
	ratios[tag] = (mv > 0.01) ? (v / mv) : 1.0;
	[self setFormatFloat:v to:[colorIndicators cellAt:tag :0]];
	return self;
}
- colorTone: sender
{
	int	i;
	float	values[N_Colors];
	for (i = 0; i < N_Colors; i++)
		values[i] = [[colorIndicators cellAt:i :0] floatValue];
	[imageOpCtr colorToneEnhance: values];
	/* This message will be delegated to ImageOpr */
	return self;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.