~ubuntu-branches/ubuntu/utopic/gridengine/utopic

« back to all changes in this revision

Viewing changes to source/clients/qmon/qmon_project.c

  • Committer: Bazaar Package Importer
  • Author(s): Mark Hymers
  • Date: 2008-06-25 22:36:13 UTC
  • Revision ID: james.westby@ubuntu.com-20080625223613-tvd9xlhuoct9kyhm
Tags: upstream-6.2~beta2
ImportĀ upstreamĀ versionĀ 6.2~beta2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*___INFO__MARK_BEGIN__*/
 
2
/*************************************************************************
 
3
 * 
 
4
 *  The Contents of this file are made available subject to the terms of
 
5
 *  the Sun Industry Standards Source License Version 1.2
 
6
 * 
 
7
 *  Sun Microsystems Inc., March, 2001
 
8
 * 
 
9
 * 
 
10
 *  Sun Industry Standards Source License Version 1.2
 
11
 *  =================================================
 
12
 *  The contents of this file are subject to the Sun Industry Standards
 
13
 *  Source License Version 1.2 (the "License"); You may not use this file
 
14
 *  except in compliance with the License. You may obtain a copy of the
 
15
 *  License at http://gridengine.sunsource.net/Gridengine_SISSL_license.html
 
16
 * 
 
17
 *  Software provided under this License is provided on an "AS IS" basis,
 
18
 *  WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
 
19
 *  WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
 
20
 *  MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
 
21
 *  See the License for the specific provisions governing your rights and
 
22
 *  obligations concerning the Software.
 
23
 * 
 
24
 *   The Initial Developer of the Original Code is: Sun Microsystems, Inc.
 
25
 * 
 
26
 *   Copyright: 2001 by Sun Microsystems, Inc.
 
27
 * 
 
28
 *   All Rights Reserved.
 
29
 * 
 
30
 ************************************************************************/
 
31
/*___INFO__MARK_END__*/
 
32
#include <stdio.h>
 
33
#include <ctype.h>
 
34
 
 
35
#include <Xm/Xm.h>
 
36
#include <Xm/List.h>
 
37
#include <Xm/TextF.h>
 
38
 
 
39
#include <Xmt/Xmt.h>
 
40
#include <Xmt/Create.h>
 
41
#include <Xmt/Layout.h>
 
42
#include <Xmt/Chooser.h>
 
43
#include <Xmt/Dialog.h>
 
44
#include <Xmt/Dialogs.h>
 
45
#include <Xmt/MsgLine.h>
 
46
#include <Xmt/InputField.h>
 
47
 
 
48
#include "sge_all_listsL.h"
 
49
#include "gdi/sge_gdi.h"
 
50
#include "sge_answer.h"
 
51
#include "sge_userprj.h"
 
52
#include "commlib.h"
 
53
#include "qmon_proto.h"
 
54
#include "qmon_rmon.h"
 
55
#include "qmon_cull.h"
 
56
#include "qmon_util.h"
 
57
#include "qmon_appres.h"
 
58
#include "qmon_timer.h"
 
59
#include "qmon_comm.h"
 
60
#include "qmon_widgets.h"
 
61
#include "qmon_message.h"
 
62
#include "qmon_project.h"
 
63
#include "qmon_globals.h"
 
64
#include "AskForItems.h"
 
65
 
 
66
 
 
67
static Widget qmon_project = 0;
 
68
static Widget project_names = 0;
 
69
static Widget project_conf_list = 0;
 
70
static Widget project_ask_layout = 0;
 
71
static Widget project_name_w = 0;
 
72
static Widget project_acl_w = 0;
 
73
static Widget project_xacl_w = 0;
 
74
static int add_mode = 0;
 
75
 
 
76
/*-------------------------------------------------------------------------*/
 
77
static void qmonPopdownProjectConfig(Widget w, XtPointer cld, XtPointer cad);
 
78
static Widget qmonCreateProjectConfig(Widget parent);
 
79
static void qmonProjectFillConf(Widget w, lListElem *ep);
 
80
static void qmonSelectProject(Widget w, XtPointer cld, XtPointer cad);
 
81
static void qmonProjectAdd(Widget w, XtPointer cld, XtPointer cad);
 
82
static void qmonProjectModify(Widget w, XtPointer cld, XtPointer cad);
 
83
static void qmonProjectDelete(Widget w, XtPointer cld, XtPointer cad);
 
84
static void qmonProjectOk(Widget w, XtPointer cld, XtPointer cad);
 
85
static void qmonProjectCancel(Widget w, XtPointer cld, XtPointer cad);
 
86
static void qmonProjectResetAsk(void);
 
87
static void qmonProjectSetAsk(lListElem *prjp);
 
88
static Widget qmonCreateProjectAsk(Widget parent);
 
89
static Boolean qmonProjectGetAsk(lListElem *prjp);
 
90
static void qmonProjectAskForUsers(Widget w, XtPointer cld, XtPointer cad);
 
91
 
 
92
/*-------------------------------------------------------------------------*/
 
93
void qmonPopupProjectConfig(Widget w, XtPointer cld, XtPointer cad)
 
94
{
 
95
   Widget shell;
 
96
 
 
97
   DENTER(GUI_LAYER, "qmonPopupProjectConfig");
 
98
 
 
99
   /* set busy cursor */
 
100
   XmtDisplayBusyCursor(w);
 
101
 
 
102
   if (!qmon_project) {
 
103
      shell = XmtGetTopLevelShell(w);
 
104
      qmon_project = qmonCreateProjectConfig(shell);
 
105
      XmtAddDeleteCallback(shell, XmDO_NOTHING, 
 
106
                              qmonPopdownProjectConfig, NULL);
 
107
      /*
 
108
      ** create ask layout
 
109
      */
 
110
      project_ask_layout = qmonCreateProjectAsk(qmon_project);
 
111
 
 
112
   } 
 
113
   XSync(XtDisplay(qmon_project), 0);
 
114
   XmUpdateDisplay(qmon_project);
 
115
 
 
116
   qmonTimerAddUpdateProc(PROJECT_T, "updateProjectList", updateProjectList);
 
117
   qmonStartTimer(PROJECT_T | USERSET_T);
 
118
   updateProjectList();
 
119
   XmListSelectPos(project_names, 1, True);
 
120
 
 
121
   XtManageChild(qmon_project);
 
122
   XRaiseWindow(XtDisplay(XtParent(qmon_project)), 
 
123
                  XtWindow(XtParent(qmon_project)));
 
124
 
 
125
   /* set default cursor */
 
126
   XmtDisplayDefaultCursor(w);
 
127
 
 
128
   DEXIT;
 
129
}
 
130
 
 
131
/*-------------------------------------------------------------------------*/
 
132
void updateProjectList(void)
 
133
{
 
134
   lList *cl;
 
135
   
 
136
   DENTER(GUI_LAYER, "updateProjectList");
 
137
 
 
138
   cl = qmonMirrorList(SGE_PROJECT_LIST);
 
139
   lPSortList(cl, "%I+", PR_name);
 
140
   UpdateXmListFromCull(project_names, XmFONTLIST_DEFAULT_TAG, cl, PR_name);
 
141
 
 
142
   DEXIT;
 
143
}
 
144
 
 
145
 
 
146
/*-------------------------------------------------------------------------*/
 
147
static void qmonPopdownProjectConfig(Widget w, XtPointer cld, XtPointer cad)
 
148
{
 
149
   DENTER(GUI_LAYER, "qmonPopdownProjectConfig");
 
150
 
 
151
   XtUnmanageChild(qmon_project);
 
152
   qmonStopTimer(PROJECT_T | USERSET_T);
 
153
   qmonTimerRmUpdateProc(PROJECT_T, "updateProjectList");
 
154
 
 
155
   DEXIT;
 
156
}
 
157
 
 
158
/*-------------------------------------------------------------------------*/
 
159
static void qmonProjectFillConf(
 
160
Widget w,
 
161
lListElem *ep 
 
162
) {
 
163
   lList *ul;
 
164
   lListElem *uep;
 
165
   XmString *items;
 
166
   Cardinal itemCount; 
 
167
   char buf[BUFSIZ];
 
168
   int i;
 
169
 
 
170
   DENTER(GUI_LAYER, "qmonProjectFillConf");
 
171
   
 
172
   if (!ep) {
 
173
      /*
 
174
      ** clear the project_conf_list
 
175
      */
 
176
      XtVaSetValues( project_conf_list, 
 
177
                  XmNitems, NULL,
 
178
                  XmNitemCount, 0,
 
179
                  NULL);
 
180
      DEXIT;
 
181
      return;
 
182
   }
 
183
   
 
184
   itemCount = 5;
 
185
   items = (XmString*) XtMalloc(sizeof(XmString)*itemCount); 
 
186
 
 
187
   i = 0;
 
188
 
 
189
   /* Project name */
 
190
   sprintf(buf, "%-20.20s %s", "Project Name", lGetString(ep, PR_name));
 
191
   items[i++] = XmStringCreateLtoR(buf, "LIST");
 
192
 
 
193
   /* Override Tickets */
 
194
   sprintf(buf, "%-20.20s %d", "Override Tickets", 
 
195
                        (int)lGetUlong(ep, PR_oticket));
 
196
   items[i++] = XmStringCreateLtoR(buf, "LIST");
 
197
 
 
198
   /* fshare */
 
199
   sprintf(buf, "%-20.20s %d", "Functional Share", 
 
200
                        (int)lGetUlong(ep, PR_fshare));
 
201
   items[i++] = XmStringCreateLtoR(buf, "LIST");
 
202
 
 
203
   /* users list */
 
204
   ul = lGetList(ep, PR_acl);
 
205
   sprintf(buf, "%-20.20s", "Users");
 
206
   for_each(uep, ul) {
 
207
      strcat(buf, " "); 
 
208
      strcat(buf, lGetString(uep, US_name));
 
209
   }
 
210
   if (!lGetNumberOfElem(ul))
 
211
      strcat(buf, " NONE");
 
212
   items[i++] = XmStringCreateLtoR(buf, "LIST");
 
213
   
 
214
   /* xusers list */
 
215
   ul = lGetList(ep, PR_xacl);
 
216
   sprintf(buf, "%-20.20s", "Xusers");
 
217
   for_each(uep, ul) {
 
218
      strcat(buf, " "); 
 
219
      strcat(buf, lGetString(uep, US_name));
 
220
   }
 
221
   if (!lGetNumberOfElem(ul))
 
222
      strcat(buf, " NONE");
 
223
   items[i++] = XmStringCreateLtoR(buf, "LIST");
 
224
   
 
225
   XtVaSetValues( project_conf_list, 
 
226
                  XmNitems, items,
 
227
                  XmNitemCount, itemCount,
 
228
                  NULL);
 
229
   XmStringTableFree(items, itemCount);
 
230
 
 
231
   DEXIT;
 
232
}
 
233
 
 
234
/*-------------------------------------------------------------------------*/
 
235
static void qmonSelectProject(Widget w, XtPointer cld, XtPointer cad)
 
236
{
 
237
   XmListCallbackStruct *cbs = (XmListCallbackStruct*) cad;
 
238
   char *prjname;
 
239
   lListElem *ep;
 
240
   
 
241
   DENTER(GUI_LAYER, "qmonSelectProject");
 
242
 
 
243
   if (! XmStringGetLtoR(cbs->item, XmFONTLIST_DEFAULT_TAG, &prjname)) {
 
244
      fprintf(stderr, "XmStringGetLtoR failed\n");
 
245
      DEXIT;
 
246
      return;
 
247
   }
 
248
 
 
249
   ep = prj_list_locate(qmonMirrorList(SGE_PROJECT_LIST), prjname);
 
250
 
 
251
   XtFree((char*) prjname);
 
252
 
 
253
   qmonProjectFillConf(project_conf_list, ep);
 
254
   
 
255
   DEXIT;
 
256
}
 
257
 
 
258
 
 
259
/*-------------------------------------------------------------------------*/
 
260
static Widget qmonCreateProjectConfig(
 
261
Widget parent 
 
262
) {
 
263
   Widget project_layout, project_add, project_delete, project_modify, 
 
264
            project_done, project_main_link;
 
265
 
 
266
   DENTER(GUI_LAYER, "qmonCreateProjectConfig");
 
267
   
 
268
   project_layout = XmtBuildQueryDialog( parent, "qmon_project",
 
269
                           NULL, 0,
 
270
                           "project_names", &project_names,
 
271
                           "project_conf_list", &project_conf_list,
 
272
                           "project_add", &project_add,
 
273
                           "project_delete", &project_delete,
 
274
                           "project_done", &project_done,
 
275
                           "project_modify", &project_modify,
 
276
                           "project_main_link", &project_main_link,
 
277
                           NULL);
 
278
 
 
279
   XtAddCallback(project_names, XmNbrowseSelectionCallback, 
 
280
                     qmonSelectProject, NULL);
 
281
   XtAddCallback(project_done, XmNactivateCallback, 
 
282
                     qmonPopdownProjectConfig, NULL);
 
283
   XtAddCallback(project_add, XmNactivateCallback, 
 
284
                     qmonProjectAdd, NULL); 
 
285
   XtAddCallback(project_modify, XmNactivateCallback, 
 
286
                     qmonProjectModify, NULL); 
 
287
   XtAddCallback(project_delete, XmNactivateCallback, 
 
288
                     qmonProjectDelete, NULL); 
 
289
   XtAddCallback(project_main_link, XmNactivateCallback, 
 
290
                     qmonMainControlRaise, NULL); 
 
291
 
 
292
   XtAddEventHandler(XtParent(project_layout), StructureNotifyMask, False, 
 
293
                        SetMinShellSize, NULL);
 
294
   XtAddEventHandler(XtParent(project_layout), StructureNotifyMask, False,
 
295
                        SetMaxShellSize, NULL);
 
296
 
 
297
   DEXIT;
 
298
   return project_layout;
 
299
}
 
300
 
 
301
 
 
302
 
 
303
/*-------------------------------------------------------------------------*/
 
304
static Widget qmonCreateProjectAsk(
 
305
Widget parent 
 
306
) {
 
307
   Widget project_ok, project_cancel, project_usersPB, project_xusersPB; 
 
308
 
 
309
   DENTER(GUI_LAYER, "qmonCreateProjectAsk");
 
310
   
 
311
   project_ask_layout = XmtBuildQueryDialog( parent, "project_ask_shell",
 
312
                           NULL, 0,
 
313
                           "project_ok", &project_ok,
 
314
                           "project_cancel", &project_cancel,
 
315
                           "project_usersPB", &project_usersPB,
 
316
                           "project_xusersPB", &project_xusersPB,
 
317
                           "project_name", &project_name_w,
 
318
                           "project_users", &project_acl_w, 
 
319
                           "project_xusers", &project_xacl_w,
 
320
                           NULL);
 
321
 
 
322
   XtAddCallback(project_ok, XmNactivateCallback, 
 
323
                     qmonProjectOk, NULL);
 
324
   XtAddCallback(project_cancel, XmNactivateCallback, 
 
325
                     qmonProjectCancel, NULL);
 
326
   XtAddCallback(project_usersPB, XmNactivateCallback, 
 
327
                     qmonProjectAskForUsers, (XtPointer)project_acl_w);
 
328
   XtAddCallback(project_xusersPB, XmNactivateCallback, 
 
329
                     qmonProjectAskForUsers, (XtPointer)project_xacl_w);
 
330
 
 
331
   XtAddEventHandler(XtParent(project_ask_layout), StructureNotifyMask, False, 
 
332
                        SetMinShellSize, NULL);
 
333
 
 
334
   DEXIT;
 
335
   return project_ask_layout;
 
336
}
 
337
 
 
338
/*-------------------------------------------------------------------------*/
 
339
static void qmonProjectAskForUsers(Widget w, XtPointer cld, XtPointer cad)
 
340
{
 
341
   lList *ql_out = NULL;
 
342
   lList *ql_in = NULL;
 
343
   int status;
 
344
   Widget list = (Widget) cld;
 
345
 
 
346
   DENTER(GUI_LAYER, "qmonProjectAskForUsers");
 
347
   
 
348
   ql_in = qmonMirrorList(SGE_USERSET_LIST);
 
349
   lPSortList(ql_in, "%I+", US_name);
 
350
   ql_out = XmStringToCull(list, US_Type, US_name, ALL_ITEMS);
 
351
 
 
352
   status = XmtAskForItems(w, NULL, NULL, "@{Select Access Lists}", 
 
353
                  ql_in, US_name,
 
354
                  "@{@fBAvailable Access Lists}", &ql_out, US_Type, US_name, 
 
355
                  "@{@fBChosen Access Lists}", NULL);
 
356
 
 
357
   if (status) {
 
358
      lPSortList(ql_out, "%I+", US_name);
 
359
      UpdateXmListFromCull(list, XmFONTLIST_DEFAULT_TAG, ql_out,
 
360
                              US_name);
 
361
   }
 
362
   lFreeList(&ql_out);
 
363
 
 
364
   DEXIT;
 
365
}
 
366
 
 
367
/*-------------------------------------------------------------------------*/
 
368
static void qmonProjectAdd(Widget w, XtPointer cld, XtPointer cad)
 
369
{
 
370
   DENTER(GUI_LAYER, "qmonProjectAdd");
 
371
 
 
372
   qmonProjectResetAsk();
 
373
   XtVaSetValues( project_name_w,
 
374
                  XmNeditable, True,
 
375
                  NULL);
 
376
   add_mode = 1;
 
377
   XtManageChild(project_ask_layout);
 
378
 
 
379
   DEXIT;
 
380
}
 
381
 
 
382
/*-------------------------------------------------------------------------*/
 
383
static void qmonProjectModify(Widget w, XtPointer cld, XtPointer cad)
 
384
{
 
385
   XmString *prjnames;
 
386
   Cardinal prjnum;
 
387
   String prjstr;
 
388
   lListElem *prjp = NULL;
 
389
 
 
390
   DENTER(GUI_LAYER, "qmonProjectModify");
 
391
 
 
392
   /*
 
393
   ** on opening the dialog fill in the old values
 
394
   */
 
395
   XtVaGetValues( project_names,
 
396
                  XmNselectedItems, &prjnames,
 
397
                  XmNselectedItemCount, &prjnum,
 
398
                  NULL);
 
399
   
 
400
   if (prjnum == 1 && 
 
401
         XmStringGetLtoR(prjnames[0], XmFONTLIST_DEFAULT_TAG, &prjstr)) {
 
402
      XmtInputFieldSetString(project_name_w, prjstr);
 
403
      XtVaSetValues( project_name_w,
 
404
                     XmNeditable, False,
 
405
                     NULL);
 
406
      prjp = prj_list_locate(qmonMirrorList(SGE_PROJECT_LIST), prjstr);
 
407
      XtFree((char*)prjstr);
 
408
      if (prjp) {
 
409
         add_mode = 0;
 
410
         qmonProjectSetAsk(prjp);
 
411
         XtManageChild(project_ask_layout);
 
412
      }
 
413
      XtManageChild(project_ask_layout);
 
414
   }
 
415
   else {
 
416
      if (prjnum > 1)
 
417
         qmonMessageShow(w, True, "@{Select only one project !}");
 
418
      else
 
419
         qmonMessageShow(w, True, "@{To modify a project select this project !}");
 
420
   }
 
421
 
 
422
 
 
423
   DEXIT;
 
424
}
 
425
 
 
426
 
 
427
 
 
428
/*-------------------------------------------------------------------------*/
 
429
static void qmonProjectOk(Widget w, XtPointer cld, XtPointer cad)
 
430
{
 
431
   lList *prjl = NULL;
 
432
   lList *alp = NULL;
 
433
   lEnumeration *what = NULL;
 
434
   Boolean status = False;
 
435
   XmString xprjname = NULL;
 
436
   StringConst prjname = NULL;
 
437
   lListElem *new_prep = NULL;
 
438
   lListElem *prep = NULL;
 
439
 
 
440
   DENTER(GUI_LAYER, "qmonProjectOk");
 
441
   /*
 
442
   ** get the contents of the dialog fields here,
 
443
   ** build the cull list and send gdi request
 
444
   ** depending on success of gdi request close the dialog or stay open
 
445
   */
 
446
   prjl = lCreateList("PR_ADD", PR_Type);
 
447
   prep = lCreateElem(PR_Type);
 
448
   
 
449
   if (prjl) {
 
450
      if (qmonProjectGetAsk(prep)) {
 
451
         prjname = lGetString(prep, PR_name);
 
452
         /*
 
453
         ** gdi call 
 
454
         */
 
455
         what = lWhat("%T(ALL)", PR_Type);
 
456
         
 
457
         if (add_mode) {
 
458
            lAppendElem(prjl, lCopyElem(prep));
 
459
            alp = qmonAddList(SGE_PROJECT_LIST, 
 
460
                              qmonMirrorListRef(SGE_PROJECT_LIST),
 
461
                              PR_name, &prjl, NULL, what);
 
462
         }
 
463
         else {
 
464
            /*
 
465
            ** find old element and change this one because we have to keep
 
466
            ** the information inside it; due to a weakness of the
 
467
            ** current GDI a selective modify is impossible
 
468
            */
 
469
            qmonMirrorMultiAnswer(PROJECT_T, &alp);
 
470
            if (alp) {
 
471
               qmonMessageBox(w, alp, 0);
 
472
               lFreeList(&alp);
 
473
               DEXIT;
 
474
               return;
 
475
            }
 
476
               
 
477
            new_prep = lCopyElem(lGetElemStr(qmonMirrorList(SGE_PROJECT_LIST), 
 
478
                                    PR_name, prjname));
 
479
            lSwapList(new_prep, PR_acl, prep, PR_acl); 
 
480
            lSwapList(new_prep, PR_xacl, prep, PR_xacl); 
 
481
            lAppendElem(prjl, new_prep);
 
482
            alp = qmonModList(SGE_PROJECT_LIST, 
 
483
                              qmonMirrorListRef(SGE_PROJECT_LIST),
 
484
                              PR_name, &prjl, NULL, what);
 
485
         }
 
486
 
 
487
         if (lFirst(alp) && lGetUlong(lFirst(alp), AN_status) == STATUS_OK)
 
488
            status = True;
 
489
 
 
490
         qmonMessageBox(w, alp, 0);
 
491
 
 
492
         if (status) {
 
493
            XtUnmanageChild(project_ask_layout);
 
494
            updateProjectList();
 
495
            if (add_mode) {   
 
496
               XmListSelectPos(project_names, 0, True);
 
497
            }
 
498
            else {
 
499
               xprjname = XmtCreateXmString(prjname);
 
500
               XmListSelectItem(project_names, xprjname, True);
 
501
               XmStringFree(xprjname);
 
502
            }
 
503
         }
 
504
         lFreeWhat(&what);
 
505
         lFreeList(&prjl);
 
506
         lFreeElem(&prep);
 
507
         lFreeList(&alp);
 
508
      }
 
509
   }
 
510
 
 
511
 
 
512
   DEXIT;
 
513
}
 
514
 
 
515
 
 
516
 
 
517
/*-------------------------------------------------------------------------*/
 
518
static void qmonProjectCancel(Widget w, XtPointer cld, XtPointer cad)
 
519
{
 
520
   DENTER(GUI_LAYER, "qmonProjectCancel");
 
521
 
 
522
   XtUnmanageChild(project_ask_layout);
 
523
 
 
524
   DEXIT;
 
525
}
 
526
 
 
527
/*-------------------------------------------------------------------------*/
 
528
static void qmonProjectDelete(Widget w, XtPointer cld, XtPointer cad)
 
529
{
 
530
   lList *lp = NULL;
 
531
   lList *alp = NULL;
 
532
   lEnumeration *what = NULL;
 
533
   Cardinal itemCount = 0;
 
534
   Boolean status, answer;
 
535
 
 
536
   DENTER(GUI_LAYER, "qmonProjectDelete");
 
537
    
 
538
   lp = XmStringToCull(project_names, PR_Type, PR_name, SELECTED_ITEMS); 
 
539
 
 
540
   if (lp) {
 
541
      status = XmtAskForBoolean(w, "xmtBooleanDialog", 
 
542
                     "@{project.askdel.Do you really want to delete the\nselected Project Configuration ?}", 
 
543
                     "@{Delete}", "@{Cancel}", NULL, XmtNoButton, XmDIALOG_WARNING, 
 
544
                     False, &answer, NULL);
 
545
      if (answer) { 
 
546
         what = lWhat("%T(ALL)", PR_Type);
 
547
         alp = qmonDelList(SGE_PROJECT_LIST, 
 
548
                           qmonMirrorListRef(SGE_PROJECT_LIST),
 
549
                           PR_name, &lp, NULL, what);
 
550
 
 
551
         qmonMessageBox(w, alp, 0);
 
552
         lFreeWhat(&what);
 
553
         lFreeList(&alp);
 
554
 
 
555
         updateProjectList();
 
556
         XtVaGetValues( project_names,
 
557
                        XmNitemCount, &itemCount,
 
558
                        NULL);
 
559
         if (itemCount)
 
560
            XmListSelectPos(project_names, 1, True);
 
561
         else
 
562
            qmonProjectFillConf(project_names, NULL);
 
563
 
 
564
      }
 
565
      lFreeList(&lp);
 
566
   }
 
567
   DEXIT;
 
568
}
 
569
 
 
570
/*-------------------------------------------------------------------------*/
 
571
static void qmonProjectSetAsk(
 
572
lListElem *prjp 
 
573
) {
 
574
   StringConst prj_name = NULL;
 
575
   lList *acl = NULL;
 
576
   lList *xacl = NULL;
 
577
 
 
578
   DENTER(GUI_LAYER, "qmonProjectSetAsk");
 
579
 
 
580
   if (!prjp) {
 
581
      DEXIT;
 
582
      return;
 
583
   }
 
584
 
 
585
   prj_name = lGetString(prjp, PR_name);
 
586
   if (prj_name)
 
587
      XmtInputFieldSetString(project_name_w, prj_name);
 
588
 
 
589
   /*
 
590
   ** the lists have to be converted to XmString
 
591
   */
 
592
   acl = lGetList(prjp, PR_acl);
 
593
   UpdateXmListFromCull(project_acl_w, XmFONTLIST_DEFAULT_TAG, acl, US_name);
 
594
    
 
595
   xacl = lGetList(prjp, PR_xacl);
 
596
   UpdateXmListFromCull(project_xacl_w, XmFONTLIST_DEFAULT_TAG, xacl, US_name);
 
597
      
 
598
   DEXIT;
 
599
}
 
600
 
 
601
/*-------------------------------------------------------------------------*/
 
602
static void qmonProjectResetAsk(void)
 
603
{
 
604
 
 
605
   DENTER(GUI_LAYER, "qmonProjectResetAsk");
 
606
 
 
607
   XmtInputFieldSetString(project_name_w, "");
 
608
 
 
609
   /*
 
610
   ** the lists have to be converted to XmString
 
611
   */
 
612
   UpdateXmListFromCull(project_acl_w, XmFONTLIST_DEFAULT_TAG, NULL, US_name);
 
613
    
 
614
   UpdateXmListFromCull(project_xacl_w, XmFONTLIST_DEFAULT_TAG, NULL, US_name);
 
615
      
 
616
   DEXIT;
 
617
}
 
618
 
 
619
/*-------------------------------------------------------------------------*/
 
620
static Boolean qmonProjectGetAsk(
 
621
lListElem *prjp 
 
622
) {
 
623
   String prj_name = NULL;
 
624
   lList *acl = NULL;
 
625
   lList *xacl = NULL;
 
626
 
 
627
   DENTER(GUI_LAYER, "qmonProjectGetAsk");
 
628
 
 
629
   if (!prjp) {
 
630
      DEXIT;
 
631
      return False;
 
632
   }
 
633
 
 
634
   prj_name = XmtInputFieldGetString(project_name_w);
 
635
   if (!prj_name || prj_name[0] == '\0') {
 
636
      qmonMessageShow(project_ask_layout, True, "@{Project name required !}");
 
637
      DEXIT;
 
638
      return False;
 
639
   }
 
640
   lSetString(prjp, PR_name, prj_name);
 
641
  
 
642
   /*
 
643
   ** XmString entries --> Cull
 
644
   */
 
645
   acl = XmStringToCull(project_acl_w, US_Type, US_name, ALL_ITEMS);
 
646
   lSetList(prjp, PR_acl, acl);
 
647
 
 
648
   xacl = XmStringToCull(project_xacl_w, US_Type, US_name, ALL_ITEMS);
 
649
   lSetList(prjp, PR_xacl, xacl);
 
650
   
 
651
   DEXIT;
 
652
   return True;
 
653
}