|
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 - download
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); }