/* Written by Dan Heller and Paula Ferguson. * Copyright 1994, O'Reilly & Associates, Inc. * Permission to use, copy, and modify this program without * restriction is hereby granted, as long as this copyright * notice appears in each copy of the program source code. * This program is freely distributable without licensing fees and * is provided without guarantee or warrantee expressed or implied. * This program is -not- in the public domain. */ /* prompt_dlg.c -- prompt the user for a string. Two PushButtons * are displayed. When one is selected, a PromptDialog is displayed * allowing the user to type a string. When done, the PushButton's * label changes to the string. */ #include <Xm/SelectioB.h> #include <Xm/RowColumn.h> #include <Xm/PushB.h> void DestroyWidget(w, client_data, call_data) Widget w; XtPointer client_data, call_data; { XtDestroyWidget(w); } int main(argc, argv) int argc; char *argv[]; { XtAppContext app; Widget toplevel, rc, button; void pushed(); XtSetLanguageProc (NULL, NULL, NULL); /* Initialize toolkit and create toplevel shell */ toplevel = XtVaAppInitialize (&app, "Demos", NULL, 0, &argc, argv, NULL, NULL); /* RowColumn managed both PushButtons */ rc = XtVaCreateWidget ("rowcol", xmRowColumnWidgetClass, toplevel, NULL); /* Create two pushbuttons -- both have the same callback */ button = XtVaCreateManagedWidget ("PushMe 1", xmPushButtonWidgetClass, rc, NULL); XtAddCallback (button, XmNactivateCallback, pushed, NULL); button = XtVaCreateManagedWidget ("PushMe 2", xmPushButtonWidgetClass, rc, NULL); XtAddCallback (button, XmNactivateCallback, pushed, NULL); XtManageChild (rc); XtRealizeWidget (toplevel); XtAppMainLoop (app); } /* pushed() --the callback routine for the main app's pushbuttons. * Create a dialog that prompts for a new button name. */ void pushed(widget, client_data, call_data) Widget widget; XtPointer client_data; XtPointer call_data; { Widget dialog; XmString t = XmStringCreateLocalized ("Enter New Button Name:"); extern void read_name(); Arg args[5]; int n = 0; /* Create the dialog -- the PushButton acts as the DialogShell's * parent (not the parent of the PromptDialog). */ XtSetArg (args[n], XmNselectionLabelString, t); n++; XtSetArg (args[n], XmNautoUnmanage, False); n++; dialog = XmCreatePromptDialog (widget, "prompt", args, n); XmStringFree (t); /* always destroy compound strings when done */ /* When the user types the name, call read_name() ... */ XtAddCallback (dialog, XmNokCallback, read_name, widget); /* If the user selects cancel, just destroy the dialog */ /*XtAddCallback (dialog, XmNcancelCallback, XtDestroyWidget, NULL);*/ XtAddCallback (dialog, XmNcancelCallback, DestroyWidget, NULL); /* No help is available... */ XtSetSensitive ( XmSelectionBoxGetChild (dialog, XmDIALOG_HELP_BUTTON), False); XtManageChild (dialog); XtPopup (XtParent (dialog), XtGrabNone); } /* read_name() --the text field has been filled in. */ void read_name(widget, client_data, call_data) Widget widget; XtPointer client_data; XtPointer call_data; { Widget push_button = (Widget) client_data; XmSelectionBoxCallbackStruct *cbs = (XmSelectionBoxCallbackStruct *) call_data; XtVaSetValues (push_button, XmNlabelString, cbs->value, NULL); /* Name's fine -- go ahead and enter it */ XtDestroyWidget(widget); }