diff options
-rw-r--r-- | calendar/ChangeLog | 18 | ||||
-rw-r--r-- | calendar/cal-util/cal-component.c | 74 | ||||
-rw-r--r-- | calendar/cal-util/cal-component.h | 11 | ||||
-rw-r--r-- | calendar/gui/dialogs/alarm-page.glade | 2 |
4 files changed, 104 insertions, 1 deletions
diff --git a/calendar/ChangeLog b/calendar/ChangeLog index 29d6595ac6..a969c0d5b3 100644 --- a/calendar/ChangeLog +++ b/calendar/ChangeLog @@ -1,3 +1,21 @@ +2001-07-02 Federico Mena Quintero <federico@ximian.com> + + Support for repeat/duration properties in alarm components. + + * cal-util/cal-component.h (CalAlarmRepeat): New structure that + pairs the repeat/duration values of an alarm component, which must + be set both together or not set at all. + + * cal-util/cal-component.c (CalComponentAlarm): Added fields for + the repeat and duration properties. + (scan_alarm_property): Scan the DURATION and REPEAT properties. + (make_alarm): Nullify/initialize all the fields in the alarm. + (cal_component_alarm_get_repeat): New function. + (cal_component_alarm_set_repeat): New function. + + * gui/dialogs/alarm-page.glade: Changed the label of display + alarms from "Show a dialog" to "Display a message". + 2001-07-02 JP Rosevear <jpr@ximian.com> * gui/dialogs/task-details-page.c diff --git a/calendar/cal-util/cal-component.c b/calendar/cal-util/cal-component.c index 2398840a19..a9c39143f2 100644 --- a/calendar/cal-util/cal-component.c +++ b/calendar/cal-util/cal-component.c @@ -152,6 +152,8 @@ struct _CalComponentAlarm { /* Properties */ icalproperty *action; + icalproperty *duration; + icalproperty *repeat; icalproperty *trigger; }; @@ -4126,6 +4128,14 @@ scan_alarm_property (CalComponentAlarm *alarm, icalproperty *prop) alarm->action = prop; break; + case ICAL_DURATION_PROPERTY: + alarm->duration = prop; + break; + + case ICAL_REPEAT_PROPERTY: + alarm->repeat = prop; + break; + case ICAL_TRIGGER_PROPERTY: alarm->trigger = prop; break; @@ -4156,6 +4166,11 @@ make_alarm (icalcomponent *subcomp) alarm->icalcomp = subcomp; alarm->uid = NULL; + alarm->action = NULL; + alarm->duration = NULL; + alarm->repeat = NULL; + alarm->trigger = NULL; + for (prop = icalcomponent_get_first_property (subcomp, ICAL_ANY_PROPERTY); prop; prop = icalcomponent_get_next_property (subcomp, ICAL_ANY_PROPERTY)) @@ -4602,6 +4617,65 @@ cal_component_alarm_set_trigger (CalComponentAlarm *alarm, CalAlarmTrigger trigg } /** + * cal_component_alarm_get_repeat: + * @alarm: An alarm. + * @repeat: Return value for the repeat/duration properties. + * + * Queries the repeat/duration properties of an alarm. + **/ +void +cal_component_alarm_get_repeat (CalComponentAlarm *alarm, CalAlarmRepeat *repeat) +{ + g_return_if_fail (alarm != NULL); + g_return_if_fail (repeat != NULL); + + g_assert (alarm->icalcomp != NULL); + + if (!(alarm->repeat && alarm->duration)) { + repeat->repetitions = 0; + memset (&repeat->duration, 0, sizeof (repeat->duration)); + return; + } + + repeat->repetitions = icalproperty_get_repeat (alarm->repeat); + repeat->duration = icalproperty_get_duration (alarm->duration); +} + +void +cal_component_alarm_set_repeat (CalComponentAlarm *alarm, CalAlarmRepeat repeat) +{ + g_return_if_fail (alarm != NULL); + g_return_if_fail (repeat.repetitions >= 0); + + g_assert (alarm->icalcomp != NULL); + + /* Delete old properties */ + + if (alarm->repeat) { + icalcomponent_remove_property (alarm->icalcomp, alarm->repeat); + icalproperty_free (alarm->repeat); + alarm->repeat = NULL; + } + + if (alarm->duration) { + icalcomponent_remove_property (alarm->icalcomp, alarm->duration); + icalproperty_free (alarm->duration); + alarm->duration = NULL; + } + + /* Set the new properties */ + + if (repeat.repetitions == 0) + return; /* For zero extra repetitions the properties should not exist */ + + alarm->repeat = icalproperty_new_repeat (repeat.repetitions); + icalcomponent_add_property (alarm->icalcomp, alarm->repeat); + + alarm->duration = icalproperty_new_duration (repeat.duration); + icalcomponent_add_property (alarm->icalcomp, alarm->duration); +} + +/** * cal_component_alarm_free: * @alarm: A calendar alarm. * diff --git a/calendar/cal-util/cal-component.h b/calendar/cal-util/cal-component.h index c8f21963b4..54f9c03a33 100644 --- a/calendar/cal-util/cal-component.h +++ b/calendar/cal-util/cal-component.h @@ -406,6 +406,14 @@ typedef struct { } u; } CalAlarmTrigger; +typedef struct { + /* Number of extra repetitions, zero for none */ + int repetitions; + + /* Interval between repetitions */ + struct icaldurationtype duration; +} CalAlarmRepeat; + gboolean cal_component_has_alarms (CalComponent *comp); void cal_component_add_alarm (CalComponent *comp, CalComponentAlarm *alarm); void cal_component_remove_alarm (CalComponent *comp, const char *auid); @@ -427,6 +435,9 @@ void cal_component_alarm_set_action (CalComponentAlarm *alarm, CalAlarmAction ac void cal_component_alarm_get_trigger (CalComponentAlarm *alarm, CalAlarmTrigger *trigger); void cal_component_alarm_set_trigger (CalComponentAlarm *alarm, CalAlarmTrigger trigger); +void cal_component_alarm_get_repeat (CalComponentAlarm *alarm, CalAlarmRepeat *repeat); +void cal_component_alarm_set_repeat (CalComponentAlarm *alarm, CalAlarmRepeat repeat); + void cal_component_alarm_free (CalComponentAlarm *alarm); diff --git a/calendar/gui/dialogs/alarm-page.glade b/calendar/gui/dialogs/alarm-page.glade index 183ec1b95b..80db7edc76 100644 --- a/calendar/gui/dialogs/alarm-page.glade +++ b/calendar/gui/dialogs/alarm-page.glade @@ -196,7 +196,7 @@ <class>GtkOptionMenu</class> <name>action</name> <can_focus>True</can_focus> - <items>Show a dialog + <items>Display a message Play a sound Send an email Run a program |