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.
34 #include <Xm/LabelG.h>
36 #include <Xm/DialogS.h>
38 #include <Xm/SeparatoG.h>
40 #include <Xm/ToggleBG.h>
49 #define RIGHT_GAP 85 /* Space between text field and right edge */
50 #define MAX_LABEL_SPACE 55
51 #define INDICATOR_SIZE 20
53 extern unsigned int p_gap_convert_permissions(Props_pu *);
54 extern void gap_list_select_proc(Widget, XtPointer, XtPointer);
55 extern void p_gap_remove_proc(Widget, XtPointer, XtPointer);
56 extern void p_set_change(Props_pu *);
57 extern Dimension ComputeMaxWidth(Widget, Widget, Widget, Widget);
59 static void GAPAddProc(Widget, XtPointer, XtPointer);
60 static void GAPChangeProc(Widget, XtPointer, XtPointer);
61 static Widget CreatePermissions(Props_pu *, Widget, Widget, Dimension,
63 static int ChangeExistingGAPEntry(Props_pu *);
66 v5_gap_pending_change(Widget w, XtPointer data, XtPointer cbs) {
67 Props_pu *p = (Props_pu *) data;
69 if (p->v5_gap_pending_message_up == False) {
70 p->v5_gap_pending_message_up = True;
71 XtSetSensitive(p->gap2_add_button, True);
76 v5_gap_clear_pending_change(Props_pu *p) {
78 p->v5_gap_pending_message_up = False;
79 XtSetSensitive(p->gap2_add_button, False);
85 p_create_v5_group_access_pane(
88 Calendar *c = calendar;
92 Dimension max_left_label_width,
93 max_button_label_width,
99 XtVaCreateWidget("gap2_form_mgr",
102 XmNtopAttachment, XmATTACH_WIDGET,
103 XmNtopWidget, p->separator1,
104 XmNleftAttachment, XmATTACH_FORM,
105 XmNrightAttachment, XmATTACH_FORM,
107 XmNbottomAttachment, XmATTACH_WIDGET,
108 XmNbottomOffset, GAP,
109 XmNbottomWidget, p->separator2,
112 p->pane_list[GROUP_ACCESS_PANE] = gap2_form_mgr;
115 * Create our three left hand side labels first in order to figure
116 * out the offset required between the middle widgets and the left
119 xstr = XmStringCreateLocalized(
120 catgets(c->DT_catd, 1, 410, "User Name:"));
122 XtVaCreateWidget("gap2_label_user_name",
125 XmNlabelType, XmSTRING,
126 XmNlabelString, xstr,
131 xstr = XmStringCreateLocalized(
132 catgets(c->DT_catd, 1, 738, "Access List:"));
133 p->gap2_access_label =
134 XtVaCreateWidget("gap2_label_access",
137 XmNlabelType, XmSTRING,
138 XmNlabelString, xstr,
143 xstr = XmStringCreateLocalized(
144 catgets(c->DT_catd, 1, 739, "Access Rights:"));
145 p->gap2_permissions_label =
146 XtVaCreateWidget("gap2_label_permissions",
149 XmNlabelType, XmSTRING,
150 XmNlabelString, xstr,
155 max_left_label_width = ComputeMaxWidth(p->gap2_user_label,
156 p->gap2_access_label,
157 p->gap2_permissions_label,
162 XtVaCreateWidget("gap2_text_user_name",
166 XmNbottomAttachment, XmATTACH_NONE,
167 XmNleftAttachment, XmATTACH_FORM,
168 XmNleftOffset, max_left_label_width,
169 XmNtopAttachment, XmATTACH_FORM,
172 p->gap_user_text = p->gap2_user_text;
174 XtAddCallback(p->gap_user_text, XmNvalueChangedCallback,
175 v5_gap_pending_change, (XtPointer)p);
177 p->gap2_perm_form = CreatePermissions(p, gap2_form_mgr,
179 max_left_label_width, RIGHT_GAP);
181 p->gap2_button_form =
182 XtVaCreateWidget("gap2_button_form_mgr",
185 XmNtopAttachment, XmATTACH_WIDGET,
186 XmNtopWidget, p->gap2_perm_form,
188 XmNrightAttachment, XmATTACH_FORM,
192 xstr = XmStringCreateLocalized(catgets(c->DT_catd, 1, 740, "Add"));
194 XtVaCreateWidget("gap2_button_add",
195 xmPushButtonWidgetClass,
197 XmNleftAttachment, XmATTACH_FORM,
199 XmNtopAttachment, XmATTACH_FORM,
201 XmNalignment, XmALIGNMENT_CENTER,
202 XmNlabelType, XmSTRING,
203 XmNlabelString, xstr,
207 XtAddCallback(p->gap2_add_button, XmNactivateCallback, GAPAddProc, p);
209 xstr = XmStringCreateLocalized(catgets(c->DT_catd, 1, 419, "Delete"));
210 p->gap2_delete_button =
211 XtVaCreateWidget("gap2_button_delete",
212 xmPushButtonWidgetClass,
214 XmNleftAttachment, XmATTACH_FORM,
216 XmNtopAttachment, XmATTACH_WIDGET,
217 XmNtopWidget, p->gap2_add_button,
219 XmNalignment, XmALIGNMENT_CENTER,
220 XmNlabelType, XmSTRING,
221 XmNlabelString, xstr,
223 p->gap_remove_button = p->gap2_delete_button;
226 XtAddCallback(p->gap2_delete_button, XmNactivateCallback,
227 p_gap_remove_proc, p);
229 xstr = XmStringCreateLocalized(catgets(c->DT_catd, 1, 343, "Change"));
230 p->gap2_change_button =
231 XtVaCreateWidget("gap2_button_change",
232 xmPushButtonWidgetClass,
234 XmNleftAttachment, XmATTACH_FORM,
236 XmNtopAttachment, XmATTACH_WIDGET,
237 XmNtopWidget, p->gap2_delete_button,
239 XmNalignment, XmALIGNMENT_CENTER,
240 XmNlabelType, XmSTRING,
241 XmNlabelString, xstr,
245 XtAddCallback(p->gap2_change_button, XmNactivateCallback, GAPChangeProc,
248 max_button_label_width = ComputeMaxWidth(p->gap2_add_button,
249 p->gap2_delete_button,
250 p->gap2_change_button,
253 XtVaSetValues(p->gap2_add_button,
254 XmNrightAttachment, XmATTACH_OPPOSITE_FORM,
255 XmNrightOffset, -max_button_label_width,
257 XtVaSetValues(p->gap2_delete_button,
258 XmNrightAttachment, XmATTACH_OPPOSITE_FORM,
259 XmNrightOffset, -max_button_label_width,
261 XtVaSetValues(p->gap2_change_button,
262 XmNrightAttachment, XmATTACH_OPPOSITE_FORM,
263 XmNrightOffset, -max_button_label_width,
267 XtSetArg(args[i], XmNscrollBarDisplayPolicy, XmAUTOMATIC); ++i;
268 XtSetArg(args[i], XmNlistSizePolicy, XmVARIABLE); ++i;
269 XtSetArg(args[i], XmNvisibleItemCount, 10); ++i;
270 XtSetArg(args[i], XmNrightAttachment, XmATTACH_WIDGET); ++i;
271 XtSetArg(args[i], XmNrightWidget, p->gap2_button_form); ++i;
272 XtSetArg(args[i], XmNrightOffset, GAP * 2); ++i;
273 XtSetArg(args[i], XmNleftAttachment, XmATTACH_FORM); ++i;
274 XtSetArg(args[i], XmNleftOffset, max_left_label_width);
276 XtSetArg(args[i], XmNtopAttachment, XmATTACH_WIDGET); ++i;
277 XtSetArg(args[i], XmNtopOffset, GAP); ++i;
278 XtSetArg(args[i], XmNtopWidget, p->gap2_perm_form); ++i;
279 XtSetArg(args[i], XmNbottomAttachment, XmATTACH_WIDGET); ++i;
280 XtSetArg(args[i], XmNbottomOffset, 0); ++i;
281 XtSetArg(args[i], XmNbottomWidget, p->separator2); ++i;
282 XtSetArg(args[i], XmNdoubleClickInterval, 5); ++i;
284 p->gap2_access_list =
285 XmCreateScrolledList(gap2_form_mgr, "gap2_access_list", args, i);
286 p->gap_access_list = p->gap2_access_list;
288 XtAddCallback(p->gap2_access_list, XmNbrowseSelectionCallback,
289 gap_list_select_proc, p);
291 XtManageChild(p->gap2_access_list);
293 XtQueryGeometry( p->gap2_button_form, NULL, &geo );
295 XtVaSetValues( p->gap2_user_text,
296 XmNrightAttachment, XmATTACH_FORM,
297 XmNrightOffset, geo.width + GAP + GAP,
299 XtVaSetValues( p->gap2_perm_form,
300 XmNrightAttachment, XmATTACH_FORM,
301 XmNrightOffset, geo.width + GAP + GAP,
305 ManageChildren(p->gap2_button_form);
307 XtVaSetValues(p->gap2_user_label,
308 XmNtopAttachment, XmATTACH_FORM,
310 XmNrightAttachment, XmATTACH_WIDGET,
311 XmNrightWidget, p->gap2_user_text,
315 XtVaSetValues(p->gap2_permissions_label,
316 XmNtopAttachment, XmATTACH_WIDGET,
317 XmNtopWidget, p->gap2_user_text,
319 XmNrightAttachment, XmATTACH_WIDGET,
320 XmNrightWidget, p->gap2_perm_form,
324 XtVaSetValues(p->gap2_access_label,
325 XmNtopAttachment, XmATTACH_WIDGET,
326 XmNtopWidget, p->gap2_perm_form,
328 XmNrightAttachment, XmATTACH_WIDGET,
329 XmNrightWidget, p->gap2_access_list,
333 ManageChildren(gap2_form_mgr);
344 Calendar *c = calendar;
353 XmString xstr = NULL,
356 /* Create the box containing the permission settings */
359 XtVaCreateWidget("gap2_perm_form_mgr",
362 XmNleftAttachment, XmATTACH_FORM,
363 XmNleftOffset, left_gap,
364 XmNtopAttachment, XmATTACH_WIDGET,
365 XmNtopWidget, widget_above,
367 XmNshadowThickness, 1,
368 XmNshadowType, XmSHADOW_IN,
371 xstr = XmStringCreateLocalized(catgets(c->DT_catd, 1, 743, "Public:"));
372 p->gap2_public_label =
373 XtVaCreateWidget("gap2_public_label",
376 XmNlabelString, xstr,
381 xstr = XmStringCreateLocalized(
382 catgets(c->DT_catd, 1, 744, "Semiprivate:"));
384 XtVaCreateWidget("gap2_semi_label",
387 XmNlabelString, xstr,
388 XmNleftAttachment, XmATTACH_FORM,
394 xstr = XmStringCreateLocalized(catgets(c->DT_catd, 1, 745, "Private:"));
395 p->gap2_private_label =
396 XtVaCreateWidget("gap2_private_label",
399 XmNlabelString, xstr,
404 /* Margin to the left of the View label */
405 max_label_width = ComputeMaxWidth(p->gap2_public_label,
407 p->gap2_private_label,
410 /* Create the labels and toggles for the permissions */
412 xstr = XmStringCreateLocalized(catgets(c->DT_catd, 1, 40, "View"));
414 XtVaCreateWidget("gap2_view_label",
417 XmNlabelString, xstr,
418 XmNleftAttachment, XmATTACH_FORM,
419 XmNleftOffset, max_label_width,
420 XmNtopAttachment, XmATTACH_FORM,
426 XtVaGetValues(p->gap2_view_label,
427 XmNwidth, &view_label_width,
431 * If label is greater than the allocated space for the
432 * label, then we use a 0 offset.
435 label_offset = MAX_LABEL_SPACE;
436 label_offset -= view_label_width;
438 label_offset = MAX_LABEL_SPACE - view_label_width;
440 if (label_offset < 0) label_offset = 0;
442 xstr = XmStringCreateLocalized(catgets(c->DT_catd, 1, 342, "Insert"));
444 p->gap2_insert_label =
445 XtVaCreateWidget("gap2_insert_label",
448 XmNlabelString, xstr,
449 XmNleftAttachment, XmATTACH_WIDGET,
450 XmNleftWidget, p->gap2_view_label,
451 XmNleftOffset, label_offset,
452 XmNtopAttachment, XmATTACH_FORM,
458 XtVaGetValues(p->gap2_insert_label,
459 XmNwidth, &insert_label_width,
462 xstr = XmStringCreateLocalized(catgets(c->DT_catd, 1, 343, "Change"));
465 * If label is greater than the allocated space for the
466 * label, then we use a 0 offset.
469 label_offset = MAX_LABEL_SPACE;
470 label_offset -= insert_label_width;
472 label_offset = MAX_LABEL_SPACE - insert_label_width;
474 if (label_offset < 0) label_offset = 0;
476 p->gap2_change_label =
477 XtVaCreateWidget("gap2_change_label",
480 XmNlabelString, xstr,
481 XmNleftAttachment, XmATTACH_WIDGET,
482 XmNleftWidget, p->gap2_insert_label,
483 XmNleftOffset, label_offset,
484 XmNtopAttachment, XmATTACH_FORM,
490 XtVaGetValues(p->gap2_change_label,
491 XmNwidth, &change_label_width,
494 xstr_empty = XmStringCreateLocalized("");
495 p->gap2_public_tog[GAP_VIEW] =
496 XtVaCreateWidget("gap2_public_view_tog",
497 xmToggleButtonGadgetClass,
499 XmNlabelString, xstr_empty,
500 XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET,
501 XmNleftWidget, p->gap2_view_label,
502 XmNtopAttachment, XmATTACH_WIDGET,
503 XmNtopWidget, p->gap2_view_label,
504 XmNtopOffset, TOG_GAP,
505 XmNindicatorSize, INDICATOR_SIZE,
508 XtVaGetValues(p->gap2_public_tog[GAP_VIEW],
509 XmNwidth, &tog_width,
513 * Center the toggle item under the label above it.
515 XtVaSetValues(p->gap2_public_tog[GAP_VIEW],
516 XmNleftOffset, view_label_width/2 -
517 (int)(tog_width * 3)/8,
520 p->gap2_public_tog[GAP_INSERT] =
521 XtVaCreateWidget("gap2_public_insert_tog",
522 xmToggleButtonGadgetClass,
524 XmNlabelString, xstr_empty,
525 XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET,
526 XmNleftWidget, p->gap2_insert_label,
527 XmNleftOffset, insert_label_width/2 -
528 (int)(tog_width * 3)/8,
529 XmNtopAttachment, XmATTACH_WIDGET,
530 XmNtopWidget, p->gap2_insert_label,
531 XmNtopOffset, TOG_GAP,
532 XmNindicatorSize, INDICATOR_SIZE,
535 p->gap2_public_tog[GAP_CHANGE] =
536 XtVaCreateWidget("gap2_public_change_tog",
537 xmToggleButtonGadgetClass,
539 XmNlabelString, xstr_empty,
540 XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET,
541 XmNleftWidget, p->gap2_change_label,
542 XmNleftOffset, change_label_width/2 -
543 (int)(tog_width * 3)/8,
544 XmNtopAttachment, XmATTACH_WIDGET,
545 XmNtopWidget, p->gap2_change_label,
546 XmNtopOffset, TOG_GAP,
547 XmNindicatorSize, INDICATOR_SIZE,
550 p->gap2_semi_tog[GAP_VIEW] =
551 XtVaCreateWidget("gap2_semi_view_tog",
552 xmToggleButtonGadgetClass,
554 XmNlabelString, xstr_empty,
555 XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET,
556 XmNleftWidget, p->gap2_public_tog[GAP_VIEW],
557 XmNtopAttachment, XmATTACH_WIDGET,
558 XmNtopWidget, p->gap2_public_tog[GAP_VIEW],
559 XmNtopOffset, TOG_GAP,
560 XmNindicatorSize, INDICATOR_SIZE,
563 p->gap2_semi_tog[GAP_INSERT] =
564 XtVaCreateWidget("gap2_semi_insert_tog",
565 xmToggleButtonGadgetClass,
567 XmNlabelString, xstr_empty,
568 XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET,
569 XmNleftWidget, p->gap2_public_tog[GAP_INSERT],
570 XmNtopAttachment, XmATTACH_WIDGET,
571 XmNtopWidget, p->gap2_public_tog[GAP_INSERT],
572 XmNtopOffset, TOG_GAP,
573 XmNindicatorSize, INDICATOR_SIZE,
576 p->gap2_semi_tog[GAP_CHANGE] =
577 XtVaCreateWidget("gap2_semi_change_tog",
578 xmToggleButtonGadgetClass,
580 XmNlabelString, xstr_empty,
581 XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET,
582 XmNleftWidget, p->gap2_public_tog[GAP_CHANGE],
583 XmNtopAttachment, XmATTACH_WIDGET,
584 XmNtopWidget, p->gap2_public_tog[GAP_CHANGE],
585 XmNtopOffset, TOG_GAP,
586 XmNindicatorSize, INDICATOR_SIZE,
589 p->gap2_private_tog[GAP_VIEW] =
590 XtVaCreateWidget("gap2_private_view_tog",
591 xmToggleButtonGadgetClass,
593 XmNlabelString, xstr_empty,
594 XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET,
595 XmNleftWidget, p->gap2_semi_tog[GAP_VIEW],
596 XmNtopAttachment, XmATTACH_WIDGET,
597 XmNtopWidget, p->gap2_semi_tog[GAP_VIEW],
598 XmNtopOffset, TOG_GAP,
599 XmNindicatorSize, INDICATOR_SIZE,
602 p->gap2_private_tog[GAP_INSERT] =
603 XtVaCreateWidget("gap2_private_insert_tog",
604 xmToggleButtonGadgetClass,
606 XmNlabelString, xstr_empty,
607 XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET,
608 XmNleftWidget, p->gap2_semi_tog[GAP_INSERT],
609 XmNtopAttachment, XmATTACH_WIDGET,
610 XmNtopWidget, p->gap2_semi_tog[GAP_INSERT],
611 XmNtopOffset, TOG_GAP,
612 XmNindicatorSize, INDICATOR_SIZE,
615 p->gap2_private_tog[GAP_CHANGE] =
616 XtVaCreateWidget("gap2_private_change_tog",
617 xmToggleButtonGadgetClass,
619 XmNlabelString, xstr_empty,
620 XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET,
621 XmNleftWidget, p->gap2_semi_tog[GAP_CHANGE],
622 XmNtopAttachment, XmATTACH_WIDGET,
623 XmNtopWidget, p->gap2_semi_tog[GAP_CHANGE],
624 XmNtopOffset, TOG_GAP,
625 XmNindicatorSize, INDICATOR_SIZE,
628 XmStringFree (xstr_empty);
630 XtVaSetValues(p->gap2_public_label,
631 XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET,
632 XmNtopWidget, p->gap2_public_tog[GAP_VIEW],
633 XmNrightAttachment, XmATTACH_WIDGET,
634 XmNrightWidget, p->gap2_public_tog[GAP_VIEW],
635 XmNrightOffset, 2 * GAP,
638 XtVaSetValues(p->gap2_semi_label,
639 XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET,
640 XmNtopWidget, p->gap2_semi_tog[GAP_VIEW],
641 XmNrightAttachment, XmATTACH_WIDGET,
642 XmNrightWidget, p->gap2_public_tog[GAP_VIEW],
643 XmNrightOffset, 2 * GAP,
646 XtVaSetValues(p->gap2_private_label,
647 XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET,
648 XmNtopWidget, p->gap2_private_tog[GAP_VIEW],
649 XmNrightAttachment, XmATTACH_WIDGET,
650 XmNrightWidget, p->gap2_public_tog[GAP_VIEW],
651 XmNrightOffset, 2 * GAP,
652 XmNbottomAttachment, XmATTACH_FORM,
653 XmNbottomOffset, GAP,
656 /* Margin to the right of the Change label */
657 XtVaSetValues(p->gap2_change_label,
661 ManageChildren(perm_form);
668 XtPointer client_data,
669 XtPointer callback_struct)
671 Calendar *c = calendar;
672 Props_pu *p = (Props_pu *)client_data;
673 CSA_flags access_rights;
674 CSA_access_rights *access_entry,
680 * Get the necessary strings from the UI.
682 if (!(access_rights = p_gap_convert_permissions(p)))
685 /* Get the user's name and host */
686 if (!(user_name = (char *)XmTextGetString(p->gap2_user_text)) ||
688 char *title = XtNewString(catgets(c->DT_catd, 1, 750,
689 "Calendar : Error - Access List and Permissions"));
690 char *text = XtNewString(catgets(c->DT_catd, 1, 749,
691 "Name and Access Rights must be set to add an item to the Access List."));
692 char *ident1 = XtNewString(catgets(c->DT_catd, 1, 95,
696 dialog_popup(p->frame,
699 BUTTON_IDENT, 1, ident1,
700 BUTTON_HELP, ACCESS_RIGHTS_ERROR_HELP,
701 DIALOG_IMAGE, p->xm_error_pixmap,
709 xmstr = XmStringCreateLocalized(user_name);
711 /* See if the item is already in the list */
713 int list_pos = XmListItemPos(p->gap_access_list, xmstr);
716 XmListSelectPos(p->gap_access_list, list_pos, False);
717 XmListSetBottomPos(p->gap_access_list, list_pos);
718 XtSetSensitive(p->gap2_change_button, True);
719 XtSetSensitive(p->gap2_delete_button, True);
721 /* Does the user want us to change an existing item? */
722 if (!ChangeExistingGAPEntry(p)) {
729 /* Find the entry and change the rights. */
730 access_list_ptr = p->gap_list;
732 if (!strcmp(access_list_ptr->user->user_name,
734 access_list_ptr->rights = access_rights;
735 p->changed_flag = True;
741 } while (access_list_ptr = access_list_ptr->next);
745 /* Create a new access entry and add it to the end of the list */
747 (CSA_access_rights *)ckalloc(sizeof(CSA_access_rights));
749 (CSA_calendar_user *)ckalloc(sizeof(CSA_calendar_user));
750 access_entry->user->user_name = cm_strdup(user_name);
751 access_entry->rights = access_rights;
752 access_entry->next = NULL;
755 p->gap_list = access_entry;
757 access_list_ptr = p->gap_list;
758 while (access_list_ptr->next)
759 access_list_ptr = access_list_ptr->next;
760 access_list_ptr->next = access_entry;
763 XmListAddItem(p->gap_access_list, xmstr, 0);
764 p->changed_flag = True;
771 ChangeExistingGAPEntry(
774 Calendar *c = calendar;
777 char *title = XtNewString(catgets(c->DT_catd, 1, 1078,
778 "Calendar : Access List and Permissions - Add"));
779 char *text = XtNewString(catgets(c->DT_catd, 1, 751,
780 "This entry already exists in the Access List. Do you wish to change it?"));
781 char *ident1 = XtNewString(catgets(c->DT_catd, 1, 343,
783 char *ident2 = XtNewString(catgets(c->DT_catd, 1, 923,
786 answer = dialog_popup(p->frame,
789 BUTTON_IDENT, 2, ident2,
790 BUTTON_IDENT, 1, ident1,
805 XtPointer client_data,
806 XtPointer callback_struct)
808 Calendar *c = calendar;
809 Props_pu *p = (Props_pu *)client_data;
810 CSA_access_list step = p->gap_list,
812 int *item_list = NULL,
814 CSA_flags access_rights;
815 CSA_access_rights *access_entry;
820 /* An item to change must be selected in the access list */
821 if (!XmListGetSelectedPos(p->gap2_access_list, &item_list, &item_cnt)) {
822 char *title = XtNewString(catgets(c->DT_catd, 1, 750,
823 "Calendar : Error - Access List and Permissions"));
824 char *text = XtNewString(catgets(c->DT_catd, 1, 408,
825 "Please select a name first. "));
826 char *ident1 = XtNewString(catgets(c->DT_catd, 1, 95, "Continue"));
827 dialog_popup(p->frame,
830 BUTTON_IDENT, 1, ident1,
831 DIALOG_IMAGE, p->xm_error_pixmap,
840 * Get the necessary strings from the UI.
842 if (!(access_rights = p_gap_convert_permissions(p)))
845 /* Get the user's name and host */
846 if (!(user_name = (char *)XmTextGetString(p->gap2_user_text)) ||
848 char *title = XtNewString(catgets(c->DT_catd, 1, 750,
849 "Calendar : Error - Access List and Permissions"));
850 char *text = XtNewString(catgets(c->DT_catd, 1, 756,
851 "Name and Access rights must be set to change an item in the Access List"));
852 char *ident1 = XtNewString(catgets(c->DT_catd, 1, 95, "Continue"));
855 dialog_popup(p->frame,
858 BUTTON_IDENT, 1, ident1,
859 DIALOG_IMAGE, p->xm_error_pixmap,
867 xmstr = XmStringCreateLocalized(user_name);
869 /* Create a new access entry and add it to the end of the list */
871 (CSA_access_rights *)ckalloc(sizeof(CSA_access_rights));
873 (CSA_calendar_user *)ckalloc(sizeof(CSA_calendar_user));
874 access_entry->user->user_name = cm_strdup(user_name);
875 access_entry->rights = access_rights;
876 access_entry->next = NULL;
879 * Find and change the Access_Entry/name from the list.
882 while(item_cnt < *item_list) {
889 last->next = access_entry;
891 p->gap_list = access_entry;
893 access_entry->next = step->next;
898 XmListReplaceItemsPos(p->gap2_access_list, &xmstr, 1, *item_list);
900 p->changed_flag = True;
904 XtFree((XtPointer)item_list);