2 * CDE - Common Desktop Environment
4 * Copyright (c) 1993-2012, The Open Group. All rights reserved.
6 * These libraries and programs are free software; you can
7 * redistribute them and/or modify them under the terms of the GNU
8 * Lesser General Public License as published by the Free Software
9 * Foundation; either version 2 of the License, or (at your option)
12 * These libraries and programs are distributed in the hope that
13 * they will be useful, but WITHOUT ANY WARRANTY; without even the
14 * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15 * PURPOSE. See the GNU Lesser General Public License for more
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with these librararies and programs; if not, write
20 * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
21 * Floor, Boston, MA 02110-1301 USA
23 /* $XConsortium: props.c /main/9 1996/03/25 10:22:39 rswiston $ */
25 * (c) Copyright 1993, 1994 Hewlett-Packard Company
26 * (c) Copyright 1993, 1994 International Business Machines Corp.
27 * (c) Copyright 1993, 1994 Novell, Inc.
28 * (c) Copyright 1993, 1994 Sun Microsystems, Inc.
35 #include <Xm/LabelG.h>
37 #include <Xm/DialogS.h>
39 #include <Xm/SeparatoG.h>
41 #include <Xm/ToggleBG.h>
50 #define RIGHT_GAP 85 /* Space between text field and right edge */
51 #define MAX_LABEL_SPACE 55
52 #define INDICATOR_SIZE 20
54 extern unsigned int p_gap_convert_permissions(Props_pu *);
55 extern void gap_list_select_proc(Widget, XtPointer, XtPointer);
56 extern void p_gap_remove_proc(Widget, XtPointer, XtPointer);
57 extern void p_set_change(Props_pu *);
58 extern Dimension ComputeMaxWidth(Widget, Widget, Widget, Widget);
60 static void GAPAddProc(Widget, XtPointer, XtPointer);
61 static void GAPChangeProc(Widget, XtPointer, XtPointer);
62 static Widget CreatePermissions(Props_pu *, Widget, Widget, Dimension,
64 static int ChangeExistingGAPEntry(Props_pu *);
67 v5_gap_pending_change(Widget w, XtPointer data, XtPointer cbs) {
68 Props_pu *p = (Props_pu *) data;
70 if (p->v5_gap_pending_message_up == False) {
71 p->v5_gap_pending_message_up = True;
72 XtSetSensitive(p->gap2_add_button, True);
77 v5_gap_clear_pending_change(Props_pu *p) {
79 p->v5_gap_pending_message_up = False;
80 XtSetSensitive(p->gap2_add_button, False);
86 p_create_v5_group_access_pane(
89 Calendar *c = calendar;
93 Dimension max_left_label_width,
94 max_button_label_width,
100 XtVaCreateWidget("gap2_form_mgr",
103 XmNtopAttachment, XmATTACH_WIDGET,
104 XmNtopWidget, p->separator1,
105 XmNleftAttachment, XmATTACH_FORM,
106 XmNrightAttachment, XmATTACH_FORM,
108 XmNbottomAttachment, XmATTACH_WIDGET,
109 XmNbottomOffset, GAP,
110 XmNbottomWidget, p->separator2,
113 p->pane_list[GROUP_ACCESS_PANE] = gap2_form_mgr;
116 * Create our three left hand side labels first in order to figure
117 * out the offset required between the middle widgets and the left
120 xstr = XmStringCreateLocalized(
121 catgets(c->DT_catd, 1, 410, "User Name:"));
123 XtVaCreateWidget("gap2_label_user_name",
126 XmNlabelType, XmSTRING,
127 XmNlabelString, xstr,
132 xstr = XmStringCreateLocalized(
133 catgets(c->DT_catd, 1, 738, "Access List:"));
134 p->gap2_access_label =
135 XtVaCreateWidget("gap2_label_access",
138 XmNlabelType, XmSTRING,
139 XmNlabelString, xstr,
144 xstr = XmStringCreateLocalized(
145 catgets(c->DT_catd, 1, 739, "Access Rights:"));
146 p->gap2_permissions_label =
147 XtVaCreateWidget("gap2_label_permissions",
150 XmNlabelType, XmSTRING,
151 XmNlabelString, xstr,
156 max_left_label_width = ComputeMaxWidth(p->gap2_user_label,
157 p->gap2_access_label,
158 p->gap2_permissions_label,
163 XtVaCreateWidget("gap2_text_user_name",
167 XmNbottomAttachment, XmATTACH_NONE,
168 XmNleftAttachment, XmATTACH_FORM,
169 XmNleftOffset, max_left_label_width,
170 XmNtopAttachment, XmATTACH_FORM,
173 p->gap_user_text = p->gap2_user_text;
175 XtAddCallback(p->gap_user_text, XmNvalueChangedCallback,
176 v5_gap_pending_change, (XtPointer)p);
178 p->gap2_perm_form = CreatePermissions(p, gap2_form_mgr,
180 max_left_label_width, RIGHT_GAP);
182 p->gap2_button_form =
183 XtVaCreateWidget("gap2_button_form_mgr",
186 XmNtopAttachment, XmATTACH_WIDGET,
187 XmNtopWidget, p->gap2_perm_form,
189 XmNrightAttachment, XmATTACH_FORM,
193 xstr = XmStringCreateLocalized(catgets(c->DT_catd, 1, 740, "Add"));
195 XtVaCreateWidget("gap2_button_add",
196 xmPushButtonWidgetClass,
198 XmNleftAttachment, XmATTACH_FORM,
200 XmNtopAttachment, XmATTACH_FORM,
202 XmNalignment, XmALIGNMENT_CENTER,
203 XmNlabelType, XmSTRING,
204 XmNlabelString, xstr,
208 XtAddCallback(p->gap2_add_button, XmNactivateCallback, GAPAddProc, p);
210 xstr = XmStringCreateLocalized(catgets(c->DT_catd, 1, 419, "Delete"));
211 p->gap2_delete_button =
212 XtVaCreateWidget("gap2_button_delete",
213 xmPushButtonWidgetClass,
215 XmNleftAttachment, XmATTACH_FORM,
217 XmNtopAttachment, XmATTACH_WIDGET,
218 XmNtopWidget, p->gap2_add_button,
220 XmNalignment, XmALIGNMENT_CENTER,
221 XmNlabelType, XmSTRING,
222 XmNlabelString, xstr,
224 p->gap_remove_button = p->gap2_delete_button;
227 XtAddCallback(p->gap2_delete_button, XmNactivateCallback,
228 p_gap_remove_proc, p);
230 xstr = XmStringCreateLocalized(catgets(c->DT_catd, 1, 343, "Change"));
231 p->gap2_change_button =
232 XtVaCreateWidget("gap2_button_change",
233 xmPushButtonWidgetClass,
235 XmNleftAttachment, XmATTACH_FORM,
237 XmNtopAttachment, XmATTACH_WIDGET,
238 XmNtopWidget, p->gap2_delete_button,
240 XmNalignment, XmALIGNMENT_CENTER,
241 XmNlabelType, XmSTRING,
242 XmNlabelString, xstr,
246 XtAddCallback(p->gap2_change_button, XmNactivateCallback, GAPChangeProc,
249 max_button_label_width = ComputeMaxWidth(p->gap2_add_button,
250 p->gap2_delete_button,
251 p->gap2_change_button,
254 XtVaSetValues(p->gap2_add_button,
255 XmNrightAttachment, XmATTACH_OPPOSITE_FORM,
256 XmNrightOffset, -max_button_label_width,
258 XtVaSetValues(p->gap2_delete_button,
259 XmNrightAttachment, XmATTACH_OPPOSITE_FORM,
260 XmNrightOffset, -max_button_label_width,
262 XtVaSetValues(p->gap2_change_button,
263 XmNrightAttachment, XmATTACH_OPPOSITE_FORM,
264 XmNrightOffset, -max_button_label_width,
268 XtSetArg(args[i], XmNscrollBarDisplayPolicy, XmAUTOMATIC); ++i;
269 XtSetArg(args[i], XmNlistSizePolicy, XmVARIABLE); ++i;
270 XtSetArg(args[i], XmNvisibleItemCount, 10); ++i;
271 XtSetArg(args[i], XmNrightAttachment, XmATTACH_WIDGET); ++i;
272 XtSetArg(args[i], XmNrightWidget, p->gap2_button_form); ++i;
273 XtSetArg(args[i], XmNrightOffset, GAP * 2); ++i;
274 XtSetArg(args[i], XmNleftAttachment, XmATTACH_FORM); ++i;
275 XtSetArg(args[i], XmNleftOffset, max_left_label_width);
277 XtSetArg(args[i], XmNtopAttachment, XmATTACH_WIDGET); ++i;
278 XtSetArg(args[i], XmNtopOffset, GAP); ++i;
279 XtSetArg(args[i], XmNtopWidget, p->gap2_perm_form); ++i;
280 XtSetArg(args[i], XmNbottomAttachment, XmATTACH_WIDGET); ++i;
281 XtSetArg(args[i], XmNbottomOffset, 0); ++i;
282 XtSetArg(args[i], XmNbottomWidget, p->separator2); ++i;
283 XtSetArg(args[i], XmNdoubleClickInterval, 5); ++i;
285 p->gap2_access_list =
286 XmCreateScrolledList(gap2_form_mgr, "gap2_access_list", args, i);
287 p->gap_access_list = p->gap2_access_list;
289 XtAddCallback(p->gap2_access_list, XmNbrowseSelectionCallback,
290 gap_list_select_proc, p);
292 XtManageChild(p->gap2_access_list);
294 XtQueryGeometry( p->gap2_button_form, NULL, &geo );
296 XtVaSetValues( p->gap2_user_text,
297 XmNrightAttachment, XmATTACH_FORM,
298 XmNrightOffset, geo.width + GAP + GAP,
300 XtVaSetValues( p->gap2_perm_form,
301 XmNrightAttachment, XmATTACH_FORM,
302 XmNrightOffset, geo.width + GAP + GAP,
306 ManageChildren(p->gap2_button_form);
308 XtVaSetValues(p->gap2_user_label,
309 XmNtopAttachment, XmATTACH_FORM,
311 XmNrightAttachment, XmATTACH_WIDGET,
312 XmNrightWidget, p->gap2_user_text,
316 XtVaSetValues(p->gap2_permissions_label,
317 XmNtopAttachment, XmATTACH_WIDGET,
318 XmNtopWidget, p->gap2_user_text,
320 XmNrightAttachment, XmATTACH_WIDGET,
321 XmNrightWidget, p->gap2_perm_form,
325 XtVaSetValues(p->gap2_access_label,
326 XmNtopAttachment, XmATTACH_WIDGET,
327 XmNtopWidget, p->gap2_perm_form,
329 XmNrightAttachment, XmATTACH_WIDGET,
330 XmNrightWidget, p->gap2_access_list,
334 ManageChildren(gap2_form_mgr);
345 Calendar *c = calendar;
354 XmString xstr = NULL,
357 /* Create the box containing the permission settings */
360 XtVaCreateWidget("gap2_perm_form_mgr",
363 XmNleftAttachment, XmATTACH_FORM,
364 XmNleftOffset, left_gap,
365 XmNtopAttachment, XmATTACH_WIDGET,
366 XmNtopWidget, widget_above,
368 XmNshadowThickness, 1,
369 XmNshadowType, XmSHADOW_IN,
372 xstr = XmStringCreateLocalized(catgets(c->DT_catd, 1, 743, "Public:"));
373 p->gap2_public_label =
374 XtVaCreateWidget("gap2_public_label",
377 XmNlabelString, xstr,
382 xstr = XmStringCreateLocalized(
383 catgets(c->DT_catd, 1, 744, "Semiprivate:"));
385 XtVaCreateWidget("gap2_semi_label",
388 XmNlabelString, xstr,
389 XmNleftAttachment, XmATTACH_FORM,
395 xstr = XmStringCreateLocalized(catgets(c->DT_catd, 1, 745, "Private:"));
396 p->gap2_private_label =
397 XtVaCreateWidget("gap2_private_label",
400 XmNlabelString, xstr,
405 /* Margin to the left of the View label */
406 max_label_width = ComputeMaxWidth(p->gap2_public_label,
408 p->gap2_private_label,
411 /* Create the labels and toggles for the permissions */
413 xstr = XmStringCreateLocalized(catgets(c->DT_catd, 1, 40, "View"));
415 XtVaCreateWidget("gap2_view_label",
418 XmNlabelString, xstr,
419 XmNleftAttachment, XmATTACH_FORM,
420 XmNleftOffset, max_label_width,
421 XmNtopAttachment, XmATTACH_FORM,
427 XtVaGetValues(p->gap2_view_label,
428 XmNwidth, &view_label_width,
432 * If label is greater than the allocated space for the
433 * label, then we use a 0 offset.
436 label_offset = MAX_LABEL_SPACE;
437 label_offset -= view_label_width;
439 label_offset = MAX_LABEL_SPACE - view_label_width;
441 if (label_offset < 0) label_offset = 0;
443 xstr = XmStringCreateLocalized(catgets(c->DT_catd, 1, 342, "Insert"));
445 p->gap2_insert_label =
446 XtVaCreateWidget("gap2_insert_label",
449 XmNlabelString, xstr,
450 XmNleftAttachment, XmATTACH_WIDGET,
451 XmNleftWidget, p->gap2_view_label,
452 XmNleftOffset, label_offset,
453 XmNtopAttachment, XmATTACH_FORM,
459 XtVaGetValues(p->gap2_insert_label,
460 XmNwidth, &insert_label_width,
463 xstr = XmStringCreateLocalized(catgets(c->DT_catd, 1, 343, "Change"));
466 * If label is greater than the allocated space for the
467 * label, then we use a 0 offset.
470 label_offset = MAX_LABEL_SPACE;
471 label_offset -= insert_label_width;
473 label_offset = MAX_LABEL_SPACE - insert_label_width;
475 if (label_offset < 0) label_offset = 0;
477 p->gap2_change_label =
478 XtVaCreateWidget("gap2_change_label",
481 XmNlabelString, xstr,
482 XmNleftAttachment, XmATTACH_WIDGET,
483 XmNleftWidget, p->gap2_insert_label,
484 XmNleftOffset, label_offset,
485 XmNtopAttachment, XmATTACH_FORM,
491 XtVaGetValues(p->gap2_change_label,
492 XmNwidth, &change_label_width,
495 xstr_empty = XmStringCreateLocalized("");
496 p->gap2_public_tog[GAP_VIEW] =
497 XtVaCreateWidget("gap2_public_view_tog",
498 xmToggleButtonGadgetClass,
500 XmNlabelString, xstr_empty,
501 XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET,
502 XmNleftWidget, p->gap2_view_label,
503 XmNtopAttachment, XmATTACH_WIDGET,
504 XmNtopWidget, p->gap2_view_label,
505 XmNtopOffset, TOG_GAP,
506 XmNindicatorSize, INDICATOR_SIZE,
509 XtVaGetValues(p->gap2_public_tog[GAP_VIEW],
510 XmNwidth, &tog_width,
514 * Center the toggle item under the label above it.
516 XtVaSetValues(p->gap2_public_tog[GAP_VIEW],
517 XmNleftOffset, view_label_width/2 -
518 (int)(tog_width * 3)/8,
521 p->gap2_public_tog[GAP_INSERT] =
522 XtVaCreateWidget("gap2_public_insert_tog",
523 xmToggleButtonGadgetClass,
525 XmNlabelString, xstr_empty,
526 XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET,
527 XmNleftWidget, p->gap2_insert_label,
528 XmNleftOffset, insert_label_width/2 -
529 (int)(tog_width * 3)/8,
530 XmNtopAttachment, XmATTACH_WIDGET,
531 XmNtopWidget, p->gap2_insert_label,
532 XmNtopOffset, TOG_GAP,
533 XmNindicatorSize, INDICATOR_SIZE,
536 p->gap2_public_tog[GAP_CHANGE] =
537 XtVaCreateWidget("gap2_public_change_tog",
538 xmToggleButtonGadgetClass,
540 XmNlabelString, xstr_empty,
541 XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET,
542 XmNleftWidget, p->gap2_change_label,
543 XmNleftOffset, change_label_width/2 -
544 (int)(tog_width * 3)/8,
545 XmNtopAttachment, XmATTACH_WIDGET,
546 XmNtopWidget, p->gap2_change_label,
547 XmNtopOffset, TOG_GAP,
548 XmNindicatorSize, INDICATOR_SIZE,
551 p->gap2_semi_tog[GAP_VIEW] =
552 XtVaCreateWidget("gap2_semi_view_tog",
553 xmToggleButtonGadgetClass,
555 XmNlabelString, xstr_empty,
556 XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET,
557 XmNleftWidget, p->gap2_public_tog[GAP_VIEW],
558 XmNtopAttachment, XmATTACH_WIDGET,
559 XmNtopWidget, p->gap2_public_tog[GAP_VIEW],
560 XmNtopOffset, TOG_GAP,
561 XmNindicatorSize, INDICATOR_SIZE,
564 p->gap2_semi_tog[GAP_INSERT] =
565 XtVaCreateWidget("gap2_semi_insert_tog",
566 xmToggleButtonGadgetClass,
568 XmNlabelString, xstr_empty,
569 XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET,
570 XmNleftWidget, p->gap2_public_tog[GAP_INSERT],
571 XmNtopAttachment, XmATTACH_WIDGET,
572 XmNtopWidget, p->gap2_public_tog[GAP_INSERT],
573 XmNtopOffset, TOG_GAP,
574 XmNindicatorSize, INDICATOR_SIZE,
577 p->gap2_semi_tog[GAP_CHANGE] =
578 XtVaCreateWidget("gap2_semi_change_tog",
579 xmToggleButtonGadgetClass,
581 XmNlabelString, xstr_empty,
582 XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET,
583 XmNleftWidget, p->gap2_public_tog[GAP_CHANGE],
584 XmNtopAttachment, XmATTACH_WIDGET,
585 XmNtopWidget, p->gap2_public_tog[GAP_CHANGE],
586 XmNtopOffset, TOG_GAP,
587 XmNindicatorSize, INDICATOR_SIZE,
590 p->gap2_private_tog[GAP_VIEW] =
591 XtVaCreateWidget("gap2_private_view_tog",
592 xmToggleButtonGadgetClass,
594 XmNlabelString, xstr_empty,
595 XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET,
596 XmNleftWidget, p->gap2_semi_tog[GAP_VIEW],
597 XmNtopAttachment, XmATTACH_WIDGET,
598 XmNtopWidget, p->gap2_semi_tog[GAP_VIEW],
599 XmNtopOffset, TOG_GAP,
600 XmNindicatorSize, INDICATOR_SIZE,
603 p->gap2_private_tog[GAP_INSERT] =
604 XtVaCreateWidget("gap2_private_insert_tog",
605 xmToggleButtonGadgetClass,
607 XmNlabelString, xstr_empty,
608 XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET,
609 XmNleftWidget, p->gap2_semi_tog[GAP_INSERT],
610 XmNtopAttachment, XmATTACH_WIDGET,
611 XmNtopWidget, p->gap2_semi_tog[GAP_INSERT],
612 XmNtopOffset, TOG_GAP,
613 XmNindicatorSize, INDICATOR_SIZE,
616 p->gap2_private_tog[GAP_CHANGE] =
617 XtVaCreateWidget("gap2_private_change_tog",
618 xmToggleButtonGadgetClass,
620 XmNlabelString, xstr_empty,
621 XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET,
622 XmNleftWidget, p->gap2_semi_tog[GAP_CHANGE],
623 XmNtopAttachment, XmATTACH_WIDGET,
624 XmNtopWidget, p->gap2_semi_tog[GAP_CHANGE],
625 XmNtopOffset, TOG_GAP,
626 XmNindicatorSize, INDICATOR_SIZE,
629 XmStringFree (xstr_empty);
631 XtVaSetValues(p->gap2_public_label,
632 XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET,
633 XmNtopWidget, p->gap2_public_tog[GAP_VIEW],
634 XmNrightAttachment, XmATTACH_WIDGET,
635 XmNrightWidget, p->gap2_public_tog[GAP_VIEW],
636 XmNrightOffset, 2 * GAP,
639 XtVaSetValues(p->gap2_semi_label,
640 XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET,
641 XmNtopWidget, p->gap2_semi_tog[GAP_VIEW],
642 XmNrightAttachment, XmATTACH_WIDGET,
643 XmNrightWidget, p->gap2_public_tog[GAP_VIEW],
644 XmNrightOffset, 2 * GAP,
647 XtVaSetValues(p->gap2_private_label,
648 XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET,
649 XmNtopWidget, p->gap2_private_tog[GAP_VIEW],
650 XmNrightAttachment, XmATTACH_WIDGET,
651 XmNrightWidget, p->gap2_public_tog[GAP_VIEW],
652 XmNrightOffset, 2 * GAP,
653 XmNbottomAttachment, XmATTACH_FORM,
654 XmNbottomOffset, GAP,
657 /* Margin to the right of the Change label */
658 XtVaSetValues(p->gap2_change_label,
662 ManageChildren(perm_form);
669 XtPointer client_data,
670 XtPointer callback_struct)
672 Calendar *c = calendar;
673 Props_pu *p = (Props_pu *)client_data;
674 CSA_flags access_rights;
675 CSA_access_rights *access_entry,
681 * Get the necessary strings from the UI.
683 if (!(access_rights = p_gap_convert_permissions(p)))
686 /* Get the user's name and host */
687 if (!(user_name = (char *)XmTextGetString(p->gap2_user_text)) ||
689 char *title = XtNewString(catgets(c->DT_catd, 1, 750,
690 "Calendar : Error - Access List and Permissions"));
691 char *text = XtNewString(catgets(c->DT_catd, 1, 749,
692 "Name and Access Rights must be set to add an item to the Access List."));
693 char *ident1 = XtNewString(catgets(c->DT_catd, 1, 95,
697 dialog_popup(p->frame,
700 BUTTON_IDENT, 1, ident1,
701 BUTTON_HELP, ACCESS_RIGHTS_ERROR_HELP,
702 DIALOG_IMAGE, p->xm_error_pixmap,
710 xmstr = XmStringCreateLocalized(user_name);
712 /* See if the item is already in the list */
714 int list_pos = XmListItemPos(p->gap_access_list, xmstr);
717 XmListSelectPos(p->gap_access_list, list_pos, False);
718 XmListSetBottomPos(p->gap_access_list, list_pos);
719 XtSetSensitive(p->gap2_change_button, True);
720 XtSetSensitive(p->gap2_delete_button, True);
722 /* Does the user want us to change an existing item? */
723 if (!ChangeExistingGAPEntry(p)) {
730 /* Find the entry and change the rights. */
731 access_list_ptr = p->gap_list;
733 if (!strcmp(access_list_ptr->user->user_name,
735 access_list_ptr->rights = access_rights;
736 p->changed_flag = True;
742 } while (access_list_ptr = access_list_ptr->next);
746 /* Create a new access entry and add it to the end of the list */
748 (CSA_access_rights *)ckalloc(sizeof(CSA_access_rights));
750 (CSA_calendar_user *)ckalloc(sizeof(CSA_calendar_user));
751 access_entry->user->user_name = cm_strdup(user_name);
752 access_entry->rights = access_rights;
753 access_entry->next = NULL;
756 p->gap_list = access_entry;
758 access_list_ptr = p->gap_list;
759 while (access_list_ptr->next)
760 access_list_ptr = access_list_ptr->next;
761 access_list_ptr->next = access_entry;
764 XmListAddItem(p->gap_access_list, xmstr, 0);
765 p->changed_flag = True;
772 ChangeExistingGAPEntry(
775 Calendar *c = calendar;
778 char *title = XtNewString(catgets(c->DT_catd, 1, 1078,
779 "Calendar : Access List and Permissions - Add"));
780 char *text = XtNewString(catgets(c->DT_catd, 1, 751,
781 "This entry already exists in the Access List. Do you wish to change it?"));
782 char *ident1 = XtNewString(catgets(c->DT_catd, 1, 343,
784 char *ident2 = XtNewString(catgets(c->DT_catd, 1, 923,
787 answer = dialog_popup(p->frame,
790 BUTTON_IDENT, 2, ident2,
791 BUTTON_IDENT, 1, ident1,
806 XtPointer client_data,
807 XtPointer callback_struct)
809 Calendar *c = calendar;
810 Props_pu *p = (Props_pu *)client_data;
811 CSA_access_list step = p->gap_list,
813 int *item_list = NULL,
815 CSA_flags access_rights;
816 CSA_access_rights *access_entry;
821 /* An item to change must be selected in the access list */
822 if (!XmListGetSelectedPos(p->gap2_access_list, &item_list, &item_cnt)) {
823 char *title = XtNewString(catgets(c->DT_catd, 1, 750,
824 "Calendar : Error - Access List and Permissions"));
825 char *text = XtNewString(catgets(c->DT_catd, 1, 408,
826 "Please select a name first. "));
827 char *ident1 = XtNewString(catgets(c->DT_catd, 1, 95, "Continue"));
828 dialog_popup(p->frame,
831 BUTTON_IDENT, 1, ident1,
832 DIALOG_IMAGE, p->xm_error_pixmap,
841 * Get the necessary strings from the UI.
843 if (!(access_rights = p_gap_convert_permissions(p)))
846 /* Get the user's name and host */
847 if (!(user_name = (char *)XmTextGetString(p->gap2_user_text)) ||
849 char *title = XtNewString(catgets(c->DT_catd, 1, 750,
850 "Calendar : Error - Access List and Permissions"));
851 char *text = XtNewString(catgets(c->DT_catd, 1, 756,
852 "Name and Access rights must be set to change an item in the Access List"));
853 char *ident1 = XtNewString(catgets(c->DT_catd, 1, 95, "Continue"));
856 dialog_popup(p->frame,
859 BUTTON_IDENT, 1, ident1,
860 DIALOG_IMAGE, p->xm_error_pixmap,
868 xmstr = XmStringCreateLocalized(user_name);
870 /* Create a new access entry and add it to the end of the list */
872 (CSA_access_rights *)ckalloc(sizeof(CSA_access_rights));
874 (CSA_calendar_user *)ckalloc(sizeof(CSA_calendar_user));
875 access_entry->user->user_name = cm_strdup(user_name);
876 access_entry->rights = access_rights;
877 access_entry->next = NULL;
880 * Find and change the Access_Entry/name from the list.
883 while(item_cnt < *item_list) {
890 last->next = access_entry;
892 p->gap_list = access_entry;
894 access_entry->next = step->next;
899 XmListReplaceItemsPos(p->gap2_access_list, &xmstr, 1, *item_list);
901 p->changed_flag = True;
905 XtFree((XtPointer)item_list);