This is xmMenuCell.m in view mode; [Download] [Up]
/* WidgetSet category implementation for MenuCell * * Copyright (C) 1994 The Board of Trustees of The Leland Stanford * Junior University. All Rights Reserved. * * Authors: Paul Kunz, Tom Pavel, and Libing Wang * * This file is part of an Objective-C class library for X/Motif * * xmMenuCell.m,v 1.6 1995/04/10 18:36:11 pfkeb Exp */ #include "MenuCell.h" #include "xtCell.h" /* Required for implementation: */ #include "Motif.h" #include "Menu.h" #include <Xm/CascadeB.h> #include <Xm/PushB.h> #include <Xm/PushB.h> #include <stdlib.h> /* for free() */ static void theCallback(Widget w, XtPointer client_data, XtPointer call_data) { MenuCell* mcid = (MenuCell*) client_data; XmPushButtonCallbackStruct* cb = (XmPushButtonCallbackStruct*) call_data; switch (cb->reason) { case XmCR_ACTIVATE: [mcid sendAction]; break; case XmCR_ARM: [mcid setState:1]; break; case XmCR_DISARM: [mcid setState:0]; break; default: } } char *MenuCellInstanceName(void) { return "MenuCell"; } @implementation MenuCell(WidgetSet) - _init { classname = xmPushButtonWidgetClass; return self; } - _setSubmenu { classname = xmCascadeButtonWidgetClass; return self; } - _addCallback { XtAddCallback(widgetid, XmNactivateCallback, theCallback, self); return self; } - _managedBy:parent wid:(void*)widget /* Pretty much the Button implementation of this method. Since that was originally what menuCell leveraged off of. Might want to change this if optimizations can be made. */ { parentid = parent; if ([self hasSubmenu]) { [subMenu _managedBy:self wid:widget]; [self _setArg:XmNsubMenuId to:(XtArgVal)[subMenu _widget]]; widgetid = XmCreateCascadeButton(widget, instancename, arglist, numargs); XtManageChild(widgetid); } else { widgetid = XtCreateManagedWidget(instancename, classname, widget, arglist, numargs); [self _addCallback]; } [self _setFont]; return self; } - _managedBy:parent { if (![parent _widget]) { fprintf(stderr, "MenuCell: parent widget not found\n"); return 0; } return [self _managedBy:parent wid:[parent _widget]]; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.