IRIX 6.5 » Books » Developer »
IRIX Interactive Desktop Integration Guide
(document number: 007-2006-130 / published: 2001-11-07)
table of contents | additional info | download find in page
Appendix A. Example Programs for SGI Enhanced Widgets
This appendix contains example programs for some of the SGI 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
|
Set them in your .Xdefaults file or create a file for your application in /usr/lib/X11/app-defaults.
This appendix provides example programs for:
Example Program for Color Chooser
/*
* 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);
}
}
|
Example Program for Drop Pocket
/*
* 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 );
}
|
Makefile for Drop Pocket Example
#!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)
|
Example Program for Finder
/*
* 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 );
}
|
Example Program for History Button (Dynamenu)
#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 );
}
|
Example Program for ThumbWheel
/*
* 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);
}
}
|
Example Program for File Selection Box
To run this program, add these lines to your .Xdefaults file:
fsb*sgiMode: true
fsb*useSchemes: all
|
then type:
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 );
}
|
Makefile for File Selection Box Example Program
#!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)
|
Example Programs for Scale (Percent Done Indicator) Widget
The following code produces a simple motif scale widget:
/* progress.c */
/* cc -o progress progress.c -lXm -lXt */
#include <Xm/Scale.h>
void main(int argc, char** argv) {
Widget toplevel, scale;
XtAppContext app_context;
Arg args[5];
int nargs=0;
toplevel = XtAppInitialize(&app_context, “Progress”,
NULL, 0, &argc, argv, NULL, NULL, 0);
XtSetArg(args[nargs], XmNvalue, 50); nargs++;
XtSetArg(args[nargs], XmNorientation, XmHORIZONTAL); nargs++;
scale = XmCreateScale(toplevel, “scale”, args, nargs);
XtManageChild(scale);
XtRealizeWidget(toplevel);
XtAppMainLoop(app_context);
}
|
The following resource file (named “Progress”) produces the slanted, thermometer look of the SGI percent done indicator. Also see the IRIS Viewkit VkProgressDialog class.
!Progress - App-default resources for the progress sample program
*sgiMode: true
*useSchemes: all
!Change the appearance o the slider
*scale.sliderVisual: flat_foreground
*scale.slidingMode: thermometer
*scale.slanted: true
!Set the correct scheme colors
Progress*scale*foreground: SGI_DYNAMIC BasicBackground
Progress*scale*troughColor: SGI_DYNAMIC TextFieldBackground
|
Example Program for LED Widget
/* ledbutton.c */
/* cc -o ledbutton ledbutton.c -lXm -lXt */
/* ledbutton -xrm “*sgiMode: true” -xrm “*useSchemes: all” */
#include <Xm/ToggleB.h>
void main(int argc, char** argv)
{
Widget toplevel, toggle;
XtAppContext app_context;
Arg args[5];
int nargs=0;
toplevel = XtAppInitialize(&app_context, “LEDButton”,
NULL, 0, &argc, argv, NULL, NULL, 0);
XtSetArg(args[nargs], XmNindicatorSize, 10); nargs++;
XtSetArg(args[nargs], XmNindicatorType, Xm3D_N_OF_MANY); nargs++;
toggle = XmCreateToggleButton(toplevel, “toggle”, args, nargs);
XtManageChild(toggle);
XtRealizeWidget(toplevel);
XtAppMainLoop(app_context);
}
|
IRIX Interactive Desktop Integration Guide
(document number: 007-2006-130 / published: 2001-11-07)
table of contents | additional info | download
Front Matter
New Features in This Guide
About This Guide
Integrating an Application Into the IRIX Interactive Desktop Environment: An Introduction
Part I. Getting the Right Look and Feel
Part II. Creating Desktop Icons
Appendix A. Example Programs for SGI Enhanced Widgets
Appendix B. Desktop Variables
Appendix C. Online Help Examples
Appendix D. The Icon Description Language
Appendix E. Predefined File Types
Appendix F. FTR File Directories
Appendix G. Using GoldenGate Data Conversion Services
Appendix H. Standard Menu Resources
Index
home/search |
what's new |
help
|