|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Motif
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Copyright (c) 1987-2012, The Open Group. All rights reserved.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* These libraries and programs are free software; you can
|
|
Packit |
b099d7 |
* redistribute them and/or modify them under the terms of the GNU
|
|
Packit |
b099d7 |
* Lesser General Public License as published by the Free Software
|
|
Packit |
b099d7 |
* Foundation; either version 2 of the License, or (at your option)
|
|
Packit |
b099d7 |
* any later version.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* These libraries and programs are distributed in the hope that
|
|
Packit |
b099d7 |
* they will be useful, but WITHOUT ANY WARRANTY; without even the
|
|
Packit |
b099d7 |
* implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
Packit |
b099d7 |
* PURPOSE. See the GNU Lesser General Public License for more
|
|
Packit |
b099d7 |
* details.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* You should have received a copy of the GNU Lesser General Public
|
|
Packit |
b099d7 |
* License along with these librararies and programs; if not, write
|
|
Packit |
b099d7 |
* to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
|
|
Packit |
b099d7 |
* Floor, Boston, MA 02110-1301 USA
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* HISTORY
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
#ifdef REV_INFO
|
|
Packit |
b099d7 |
#ifndef lint
|
|
Packit |
b099d7 |
static char rcsid[] = "$XConsortium: Simple.c /main/11 1995/09/19 23:08:54 cde-sun $"
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#ifdef HAVE_CONFIG_H
|
|
Packit |
b099d7 |
#include <config.h>
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#include <stdio.h>
|
|
Packit |
b099d7 |
#include <X11/StringDefs.h>
|
|
Packit |
b099d7 |
#include <Xm/RowColumnP.h>
|
|
Packit |
b099d7 |
#include <Xm/PushBG.h>
|
|
Packit |
b099d7 |
#include <Xm/ToggleBG.h>
|
|
Packit |
b099d7 |
#include <Xm/CascadeBG.h>
|
|
Packit |
b099d7 |
#include <Xm/LabelG.h>
|
|
Packit |
b099d7 |
#include <Xm/SeparatoG.h>
|
|
Packit |
b099d7 |
#include "XmI.h"
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/******** Static Function Declarations ********/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void EvaluateConvenienceStructure(
|
|
Packit |
b099d7 |
Widget wid,
|
|
Packit |
b099d7 |
XmSimpleMenu sm) ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/******** End Static Function Declarations ********/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static XtResource SimpleMenuResources[] =
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
{ XmNbuttonCount, XmCButtonCount, XmRInt, sizeof(int),
|
|
Packit |
b099d7 |
XtOffsetOf( struct _XmSimpleMenuRec, count),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer) 0
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
{ XmNpostFromButton, XmCPostFromButton, XmRInt, sizeof(int),
|
|
Packit |
b099d7 |
XtOffsetOf( struct _XmSimpleMenuRec, post_from_button),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer) -1
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
{ XmNsimpleCallback, XmCCallback, XmRCallbackProc,
|
|
Packit |
b099d7 |
sizeof(XtCallbackProc), XtOffsetOf( struct _XmSimpleMenuRec, callback),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer) NULL
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
{ XmNbuttons, XmCButtons, XmRXmStringTable,
|
|
Packit |
b099d7 |
sizeof(XmStringTable), XtOffsetOf( struct _XmSimpleMenuRec, label_string),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer) NULL
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
{ XmNbuttonAccelerators, XmCButtonAccelerators, XmRStringTable,
|
|
Packit |
b099d7 |
sizeof(String *), XtOffsetOf( struct _XmSimpleMenuRec, accelerator),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer) NULL
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
{ XmNbuttonAcceleratorText, XmCButtonAcceleratorText,
|
|
Packit |
b099d7 |
XmRXmStringTable, sizeof(XmStringTable),
|
|
Packit |
b099d7 |
XtOffsetOf( struct _XmSimpleMenuRec, accelerator_text),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer) NULL
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
{ XmNbuttonMnemonics, XmCButtonMnemonics, XmRKeySymTable,
|
|
Packit |
b099d7 |
sizeof(XmKeySymTable), XtOffsetOf( struct _XmSimpleMenuRec, mnemonic),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer) NULL
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
{ XmNbuttonMnemonicCharSets, XmCButtonMnemonicCharSets,
|
|
Packit |
b099d7 |
XmRCharSetTable, sizeof(XmStringCharSetTable),
|
|
Packit |
b099d7 |
XtOffsetOf( struct _XmSimpleMenuRec, mnemonic_charset),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer) NULL
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
{ XmNbuttonType, XmCButtonType, XmRButtonType,
|
|
Packit |
b099d7 |
sizeof(XmButtonTypeTable), XtOffsetOf( struct _XmSimpleMenuRec, button_type),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer) NULL
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
{ XmNbuttonSet, XmCButtonSet, XmRInt,
|
|
Packit |
b099d7 |
sizeof(int), XtOffsetOf( struct _XmSimpleMenuRec, button_set),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer) -1
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
{ XmNoptionLabel, XmCOptionLabel, XmRXmString,
|
|
Packit |
b099d7 |
sizeof(XmString), XtOffsetOf( struct _XmSimpleMenuRec, option_label),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer) NULL
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
{ XmNoptionMnemonic, XmCOptionMnemonic, XmRKeySym,
|
|
Packit |
b099d7 |
sizeof (KeySym), XtOffsetOf( struct _XmSimpleMenuRec, option_mnemonic),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer) NULL
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
};
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
EvaluateConvenienceStructure(
|
|
Packit |
b099d7 |
Widget wid,
|
|
Packit |
b099d7 |
XmSimpleMenu sm )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmRowColumnWidget rc = (XmRowColumnWidget) wid ;
|
|
Packit |
b099d7 |
int i, n;
|
|
Packit |
b099d7 |
char name_buf[20];
|
|
Packit |
b099d7 |
int button_count = 0;
|
|
Packit |
b099d7 |
int separator_count = 0;
|
|
Packit |
b099d7 |
int label_count = 0;
|
|
Packit |
b099d7 |
Arg args[6];
|
|
Packit |
b099d7 |
Widget child;
|
|
Packit |
b099d7 |
XmButtonType btype;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
for (i = 0; i < sm->count; i++)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
if (sm->label_string && sm->label_string[i])
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNlabelString, sm->label_string[i]);
|
|
Packit |
b099d7 |
n++;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
if (sm->accelerator && sm->accelerator[i])
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNaccelerator, sm->accelerator[i]);
|
|
Packit |
b099d7 |
n++;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
if (sm->accelerator_text && sm->accelerator_text[i])
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNacceleratorText,
|
|
Packit |
b099d7 |
sm->accelerator_text[i]);
|
|
Packit |
b099d7 |
n++;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
if (sm->mnemonic && sm->mnemonic[i])
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNmnemonic, sm->mnemonic[i]);
|
|
Packit |
b099d7 |
n++;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
if (sm->mnemonic_charset && sm->mnemonic_charset[i])
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNmnemonicCharSet,
|
|
Packit |
b099d7 |
sm->mnemonic_charset[i]);
|
|
Packit |
b099d7 |
n++;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Dynamic Defaulting of button type */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (sm->button_type && sm->button_type[i])
|
|
Packit |
b099d7 |
btype = sm->button_type[i];
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
btype = XmNONE;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (btype == XmNONE)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if (rc->row_column.type == XmMENU_BAR)
|
|
Packit |
b099d7 |
btype = XmCASCADEBUTTON;
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
btype = XmPUSHBUTTON;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
switch (btype)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
case XmTITLE:
|
|
Packit |
b099d7 |
sprintf(name_buf,"label_%d", label_count++);
|
|
Packit |
b099d7 |
child = XtCreateManagedWidget( name_buf,
|
|
Packit |
b099d7 |
xmLabelGadgetClass, (Widget) rc, args, n);
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case XmDOUBLE_SEPARATOR:
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNseparatorType, XmDOUBLE_LINE); n++;
|
|
Packit |
b099d7 |
case XmSEPARATOR:
|
|
Packit |
b099d7 |
sprintf(name_buf,"separator_%d", separator_count++);
|
|
Packit |
b099d7 |
child = XtCreateManagedWidget(name_buf,
|
|
Packit |
b099d7 |
xmSeparatorGadgetClass, (Widget) rc, args, n);
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case XmPUSHBUTTON:
|
|
Packit |
b099d7 |
sprintf(name_buf,"button_%d", button_count++);
|
|
Packit |
b099d7 |
child = XtCreateManagedWidget(name_buf,
|
|
Packit |
b099d7 |
xmPushButtonGadgetClass,
|
|
Packit |
b099d7 |
(Widget) rc, args, n);
|
|
Packit |
b099d7 |
if (sm->callback)
|
|
Packit |
b099d7 |
XtAddCallback(child,
|
|
Packit |
b099d7 |
XmNactivateCallback, sm->callback,
|
|
Packit |
b099d7 |
(XtPointer)(unsigned long)(button_count - 1));
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case XmRADIOBUTTON:
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNindicatorType, XmONE_OF_MANY); n++;
|
|
Packit |
b099d7 |
case XmCHECKBUTTON:
|
|
Packit |
b099d7 |
sprintf(name_buf,"button_%d", button_count++);
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNindicatorOn, TRUE); n++;
|
|
Packit |
b099d7 |
child = XtCreateManagedWidget(name_buf,
|
|
Packit |
b099d7 |
xmToggleButtonGadgetClass,
|
|
Packit |
b099d7 |
(Widget) rc, args, n);
|
|
Packit |
b099d7 |
if (sm->callback)
|
|
Packit |
b099d7 |
XtAddCallback(child,
|
|
Packit |
b099d7 |
XmNvalueChangedCallback, sm->callback,
|
|
Packit |
b099d7 |
(XtPointer)(unsigned long)(button_count - 1));
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case XmCASCADEBUTTON:
|
|
Packit |
b099d7 |
sprintf(name_buf,"button_%d", button_count++);
|
|
Packit |
b099d7 |
child = XtCreateManagedWidget(name_buf,
|
|
Packit |
b099d7 |
xmCascadeButtonGadgetClass,
|
|
Packit |
b099d7 |
(Widget) rc, args, n);
|
|
Packit |
b099d7 |
if (sm->callback)
|
|
Packit |
b099d7 |
XtAddCallback(child,
|
|
Packit |
b099d7 |
XmNactivateCallback, sm->callback,
|
|
Packit |
b099d7 |
(XtPointer)(unsigned long)(button_count - 1));
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
default:
|
|
Packit |
b099d7 |
/* this is an error condition */
|
|
Packit |
b099d7 |
;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Widget
|
|
Packit |
b099d7 |
XmCreateSimpleMenuBar(
|
|
Packit |
b099d7 |
Widget parent,
|
|
Packit |
b099d7 |
String name,
|
|
Packit |
b099d7 |
ArgList args,
|
|
Packit |
b099d7 |
Cardinal arg_count )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Widget rc;
|
|
Packit |
b099d7 |
XmSimpleMenuRec mr;
|
|
Packit |
b099d7 |
_XmWidgetToAppContext(parent);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmAppLock(app);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtGetSubresources(parent, &mr, name, XmCSimpleMenuBar,
|
|
Packit |
b099d7 |
SimpleMenuResources, XtNumber(SimpleMenuResources),
|
|
Packit |
b099d7 |
args, arg_count);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
rc = XmCreateMenuBar(parent, name, args, arg_count);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
EvaluateConvenienceStructure( rc, &mr;;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmAppUnlock(app);
|
|
Packit |
b099d7 |
return(rc);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Widget
|
|
Packit |
b099d7 |
XmCreateSimplePopupMenu(
|
|
Packit |
b099d7 |
Widget parent,
|
|
Packit |
b099d7 |
String name,
|
|
Packit |
b099d7 |
ArgList args,
|
|
Packit |
b099d7 |
Cardinal arg_count )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Widget rc;
|
|
Packit |
b099d7 |
XmSimpleMenuRec mr;
|
|
Packit |
b099d7 |
_XmWidgetToAppContext(parent);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmAppLock(app);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtGetSubresources(parent, &mr, name, XmCSimplePopupMenu,
|
|
Packit |
b099d7 |
SimpleMenuResources, XtNumber(SimpleMenuResources),
|
|
Packit |
b099d7 |
args, arg_count);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
rc = XmCreatePopupMenu(parent, name, args, arg_count);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
EvaluateConvenienceStructure( rc, &mr;;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmAppUnlock(app);
|
|
Packit |
b099d7 |
return(rc);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Widget
|
|
Packit |
b099d7 |
XmCreateSimplePulldownMenu(
|
|
Packit |
b099d7 |
Widget parent,
|
|
Packit |
b099d7 |
String name,
|
|
Packit |
b099d7 |
ArgList args,
|
|
Packit |
b099d7 |
Cardinal arg_count )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Widget rc;
|
|
Packit |
b099d7 |
XmSimpleMenuRec mr;
|
|
Packit |
b099d7 |
int n, i;
|
|
Packit |
b099d7 |
Arg local_args[3];
|
|
Packit |
b099d7 |
WidgetList buttons;
|
|
Packit |
b099d7 |
Cardinal num_buttons;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmWidgetToAppContext(parent);
|
|
Packit |
b099d7 |
_XmAppLock(app);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtGetSubresources(parent, &mr, name, XmCSimplePulldownMenu,
|
|
Packit |
b099d7 |
SimpleMenuResources, XtNumber(SimpleMenuResources),
|
|
Packit |
b099d7 |
args, arg_count);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
rc = XmCreatePulldownMenu(parent, name, args, arg_count);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
EvaluateConvenienceStructure(rc, &mr;;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (mr.post_from_button >= 0)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(local_args[n], XtNchildren, &buttons); n++;
|
|
Packit |
b099d7 |
XtSetArg(local_args[n], XtNnumChildren, &num_buttons); n++;
|
|
Packit |
b099d7 |
XtGetValues(parent, local_args, n);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (!num_buttons)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/* error condition */
|
|
Packit |
b099d7 |
_XmAppUnlock(app);
|
|
Packit |
b099d7 |
return(rc);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
for (i = 0; i < num_buttons; i++)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if (((XmIsCascadeButtonGadget(buttons[i])) ||
|
|
Packit |
b099d7 |
(XmIsCascadeButton(buttons[i])))
|
|
Packit |
b099d7 |
&&
|
|
Packit |
b099d7 |
(i == mr.post_from_button))
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ( i < num_buttons)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(local_args[n], XmNsubMenuId, rc); n++;
|
|
Packit |
b099d7 |
XtSetValues(buttons[i], local_args, n);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
_XmAppUnlock(app);
|
|
Packit |
b099d7 |
return(rc);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Widget
|
|
Packit |
b099d7 |
XmCreateSimpleOptionMenu(
|
|
Packit |
b099d7 |
Widget parent,
|
|
Packit |
b099d7 |
String name,
|
|
Packit |
b099d7 |
ArgList args,
|
|
Packit |
b099d7 |
Cardinal arg_count )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Widget rc, sub_rc;
|
|
Packit |
b099d7 |
XmSimpleMenuRec mr;
|
|
Packit |
b099d7 |
int n, i, button_count;
|
|
Packit |
b099d7 |
Arg local_args[5];
|
|
Packit |
b099d7 |
WidgetList buttons;
|
|
Packit |
b099d7 |
Cardinal num_buttons;
|
|
Packit |
b099d7 |
_XmWidgetToAppContext(parent);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmAppLock(app);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtGetSubresources(parent, &mr, name, XmCSimpleOptionMenu,
|
|
Packit |
b099d7 |
SimpleMenuResources, XtNumber(SimpleMenuResources),
|
|
Packit |
b099d7 |
args, arg_count);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
rc = XmCreateOptionMenu(parent, name, args, arg_count);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
sub_rc = XmCreatePulldownMenu(parent, name, args, arg_count);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
EvaluateConvenienceStructure(sub_rc, &mr;;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
if (mr.option_label)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XtSetArg(local_args[n], XmNlabelString, mr.option_label); n++;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
if (mr.option_mnemonic)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XtSetArg(local_args[n], XmNmnemonic, mr.option_mnemonic); n++;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtSetArg(local_args[n], XmNsubMenuId, sub_rc); n++;
|
|
Packit |
b099d7 |
XtSetValues(rc, local_args, n);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (mr.button_set >= 0)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(local_args[n], XtNchildren, &buttons); n++;
|
|
Packit |
b099d7 |
XtSetArg(local_args[n], XtNnumChildren, &num_buttons); n++;
|
|
Packit |
b099d7 |
XtGetValues(sub_rc, local_args, n);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (!num_buttons)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/* error condition */
|
|
Packit |
b099d7 |
_XmAppUnlock(app);
|
|
Packit |
b099d7 |
return(rc);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
button_count = 0;
|
|
Packit |
b099d7 |
for (i = 0; i < num_buttons; i++)
|
|
Packit |
b099d7 |
{ /* count only PushB */
|
|
Packit |
b099d7 |
if ((XmIsPushButtonGadget(buttons[i])) ||
|
|
Packit |
b099d7 |
(XmIsPushButton(buttons[i])))
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if (button_count == mr.button_set)
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
button_count++;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ( i < num_buttons)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(local_args[n], XmNmenuHistory, buttons[i]); n++;
|
|
Packit |
b099d7 |
XtSetValues(rc, local_args, n);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmAppUnlock(app);
|
|
Packit |
b099d7 |
return(rc);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Widget
|
|
Packit |
b099d7 |
XmCreateSimpleRadioBox(
|
|
Packit |
b099d7 |
Widget parent,
|
|
Packit |
b099d7 |
String name,
|
|
Packit |
b099d7 |
ArgList args,
|
|
Packit |
b099d7 |
Cardinal arg_count )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Arg local_args[5];
|
|
Packit |
b099d7 |
Widget rc, child;
|
|
Packit |
b099d7 |
int i, n;
|
|
Packit |
b099d7 |
XmSimpleMenuRec mr;
|
|
Packit |
b099d7 |
char name_buf[20];
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
rc = XmCreateRadioBox(parent, name, args, arg_count);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtGetSubresources(parent, &mr, name, XmCSimpleRadioBox,
|
|
Packit |
b099d7 |
SimpleMenuResources, XtNumber(SimpleMenuResources),
|
|
Packit |
b099d7 |
args, arg_count);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
for(i=0; i < mr.count; i++)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
sprintf(name_buf,"button_%d", i);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
if (mr.label_string && mr.label_string[i])
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XtSetArg(local_args[n],
|
|
Packit |
b099d7 |
XmNlabelString, mr.label_string[i]); n++;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
if (mr.button_set == i)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XtSetArg(local_args[n], XmNset, TRUE); n++;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
child = XtCreateManagedWidget(name_buf,
|
|
Packit |
b099d7 |
xmToggleButtonGadgetClass, (Widget) rc, local_args, n);
|
|
Packit |
b099d7 |
if (mr.callback)
|
|
Packit |
b099d7 |
XtAddCallback(child, XmNvalueChangedCallback,
|
|
Packit |
b099d7 |
mr.callback, (XtPointer)(unsigned long)i);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return(rc);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Widget
|
|
Packit |
b099d7 |
XmCreateSimpleCheckBox(
|
|
Packit |
b099d7 |
Widget parent,
|
|
Packit |
b099d7 |
String name,
|
|
Packit |
b099d7 |
ArgList args,
|
|
Packit |
b099d7 |
Cardinal arg_count )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Arg local_args[5];
|
|
Packit |
b099d7 |
Widget rc, child;
|
|
Packit |
b099d7 |
int i, n;
|
|
Packit |
b099d7 |
XmSimpleMenuRec mr;
|
|
Packit |
b099d7 |
char name_buf[20];
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
rc = XmCreateRadioBox(parent, name, args, arg_count);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(local_args[n], XmNradioBehavior, FALSE); n++;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtSetValues(rc, local_args, n);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtGetSubresources(parent, &mr, name, XmCSimpleCheckBox,
|
|
Packit |
b099d7 |
SimpleMenuResources, XtNumber(SimpleMenuResources),
|
|
Packit |
b099d7 |
args, arg_count);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
for(i=0; i < mr.count; i++)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
sprintf(name_buf,"button_%d", i);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
if (mr.label_string && mr.label_string[i])
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XtSetArg(local_args[n],
|
|
Packit |
b099d7 |
XmNlabelString, mr.label_string[i]); n++;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
child = XtCreateManagedWidget(name_buf,
|
|
Packit |
b099d7 |
xmToggleButtonGadgetClass, (Widget) rc, local_args, n);
|
|
Packit |
b099d7 |
if (mr.callback)
|
|
Packit |
b099d7 |
XtAddCallback(child, XmNvalueChangedCallback,
|
|
Packit |
b099d7 |
mr.callback, (XtPointer)(unsigned long)i);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return(rc);
|
|
Packit |
b099d7 |
}
|