This is xmPopUpList.m in view mode; [Download] [Up]
/* Motif WidgetSet category for implementation of PopUpList 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 (SLAC) * Mike Kienenberger (Alaska) * * This file is part of an Objective-C class library for X/Motif * * xmPopUpList.m,v 1.9 1995/04/22 23:12:44 pfkeb Exp */ #include "PopUpList.h" #include "xtResponder.h" #include "Application.h" #include "Menu.h" #include <objc/List.h> #include "MenuCell.h" #include "Matrix.h" #include "Motif.h" #include <Xm/RowColumn.h> /* for XmCreateOptionMenu */ #include <Xm/PushB.h> #include <Xm/CascadeB.h> #include <string.h> #include <stdlib.h> char *PopUpListInstanceName(void) { return "PopUpList"; } @implementation PopUpList(WidgetSet) - _setFrame:(const NXRect *)aFrame inView:(View *)aView { List *cellList = [matrix cellList]; MenuCell *cell; NXSize size; int i; frame = *aFrame; contentView = aView; // the controlView; if ( aView ) { NXRect rect; int y; [contentView getFrame:&rect]; y = rect.size.height - NX_HEIGHT(aFrame) - NX_Y(aFrame); [self _addArg:XmNx :NX_X(aFrame)]; [self _addArg:XmNy :y]; [self _addArg:XmNwidth :NX_WIDTH(aFrame)]; [self _addArg:XmNheight :NX_HEIGHT(aFrame)]; } else { fprintf(stderr, "PopUpList error: no View to calculate frame\n"); } size = aFrame->size; size.width -= 28; // cells are smaller than popup frame size.height -= 2; _menu_type = 0; i = [cellList count]; while (i-- ) { cell = [cellList objectAt:i]; [cell _setSize:&size]; } cell = [matrix prototype]; [cell _setFrame:(NXRect *)0 inView:(Control *)contentView]; [matrix setCellSize:&size]; return self; } - _realizeNewItem { if ( widgetid ) { XtUnmanageChild((Widget) widgetid); XtDestroyWidget((Widget) widgetid); } [self _setFrame:&frame inView:contentView]; [self _managedBy:contentView wid:_parentwidget]; return self; } - _managedBy:parent wid:(void *)widget { List *cellList = [matrix cellList]; Widget menu_pane; int i, num; XmString xs; char *fontName = "-adobe-helvetica-medium-r-*-*-12-*-*-*-*-*-*-*"; XFontStruct *font; XmFontList fontList; Display *disp = [NXApp _X_display]; Pixel black; num = [cellList count]; if ( !num ) { widgetid = NULL; return self; } if (!widget) { return self; } xs = XmStringCreateSimple(""); font = XLoadQueryFont( disp, fontName ); fontList = XmFontListCreate( font, XmSTRING_DEFAULT_CHARSET ); black = XBlackPixel(disp, XDefaultScreen(disp)); [self _addArg:XmNfontList :(XtArgVal)fontList]; [self _addArg:XmNforeground :black]; [self _addArg:XmNmarginWidth :0]; [self _addArg:XmNmarginHeight :0]; if (0 == _menu_type) { menu_pane = XmCreatePulldownMenu(widget, "menu_pane", NULL, 0); for (i = 0; i < num; i++) [[cellList objectAt:i] _managedBy:self wid:menu_pane]; // set label to empty string! [self _addArg:XmNlabelString :(XtArgVal)xs]; [self _addArg:XmNsubMenuId :(XtArgVal)menu_pane]; widgetid = XmCreateOptionMenu(widget, instancename, arglist, numargs); } else { widgetid = XmCreatePulldownMenu(widget, instancename, arglist, numargs); for (i = 0; i < num; i++) [[cellList objectAt:i] _managedBy:self wid:widgetid]; } _parentwidget = widget; XtManageChild(widgetid); return self; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.