/* $XConsortium: Notebook5.c /main/5 1995/07/15 21:07:44 drk $ */ /* * @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 */ #include void CreateGeoPanel(); void SetWidgetValues(); void WidthHasChanged(); void HeightHasChanged(); void XHasChanged(); void YHasChanged(); void BWHasChanged(); void ResourceHasChanged(); void ValueHasChanged(); #define APPLY 1 /* global declarations * */ /* * These widgets are used by several routines. */ Widget Parent; Widget Notebook; Widget GeoScale[5]; Widget GeoPB; Widget ResourceText, ValueText; Widget ScrollList1; Widget Frame1,Form1,PW1,RC1,BB1; Widget MajorTab[2]; Widget MinorTab[2]; Widget StatusArea[5]; Widget FrameKid1; Widget FormKid[4]; Widget RCKid[4]; Widget BBKid[4]; Widget PWKid[4]; /* * for indicating if values have changed */ Boolean WidthChanged = False; Boolean HeightChanged = False; Boolean XChanged = False; Boolean YChanged = False; Boolean BWChanged = False; Boolean ResourceChanged = False; Boolean ValueChanged = False; enum { Width = 0, Height, X, Y, BorderWidth }; void main (int argc, char **argv) { Arg args[10]; int n,i; char buf[16]; Widget BBDialog1; XmString PBLabel; CommonTestInit (argc, argv); /* * Create the parent. */ if (UserData != NULL) if (strcmp (UserData,"early") == 0) XtRealizeWidget (Shell1); n=0; Parent = XmCreateFrame (Shell1, "Parent", args, n); n++; XtManageChild (Parent); n=0; Notebook = XmCreateNotebook (Parent, "Notebook", args, n); XtManageChild (Notebook); for (i=0; i< 2; i++) { n=0; sprintf (buf, "MajorTab%d", i+1); MajorTab[i] = XmCreatePushButton (Notebook,buf,args,n); XtManageChild(MajorTab[i]); } for (i=0; i< 2; i++) { sprintf (buf, "MinorTab%d", i+1); MinorTab[i] = XmCreatePushButton (Notebook,buf,args,n); XtManageChild(MinorTab[i]); } for (i=0; i< 5; i++) { n=0; sprintf (buf,"Page%d", i+1); PBLabel = XmStringCreate (buf, XmFONTLIST_DEFAULT_TAG); XtSetArg (args[n], XmNlabelString, PBLabel); n++; StatusArea[i] = XmCreateLabel (Notebook, buf, args,n); XmStringFree (PBLabel); } /* * Create Pages of Notebook */ n=0; Frame1 = XmCreateFrame (Notebook, "Frame1", args, n); XtManageChild (Frame1); n=0; Form1 = XmCreateForm (Notebook, "Form1", args, n); XtManageChild (Form1); n=0; RC1 = XmCreateRowColumn (Notebook, "RC1", args, n); XtManageChild (RC1); n=0; PW1 = XmCreatePanedWindow (Notebook, "PW1", args, n); XtManageChild (PW1); n=0; BB1 = XmCreateBulletinBoard (Notebook, "BB1", args, n); XtManageChild (BB1); /* * Create kids of pages */ n=0; FrameKid1 = XmCreatePushButton (Frame1,"FrameKid1",args,n); XtManageChild (FrameKid1); for (i=0; i < 4; i++) { n=0; sprintf (buf, "FormKid%d", i+1); FormKid[i] = XmCreatePushButton (Form1,buf,args,n); XtManageChild (FormKid[i]); } for (i=0; i < 4; i++) { n=0; sprintf (buf, "RCKid%d", i+1); RCKid[i] = XmCreatePushButton (RC1,buf,args,n); XtManageChild (RCKid[i]); } for (i=0; i < 4; i++) { n=0; sprintf (buf, "PWKid%d", i+1); PWKid[i] = XmCreatePushButton (PW1,buf,args,n); XtManageChild (PWKid[i]); } for (i=0; i < 4; i++) { n=0; sprintf (buf, "BBKid%d", i+1); BBKid[i] = XmCreatePushButton (BB1,buf,args,n); XtManageChild (BBKid[i]); } /* * Create scrolled list with names of widgets */ n=0; BBDialog1 = XmCreateBulletinBoardDialog (Shell1, "BBDialog1", args, n); XtManageChild (BBDialog1); n=0; XtSetArg (args[n], XmNselectionPolicy, XmBROWSE_SELECT); n++; ScrollList1 = XmCreateScrolledList(BBDialog1, "ScrollList1", args, n); XtManageChild (ScrollList1); XtAddCallback (ScrollList1, XmNbrowseSelectionCallback, SetWidgetValues, (XtPointer)APPLY); if ((UserData == NULL) || (strcmp (UserData,"late") == 0)) XtRealizeWidget (Shell1); CreateGeoPanel(); CommonPause(); CommonPause(); CommonPause(); CommonPause(); CommonPause(); CommonPause(); CommonPause(); CommonPause(); CommonPause(); CommonPause(); XtAppMainLoop (app_context); } void CreateGeoPanel() { Widget GeoShell1; Widget GeoForm1; Widget GeoRC1; Widget GeoFrame[2]; Widget GeoRC[2]; char name[32]; Widget TextRC1; XmString LabelString; Widget ResourceLabel, ValueLabel; static char *geo_labels[] = { "Set Width", "Set Height", "Set x", "Set y", "Set Border Width"}; int i,n; Arg args[10]; n=0; GeoShell1 = XtCreatePopupShell("GeoShell1", topLevelShellWidgetClass, Shell1, args, n); n=0; GeoForm1 = XmCreateFormDialog (GeoShell1, "GeoForm1", args, n); XtManageChild (GeoForm1); n=0; XtSetArg(args[n], XmNpacking, XmPACK_COLUMN); n++; XtSetArg(args[n], XmNnumColumns, 2); n++; GeoRC1 = XmCreateRowColumn (GeoForm1, "GeoRC1", args, n); XtManageChild (GeoRC1); /* Create 2 frames */ for (i=0; i < 2; i++) { sprintf (name, "GeoFrame%d", i); n=0; GeoFrame[i] = XmCreateFrame (GeoRC1, name, args, n); XtManageChild(GeoFrame[i]); } /* Create RowColumn for each frame */ for (i=0; i < 2; i++) { sprintf (name, "GeoRC%d", i); n = 0; XtSetArg(args[n], XmNpacking, XmPACK_TIGHT); n++; GeoRC[i] = XmCreateRowColumn(GeoFrame[i], name, args, n); XtManageChild(GeoRC[i]); } for (i=0; i < 5; i++) { LabelString = XmStringCreate(geo_labels[i],XmFONTLIST_DEFAULT_TAG); sprintf (name, "GeoScale%d", i); n = 0; XtSetArg (args[n], XmNmaximum, 1000); n++; XtSetArg (args[n], XmNorientation,XmHORIZONTAL); n++; XtSetArg (args[n], XmNscaleMultiple, 1); n++; XtSetArg (args[n], XmNshowValue, True); n++; XtSetArg (args[n], XmNtitleString, LabelString); n++; GeoScale[i] = XmCreateScale(GeoRC[0],name,args,n); XtManageChild (GeoScale[i]); XmStringFree (LabelString); } XtAddCallback (GeoScale[0], XmNvalueChangedCallback,WidthHasChanged, (XtPointer)NULL); XtAddCallback (GeoScale[1], XmNvalueChangedCallback,HeightHasChanged, (XtPointer)NULL); XtAddCallback (GeoScale[2], XmNvalueChangedCallback,XHasChanged, (XtPointer)NULL); XtAddCallback (GeoScale[3], XmNvalueChangedCallback,YHasChanged, (XtPointer)NULL); XtAddCallback (GeoScale[4], XmNvalueChangedCallback,BWHasChanged, (XtPointer)NULL); /* add Text */ n=0; XtSetArg (args[n],XmNnumColumns, 1); n++; XtSetArg (args[n],XmNpacking, XmPACK_COLUMN); n++; TextRC1 = XmCreateRowColumn (GeoRC[1], "TextRC1", args, n); XtManageChild (TextRC1); n=0; LabelString = XmStringCreate ("Resource Name", XmFONTLIST_DEFAULT_TAG); n++; XtSetArg (args[n],XmNlabelString,LabelString); n++; ResourceLabel = XmCreateLabel (TextRC1, "ResourceLabel", args, n); XtManageChild (ResourceLabel); XmStringFree (LabelString); n=0; ResourceText = XmCreateTextField (TextRC1, "ResourceText", args, n); XtManageChild (ResourceText); XtAddCallback (ResourceText, XmNactivateCallback, ResourceHasChanged, (XtPointer)NULL); n=0; LabelString = XmStringCreate ("Resource Value", XmFONTLIST_DEFAULT_TAG); XtSetArg (args[n],XmNlabelString,LabelString); n++; ValueLabel = XmCreateLabel (TextRC1, "ValueLabel", args, n); XtManageChild (ValueLabel); XmStringFree (LabelString); n=0; ValueText = XmCreateTextField (TextRC1, "ValueText", args, n); XtManageChild (ValueText); XtAddCallback (ValueText, XmNactivateCallback, ValueHasChanged, (XtPointer)NULL); XtPopup (GeoShell1, XtGrabNone); } void SetWidgetValues(Widget w,XtPointer client_data, XtPointer call_data) { int value; Arg args[10]; Arg nargs[1]; int n; Boolean UserEntry; char *Resource = NULL; char *Value = NULL; XmStringTable ListItem; char *NameOfWidget = NULL; char name[32]; Widget wid; int cdata = (int) client_data; UserEntry = False; n=0; if (WidthChanged) { XmScaleGetValue(GeoScale[Width],&value); XtSetArg (args[n], XmNwidth, value); n++; WidthChanged = False; } if (HeightChanged) { XmScaleGetValue(GeoScale[Height],&value); XtSetArg (args[n], XmNheight, value); n++; HeightChanged = False; } if (XChanged) { XmScaleGetValue(GeoScale[X],&value); XtSetArg (args[n], XmNx, value); n++; XChanged = False; } if (YChanged) { XmScaleGetValue(GeoScale[Y],&value); XtSetArg (args[n], XmNy, value); n++; YChanged = False; } if (BWChanged) { XmScaleGetValue(GeoScale[BorderWidth],&value); XtSetArg (args[n], XmNborderWidth, value); n++; BWChanged = False; } if (ResourceChanged || ValueChanged) { UserEntry = True; Resource = XmTextFieldGetString(ResourceText); Value = XmTextFieldGetString(ValueText); printf ("setting %s to %s\n",Resource,Value); if (ResourceChanged) ResourceChanged = False; if (ValueChanged) ValueChanged = False; } if (cdata==APPLY) { XtSetArg(nargs[0], XmNselectedItems, &ListItem); XtGetValues (ScrollList1, nargs, 1); if (ListItem != NULL) XmStringGetLtoR (ListItem[0], XmFONTLIST_DEFAULT_TAG,&NameOfWidget); } if (NameOfWidget != NULL) { if (strcmp ("Shell1", NameOfWidget) == 0) wid = Shell1; else { sprintf (name,"*%s", NameOfWidget); wid = XtNameToWidget (Shell1,name); } if (UserEntry == True) XtVaSetValues (wid, XtVaTypedArg, (String)Resource,XtRString, Value,strlen(Value)+1,NULL); else XtSetValues (wid, args, n); } } /* set of functions which resets flags */ void WidthHasChanged() { WidthChanged = True; } void HeightHasChanged() { HeightChanged = True; } void XHasChanged() { XChanged = True; } void YHasChanged() { YChanged = True; } void BWHasChanged() { BWChanged = True; } void ResourceHasChanged() { ResourceChanged = True; } void ValueHasChanged() { ValueChanged = True; }