This is xmCell.m in view mode; [Download] [Up]
/* X/Motif WidgetSet category implementation of Cell class * * Copyright (C) 1994, 1995 The Board of Trustees of * The Leland Stanford Junior University. All Rights Reserved. * * Authors: Scott Francis, Fred Harris, Paul Kunz, * Imran Qureshi, and Libing Wang * At: Stanford Linear Accelerator Center, Stanford University and * University of Hawaii * * This file is part of an Objective-C class library for X/Motif * * xmCell.m,v 1.17 1995/04/22 23:12:37 pfkeb Exp */ #include "Cell.h" #include "xtCell.h" #include <stdlib.h> #include "Motif.h" #include <Xm/PushB.h> #define Window X11Window #include <X11/IntrinsicP.h> #undef Window #include "Application.h" #include "Control.h" extern char *xtCellInstanceName(void); char *CellInstanceName(void) { return xtCellInstanceName(); } /* Private methods of Motif interface */ @implementation Cell(WidgetSet) - _setFont { char *fontName = "-adobe-helvetica-medium-r-*-*-12-*-*-*-*-*-*-*"; XFontStruct *font; XmFontList fontList; Display *disp = [NXApp _X_display]; Pixel black; font = XLoadQueryFont( disp, fontName ); fontList = XmFontListCreate( font, XmSTRING_DEFAULT_CHARSET ); black = XBlackPixel(disp, XDefaultScreen(disp)); [self _setArg:XmNfontList to:(XtArgVal)fontList]; [self _setArg:XmNforeground to:black]; return self; } - _moveTo:(NXCoord)x :(NXCoord)y { XtMoveWidget(widgetid, x, y); return self; } - _setEnabled:(BOOL)flag { [self _setArg:XmNsensitive to:flag]; return self; } - _setAdjustedFrame:(const NXRect *)aFrame { NXRect rect; NXSize size; rect = *aFrame; [self _getSizeAdjust:&size]; rect.size.width += size.width; rect.size.height += size.height; [self _setArg:XmNx to:rect.origin.x]; [self _setArg:XmNy to:rect.origin.y]; [self _setArg:XmNwidth to:rect.size.width]; [self _setArg:XmNheight to:rect.size.height]; return self; } - _setFrame:(const NXRect *)frame inView:(Control *)aView { controlView = aView; if ( !frame ) return self; _frame = *frame; if ( controlView ) { NXRect vrect, xframe; [controlView getFrame:&vrect]; xframe = _frame; xframe.origin.y = vrect.size.height - _frame.size.height - _frame.origin.y; [self _setAdjustedFrame:&xframe]; } else { fprintf(stderr, "Cell error: no controlView to set frame\n"); } return self; } - _setSize:(const NXSize *)size { _frame.size = *size; [self _setArg:XmNwidth to:_frame.size.width]; [self _setArg:XmNheight to:_frame.size.height]; [self _setArg:XmNrecomputeSize to:False]; return self; } - _getSizeAdjust:(NXSize *)size { /* Any cell that needs its control View to increase its size * should override this method and return the size adjustment */ if ( size ) { size->width = 0; size->height = 0; } return self; } - _getFrame:(NXRect *)frame { [self _getArg:XmNx into:(XtArgVal *)&frame->origin.x]; [self _getArg:XmNy into:(XtArgVal *)&frame->origin.y]; [self _getArg:XmNwidth into:(XtArgVal *)&frame->size.width]; [self _getArg:XmNheight into:(XtArgVal *)&frame->size.height]; if ( controlView) { NXRect rect; [controlView getFrame:&rect]; frame->origin.y = rect.size.height - frame->origin.y - frame->size.height; } else { fprintf(stderr, "Cell error: no controlView to compute frame\n"); } return self; } - _addCallback { return self; } - _managedBy:parent { Widget widparent; if (!(widparent = [parent _widget])) if ( ![parent respondsTo:@selector(superview)] || !(widparent = [[parent perform:@selector(superview)] _widget] ) ) { fprintf(stderr, "Cell: parent widget not found\n"); return 0; } [self _managedBy:parent wid:widparent]; return self; } - _managedBy:parent wid:(void *)widget; { if (!classname) { fprintf(stderr, "Cell classname unknown\n"); } if (widgetid) { XtManageChild(widgetid); } else { if ( !contents ) { /* if no contents yet, then make default */ // [self setStringValue:" "]; /* I don't think that the initial value should be set to a <space>. People will click in the uninitialized cell and type something in. The cursor will be placed after the <space>, and the entry will then have a <space> prepended. This is nasty for filenames! E.g. " temp.tmp" is a badly formed filename. */ [self setStringValue:""]; } [self _setFont]; widgetid = XtCreateManagedWidget(instancename, classname, widget, arglist, numargs); [self _addCallback]; } parentid = parent; return self; } - _destroy { if ( widgetid ) { XtDestroyWidget(widgetid); } widgetid = NULL; return self; } - (void *)_widget { return widgetid; } - _copy { /* On entry, receiving Cell has copy of pointers to objects from * another cell. These must be cleared so new objects can be * created */ allocedargs = numargs = 0; arglist = NULL; widgetid = NULL; return self; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.