This is xmSliderCell.m in view mode; [Download] [Up]
/* Motif WidgetSet category for implemenation of SliderCell class
*
* Copyright (C) 1993, 1994, 1995 The Board of Trustees of
* The Leland Stanford Junior University. All Rights Reserved.
*
* Authors: Scott Francis, Paul Kunz, and Libing Wang
*
* This file is part of an Objective-C class library for X/Motif
*
* xmSliderCell.m,v 1.9 1995/04/22 23:12:46 pfkeb Exp
*/
#include "SliderCell.h"
#include "xtCell.h"
#include "Motif.h"
#include <Xm/Scale.h>
/* The callback function is at the end of this file */
static void
theCallback(Widget w,
XtPointer client_data,
XtPointer call_data);
char *SliderCellInstanceName(void)
{
return "SliderCell";
}
@implementation SliderCell(WidgetSet)
- _init
{
classname = xmScaleWidgetClass;
[self _addArg:XmNshowValue :TRUE];
[self _addArg:XmNdecimalPoints :3];
return self;
}
- _getSizeAdjust:(NXSize *)size
{
size->width = 4;
size->height = 4;
return self;
}
- _copy
{
[super copy];
[self _addArg:XmNshowValue :TRUE];
[self _addArg:XmNdecimalPoints :3];
return self;
}
- _setMinValue
{
int intValue;
intValue = 1000.0*minValue;
[self _setArg:XmNminimum to:intValue];
return self;
}
- _setMaxValue
{
int intValue;
intValue = 1000.0*maxValue;
[self _setArg:XmNmaximum to:intValue];
return self;
}
- _setValue
{
int intValue;
intValue = 1000.0*value;
[self _setArg:XmNvalue to:intValue];
return self;
}
- (double)_value
{
int intValue;
[self _getArg:XmNvalue into:(XtArgVal *)&intValue];
value = intValue/1000.0;
return value;
}
- _setVertical:(BOOL)flag
{
int val;
if (flag)
val = XmVERTICAL;
else
val = XmHORIZONTAL;
/* Cannot be set after widget is "_managedBy" */
[self _addArg:XmNorientation :val];
return self;
}
- (int)_isVertical
{
int val;
XtVaGetValues(widgetid, XmNorientation, &val, NULL);
return (val==XmVERTICAL);
}
- _addCallback
{
XtAddCallback(widgetid, XmNdragCallback, theCallback, self);
XtAddCallback(widgetid, XmNvalueChangedCallback, theCallback, self);
return self;
}
- _managedBy:parent wid:(void *)widget
{
[self _setArg:XmNmarginWidth to:0];
[self _setArg:XmNmarginHeight to:0];
[self _setArg:XmNsensitive to:True];
[super _managedBy:parent wid:widget];
return self;
}
/* Private methods not declared in interface */
- _wasDragged
{
wasDragged = YES;
[self sendAction];
return self;
}
- _valueChanged
{
if ( wasDragged ) {
wasDragged = NO; /* to one message at end of dragging */
return self;
}
[self sendAction];
return self;
}
@end
static void
theCallback(Widget w,
XtPointer client_data,
XtPointer call_data)
{
SliderCell* slider = (SliderCell *)client_data;
XmScaleCallbackStruct *cb = (XmScaleCallbackStruct *)call_data;
switch (cb->reason) {
case XmCR_DRAG:
[slider _wasDragged];
break;
case XmCR_VALUE_CHANGED:
[slider _valueChanged];
break;
default:
break;
}
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.