Merge branch 'master' of https://git.maemo.org/projects/erwise
[erwise] / Ui / UiUtil.c
1 static char *rcsid = "$Id$";
2
3 #include "UiIncludes.h"
4
5
6 static void uiwarningokcb(Widget wdg, caddr_t callback,
7                            XmListCallbackStruct * calldata);
8 static void uiwarningcancelcb(Widget wdg, caddr_t callback,
9                                XmListCallbackStruct * calldata);
10
11 int UiDisplayWarningDialog(warning, callback)
12 char *warning;
13 void (*callback) (int button);
14 {
15     Widget labelwdg;
16     Widget separatorwdg;
17     Widget okwdg;
18     Widget cancelwdg;
19     XmString warningstr;
20     ArgList args;
21     Cardinal nargs;
22     Window root, child;
23     int root_x, root_y, win_x, win_y;
24     unsigned int mask;
25     Widget formwdg;
26     Widget topwdg;
27     char tmpstr[11];
28
29     if (XQueryPointer(XtDisplay(uiTopLevel.TopGfx.TopWdg),
30                       XtWindow(uiTopLevel.TopGfx.TopWdg), &root, &child,
31                       &root_x, &root_y, &win_x, &win_y, &mask)) {
32         sprintf(tmpstr, "+%d+%d", root_x - 50, root_y - 50);
33
34         topwdg = XtCreateApplicationShell("Warning",
35                                           topLevelShellWidgetClass,
36                                           NULL, 0);
37         XtVaSetValues(topwdg,
38                       XmNgeometry, tmpstr, NULL);
39
40         args = uiVaSetArgs(&nargs,
41                            XmNresizePolicy, XmRESIZE_NONE,
42                            XmNautoUnmanage, FALSE, NULL);
43         formwdg = XmCreateForm(topwdg, "WarningDialog", args, nargs);
44
45         warningstr = XmStringCreateSimple(warning);
46         args = uiVaSetArgs(&nargs,
47                            XmNlabelString, warningstr,
48                            XmNtopAttachment, XmATTACH_FORM,
49                            XmNtopOffset, UI_LIST_WDG_OFFSET,
50                            XmNleftAttachment, XmATTACH_FORM,
51                            XmNrightAttachment, XmATTACH_FORM, NULL);
52         labelwdg = XmCreateLabelGadget(formwdg, "WarningLabel",
53                                        args, nargs);
54         XtManageChild(labelwdg);
55
56         args = uiVaSetArgs(&nargs,
57                            XmNtopAttachment, XmATTACH_WIDGET,
58                            XmNtopWidget, labelwdg,
59                            XmNtopOffset, UI_LIST_WDG_OFFSET,
60                            XmNleftAttachment, XmATTACH_FORM,
61                            XmNrightAttachment, XmATTACH_FORM, NULL);
62         separatorwdg = XmCreateSeparatorGadget(formwdg, "WarningSeparator",
63                                                args, nargs);
64         XtManageChild(separatorwdg);
65
66         args = uiVaSetArgs(&nargs,
67                            XmNleftAttachment, XmATTACH_POSITION,
68                            XmNleftPosition, 5,
69                            XmNrightAttachment, XmATTACH_POSITION,
70                            XmNrightPosition, 40,
71                            XmNtopAttachment, XmATTACH_WIDGET,
72                            XmNtopWidget, separatorwdg,
73                            XmNtopOffset, UI_LIST_WDG_OFFSET,
74                            XmNbottomAttachment, XmATTACH_FORM,
75                            XmNbottomOffset, UI_LIST_WDG_OFFSET, NULL);
76         okwdg = XmCreatePushButtonGadget(formwdg, "Ok", args, nargs);
77         XtAddCallback(okwdg, XmNactivateCallback,
78                       (XtCallbackProc) uiwarningokcb, (caddr_t) callback);
79         XtManageChild(okwdg);
80
81         if (callback) {
82             args = uiVaSetArgs(&nargs,
83                                XmNleftAttachment, XmATTACH_POSITION,
84                                XmNleftPosition, 60,
85                                XmNrightAttachment, XmATTACH_POSITION,
86                                XmNrightPosition, 95,
87                                XmNtopAttachment, XmATTACH_WIDGET,
88                                XmNtopWidget, separatorwdg,
89                                XmNtopOffset, UI_LIST_WDG_OFFSET,
90                                XmNbottomAttachment, XmATTACH_FORM,
91                                XmNbottomOffset, UI_LIST_WDG_OFFSET, NULL);
92             cancelwdg = XmCreatePushButtonGadget(formwdg, "Cancel",
93                                                  args, nargs);
94             XtAddCallback(cancelwdg, XmNactivateCallback,
95                           (XtCallbackProc) uiwarningcancelcb,
96                           (caddr_t) callback);
97             XtManageChild(cancelwdg);
98         }
99         XtManageChild(formwdg);
100         XtRealizeWidget(XtParent(formwdg));
101
102         return UI_OK;
103     }
104 }
105
106
107 static void uiwarningokcb(wdg, callback, calldata)
108 Widget wdg;
109 caddr_t callback;
110 XmListCallbackStruct *calldata;
111 {
112     int button = UI_OK;
113
114     if (callback)
115         (*(void (*) (int button)) callback) (UI_OK);
116
117     XtUnmapWidget(XtParent(XtParent(wdg)));
118 }
119
120
121 static void uiwarningcancelcb(wdg, ignored, calldata)
122 Widget wdg;
123 caddr_t ignored;
124 XmListCallbackStruct *calldata;
125 {
126     XtUnmapWidget(XtParent(XtParent(wdg)));
127 }