#if ( !defined(lint) && !defined(SABER) ) static char Xrcsid[] = "$XConsortium: Sme.c,v 1.6 89/12/11 15:20:07 kit Exp $"; #endif /* * Copyright 1989 Massachusetts Institute of Technology * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of M.I.T. not be used in advertising or * publicity pertaining to distribution of the software without specific, * written prior permission. M.I.T. makes no representations about the * suitability of this software for any purpose. It is provided "as is" * without express or implied warranty. * * M.I.T. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL M.I.T. * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ /* * Sme.c - Source code for the generic menu entry * * Date: September 26, 1989 * * By: Chris D. Peterson * MIT X Consortium * kit@expo.lcs.mit.edu */ #include #include #include #include <./Xaw3_1XawInit.h> #include <./Xaw3_1SmeP.h> #include <./Xaw3_1Cardinals.h> #define offset(field) XtOffset(SmeObject, sme.field) static XtResource resources[] = { {XtNcallback, XtCCallback, XtRCallback, sizeof(caddr_t), offset(callbacks), XtRCallback, (caddr_t)NULL}, }; #undef offset /* * Semi Public function definitions. */ static void Unhighlight(), Highlight(), Notify(), ClassPartInitialize(); static void Initialize(); static XtGeometryResult QueryGeometry(); #define SUPERCLASS (&rectObjClassRec) SmeClassRec smeClassRec = { { /* superclass */ (WidgetClass) SUPERCLASS, /* class_name */ "Sme", /* size */ sizeof(SmeRec), /* class_initialize */ XawInitializeWidgetSet, /* class_part_initialize*/ ClassPartInitialize, /* Class init'ed */ FALSE, /* initialize */ Initialize, /* initialize_hook */ NULL, /* realize */ NULL, /* actions */ NULL, /* num_actions */ ZERO, /* resources */ resources, /* resource_count */ XtNumber(resources), /* xrm_class */ NULLQUARK, /* compress_motion */ FALSE, /* compress_exposure */ FALSE, /* compress_enterleave*/ FALSE, /* visible_interest */ FALSE, /* destroy */ NULL, /* resize */ NULL, /* expose */ NULL, /* set_values */ NULL, /* set_values_hook */ NULL, /* set_values_almost */ XtInheritSetValuesAlmost, /* get_values_hook */ NULL, /* accept_focus */ NULL, /* intrinsics version */ XtVersion, /* callback offsets */ NULL, /* tm_table */ NULL, /* query_geometry */ QueryGeometry, /* display_accelerator*/ NULL, /* extension */ NULL },{ /* Simple Menu Entry Fields */ /* highlight */ Highlight, /* unhighlight */ Unhighlight, /* notify */ Notify, /* extension */ NULL } }; WidgetClass smeObjectClass = (WidgetClass) &smeClassRec; /************************************************************ * * Semi-Public Functions. * ************************************************************/ /* Function Name: ClassPartInitialize * Description: handles inheritance of class functions. * Arguments: class - the widget classs of this widget. * Returns: none. */ static void ClassPartInitialize(class) WidgetClass class; { SmeObjectClass m_ent, superC; m_ent = (SmeObjectClass) class; superC = (SmeObjectClass) m_ent->rect_class.superclass; /* * We don't need to check for null super since we'll get to TextSink * eventually. */ if (m_ent->sme_class.highlight == XtInheritHighlight) m_ent->sme_class.highlight = superC->sme_class.highlight; if (m_ent->sme_class.unhighlight == XtInheritUnhighlight) m_ent->sme_class.unhighlight = superC->sme_class.unhighlight; if (m_ent->sme_class.notify == XtInheritNotify) m_ent->sme_class.notify = superC->sme_class.notify; } /* Function Name: Initialize * Description: Initializes the simple menu widget * Arguments: request - the widget requested by the argument list. * new - the new widget with both resource and non * resource values. * Returns: none. * * MENU ENTRIES CANNOT HAVE BORDERS. */ /* ARGSUSED */ static void Initialize(request, new) Widget request, new; { SmeObject entry = (SmeObject) new; entry->rectangle.border_width = 0; } /* Function Name: Highlight * Description: The default highlight proceedure for menu entries. * Arguments: w - the menu entry. * Returns: none. */ /* ARGSUSED */ static void Highlight(w) Widget w; { /* This space intentionally left blank. */ } /* Function Name: Unhighlight * Description: The default unhighlight proceedure for menu entries. * Arguments: w - the menu entry. * Returns: none. */ /* ARGSUSED */ static void Unhighlight(w) Widget w; { /* This space intentionally left blank. */ } /* Function Name: Notify * Description: calls the callback proceedures for this entry. * Arguments: w - the menu entry. * Returns: none. */ static void Notify(w) Widget w; { XtCallCallbacks(w, XtNcallback, NULL); } /* Function Name: QueryGeometry. * Description: Returns the preferred geometry for this widget. * Arguments: w - the menu entry object. * itended, return - the intended and return geometry info. * Returns: A Geometry Result. * * See the Intrinsics manual for details on what this function is for. * * I just return the height and a width of 1. */ static XtGeometryResult QueryGeometry(w, intended, return_val) Widget w; XtWidgetGeometry *intended, *return_val; { SmeObject entry = (SmeObject) w; Dimension width; XtGeometryResult ret_val = XtGeometryYes; XtGeometryMask mode = intended->request_mode; width = 1; /* we can be really small. */ if ( ((mode & CWWidth) && (intended->width != width)) || !(mode & CWWidth) ) { return_val->request_mode |= CWWidth; return_val->width = width; mode = return_val->request_mode; if ( (mode & CWWidth) && (width == entry->rectangle.width) ) return(XtGeometryNo); return(XtGeometryAlmost); } return(ret_val); }