Initial import of the CDE 2.1.30 sources from the Open Group.
This commit is contained in:
53
cde/examples/dtwidget/Makefile.hp
Normal file
53
cde/examples/dtwidget/Makefile.hp
Normal 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)
|
||||
53
cde/examples/dtwidget/Makefile.ibm
Normal file
53
cde/examples/dtwidget/Makefile.ibm
Normal 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)
|
||||
53
cde/examples/dtwidget/Makefile.novell
Normal file
53
cde/examples/dtwidget/Makefile.novell
Normal 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)
|
||||
53
cde/examples/dtwidget/Makefile.sun
Normal file
53
cde/examples/dtwidget/Makefile.sun
Normal 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)
|
||||
54
cde/examples/dtwidget/Makefile.uxp
Normal file
54
cde/examples/dtwidget/Makefile.uxp
Normal 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)
|
||||
8
cde/examples/dtwidget/README
Normal file
8
cde/examples/dtwidget/README
Normal 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.
|
||||
|
||||
469
cde/examples/dtwidget/controls.c
Normal file
469
cde/examples/dtwidget/controls.c
Normal 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);
|
||||
}
|
||||
|
||||
862
cde/examples/dtwidget/editor.c
Normal file
862
cde/examples/dtwidget/editor.c
Normal 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);
|
||||
}
|
||||
Reference in New Issue
Block a user