open-src/lib/libXaw4/sun-src/Xaw3_1Sme.c
changeset 749 d7a0cca9c876
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/open-src/lib/libXaw4/sun-src/Xaw3_1Sme.c	Wed Jul 15 16:27:02 2009 -0700
@@ -0,0 +1,238 @@
+#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 
+ *          [email protected]
+ */
+
+#include <stdio.h>
+#include <X11/IntrinsicP.h>
+#include <X11/StringDefs.h>
+
+#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);
+}