Initial import of the CDE 2.1.30 sources from the Open Group.

This commit is contained in:
Peter Howkins
2012-03-10 18:21:40 +00:00
commit 83b6996daa
18978 changed files with 3945623 additions and 0 deletions

View File

@@ -0,0 +1,53 @@
# $XConsortium: Makefile.hp /main/2 1996/05/13 11:52:14 drk $
##########################################################################
#
# Makefile for dtwidget examples (HP)
#
# (c) Copyright 1993, 1994 Hewlett-Packard Company
# (c) Copyright 1993, 1994 International Business Machines Corp.
# (c) Copyright 1993, 1994 Sun Microsystems, Inc.
# (c) Copyright 1993, 1994 Novell, Inc.
#
##########################################################################
CC = cc
RM = rm -f
PROGRAM1 = controls
SOURCES1 = controls.c
OBJECTS1 = controls.o
PROGRAM2 = editor
SOURCES2 = editor.c
OBJECTS2 = editor.o
DEFINES =
CDEBUGFLAGS = -O
CFLAGS = -Aa -z $(DEFINES) $(CDEBUGFLAGS)
DTINCLUDE = -I/usr/dt/include
X11INCLUDE = -I/usr/include/X11R5
INCLUDES = $(DTINCLUDE) $(X11INCLUDE)
DTLIBS = -L/usr/dt/lib -lDtWidget -lDtSvc -ltt -lXm
X11LIBS = -L/usr/lib/X11R5 -lXt -lX11
SYSLIBS =
LIBRARIES = $(DTLIBS) $(X11LIBS) $(SYSLIBS)
LDFLAGS =
.c.o:
${CC} -c $(CFLAGS) $(INCLUDES) $<
all:: $(PROGRAM1) $(PROGRAM2)
$(PROGRAM1):: $(OBJECTS1)
$(CC) -o $(PROGRAM1) $(LDFLAGS) $(OBJECTS1) $(LIBRARIES)
$(PROGRAM2):: $(OBJECTS2)
$(CC) -o $(PROGRAM2) $(LDFLAGS) $(OBJECTS2) $(LIBRARIES)
clean::
$(RM) $(PROGRAM1) $(OBJECTS1)
$(RM) $(PROGRAM2) $(OBJECTS2)

View File

@@ -0,0 +1,53 @@
# $XConsortium: Makefile.ibm /main/2 1996/05/13 11:52:29 drk $
##########################################################################
#
# Makefile for dtwidget examples (IBM)
#
# (c) Copyright 1993, 1994 Hewlett-Packard Company
# (c) Copyright 1993, 1994 International Business Machines Corp.
# (c) Copyright 1993, 1994 Sun Microsystems, Inc.
# (c) Copyright 1993, 1994 Novell, Inc.
#
##########################################################################
CC = cc
RM = rm -f
PROGRAM1 = controls
SOURCES1 = controls.c
OBJECTS1 = controls.o
PROGRAM2 = editor
SOURCES2 = editor.c
OBJECTS2 = editor.o
DEFINES =
CDEBUGFLAGS = -O
CFLAGS = $(DEFINES) $(CDEBUGFLAGS)
DTINCLUDE = -I/usr/dt/include
X11INCLUDE = -I/usr/include
INCLUDES = $(DTINCLUDE) $(X11INCLUDE)
DTLIBS = -L/usr/dt/lib -lDtWidget -lDtSvc -ltt -lXm
X11LIBS = -L/usr/lib -lXt -lX11
SYSLIBS =
LIBRARIES = $(DTLIBS) $(X11LIBS) $(SYSLIBS)
LDFLAGS =
.c.o:
$(CC) -c $(CFLAGS) $(INCLUDES) $<
all:: $(PROGRAM1) $(PROGRAM2)
$(PROGRAM1):: $(OBJECTS1)
$(CC) -o $(PROGRAM1) $(LDFLAGS) $(OBJECTS1) $(LIBRARIES)
$(PROGRAM2):: $(OBJECTS2)
$(CC) -o $(PROGRAM2) $(LDFLAGS) $(OBJECTS2) $(LIBRARIES)
clean::
$(RM) $(PROGRAM1) $(OBJECTS1)
$(RM) $(PROGRAM2) $(OBJECTS2)

View File

@@ -0,0 +1,53 @@
# $XConsortium: Makefile.novell /main/2 1996/05/13 11:52:47 drk $
##########################################################################
#
# Makefile for dtwidget examples (Novell)
#
# (c) Copyright 1993, 1994 Hewlett-Packard Company
# (c) Copyright 1993, 1994 International Business Machines Corp.
# (c) Copyright 1993, 1994 Sun Microsystems, Inc.
# (c) Copyright 1993, 1994 Novell, Inc.
#
##########################################################################
CC = cc
RM = rm -f
PROGRAM1 = controls
SOURCES1 = controls.c
OBJECTS1 = controls.o
PROGRAM2 = editor
SOURCES2 = editor.c
OBJECTS2 = editor.o
DEFINES =
CDEBUGFLAGS = -O
CFLAGS = -Xc $(DEFINES) $(CDEBUGFLAGS)
DTINCLUDE = -I/usr/dt/include
X11INCLUDE = -I/usr/X/include
INCLUDES = $(DTINCLUDE) $(X11INCLUDE)
DTLIBS = -L/usr/dt/lib -lDtWidget -lXm
X11LIBS = -L/usr/X/lib -lXt -lX11
SYSLIBS = -lw -lgen -lnsl -lresolv -lsocket -lXIM
LIBRARIES = $(DTLIBS) $(X11LIBS) $(SYSLIBS)
LDFLAGS =
.c.o:
$(CC) -c $(CFLAGS) $(INCLUDES) $<
all:: $(PROGRAM1) $(PROGRAM2)
$(PROGRAM1):: $(OBJECTS1)
$(CC) -o $(PROGRAM1) $(LDFLAGS) $(OBJECTS1) $(LIBRARIES)
$(PROGRAM2):: $(OBJECTS2)
$(CC) -o $(PROGRAM2) $(LDFLAGS) $(OBJECTS2) $(LIBRARIES)
clean::
$(RM) $(PROGRAM1) $(OBJECTS1)
$(RM) $(PROGRAM2) $(OBJECTS2)

View File

@@ -0,0 +1,53 @@
# $XConsortium: Makefile.sun /main/2 1996/05/13 11:53:03 drk $
##########################################################################
#
# Makefile for dtwidget examples (SUN)
#
# (c) Copyright 1993, 1994 Hewlett-Packard Company
# (c) Copyright 1993, 1994 International Business Machines Corp.
# (c) Copyright 1993, 1994 Sun Microsystems, Inc.
# (c) Copyright 1993, 1994 Novell, Inc.
#
##########################################################################
CC = cc
RM = rm -f
PROGRAM1 = controls
SOURCES1 = controls.c
OBJECTS1 = controls.o
PROGRAM2 = editor
SOURCES2 = editor.c
OBJECTS2 = editor.o
DEFINES =
CDEBUGFLAGS = -O
CFLAGS = $(DEFINES) $(CDEBUGFLAGS)
DTINCLUDE = -I/usr/dt/include
X11INCLUDE = -I/usr/openwin/include
INCLUDES = $(DTINCLUDE) $(X11INCLUDE)
DTLIBS = -L/usr/dt/lib -lDtWidget -lXm
X11LIBS = -L/usr/openwin/lib -lXt -lX11
SYSLIBS = -ldl -lw -lgen
LIBRARIES = $(DTLIBS) $(X11LIBS) $(SYSLIBS)
LDFLAGS = -R/usr/dt/lib:/usr/openwin/lib
.c.o:
$(CC) -c $(CFLAGS) $(INCLUDES) $<
all:: $(PROGRAM1) $(PROGRAM2)
$(PROGRAM1):: $(OBJECTS1)
$(CC) -o $(PROGRAM1) $(LDFLAGS) $(OBJECTS1) $(LIBRARIES)
$(PROGRAM2):: $(OBJECTS2)
$(CC) -o $(PROGRAM2) $(LDFLAGS) $(OBJECTS2) $(LIBRARIES)
clean::
$(RM) $(PROGRAM1) $(OBJECTS1)
$(RM) $(PROGRAM2) $(OBJECTS2)

View File

@@ -0,0 +1,54 @@
# $XConsortium: Makefile.uxp /main/2 1996/05/13 11:53:20 drk $
##########################################################################
#
# Makefile for dtwidget examples (UXP)
#
# (Fujitsu.patch applied)
#
# (c) Copyright 1993, 1994 Hewlett-Packard Company
# (c) Copyright 1993, 1994 International Business Machines Corp.
# (c) Copyright 1993, 1994 Sun Microsystems, Inc.
# (c) Copyright 1993, 1994 Novell, Inc.
#
##########################################################################
CC = cc
RM = rm -f
PROGRAM1 = controls
SOURCES1 = controls.c
OBJECTS1 = controls.o
PROGRAM2 = editor
SOURCES2 = editor.c
OBJECTS2 = editor.o
DEFINES =
CDEBUGFLAGS = -O
CFLAGS = -Xc $(DEFINES) $(CDEBUGFLAGS)
DTINCLUDE = -I/usr/dt/include
INCLUDES = $(DTINCLUDE)
DTLIBS = -L/usr/dt/lib -lDtWidget -lDtSvc -ltt -lXm
X11LIBS = -lXt -lX11
SYSLIBS = -lw -lgen -lnsl -lresolv -lsocket
LIBRARIES = $(DTLIBS) $(X11LIBS) $(SYSLIBS)
LDFLAGS =
.c.o:
$(CC) -c $(CFLAGS) $(INCLUDES) $<
all:: $(PROGRAM1) $(PROGRAM2)
$(PROGRAM1):: $(OBJECTS1)
$(CC) -o $(PROGRAM1) $(LDFLAGS) $(OBJECTS1) $(LIBRARIES)
$(PROGRAM2):: $(OBJECTS2)
$(CC) -o $(PROGRAM2) $(LDFLAGS) $(OBJECTS2) $(LIBRARIES)
clean::
$(RM) $(PROGRAM1) $(OBJECTS1)
$(RM) $(PROGRAM2) $(OBJECTS2)

View File

@@ -0,0 +1,8 @@
/* $XConsortium: README /main/2 1996/07/15 14:02:43 drk $ */
This directory contains demonstrations of the DtWidget library.
controls - Examples of DtSpinBox, DtComboBox and DtMenuButton controls.
editor - Example of the DtEditor widget.

View File

@@ -0,0 +1,469 @@
/* $XConsortium: controls.c /main/4 1995/10/27 10:41:00 rswiston $ */
/*
* (c) Copyright 1993, 1994 Hewlett-Packard Company
* (c) Copyright 1993, 1994 International Business Machines Corp.
* (c) Copyright 1993, 1994 Sun Microsystems, Inc.
* (c) Copyright 1993, 1994 Novell, Inc.
*/
/*
* controls.c
*
* Example code for libDtWidget controls
* (ComboBox, SpinBox, MenuButton)
*/
#include <Xm/XmAll.h>
#include <Xm/SSpinB.h>
#include <Dt/ComboBox.h>
#include <Dt/MenuButton.h>
#define ApplicationClass "Controls"
static void CreateSpinBoxes(Widget);
static void CreateComboBoxes(Widget);
static void CreateMenuButtons(Widget);
main(int argc, char **argv)
{
XtAppContext appContext;
Arg args[20];
int n;
Widget toplevel, mainWindow, spinContainer, comboContainer, menuContainer;
toplevel = XtAppInitialize(&appContext, ApplicationClass, NULL, 0,
&argc, argv, NULL, NULL, 0);
n = 0;
XtSetArg(args[n], XmNorientation, XmHORIZONTAL); n++;
XtSetArg(args[n], XmNspacing, 40); n++;
mainWindow = XmCreateWorkArea(toplevel, "mainWindow", args, n);
XtManageChild(mainWindow);
n = 0;
XtSetArg(args[n], XmNspacing, 20); n++;
spinContainer = XmCreateWorkArea(mainWindow, "spinContainer", args, n);
XtManageChild(spinContainer);
CreateSpinBoxes(spinContainer);
n = 0;
XtSetArg(args[n], XmNspacing, 20); n++;
comboContainer = XmCreateWorkArea(mainWindow, "comboContainer", args, n);
XtManageChild(comboContainer);
CreateComboBoxes(comboContainer);
n = 0;
XtSetArg(args[n], XmNspacing, 20); n++;
menuContainer = XmCreateWorkArea(mainWindow, "menuContainer", args, n);
XtManageChild(menuContainer);
CreateMenuButtons(menuContainer);
XtRealizeWidget(toplevel);
XtAppMainLoop(appContext);
}
/*
* Example code for XmSimpleSpinBox
*/
static char *spinValueStrings[] = {
"alpha", "beta", "gamma", "delta",
"epsilon", "zeta", "eta", "theta",
"iota", "kappa", "lambda", "mu",
"nu", "xi", "omicron", "pi",
"rho", "sigma", "tau", "upsilon",
"phi", "chi", "psi", "omega"
};
static void ModifyVerifyCb(Widget, XtPointer, XtPointer);
static void CreateSpinBoxes(Widget parent)
{
Widget titleLabel, spinBox;
XmString *valueXmstrings;
int numValueStrings;
XmString labelString;
Arg args[20];
int i, n;
/* Create value compound strings */
numValueStrings = XtNumber(spinValueStrings);
valueXmstrings = (XmString *)XtMalloc(numValueStrings * sizeof(XmString*));
for (i = 0; i < numValueStrings; i++) {
valueXmstrings[i] = XmStringCreateLocalized(spinValueStrings[i]);
}
/* Create title label */
labelString = XmStringCreateLocalized("SpinBox Widget");
n = 0;
XtSetArg(args[n], XmNlabelString, labelString); n++;
titleLabel = XmCreateLabel(parent, "title", args, n);
XtManageChild(titleLabel);
XmStringFree(labelString);
/*
* Create a SimpleSpinBox containing string values.
*/
n = 0;
XtSetArg(args[n], XmNvalues, valueXmstrings); n++;
XtSetArg(args[n], XmNnumValues, numValueStrings); n++;
XtSetArg(args[n], XmNcolumns, 10); n++;
spinBox = XmCreateSimpleSpinBox(parent, "spinBox1", args, n);
XtManageChild(spinBox);
/*
* Create a SpinBox containing numeric values to 3 decimal places.
* Position the arrows on either side of the displayed value.
*/
n = 0;
XtSetArg(args[n], XmNspinBoxChildType, XmNUMERIC); n++;
XtSetArg(args[n], XmNminimumValue, 1000); n++;
XtSetArg(args[n], XmNmaximumValue, 100000); n++;
XtSetArg(args[n], XmNincrementValue,1000); n++;
XtSetArg(args[n], XmNdecimalPoints,3); n++;
XtSetArg(args[n], XmNposition,1000); n++;
XtSetArg(args[n], XmNarrowLayout, XmARROWS_SPLIT); n++;
XtSetArg(args[n], XmNcolumns, 10); n++;
spinBox = XmCreateSimpleSpinBox(parent, "spinBox2", args, n);
XtManageChild(spinBox);
/*
* Create a SpinBox containing numeric values to 2 decimal places.
* Position the arrows on the left of the displayed value.
* Disallow alternate user changes by adding a modify/verify callback.
*/
n = 0;
XtSetArg(args[n], XmNspinBoxChildType, XmNUMERIC); n++;
XtSetArg(args[n], XmNminimumValue, 1500); n++;
XtSetArg(args[n], XmNmaximumValue, 60500); n++;
XtSetArg(args[n], XmNincrementValue,1500); n++;
XtSetArg(args[n], XmNdecimalPoints,2); n++;
XtSetArg(args[n], XmNposition,7500); n++;
XtSetArg(args[n], XmNarrowLayout, XmARROWS_FLAT_BEGINNING); n++;
XtSetArg(args[n], XmNcolumns, 10); n++;
spinBox = XmCreateSimpleSpinBox(parent, "spinBox3", args, n);
XtManageChild(spinBox);
XtAddCallback(spinBox, XmNmodifyVerifyCallback, ModifyVerifyCb, NULL);
/*
* Create a SpinBox containing string values.
* Position the arrows on the left of the display value
*/
n = 0;
XtSetArg(args[n], XmNvalues, valueXmstrings); n++;
XtSetArg(args[n], XmNnumValues, numValueStrings); n++;
XtSetArg(args[n], XmNarrowLayout, XmARROWS_BEGINNING); n++;
XtSetArg(args[n], XmNcolumns, 10); n++;
spinBox = XmCreateSimpleSpinBox(parent, "spinBox4", args, n);
XtManageChild(spinBox);
/*
* Create a SpinBox containing numeric values to 3 decimal places.
* Position the arrows on the right of the displayed value.
*/
n = 0;
XtSetArg(args[n], XmNspinBoxChildType, XmNUMERIC); n++;
XtSetArg(args[n], XmNminimumValue, 1000); n++;
XtSetArg(args[n], XmNmaximumValue, 100000); n++;
XtSetArg(args[n], XmNincrementValue,1000); n++;
XtSetArg(args[n], XmNdecimalPoints,3); n++;
XtSetArg(args[n], XmNposition,1000); n++;
XtSetArg(args[n], XmNarrowLayout, XmARROWS_FLAT_END); n++;
XtSetArg(args[n], XmNcolumns, 10); n++;
spinBox = XmCreateSimpleSpinBox(parent, "spinBox5", args, n);
XtManageChild(spinBox);
/*
* Free value strings, SpinBox has taken a copy.
*/
for (i = 0; i < numValueStrings; i++) {
XmStringFree(valueXmstrings[i]);
}
XtFree((char*)valueXmstrings);
}
/*
* modify/verify callback.
*
* Allow/disallow alternate user changes
*/
static void ModifyVerifyCb(Widget w, XtPointer cd, XtPointer cb)
{
XmSpinBoxCallbackStruct *scb= (XmSpinBoxCallbackStruct*)cb;
static Boolean allowChange = True;
scb->doit = allowChange;
if (allowChange == False) {
printf("XmSpinBox: XmNmodifyVerifyCallback. Change disallowed.\n");
XBell(XtDisplay(w), 0);
}
allowChange = (allowChange == True) ? False : True;
}
/*
* Example code for DtComboBox
*/
static char *comboValueStrings[] = {
"alpha", "beta", "gamma", "delta",
"epsilon", "zeta", "eta", "theta",
"iota", "kappa", "lambda", "mu",
"nu", "xi", "omicron", "pi",
"rho", "sigma", "tau", "upsilon",
"phi", "chi", "psi", "omega"
};
static char *colorStrings[] = { "Red", "Yellow", "Green", "Brown", "Blue" };
static void CreateComboBoxes(Widget parent)
{
Widget titleLabel, comboBox, list;
XmString *valueXmstrings, *colorXmstrings;
int numValueStrings, numColorStrings;
XmString labelString, xmString;
Arg args[20];
int i, n;
/* Create value compound strings */
numValueStrings = XtNumber(comboValueStrings);
valueXmstrings = (XmString *)XtMalloc(numValueStrings * sizeof(XmString*));
for (i = 0; i < numValueStrings; i++) {
valueXmstrings[i] = XmStringCreateLocalized(comboValueStrings[i]);
}
/* Create color compound strings */
numColorStrings = XtNumber(colorStrings);
colorXmstrings = (XmString *)XtMalloc(numColorStrings * sizeof(XmString*));
for (i = 0; i < numColorStrings; i++) {
colorXmstrings[i] = XmStringCreateLocalized(colorStrings[i]);
}
/* Create title label */
labelString = XmStringCreateLocalized("ComboBox Widget");
n = 0;
XtSetArg(args[n], XmNlabelString, labelString); n++;
titleLabel = XmCreateLabel(parent, "title", args, n);
XtManageChild(titleLabel);
XmStringFree(labelString);
/*
* Create an editable ComboBox containing the color strings.
* Get the widget id of the drop down list, add some greek
* letter names to it, and make more items visible.
*/
n = 0;
XtSetArg(args[n], DtNcomboBoxType, DtDROP_DOWN_COMBO_BOX); n++;
XtSetArg(args[n], DtNitems, colorXmstrings); n++;
XtSetArg(args[n], DtNitemCount, numColorStrings); n++;
XtSetArg(args[n], DtNvisibleItemCount, 5); n++;
XtSetArg(args[n], DtNcolumns, 10); n++;
comboBox = DtCreateComboBox(parent, "comboBox1", args, n);
XtManageChild(comboBox);
list = XtNameToWidget(comboBox, "*List");
XmListAddItems(list, valueXmstrings, 10, 0);
XtVaSetValues(list, XmNvisibleItemCount, 10, NULL);
/*
* Create an editable ComboBox with no entries.
* Get the widget id of the drop down list, add some greek
* letter names to it and select the third item in the list.
*/
n = 0;
XtSetArg(args[n], DtNcomboBoxType, DtDROP_DOWN_COMBO_BOX); n++;
XtSetArg(args[n], DtNorientation, DtLEFT); n++;
XtSetArg(args[n], DtNcolumns, 10); n++;
comboBox = DtCreateComboBox(parent, "comboBox2", args, n);
XtManageChild(comboBox);
list = XtNameToWidget(comboBox, "*List");
XmListAddItems(list, valueXmstrings, 7, 0);
XtVaSetValues(list, XmNvisibleItemCount, 7, NULL);
XtVaSetValues(comboBox, DtNselectedPosition, 3, NULL);
/*
* Create a non-editable ComboBox containing some greek letter names.
* Position the arrow on the left.
* Select the 'gamma' item in the list.
*/
n = 0;
XtSetArg(args[n], DtNorientation, DtLEFT); n++;
XtSetArg(args[n], DtNitems, valueXmstrings); n++;
XtSetArg(args[n], DtNitemCount, numValueStrings); n++;
XtSetArg(args[n], DtNvisibleItemCount, 8); n++;
comboBox = DtCreateComboBox(parent, "comboBox3", args, n);
XtManageChild(comboBox);
xmString = XmStringCreateLocalized("gamma");
XtVaSetValues(comboBox, DtNselectedItem, xmString, NULL);
XmStringFree(xmString);
/*
* Create a non-editable ComboBox with no entries.
* Position the arrow on the right.
* Add the greek letter names to the list and select the fourth item.
*/
n = 0;
XtSetArg(args[n], DtNorientation, DtRIGHT); n++;
XtSetArg(args[n], DtNvisibleItemCount, 8); n++;
comboBox = DtCreateComboBox(parent, "comboBox4", args, n);
XtManageChild(comboBox);
for (i = 0; i < numValueStrings; i++) {
DtComboBoxAddItem(comboBox, valueXmstrings[i], 0, True);
}
XtVaSetValues(comboBox, DtNselectedPosition, 4, NULL);
/*
* Free value and color strings, ComboBox has taken a copy.
*/
for (i = 0; i < numValueStrings; i++) {
XmStringFree(valueXmstrings[i]);
}
XtFree((char*)valueXmstrings);
for (i = 0; i < numColorStrings; i++) {
XmStringFree(colorXmstrings[i]);
}
XtFree((char*)colorXmstrings);
}
/*
* Example code for DtMenuButton
*/
/* MenuButton custom glyph */
#define menu_glyph_width 16
#define menu_glyph_height 16
static unsigned char menu_glyph_bits[] = {
0xe0, 0x03, 0x98, 0x0f, 0x84, 0x1f, 0x82, 0x3f, 0x82, 0x3f, 0x81, 0x7f,
0x81, 0x7f, 0xff, 0x7f, 0xff, 0x40, 0xff, 0x40, 0xfe, 0x20, 0xfe, 0x20,
0xfc, 0x10, 0xf8, 0x0c, 0xe0, 0x03, 0x00, 0x00};
static void CreateMenuButtons(Widget parent)
{
Widget menuButton, submenu, titleLabel, button;
Pixmap cascadePixmap;
Pixel fg, bg;
Cardinal depth;
XmString labelString;
Arg args[20];
int i, n;
/* Create title label */
labelString = XmStringCreateLocalized("MenuButton Widget");
n = 0;
XtSetArg(args[n], XmNlabelString, labelString); n++;
titleLabel = XmCreateLabel(parent, "title", args, n);
XtManageChild(titleLabel);
XmStringFree(labelString);
/*
* Create a MenuButton.
* Add push buttons to the built-in popup menu.
*/
labelString = XmStringCreateLocalized("Action");
n = 0;
XtSetArg(args[n], XmNlabelString, labelString); n++;
menuButton = DtCreateMenuButton(parent, "menuButton1", args, n);
XtManageChild(menuButton);
XmStringFree(labelString);
XtVaGetValues(menuButton, DtNsubMenuId, &submenu, NULL);
button = XmCreatePushButton(submenu, "Push", NULL, 0);
XtManageChild(button);
button = XmCreatePushButton(submenu, "Pull", NULL, 0);
XtManageChild(button);
button = XmCreatePushButton(submenu, "Turn", NULL, 0);
XtManageChild(button);
/*
* Create a MenuButton.
* Replace the built-in popup menu with a tear-off menu.
* Add a custom pixmap in the colors of the MenuButton.
*/
labelString = XmStringCreateLocalized("Movement");
n = 0;
XtSetArg(args[n], XmNlabelString, labelString); n++;
menuButton = DtCreateMenuButton(parent, "menuButton1", args, n);
XtManageChild(menuButton);
XmStringFree(labelString);
/* Create a tear-off menu */
n = 0;
XtSetArg(args[0], XmNtearOffModel, XmTEAR_OFF_ENABLED); n++;
submenu = XmCreatePopupMenu(menuButton, "submenu", args, n);
button = XmCreatePushButton(submenu, "Run", NULL, 0);
XtManageChild(button);
button = XmCreatePushButton(submenu, "Jump", NULL, 0);
XtManageChild(button);
button = XmCreatePushButton(submenu, "Stop", NULL, 0);
XtManageChild(button);
XtVaSetValues(menuButton, DtNsubMenuId, submenu, NULL);
/* Create a pixmap using the menu button's colors and depth */
XtVaGetValues(menuButton,
XmNforeground, &fg,
XmNbackground, &bg,
XmNdepth, &depth,
NULL);
cascadePixmap = XCreatePixmapFromBitmapData(XtDisplay(menuButton),
DefaultRootWindow(XtDisplay(menuButton)),
(char*)menu_glyph_bits,
menu_glyph_width, menu_glyph_height,
fg, bg, depth);
XtVaSetValues(menuButton, DtNcascadePixmap, cascadePixmap, NULL);
}

View File

@@ -0,0 +1,862 @@
/* $TOG: editor.c /main/4 1998/04/02 18:18:47 rafi $ */
/*
* (c) Copyright 1993, 1994 Hewlett-Packard Company
* (c) Copyright 1993, 1994 International Business Machines Corp.
* (c) Copyright 1993, 1994 Sun Microsystems, Inc.
* (c) Copyright 1993, 1994 Novell, Inc.
*/
/*
* editor.c
*
* A simple editor based on the DtEditor widget.
*/
#include <stdio.h>
#include <locale.h>
#include <Xm/XmAll.h>
#include <Dt/Editor.h>
/*
* Constants
*/
#define ApplicationClass "Editor"
/*
* Types
*/
typedef struct _AppData {
XtAppContext appContext;
Display *display;
Widget top;
Widget mainWindow;
Widget menuBar;
Widget editor;
Widget messageTextF;
Widget fileSelectionBox;
Widget cutButton;
Widget copyButton;
Widget clearButton;
Widget deleteButton;
Widget deselectButton;
Widget cutPopupButton;
Widget copyPopupButton;
Boolean wordWrapOn;
Boolean statusLineOn;
Boolean overstrikeModeOn;
} AppData;
/*
* Used to specify whether data is being loaded, inserted, or saved
* from the editor. Used used by the FSB and its callbacks.
*/
typedef enum _LoadSaveType {
LOAD_DATA,
INSERT_DATA,
SAVE_DATA
} LoadSaveType;
/*
* Data
*/
static AppData ad;
/*
* Functions
*/
static void SetResizeHints(void);
static void DisplayMessage(char *);
static Widget CreateMenuBar(Widget);
static Widget CreatePopupMenu(Widget);
static Widget CreateEditor(Widget);
static Widget CreateButton(Widget, String, char, XtCallbackProc, XtPointer);
static Widget CreateToggle(Widget, String, char, XtCallbackProc, XtPointer, Boolean);
static Widget CreateCascade(Widget, String, char, Widget);
static void PopupHandler(Widget, XtPointer, XEvent*, Boolean*);
static void SetSelectionState(Boolean);
/*
* main
*/
void main(int argc, char **argv)
{
Arg al[10];
int ac;
XtSetLanguageProc( (XtAppContext)NULL, (XtLanguageProc)NULL,
(XtPointer)NULL );
/* Initialize the application's data */
ad.fileSelectionBox = (Widget) NULL;
ad.wordWrapOn = False;
ad.statusLineOn = False;
ad.overstrikeModeOn = False;
/* Initialize the toolkit and open the display */
ad.top = XtAppInitialize(&ad.appContext, ApplicationClass, NULL, 0,
&argc, argv, NULL, NULL, 0);
ad.display = XtDisplay(ad.top);
/* Create MainWindow. */
ac = 0;
ad.mainWindow = (Widget) XmCreateMainWindow (ad.top, "main", al, ac);
XtManageChild (ad.mainWindow);
/* Create MenuBar in MainWindow. */
ad.menuBar = CreateMenuBar(ad.mainWindow);
XtManageChild(ad.menuBar);
/* Create editor widget in MainWindow. */
ad.editor = CreateEditor(ad.mainWindow);
XtManageChild(ad.editor);
ad.messageTextF = DtEditorGetMessageTextFieldID(ad.editor);
/* Create the editor popup menu */
CreatePopupMenu(ad.editor);
/* Set the main window widgets. */
XmMainWindowSetAreas(ad.mainWindow, ad.menuBar, NULL, NULL, NULL, ad.editor);
/* Realize toplevel widget */
XtRealizeWidget (ad.top);
/* Set the resize increment and minimum window size properties. */
SetResizeHints();
/* Set up menu buttons dependent on selection */
SetSelectionState(False);
XtAppMainLoop(ad.appContext);
}
/************************************************************************
*
* Callbacks
*
************************************************************************/
/*
* File menu callbacks
*/
static void ResetEditorCb(Widget w, XtPointer cd, XtPointer cb)
{
DtEditorReset(ad.editor);
}
static void OpenFileCb( Widget w, XtPointer cd, XtPointer cb)
{
DtEditorErrorCode error;
XmFileSelectionBoxCallbackStruct *fcb = (XmFileSelectionBoxCallbackStruct *) cb;
LoadSaveType LoadSaveFlag = (LoadSaveType)cd;
char *name = (char *) XtMalloc( sizeof(char) * fcb->length + 1 );
name[0] ='\0';
/*
* Get the name of the file & pass it to the editor widget
*/
name = XmStringUnparse(fcb->value, NULL, XmCHARSET_TEXT,
XmCHARSET_TEXT, NULL, 0, XmOUTPUT_ALL);
/*
* Load or insert the file, as specified
*/
if ( LoadSaveFlag == LOAD_DATA )
error = DtEditorSetContentsFromFile(ad.editor, name);
else
error = DtEditorInsertFromFile(ad.editor, name);
switch (error)
{
case DtEDITOR_NO_ERRORS:
{
DisplayMessage("File loaded");
break;
}
case DtEDITOR_NULLS_REMOVED:
{
DisplayMessage( "All embedded null characters removed from the file" );
break;
}
case DtEDITOR_READ_ONLY_FILE:
{
DisplayMessage( "The file is write protected" );
break;
}
case DtEDITOR_NONEXISTENT_FILE:
{
DisplayMessage( "Could not find file" );
break;
}
case DtEDITOR_DIRECTORY:
{
DisplayMessage( "The name given is a directory" );
break;
}
case DtEDITOR_CHAR_SPECIAL_FILE:
{
DisplayMessage( "The name given is a character special device" );
break;
}
case DtEDITOR_BLOCK_MODE_FILE:
{
DisplayMessage( "The name given is a block mode device");
break;
}
case DtEDITOR_INSUFFICIENT_MEMORY:
{
DisplayMessage( "Not enough available memory to load file");
break;
}
case DtEDITOR_UNREADABLE_FILE:
default:
{
DisplayMessage( "Could not read the file" );
break;
}
}
/*
* Remove the OK callback so it can be added again with a new value for
* the LoadSaveFlag flag.
*/
XtRemoveCallback(w, XmNokCallback, OpenFileCb, cd);
/*
* Remove the FSB dialog & clean up
*/
XtUnmanageChild(w);
XtFree (name);
}
static void SaveAsFileCb(Widget w, XtPointer cd, XtPointer cb)
{
DtEditorContentRec cr;
DtEditorErrorCode error;
Boolean overWrite = False,
hardCarriageReturns = True,
markContentsAsSaved = True;
XmFileSelectionBoxCallbackStruct *fcb = (XmFileSelectionBoxCallbackStruct *)cb;
LoadSaveType LoadSaveFlag = (LoadSaveType) cd;
char *name = XtMalloc(sizeof(char) * fcb->length + 1 );
name[0] ='\0';
XmStringGetLtoR(fcb->value, XmFONTLIST_DEFAULT_TAG, &name);
/*
* Ask the widget to save its contents to the named file.
*/
error = DtEditorSaveContentsToFile(ad.editor, name, overWrite,
hardCarriageReturns, markContentsAsSaved);
switch(error)
{
case DtEDITOR_NO_ERRORS:
{
DisplayMessage( "The file has been saved" );
break;
}
case DtEDITOR_UNWRITABLE_FILE:
{
DisplayMessage( "The file is read only" );
break;
}
case DtEDITOR_WRITABLE_FILE:
{
DisplayMessage( "File not saved, it already exists" );
break;
}
case DtEDITOR_DIRECTORY:
{
DisplayMessage( "The name given is a directory" );
break;
}
case DtEDITOR_CHAR_SPECIAL_FILE:
{
DisplayMessage( "The name given is a character special device" );
break;
}
case DtEDITOR_BLOCK_MODE_FILE:
{
DisplayMessage( "The name given is a block mode device");
break;
}
case DtEDITOR_SAVE_FAILED:
default:
{
DisplayMessage( "Could not save the file. Check disc space" );
break;
}
}
/*
* Remove the OK callback so it can be added again with a new value for
* the LoadSaveFlag flag.
*/
XtRemoveCallback(w, XmNokCallback, SaveAsFileCb, cd);
/*
* Remove the FSB dialog & clean up
*/
XtUnmanageChild( w );
XtFree (name);
}
static void CancelOpenCb(Widget w, XtPointer cd, XtPointer cb)
{
/* Remove the OK callback so it can be added again with a new value for
* the LoadSaveFlag flag.
*/
XtRemoveCallback(w, XmNokCallback, OpenFileCb, cd);
/* Remove the FSB dialog & clean up */
XtUnmanageChild(w);
}
static void DisplayFsbCb(Widget w, XtPointer cd, XtPointer cb)
{
Arg al[10];
int ac;
XmString tmpStr1, tmpStr2;
LoadSaveType LoadSaveFlag = (LoadSaveType) cd;
/* Create the FSB, if we need to */
if (ad.fileSelectionBox == (Widget) NULL)
{
ac = 0;
ad.fileSelectionBox = XmCreateFileSelectionDialog(ad.mainWindow,
"file_sel_dlg",
al, ac);
XtAddCallback(ad.fileSelectionBox, XmNcancelCallback, CancelOpenCb,
(XtPointer)LoadSaveFlag);
}
/*
* Set FSB title & label depending up whether loading, inserting, or
* saving a container.
*/
switch ( LoadSaveFlag )
{
case LOAD_DATA:
{
tmpStr1 = XmStringCreateLocalized("Open a File");
tmpStr2 = XmStringCreateLocalized("File to open");
/*
* Add the OK callback so the curent value of the LoadSaveFlag
* flag is passed in.
*/
XtAddCallback(ad.fileSelectionBox, XmNokCallback, OpenFileCb,
(XtPointer)LoadSaveFlag);
break;
}
case INSERT_DATA:
{
tmpStr1 = XmStringCreateLocalized("Include a File");
tmpStr2 = XmStringCreateLocalized("File to include");
/*
* Add the OK callback so the curent value of the LoadSaveFlag
* flag is passed in.
*/
XtAddCallback(ad.fileSelectionBox, XmNokCallback, OpenFileCb,
(XtPointer)LoadSaveFlag);
break;
}
case SAVE_DATA:
{
tmpStr1 = XmStringCreateLocalized("Save to File");
tmpStr2 = XmStringCreateLocalized("Save to file");
/*
* Add the OK callback so the save as callback is called.
*/
XtAddCallback(ad.fileSelectionBox, XmNokCallback, SaveAsFileCb,
(XtPointer)LoadSaveFlag);
break;
}
default:
{
break;
}
}
XtVaSetValues(ad.fileSelectionBox,
XmNdialogTitle, tmpStr1,
XmNselectionLabelString, tmpStr1,
NULL);
XmStringFree(tmpStr1);
XmStringFree(tmpStr2);
/* Display the FSB */
XtManageChild (ad.fileSelectionBox);
}
static void ExitCb(Widget w, XtPointer cd, XtPointer cb)
{
exit(0);
}
/*****************************************************
*
* Edit menu callbacks
*
*/
static void UndoCb(Widget w, XtPointer cd, XtPointer cb)
{
DtEditorUndoEdit(ad.editor);
}
static void CutCb(Widget w, XtPointer cd, XtPointer cb)
{
DtEditorCutToClipboard(ad.editor);
}
static void CopyCb(Widget w, XtPointer cd, XtPointer cb)
{
DtEditorCopyToClipboard(ad.editor);
}
static void PasteCb(Widget w, XtPointer cd, XtPointer cb)
{
DtEditorPasteFromClipboard(ad.editor);
}
static void ClearCb(Widget w, XtPointer cd, XtPointer cb)
{
DtEditorClearSelection(ad.editor);
}
static void DeleteCb(Widget w, XtPointer cd, XtPointer cb)
{
DtEditorDeleteSelection(ad.editor);
}
static void SelectAllCb(Widget w, XtPointer cd, XtPointer cb)
{
DtEditorSelectAll(ad.editor);
}
static void DeselectCb(Widget w, XtPointer cd, XtPointer cb)
{
DtEditorDeselect(ad.editor);
}
static void FindCb(Widget w, XtPointer cd, XtPointer cb)
{
DtEditorInvokeFindChangeDialog(ad.editor);
}
static void SpellCb(Widget w, XtPointer cd, XtPointer cb)
{
DtEditorInvokeSpellDialog(ad.editor);
}
/*****************************************************
*
* Format menu callbacks
*
*/
static void FormatAllCb(Widget w, XtPointer cd, XtPointer cb)
{
DtEditorFormat(ad.editor, (DtEditorFormatSettings *) NULL,
DtEDITOR_FORMAT_ALL);
}
static void FormatParaCb(Widget w, XtPointer cd, XtPointer cb)
{
DtEditorFormat(ad.editor, (DtEditorFormatSettings *) NULL,
DtEDITOR_FORMAT_PARAGRAPH);
}
static void InvokeFormatDlgCb(Widget w, XtPointer cd, XtPointer cb)
{
DtEditorInvokeFormatDialog(ad.editor);
}
/*****************************************************
*
* Options menu callbacks
*
*/
static void OverstrikeCb(Widget w, XtPointer cd, XtPointer cb)
{
ad.overstrikeModeOn = ad.overstrikeModeOn ? False : True;
XtVaSetValues(ad.editor, DtNoverstrike, ad.overstrikeModeOn, NULL);
}
static void StatusLineCb(Widget w, XtPointer cd, XtPointer cb)
{
ad.statusLineOn = ad.statusLineOn ? False : True;
XtVaSetValues(ad.editor, DtNshowStatusLine, ad.statusLineOn, NULL);
/* Reset the resize increment and minimum window size properties. */
SetResizeHints();
}
static void WordWrapCb(Widget w, XtPointer cd, XtPointer cb)
{
ad.wordWrapOn = ad.wordWrapOn ? False : True;
XtVaSetValues(ad.editor, DtNwordWrap, ad.wordWrapOn, NULL);
}
/*****************************************************
*
* Editor callbacks
*
*/
static void HelpCb(Widget w, XtPointer cd, XtPointer cb)
{
DtEditorHelpCallbackStruct *ecb = (DtEditorHelpCallbackStruct *)cb;
DisplayMessage( "Received a request for help");
}
static void TextSelectedCb(Widget w, XtPointer cd, XtPointer cb)
{
SetSelectionState(True);
}
static void TextUnselectedCb(Widget w, XtPointer cd, XtPointer cb)
{
SetSelectionState(False);
}
static void SetSelectionState(Boolean state)
{
XtSetSensitive(ad.cutButton, state);
XtSetSensitive(ad.copyButton, state);
XtSetSensitive(ad.deleteButton, state);
XtSetSensitive(ad.clearButton, state);
XtSetSensitive(ad.deselectButton, state);
XtSetSensitive(ad.cutPopupButton, state);
XtSetSensitive(ad.copyPopupButton, state);
}
/************************************************************************
*
* PROCEDURES
*
************************************************************************/
/************************************************************************
*
* SetResizeHints - Set the resize increment properties
*
*/
static void SetResizeHints(void)
{
XSizeHints sh;
Dimension MBheight;
DtEditorGetSizeHints(ad.editor, &sh);
/*
* Add Menu Bar height to the height of the Editor widget
*/
XtVaGetValues( ad.menuBar, XmNheight, &MBheight, NULL);
sh.min_height += MBheight;
sh.base_height += MBheight;
XSetWMSizeHints(ad.display, XtWindow(ad.top), &sh, XA_WM_NORMAL_HINTS);
}
/************************************************************************
*
* DisplayMessage - Display message in DtEditor's message area
*
*/
static void DisplayMessage(char *message)
{
XmTextFieldSetString(ad.messageTextF, message);
}
/************************************************************************
*
* CreateFileMenu - Create the File pulldown menu
*
*/
static Widget CreateFileMenu(Widget menuBar)
{
Widget fileMenu;
fileMenu = (Widget) XmCreatePulldownMenu (menuBar, "fileMenu", NULL, 0);
CreateCascade(menuBar, "File", 'F', fileMenu);
CreateButton(fileMenu, "New", 'N', ResetEditorCb, NULL);
CreateButton(fileMenu, "Open...", 'O', DisplayFsbCb, (XtPointer)LOAD_DATA);
CreateButton(fileMenu, "Include...", 'I', DisplayFsbCb,
(XtPointer)INSERT_DATA);
XtManageChild(XmCreateSeparatorGadget(fileMenu, "sep1", NULL, 0));
CreateButton(fileMenu, "Save As...", 'A', DisplayFsbCb, (XtPointer)SAVE_DATA);
XtManageChild(XmCreateSeparatorGadget(fileMenu, "sep2", NULL, 0));
CreateButton(fileMenu, "Exit", 'x', ExitCb, NULL);
return (fileMenu);
}
/************************************************************************
*
* CreateEditMenu - Create the Edit pulldown menu
*
*/
static Widget CreateEditMenu(Widget menuBar)
{
Widget editMenu;
editMenu = XmCreatePulldownMenu (menuBar, "editMenu", NULL, 0);
CreateCascade(menuBar, "Edit", 'E', editMenu);
CreateButton(editMenu, "Undo", 'U', UndoCb, NULL);
XtManageChild(XmCreateSeparatorGadget(editMenu, "sep1", NULL, 0));
ad.cutButton = CreateButton(editMenu, "Cut", 't', CutCb, NULL);
ad.copyButton = CreateButton(editMenu, "Copy", 'C', CopyCb, NULL);
CreateButton(editMenu, "Paste", 'P', PasteCb, NULL);
ad.clearButton = CreateButton(editMenu, "Clear", 'e', ClearCb, NULL);
ad.deleteButton = CreateButton(editMenu, "Delete", 't', DeleteCb, NULL);
CreateButton(editMenu, "Select All", 'S', SelectAllCb, NULL);
ad.deselectButton = CreateButton(editMenu, "Deselect", 'D', DeselectCb, NULL);
XtManageChild(XmCreateSeparatorGadget(editMenu, "sep2", NULL, 0));
CreateButton(editMenu, "Find/Change...", 'F', FindCb, (XtPointer)ad.editor);
CreateButton(editMenu, "Check Spelling...", 'p', SpellCb, (XtPointer)ad.editor);
return (editMenu);
}
/************************************************************************
*
* CreateFormatMenu - Create the FormatEdit pulldown menu
*
*/
static Widget CreateFormatMenu(Widget menuBar)
{
Widget formatMenu;
formatMenu = XmCreatePulldownMenu (menuBar, "formatMenu", NULL, 0);
CreateCascade(menuBar, "Format", 'r', formatMenu);
CreateButton(formatMenu, "Settings...", 'S', InvokeFormatDlgCb, NULL);
CreateButton(formatMenu, "All", 'A', FormatAllCb, NULL);
CreateButton(formatMenu, "Paragraph", 'P', FormatParaCb, NULL);
return (formatMenu);
}
/************************************************************************
*
* CreateOptionsMenu - Create the Options pulldown menu
*
*/
static Widget CreateOptionsMenu(Widget menuBar)
{
Widget optionsMenu;
optionsMenu = XmCreatePulldownMenu (menuBar, "optionsMenu", NULL, 0);
CreateCascade(menuBar, "Options", 'O', optionsMenu);
CreateToggle(optionsMenu, "Overstrike", 'O', OverstrikeCb, NULL, ad.overstrikeModeOn);
CreateToggle(optionsMenu, "Word Wrap", 'W', WordWrapCb, NULL,ad.wordWrapOn);
XtManageChild(XmCreateSeparatorGadget(optionsMenu, "sep1", NULL, 0));
CreateToggle(optionsMenu, "Status Line", 'S', StatusLineCb, NULL, ad.statusLineOn);
return (optionsMenu);
}
/*
* CreatePopupMenu - Create popup menu in editor window
*/
static Widget CreatePopupMenu(Widget parent)
{
Widget popupMenu;
Widget fileMenu;
Widget editMenu;
popupMenu = XmCreatePopupMenu(parent, "popupMenu", NULL, 0);
XtAddEventHandler(parent, ButtonPressMask, False, PopupHandler,
(XtPointer)popupMenu);
fileMenu = XmCreatePulldownMenu (popupMenu, "fileMenu", NULL, 0);
CreateCascade(popupMenu, "File", 'F', fileMenu);
CreateButton(fileMenu, "Open...", 'O', DisplayFsbCb, (XtPointer)LOAD_DATA);
CreateButton(fileMenu, "Include...", 'I', DisplayFsbCb,
(XtPointer)INSERT_DATA);
CreateButton(fileMenu, "Save As...", 'A', DisplayFsbCb, (XtPointer)SAVE_DATA);
CreateButton(fileMenu, "New", 'N', ResetEditorCb, NULL);
editMenu = XmCreatePulldownMenu (popupMenu, "editMenu", NULL, 0);
CreateCascade(popupMenu, "Edit", 'E', editMenu);
CreateButton(editMenu, "Undo", 'U', UndoCb, (XtPointer)LOAD_DATA);
ad.cutPopupButton = CreateButton(editMenu, "Cut", 't', CutCb, NULL);
ad.copyPopupButton = CreateButton(editMenu, "Copy", 'C', CopyCb, NULL);
CreateButton(editMenu, "Paste", 'P', PasteCb, NULL);
CreateButton(popupMenu, "Find/Change...", 'F', FindCb, (XtPointer)ad.editor);
return (popupMenu);
}
static void PopupHandler(Widget w, XtPointer cd, XEvent *event, Boolean *ctd)
{
if (((XButtonEvent *)event)->button != Button3) return;
XmMenuPosition((Widget)cd, (XButtonEvent *)event);
XtManageChild ((Widget)cd);
}
/*
* CreateMenuBar - Create MenuBar in MainWindow
*/
static Widget CreateMenuBar(Widget parent)
{
Widget menuBar;
menuBar = XmCreateMenuBar(parent, "menuBar", NULL, 0);
CreateFileMenu(menuBar);
CreateEditMenu(menuBar);
CreateFormatMenu(menuBar);
CreateOptionsMenu(menuBar);
return (menuBar);
}
/*
* CreateEditor - Create the editor widget
*/
static Widget CreateEditor(Widget parent)
{
Widget w;
Arg al[10];
int ac;
/* create editor widget */
ac = 0;
XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++;
XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++;
XtSetArg(al[ac], XmNtopAttachment, XmATTACH_FORM); ac++;
XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_FORM); ac++;
XtSetArg(al[ac], DtNrows, 40); ac++;
XtSetArg(al[ac], DtNcolumns, 80); ac++;
w = DtCreateEditor(parent, "editor", al, ac);
/* Add callbacks */
XtAddCallback(w, DtNtextSelectCallback, TextSelectedCb, (XtPointer) w);
XtAddCallback(w, DtNtextDeselectCallback, TextUnselectedCb, (XtPointer) w);
XtAddCallback(w, XmNhelpCallback, HelpCb, NULL);
return(w);
}
static Widget CreateButton(Widget parent, String label, char mnemonic, XtCallbackProc callback, XtPointer callData)
{
Widget button;
XmString labelString;
Arg al[10];
int ac;
labelString = XmStringCreateLocalized(label);
ac = 0;
XtSetArg(al[ac], XmNlabelString, labelString); ac++;
XtSetArg(al[ac], XmNmnemonic, mnemonic); ac++;
button = XmCreatePushButtonGadget(parent, label, al, ac);
XtAddCallback(button, XmNactivateCallback, callback, callData);
XtManageChild(button);
XmStringFree(labelString);
return(button);
}
static Widget CreateToggle(Widget parent, String label, char mnemonic, XtCallbackProc callback, XtPointer callData, Boolean value)
{
Widget button;
XmString labelString;
Arg al[10];
int ac;
labelString = XmStringCreateLocalized(label);
ac = 0;
XtSetArg(al[ac], XmNlabelString, labelString); ac++;
XtSetArg(al[ac], XmNmnemonic, mnemonic); ac++;
XtSetArg(al[ac], XmNvisibleWhenOff, True); ac++;
XtSetArg(al[ac], XmNset, value); ac++;
button = XmCreateToggleButtonGadget(parent, label, al, ac);
XtAddCallback(button, XmNvalueChangedCallback, callback, callData);
XtManageChild(button);
XmStringFree(labelString);
return(button);
}
static Widget CreateCascade(Widget parent, String label, char mnemonic, Widget subMenu)
{
Widget button;
XmString labelString;
Arg al[10];
int ac;
labelString = XmStringCreateLocalized(label);
ac = 0;
XtSetArg(al[ac], XmNlabelString, labelString); ac++;
XtSetArg(al[ac], XmNsubMenuId, subMenu); ac++;
XtSetArg(al[ac], XmNmnemonic, mnemonic); ac++;
button = XmCreateCascadeButtonGadget(parent, label, al, ac);
XtManageChild(button);
XmStringFree(labelString);
return(button);
}