1 /*******************************************************************************
5 ** $XConsortium: reminders.c /main/7 1996/08/06 11:41:54 barstow $
7 ** RESTRICTED CONFIDENTIAL INFORMATION:
9 ** The information in this document is subject to special
10 ** restrictions in a confidential disclosure agreement between
11 ** HP, IBM, Sun, USL, SCO and Univel. Do not distribute this
12 ** document outside HP, IBM, Sun, USL, SCO, or Univel without
13 ** Sun's specific written approval. This document and all copies
14 ** and derivative works thereof must be returned or destroyed at
17 ** Copyright 1993 Sun Microsystems, Inc. All rights reserved.
19 *******************************************************************************/
22 * (c) Copyright 1993, 1994 Hewlett-Packard Company *
23 * (c) Copyright 1993, 1994 International Business Machines Corp. *
24 * (c) Copyright 1993, 1994 Sun Microsystems, Inc. *
25 * (c) Copyright 1993, 1994 Novell, Inc. *
28 #include <EUSCompat.h>
33 #include <sys/param.h>
36 #include <Xm/LabelG.h>
37 #include <Xm/RowColumn.h>
39 #include <Xm/ToggleBG.h>
40 #include <Xm/ToggleB.h>
41 #include "reminders.h"
47 extern int _csa_duration_to_iso8601(int, char *);
48 extern int _csa_iso8601_to_duration(char *, int*);
50 /*******************************************************************************
52 ** Static functions local to reminders.c only
54 *******************************************************************************/
56 static Reminder_val_op
57 r_validate_advance(char *advance_string) {
59 char *c_p = advance_string;
61 Boolean scanned_sign = False;
63 /* crush out leading white space for the name
64 comparison/insert process */
66 while ((*c_p == ' ') || (*c_p == '\t'))
69 /* compress off trailing whitespace */
74 while ((end_ptr > c_p) &&
75 ((*(end_ptr - 1) == ' ') || (*(end_ptr - 1) == '\t')))
82 return(ADVANCE_BLANK);
85 if (embedded_blank(c_p)) {
86 return(ADVANCE_CONTAINS_BLANK);
90 if (isdigit(*c_p) || ((*c_p == '-') && (scanned_sign == False))) {
91 if ((*c_p == '-') && (scanned_sign == False))
95 return(ADVANCE_NONNUMERIC);
100 return(REMINDERS_OK);
103 static Reminder_val_op
104 r_get_bfpm_vals(Widget toggle, Widget text, Reminders_val *val,
105 Boolean convert_to_secs) {
107 Time_scope_menu_op scope;
108 Reminder_val_op status;
110 if (!XmToggleButtonGetState(toggle)) {
111 val->selected = False;
113 return(REMINDERS_OK);
116 val->selected = True;
117 cval = XmTextGetString(text);
119 if ((status = r_validate_advance(cval)) != REMINDERS_OK)
122 val->scope_val = atoi(cval);
128 val->scope_val = days_to_seconds(val->scope_val);
132 val->scope_val = hours_to_seconds(val->scope_val);
137 val->scope_val = minutes_to_seconds(val->scope_val);
141 return(REMINDERS_OK);
145 r_get_mailto_val(Reminders *r) {
148 c = XmTextGetString(r->mailto_text);
150 cm_strcpy(r->mailto_val, c);
152 cm_strcpy(r->mailto_val, cm_get_credentials());
162 Boolean compute_best_fit)
165 Calendar *c = calendar;
168 WidgetList option_items;
169 Time_scope_menu_op scope = val->scope;
173 if (!XtIsManaged(toggle))
177 XmNsubMenuId, &submenu,
180 XtVaGetValues(submenu,
181 XmNchildren, &option_items,
185 if (!val->selected) {
186 XmToggleButtonSetState(toggle, False, True);
187 XtVaSetValues(text, XmNvalue, "\0",
192 xmstr = XmStringCreateLocalized(
193 catgets( calendar->DT_catd, 1, 877, time_scope_str(scope) ) );
196 xmstr = XmStringCreateLocalized(
197 catgets( calendar->DT_catd, 1, 878, time_scope_str(scope) ) );
200 xmstr = XmStringCreateLocalized(
201 catgets( calendar->DT_catd, 1, 879, time_scope_str(scope) ) );
204 xmstr = XmStringCreateLocalized(time_scope_str(scope));
206 XtVaSetValues(XmOptionButtonGadget(menu), XmNlabelString, xmstr,
213 if (compute_best_fit) {
214 if (val->scope_val % daysec == 0) {
215 val->scope = TIME_DAYS;
216 sprintf(buf, "%d", seconds_to_days(val->scope_val));
217 } else if (val->scope_val % hrsec == 0) {
218 val->scope = TIME_HRS;
219 sprintf(buf, "%d", seconds_to_hours(val->scope_val));
221 val->scope = TIME_MINS;
222 sprintf(buf, "%d", seconds_to_minutes(val->scope_val));
225 sprintf(buf, "%d", val->scope_val);
229 xmstr = XmStringCreateLocalized(
230 catgets( calendar->DT_catd, 1, 877, time_scope_str(scope) ) );
233 xmstr = XmStringCreateLocalized(
234 catgets( calendar->DT_catd, 1, 878, time_scope_str(scope) ) );
237 xmstr = XmStringCreateLocalized(
238 catgets( calendar->DT_catd, 1, 879, time_scope_str(scope) ) );
241 xmstr = XmStringCreateLocalized(time_scope_str(scope));
243 XtVaSetValues(XmOptionButtonGadget(menu), XmNlabelString, xmstr,
247 XmToggleButtonSetState(toggle, True, True);
248 XtVaSetValues(text, XmNvalue, buf,
253 r_set_mailto_val(Reminders *r) {
254 XtVaSetValues(r->mailto_text, XmNvalue, r->mailto_val,
259 ** The function ensures the user data is set properly for the time scope
260 ** menus. This way, when the r_get_bfpm_vals function is called, it knows
261 ** how it should convert the value found in the text field.
264 r_scope_menu_proc(Widget item, XtPointer client_data, XtPointer cbs) {
265 Reminders_val *val = (Reminders_val *)client_data;
266 Time_scope_menu_op scope;
268 XtVaGetValues(item, XmNuserData, &val->scope,
273 ** Function sets the alarm text fields and menus sensitive/insensitive
274 ** depending on the state of the toggle button.
277 r_alarm_toggle_proc(Widget toggle_w, XtPointer client_data, XtPointer cbs) {
279 Boolean status = XmToggleButtonGetState(toggle_w);
280 Reminders *r = (Reminders *)client_data;
281 Widget text_w, menu_w;
286 if (toggle_w == r->beep_toggle) {
287 XtVaSetValues(r->beep_text, XmNsensitive, status,
289 XtVaSetValues(XmOptionButtonGadget(r->beep_menu),
290 XmNsensitive, status,
292 } else if (toggle_w == r->flash_toggle) {
293 XtVaSetValues(r->flash_text, XmNsensitive, status,
295 XtVaSetValues(XmOptionButtonGadget(r->flash_menu),
296 XmNsensitive, status,
298 } else if (toggle_w == r->popup_toggle) {
299 XtVaSetValues(r->popup_text, XmNsensitive, status,
301 XtVaSetValues(XmOptionButtonGadget(r->popup_menu),
302 XmNsensitive, status,
304 } else if (toggle_w == r->mail_toggle) {
305 XtVaSetValues(r->mail_text, XmNsensitive, status,
307 XtVaSetValues(XmOptionButtonGadget(r->mail_menu),
308 XmNsensitive, status,
310 XtVaSetValues(r->mailto_label, XmNsensitive, status,
312 XtVaSetValues(r->mailto_text, XmNsensitive, status,
317 /*******************************************************************************
319 ** External functions
321 *******************************************************************************/
323 build_reminders(Reminders *r, Calendar *c, Widget parent) {
325 Widget widest_toggle;
326 Dimension widest, highest;
328 Dimension _toText, _toOption;
335 ** Base form and label
337 r->bfpm_form_mgr = XtVaCreateWidget("bfpm_form_mgr",
338 xmFormWidgetClass, parent,
339 XmNautoUnmanage, False,
342 xmstr = XmStringCreateLocalized(
343 catgets(c->DT_catd, 1, 985, "Reminders"));
344 r->alarm_label = XtVaCreateWidget("Reminders",
345 xmLabelGadgetClass, r->bfpm_form_mgr,
346 XmNlabelString, xmstr,
347 XmNtopAttachment, XmATTACH_FORM,
349 XmNleftAttachment, XmATTACH_FORM,
354 /* Create the 4 toggle items to see which one is the longest */
356 xmstr = XmStringCreateLocalized(
357 catgets(c->DT_catd, 1, 986, "Beep"));
358 r->beep_toggle = XtVaCreateWidget("Beep",
359 xmToggleButtonGadgetClass, r->bfpm_form_mgr,
360 XmNlabelString, xmstr,
361 XmNnavigationType, XmTAB_GROUP,
366 xmstr = XmStringCreateLocalized(
367 catgets(c->DT_catd, 1, 987, "Flash"));
368 r->flash_toggle = XtVaCreateWidget("Flash",
369 xmToggleButtonGadgetClass, r->bfpm_form_mgr,
370 XmNlabelString, xmstr,
371 XmNnavigationType, XmTAB_GROUP,
376 xmstr = XmStringCreateLocalized(
377 catgets(c->DT_catd, 1, 988, "Popup"));
378 r->popup_toggle = XtVaCreateWidget("Popup",
379 xmToggleButtonGadgetClass, r->bfpm_form_mgr,
380 XmNlabelString, xmstr,
381 XmNnavigationType, XmTAB_GROUP,
386 xmstr = XmStringCreateLocalized(
387 catgets(c->DT_catd, 1, 989, "Mail"));
388 r->mail_toggle = XtVaCreateWidget("Mail",
389 xmToggleButtonGadgetClass, r->bfpm_form_mgr,
390 XmNlabelString, xmstr,
391 XmNnavigationType, XmTAB_GROUP,
396 xmstr = XmStringCreateLocalized(
397 catgets(c->DT_catd, 1, 990, "Mail To:" ) );
398 r->mailto_label = XtVaCreateManagedWidget("MailTo",
399 xmLabelGadgetClass, r->bfpm_form_mgr,
400 XmNlabelString, xmstr,
407 ** Beep toggle, text, and menu
409 XtAddCallback(r->beep_toggle, XmNvalueChangedCallback,
410 r_alarm_toggle_proc, r);
412 r->beep_text = XtVaCreateWidget("beep_text",
413 xmTextWidgetClass, r->bfpm_form_mgr,
414 XmNeditMode, XmSINGLE_LINE_EDIT,
416 XmNmaxLength, REMINDER_SCOPE_LEN - 1,
419 r->beep_menu = (Widget)create_time_scope_menu(r->bfpm_form_mgr,
420 NULL, r_scope_menu_proc, (XtPointer)&r->beep_val);
421 XtVaSetValues(r->beep_menu,
422 XmNnavigationType, XmTAB_GROUP,
426 ** Flash toggle, text, and menu
428 XtAddCallback(r->flash_toggle, XmNvalueChangedCallback,
429 r_alarm_toggle_proc, r);
431 r->flash_text = XtVaCreateWidget("flash_text",
432 xmTextWidgetClass, r->bfpm_form_mgr,
433 XmNeditMode, XmSINGLE_LINE_EDIT,
435 XmNmaxLength, REMINDER_SCOPE_LEN - 1,
438 r->flash_menu = (Widget)create_time_scope_menu(r->bfpm_form_mgr,
439 NULL, r_scope_menu_proc, (XtPointer)&r->flash_val);
440 XtVaSetValues(r->flash_menu,
441 XmNnavigationType, XmTAB_GROUP,
445 ** Popup toggle, text, and menu
447 XtAddCallback(r->popup_toggle, XmNvalueChangedCallback,
448 r_alarm_toggle_proc, r);
450 r->popup_text = XtVaCreateWidget("popup_text",
451 xmTextWidgetClass, r->bfpm_form_mgr,
452 XmNeditMode, XmSINGLE_LINE_EDIT,
454 XmNmaxLength, REMINDER_SCOPE_LEN - 1,
457 r->popup_menu = (Widget)create_time_scope_menu(r->bfpm_form_mgr,
458 NULL, r_scope_menu_proc, (XtPointer)&r->popup_val);
459 XtVaSetValues(r->popup_menu,
460 XmNnavigationType, XmTAB_GROUP,
464 ** Mail toggle, text, and menu
466 XtAddCallback(r->mail_toggle, XmNvalueChangedCallback,
467 r_alarm_toggle_proc, r);
469 r->mail_text = XtVaCreateWidget("mail_text",
470 xmTextWidgetClass, r->bfpm_form_mgr,
471 XmNeditMode, XmSINGLE_LINE_EDIT,
473 XmNmaxLength, REMINDER_SCOPE_LEN - 1,
476 r->mail_menu = (Widget)create_time_scope_menu(r->bfpm_form_mgr,
477 NULL, r_scope_menu_proc, (XtPointer)&r->mail_val);
478 XtVaSetValues(r->mail_menu,
479 XmNnavigationType, XmTAB_GROUP,
485 r->mailto_text = XtVaCreateWidget("mailto_text",
486 xmTextWidgetClass, r->bfpm_form_mgr,
487 XmNeditMode, XmSINGLE_LINE_EDIT,
489 XmNmaxLength, MAILTO_LEN - 1,
492 * Here, we do a layout.
495 _i18n_WidestWidget( 5, &prev, &widest, r->beep_toggle, r->flash_toggle,
496 r->popup_toggle, r->mail_toggle, r->mailto_label );
497 _toText = 5 + 10 + widest + 10;
499 _i18n_WidestWidget( 4, &prev, &widest, r->beep_text, r->flash_text,
500 r->popup_text, r->mail_text );
501 _toOption = _toText + widest + 5;
504 * r->beep_toggle,r->beep_text,r->beep_menu
506 prev = r->alarm_label;
507 _i18n_HighestWidgetAdjust( 3, &curr, &highest, r->beep_toggle,
508 r->beep_text, r->beep_menu );
510 XmNtopAttachment, XmATTACH_WIDGET,
514 XtVaSetValues( r->beep_toggle,
515 XmNleftAttachment, XmATTACH_FORM,
516 XmNleftOffset, 5 + 10,
518 XtVaSetValues( r->beep_text,
519 XmNleftAttachment, XmATTACH_FORM,
520 XmNleftOffset, _toText,
522 XtVaSetValues( r->beep_menu,
523 XmNleftAttachment, XmATTACH_FORM,
524 XmNleftOffset, _toOption,
529 * r->flash_toggle,r->flash_text,r->flash_menu
531 _i18n_HighestWidgetAdjust( 3, &curr, &highest, r->flash_toggle,
532 r->flash_text, r->flash_menu );
534 XmNtopAttachment, XmATTACH_WIDGET,
538 XtVaSetValues( r->flash_toggle,
539 XmNleftAttachment, XmATTACH_FORM,
540 XmNleftOffset, 5 + 10,
542 XtVaSetValues( r->flash_text,
543 XmNleftAttachment, XmATTACH_FORM,
544 XmNleftOffset, _toText,
546 XtVaSetValues( r->flash_menu,
547 XmNleftAttachment, XmATTACH_FORM,
548 XmNleftOffset, _toOption,
553 * r->popup_toggle,r->popup_text,r->popup_menu
555 _i18n_HighestWidgetAdjust( 3, &curr, &highest, r->popup_toggle,
556 r->popup_text, r->popup_menu );
558 XmNtopAttachment, XmATTACH_WIDGET,
562 XtVaSetValues( r->popup_toggle,
563 XmNleftAttachment, XmATTACH_FORM,
564 XmNleftOffset, 5 + 10,
566 XtVaSetValues( r->popup_text,
567 XmNleftAttachment, XmATTACH_FORM,
568 XmNleftOffset, _toText,
570 XtVaSetValues( r->popup_menu,
571 XmNleftAttachment, XmATTACH_FORM,
572 XmNleftOffset, _toOption,
577 * r->mail_toggle,r->mail_text,r->mail_menu
579 _i18n_HighestWidgetAdjust( 3, &curr, &highest, r->mail_toggle,
580 r->mail_text, r->mail_menu );
582 XmNtopAttachment, XmATTACH_WIDGET,
586 XtVaSetValues( r->mail_toggle,
587 XmNleftAttachment, XmATTACH_FORM,
588 XmNleftOffset, 5 + 10,
590 XtVaSetValues( r->mail_text,
591 XmNleftAttachment, XmATTACH_FORM,
592 XmNleftOffset, _toText,
594 XtVaSetValues( r->mail_menu,
595 XmNleftAttachment, XmATTACH_FORM,
596 XmNleftOffset, _toOption,
601 * r->mailto_label,r->mailto_text
603 _i18n_HighestWidgetAdjust( 2, &curr, &highest, r->mailto_label,
606 XmNtopAttachment, XmATTACH_WIDGET,
610 XtVaSetValues( r->mailto_label,
611 XmNleftAttachment, XmATTACH_FORM,
612 XmNleftOffset, 5 + 10,
614 XtVaSetValues( r->mailto_text,
615 XmNleftAttachment, XmATTACH_FORM,
616 XmNleftOffset, _toText,
620 extern Reminder_val_op
621 get_reminders_vals(Reminders *r, Boolean convert_to_secs) {
623 Reminder_val_op status;
625 if ((status = r_get_bfpm_vals(r->beep_toggle, r->beep_text, &r->beep_val,
626 convert_to_secs)) != REMINDERS_OK)
629 if ((status = r_get_bfpm_vals(r->flash_toggle, r->flash_text, &r->flash_val,
630 convert_to_secs)) != REMINDERS_OK)
633 if ((status = r_get_bfpm_vals(r->mail_toggle, r->mail_text, &r->mail_val,
634 convert_to_secs)) != REMINDERS_OK)
637 if ((status = r_get_bfpm_vals(r->popup_toggle, r->popup_text, &r->popup_val,
638 convert_to_secs)) != REMINDERS_OK)
643 return(REMINDERS_OK);
647 reminder_err_msg(Widget frame, char *name, Reminder_val_op op, Pixmap p)
649 Calendar *c = calendar;
650 char buf[MAXNAMELEN], buf2[MAXNAMELEN * 2];
656 sprintf(buf, catgets(c->DT_catd, 1, 775, "You must specify a reminder advance\nOperation was cancelled. Calendar"));
658 case ADVANCE_CONTAINS_BLANK:
659 sprintf(buf, catgets(c->DT_catd, 1, 776, "A reminder advance may not contain an embedded blank\nOperation was cancelled. Calendar"));
661 case ADVANCE_NONNUMERIC:
662 sprintf(buf, catgets(c->DT_catd, 1, 777, "Advance values must be a number with an optional sign\nOperation was cancelled. Calendar"));
670 sprintf(buf2, "%s %s", buf, name);
671 title = XtNewString(catgets(c->DT_catd, 1, 364,
672 "Calendar : Error - Editor"));
673 ident1 = XtNewString(catgets(c->DT_catd, 1, 95, "Continue"));
674 dialog_popup(frame, DIALOG_TITLE, title,
676 BUTTON_IDENT, 1, ident1,
677 BUTTON_HELP, ADVANCE_ERROR_HELP,
686 ** This function will consume form values and stuff them into an appointment.
689 reminders_form_to_appt(Reminders *r, Dtcm_appointment *appt, char *name) {
691 Reminder_val_op status;
692 Props_pu *pu = (Props_pu *)r->cal->properties_pu;
694 if (r->bfpm_form_mgr) {
695 if ((status = get_reminders_vals(r, True)) != REMINDERS_OK) {
696 reminder_err_msg(r->parent, name, status,
697 pu->xm_error_pixmap);
702 if (!r->beep_val.selected) {
703 free(appt->beep->value);
704 appt->beep->value = NULL;
706 appt->beep->value->item.reminder_value->lead_time = (char *) malloc(BUFSIZ);
707 _csa_duration_to_iso8601(r->beep_val.scope_val, appt->beep->value->item.reminder_value->lead_time);
708 appt->beep->value->item.reminder_value->reminder_data.data = NULL;
709 appt->beep->value->item.reminder_value->reminder_data.size = 0;
712 if (!r->flash_val.selected) {
713 free(appt->flash->value);
714 appt->flash->value = NULL;
716 appt->flash->value->item.reminder_value->lead_time = (char *) malloc(BUFSIZ);
717 _csa_duration_to_iso8601(r->flash_val.scope_val, appt->flash->value->item.reminder_value->lead_time);
718 appt->flash->value->item.reminder_value->reminder_data.data = NULL;
719 appt->flash->value->item.reminder_value->reminder_data.size = 0;
722 if (!r->popup_val.selected) {
723 free(appt->popup->value);
724 appt->popup->value = NULL;
726 appt->popup->value->item.reminder_value->lead_time = (char *) malloc(BUFSIZ);
727 _csa_duration_to_iso8601(r->popup_val.scope_val, appt->popup->value->item.reminder_value->lead_time);
728 appt->popup->value->item.reminder_value->reminder_data.data = NULL;
729 appt->popup->value->item.reminder_value->reminder_data.size = 0;
732 if (!r->mail_val.selected) {
733 free(appt->mail->value);
734 appt->mail->value = NULL;
736 appt->mail->value->item.reminder_value->lead_time = (char *) malloc(BUFSIZ);
737 _csa_duration_to_iso8601(r->mail_val.scope_val, appt->mail->value->item.reminder_value->lead_time);
738 appt->mail->value->item.reminder_value->reminder_data.data = (CSA_uint8 *) cm_strdup(r->mailto_val);
739 appt->mail->value->item.reminder_value->reminder_data.size = strlen(r->mailto_val);
746 ** This function will take appointment values and stuff them into a form.
749 reminders_appt_to_form(Reminders *r, CSA_entry_handle entry) {
751 CSA_return_code stat;
752 Dtcm_appointment *appt;
754 appt = allocate_appt_struct(appt_read,
755 r->cal->general->version,
756 CSA_ENTRY_ATTR_AUDIO_REMINDER_I,
757 CSA_ENTRY_ATTR_FLASHING_REMINDER_I,
758 CSA_ENTRY_ATTR_POPUP_REMINDER_I,
759 CSA_ENTRY_ATTR_MAIL_REMINDER_I,
761 stat = query_appt_struct(r->cal->cal_handle, entry, appt);
762 backend_err_msg(r->cal->frame, r->cal->view->current_calendar, stat,
763 ((Props_pu *)r->cal->properties_pu)->xm_error_pixmap);
764 if (stat != CSA_SUCCESS) {
765 free_appt_struct(&appt);
769 ret_val = reminders_attrs_to_form(r, appt);
770 free_appt_struct(&appt);
776 reminders_attrs_to_form(Reminders *r, Dtcm_appointment *appt) {
778 if (appt->beep && appt->beep->value) {
779 r->beep_val.selected = True;
780 _csa_iso8601_to_duration(appt->beep->value->item.reminder_value->lead_time, &r->beep_val.scope_val);
782 r->beep_val.selected = False;
783 r->beep_val.scope_val = -1;
786 if (appt->flash && appt->flash->value) {
787 r->flash_val.selected = True;
788 _csa_iso8601_to_duration(appt->flash->value->item.reminder_value->lead_time, &r->flash_val.scope_val);
790 r->flash_val.selected = False;
791 r->flash_val.scope_val = -1;
794 if (appt->popup && appt->popup->value) {
795 r->popup_val.selected = True;
796 _csa_iso8601_to_duration(appt->popup->value->item.reminder_value->lead_time, &r->popup_val.scope_val);;
798 r->popup_val.selected = False;
799 r->popup_val.scope_val = -1;
801 if (appt->mail && appt->mail->value) {
802 r->mail_val.selected = True;
803 _csa_iso8601_to_duration(appt->mail->value->item.reminder_value->lead_time, &r->mail_val.scope_val);
804 memset(r->mailto_val, NULL, MAILTO_LEN);
805 strncpy(r->mailto_val, (char *) appt->mail->value->item.reminder_value->reminder_data.data, appt->mail->value->item.reminder_value->reminder_data.size);
807 r->mail_val.selected = False;
808 r->mail_val.scope_val = -1;
809 r->mailto_val[0] = '\0';
812 set_reminders_vals(r, True);
818 set_reminders_defaults(Reminders *r) {
819 Props *p = (Props *)r->cal->properties;
823 val->selected = convert_boolean_str(get_char_prop(p, CP_BEEPON));
824 val->scope = convert_time_scope_str(get_char_prop(p, CP_BEEPUNIT));
825 val->scope_val = get_int_prop(p, CP_BEEPADV);
828 val->selected = convert_boolean_str(get_char_prop(p, CP_FLASHON));
829 val->scope = convert_time_scope_str(get_char_prop(p, CP_FLASHUNIT));
830 val->scope_val = get_int_prop(p, CP_FLASHADV);
833 val->selected = convert_boolean_str(get_char_prop(p, CP_OPENON));
834 val->scope = convert_time_scope_str(get_char_prop(p, CP_OPENUNIT));
835 val->scope_val = get_int_prop(p, CP_OPENADV);
838 val->selected = convert_boolean_str(get_char_prop(p, CP_MAILON));
839 val->scope = convert_time_scope_str(get_char_prop(p, CP_MAILUNIT));
840 val->scope_val = get_int_prop(p, CP_MAILADV);
841 strcpy(r->mailto_val, get_char_prop(p, CP_MAILTO));
843 set_reminders_vals(r, False);
847 set_reminders_vals(Reminders *r, Boolean compute_best_fit) {
849 r_set_bfpm_vals(r->beep_toggle, r->beep_text, r->beep_menu,
850 &r->beep_val, compute_best_fit);
851 r_set_bfpm_vals(r->flash_toggle, r->flash_text, r->flash_menu,
852 &r->flash_val, compute_best_fit);
853 r_set_bfpm_vals(r->mail_toggle, r->mail_text, r->mail_menu,
854 &r->mail_val, compute_best_fit);
855 r_set_bfpm_vals(r->popup_toggle, r->popup_text, r->popup_menu,
856 &r->popup_val, compute_best_fit);
864 Time_scope_menu_op type)
868 return days_to_seconds(value);
870 return hours_to_seconds(value);
873 return minutes_to_seconds(value);
883 Props *p = (Props *)c->properties;
890 val->selected = convert_boolean_str(get_char_prop(p, CP_BEEPON));
891 val->scope = convert_time_scope_str(get_char_prop(p, CP_BEEPUNIT));
892 val->scope_val = convert_time_val(get_int_prop(p, CP_BEEPADV),
896 val->selected = convert_boolean_str(get_char_prop(p, CP_FLASHON));
897 val->scope = convert_time_scope_str(get_char_prop(p, CP_FLASHUNIT));
898 val->scope_val = convert_time_val(get_int_prop(p, CP_FLASHADV),
902 val->selected = convert_boolean_str(get_char_prop(p, CP_OPENON));
903 val->scope = convert_time_scope_str(get_char_prop(p, CP_OPENUNIT));
904 val->scope_val = convert_time_val(get_int_prop(p, CP_OPENADV),
908 val->selected = convert_boolean_str(get_char_prop(p, CP_MAILON));
909 val->scope = convert_time_scope_str(get_char_prop(p, CP_MAILUNIT));
910 val->scope_val = convert_time_val(get_int_prop(p, CP_MAILADV),
912 strcpy(r->mailto_val, get_char_prop(p, CP_MAILTO));