1 #include "components.h"
2 
3 void
PopDownCB(Widget w,XtPointer client_data)4 PopDownCB(Widget w, XtPointer client_data)
5 {
6 #if USE_MOTIF
7     XtUnmanageChild(w);
8 #else /* USE_MOTIF */
9     Widget shell = (Widget)client_data;
10     XtPopdown(shell);
11 #endif /* USE_MOTIF */
12 }
13 
14 void
Message(Pixmap symbol,const char * message,int timeout,XtTimerCallbackProc timeout_proc,XtCallbackProc additional_callback)15 Message(Pixmap symbol, const char *message, int timeout,
16         XtTimerCallbackProc timeout_proc, XtCallbackProc additional_callback)
17 {
18 #if USE_MOTIF
19     static Widget w;
20     static int created = 0;
21     XmString str;
22 
23     if (!created) {
24         w = XmCreateMessageDialog(toplevel, "message", NULL, 0);
25         XtAddCallback(w, XmNokCallback, (XtCallbackProc)PopDownCB, NULL);
26         XtUnmanageChild(XmMessageBoxGetChild(w, XmDIALOG_CANCEL_BUTTON));
27         XtUnmanageChild(XmMessageBoxGetChild(w, XmDIALOG_HELP_BUTTON));
28         created = 1;
29     }
30     str = XmStringCreateLtoR((char *)message, XmFONTLIST_DEFAULT_TAG);
31     XtVaSetValues(w,
32                   XmNmessageString, str,
33                   XmNsymbolPixmap, symbol,
34                   NULL);
35     XmStringFree(str);
36     if (additional_callback)
37         XtAddCallback(w, XmNokCallback, additional_callback, NULL);
38     if (timeout > 0)
39         XtAppAddTimeOut(app_context, timeout, timeout_proc, w);
40     XtManageChild(w);
41 #else /* USE_MOTIF */
42     static Widget shell, mf, mfl, pix, label, button;
43     static int created = 0;
44 
45     if (!created) {
46         Position x, y;
47         XtVaGetValues(toplevel, XtNx, &x, XtNy, &y, NULL);
48         shell = XtVaCreatePopupShell("message", transientShellWidgetClass, toplevel,
49                                      XtNx, x+10,
50                                      XtNy, y+10,
51                                      NULL);
52         mf = XtVaCreateManagedWidget("mf", formWidgetClass, shell,
53                                      XtNborderWidth, 0,
54                                      NULL);
55         mfl = XtVaCreateManagedWidget("mfl", formWidgetClass, mf,
56                                       XtNborderWidth, 0,
57                                       XtNresizable,   True,
58                                       XtNtop,         XawChainTop,
59                                       XtNbottom,      XawChainBottom,
60                                       XtNleft,        XawChainLeft,
61                                       XtNright,       XawChainRight,
62                                       NULL);
63         pix = XtVaCreateManagedWidget("pix", labelWidgetClass, mfl,
64                                       XtNborderWidth, 0,
65                                       XtNbitmap,      symbol,
66                                       XtNresizable,   True,
67                                       XtNtop,         XawChainTop,
68                                       XtNbottom,      XawChainTop,
69                                       XtNleft,        XawChainLeft,
70                                       XtNright,       XawChainLeft,
71                                       NULL);
72         label = XtVaCreateManagedWidget("label", labelWidgetClass, mfl,
73                                         XtNborderWidth, 0,
74                                         XtNfromHoriz,   pix,
75                                         XtNresizable,   True,
76                                         XtNtop,         XawChainTop,
77                                         XtNbottom,      XawChainBottom,
78                                         XtNleft,        XawChainLeft,
79                                         XtNright,       XawChainRight,
80                                         NULL);
81         button = XtVaCreateManagedWidget("button", commandWidgetClass, mf,
82                                          XtNfromVert, mfl,
83                                          XtNlabel,    "OK",
84                                          XtNtop,      XawChainBottom,
85                                          XtNbottom,   XawChainBottom,
86                                          XtNleft,     XawChainLeft,
87                                          NULL);
88         XtAddCallback(button, XtNcallback, (XtCallbackProc)PopDownCB, shell);
89     }
90     XtVaSetValues(pix,
91                   XtNbackgroundPixmap, symbol,
92                   NULL);
93     XtVaSetValues(label,
94                   XtNlabel, message,
95                   NULL);
96     if (additional_callback)
97         XtAddCallback(button, XtNcallback, additional_callback, NULL);
98     if (timeout > 0)
99         XtAppAddTimeOut(app_context, timeout, timeout_proc, shell);
100     XtPopup(shell, XtGrabNone);
101 #endif /* USE_MOTIF */
102 }
103