This appendix contains example programs for some of the new and extended IRIS IM widgets.
Makefiles are provided for some of these examples, but to use these examples, you need to:
Link with -lXm and -lSgm, making sure to put the -lSgm before -lXm. (To replace an unenhanced widget with the enhanced version of that widget in an existing program, you need to re-link.)
LLDLIBS = -lSgm -lXm -lXt -lX11 -lPW |
You must include -lSgm to get the enhanced look and the new widgets. If you do not include -lfileicon, you will get a runtime error, since the runtime loader won't be able to find needed symbols. The -lXm represents the enhanced version of libXm (IRIS IM).
Run the program with these resources:
*sgiMode: true *useSchemes: all *scheme: Base |
(Set them in your .Xdefaults file or create a file for your application in /usr/lib/X11/app-defaults.)
/*
* colortest.c --
* demonstration of quick-and-easy use of the color
* chooser widget.
*/
#include <stdio.h>
#include <Xm/Xm.h>
#include <Xm/Label.h>
#include <Xm/Form.h>
#include <Sgm/ColorC.h>
static void ColorCallback();
Widget label, colorc;
XtAppContext app;
#if 0
int sgidladd()
{
return 1;
}
#endif
main (argc, argv)
int argc;
char *argv[];
{
Widget toplevel, form;
Arg args[25];
int ac = 0;
toplevel = XtVaAppInitialize(&app, argv[0], NULL, 0, &argc, argv, NULL, NULL);
if (toplevel == (Widget)NULL) {
printf("AppInitialize failed!\n");
exit(1);
}
colorc = SgCreateColorChooserDialog(toplevel, "colorc", NULL, 0);
XtAddCallback(colorc, XmNapplyCallback, ColorCallback, (XtPointer)NULL);
XtManageChild(colorc);
form = XmCreateForm(toplevel, "Form", NULL, 0);
XtManageChild(form);
label = XmCreateLabel(form, "I am a color!", NULL, 0);
XtManageChild(label);
ac = 0;
XtRealizeWidget(toplevel);
XtAppMainLoop(app);
}
void ColorCallback(w, client_data, call_data)
Widget w;
XtPointer client_data, call_data;
{
Pixel white; /* fallback */
SgColorChooserCallbackStruct *cbs =(SgColorChooserCallbackStruct *)call_data;
Display *dpy = XtDisplay(label);
Screen *scr = XtScreen(label);
/*
* If we were willing to use private structure members,
* we could be sure to get the correct colormap by using
* label->core.colormap. For this demo, however,
* the default colormap will suffice in most cases.
*/
Colormap colormap = XDefaultColormapOfScreen(scr);
XColor mycolor;
Arg args[1];
white = WhitePixelOfScreen(scr);
mycolor.red = (unsigned short)(cbs->r<<8);
mycolor.green = (unsigned short)(cbs->g<<8);
mycolor.blue = (unsigned short)(cbs->b<<8);
mycolor.flags = (DoRed | DoGreen | DoBlue);
if (XAllocColor(dpy, colormap, &mycolor)) {
XtSetArg(args[0], XmNbackground, mycolor.pixel);
}
else {
fprintf(stderr, "No more colors!\n"); fflush(stderr);
XtSetArg(args[0], XmNbackground, white);
}
XtSetValues(label, args, 1);
}
|
ROOT = /
MYLIBS =
XLIBS = -lSgw -lSgm -lXm -lXt -lX11 -lgl
SYSLIBS = -lPW -lm -ll -ly
INCLUDES = -I. -I$(ROOT)usr/include
LDFLAGS = -L -L. -L$(ROOT)usr/lib $(MYLIBS) $(XLIBS) $(SYSLIBS)
all: colortest
colortest: colortest.o
cc -o colortest colortest.o $(LDFLAGS)
colortest.o: colortest.c
cc -g $(INCLUDES) -DDEBUG -D_NO_PROTO -c colortest.c
|
/*
* Mytest.c --
* create and manage a dial widget.
* Test its resource settings through menu/button actions.
*/
#include <stdio.h>
#include <Xm/Xm.h>
#include <Xm/Form.h>
#include <Xm/DialogS.h>
#include <Xm/Label.h>
#include <Sgm/Dial.h>
/*
* Test framework procedures and globals.
*/
#ifdef _NO_PROTO
static void DragCallback();
#else
static void DragCallback(Widget w, void *client_data, void *call_data);
#endif /* _NO_PROTO */
XtAppContext app;
main (argc, argv)
int argc;
char *argv[];
{
Widget toplevel, form, dial, label;
Arg args[25];
int ac = 0;
/*
* Create and realize our top level window,
* with all the menus and buttons for user input.
*/
toplevel = XtVaAppInitialize(&app, "Dialtest", NULL, 0, &argc, argv, NULL, NULL);
if (toplevel == (Widget)NULL) {
printf("AppInitialize failed!\n");
exit(1);
}
form = XmCreateForm(toplevel, "Form", NULL, 0);
/* Set up arguments for our widget. */
ac = 0;
XtSetArg(args[ac], XmNleftAttachment, XmATTACH_FORM); ac++;
XtSetArg(args[ac], XmNrightAttachment, XmATTACH_FORM); ac++;
XtSetArg(args[ac], XmNtopAttachment, XmATTACH_FORM); ac++;
/*
* We use all-default settings.
* Do not set any of the dial-specific resources.
*/
dial = SgCreateDial(form, "dial", args, ac);
XtManageChild(dial);
ac = 0;
XtSetArg(args[ac], XmNleftAttachment, XmATTACH_FORM); ac++;
XtSetArg(args[ac], XmNrightAttachment, XmATTACH_FORM); ac++;
XtSetArg(args[ac], XmNtopAttachment, XmATTACH_WIDGET); ac++;
XtSetArg(args[ac], XmNtopWidget, dial); ac++;
XtSetArg(args[ac], XmNbottomAttachment, XmATTACH_FORM); ac++;
XtSetArg(args[ac], XmNlabelString, XmStringCreateSimple("0")); ac++;
label = XmCreateLabel(form, "valueLabel", args, ac);
XtManageChild(label);
/*
* Set up callback for the dial.
*/
XtAddCallback(dial, XmNdragCallback, DragCallback, label);
XtManageChild(form);
XtRealizeWidget(toplevel);
XtAppMainLoop(app);
}
void DragCallback(w, client_data, call_data)
Widget w;
XtPointer client_data, call_data;
{
SgDialCallbackStruct *cbs = (SgDialCallbackStruct *) call_data;
Widget label = (Widget)client_data;
static char new_label[256];
Arg args[2];
int ac = 0;
if ((cbs != NULL) && (label != (Widget)NULL)) {
sprintf(new_label, "%d", cbs->position);
XtSetArg(args[ac], XmNlabelString, XmStringCreateSimple(new_label)); ac++;
XtSetValues(label, args, ac);
}
}
|
/*
* Demonstrate the use of the DropPocket
*/
#include <Xm/Form.h>
#include <Xm/PushB.h>
#include <Sgm/DropPocket.h>
static void droppedCB(Widget w, XtPointer clientData, XtPointer cbs ) {
SgDropPocketCallbackStruct * dcbs = (SgDropPocketCallbackStruct *)cbs;
char * name;
if (dcbs->iconName)
if (!XmStringGetLtoR( dcbs->iconName, XmFONTLIST_DEFAULT_TAG, &name))
name = NULL;
printf("Dropped file: %s\nFull Data: %s\n", name, dcbs->iconData );
XtFree( name );
}
main( int argc, char * argv[] ) {
Widget toplevel, exitB, dp, topRC;
XtAppContext app;
XtSetLanguageProc(NULL, (XtLanguageProc)NULL, NULL);
toplevel = XtVaAppInitialize( &app, "DropPocket", NULL, 0, &argc, argv, NULL, NULL);
topRC = XtVaCreateManagedWidget( "topRC", xmFormWidgetClass, toplevel, NULL);
dp = XtVaCreateManagedWidget("dp",
sgDropPocketWidgetClass, topRC,
XmNtopAttachment, XmATTACH_FORM,
XmNbottomAttachment, XmATTACH_FORM,
XmNleftAttachment, XmATTACH_FORM,
XmNrightAttachment, XmATTACH_FORM,
XmNheight, 100,
XmNwidth, 100,
NULL);
XtAddCallback( dp, SgNiconUpdateCallback, droppedCB, NULL);
XtRealizeWidget( toplevel );
XtAppMainLoop( app );
}
|
#!smake
#
include /usr/include/make/commondefs
HFILES = \\p DropPocketP.h \\p DropPocket.h
CFILES = \\p DropPocket.c
TARGETS = dpt
CVERSION = -xansi
MALLOC = /d2/stuff/lib/Malloc
CVERSION = -xansi
OPTIMIZER = -g
#-I$(MALLOC) -wlint,-pf -woff 813,826,828
LLDLIBS = -lSgm -lXm -lXt -lX11 -lPW
#LLDLIBS = -u malloc -u XtRealloc -u XtMalloc -u XtCalloc -L /d2/stuff/lib
-ldbmalloc -lSgm -lXm -lXt -lX11
LCDEFS = -DFUNCPROTO -DDEBUG
targets: $(TARGETS)
include $(COMMONRULES)
#dpt: dpTest.o $(OBJECTS)
# $(CC) -o $@ dpTest.o $(OBJECTS) $(LDFLAGS)
dpt: dpTest.o
$(CC) -o $@ dpTest.o $(LDFLAGS)
#dpt2: dpTest2.o $(OBJECTS)
# $(CC) -o $@ dpTest2.o $(OBJECTS) $(LDFLAGS)
dpt2: dpTest2.o
$(CC) -o $@ dpTest2.o $(LDFLAGS)
#dpt3: dpTest3.o $(OBJECTS)
# $(CC) -o $@ dpTest3.o $(OBJECTS) $(LDFLAGS)
dpt3: dpTest3.o
$(CC) -o $@ dpTest3.o $(LDFLAGS)
#tdt: tdt.o $(OBJECTS)
# $(CC) -o $@ tdt.o $(OBJECTS) $(LDFLAGS)
tdt: tdt.o
$(CC) -o $@ tdt.o $(LDFLAGS)
depend:
makedepend -- $(CFLAGS) -- $(HFILES) $(CFILES)
|
/*
* Finder.c demonstrates the use of the SgFinder widget
*/
#include <stdlib.h>
#include <stdio.h>
#include <Xm/RowColumn.h>
#include <Xm/Label.h>
#include <Sgm/Finder.h>
#include <Sgm/DynaMenu.h>
static char * items[] = { "Archer's favorite songs:",
"Draft dodger rag",
"Le Roi Renaud",
"/usr/sbin",
"/lib/libc.so.1",
"Calvinist Headgear Expressway",
};
static void valueChangeCB( Widget w, XtPointer clientData, XmAnyCallbackStruct * cbs) {
printf("App value change callback\n");
}
static void activateCB( Widget w, XtPointer clientData, XmAnyCallbackStruct * cbs) {
printf("App activate callback\n");
}
main( int argc, char * argv[] ) {
Widget toplevel, rc, label, finder, history;
XtAppContext app;
XmString * list;
int listSize, i;
XtSetLanguageProc(NULL, (XtLanguageProc)NULL, NULL);
toplevel = XtVaAppInitialize( &app, "Finder", NULL, 0, &argc, argv, NULL, NULL);
rc = XtVaCreateWidget( "rc",
xmRowColumnWidgetClass, toplevel,
XmNresizeWidth, False,
XmNresizeHeight, True,
NULL);
/* create the original list for the historyMenu */
listSize = XtNumber( items );
list = (XmString *)XtMalloc( sizeof(XmString) * listSize);
for (i = 0; i < listSize; i++)
list[ i ] = XmStringCreateLocalized( items[ i ] );
label = XtVaCreateManagedWidget( "Things:",
xmLabelWidgetClass, rc,
NULL);
finder = XtVaCreateManagedWidget("finder", sgFinderWidgetClass, rc, NULL);
history = SgFinderGetChild( finder, SgFINDER_HISTORY_MENUBAR );
if (history && SgIsDynaMenu( history )) {
XtVaSetValues( history,
SgNhistoryListItems, list,
SgNhistoryListItemCount, listSize,
NULL);
}
for (i = 0; i < listSize; i++)
if (list[ i ])
XmStringFree(list[ i ]);
if (list)
XtFree( (char *)list );
XtAddCallback( finder, XmNvalueChangedCallback, (XtCallbackProc)valueChangeCB, finder);
XtAddCallback( finder, XmNactivateCallback, (XtCallbackProc)activateCB, finder);
XtManageChild( rc );
XtRealizeWidget( toplevel );
XtAppMainLoop( app );
}
|
#include <Sgm/DynaMenu.h>
#include <Xm/RowColumn.h>
static char * items[] = { "illegal smile", "/usr/people/stone",
"Fish and whistle", "help I'm trapped in the
machine", "9th & Hennepin" };
static void dynaPushCB( Widget w, XtPointer clientData, XtPointer cbd ) {
SgDynaMenuCallbackStruct * cbs = (SgDynaMenuCallbackStruct *) cbd;
int num = cbs->button_number;
printf("Selected item number %d\n", num);
}
main( int argc, char * argv[] ) {
XtAppContext app = NULL;
Widget toplevel, rc, dynaMenu;
XmString * list;
int listSize, i;
toplevel = XtVaAppInitialize( &app, "DynaMenu", NULL, 0, &argc,argv, NULL, NULL);
rc = XtVaCreateManagedWidget( "rc", xmRowColumnWidgetClass, toplevel, NULL);
/* create the original list for the dynaMenu */
listSize = XtNumber( items );
list = (XmString *)XtMalloc( sizeof(XmString) * (unsigned int)listSize);
for (i = 0; i < listSize; i++)
list[ i ] = XmStringCreateLocalized( items[ i ] );
dynaMenu = XtVaCreateManagedWidget("dynaMenu",
sgDynaMenuWidgetClass, rc,
SgNhistoryListItems, list,
SgNhistoryListItemCount, listSize,
NULL);
XtAddCallback( dynaMenu, SgNdynaPushCallback, dynaPushCB, NULL);
for (i = 0; i < listSize; i++)
XmStringFree( list[ i ] );
XtFree( (char *)list );
XtRealizeWidget( toplevel );
XtAppMainLoop( app );
}
|
/*
* Thumbwheel.c --
* create and manage a thumbwheel.
*/
#include <stdio.h>
#include <Xm/Xm.h>
#include <Xm/Form.h>
#include <Xm/DialogS.h>
#include <Xm/Label.h>
#include <Sgm/ThumbWheel.h>
/*
* Test framework procedures and globals.
*/
#ifdef _NO_PROTO
static void DragCallback();
#else
static void DragCallback(Widget w, void *client_data, void *call_data);
#endif /* _NO_PROTO */
XtAppContext app;
main (argc, argv)
int argc;
char *argv[];
{
Widget toplevel, form, thumbwheel, label;
Arg args[25];
int ac = 0;
/*
* Create and realize our top level window,
* with all the menus and buttons for user input.
*/
toplevel = XtVaAppInitialize( &app, "Thumbwheeltest", NULL, 0, &argc, argv, NULL, NULL);
if (toplevel == (Widget)NULL) {
printf("AppInitialize failed!\n");
exit(1);
}
form = XmCreateForm(toplevel, "Form", NULL, 0);
/* Set up arguments for our widget. */
ac = 0;
XtSetArg(args[ac], XmNleftAttachment, XmATTACH_FORM); ac++;
XtSetArg(args[ac], XmNrightAttachment, XmATTACH_FORM); ac++;
XtSetArg(args[ac], XmNtopAttachment, XmATTACH_FORM); ac++;
/*
* We use all-default settings, with the exception of orientation.
* Do not set any other thumbwheel-specific resources.
*/
ac = 0;
XtSetArg(args[ac], XmNorientation, XmHORIZONTAL); ac++;
thumbwheel = SgCreateThumbWheel(form, "thumbwheel", args, ac);
XtManageChild(thumbwheel);
ac = 0;
XtSetArg(args[ac], XmNleftAttachment, XmATTACH_FORM); ac++;
XtSetArg(args[ac], XmNrightAttachment, XmATTACH_FORM); ac++;
XtSetArg(args[ac], XmNtopAttachment, XmATTACH_WIDGET); ac++;
XtSetArg(args[ac], XmNtopWidget, thumbwheel); ac++;
XtSetArg(args[ac], XmNbottomAttachment, XmATTACH_FORM); ac++;
XtSetArg(args[ac], XmNlabelString, XmStringCreateSimple("0")); ac++;
label = XmCreateLabel(form, "valueLabel", args, ac);
XtManageChild(label);
/*
* Set up callback for the thumbwheel.
*/
XtAddCallback(thumbwheel, XmNdragCallback, DragCallback, label);
XtManageChild(form);
XtRealizeWidget(toplevel);
XtAppMainLoop(app);
}
void DragCallback(w, client_data, call_data)
Widget w;
XtPointer client_data, call_data;
{
SgThumbWheelCallbackStruct *cbs = (SgThumbWheelCallbackStruct *) call_data;
Widget label = (Widget)client_data;
static char new_label[256];
Arg args[2];
int ac = 0;
if ((cbs != NULL) && (label != (Widget)NULL)) {
sprintf(new_label, "%d", cbs->value);
XtSetArg(args[ac], XmNlabelString, XmStringCreateSimple(new_label)); ac++;
XtSetValues(label, args, ac);
}
}
|
To run this program, add these lines to your .Xdefaults file:
fsb*sgiMode: true fsb*useSchemes: all |
then type:
xrdb -load |
Here's the sample program:
/*------- fsb.c -------*/
#include <Xm/RowColumn.h>
#include <Xm/Form.h>
#include <Xm/PushB.h>
#include <stdlib.h>
#include <stdio.h>
#include <Xm/FileSB.h>
void printDirF( Widget w, XtPointer clientData, XmFileSelectionBoxCallbackStruct * cbs) {
char * filename = NULL, * dirname = NULL;
XmStringGetLtoR( cbs->value, XmFONTLIST_DEFAULT_TAG, &filename);
XmStringGetLtoR( cbs->dir, XmFONTLIST_DEFAULT_TAG, &dirname);
printf(“Filename selected: %s\n”, filename);
if (filename)
XtFree( filename );
if (dirname)
XtFree( dirname );
}
static void showDialog( Widget w, XtPointer clientData, XtPointer callData) {
Widget dialog = (Widget) clientData;
XtManageChild( dialog );
}
main (int argc, char *argv[]) {
Widget toplevel, fsb, b1, b2, rc;
XtAppContext app;
XmString textStr;
XtSetLanguageProc( NULL, (XtLanguageProc)NULL, NULL);
toplevel = XtVaAppInitialize( &app, “Fsb”, NULL, 0, &argc, argv, NULL, NULL);
rc = XtVaCreateManagedWidget( “rc”, xmFormWidgetClass, toplevel, NULL);
/* Set up a dialog */
if (argc > 1) {
b1 = XtVaCreateManagedWidget( “FSB”,
xmPushButtonWidgetClass,
rc,
XmNtopAttachment,
XmATTACH_FORM,
XmNbottomAttachment,
XmATTACH_FORM,
XmNleftAttachment,
XmATTACH_FORM,
XmNrightAttachment,
XmATTACH_FORM,
NULL);
fsb = XmCreateFileSelectionDialog( b1, “FSB Dialog”, NULL, 0);
XtAddCallback( b1, XmNactivateCallback, showDialog, fsb);
} else {
fsb = XmCreateFileSelectionBox( rc, “Select A File”, NULL, 0);
XtVaSetValues( fsb,
XmNtopAttachment, XmATTACH_FORM,
XmNbottomAttachment, XmATTACH_FORM,
XmNleftAttachment, XmATTACH_FORM,
XmNrightAttachment, XmATTACH_FORM,
NULL);
XtManageChild( fsb );
}
XtAddCallback( fsb, XmNokCallback, (XtCallbackProc)printDirF, fsb);
XtAddCallback( fsb, XmNcancelCallback, (XtCallbackProc)exit, NULL);
XtRealizeWidget( toplevel );
XtAppMainLoop( app );
}
|
#!smake # include /usr/include/make/commondefs CFILES = fsb.c TARGETS = fsb CVERSION = -xansi OPTIMIZER = -g LLDLIBS = -lSgm -lXm -lXt -lX11 -lPW LCDEFS = -DFUNCPROTO -DDEBUG LCINCS = -I. -I$(MOTIF_HEADERS) targets: $(TARGETS) include $(COMMONRULES) fsb: $(OBJECTS) $(CC) -o $@ $(OBJECTS) $(LDFLAGS) |