1 static char *rcsid = "$Id$";
4 #include "UiIncludes.h"
7 static void uirecallfreeprevious(void);
8 static void uirecallsetitems(char **listitems, int nitems);
10 static Widget uicreaterecallform(void);
11 static Widget uicreaterecalllabel(Widget parent);
12 static Widget uicreaterecallopen(Widget parent);
13 static Widget uicreaterecallclose(Widget parent);
14 static Widget uicreaterecallseparator(Widget parent, Widget bottomwdg);
16 uicreaterecalllist(Widget parent, Widget topwdg,
18 static void uirecallopencb(Widget wdg, caddr_t ignored,
19 XmListCallbackStruct * calldata);
20 static void uirecallclosecb(Widget wdg, caddr_t ignored,
21 XmListCallbackStruct * calldata);
24 static char *uitopaddress = (char *) NULL;
25 static char **uilistitems;
27 static void (*uirecallcallback) (char *topaddress, char *address,
31 int UiDisplayRecallDialog(listitems, nitems, callback)
34 void (*callback) (char *topaddress, char *address, char *parentaddress);
36 uiRecallGfx_t *recallgfx = &uiTopLevel.RecallGfx;
38 uirecallfreeprevious();
40 uitopaddress = uiPageInfo.CurrentPage->Hierarchy->Address;
41 uilistitems = listitems;
43 uirecallcallback = callback;
45 if (recallgfx->FormWdg) {
46 XtMapWidget(XtParent(recallgfx->FormWdg));
48 uiWidgetPlacement(XtParent(recallgfx->FormWdg),
49 uiTopLevel.GlobalSettings.RecallPlacement);
51 uirecallsetitems(listitems, nitems);
55 recallgfx->FormWdg = uicreaterecallform();
56 recallgfx->LabelWdg = uicreaterecalllabel(recallgfx->FormWdg);
57 recallgfx->OpenWdg = uicreaterecallopen(recallgfx->FormWdg);
58 recallgfx->CloseWdg = uicreaterecallclose(recallgfx->FormWdg);
59 recallgfx->SeparatorWdg = uicreaterecallseparator(recallgfx->FormWdg,
61 recallgfx->ListWdg = uicreaterecalllist(recallgfx->FormWdg,
63 recallgfx->SeparatorWdg);
65 uirecallsetitems(listitems, nitems);
67 XtManageChild(recallgfx->FormWdg);
68 XtRealizeWidget(XtParent(recallgfx->FormWdg));
70 uiWidgetPlacement(XtParent(recallgfx->FormWdg),
71 uiTopLevel.GlobalSettings.RecallPlacement);
77 void uiRecallUpdateDialog()
79 if (!uiPageInfo.CurrentPage && uiTopLevel.RecallGfx.FormWdg) {
80 uirecallfreeprevious();
81 uirecallsetitems((char **) NULL, 0);
82 uitopaddress = (char *) NULL;
83 XtUnmapWidget(XtParent(uiTopLevel.RecallGfx.FormWdg));
96 topwdg = XtCreateApplicationShell("Recall",
97 topLevelShellWidgetClass,
100 XmNtitle, UI_RECALL_TITLE, NULL);
102 args = uiVaSetArgs(&nargs,
103 XmNresizePolicy, XmRESIZE_NONE,
104 XmNautoUnmanage, FALSE, NULL);
105 formwdg = XmCreateForm(topwdg, "RecallDialog", args, nargs);
112 uicreaterecalllabel(formwdg)
120 labelstr = XmStringCreateSimple("List of documents");
121 args = uiVaSetArgs(&nargs,
122 XmNlabelString, labelstr,
123 XmNtopAttachment, XmATTACH_FORM,
124 XmNtopOffset, UI_LIST_WDG_OFFSET,
125 XmNleftAttachment, XmATTACH_FORM,
126 XmNrightAttachment, XmATTACH_FORM, NULL);
127 labelwdg = XmCreateLabelGadget(formwdg, "ListLabel", args, nargs);
128 XtManageChild(labelwdg);
129 XmStringFree(labelstr);
136 uicreaterecallopen(formwdg)
143 args = uiVaSetArgs(&nargs,
144 XmNleftAttachment, XmATTACH_POSITION,
146 XmNrightAttachment, XmATTACH_POSITION,
147 XmNrightPosition, 40,
148 XmNbottomAttachment, XmATTACH_FORM,
149 XmNbottomOffset, UI_LIST_WDG_OFFSET, NULL);
150 openwdg = XmCreatePushButtonGadget(formwdg, "Open", args, nargs);
151 XtAddCallback(openwdg, XmNactivateCallback,
152 (XtCallbackProc) uirecallopencb, (caddr_t) NULL);
153 XtManageChild(openwdg);
160 uicreaterecallclose(formwdg)
167 args = uiVaSetArgs(&nargs,
168 XmNleftAttachment, XmATTACH_POSITION,
170 XmNrightAttachment, XmATTACH_POSITION,
171 XmNrightPosition, 95,
172 XmNbottomAttachment, XmATTACH_FORM,
173 XmNbottomOffset, UI_LIST_WDG_OFFSET, NULL);
174 closewdg = XmCreatePushButtonGadget(formwdg, "Close", args, nargs);
175 XtAddCallback(closewdg, XmNactivateCallback,
176 (XtCallbackProc) uirecallclosecb, (caddr_t) NULL);
177 XtManageChild(closewdg);
184 uicreaterecallseparator(formwdg, bottomwdg)
192 args = uiVaSetArgs(&nargs,
193 XmNbottomAttachment, XmATTACH_WIDGET,
194 XmNbottomWidget, bottomwdg,
195 XmNbottomOffset, UI_LIST_WDG_OFFSET,
196 XmNleftAttachment, XmATTACH_FORM,
197 XmNrightAttachment, XmATTACH_FORM, NULL);
198 separatorwdg = XmCreateSeparatorGadget(formwdg, "ListSeparator",
200 XtManageChild(separatorwdg);
207 uicreaterecalllist(formwdg, topwdg, bottomwdg)
216 args = uiVaSetArgs(&nargs,
217 XmNvisibleItemCount, 15,
219 XmNselectionPolicy, XmSINGLE_SELECT,
220 XmNlistSizePolicy, XmCONSTANT,
221 XmNscrollBarDisplayPolicy, XmSTATIC,
222 XmNtopAttachment, XmATTACH_WIDGET,
223 XmNtopWidget, topwdg,
224 XmNtopOffset, UI_LIST_WDG_OFFSET,
225 XmNbottomAttachment, XmATTACH_WIDGET,
226 XmNbottomWidget, bottomwdg,
227 XmNbottomOffset, UI_LIST_WDG_OFFSET,
228 XmNrightAttachment, XmATTACH_FORM,
229 XmNrightOffset, UI_LIST_WDG_OFFSET,
230 XmNleftAttachment, XmATTACH_FORM,
231 XmNleftOffset, UI_LIST_WDG_OFFSET, NULL);
232 listwdg = XmCreateScrolledList(formwdg, "ListList", args, nargs);
233 XtManageChild(listwdg);
234 XtAddCallback(listwdg, XmNdefaultActionCallback,
235 (XtCallbackProc) uirecallopencb, (caddr_t) NULL);
241 void uirecallfreeprevious()
243 if (uitopaddress && uinitems) {
245 uiFree(uilistitems[uinitems]);
252 static void uirecallsetitems(listitems, nitems)
256 Widget listwdg = uiTopLevel.RecallGfx.ListWdg;
258 XmString *tmpstr = uiMalloc(nitems * sizeof(XmString));
260 XmListDeleteAllItems(listwdg);
262 for (i = 0; i < nitems; i++)
263 tmpstr[i] = XmStringCreateSimple(listitems[i]);
265 XmListAddItems(listwdg, tmpstr, nitems, 0);
266 for (i = 0; i < nitems; i++)
267 XmStringFree(tmpstr[i]);
268 uiFree((void *) tmpstr);
273 static void uirecallopencb(wdg, ignored, calldata)
276 XmListCallbackStruct *calldata;
278 Widget listwdg = uiTopLevel.RecallGfx.ListWdg;
283 if (XmListGetSelectedPos(listwdg, &poslist, &poscount)) {
284 uiDefineCursor(uiBusyCursor);
285 if (uiHelpOnActionCB) {
286 (*uiHelpOnActionCB) ("Get page");
287 uiHelpOnActionCB = (void (*) (char *actionstring)) NULL;
289 (*uirecallcallback) (uilistitems[poslist[0] - 1],
290 uitopaddress, (char *) NULL);
299 static void uirecallclosecb(wdg, ignored, calldata)
302 XmListCallbackStruct *calldata;
304 XtUnmapWidget(XtParent(uiTopLevel.RecallGfx.FormWdg));