This is xmScroller.m in view mode; [Download] [Up]
/* Motif WidgetSet category for implementation of Scoller class * * Copyright (C) 1993 The Board of Trustees of * The Leland Stanford Junior University. All Rights Reserved. * * Authors: Paul Kunz, Imran Qureshi, and Libing Wang * * This file is part of an Objective-C class library for X/Motif * * xmScroller.m,v 1.5 1995/04/17 22:45:13 fedor Exp */ #include "Scroller.h" #include "xtResponder.h" /* Required for implementation: */ #include "Motif.h" #include <Xm/ScrollBar.h> #include "stdmacros.h" /* For range and knob size, the following is scale factor used * by this implementation */ #define OS_SCALE_FACTOR 100 static void theCallback(Widget w, XtPointer client_data, XtPointer call_data) { Scroller *scrol = (Scroller *) client_data; XmScrollBarCallbackStruct *cb = (XmScrollBarCallbackStruct *) call_data; switch (cb->reason) { case XmCR_DRAG : [scrol trackKnob:NULL]; break; case XmCR_INCREMENT : [scrol _setHitPart: NX_INCLINE]; [scrol trackScrollButtons:NULL]; break; case XmCR_DECREMENT : [scrol _setHitPart: NX_DECLINE]; [scrol trackScrollButtons:NULL]; break; case XmCR_PAGE_INCREMENT : [scrol _setHitPart: NX_INCPAGE]; [scrol trackScrollButtons:NULL]; break; case XmCR_PAGE_DECREMENT : [scrol _setHitPart: NX_DECPAGE]; [scrol trackScrollButtons:NULL]; break; default: [scrol _setHitPart:NX_NOPART]; break; } } char *ScrollerInstanceName(void) { return "Scroller"; } @interface View(WidgetSet) - _init; @end @implementation Scroller(WidgetSet) - _init { [super _init]; instancename = ScrollerInstanceName(); classname = xmScrollBarWidgetClass; return self; } - (float)_floatValue { float f; int value; [self _getArg:XmNvalue into:(XtArgVal *)&value]; f = OS_SCALE_FACTOR - perCent; f = value / f; curValue = f * OS_SCALE_FACTOR; return f; } - _setFloatValue:(float)aFloat { int value; curValue = aFloat * OS_SCALE_FACTOR; value = aFloat * (OS_SCALE_FACTOR - perCent); /* edge of bar */ [self _setArg:XmNvalue to:value]; return self; } - _setFloatValue:(float)aFloat :(float)percent { int oldCent = perCent; perCent = percent * OS_SCALE_FACTOR; perCent = MAX(perCent, 1); if ( perCent < oldCent ) { [self _setArg:XmNsliderSize to:perCent]; [self _setFloatValue:aFloat]; } else { [self _setFloatValue:aFloat]; [self _setArg:XmNsliderSize to:perCent]; } return self; } - _addCallback { XtAddCallback(widgetid, XmNdragCallback, theCallback, self); XtAddCallback(widgetid, XmNincrementCallback, theCallback, self); XtAddCallback(widgetid, XmNdecrementCallback, theCallback, self); XtAddCallback(widgetid, XmNpageIncrementCallback, theCallback, self); XtAddCallback(widgetid, XmNpageDecrementCallback, theCallback, self); return self; } - _managedBy:parent wid:(void *)widget { int value; if ( isHoriz ) { value = XmHORIZONTAL; } else { value = XmVERTICAL; } [self _addArg:XmNorientation :value]; value = OS_SCALE_FACTOR; [self _addArg:XmNmaximum :value]; [super _managedBy:parent wid:widget]; return self; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.