/* * @OPENGROUP_COPYRIGHT@ * COPYRIGHT NOTICE * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for * the full copyright text. * * This software is subject to an open license. It may only be * used on, with or for operating systems which are themselves open * source systems. You must contact The Open Group for a license * allowing distribution and sublicensing of this software on, with, * or for operating systems which are not Open Source programs. * * See http://www.opengroup.org/openmotif/license for full * details of the license agreement. Any use, reproduction, or * distribution of the program constitutes recipient's acceptance of * this agreement. * * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY * OR FITNESS FOR A PARTICULAR PURPOSE * * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGES. */ /* * HISTORY */ #ifdef REV_INFO #ifndef lint static char rcsid[] = "$XConsortium: Form1.c /main/4 1995/07/13 18:00:28 drk $" #endif #endif /* * (c) Copyright 1987, 1988, 1989 HEWLETT-PACKARD COMPANY */ /* * Create two PushButtons in a form. The first being attached to the right * and top sides of the form. The second being attached to the left * and bottom of the form and the left edge of the first PushButton. */ #include #include #include "ClassTables.h" #define NUM_REPORT_LABELS 12 Widget sides[4], attaches[7]; Widget positionScale; Widget offsetScale; Widget target[2]; Widget reportLabels[NUM_REPORT_LABELS]; Widget form; /* this is the form under test */ Dimension child1_h, child1_w, child2_h, child2_w, child1_b, child2_b, child1_x, child1_y, child2_x, child2_y; /* starting sizes */ /* these are used by several routines */ char *side_names[] = { "Top", "Bottom", "Left", "Right"}; char *attaches_names[] = { "ATTACH_NONE", "ATTACH_FORM", "ATTACH_OPPOSITE_FORM", "ATTACH_WIDGET", "ATTACH_OPPOSITE_WIDGET", "ATTACH_POSITION", "ATTACH_SELF" }; /* Forward declarations */ /*extern char *UserData; extern char *instruct_file_name; */ void CreateButtonChildren(); void FormCallback(); void CreateControlPanel(); void RefreshAttachmentsReport(); void ReportFormSize(); WidgetClass ChildClass(); void InitializeClassLookupTables(); Widget CreateChild(); void CreateKidControls(); void SetTargetWidth(); void SetTargetHeight(); void SetTargetxPosition(); void SetTargetyPosition(); void SetTargetBorderWidth(); void SetTargetLabelString(); void SetTargetFont(); void FormSizeControlCallback(); void GetChildWidthHeight(); void GetChildxyPosition(); void GetChildWidthHeight(); void GetChildBorderWidth(); void PositionScaleModifyQuery(); void ChangePositionScaleMax(); /* main */ void main (argc, argv) unsigned int argc; char **argv; { Widget frame; Widget PushButton1; Widget PushButton2; Arg args[10]; int n, i; WidgetClass child_class; /* initialize toolkit */ CommonTestInit(argc, argv); XtRealizeWidget (Shell1); n=0; frame = XmCreateFrame(Shell1,"frame", args, n); XtManageChild(frame); /* The form creation. Contained in an outer frame. */ n = 0; XtSetArg (args[n], XmNfractionBase, 10); n++; form = XmCreateForm (frame, "form", args, n); XtManageChild (form); XtAddCallback (form, XmNhelpCallback, FormCallback, NULL); if (UserData != NULL) { InitializeClassLookupTables(); child_class = ChildClass (UserData); if (child_class != NULL) { CreateButtonChildren (form, child_class, 1); CreateButtonChildren (form, child_class, 0); } else { printf ("Child class %s not a legal class. Exiting.\n", UserData); exit (1); } } else { printf ("Usage: %s -u xmWidgetClass\n", argv[0]); fflush (stdout); exit (1); } CreateControlPanel(); if (instruct_file_name != NULL) { if (strncmp (instruct_file_name, "Form1a", 6) == 0) /* if you look carefully, you can spot P2253 in this test in panel #3. */ /* the circular dependency message shows up early & twice */ for (i = 0; i <= 5; i++) CommonPause(); else if (strncmp (instruct_file_name, "Form1b", 6) == 0) CommonPause(); else if (strncmp (instruct_file_name, "Form1c", 6) == 0) CommonPause(); else if (strncmp (instruct_file_name, "Form1d", 6) == 0) CommonPause(); else if (strncmp (instruct_file_name, "Form1e", 6) == 0) CommonPause(); else if (strncmp (instruct_file_name, "Form1f", 6) == 0) CommonPause(); else if (strncmp (instruct_file_name, "Form1g", 6) == 0) for (i = 0; i <= 2; i++) CommonPause(); else if (strncmp (instruct_file_name, "Form1h", 6) == 0) for (i = 0; i <= 2; i++) CommonPause(); else if (strncmp (instruct_file_name, "Form1k", 6) == 0) for (i = 0; i <= 2; i++) CommonPause(); } else printf ("Test error: file %s not opened\n", instruct_file_name); XtAppMainLoop(app_context); } WidgetClass ChildClass (child_class_name) char * child_class_name; { int i; for (i = 0; i <= NUM_LEGAL_CHILDREN - 1; i++) if (strcmp (child_class_name, child_table[i].string) == 0) return child_table[i].class; return ( (WidgetClass) NULL); } void InitializeClassLookupTables () { /* this grotesque hack is the simplest way I could think of to deal with the fact that the class pointer variables cannot be used in my lovely static arrays. A change to this array also requires changing both NUM_LEGAL_CHILDREN and the child_class array initialization in ClassTables.h. */ child_table[0].class = xmScaleWidgetClass; child_table[1].class = xmScrollBarWidgetClass; child_table[2].class = xmMessageBoxWidgetClass; child_table[3].class = xmSelectionBoxWidgetClass; child_table[4].class = xmCommandWidgetClass; child_table[5].class = xmFileSelectionBoxWidgetClass; child_table[6].class = xmArrowButtonWidgetClass; child_table[7].class = xmListWidgetClass; child_table[8].class = xmSeparatorWidgetClass; child_table[9].class = xmTextWidgetClass; child_table[10].class = xmTextFieldWidgetClass; child_table[11].class = xmLabelWidgetClass; child_table[12].class = xmDrawnButtonWidgetClass; child_table[13].class = xmPushButtonWidgetClass; child_table[14].class = xmToggleButtonWidgetClass; child_table[15].class = xmArrowButtonGadgetClass; child_table[16].class = xmSeparatorGadgetClass; child_table[17].class = xmLabelGadgetClass; child_table[18].class = xmPushButtonGadgetClass; child_table[19].class = xmToggleButtonGadgetClass; child_table[20].class = xmBulletinBoardWidgetClass; child_table[21].class = xmFormWidgetClass; } void CreateButtonChildren (parent, child_class, whichchild) Widget parent; WidgetClass child_class; int whichchild; { int n; Arg args[5]; /* Arguments to the first child. */ if (whichchild == 0) { n = 0; XtSetArg (args[n], XmNbackground, CommonGetColor ("blue")); n++; target[0]=CreateChild (child_class, parent, "Child1", args, n); XtManageChild (target[0]); /* store starting size for Clear */ XtSetArg (args[0], XmNheight, &child1_h); XtSetArg (args[1], XmNwidth, &child1_w); XtSetArg (args[2], XmNborderWidth, &child1_b); XtSetArg (args[3], XmNx, &child1_x); XtSetArg (args[4], XmNy, &child1_y); XtGetValues (target[0], args, 5); return; } if (whichchild == 1) { /* Arguments to the second child. */ n = 0; XtSetArg (args[n], XmNbackground, CommonGetColor ("yellow")); n++; target[1]=CreateChild (child_class, parent, "Child2", args, n); XtManageChild (target[1]); /* store starting size for Clear */ XtSetArg (args[0], XmNheight, &child2_h); XtSetArg (args[1], XmNwidth, &child2_w); XtSetArg (args[2], XmNborderWidth, &child2_b); XtSetArg (args[3], XmNx, &child2_x); XtSetArg (args[4], XmNy, &child2_y); XtGetValues (target[1], args, 5); return; } } /* modification for automation */ Widget CreateChild (child_class, parent, name, args, n) WidgetClass child_class; Widget parent; char name[6]; Arg args[10]; int n; { Widget wid; if (child_class == xmScaleWidgetClass) wid = XmCreateScale (parent, name, args, n); if (child_class == xmScrollBarWidgetClass) wid = XmCreateScrollBar (parent, name, args, n); if (child_class == xmMessageBoxWidgetClass) wid = XmCreateMessageBox (parent, name, args, n); if (child_class == xmSelectionBoxWidgetClass) wid = XmCreateSelectionBox (parent, name, args, n); if (child_class == xmCommandWidgetClass) wid = XmCreateCommand (parent, name, args, n); if (child_class == xmFileSelectionBoxWidgetClass) wid = XmCreateFileSelectionBox (parent, name, args, n); if (child_class == xmArrowButtonWidgetClass) wid = XmCreateArrowButton (parent, name, args, n); if (child_class == xmListWidgetClass) wid = XmCreateList (parent, name, args, n); if (child_class == xmSeparatorWidgetClass) wid = XmCreateSeparator (parent, name, args, n); if (child_class == xmTextWidgetClass) wid = XmCreateText (parent, name, args, n); if (child_class == xmTextFieldWidgetClass) wid = XmCreateTextField (parent, name, args, n); if (child_class == xmLabelWidgetClass) wid = XmCreateLabel (parent, name, args, n); if (child_class == xmDrawnButtonWidgetClass) wid = XmCreateDrawnButton (parent, name, args, n); if (child_class == xmPushButtonWidgetClass) wid = XmCreatePushButton (parent, name, args, n); if (child_class == xmArrowButtonGadgetClass) wid = XmCreateArrowButtonGadget (parent, name, args, n); if (child_class == xmSeparatorGadgetClass) wid = XmCreateSeparatorGadget (parent, name, args, n); if (child_class == xmLabelGadgetClass) wid = XmCreateLabelGadget (parent, name, args, n); if (child_class == xmPushButtonGadgetClass) wid = XmCreatePushButtonGadget (parent, name, args, n); if (child_class == xmToggleButtonGadgetClass) wid = XmCreateToggleButtonGadget (parent, name, args, n); if (child_class == xmBulletinBoardWidgetClass) wid = XmCreateBulletinBoard(parent, name, args, n); if (child_class == xmFormWidgetClass) wid = XmCreateForm(parent, name, args, n); return (wid); } void QuitCB(w, client_data, call_data) Widget w; XtPointer client_data; XtPointer call_data; { printf("Exiting...Please Standby...\n"); exit(0); } void FormCallback (fw, closure, call_data) XmFormWidget fw; XtPointer closure; XtPointer call_data; { int reason; XmAnyCallbackStruct * call_value = (XmAnyCallbackStruct *) call_data; reason = call_value -> reason; switch (reason) { case XmCR_HELP: printf ("Reason = XmCR_HELP\n"); break; default: printf ("Test Warning: incorrect reason sent!!\n"); break; } } void ChangeAttachments(w, client_data, call_data) Widget w; XtPointer client_data; XtPointer call_data; { static char *whichside[] = { "topAttachment", "bottomAttachment", "leftAttachment", "rightAttachment" }; static int whichattach[] = { XmATTACH_NONE, XmATTACH_FORM, XmATTACH_OPPOSITE_FORM, XmATTACH_WIDGET, XmATTACH_OPPOSITE_WIDGET, XmATTACH_POSITION, XmATTACH_SELF }; Arg args[8]; int i = 0; int j = 0; int n = 0; int value; /* for scale value */ int offset; /* for offset scale */ int target_number = 0; if ( (int)(long)client_data == 0 ) target_number = 1; while (!(XmToggleButtonGadgetGetState(sides[i]))) i++; while (!(XmToggleButtonGadgetGetState(attaches[j]))) j++; XmScaleGetValue (offsetScale, &offset); if ((j == 1) || (j == 2)) { /* ATTACH_FORM or ATTACH_OPPOSITE_FORM */ switch (i) { case 0: XtSetArg (args[n], XmNtopOffset, offset); n++; /* we use !((int)client_data because you are setting the */ break; /* OTHER widget to be the top, bottom, left, rightWidget!!! */ case 1: XtSetArg (args[n], XmNbottomOffset, offset); n++; break; case 2: XtSetArg (args[n], XmNleftOffset, offset); n++; break; case 3: XtSetArg (args[n], XmNrightOffset, offset); n++; break; } } if ((j == 3) || (j == 4)) { /* ATTACH_WIDGET or ATTACH_OPPOSITE_WIDGET */ switch (i) { case 0: XtSetArg (args[n], XmNtopWidget, target[target_number]); n++; /* we use !((int)client_data because you are setting the */ XtSetArg (args[n], XmNtopOffset, offset); n++; break; /* OTHER widget to be the top, bottom, left, rightWidget!!! */ case 1: XtSetArg (args[n], XmNbottomWidget, target[target_number]); n++; XtSetArg (args[n], XmNbottomOffset, offset); n++; break; case 2: XtSetArg (args[n], XmNleftWidget, target[target_number]); n++; XtSetArg (args[n], XmNleftOffset, offset); n++; break; case 3: XtSetArg (args[n], XmNrightWidget, target[target_number]); n++; XtSetArg (args[n], XmNrightOffset, offset); n++; break; } } if (j == 5) { /* ATTACH_POSITION */ XmScaleGetValue (positionScale, &value); switch (i) { case 0: XtSetArg (args[n], XmNtopPosition, value); n++; break; case 1: XtSetArg (args[n], XmNbottomPosition, value); n++; break; case 2: XtSetArg (args[n], XmNleftPosition, value); n++; break; case 3: XtSetArg (args[n], XmNrightPosition, value); n++; break; } } XtSetArg(args[n], whichside[i], whichattach[j]); n++; XtSetValues(target[!target_number], args, n); RefreshAttachmentsReport(reportLabels); } void ClearAttachments(w, client_data, call_data) Widget w; XtPointer client_data, call_data; { XmString tcs, tcs2; Arg args[12]; int n; /* XtDestroyWidget (target[(int)client_data]); */ if ((int)(long)client_data == 1) { /* reset button 2 top left corner */ n = 0; tcs = XmStringCreateSimple ("Child2"); tcs2 = XmStringCreateSimple (""); XtSetArg (args[n], XmNheight, child1_h); n++; XtSetArg (args[n], XmNwidth, child1_w); n++; XtSetArg (args[n], XmNborderWidth, child1_b); n++; XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; XtSetArg (args[n], XmNbottomAttachment, XmATTACH_NONE); n++; XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; XtSetArg (args[n], XmNlabelString, tcs ); n++; XtSetArg (args[n], XmNtitleString, tcs2 ); n++; XtSetValues (target[(int)(long)client_data], args, n); XmStringFree(tcs); XmStringFree(tcs2); } else { /* reset button 1 */ n = 0; tcs = XmStringCreateSimple ("Child1"); tcs2 = XmStringCreateSimple (""); XtSetArg (args[n], XmNheight, child2_h); n++; XtSetArg (args[n], XmNwidth, child2_w); n++; XtSetArg (args[n], XmNborderWidth, child2_b); n++; XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; XtSetArg (args[n], XmNbottomAttachment, XmATTACH_NONE); n++; XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; XtSetArg (args[n], XmNrightAttachment, XmATTACH_NONE); n++; XtSetArg (args[n], XmNlabelString, tcs ); n++; XtSetArg (args[n], XmNtitleString, tcs2 ); n++; XtSetValues (target[(int)(long)client_data], args, n); XmStringFree(tcs); XmStringFree(tcs2); } RefreshAttachmentsReport(reportLabels); } void CreateControlPanel() { Widget popup; Widget controlpanel; Widget mainParent; Widget actionsBoard, reportPanel, formPanel, kidPanel; Widget rbox1, rbox2; Widget button1, button2; Widget clear1, clear2; Widget form_rc; Widget formSizeControl[10]; Widget resizeButton; Arg args[MAX_ARGS]; register int n, i; char buf[32]; XmString tcs; n=0; XtSetArg (args[n], XmNx, 10); n++; XtSetArg (args[n], XmNy, 165); n++; XtSetArg(args[n], XtNallowShellResize, True); n++; popup = XtCreatePopupShell ("popup", topLevelShellWidgetClass, Shell1, args, n); n = 0; XtSetArg (args[n], XmNwidth, 200); n++; XtSetArg (args[n], XmNallowResize, True); n++; controlpanel = XmCreateBulletinBoard(popup, "controlpanel", args, n); n = 0; XtSetArg (args[n],XmNwidth, 200); n++; mainParent = XmCreatePanedWindow (controlpanel, "mainParent", args, n); n = 0; XtSetArg (args[n], XmNallowResize, True); n++; actionsBoard = XmCreateBulletinBoard (mainParent, "actions", args, n); n = 0; XtSetArg (args[n], XmNisHomogeneous, True); n++; XtSetArg (args[n], XmNradioAlwaysOne, True); n++; XtSetArg (args[n], XmNx, 20); n++; XtSetArg (args[n], XmNy, 0); n++; rbox1 = XmCreateRadioBox (actionsBoard, "rbox1", args, n); n = 0; XtSetArg (args[n], XmNisHomogeneous, True); n++; XtSetArg (args[n], XmNradioAlwaysOne, True); n++; XtSetArg (args[n], XmNx, 200); n++; XtSetArg (args[n], XmNy, 0); n++; rbox2 = XmCreateRadioBox (actionsBoard, "rbox1", args, n); for (i = 0; i <= 3; i++) { n = 0; tcs = XmStringCreate(side_names[i], XmSTRING_DEFAULT_CHARSET); XtSetArg(args[n], XmNlabelString, tcs ); n++; sprintf(buf, "sides%d", i); sides[i] = XmCreateToggleButtonGadget(rbox1, buf, args, n); XtManageChild(sides[i]); XmStringFree(tcs); } /* set one side on by default */ XmToggleButtonGadgetSetState (sides[0], True, False); for (i = 0; i <= 6; i++) { n = 0; tcs = XmStringCreate(attaches_names[i], XmSTRING_DEFAULT_CHARSET); XtSetArg(args[n], XmNlabelString, tcs ); n++; sprintf(buf, "attaches%d", i); attaches[i] = XmCreateToggleButtonGadget(rbox2, buf, args, n); XtManageChild(attaches[i]); XmStringFree(tcs); } XmToggleButtonGadgetSetState (attaches[1], True, False); n = 0; tcs = XmStringCreateSimple ("Move Child1"); XtSetArg (args[n], XmNbackground, CommonGetColor ("blue")); n++; XtSetArg (args[n], XmNlabelString, tcs ); n++; XtSetArg (args[n], XmNx, 20); n++; XtSetArg (args[n], XmNy, 250); n++; button1 = XmCreatePushButton(actionsBoard, "button1", args, n); XtManageChild (button1); XtAddCallback(button1, XmNactivateCallback, ChangeAttachments, 0); XmStringFree(tcs); n = 0; tcs = XmStringCreateSimple ("Clear Child1"); XtSetArg (args[n], XmNbackground, CommonGetColor ("blue")); n++; XtSetArg (args[n], XmNlabelString, tcs ); n++; XtSetArg (args[n], XmNx, 20); n++; XtSetArg (args[n], XmNy, 300); n++; clear1 = XmCreatePushButton(actionsBoard, "clear1", args, n); XtManageChild (clear1); XtAddCallback(clear1, XmNactivateCallback, ClearAttachments, 0); XmStringFree(tcs); n = 0; tcs = XmStringCreateSimple ("Position Attachment"); XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; XtSetArg (args[n], XmNminimum, 1); n++; XtSetArg (args[n], XmNmaximum, 10); n++; XtSetArg (args[n], XmNshowValue, True); n++; XtSetArg (args[n], XmNtitleString, tcs ); n++; XtSetArg (args[n], XmNx, 20); n++; XtSetArg (args[n], XmNy, 125); n++; XtSetArg (args[n], XmNscaleMultiple, 1); n++; positionScale = XmCreateScale (actionsBoard, "positionScale", args, n); XtManageChild (positionScale); XmStringFree(tcs); n = 0; tcs = XmStringCreateSimple ("Offset"); XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; XtSetArg (args[n], XmNminimum, 0); n++; XtSetArg (args[n], XmNmaximum, 200); n++; XtSetArg (args[n], XmNshowValue, True); n++; XtSetArg (args[n], XmNtitleString, tcs ); n++; XtSetArg (args[n], XmNx, 20); n++; XtSetArg (args[n], XmNy, 180); n++; XtSetArg (args[n], XmNscaleMultiple, 1); n++; offsetScale = XmCreateScale (actionsBoard, "offsetScale", args, n); XtManageChild (offsetScale); XmStringFree(tcs); n = 0; tcs = XmStringCreateSimple ("Move Child2"); XtSetArg (args[n], XmNbackground, CommonGetColor ("yellow")); n++; XtSetArg (args[n], XmNlabelString, tcs ); n++; XtSetArg (args[n], XmNx, 200); n++; XtSetArg (args[n], XmNy, 250); n++; button2 = XmCreatePushButton(actionsBoard, "button2", args, n); XtManageChild (button2); XtAddCallback(button2, XmNactivateCallback, ChangeAttachments, (XtPointer) 1); XmStringFree(tcs); n = 0; tcs = XmStringCreateSimple ("Clear Child2"); XtSetArg (args[n], XmNbackground, CommonGetColor ("yellow")); n++; XtSetArg (args[n], XmNlabelString, tcs ); n++; XtSetArg (args[n], XmNx, 200); n++; XtSetArg (args[n], XmNy, 300); n++; clear2 = XmCreatePushButton(actionsBoard, "clear2", args, n); XtManageChild (clear2); XtAddCallback(clear2, XmNactivateCallback, ClearAttachments, (XtPointer) 1); XmStringFree(tcs); /* the second panel of PanedWindow contains the status of the attachments */ /* for buttons1 and 2 at all times */ n = 0; XtSetArg (args[n], XmNnumColumns, 4); n++; XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; XtSetArg (args[n], XmNpacking, XmPACK_COLUMN); n++; XtSetArg (args[n], XmNallowResize, True); n++; reportPanel = XmCreateRowColumn (mainParent, "report", args, n); for (i = 0; i <= NUM_REPORT_LABELS - 1; i++) { n = 0; if (i%3 == 1) XtSetArg (args[n], XmNalignment, XmALIGNMENT_CENTER); n++; sprintf(buf, "labelchildlabelchildi%d", i); reportLabels[i] = XmCreateLabelGadget (reportPanel, buf, args, n); XtManageChild (reportLabels[i]); } RefreshAttachmentsReport(reportLabels); n = 0; XtSetArg (args[n], XmNallowResize, True); n++; formPanel = XmCreateForm (mainParent, "formPanel", args, n); n = 0; XtSetArg (args[n], XmNisHomogeneous, False); n++; XtSetArg (args[n], XmNpacking, XmPACK_COLUMN); n++; XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; XtSetArg (args[n], XmNnumColumns, 2); n++; form_rc = XmCreateRowColumn (formPanel, "form_rc", args, n); n = 0; tcs = XmStringCreateSimple ("Report Form Size"); XtSetArg (args[n], XmNlabelString, tcs ); n++; XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; XtSetArg (args[n], XmNtopWidget, form_rc); n++; resizeButton = XmCreatePushButton (formPanel, "formsize", args, n); XtAddCallback (resizeButton, XmNactivateCallback, ReportFormSize, NULL); XmStringFree(tcs); n = 0; tcs = XmStringCreateSimple ("fraction base"); XtSetArg (args[n], XmNlabelString, tcs ); n++; formSizeControl[0] = XmCreateLabel (form_rc, "fractionBase", args, n); XmStringFree(tcs); n = 0; tcs = XmStringCreateSimple ("horizontal spacing"); XtSetArg (args[n], XmNlabelString, tcs ); n++; formSizeControl[1] = XmCreateLabel (form_rc, "horizontalSpacing", args, n); XmStringFree(tcs); n = 0; XtSetArg (args[n], XmNlabelString, XmStringCreateSimple ("vertical spacing")); n++; formSizeControl[2] = XmCreateLabel (form_rc, "verticalSpacing", args, n); n = 0; XtSetArg (args[n], XmNlabelString, XmStringCreateSimple ("form height")); n++; formSizeControl[3] = XmCreateLabel (form_rc, "formheight", args, n); n = 0; XtSetArg (args[n], XmNlabelString, XmStringCreateSimple ("form width")); n++; formSizeControl[4] = XmCreateLabel (form_rc, "formwidth", args, n); for (i = 5; i <= 9; i++) { n = 0; sprintf (buf, "formSizeText%d", i); XtSetArg (args[n], XmNcolumns, 6); n++; formSizeControl[i] = XmCreateTextField (form_rc, buf, args, n); XtAddCallback (formSizeControl[i], XmNactivateCallback, FormSizeControlCallback, (XtPointer) (long)i); } /* a panel of controls for controlling the children of Form */ n=0; XtSetArg (args[n], XmNallowResize, True); n++; kidPanel = XmCreateForm (mainParent, "kidPanel", args, n); CreateKidControls(kidPanel); XtManageChild (kidPanel); XtManageChildren (formSizeControl, 10); XtManageChild (form_rc); XtManageChild (resizeButton); XtManageChild (formPanel); XtManageChild (rbox2); XtManageChild (rbox1); XtManageChild (actionsBoard); XtManageChild (reportPanel); XtManageChild (mainParent); XtManageChild (controlpanel); XtPopup (popup,XtGrabNone); } void ReportFormSize (widget, client_data, call_data) Widget widget; XtPointer client_data, call_data; { Dimension h, w; Arg args[2]; XtSetArg (args[0], XmNheight, &h); XtSetArg (args[1], XmNwidth, &w); XtGetValues (form, args, 2); printf ("Form height %d, width %d\n", (int) h, (int) w); } void FormSizeControlCallback (w, client_data, call_data) Widget w; int client_data; XtPointer call_data; { Arg args[1]; char * value; value = XmTextFieldGetString (w); switch (client_data) { case 5: /* fractionBase, an int */ XtSetArg (args[0], XmNfractionBase, atoi (value)); XtSetValues (form, args, 1); /* ask user if they want to reset max for positionScale's */ PositionScaleModifyQuery(); break; case 6: /* horizontal spacing, a Dimension */ XtSetArg (args[0], XmNhorizontalSpacing, (Dimension) atoi (value)); XtSetValues (form, args, 1); break; case 7: /* vertical spacing, a Dimension */ XtSetArg (args[0], XmNverticalSpacing, (Dimension) atoi (value)); XtSetValues (form, args, 1); break; case 8: /* form height */ XtSetArg (args[0], XmNheight, (Dimension) atoi (value)); XtSetValues (form, args, 1); break; case 9: /* form width */ XtSetArg (args[0], XmNwidth, (Dimension) atoi (value)); XtSetValues (form, args, 1); break; default: printf ("Error: wrong value in FormSizeControlCallback\n"); fflush (stdout); } XtFree (value); } void PositionScaleModifyQuery() { /* ask the user if s/he wants to redo the max for positionScale when fractionBase is changed */ static Widget popup, message, max_text, apply, cancel; int n; Arg args[4]; n = 0; XtSetArg (args[n], XmNautoUnmanage, True); n++; XtSetArg (args[n], XmNdialogType, XmDIALOG_FULL_APPLICATION_MODAL); n++; popup = XmCreateBulletinBoardDialog (Shell1, "popup", args, n); XtPopup (popup,XtGrabNone); n = 0; XtSetArg (args[n], XmNx, 20); n++; XtSetArg (args[n], XmNy, 25); n++; XtSetArg (args[n], XmNlabelString, XmStringCreateLtoR ("Enter new value for positionScale\nmax and Apply, or Cancel to leave as is.", "foo")); n++; message = XmCreateLabel (popup, "message", args, n); n = 0; XtSetArg (args[n], XmNx, 20); n++; XtSetArg (args[n], XmNy, 100); n++; XtSetArg (args[n], XmNwidth, 50); n++; max_text = XmCreateTextField (popup, "max_text", args, n); n = 0; XtSetArg (args[n], XmNlabelString, XmStringCreateSimple ("Apply")); n++; XtSetArg (args[n], XmNx, 20); n++; XtSetArg (args[n], XmNy, 150); n++; apply = XmCreatePushButton (popup, "apply", args, n); XtAddCallback (apply, XmNactivateCallback, ChangePositionScaleMax, max_text); n = 0; XtSetArg (args[n], XmNlabelString, XmStringCreateSimple ("Cancel")); n++; XtSetArg (args[n], XmNx, 100); n++; XtSetArg (args[n], XmNy, 150); n++; cancel = XmCreatePushButton (popup, "cancel", args, n); XtManageChild (cancel); XtManageChild (apply); XtManageChild (max_text); XtManageChild (message); XtManageChild (popup); } void ChangePositionScaleMax (w, client_data, call_data) Widget w, client_data; XtPointer call_data; { char * string; Arg args[1]; int cur_max, new_max; string = XmTextFieldGetString (client_data); XtSetArg (args[0], XmNmaximum, &cur_max); XtGetValues (positionScale, args, 1); if ((new_max = atoi (string)) != cur_max) { XtSetArg (args[0], XmNmaximum, new_max); XtSetValues (positionScale, args, 1); } XtFree (string); } void RefreshAttachmentsReport(reportLabels) Widget *reportLabels; { int i, n; XmString cs; static int created = 0; Arg args[6]; unsigned char top, bottom, left, right; /* what we are building is this: * Button1attachment TOP Button2attachment * ditto BOTTOM ditto * ditto LEFT ditto * ditto RIGHT ditto */ /* labels 1, 4, 7, and 10 are always the same */ /* only create them once! */ if (!created) { n = 0; cs = XmStringCreateSimple (" Top "); XtSetArg (args[n], XmNlabelString, cs); n++; XtSetValues (reportLabels[1], args, n); XmStringFree(cs); n = 0; cs = XmStringCreateSimple (" Bottom "); XtSetArg (args[n], XmNlabelString, cs); n++; XtSetValues (reportLabels[4], args, n); XmStringFree(cs); n = 0; cs = XmStringCreateSimple (" Left "); XtSetArg (args[n], XmNlabelString, cs); n++; XtSetValues (reportLabels[7], args, n); XmStringFree(cs); n = 0; cs = XmStringCreateSimple (" Right "); XtSetArg (args[n], XmNlabelString, cs); n++; XtSetValues (reportLabels[10], args, n); XmStringFree(cs); created = 1; } /* labels 0, 3, 6, 9 contain button 1's attachments. Go get 'em, then use that value as the index into attaches_names[] and print out the string. */ n = 0; XtSetArg (args[n], XmNtopAttachment, &top); n++; XtSetArg (args[n], XmNbottomAttachment, &bottom); n++; XtSetArg (args[n], XmNleftAttachment, &left); n++; XtSetArg (args[n], XmNrightAttachment, &right); n++; XtGetValues (target[0], args, n); #ifdef DEBUG printf ("Button1:\n top: %d\n, bottom: %d\n, left: %d\n right %d\n", (int) top, (int) bottom, (int) left, (int) right); #endif n = 0; cs = XmStringCreateSimple (attaches_names[top]); XtSetArg (args[n], XmNlabelString, cs); n++; XtSetValues (reportLabels[0], args, n); XmStringFree(cs); n = 0; cs = XmStringCreateSimple (attaches_names[bottom]); XtSetArg (args[n], XmNlabelString, cs); n++; XtSetValues (reportLabels[3], args, n); XmStringFree(cs); n = 0; cs = XmStringCreateSimple (attaches_names[left]); XtSetArg (args[n], XmNlabelString, cs); n++; XtSetValues (reportLabels[6], args, n); XmStringFree(cs); n = 0; cs = XmStringCreateSimple (attaches_names[right]); XtSetArg (args[n], XmNlabelString, cs); n++; XtSetValues (reportLabels[9], args, n); XmStringFree(cs); /* and now the same exact thing, for button2 (target[1]), labels 2, 5, 8, 11 */ n = 0; XtSetArg (args[n], XmNtopAttachment, &top); n++; XtSetArg (args[n], XmNbottomAttachment, &bottom); n++; XtSetArg (args[n], XmNleftAttachment, &left); n++; XtSetArg (args[n], XmNrightAttachment, &right); n++; XtGetValues (target[1], args, n); #ifdef DEBUG printf ("Button1:\n top: %d\n, bottom: %d\n, left: %d\n right %d\n", (int) top, (int) bottom, (int) left, (int) right); #endif n = 0; cs = XmStringCreateSimple (attaches_names[top]); XtSetArg (args[n], XmNlabelString, cs); n++; XtSetValues (reportLabels[2], args, n); XmStringFree(cs); n = 0; cs = XmStringCreateSimple (attaches_names[bottom]); XtSetArg (args[n], XmNlabelString, cs); n++; XtSetValues (reportLabels[5], args, n); XmStringFree(cs); n = 0; cs = XmStringCreateSimple (attaches_names[left]); XtSetArg (args[n], XmNlabelString, cs); n++; XtSetValues (reportLabels[8], args, n); XmStringFree(cs); n = 0; cs = XmStringCreateSimple (attaches_names[right]); XtSetArg (args[n], XmNlabelString, cs); n++; XtSetValues (reportLabels[11], args, n); XmStringFree (cs); } void CreateKidControls(parent) Widget parent; { Widget measure_rc, target_rc; static Widget target_toggle[2]; Widget width_rc, height_rc, border_rc, label_rc, font_rc, x_rc, y_rc; Widget width_pair[2], height_pair[2], border_pair[2], x_pair[2], y_pair[2], label_pair[2], font_pair[2]; Widget WHButton, xyButton, BorderButton; XmString tcs; Arg args[10]; int n; /* parent is a Form */ n = 0; XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; XtSetArg (args[n], XmNnumColumns, 1); n++; XtSetArg (args[n], XmNpacking, XmPACK_COLUMN); n++; XtSetArg (args[n], XmNradioBehavior, True); n++; target_rc = XmCreateRowColumn (parent, "target_rc", args, n); n = 0; XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; XtSetArg (args[n], XmNnumColumns, 1); n++; XtSetArg (args[n], XmNpacking, XmPACK_COLUMN); n++; XtSetArg (args[n], XmNradioBehavior, True); n++; XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; XtSetArg (args[n], XmNtopWidget, target_rc); n++; measure_rc = XmCreateRowColumn (parent, "measure_rc", args, n); n = 0; XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; XtSetArg (args[n], XmNnumColumns, 1); n++; XtSetArg (args[n], XmNpacking, XmPACK_COLUMN); n++; XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; XtSetArg (args[n], XmNtopWidget, measure_rc); n++; width_rc = XmCreateRowColumn (parent, "width_rc", args, n); n = 0; XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; XtSetArg (args[n], XmNnumColumns, 1); n++; XtSetArg (args[n], XmNpacking, XmPACK_COLUMN); n++; XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; XtSetArg (args[n], XmNtopWidget, width_rc); n++; height_rc = XmCreateRowColumn (parent, "height_rc", args, n); n = 0; XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; XtSetArg (args[n], XmNnumColumns, 1); n++; XtSetArg (args[n], XmNpacking, XmPACK_TIGHT); n++; XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; XtSetArg (args[n], XmNtopWidget, measure_rc); n++; XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; XtSetArg (args[n], XmNleftWidget, width_rc); n++; x_rc = XmCreateRowColumn (parent, "x_rc", args, n); n = 0; XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; XtSetArg (args[n], XmNnumColumns, 1); n++; XtSetArg (args[n], XmNpacking, XmPACK_TIGHT); n++; XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; XtSetArg (args[n], XmNtopWidget, x_rc); n++; XtSetArg (args[n], XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET); n++; XtSetArg (args[n], XmNleftWidget, x_rc); n++; y_rc = XmCreateRowColumn (parent, "y_rc", args, n); n = 0; XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; XtSetArg (args[n], XmNnumColumns, 1); n++; XtSetArg (args[n], XmNpacking, XmPACK_TIGHT); n++; XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; XtSetArg (args[n], XmNtopWidget, measure_rc); n++; XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; XtSetArg (args[n], XmNleftWidget, x_rc); n++; border_rc = XmCreateRowColumn (parent, "border_rc", args, n); n = 0; XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; XtSetArg (args[n], XmNnumColumns, 1); n++; XtSetArg (args[n], XmNpacking, XmPACK_TIGHT); n++; XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; XtSetArg (args[n], XmNleftWidget, border_rc); n++; XtSetArg (args[n], XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET); n++; XtSetArg (args[n], XmNtopWidget, width_rc); n++; label_rc = XmCreateRowColumn (parent, "label_rc", args, n); n = 0; XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; XtSetArg (args[n], XmNnumColumns, 1); n++; XtSetArg (args[n], XmNpacking, XmPACK_TIGHT); n++; XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; XtSetArg (args[n], XmNtopWidget, label_rc); n++; XtSetArg (args[n], XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET); n++; XtSetArg (args[n], XmNleftWidget, label_rc); n++; font_rc = XmCreateRowColumn (parent, "font_rc", args, n); /* create the target toggles */ n = 0; tcs = XmStringCreateSimple ("Set child 1"); XtSetArg (args[n], XmNlabelString, tcs ); n++; XtSetArg (args[n], XmNset, True); n++; XtSetArg (args[n], XmNselectColor, CommonGetColor ("blue")); n++; target_toggle[0] = XmCreateToggleButtonGadget (target_rc, "target0", args, n); XmStringFree(tcs); n = 0; tcs = XmStringCreateSimple ("Set child 2"); XtSetArg (args[n], XmNlabelString, tcs ); n++; XtSetArg (args[n], XmNselectColor, CommonGetColor ("yellow")); n++; target_toggle[1] = XmCreateToggleButtonGadget (target_rc, "target1", args, n); XmStringFree(tcs); n = 0; tcs = XmStringCreateSimple ("Get Child Width & Height"); XtSetArg (args[n], XmNlabelString, tcs ); n++; WHButton = XmCreatePushButton (measure_rc, "WHButton", args, n); XtAddCallback (WHButton, XmNactivateCallback, GetChildWidthHeight, target_toggle[0]); XmStringFree(tcs); n = 0; tcs = XmStringCreateSimple ("Get Child x & y Position"); XtSetArg (args[n], XmNlabelString, tcs ); n++; xyButton = XmCreatePushButton (measure_rc, "xyButton", args, n); XtAddCallback (xyButton, XmNactivateCallback, GetChildxyPosition, target_toggle[0]); XmStringFree(tcs); n = 0; XtSetArg (args[n], XmNlabelString, XmStringCreateSimple ("Get Child Border Width")); n++; BorderButton = XmCreatePushButton (measure_rc, "BorderButton", args, n); XtAddCallback (BorderButton, XmNactivateCallback, GetChildBorderWidth, target_toggle[0]); /* all kids will get width, height, value/label, font controls */ /* other controls to be added as needed */ n = 0; width_pair[0] = XmCreateLabelGadget (width_rc, "Width", args, n); height_pair[0] = XmCreateLabelGadget (height_rc, "Height", args, n); border_pair[0] = XmCreateLabelGadget (border_rc, "Border Width", args, n); label_pair[0] = XmCreateLabelGadget (label_rc, "LabelValue", args, n); font_pair[0] = XmCreateLabelGadget (font_rc, "Font", args, n); x_pair[0] = XmCreateLabelGadget (x_rc, "xPosition", args, n); y_pair[0] = XmCreateLabelGadget (y_rc, "yPosition", args, n); n = 0; XtSetArg (args[n], XmNcolumns, 5); n++; width_pair[1] = XmCreateTextField (width_rc, "widthText", args, n); height_pair[1] = XmCreateTextField (height_rc, "heightText", args, n); border_pair[1] = XmCreateTextField (border_rc, "BorderText", args, n); x_pair[1] = XmCreateTextField (x_rc, "xText", args, n); y_pair[1] = XmCreateTextField (y_rc, "yText", args, n); n = 0; XtSetArg (args[n], XmNcolumns, 25); n++; label_pair[1] = XmCreateTextField (label_rc, "labelText", args, n); font_pair[1] = XmCreateTextField (font_rc, "fontText", args, n); XtAddCallback (width_pair[1], XmNactivateCallback, SetTargetWidth, target_toggle[0]); XtAddCallback (height_pair[1], XmNactivateCallback, SetTargetHeight, target_toggle[0]); XtAddCallback (label_pair[1], XmNactivateCallback, SetTargetLabelString, target_toggle[0]); XtAddCallback (border_pair[1], XmNactivateCallback, SetTargetBorderWidth, target_toggle[0]); XtAddCallback (x_pair[1], XmNactivateCallback, SetTargetxPosition, target_toggle[0]); XtAddCallback (y_pair[1], XmNactivateCallback, SetTargetyPosition, target_toggle[0]); XtAddCallback (font_pair[1], XmNactivateCallback, SetTargetFont, target_toggle[0]); /* manage everyone */ XtManageChildren (label_pair, 2); XtManageChildren (font_pair, 2); XtManageChildren (width_pair, 2); XtManageChildren (height_pair, 2); XtManageChildren (border_pair, 2); XtManageChildren (x_pair, 2); XtManageChildren (y_pair, 2); XtManageChildren (target_toggle, 2); XtManageChild (WHButton); XtManageChild (xyButton); XtManageChild (BorderButton); XtManageChild (width_rc); XtManageChild (height_rc); XtManageChild (x_rc); XtManageChild (y_rc); XtManageChild (border_rc); XtManageChild (label_rc); XtManageChild (font_rc); XtManageChild (measure_rc); XtManageChild (target_rc); return; } void SetTargetHeight (w, client_data, call_data) Widget w; Widget client_data; XtPointer call_data; { Arg args[1]; char *text_value; text_value = XmTextFieldGetString (w); XtSetArg (args[0], XmNheight, (Dimension) atoi (text_value)); /* which target to set */ if (XmToggleButtonGetState (client_data)) XtSetValues (target[0], args, 1); else XtSetValues (target[1], args, 1); XtFree (text_value); } void SetTargetWidth (w, client_data, call_data) Widget w; Widget client_data; XtPointer call_data; { Arg args[1]; char *text_value; text_value = XmTextFieldGetString (w); XtSetArg (args[0], XmNwidth, (Dimension) atoi (text_value)); /* which target to set */ if (XmToggleButtonGetState ((Widget) client_data)) XtSetValues (target[0], args, 1); else XtSetValues (target[1], args, 1); XtFree (text_value); } void SetTargetxPosition (w, client_data, call_data) Widget w; Widget client_data; XtPointer call_data; { Arg args[1]; char *text_value; text_value = XmTextFieldGetString (w); XtSetArg (args[0], XmNx, (Dimension) atoi (text_value)); /* which target to set */ if (XmToggleButtonGetState ((Widget) client_data)) XtSetValues (target[0], args, 1); else XtSetValues (target[1], args, 1); XtFree (text_value); } void SetTargetyPosition (w, client_data, call_data) Widget w; Widget client_data; XtPointer call_data; { Arg args[1]; char *text_value; text_value = XmTextFieldGetString (w); XtSetArg (args[0], XmNy, (Dimension) atoi (text_value)); /* which target to set */ if (XmToggleButtonGetState ((Widget) client_data)) XtSetValues (target[0], args, 1); else XtSetValues (target[1], args, 1); XtFree (text_value); } void SetTargetBorderWidth (w, client_data, call_data) Widget w; Widget client_data; XtPointer call_data; { Arg args[1]; char *text_value; text_value = XmTextFieldGetString (w); XtSetArg (args[0], XmNborderWidth, (Dimension) atoi (text_value)); /* which target to set */ if (XmToggleButtonGetState ((Widget) client_data)) XtSetValues (target[0], args, 1); else XtSetValues (target[1], args, 1); XtFree (text_value); } void SetTargetLabelString (w, client_data, call_data) Widget w; Widget client_data; XtPointer call_data; { XmString tcs; char * s; Arg args[2]; s = XmTextFieldGetString (w); tcs = XmStringCreateSimple (s); XtSetArg (args[0], XmNlabelString, tcs); XtSetArg (args[1], XmNtitleString, tcs); /* which target to set */ if (XmToggleButtonGetState ((Widget) client_data)) XtSetValues (target[0], args, 2); else XtSetValues (target[1], args, 2); XtFree (s); XmStringFree (tcs); } void SetTargetFont (w, client_data, call_data) Widget w; XtPointer client_data, call_data; { } void GetChildWidthHeight (widget, client_data, call_data) Widget widget; Widget client_data; XtPointer call_data; { Dimension h, w; Arg args[2]; XtSetArg (args[0], XmNheight, &h); XtSetArg (args[1], XmNwidth, &w); if (XmToggleButtonGetState (client_data)) { /* get for target[0] */ XtGetValues (target[0], args, 2); printf ("Child 1:\n"); } else { XtGetValues (target[1], args, 2); printf ("Child 2:\n"); } printf ("Width %d, Height %d\n", (int) w, (int) h); fflush (stdout); } void GetChildxyPosition (widget, client_data, call_data) Widget widget; Widget client_data; XtPointer call_data; { Dimension x, y; Arg args[2]; XtSetArg (args[0], XmNx, &x); XtSetArg (args[1], XmNy, &y); if (XmToggleButtonGetState (client_data)) { /* get for target[0] */ XtGetValues (target[0], args, 2); printf ("Child 1:\n"); } else { XtGetValues (target[1], args, 2); printf ("Child 2:\n"); } printf ("x %d, y %d\n", (int) x, (int) y); fflush (stdout); } void GetChildBorderWidth (widget, client_data, call_data) Widget widget; Widget client_data; XtPointer call_data; { Dimension b; Arg args[1]; XtSetArg (args[0], XmNborderWidth, &b); if (XmToggleButtonGetState (client_data)) { /* get for target[0] */ XtGetValues (target[0], args, 1); printf ("Child 1:\n"); } else { XtGetValues (target[1], args, 1); printf ("Child 2:\n"); } printf ("Border Width %d\n ", (int) b); fflush (stdout); }