|
|
DataMuseum.dkPresents historical artifacts from the history of: Regnecentalen RC-900 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Regnecentalen RC-900 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T U w
Length: 39009 (0x9861)
Types: TextFile
Notes: UNIX file
Names: »widgetView.c«
└─⟦a85bd4a7c⟧ Bits:30004636/disk2.imd INTERACTIVE Motif Environment Development System
└─⟦a85bd4a7c⟧ UNIX Filesystem
└─⟦this⟧ »xt/new/usr/lib/X11/examples/widgetView/widgetView.c«
#ifdef REV_INFO
#ifndef lint
static char SCCSID[] = "OSF/Motif: @(#)widgetView.c 1.2 - 89/08/31 - 11:17:33";
#endif /* lint */
#endif /* REV_INFO */
/****************************************************************************
****************************************************************************
**
** File: widgetView.c
**
** Project: Motif - widget examination program
**
** Description: Program which shows resources of widgets
**
**
**
** (c) Copyright 1989 by Open Software Foundation, Inc.
** All Rights Reserved.
**
**
****************************************************************************
****************************************************************************/
/***************************************************
* *
* Revision history: *
* *
* 06/26/89 pjlevine complete rewrite *
* *
****************************************************/
#include "widgetView.h"
#include "widgets.h"
#define STRING_OFFSET 14
#define TESTLABEL "its"
/* for the FILE selection on menu bar */
#define LABEL1 "New"
#define LABEL2 "Open"
#define LABEL3 "Save"
#define LABEL4 "Quit"
/* for the Convienience function selection */
#define LABEL5 "Enabled"
/* the HELP selection */
#define LABEL6 "Manual"
#define LABEL7 "Source Code"
#define LABEL8 "widgetView"
#define SCALE 0
#define TOGGLE_BUT 1
#define TEXT_INPUT 2
#define PUSH_BUT 3
/* the filename of this program */
char filename [256];
typedef struct resource_vals {
Cardinal num_items;
char **name;
char **type;
long value [MAX_ARGS];
long orgvalue [MAX_ARGS];
Widget widget_addr [MAX_ARGS];
short widget_type [MAX_ARGS];
}RESOURCEVALS;
RESOURCEVALS resources, GetWidgetHierarchy ();
static char buffy [256];
/***********************************************************/
void Quit()
{
printf("exiting...\n\r");
fflush(stdout);
exit(0);
}
/**********************************************************/
XtCallbackProc MenuQuit (w, client_data, call_data)
Widget w;
caddr_t client_data,
call_data;
{
exit (0);
}
/**********************************************************/
/* enter here whenever a value is being changed */
/**********************************************************/
XtCallbackProc ValueField (w, client_data, call_data)
Widget w;
caddr_t client_data,
call_data;
{
int i, n = 0;
Arg args[MAX_ARGS];
XmString tcs;
if ((i = GetValuePosition (w)) < 0)
printf ("error in get position\n");
switch (resources.widget_type [i]) {
case SCALE:
n = 0;
XtSetArg (args [n], XmNvalue, &resources.value [i]); n++;
XtGetValues (w, args, n);
break;
case TOGGLE_BUT:
n = 0;
if (resources.value [i] == True) {
resources.value [i] = False;
tcs = XmStringLtoRCreate("False",
XmSTRING_DEFAULT_CHARSET);
XtSetArg (args [n], XmNlabelString, tcs); n++;
}
else {
resources.value [i] = True;
tcs = XmStringLtoRCreate("True",
XmSTRING_DEFAULT_CHARSET);
XtSetArg (args [n], XmNlabelString, tcs); n++;
}
XtSetValues (w, args, n);
XmStringFree (tcs);
break;
default:
printf ("none found\n");
}
}
/**********************************************************/
GetValuePosition (widget)
Widget widget;
{
int i;
for (i=0; i<MAX_ARGS; i++) {
if (widget == resources.widget_addr [i])
return (i);
}
return (-1);
}
/**********************************************************/
/* do the changed resources when the APPLY push button is pressed */
/**********************************************************/
XtCallbackProc ApplyResource (w, client_data, call_data)
Widget w;
caddr_t client_data,
call_data;
{
int i;
Arg args[MAX_ARGS];
/* set the entire resource list */
for (i=0; i<resources.num_items; i++) {
XtSetArg(args [i], resources.name [i], resources.value [i]);
}
if (ActiveWidget != (Widget) NULL)
XtSetValues (ActiveWidget, args, i-1);
}
/**********************************************************/
/* do the cancel resource when the CANCEL push button is pressed */
/**********************************************************/
XtCallbackProc CancelResource (w, client_data, call_data)
Widget w;
caddr_t client_data,
call_data;
{
int i;
Arg args[MAX_ARGS];
/* reset the resources to the value when the resource wuz created */
for (i=0; i<resources.num_items; i++) {
XtSetArg(args [i], resources.name [i], resources.orgvalue [i]);
}
if (ActiveWidget != (Widget) NULL)
XtSetValues (ActiveWidget, args, i-1);
}
/**********************************************************/
XtCallbackProc NewFileOK (w, client_data, callback_data)
Widget w;
char *client_data;
XmSelectionBoxCallbackStruct *callback_data;
{
Widget CreateLabel (), GetWidgetList ();
char *textstr, *extract_normal_string ();
int i;
if (callback_data->value == (XmString) NULL)
return (0);
textstr = extract_normal_string (callback_data->value);
/* textstr now contains the widget selection */
XtUnmanageChild (WidgetShell);
XtUnmanageChild (WidgetDialog);
ActiveWidget = GetWidgetList (textstr);
/* got a new one so open it */
if (ActiveWidget != (Widget) NULL)
SetNewWidget (ActiveWidget);
}
/**********************************************************/
XtCallbackProc NewFile (w, client_data, call_data)
Widget w;
caddr_t client_data,
call_data;
{
int i;
/* destroy the bulletin board in the resource edit region */
/* here's the widget selection region */
XtManageChild (WidgetShell);
XtManageChild (WidgetDialog);
if (TBoardW != (Widget) NULL)
XtDestroyWidget (TBoardW);
if (ActiveWidget != (Widget) NULL)
XtDestroyWidget (ActiveWidget);
for (i=0; i<resources.num_items; i++) {
free (resources.name [i]);
free (resources.type [i]);
}
}
/**********************************************************/
XtCallbackProc OpenFileOK (w, client_data, call_data)
Widget w;
caddr_t client_data,
call_data;
{
Widget CreateLabel ();
XtUnmanageChild (FileDialog);
XtUnmanageChild (FileSelection);
ActiveWidget = CreateLabel (WidgetBoard, "WIDGET DISPLAY (OPEN)", 50, 50);
SetNewWidget (ActiveWidget);
printf ("open file selected\n");
}
/**********************************************************/
XtCallbackProc OpenFile (w, client_data, call_data)
Widget w;
caddr_t client_data,
call_data;
{
int i;
if (TBoardW != (Widget) NULL)
XtDestroyWidget (TBoardW);
if (ActiveWidget != (Widget) NULL)
XtDestroyWidget (ActiveWidget);
for (i=0; i<resources.num_items; i++) {
free (resources.name [i]);
free (resources.type [i]);
}
XtManageChild (FileDialog);
XtManageChild (FileSelection);
}
/**********************************************************/
XtCallbackProc SaveFile (w, client_data, call_data)
Widget w;
caddr_t client_data,
call_data;
{
printf ("save file selected\n");
}
/**********************************************************/
XtCallbackProc PrintToFile (w, client_data, call_data)
Widget w;
caddr_t client_data,
call_data;
{
if (ActiveWidget != (Widget) NULL ) {
XtManageChild (PrintFileDialog);
XtManageChild (PrintFileSelection);
}
}
/**********************************************************/
XtCallbackProc PrintToFileOK (w, client_data, callback_data)
Widget w;
char *client_data;
XmSelectionBoxCallbackStruct *callback_data;
{
char *textstr, *extract_normal_string ();
int i;
FILE *fp;
if (callback_data->value == (XmString) NULL)
return (0);
textstr = extract_normal_string (callback_data->value);
/* write to the file */
if ((fp = fopen (textstr, "r+")) == NULL) {
if ((fp = fopen (textstr, "a+")) == NULL) {
printf ("error creating or opening %s\n", textstr);
return (0);
}
}
for (i=0; i<resources.num_items; i++) {
fprintf (fp, "%-20s%-20s%-5ld\n", resources.name [i],
resources.type[i], resources.value [i]);
}
fclose (fp);
XtUnmanageChild (PrintFileDialog);
XtUnmanageChild (PrintFileSelection);
}
/**********************************************************/
XtCallbackProc PrintToFileApply (w, client_data, call_data)
Widget w;
caddr_t client_data,
call_data;
{
}
/**********************************************************/
XtCallbackProc PrintToPrinter (w, client_data, call_data)
Widget w;
caddr_t client_data,
call_data;
{
printf ("printout selected\n");
}
/**********************************************************/
XtCallbackProc Enabled (w, client_data, call_data)
Widget w;
caddr_t client_data,
call_data;
{
printf ("save file selected\n");
}
/**********************************************************/
XtCallbackProc ManHelp (w, client_data, call_data)
Widget w;
caddr_t client_data,
call_data;
{
system ("xterm -e man label &");
printf ("man selected\n");
}
/**********************************************************/
XtCallbackProc SourceHelp (w, client_data, call_data)
Widget w;
caddr_t client_data,
call_data;
{
printf ("source help selected\n");
}
/**********************************************************/
XtCallbackProc ViewHelp (w, client_data, call_data)
Widget w;
caddr_t client_data,
call_data;
{
printf ("view help selected\n");
}
/**********************************************************/
SetLabel (label)
char *label;
{
register int n;
Arg args[MAX_ARGS];
XmString tcs;
n = 0;
tcs = XmStringLtoRCreate(label, XmSTRING_DEFAULT_CHARSET);
XtSetArg(args[n], XmNlabelString, tcs); n++;
XtSetValues (LabelW, args, n);
XmStringFree(tcs);
}
/***********************************************************/
Widget CreateCascade (label, mnemonic, submenu, parent)
char *label,
mnemonic;
Widget submenu,
parent;
{
Widget widget;
int n;
Arg args[MAX_ARGS];
XmString tcs;
n = 0;
tcs = XmStringLtoRCreate (label, XmSTRING_DEFAULT_CHARSET);
XtSetArg(args[n], XmNlabelString, tcs); n++;
XtSetArg(args[n], XmNmnemonic, mnemonic); n++;
XtSetArg(args[n], XmNsubMenuId, submenu); n++;
widget = XmCreateCascadeButton (parent, "cascade", args, n);
XtManageChild(widget);
XmStringFree(tcs);
return (widget);
}
/***********************************************************/
Widget CreateDialog (parent, addrstr, num_items)
Widget parent;
XmString *addrstr;
Cardinal num_items;
{
Widget widget,
OKBtn,
HelpBtn;
int n;
Arg args[MAX_ARGS];
XmString tcs;
tcs = XmStringLtoRCreate ("Font List", XmSTRING_DEFAULT_CHARSET);
n = 0;
XtSetArg(args[n], XmNheight, 200); n++;
XtSetArg(args[n], XmNwidth, 200); n++;
XtSetArg(args[n], XmNx, 10); n++;
XtSetArg(args[n], XmNy, 10); n++;
/* the label of the selection box list */
XtSetArg (args[n], XmNlistLabelString, tcs); n++;
XmStringFree (tcs);
tcs = XmStringLtoRCreate (TESTLABEL, XmSTRING_DEFAULT_CHARSET);
/* the label of the cancel box */
XtSetArg (args[n], XmNhelpLabelString, tcs); n++;
/* the contents of the selection box list */
XtSetArg (args[n], XmNlistItems, addrstr); n++;
/* there are eight items */
XtSetArg (args[n], XmNlistItemCount, num_items); n++;
/* eight of which are visible */
XtSetArg (args[n], XmNlistVisibleItemCount, 8); n++;
widget = XmCreateSelectionBox (parent, "selection_dialog",
args, n);
XmStringFree (tcs);
return (widget);
}
/***********************************************************/
Widget CreateDialogShell (parent, say, x, y)
Widget parent;
char *say;
Cardinal x, y;
{
static Widget widget;
int n;
Arg args[MAX_ARGS];
n = 0;
XtSetArg(args[n], XmNwidth, 400); n++;
XtSetArg(args[n], XmNheight, 400); n++;
XtSetArg(args[n], XmNx, x); n++;
XtSetArg(args[n], XmNy, y); n++;
XtSetArg(args[n], XmNallowShellResize, True); n++;
widget = XmCreateDialogShell (parent, say, args, n);
return (widget);
}
/***********************************************************/
Widget CreateList (parent, addrstr, num_items)
Widget parent;
XmString *addrstr;
Cardinal num_items;
{
Widget widget,
OKBtn,
HelpBtn;
int n;
Arg args[MAX_ARGS];
XmString tcs;
tcs = XmStringLtoRCreate ("Resources", XmSTRING_DEFAULT_CHARSET);
n = 0;
ScrollBarList = XmCreateScrollBar (SWin, "Scroll_bar", args, n);
n = 0;
XtSetArg(args[n], XmNheight, 200); n++;
XtSetArg(args[n], XmNwidth, 200); n++;
XtSetArg(args[n], XmNx, 10); n++;
XtSetArg(args[n], XmNy, 10); n++;
/* the label of the selection box list */
XtSetArg (args[n], XmNlistLabelString, tcs); n++;
/* the contents of the selection box list */
XtSetArg (args[n], XmNitems, addrstr); n++;
/* there are eight items */
XtSetArg (args[n], XmNitemCount, num_items); n++;
/* eight of which are visible */
XtSetArg (args[n], XmNvisibleItemCount, 8); n++;
XtSetArg (args[n], XmNverticalScrollBar, ScrollBarList); n++;
widget = XmCreateList (parent, "selection_dialog",
args, n);
return (widget);
}
/***********************************************************/
Widget CreateFileSelection (parent, name)
Widget parent;
char *name;
{
static Widget widget;
int n;
Arg args[MAX_ARGS];
n = 0;
widget = XmCreateFileSelectionBox (parent, name, args, n);
/* FileOK = XmFileSelectionBoxGetChild (widget, XmDIALOG_OK_BUTTON);
n = 0;
XtSetArg (args[n], XmNshowAsDefault, 1); n++;
XtSetValues (FileOK, args, n);
XtManageChild (FileOK);
*/
return (widget);
}
/***********************************************************/
Widget CreatePushButton (label, mnemonic, parent)
char *label,
mnemonic;
Widget parent;
{
static Widget widget;
int n;
Arg args[MAX_ARGS];
XmString tcs,
acc_text;
n = 0;
tcs = XmStringLtoRCreate(label, XmSTRING_DEFAULT_CHARSET);
acc_text = XmStringLtoRCreate("^A", XmSTRING_DEFAULT_CHARSET);
XtSetArg(args[n], XmNmnemonic, mnemonic); n++;
/* if there is an accelerator associated with the button */
#ifdef ACCEL
XtSetArg(args[n], XmNaccelerator, "Ctrl<Key>A"); n++;
XtSetArg(args[n], XmNacceleratorText, acc_text);n++;
#endif
widget = XmCreatePushButton(parent, label, args, n);
XtManageChild(widget);
XmStringFree(tcs);
XmStringFree(acc_text);
return(widget);
}
/***********************************************************/
Widget CreateRadioBox (parent)
Widget parent;
{
Widget widget;
int n;
Arg args[MAX_ARGS];
n = 0;
/*
* contains two toggle buttons which by virtue of being contained
* within a radio box are mutually exclusive
*/
widget = XmCreateRadioBox (parent, "radioBox", args, n);
XtManageChild (widget);
return (widget);
}
/***********************************************************/
Widget CreateSeparator (parent)
Widget parent;
{
Widget widget;
Arg args[MAX_ARGS];
int n;
n = 0;
widget = XmCreateSeparator (parent, "separator", args, n);
XtManageChild (widget);
return(widget);
}
/***********************************************************/
static Widget CreateToggle (parent, label, mnemonic, x, y, indicator)
Widget parent;
char *label,
mnemonic;
int x, y;
Boolean indicator;
{
Widget widget;
int n;
Arg args[MAX_ARGS];
XmString tcs;
n = 0;
XtSetArg(args[n], XmNx, x);n++;
XtSetArg(args[n], XmNy, y);n++;
XtSetArg(args[n], XmNshadowType, XmSHADOW_OUT);n++;
ToggleFrame = XmCreateFrame (parent, "Frame", args, n);
XtManageChild (ToggleFrame);
n = 0;
tcs = XmStringLtoRCreate (label, XmSTRING_DEFAULT_CHARSET);
XtSetArg(args[n], XmNlabelString, tcs);n++;
XtSetArg(args[n], XmNmnemonic, mnemonic);n++;
XtSetArg(args[n], XmNset, indicator);n++;
widget = XmCreateToggleButton (ToggleFrame, "toggle",args,n);
XtManageChild (widget);
XmStringFree(tcs);
return(widget);
}
/***********************************************************/
/* posts the popup menu when button 2 is pressed in the frame widget */
XtCallbackProc PostIt (w, popup, event)
Widget w,
popup;
XButtonEvent *event;
{
if (event->button != Button2)
return;
XmMenuPosition (popup, event);
XtManageChild (popup);
}
/***********************************************************/
Widget CreateLabel (parent, string, posx, posy)
Widget parent;
char *string;
int posx, posy;
{
Widget widget;
Arg args[MAX_ARGS];
XmString tcs;
XmFontList fontlist;
int n=0;
Dimension width, height;
tcs = XmStringLtoRCreate (string, XmSTRING_DEFAULT_CHARSET);
XtSetArg(args[n], XmNx, posx); n++;
XtSetArg(args[n], XmNy, posy); n++;
/* XtSetArg(args[n], XmNresizePolicy, XmRESIZE_ANY); n++;
XtSetArg(args[n], XmNshadowThickness, 2); n++;
*/
LabelBoardW = XmCreateFrame (parent, "Frame", args, n);
XtManageChild (LabelBoardW);
n = 0;
XtSetArg(args[n], XmNx, 0); n++;
XtSetArg(args[n], XmNy, 0); n++;
XtSetArg(args[n], XmNrecomputeSize, True); n++;
XtSetArg(args[n], XmNlabelString, tcs); n++;
widget = XmCreateLabel (LabelBoardW, "Label", args, n);
XtManageChild (widget);
XmStringFree (tcs);
/* return the bulletin board so a subsequent Xtdestroy
will kill both the bboard and the label */
return (LabelBoardW);
}
/***********************************************************/
Widget CreateText (parent, x, y, width, height)
Widget parent;
int x, y, width, height;
{
Widget widget;
Arg args[MAX_ARGS];
int n=0;
XtSetArg(args[n], XmNeditMode, XmMULTI_LINE_EDIT); n++;
XtSetArg(args[n], XmNeditable, False); n++;
XtSetArg(args[n], XmNheight, height); n++;
XtSetArg(args[n], XmNwidth, width); n++;
XtSetArg(args[n], XmNx, x); n++;
XtSetArg(args[n], XmNy, y); n++;
XtSetArg(args[n], XmNresizeWidth, True); n++;
XtSetArg(args[n], XmNresizeHeight, False); n++;
widget = XmCreateText (parent, "s_text", args, n);
return (widget);
}
/***********************************************************/
Widget CreateScale (parent, value, minimum, maximum, xpos, ypos)
Widget parent;
int value,
minimum,
maximum,
xpos,
ypos;
{
Widget widget;
Arg args[MAX_ARGS];
int n=0;
XtSetArg(args[n], XmNx, xpos); n++;
XtSetArg(args[n], XmNy, ypos); n++;
XtSetArg(args[n], XmNshadowType, XmSHADOW_OUT);n++;
ScaleFrame = XmCreateFrame (parent, "Frame", args, n);
XtManageChild (ScaleFrame);
n= 0;
XtSetArg(args[n], XmNvalue, value); n++;
XtSetArg(args[n], XmNminimum, minimum); n++;
XtSetArg(args[n], XmNmaximum, maximum); n++;
XtSetArg(args[n], XmNshowValue, True); n++;
XtSetArg(args[n], XmNorientation, XmHORIZONTAL); n++;
XtSetArg(args[n], XmNprocessingDirection, XmMAX_ON_RIGHT); n++;
widget = XmCreateScale (ScaleFrame, "Scale", args, n);
XtManageChild (widget);
return (widget);
}
/***********************************************************/
void main(argc, argv)
int argc;
char **argv;
{
register int n;
Arg args[MAX_ARGS];
int num_items;
int num_widgets;
/* font shit */
XmString *DoTheFont (), *font_addrstr;
Widget Dummy;
Widget XmCreateScrolledText ();
XmString *addrstr, *GetKnownWidgets ();
MenuBar = (Widget) NULL;
signal(SIGHUP, Quit);
signal(SIGINT, Quit);
signal(SIGQUIT, Quit);
system ("touch foo");
system ("rm -r foo");
XtToolkitInitialize();
if ((display = XtOpenDisplay (NULL, NULL, argv[1], "XMclient",
NULL, 0, &argc, argv)) == NULL)
{
fprintf (stderr,"\n%s: Can't open display\n", argv[0]);
exit(1);
}
strcpy (filename, argv[0]);
strcat (filename, ".c");
printf ("filename = %s\n", filename);
n = 0;
XtSetArg(args[n], XmNallowShellResize, True); n++;
Shell = XtAppCreateShell(argv[0], NULL, applicationShellWidgetClass,
display, args, n);
n = 0;
MainWindow = XmCreateMainWindow(Shell, "MainWindow", args, n);
XtManageChild(MainWindow);
n = 0;
XtSetArg(args[n], XmNresizePolicy, XmRESIZE_GROW); n++;
WorkRegion = XmCreateBulletinBoard (MainWindow, "s_text", args, n);
XtManageChild (WorkRegion);
CreateMenuBar ();
CreateTextWin ();
WidgetShell = CreateDialogShell (Shell, "List O' Widgets", 200, 200);
addrstr = GetKnownWidgets (&num_widgets);
WidgetDialog = CreateDialog (WidgetShell, addrstr, num_widgets);
XtAddCallback (WidgetDialog, XmNokCallback, NewFileOK, NULL);
FileDialog = CreateDialogShell (Shell, "Open Existing File", 300, 300);
FileSelection = CreateFileSelection (FileDialog, "Select File");
XtAddCallback (FileSelection, XmNokCallback, OpenFileOK, NULL);
PrintFileDialog = CreateDialogShell (Shell, "Print Resources to File",
300, 300);
PrintFileSelection = CreateFileSelection (PrintFileDialog, "Select File");
XtAddCallback (PrintFileSelection, XmNokCallback, PrintToFileOK, NULL);
/* FontDialog = CreateDialogShell (Shell, "List O' Fonts", 450, 450);
font_addrstr = DoTheFont (&num_items);
n = 0;
XtSetArg(args[n], XmNwidth, 450); n++;
XtSetArg(args[n], XmNheight, 450); n++;
FontBulletin = XmCreateBulletinBoard (FontDialog, "f_bulletin", args, n);
FontShell = CreateDialog (FontBulletin, font_addrstr, num_items);
XtAddCallback (FontShell, XmNcancelCallback, FontSelectCancel, NULL);
XtAddCallback (FontShell, XmNokCallback, FontSelectOK, NULL);
XtAddCallback (FontShell, XmNapplyCallback, FontSelectApply, NULL);
XtAddCallback (FontShell, XmNhelpCallback, FontTest, NULL);
FontTestDialog = CreateText (FontBulletin, 30, 275, 250, 150);
n = 0;
XtSetArg(args[n], XmNeditable, True); n++;
XtSetValues (FontTestDialog, args, n);
CreateDisplayWin ();
CreateWidgetList ();
TextShell = CreateDialogShell (Shell, "Help Window", 200, 200);
TextDialog = CreateText (TextShell, 0, 0, 350, 350);
*/
XtRealizeWidget(Shell);
XtMainLoop();
}
/***********************************************************/
CreateTextWin ()
{
int n, i;
Arg args[MAX_ARGS];
char *buffer, *GetSource ();
n = 0;
/*
XtSetArg(args[n], XmNshadowThickness, 0); n++;
XtSetArg(args[n], XmNresizePolicy, XmRESIZE_ANY); n++;
SWin = XmCreateBulletinBoard (WorkRegion, "s_win", args, n);
XtManageChild (SWin);
*/
/* widget bulletin board */
n=0;
XtSetArg(args[n], XmNx, 0); n++;
XtSetArg(args[n], XmNy, 60); n++;
XtSetArg(args[n], XmNheight, 400); n++;
XtSetArg(args[n], XmNwidth, 275); n++;
XtSetArg(args[n], XmNshadowThickness, 2); n++;
XtSetArg(args[n], XmNresizePolicy, XmRESIZE_GROW); n++;
WidgetBoard = XmCreateBulletinBoard (WorkRegion, "Form", args, n);
XtManageChild (WidgetBoard);
/* text widget over on the right */
n=0;
XtSetArg(args[n], XmNx, 350); n++;
XtSetArg(args[n], XmNy, 60); n++;
XtSetArg(args[n], XmNheight, 400); n++;
XtSetArg(args[n], XmNwidth, WIDTH - 350); n++;
XtSetArg(args[n], XmNscrollingPolicy, XmAUTOMATIC); n++;
TextWin = XmCreateScrolledWindow (WorkRegion, "s_text", args, n);
XtManageChild (TextWin);
n=0;
XtSetArg(args[n], XmNx, 0); n++;
XtSetArg(args[n], XmNy, 0); n++;
XtSetArg(args[n], XmNheight, 400); n++;
XtSetArg(args[n], XmNwidth, WIDTH - 300); n++;
XtSetArg(args[n], XmNshadowThickness, 0); n++;
XtSetArg(args[n], XmNresizePolicy, XmRESIZE_ANY); n++;
TBoardW = XmCreateBulletinBoard (TextWin, "Form", args, n);
XtManageChild (TBoardW);
/*
buffer = GetSource ("widgetView.c");
XmTextSetString (TextWin, buffer);
*/
LabelW = CreateLabel (WorkRegion, "WIDGET DISPLAY REGION", 0, 0);
LabelHierarchy = CreateLabel (WorkRegion, "WIDGET HIERARCHY", 0, 500);
CreateLabel (WorkRegion, "RESOURCE EDIT WINDOW", 350, 0);
n = 0;
ResourceButton = CreatePushButton ("Apply Resource Changes", '1',
WorkRegion);
XtSetArg(args[n], XmNx, 500); n++;
XtSetArg(args[n], XmNy, 490); n++;
XtSetValues (ResourceButton, args, n);
XtAddCallback (ResourceButton, XmNactivateCallback, ApplyResource, NULL);
n = 0;
ResourceButton1 = CreatePushButton ("Cancel Resource Changes", '1',
WorkRegion);
XtSetArg(args[n], XmNx, 500); n++;
XtSetArg(args[n], XmNy, 520); n++;
XtSetValues (ResourceButton1, args, n);
XtAddCallback (ResourceButton1, XmNactivateCallback, CancelResource, NULL);
}
/***********************************************************/
SetNewWidget (widget)
Widget widget;
{
int n, i;
Arg args[MAX_ARGS];
char buff [256];
long hscroll, vscroll;
/* create a main bulletin for the scrolled window */
n=0;
XtSetArg(args[n], XmNx, 0); n++;
XtSetArg(args[n], XmNy, 0); n++;
XtSetArg(args[n], XmNheight, 1500); n++;
XtSetArg(args[n], XmNwidth, WIDTH); n++;
XtSetArg(args[n], XmNshadowThickness, 0); n++;
XtSetArg(args[n], XmNresizePolicy, XmRESIZE_ANY); n++;
TBoardW = XmCreateBulletinBoard (TextWin, "Form", args, n);
XtSetArg(args[0], XmNhorizontalScrollBar, &hscroll);
XtGetValues (widget, args, 0);
XtSetArg(args[0], XmNverticalScrollBar, &vscroll);
XtGetValues (widget, args, 0);
XmScrolledWindowSetAreas (TextWin, hscroll, vscroll, TBoardW);
XtManageChild (TBoardW);
CreateLabel (TBoardW, "RESOURCE NAME", 0, 0);
CreateLabel (TBoardW, "RESOURCE TYPE", 150, 0);
CreateLabel (TBoardW, "VALUE CHANGE FIELD", 300, 0);
resources = GetWidgetHierarchy (widget);
for (i = 0; i<resources.num_items; i++) {
sprintf (buff, "%-20s%-20s", resources.name [i], resources.type[i]);
CreateLabel (TBoardW, buff, 0, (i+1) * 50);
XtSetArg(args [i], resources.name [i], &resources.value [i]);
}
XtGetValues (widget, args, i);
for (i = 0; i<resources.num_items; i++) {
/* hold the original values around */
resources.orgvalue [i] = resources.value [i];
/* we have the value so get the correct display widget up */
CreateValueField (TBoardW, i);
/*
printf ("value [%d] = %d,buffy = %s\n",i, resources.value [i],
args [i].name);
sprintf (buffy, "%ld", resources.value [i]);
CreateLabel (TBoardW, buffy, 300, (i+1) * 50);
*/
}
}
/***********************************************************/
CreateValueField (parent, offset)
Widget parent;
int offset;
{
Widget widget;
int minimum, maximum;
minimum = maximum = 0;
switch (GetFieldType (resources.type [offset], offset, &minimum, &maximum)) {
case TOGGLE_BUT:
/* create toggle button widget */
if (resources.value [offset])
widget = CreateToggle (parent, "True", '1', 300,
(offset+1)* 50, True);
else
widget = CreateToggle (parent, "False", '1', 300,
(offset+1)* 50, False);
XtAddCallback (widget, XmNarmCallback, ValueField, NULL);
resources.widget_type [offset] = TOGGLE_BUT;
break;
case SCALE:
widget = CreateScale (parent, resources.value [offset],
minimum, maximum, 300, (offset+1) * 50);
XtAddCallback (widget, XmNdragCallback, ValueField, NULL);
resources.widget_type [offset] = SCALE;
break;
default:
sprintf (buffy, "%ld", resources.value [offset]);
widget = CreateLabel (parent, buffy, 300, (offset+1) * 50);
} /* switch */
resources.widget_addr [offset] = widget;
}
/***********************************************************/
GetFieldType (resource_type, offset, minimum, maximum)
char *resource_type;
int offset,
*minimum,
*maximum;
{
int i = 0;
/* global structures give the values of the world
scale_types [], toggle_types []*/
*minimum = *maximum = 0;
while (strcmp (scale_vals [i].type , "END")) {
if (!strcmp (scale_vals [i].type, resource_type)) {
*minimum = scale_vals [i].minimum;
*maximum = scale_vals [i].maximum;
if (resources.value [offset] > *maximum)
*maximum = (int) resources.value [offset];
return (SCALE);
}
i++;
}
i = 0;
while (strcmp (toggle_types [i], "END")) {
if (!strcmp (toggle_types [i], resource_type))
return (TOGGLE_BUT);
i++;
}
return (NOT_FOUND);
}
/***********************************************************/
XmString *GetKnownWidgets (num_widgets)
int *num_widgets;
{
static XmString *addrstr;
int i = 0;
addrstr = (XmString *) calloc (100, sizeof (XmString));
while (1) {
addrstr[i] = XmStringLtoRCreate (widgetlist [i],
XmSTRING_DEFAULT_CHARSET);
i++;
if (!strcmp (widgetlist [i], "END"))
break;
}
*num_widgets = i;
return (addrstr);
}
/***********************************************************/
RESOURCEVALS GetWidgetHierarchy (GenWidget)
Widget GenWidget;
{
static XtResourceList resource;
static RESOURCEVALS local_resources;
WidgetClass widget_class, s_class;
int i, n;
Arg args[MAX_ARGS];
Widget papa;
char *hierarchy;
local_resources.num_items = 0;
hierarchy = (char*) calloc (1, 256);
widget_class = XtClass (GenWidget);
strcat (hierarchy, widget_class->core_class.class_name);
strcat (hierarchy, ".");
s_class = widget_class->core_class.superclass;
while(1) {
/* loop through superclasses until we reach core */
strcat (hierarchy, s_class->core_class.class_name);
if (!strcmp (s_class->core_class.class_name, "Core") ||
!s_class)
break;
strcat (hierarchy, ".");
s_class = s_class->core_class.superclass;
}
/* this is the core.manager... hierarchy */
printf ("hierarch 1 = %s\n", hierarchy);
WidgetHierarchy = CreateLabel (WorkRegion, hierarchy, 0, 550);
free (hierarchy);
XtGetResourceList (widget_class, &resource, &local_resources.num_items);
local_resources.name = (char **) calloc (local_resources.num_items,
sizeof (char **));
local_resources.type = (char **) calloc (local_resources.num_items,
sizeof (char **));
printf ("widget num = %d\n\r", local_resources.num_items);
for (i = 0; i < local_resources.num_items; i++) {
local_resources.name[i] = resource[i].resource_name;
local_resources.type[i] = resource[i].resource_type;
printf ("widget = %s\n\r", resource[i].resource_name);
printf ("resource type = %s\n", resource[i].resource_type);
}
return (local_resources);
}
/***********************************************************/
XmString *DoTheFont (count)
int *count;
{
char **fontlist;
int i;
static XmString *addrstr;
fontlist = XListFonts (display, "*", 100, count);
addrstr = (XmString *) calloc (*count, sizeof (XmString));
printf ("num = %d\n\r", *count);
for (i = 0; i < *count; i++) {
addrstr[i] = XmStringLtoRCreate (fontlist[i],
XmSTRING_DEFAULT_CHARSET);
}
return (addrstr);
}
/***********************************************************/
char *GetSource (fileptr)
char *fileptr;
{
static char *retbuff;
int fd, flen;
if ((fd = open (fileptr, O_RDONLY)) < 0) {
printf ("Cannot open file %s\n", fileptr);
return ((char *) NULL);
}
flen = GetFileLen(fd);
retbuff = (char*) calloc (1, flen + 1);
if (read (fd, retbuff, flen) <= 0) {
printf ("Error reading file %s\n", fileptr);
return ((char *) NULL);
}
close (fd);
return (retbuff);
}
/***********************************************************/
GetFileLen (fd)
int fd;
{
static int retval;
#ifdef i386
lseek (fd, 0, SEEK_SET);
retval = lseek (fd, 0, SEEK_END);
lseek (fd, 0, SEEK_SET);
#else /* i386 */
lseek (fd, 0, L_SET);
retval = lseek (fd, 0, L_XTND);
lseek (fd, 0, L_SET);
#endif /* i386 */
return (retval);
}
/***********************************************************/
CreateMenuBar ()
{
int n;
Arg args[MAX_ARGS];
/*
** the menubar
*/
n = 0;
MenuBar = (Widget) XmCreateMenuBar ((Widget) MainWindow, "MenuBar",
args, n);
if (MenuBar == NULL) {
printf ("null menu bar\n\r");
exit (0);
}
XtManageChild(MenuBar);
/* create the first level pulldowns */
n = 0;
PullDown1 = XmCreatePulldownMenu (MenuBar, "File", args, n);
PullDown2 = XmCreatePulldownMenu (MenuBar, "Convienience Fcns", args, n);
PullDown3 = XmCreatePulldownMenu (MenuBar, "Help", args, n);
/* create cascade buttons for menubar */
MenuBtn1 = CreateCascade ("File", 'F', PullDown1, MenuBar);
MenuBtn2 = CreateCascade ("Convienience Functions", 'C',PullDown2, MenuBar);
MenuBtn3 = CreateCascade ("Help", 'H', PullDown3, MenuBar);
/*
** Menu1 (FILE menu)
*/
Label1A = CreatePushButton (LABEL1,'1',PullDown1);
XtAddCallback (Label1A, XmNactivateCallback, NewFile, NULL);
Label1B = CreatePushButton (LABEL2, '2', PullDown1);
XtAddCallback (Label1B, XmNactivateCallback, OpenFile, NULL);
Label1C = CreatePushButton (LABEL3, '3', PullDown1);
XtAddCallback (Label1C, XmNactivateCallback, SaveFile, NULL);
CreateSeparator (PullDown1);
n = 0;
PullDown1A = XmCreatePulldownMenu(PullDown1, "Print Resources",args, n);
Cascade1 = CreateCascade ("Print Resources", '4', PullDown1A, PullDown1);
ToFileLabel = CreatePushButton ("To File",'1',PullDown1A);
XtAddCallback (ToFileLabel, XmNactivateCallback, PrintToFile, NULL);
ToPrinterLabel = CreatePushButton ("To Printer", '2', PullDown1A);
XtAddCallback (ToPrinterLabel, XmNactivateCallback, PrintToPrinter, NULL);
CreateSeparator (PullDown1);
Label1D = CreatePushButton (LABEL4, '5', PullDown1);
XtAddCallback (Label1D, XmNactivateCallback, MenuQuit, NULL);
/*
** Menu2 (Convienience function menu)
*/
Label2A = CreateToggle (PullDown2, LABEL5, '1', 0, 0, False);
XtAddCallback (Label2A, XmNactivateCallback, Enabled, NULL);
/* menu 3 (HELP menu) */
Label3A = CreatePushButton (LABEL6,'5',PullDown3);
XtAddCallback (Label3A, XmNactivateCallback, ManHelp, NULL);
Label3B = CreatePushButton (LABEL7,'5',PullDown3);
XtAddCallback (Label3B, XmNactivateCallback, SourceHelp, NULL);
Label3C = CreatePushButton (LABEL8,'5',PullDown3);
XtAddCallback (Label3C, XmNactivateCallback, ViewHelp, NULL);
}
/***********************************************************/
Widget GetWidgetList (widget_name)
char *widget_name;
{
int i = 0;
Widget widget;
int n = 0;
Arg args[MAX_ARGS];
XmString tcs;
/* let's find the position of the widget list */
while (strcmp (widgetlist [i], "END")) {
if (!strcmp (widgetlist [i], widget_name))
break;
i++;
}
/* check if we found something useful */
if (!strcmp (widgetlist [i], "END"))
return ((Widget) NULL);
/* got position in i */
tcs = XmStringLtoRCreate ("This is a test", XmSTRING_DEFAULT_CHARSET);
XtSetArg (args [n], XmNx, 25); n++;
XtSetArg (args [n], XmNy, 25); n++;
switch (i) {
/* create the widget with WidgetBoard as parent */
case ARROW_BUTTON:
widget = XmCreateArrowButton (WidgetBoard, "BBoard", args, n);
break;
case BULLETIN_BOARD:
widget = XmCreateBulletinBoard (WidgetBoard, "BBoard", args, n);
break;
case BULLETIN_BOARD_DIALOG:
widget = XmCreateBulletinBoardDialog (WidgetBoard, "BBoard", args, n);
break;
case CASCADE_BUTTON:
widget = XmCreateCascadeButton (WidgetBoard, "BBoard", args, n);
break;
case CASCADE_BUTTON_GADGET:
printf ("can't do the thing\n");
widget = (Widget) NULL;
break;
case COMMAND:
widget = XmCreateCommand (WidgetBoard, "BBoard", args, n);
break;
case DIALOG_SHELL:
widget = XmCreateDialogShell (WidgetBoard, "BBoard", args, n);
break;
case DRAWING_AREA:
widget = XmCreateDrawingArea (WidgetBoard, "BBoard", args, n);
break;
case DRAWN_BUTTON:
widget = XmCreateDrawnButton (WidgetBoard, "BBoard", args, n);
break;
case ERROR_DIALOG:
widget = XmCreateErrorDialog (WidgetBoard, "BBoard", args, n);
break;
case FILE_SELECTION_BOX:
widget = XmCreateFileSelectionBox (WidgetBoard, "BBoard", args, n);
break;
case FILE_SELECTION_DIALOG:
widget = XmCreateFileSelectionDialog (WidgetBoard, "BBoard", args, n);
break;
case FORM:
widget = XmCreateForm (WidgetBoard, "BBoard", args, n);
break;
case FORM_DIALOG:
widget = XmCreateFormDialog (WidgetBoard, "BBoard", args, n);
break;
case FRAME:
widget = XmCreateFrame (WidgetBoard, "BBoard", args, n);
break;
case INFORMATION_DIALOG:
widget = XmCreateInformationDialog (WidgetBoard, "BBoard", args, n);
break;
case LABEL:
XtSetArg (args [n], XmNlabelString, tcs); n++;
widget = XmCreateLabel (WidgetBoard, "BBoard", args, n);
break;
case LABEL_GADGET:
printf ("can't do the label gadget scene\n");
widget = (Widget) NULL;
break;
case LIST:
widget = XmCreateList (WidgetBoard, "BBoard", args, n);
break;
case MENU_BAR:
widget = XmCreateMenuBar (WidgetBoard, "BBoard", args, n);
break;
case MENU_SHELL:
widget = XmCreateMenuShell (WidgetBoard, "BBoard", args, n);
break;
default:
widget = (Widget) NULL;
}
if (widget != (Widget) NULL) {
XmStringFree (tcs);
XtManageChild (widget);
}
return (widget);
}
/***********************************************************/
/* support routine to get normal string from XmString */
char *extract_normal_string(cs)
XmString cs;
{
XmStringContext context;
XmStringCharSet charset;
XmStringDirection direction;
Boolean separator;
static char *primitive_string;
XmStringInitContext (&context,cs);
XmStringGetNextSegment (context,&primitive_string,
&charset,&direction,&separator);
XmStringFreeContext (context);
return ((char *) primitive_string);
}