get the new reminder widgets (sync_entries): different callback data

2001-02-05  JP Rosevear  <jpr@ximian.com>

	* gui/event-editor.c (get_widgets): get the new reminder widgets
	(sync_entries): different callback data
	(summary_changed_cb): take different data and handle various cases
	(init_widgets): connect signals for the new widgets
	(get_alarm_duration_string): give a text string of the alarm
	duration
	(get_alarm_string): give a string representing the alarm
	(fill_widgets): make sure we don't loop infinitely and remove old
	alarm cruft
	(reminder_to_comp_object): dump alarm info in the gui into the cal
	component
	(append_alarm): add alarm to the clist
	(reminder_add_cb): create new alarm
	(reminder_delete_cb): remove the alarm from the list

	* gui/event-editor-dialog.glade: Update gui

	* gui/e-calendar-table.c: include gnome.h for all the menu stuff

	* gui/calendar-summary.c: for internationalization

	* gui/tasks-control.c: include gnome.h

	* gui/e-tasks.c: ditto

	* gui/e-itip-control.c: ditto

	* cal-util/cal-recur.c (cal_recur_set_rule_end_date): Update for
	libical changes

svn path=/trunk/; revision=8003
This commit is contained in:
JP Rosevear
2001-02-05 23:15:15 +00:00
committed by JP Rosevear
parent 8634c7a4ec
commit 10dc371c4d
11 changed files with 784 additions and 683 deletions

View File

@ -1,3 +1,35 @@
2001-02-05 JP Rosevear <jpr@ximian.com>
* gui/event-editor.c (get_widgets): get the new reminder widgets
(sync_entries): different callback data
(summary_changed_cb): take different data and handle various cases
(init_widgets): connect signals for the new widgets
(get_alarm_duration_string): give a text string of the alarm
duration
(get_alarm_string): give a string representing the alarm
(fill_widgets): make sure we don't loop infinitely and remove old
alarm cruft
(reminder_to_comp_object): dump alarm info in the gui into the cal
component
(append_alarm): add alarm to the clist
(reminder_add_cb): create new alarm
(reminder_delete_cb): remove the alarm from the list
* gui/event-editor-dialog.glade: Update gui
* gui/e-calendar-table.c: include gnome.h for all the menu stuff
* gui/calendar-summary.c: for internationalization
* gui/tasks-control.c: include gnome.h
* gui/e-tasks.c: ditto
* gui/e-itip-control.c: ditto
* cal-util/cal-recur.c (cal_recur_set_rule_end_date): Update for
libical changes
2001-02-05 Christopher James Lahey <clahey@helixcode.com>
* gui/calendar-model.c: Fixed up these #includes.

View File

@ -3644,6 +3644,12 @@ cal_component_get_alarm (CalComponent *comp, const char *auid)
return NULL;
}
void
cal_component_free_alarm_uids (GList *alarm_uids)
{
}
/**
* cal_component_alarms_free:
* @alarms: Component alarms structure.

View File

@ -332,6 +332,7 @@ void cal_component_remove_alarm (CalComponent *comp, const char *auid);
GList *cal_component_get_alarm_uids (CalComponent *comp);
CalComponentAlarm *cal_component_get_alarm (CalComponent *comp, const char *auid);
void cal_component_free_alarm_uids (GList *alarm_uids);
void cal_component_alarms_free (CalComponentAlarms *alarms);

View File

@ -28,6 +28,7 @@
#include <time.h>
#include <gnome.h>
#include <bonobo.h>
#include <liboaf/liboaf.h>

View File

@ -31,6 +31,7 @@
#include <config.h>
#include <sys/stat.h>
#include <unistd.h>
#include <gnome.h>
#include <gal/e-table/e-table-scrolled.h>
#include <gal/e-table/e-cell-checkbox.h>
#include <gal/e-table/e-cell-toggle.h>

View File

@ -23,6 +23,7 @@
#include <config.h>
#include <time.h>
#include <gnome.h>
#include <bonobo.h>
#include <glade/glade.h>
#include <ical.h>

View File

@ -24,6 +24,7 @@
*/
#include <config.h>
#include <gnome.h>
#include <gal/util/e-util.h>
#include <gal/e-table/e-table-scrolled.h>
#include "dialogs/task-editor.h"

View File

@ -378,7 +378,6 @@
<class>GtkButton</class>
<name>categories-button</name>
<can_focus>True</can_focus>
<relief>GTK_RELIEF_NORMAL</relief>
<child>
<padding>0</padding>
<expand>False</expand>
@ -417,7 +416,6 @@
<class>GtkButton</class>
<name>categories-button</name>
<can_focus>True</can_focus>
<relief>GTK_RELIEF_NORMAL</relief>
<child>
<padding>0</padding>
<expand>False</expand>
@ -468,444 +466,355 @@
</widget>
<widget>
<class>GtkTable</class>
<name>table4</name>
<class>GtkVBox</class>
<name>vbox49</name>
<border_width>4</border_width>
<rows>4</rows>
<columns>5</columns>
<homogeneous>False</homogeneous>
<row_spacing>4</row_spacing>
<column_spacing>4</column_spacing>
<spacing>4</spacing>
<widget>
<class>GtkOptionMenu</class>
<name>alarm-display-unit</name>
<can_focus>True</can_focus>
<items>Minutes
Hours
Days
</items>
<initial_choice>0</initial_choice>
<class>GtkFrame</class>
<name>frame29</name>
<label>Appointment Basics</label>
<label_xalign>0</label_xalign>
<shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
<child>
<left_attach>2</left_attach>
<right_attach>3</right_attach>
<top_attach>0</top_attach>
<bottom_attach>1</bottom_attach>
<xpad>0</xpad>
<ypad>0</ypad>
<xexpand>False</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>False</xfill>
<yfill>False</yfill>
</child>
</widget>
<widget>
<class>GtkOptionMenu</class>
<name>alarm-audio-unit</name>
<can_focus>True</can_focus>
<items>Minutes
Hours
Days
</items>
<initial_choice>0</initial_choice>
<child>
<left_attach>2</left_attach>
<right_attach>3</right_attach>
<top_attach>1</top_attach>
<bottom_attach>2</bottom_attach>
<xpad>0</xpad>
<ypad>0</ypad>
<xexpand>False</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>False</xfill>
<yfill>False</yfill>
</child>
</widget>
<widget>
<class>GtkOptionMenu</class>
<name>alarm-program-unit</name>
<can_focus>True</can_focus>
<items>Minutes
Hours
Days
</items>
<initial_choice>0</initial_choice>
<child>
<left_attach>2</left_attach>
<right_attach>3</right_attach>
<top_attach>2</top_attach>
<bottom_attach>3</bottom_attach>
<xpad>0</xpad>
<ypad>0</ypad>
<xexpand>False</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>False</xfill>
<yfill>False</yfill>
</child>
</widget>
<widget>
<class>GtkOptionMenu</class>
<name>alarm-mail-unit</name>
<can_focus>True</can_focus>
<items>Minutes
Hours
Days
</items>
<initial_choice>0</initial_choice>
<child>
<left_attach>2</left_attach>
<right_attach>3</right_attach>
<top_attach>3</top_attach>
<bottom_attach>4</bottom_attach>
<xpad>0</xpad>
<ypad>0</ypad>
<xexpand>False</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>False</xfill>
<yfill>False</yfill>
</child>
</widget>
<widget>
<class>GtkCheckButton</class>
<name>alarm-display</name>
<can_focus>True</can_focus>
<label>_Display</label>
<active>False</active>
<draw_indicator>True</draw_indicator>
<child>
<left_attach>0</left_attach>
<right_attach>1</right_attach>
<top_attach>0</top_attach>
<bottom_attach>1</bottom_attach>
<xpad>0</xpad>
<ypad>0</ypad>
<xexpand>False</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
<widget>
<class>GtkCheckButton</class>
<name>alarm-program</name>
<can_focus>True</can_focus>
<label>_Program</label>
<active>False</active>
<draw_indicator>True</draw_indicator>
<child>
<left_attach>0</left_attach>
<right_attach>1</right_attach>
<top_attach>2</top_attach>
<bottom_attach>3</bottom_attach>
<xpad>0</xpad>
<ypad>0</ypad>
<xexpand>False</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
<widget>
<class>GtkCheckButton</class>
<name>alarm-mail</name>
<can_focus>True</can_focus>
<label>_Mail</label>
<active>False</active>
<draw_indicator>True</draw_indicator>
<child>
<left_attach>0</left_attach>
<right_attach>1</right_attach>
<top_attach>3</top_attach>
<bottom_attach>4</bottom_attach>
<xpad>0</xpad>
<ypad>0</ypad>
<xexpand>False</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
<widget>
<class>GtkLabel</class>
<name>label18</name>
<label>Mail _to:</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>7.45058e-09</xalign>
<yalign>0.5</yalign>
<xpad>0</xpad>
<ypad>0</ypad>
<focus_target>alarm-mail-mail-to</focus_target>
<child>
<left_attach>3</left_attach>
<right_attach>4</right_attach>
<top_attach>3</top_attach>
<bottom_attach>4</bottom_attach>
<xpad>0</xpad>
<ypad>0</ypad>
<xexpand>False</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
<widget>
<class>GtkLabel</class>
<name>label17</name>
<label>_Run program:</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>0</xalign>
<yalign>0.5</yalign>
<xpad>0</xpad>
<ypad>0</ypad>
<focus_target>alarm-program-run-program-entry</focus_target>
<child>
<left_attach>3</left_attach>
<right_attach>4</right_attach>
<top_attach>2</top_attach>
<bottom_attach>3</bottom_attach>
<xpad>0</xpad>
<ypad>0</ypad>
<xexpand>False</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
<widget>
<class>GtkEntry</class>
<name>alarm-mail-mail-to</name>
<can_focus>True</can_focus>
<editable>True</editable>
<text_visible>True</text_visible>
<text_max_length>0</text_max_length>
<text></text>
<child>
<left_attach>4</left_attach>
<right_attach>5</right_attach>
<top_attach>3</top_attach>
<bottom_attach>4</bottom_attach>
<xpad>0</xpad>
<ypad>0</ypad>
<xexpand>True</xexpand>
<yexpand>False</yexpand>
<xshrink>True</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
<widget>
<class>GnomeFileEntry</class>
<name>alarm-program-run-program</name>
<max_saved>10</max_saved>
<directory>False</directory>
<modal>False</modal>
<child>
<left_attach>4</left_attach>
<right_attach>5</right_attach>
<top_attach>2</top_attach>
<bottom_attach>3</bottom_attach>
<xpad>0</xpad>
<ypad>0</ypad>
<xexpand>True</xexpand>
<yexpand>False</yexpand>
<xshrink>True</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
<padding>0</padding>
<expand>False</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkEntry</class>
<child_name>GnomeEntry:entry</child_name>
<name>alarm-program-run-program-entry</name>
<can_focus>True</can_focus>
<editable>True</editable>
<text_visible>True</text_visible>
<text_max_length>0</text_max_length>
<text></text>
<class>GtkTable</class>
<name>table10</name>
<border_width>4</border_width>
<rows>2</rows>
<columns>2</columns>
<homogeneous>False</homogeneous>
<row_spacing>2</row_spacing>
<column_spacing>2</column_spacing>
<widget>
<class>GtkLabel</class>
<name>label53</name>
<label>Su_mmary:</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>0</xalign>
<yalign>0.5</yalign>
<xpad>0</xpad>
<ypad>0</ypad>
<default_focus_target>reminder-summary</default_focus_target>
<child>
<left_attach>0</left_attach>
<right_attach>1</right_attach>
<top_attach>0</top_attach>
<bottom_attach>1</bottom_attach>
<xpad>0</xpad>
<ypad>0</ypad>
<xexpand>False</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
<widget>
<class>GtkLabel</class>
<name>label54</name>
<label>_Starting date:</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>0</xalign>
<yalign>0.5</yalign>
<xpad>0</xpad>
<ypad>0</ypad>
<child>
<left_attach>0</left_attach>
<right_attach>1</right_attach>
<top_attach>1</top_attach>
<bottom_attach>2</bottom_attach>
<xpad>0</xpad>
<ypad>0</ypad>
<xexpand>False</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
<widget>
<class>GtkEntry</class>
<name>reminder-summary</name>
<can_focus>True</can_focus>
<editable>True</editable>
<text_visible>True</text_visible>
<text_max_length>0</text_max_length>
<text></text>
<child>
<left_attach>1</left_attach>
<right_attach>2</right_attach>
<top_attach>0</top_attach>
<bottom_attach>1</bottom_attach>
<xpad>0</xpad>
<ypad>0</ypad>
<xexpand>True</xexpand>
<yexpand>False</yexpand>
<xshrink>True</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
<widget>
<class>GtkAlignment</class>
<name>alignment38</name>
<xalign>0</xalign>
<yalign>0.5</yalign>
<xscale>0</xscale>
<yscale>0</yscale>
<child>
<left_attach>1</left_attach>
<right_attach>2</right_attach>
<top_attach>1</top_attach>
<bottom_attach>2</bottom_attach>
<xpad>0</xpad>
<ypad>0</ypad>
<xexpand>False</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>True</yfill>
</child>
<widget>
<class>Custom</class>
<name>reminder-starting-date</name>
<creation_function>make_date_edit</creation_function>
<int1>0</int1>
<int2>0</int2>
<last_modification_time>Fri, 22 Sep 2000 20:51:38 GMT</last_modification_time>
</widget>
</widget>
</widget>
</widget>
<widget>
<class>GtkCheckButton</class>
<name>alarm-audio</name>
<can_focus>True</can_focus>
<label>_Audio</label>
<active>False</active>
<draw_indicator>True</draw_indicator>
<class>GtkFrame</class>
<name>frame30</name>
<label>Reminders</label>
<label_xalign>0</label_xalign>
<shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
<child>
<left_attach>0</left_attach>
<right_attach>1</right_attach>
<top_attach>1</top_attach>
<bottom_attach>2</bottom_attach>
<xpad>0</xpad>
<ypad>0</ypad>
<xexpand>False</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
<padding>0</padding>
<expand>True</expand>
<fill>True</fill>
</child>
</widget>
<widget>
<class>GtkSpinButton</class>
<name>alarm-display-amount</name>
<can_focus>True</can_focus>
<climb_rate>1</climb_rate>
<digits>0</digits>
<numeric>True</numeric>
<update_policy>GTK_UPDATE_ALWAYS</update_policy>
<snap>False</snap>
<wrap>False</wrap>
<value>0</value>
<lower>0</lower>
<upper>100</upper>
<step>1</step>
<page>10</page>
<page_size>10</page_size>
<child>
<left_attach>1</left_attach>
<right_attach>2</right_attach>
<top_attach>0</top_attach>
<bottom_attach>1</bottom_attach>
<xpad>0</xpad>
<ypad>0</ypad>
<xexpand>False</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>False</xfill>
<yfill>False</yfill>
</child>
</widget>
<widget>
<class>GtkVBox</class>
<name>vbox50</name>
<homogeneous>False</homogeneous>
<spacing>4</spacing>
<widget>
<class>GtkSpinButton</class>
<name>alarm-audio-amount</name>
<can_focus>True</can_focus>
<climb_rate>1</climb_rate>
<digits>0</digits>
<numeric>False</numeric>
<update_policy>GTK_UPDATE_ALWAYS</update_policy>
<snap>False</snap>
<wrap>False</wrap>
<value>0</value>
<lower>0</lower>
<upper>100</upper>
<step>1</step>
<page>10</page>
<page_size>10</page_size>
<child>
<left_attach>1</left_attach>
<right_attach>2</right_attach>
<top_attach>1</top_attach>
<bottom_attach>2</bottom_attach>
<xpad>0</xpad>
<ypad>0</ypad>
<xexpand>False</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>False</xfill>
<yfill>False</yfill>
</child>
</widget>
<widget>
<class>GtkHBox</class>
<name>hbox51</name>
<homogeneous>False</homogeneous>
<spacing>4</spacing>
<child>
<padding>0</padding>
<expand>False</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkSpinButton</class>
<name>alarm-program-amount</name>
<can_focus>True</can_focus>
<climb_rate>1</climb_rate>
<digits>0</digits>
<numeric>False</numeric>
<update_policy>GTK_UPDATE_ALWAYS</update_policy>
<snap>False</snap>
<wrap>False</wrap>
<value>0</value>
<lower>0</lower>
<upper>100</upper>
<step>1</step>
<page>10</page>
<page_size>10</page_size>
<child>
<left_attach>1</left_attach>
<right_attach>2</right_attach>
<top_attach>2</top_attach>
<bottom_attach>3</bottom_attach>
<xpad>0</xpad>
<ypad>0</ypad>
<xexpand>False</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>False</xfill>
<yfill>False</yfill>
</child>
</widget>
<widget>
<class>GtkOptionMenu</class>
<name>reminder-action</name>
<can_focus>True</can_focus>
<items>Show a dialog
Play a sound
Send an email
Run a program
</items>
<initial_choice>0</initial_choice>
<child>
<padding>0</padding>
<expand>False</expand>
<fill>False</fill>
</child>
</widget>
<widget>
<class>GtkSpinButton</class>
<name>alarm-mail-amount</name>
<can_focus>True</can_focus>
<climb_rate>1</climb_rate>
<digits>0</digits>
<numeric>False</numeric>
<update_policy>GTK_UPDATE_ALWAYS</update_policy>
<snap>False</snap>
<wrap>False</wrap>
<value>0</value>
<lower>0</lower>
<upper>100</upper>
<step>1</step>
<page>10</page>
<page_size>10</page_size>
<child>
<left_attach>1</left_attach>
<right_attach>2</right_attach>
<top_attach>3</top_attach>
<bottom_attach>4</bottom_attach>
<xpad>0</xpad>
<ypad>0</ypad>
<xexpand>False</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>False</xfill>
<yfill>False</yfill>
</child>
<widget>
<class>GtkSpinButton</class>
<name>reminder-interval-value</name>
<can_focus>True</can_focus>
<climb_rate>1</climb_rate>
<digits>0</digits>
<numeric>True</numeric>
<update_policy>GTK_UPDATE_ALWAYS</update_policy>
<snap>False</snap>
<wrap>False</wrap>
<value>1</value>
<lower>0</lower>
<upper>100</upper>
<step>1</step>
<page>10</page>
<page_size>10</page_size>
<child>
<padding>0</padding>
<expand>False</expand>
<fill>True</fill>
</child>
</widget>
<widget>
<class>GtkOptionMenu</class>
<name>reminder-value-units</name>
<can_focus>True</can_focus>
<items>minute(s)
hour(s)
day(s)
</items>
<initial_choice>0</initial_choice>
<child>
<padding>0</padding>
<expand>False</expand>
<fill>False</fill>
</child>
</widget>
<widget>
<class>GtkOptionMenu</class>
<name>reminder-relative</name>
<can_focus>True</can_focus>
<items>before
after
</items>
<initial_choice>0</initial_choice>
<child>
<padding>0</padding>
<expand>False</expand>
<fill>False</fill>
</child>
</widget>
<widget>
<class>GtkOptionMenu</class>
<name>reminder-time</name>
<can_focus>True</can_focus>
<items>start of appointment
end of appointment
</items>
<initial_choice>0</initial_choice>
<child>
<padding>0</padding>
<expand>False</expand>
<fill>False</fill>
</child>
</widget>
<widget>
<class>GtkButton</class>
<name>button3</name>
<can_focus>True</can_focus>
<label>Settings...</label>
<child>
<padding>0</padding>
<expand>False</expand>
<fill>False</fill>
</child>
</widget>
</widget>
<widget>
<class>GtkHBox</class>
<name>hbox50</name>
<homogeneous>False</homogeneous>
<spacing>0</spacing>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkScrolledWindow</class>
<name>scrolledwindow11</name>
<hscrollbar_policy>GTK_POLICY_NEVER</hscrollbar_policy>
<vscrollbar_policy>GTK_POLICY_AUTOMATIC</vscrollbar_policy>
<hupdate_policy>GTK_UPDATE_CONTINUOUS</hupdate_policy>
<vupdate_policy>GTK_UPDATE_CONTINUOUS</vupdate_policy>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkCList</class>
<name>reminder-list</name>
<can_focus>True</can_focus>
<columns>1</columns>
<column_widths>80</column_widths>
<selection_mode>GTK_SELECTION_BROWSE</selection_mode>
<show_titles>False</show_titles>
<shadow_type>GTK_SHADOW_IN</shadow_type>
<widget>
<class>GtkLabel</class>
<child_name>CList:title</child_name>
<name>label55</name>
<label>label55</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>0.5</xalign>
<yalign>0.5</yalign>
<xpad>0</xpad>
<ypad>0</ypad>
</widget>
</widget>
</widget>
<widget>
<class>GtkVButtonBox</class>
<name>vbuttonbox1</name>
<layout_style>GTK_BUTTONBOX_START</layout_style>
<spacing>10</spacing>
<child_min_width>85</child_min_width>
<child_min_height>27</child_min_height>
<child_ipad_x>7</child_ipad_x>
<child_ipad_y>0</child_ipad_y>
<child>
<padding>0</padding>
<expand>False</expand>
<fill>False</fill>
</child>
<widget>
<class>GtkButton</class>
<name>reminder-add</name>
<can_default>True</can_default>
<can_focus>True</can_focus>
<label>Add</label>
</widget>
<widget>
<class>GtkButton</class>
<name>reminder-delete</name>
<can_default>True</can_default>
<can_focus>True</can_focus>
<label>Delete</label>
</widget>
</widget>
</widget>
</widget>
</widget>
</widget>
@ -1348,7 +1257,6 @@ forever
<name>recurrence-exception-add</name>
<can_focus>True</can_focus>
<label>Add</label>
<relief>GTK_RELIEF_NORMAL</relief>
<child>
<padding>0</padding>
<expand>False</expand>
@ -1361,7 +1269,6 @@ forever
<name>recurrence-exception-modify</name>
<can_focus>True</can_focus>
<label>Modify</label>
<relief>GTK_RELIEF_NORMAL</relief>
<child>
<padding>0</padding>
<expand>False</expand>
@ -1374,7 +1281,6 @@ forever
<name>recurrence-exception-delete</name>
<can_focus>True</can_focus>
<label>Delete</label>
<relief>GTK_RELIEF_NORMAL</relief>
<child>
<padding>0</padding>
<expand>False</expand>

View File

@ -17,24 +17,29 @@ gchar *s = N_("_Confidential");
gchar *s = N_("_Contacts");
gchar *s = N_("Ca_tegories...");
gchar *s = N_("General");
gchar *s = N_("Minutes");
gchar *s = N_("Hours");
gchar *s = N_("Days");
gchar *s = N_("Minutes");
gchar *s = N_("Hours");
gchar *s = N_("Days");
gchar *s = N_("Minutes");
gchar *s = N_("Hours");
gchar *s = N_("Days");
gchar *s = N_("Minutes");
gchar *s = N_("Hours");
gchar *s = N_("Days");
gchar *s = N_("_Display");
gchar *s = N_("_Program");
gchar *s = N_("_Mail");
gchar *s = N_("Mail _to:");
gchar *s = N_("_Run program:");
gchar *s = N_("_Audio");
gchar *s = N_("Appointment Basics");
gchar *s = N_("Su_mmary:");
gchar *s = N_("_Starting date:");
gchar *s = N_("Reminders");
gchar *s = N_("Show a dialog\n"
"Play a sound\n"
"Send an email\n"
"Run a program\n"
"");
gchar *s = N_("minute(s)\n"
"hour(s)\n"
"day(s)\n"
"");
gchar *s = N_("before\n"
"after\n"
"");
gchar *s = N_("start of appointment\n"
"end of appointment\n"
"");
gchar *s = N_("Settings...");
gchar *s = N_("label55");
gchar *s = N_("Add");
gchar *s = N_("Delete");
gchar *s = N_("Reminder");
gchar *s = N_("Appointment Basics");
gchar *s = N_("Su_mmary:");
@ -44,13 +49,15 @@ gchar *s = N_("No recurrence");
gchar *s = N_("Simple recurrence");
gchar *s = N_("Custom recurrence");
gchar *s = N_("Every");
gchar *s = N_("day(s)");
gchar *s = N_("week(s)");
gchar *s = N_("month(s)");
gchar *s = N_("year(s)");
gchar *s = N_("for");
gchar *s = N_("until");
gchar *s = N_("forever");
gchar *s = N_("day(s)\n"
"week(s)\n"
"month(s)\n"
"year(s)\n"
"");
gchar *s = N_("for\n"
"until\n"
"forever\n"
"");
gchar *s = N_("Exceptions");
gchar *s = N_("Add");
gchar *s = N_("Modify");

View File

@ -42,8 +42,46 @@
#include "widget-util.h"
enum { BEFORE, AFTER};
enum { MINUTES, HOURS, DAYS};
/* Reminder maps */
static const int reminder_action_map[] = {
CAL_ALARM_DISPLAY,
CAL_ALARM_AUDIO,
CAL_ALARM_EMAIL,
CAL_ALARM_PROCEDURE,
-1
};
static const int reminder_value_map[] = {
MINUTES,
HOURS,
DAYS,
-1
};
static const int reminder_relative_map[] = {
BEFORE,
AFTER,
-1
};
static const int reminder_time_map[] = {
CAL_ALARM_TRIGGER_RELATIVE_START,
CAL_ALARM_TRIGGER_RELATIVE_END,
-1
};
/* Recurrence maps */
static const int recur_freq_map[] = {
ICAL_DAILY_RECURRENCE,
ICAL_WEEKLY_RECURRENCE,
ICAL_MONTHLY_RECURRENCE,
ICAL_YEARLY_RECURRENCE,
-1
};
/* Options for monthly recurrences */
enum month_day_options {
MONTH_DAY_NTH,
MONTH_DAY_MON,
@ -92,22 +130,6 @@ struct _EventEditorPrivate {
GtkWidget *description;
GtkWidget *alarm_display;
GtkWidget *alarm_program;
GtkWidget *alarm_audio;
GtkWidget *alarm_mail;
GtkWidget *alarm_display_amount;
GtkWidget *alarm_display_unit;
GtkWidget *alarm_audio_amount;
GtkWidget *alarm_audio_unit;
GtkWidget *alarm_program_amount;
GtkWidget *alarm_program_unit;
GtkWidget *alarm_program_run_program;
GtkWidget *alarm_program_run_program_entry;
GtkWidget *alarm_mail_amount;
GtkWidget *alarm_mail_unit;
GtkWidget *alarm_mail_mail_to;
GtkWidget *classification_public;
GtkWidget *classification_private;
GtkWidget *classification_confidential;
@ -115,6 +137,19 @@ struct _EventEditorPrivate {
GtkWidget *categories;
GtkWidget *categories_btn;
GtkWidget *reminder_summary;
GtkWidget *reminder_starting_date;
GtkWidget *reminder_list;
GtkWidget *reminder_add;
GtkWidget *reminder_delete;
GtkWidget *reminder_action;
GtkWidget *reminder_interval_value;
GtkWidget *reminder_value_units;
GtkWidget *reminder_relative;
GtkWidget *reminder_time;
GtkWidget *recurrence_summary;
GtkWidget *recurrence_starting_date;
@ -178,13 +213,16 @@ static void event_editor_destroy (GtkObject *object);
static GtkObjectClass *parent_class;
static void append_alarm (EventEditor *ee, CalComponentAlarm *alarm);
static void append_exception (EventEditor *ee, time_t t);
static void check_all_day (EventEditor *ee);
static void set_all_day (GtkWidget *toggle, EventEditor *ee);
static void alarm_toggle (GtkWidget *toggle, EventEditor *ee);
static void date_changed_cb (EDateEdit *dedit, gpointer data);
static void preview_recur (EventEditor *ee);
static void recur_to_comp_object (EventEditor *ee, CalComponent *comp);
static void reminder_to_comp_object (EventEditor *ee, CalComponent *comp);
static void reminder_add_cb (GtkWidget *widget, EventEditor *ee);
static void reminder_delete_cb (GtkWidget *widget, EventEditor *ee);
static void recurrence_exception_add_cb (GtkWidget *widget, EventEditor *ee);
static void recurrence_exception_modify_cb (GtkWidget *widget, EventEditor *ee);
static void recurrence_exception_delete_cb (GtkWidget *widget, EventEditor *ee);
@ -589,14 +627,6 @@ make_recur_monthly_special (EventEditor *ee)
GTK_SIGNAL_FUNC (month_day_menu_selection_done_cb), ee);
}
static const int recur_freq_map[] = {
ICAL_DAILY_RECURRENCE,
ICAL_WEEKLY_RECURRENCE,
ICAL_MONTHLY_RECURRENCE,
ICAL_YEARLY_RECURRENCE,
-1
};
/* Changes the recurrence-special widget to match the interval units.
*
* For daily recurrences: nothing.
@ -927,22 +957,6 @@ get_widgets (EventEditor *ee)
priv->description = GW ("description");
priv->alarm_display = GW ("alarm-display");
priv->alarm_program = GW ("alarm-program");
priv->alarm_audio = GW ("alarm-audio");
priv->alarm_mail = GW ("alarm-mail");
priv->alarm_display_amount = GW ("alarm-display-amount");
priv->alarm_display_unit = GW ("alarm-display-unit");
priv->alarm_audio_amount = GW ("alarm-audio-amount");
priv->alarm_audio_unit = GW ("alarm-audio-unit");
priv->alarm_program_amount = GW ("alarm-program-amount");
priv->alarm_program_unit = GW ("alarm-program-unit");
priv->alarm_program_run_program = GW ("alarm-program-run-program");
priv->alarm_program_run_program_entry = GW ("alarm-program-run-program-entry");
priv->alarm_mail_amount = GW ("alarm-mail-amount");
priv->alarm_mail_unit = GW ("alarm-mail-unit");
priv->alarm_mail_mail_to = GW ("alarm-mail-mail-to");
priv->classification_public = GW ("classification-public");
priv->classification_private = GW ("classification-private");
priv->classification_confidential = GW ("classification-confidential");
@ -950,6 +964,19 @@ get_widgets (EventEditor *ee)
priv->categories = GW ("categories");
priv->categories_btn = GW ("categories-button");
priv->reminder_summary = GW ("reminder-summary");
priv->reminder_starting_date = GW ("reminder-starting-date");
priv->reminder_list = GW ("reminder-list");
priv->reminder_add = GW ("reminder-add");
priv->reminder_delete = GW ("reminder-delete");
priv->reminder_action = GW ("reminder-action");
priv->reminder_interval_value = GW ("reminder-interval-value");
priv->reminder_value_units = GW ("reminder-value-units");
priv->reminder_relative = GW ("reminder-relative");
priv->reminder_time = GW ("reminder-time");
priv->recurrence_summary = GW ("recurrence-summary");
priv->recurrence_starting_date = GW ("recurrence-starting-date");
@ -980,24 +1007,19 @@ get_widgets (EventEditor *ee)
&& priv->end_time
&& priv->all_day_event
&& priv->description
&& priv->alarm_display
&& priv->alarm_program
&& priv->alarm_audio
&& priv->alarm_mail
&& priv->alarm_display_amount
&& priv->alarm_display_unit
&& priv->alarm_audio_amount
&& priv->alarm_audio_unit
&& priv->alarm_program_amount
&& priv->alarm_program_unit
&& priv->alarm_program_run_program
&& priv->alarm_program_run_program_entry
&& priv->alarm_mail_amount
&& priv->alarm_mail_unit
&& priv->alarm_mail_mail_to
&& priv->classification_public
&& priv->classification_private
&& priv->classification_confidential
&& priv->reminder_summary
&& priv->reminder_starting_date
&& priv->reminder_list
&& priv->reminder_add
&& priv->reminder_delete
&& priv->reminder_action
&& priv->reminder_interval_value
&& priv->reminder_value_units
&& priv->reminder_relative
&& priv->reminder_time
&& priv->recurrence_summary
&& priv->recurrence_starting_date
&& priv->recurrence_none
@ -1022,33 +1044,33 @@ get_widgets (EventEditor *ee)
* other.
*/
static void
sync_entries (GtkEditable *source, GtkEditable *dest)
sync_entries (EventEditor *ee, GtkEditable *source, GtkEditable *dest)
{
char *str;
gtk_signal_handler_block_by_data (GTK_OBJECT (dest), source);
gtk_signal_handler_block_by_data (GTK_OBJECT (dest), ee);
str = gtk_editable_get_chars (source, 0, -1);
gtk_entry_set_text (GTK_ENTRY (dest), str);
g_free (str);
gtk_signal_handler_unblock_by_data (GTK_OBJECT (dest), source);
gtk_signal_handler_unblock_by_data (GTK_OBJECT (dest), ee);
}
/* Syncs the contents of two date editor widgets, while blocking signals on the
* specified data.
*/
static void
sync_date_edits (EDateEdit *source, EDateEdit *dest)
sync_date_edits (EventEditor *ee, EDateEdit *source, EDateEdit *dest)
{
time_t t;
gtk_signal_handler_block_by_data (GTK_OBJECT (dest), source);
gtk_signal_handler_block_by_data (GTK_OBJECT (dest), ee);
t = e_date_edit_get_time (source);
e_date_edit_set_time (dest, t);
gtk_signal_handler_unblock_by_data (GTK_OBJECT (dest), source);
gtk_signal_handler_unblock_by_data (GTK_OBJECT (dest), ee);
}
/* Callback used when one of the general or recurrence summary entries change;
@ -1057,7 +1079,18 @@ sync_date_edits (EDateEdit *source, EDateEdit *dest)
static void
summary_changed_cb (GtkEditable *editable, gpointer data)
{
sync_entries (editable, GTK_EDITABLE (data));
EventEditor *ee;
EventEditorPrivate *priv;
ee = EVENT_EDITOR (data);
priv = ee->priv;
if (editable != GTK_EDITABLE (priv->general_summary))
sync_entries (ee, editable, GTK_EDITABLE (priv->general_summary));
if (editable != GTK_EDITABLE (priv->reminder_summary))
sync_entries (ee, editable, GTK_EDITABLE (priv->reminder_summary));
if (editable != GTK_EDITABLE (priv->recurrence_summary))
sync_entries (ee, editable, GTK_EDITABLE (priv->recurrence_summary));
}
/* Callback used when one of the general or recurrence starting date widgets
@ -1066,7 +1099,18 @@ summary_changed_cb (GtkEditable *editable, gpointer data)
static void
start_date_changed_cb (EDateEdit *de, gpointer data)
{
sync_date_edits (de, E_DATE_EDIT (data));
EventEditor *ee;
EventEditorPrivate *priv;
ee = EVENT_EDITOR (data);
priv = ee->priv;
if (de != E_DATE_EDIT (priv->start_time))
sync_date_edits (ee,de, E_DATE_EDIT (priv->start_time));
if (de != E_DATE_EDIT (priv->reminder_starting_date))
sync_date_edits (ee, de, E_DATE_EDIT (priv->reminder_starting_date));
if (de != E_DATE_EDIT (priv->recurrence_starting_date))
sync_date_edits (ee, de, E_DATE_EDIT (priv->recurrence_starting_date));
}
/* Callback used when the displayed date range in the recurrence preview
@ -1092,12 +1136,13 @@ init_widgets (EventEditor *ee)
priv = ee->priv;
/* Summary in the main and recurrence pages */
/* Summary in the main, reminder and recurrence pages */
gtk_signal_connect (GTK_OBJECT (priv->general_summary), "changed",
GTK_SIGNAL_FUNC (summary_changed_cb), priv->recurrence_summary);
GTK_SIGNAL_FUNC (summary_changed_cb), ee);
gtk_signal_connect (GTK_OBJECT (priv->reminder_summary), "changed",
GTK_SIGNAL_FUNC (summary_changed_cb), ee);
gtk_signal_connect (GTK_OBJECT (priv->recurrence_summary), "changed",
GTK_SIGNAL_FUNC (summary_changed_cb), priv->general_summary);
GTK_SIGNAL_FUNC (summary_changed_cb), ee);
/* Categories button */
gtk_signal_connect (GTK_OBJECT (priv->categories_btn), "clicked",
@ -1106,9 +1151,11 @@ init_widgets (EventEditor *ee)
/* Start dates in the main and recurrence pages */
gtk_signal_connect (GTK_OBJECT (priv->start_time), "changed",
GTK_SIGNAL_FUNC (start_date_changed_cb), priv->recurrence_starting_date);
GTK_SIGNAL_FUNC (start_date_changed_cb), ee);
gtk_signal_connect (GTK_OBJECT (priv->reminder_starting_date), "changed",
GTK_SIGNAL_FUNC (start_date_changed_cb), ee);
gtk_signal_connect (GTK_OBJECT (priv->recurrence_starting_date), "changed",
GTK_SIGNAL_FUNC (start_date_changed_cb), priv->start_time);
GTK_SIGNAL_FUNC (start_date_changed_cb), ee);
/* Start and end times */
@ -1120,16 +1167,12 @@ init_widgets (EventEditor *ee)
gtk_signal_connect (GTK_OBJECT (priv->all_day_event), "toggled",
GTK_SIGNAL_FUNC (set_all_day), ee);
/* Alarms */
/* Reminder buttons */
gtk_signal_connect (GTK_OBJECT (priv->alarm_display), "toggled",
GTK_SIGNAL_FUNC (alarm_toggle), ee);
gtk_signal_connect (GTK_OBJECT (priv->alarm_program), "toggled",
GTK_SIGNAL_FUNC (alarm_toggle), ee);
gtk_signal_connect (GTK_OBJECT (priv->alarm_audio), "toggled",
GTK_SIGNAL_FUNC (alarm_toggle), ee);
gtk_signal_connect (GTK_OBJECT (priv->alarm_mail), "toggled",
GTK_SIGNAL_FUNC (alarm_toggle), ee);
gtk_signal_connect (GTK_OBJECT (priv->reminder_add), "clicked",
GTK_SIGNAL_FUNC (reminder_add_cb), ee);
gtk_signal_connect (GTK_OBJECT (priv->reminder_delete), "clicked",
GTK_SIGNAL_FUNC (reminder_delete_cb), ee);
/* Recurrence preview */
@ -1200,40 +1243,6 @@ init_widgets (EventEditor *ee)
"toggled",
GTK_SIGNAL_FUNC (field_changed), ee);
/* Reminder Page. */
gtk_signal_connect (GTK_OBJECT (GTK_SPIN_BUTTON (priv->alarm_display_amount)->adjustment),
"value_changed",
GTK_SIGNAL_FUNC (field_changed), ee);
gtk_signal_connect (GTK_OBJECT (GTK_SPIN_BUTTON (priv->alarm_audio_amount)->adjustment),
"value_changed",
GTK_SIGNAL_FUNC (field_changed), ee);
gtk_signal_connect (GTK_OBJECT (GTK_SPIN_BUTTON (priv->alarm_program_amount)->adjustment),
"value_changed",
GTK_SIGNAL_FUNC (field_changed), ee);
gtk_signal_connect (GTK_OBJECT (GTK_SPIN_BUTTON (priv->alarm_mail_amount)->adjustment),
"value_changed",
GTK_SIGNAL_FUNC (field_changed), ee);
gtk_signal_connect (GTK_OBJECT (GTK_OPTION_MENU (priv->alarm_display_unit)->menu),
"deactivate",
GTK_SIGNAL_FUNC (field_changed), ee);
gtk_signal_connect (GTK_OBJECT (GTK_OPTION_MENU (priv->alarm_audio_unit)->menu),
"deactivate",
GTK_SIGNAL_FUNC (field_changed), ee);
gtk_signal_connect (GTK_OBJECT (GTK_OPTION_MENU (priv->alarm_program_unit)->menu),
"deactivate",
GTK_SIGNAL_FUNC (field_changed), ee);
gtk_signal_connect (GTK_OBJECT (GTK_OPTION_MENU (priv->alarm_mail_unit)->menu),
"deactivate",
GTK_SIGNAL_FUNC (field_changed), ee);
gtk_signal_connect (GTK_OBJECT (priv->alarm_program_run_program_entry),
"changed",
GTK_SIGNAL_FUNC (field_changed), ee);
gtk_signal_connect (GTK_OBJECT (priv->alarm_mail_mail_to),
"changed",
GTK_SIGNAL_FUNC (field_changed), ee);
/* Recurrence Page. */
}
@ -1300,30 +1309,6 @@ clear_widgets (EventEditor *ee)
check_all_day (ee);
/* Alarms */
/* FIXME: these should use configurable defaults */
e_dialog_toggle_set (priv->alarm_display, FALSE);
e_dialog_toggle_set (priv->alarm_program, FALSE);
e_dialog_toggle_set (priv->alarm_audio, FALSE);
e_dialog_toggle_set (priv->alarm_mail, FALSE);
e_dialog_spin_set (priv->alarm_display_amount, 15);
e_dialog_spin_set (priv->alarm_audio_amount, 15);
e_dialog_spin_set (priv->alarm_program_amount, 15);
e_dialog_spin_set (priv->alarm_mail_amount, 15);
#if 0
alarm_unit_set (priv->alarm_display_unit, ALARM_MINUTES);
alarm_unit_set (priv->alarm_audio_unit, ALARM_MINUTES);
alarm_unit_set (priv->alarm_program_unit, ALARM_MINUTES);
alarm_unit_set (priv->alarm_mail_unit, ALARM_MINUTES);
#endif
e_dialog_editable_set (priv->alarm_program_run_program_entry, NULL);
e_dialog_editable_set (priv->alarm_mail_mail_to, NULL);
/* Classification */
e_dialog_radio_set (priv->classification_public,
@ -1546,6 +1531,132 @@ set_recur_special_defaults (EventEditor *ee)
priv->recurrence_weekday_blocked_day_mask = mask;
}
static char *
get_alarm_duration_string (struct icaldurationtype *duration)
{
GString *string = g_string_new (NULL);
char *ret;
if (duration->days > 1)
g_string_sprintf (string, _(" %d days"), duration->days);
else if (duration->days == 1)
g_string_append (string, _(" 1 day"));
if (duration->weeks > 1)
g_string_sprintf (string, _(" %d weeks"), duration->weeks);
else if (duration->weeks == 1)
g_string_append (string, _(" 1 week"));
if (duration->hours > 1)
g_string_sprintf (string, _(" %d hours"), duration->hours);
else if (duration->hours == 1)
g_string_append (string, _(" 1 hour"));
if (duration->minutes > 1)
g_string_sprintf (string, _(" %d minutes"), duration->minutes);
else if (duration->minutes == 1)
g_string_append (string, _(" 1 minute"));
if (duration->seconds > 1)
g_string_sprintf (string, _(" %d seconds"), duration->seconds);
else if (duration->seconds == 1)
g_string_append (string, _(" 1 second"));
ret = string->str;
g_string_free (string, FALSE);
return ret;
}
static char *
get_alarm_string (CalComponentAlarm *alarm)
{
CalAlarmAction action;
CalAlarmTrigger trigger;
char string[256];
char *dur;
string [0] = '\0';
cal_component_alarm_get_action (alarm, &action);
cal_component_alarm_get_trigger (alarm, &trigger);
switch (action) {
case CAL_ALARM_AUDIO:
strcat (string, _("Play a sound"));
break;
case CAL_ALARM_DISPLAY:
strcat (string, _("Show a dialog"));
break;
case CAL_ALARM_EMAIL:
strcat (string, _("Send an email"));
break;
case CAL_ALARM_PROCEDURE:
strcat (string, _("Run a program"));
break;
case CAL_ALARM_NONE:
case CAL_ALARM_UNKNOWN:
strcat (string, _("Unknown"));
break;
}
switch (trigger.type) {
case CAL_ALARM_TRIGGER_RELATIVE_START:
dur = get_alarm_duration_string (&trigger.u.rel_duration);
strcat (string, dur);
g_free (dur);
if (trigger.u.rel_duration.is_neg)
strcat (string, _(" before start of appointment"));
else
strcat (string, _(" after start of appointment"));
break;
case CAL_ALARM_TRIGGER_RELATIVE_END:
dur = get_alarm_duration_string (&trigger.u.rel_duration);
strcat (string, dur);
g_free (dur);
if (trigger.u.rel_duration.is_neg)
strcat (string, _(" before end of appointment"));
else
strcat (string, _(" after end of appointment"));
break;
case CAL_ALARM_TRIGGER_NONE:
case CAL_ALARM_TRIGGER_ABSOLUTE:
strcat (string, _("Unknown"));
break;
}
return g_strdup (string);
}
static void
fill_reminder_widgets (EventEditor *ee)
{
EventEditorPrivate *priv;
GList *alarms, *l;
GtkCList *clist;
int row = 0;
priv = ee->priv;
g_assert (priv->comp != NULL);
if (!cal_component_has_alarms (priv->comp))
return;
alarms = cal_component_get_alarm_uids (priv->comp);
clist = GTK_CLIST (priv->reminder_list);
for (l = alarms; l != NULL; l = l->next, row++) {
CalComponentAlarm *ca = cal_component_get_alarm (priv->comp, l->data);
/* Add it to the clist */
append_alarm (ee, ca);
}
cal_component_free_alarm_uids (alarms);
}
/* Fills in the recurrence widgets with the values from the calendar component.
* This function is particularly tricky because it has to discriminate between
* recurrences we support for editing and the ones we don't. We only support at
@ -1910,7 +2021,9 @@ fill_widgets (EventEditor *ee)
gtk_signal_handler_block_by_data (GTK_OBJECT (priv->start_time), ee);
gtk_signal_handler_block_by_data (GTK_OBJECT (priv->end_time), ee);
e_date_edit_set_time (E_DATE_EDIT (priv->start_time), dtstart); /* will set recur start too */
e_date_edit_set_time (E_DATE_EDIT (priv->start_time), dtstart);
e_date_edit_set_time (E_DATE_EDIT (priv->reminder_starting_date), dtstart);
e_date_edit_set_time (E_DATE_EDIT (priv->recurrence_starting_date), dtstart);
e_date_edit_set_time (E_DATE_EDIT (priv->end_time), dtend);
gtk_signal_handler_unblock_by_data (GTK_OBJECT (priv->start_time), ee);
@ -1918,36 +2031,6 @@ fill_widgets (EventEditor *ee)
check_all_day (ee);
/* Alarms */
#if 0
e_dialog_toggle_set (priv->alarm_display, priv->ico->dalarm.enabled);
e_dialog_toggle_set (priv->alarm_program, priv->ico->palarm.enabled);
e_dialog_toggle_set (priv->alarm_audio, priv->ico->aalarm.enabled);
e_dialog_toggle_set (priv->alarm_mail, priv->ico->malarm.enabled);
/* Alarm data */
e_dialog_spin_set (priv->alarm_display_amount, priv->ico->dalarm.count);
e_dialog_spin_set (priv->alarm_audio_amount, priv->ico->aalarm.count);
e_dialog_spin_set (priv->alarm_program_amount, priv->ico->palarm.count);
e_dialog_spin_set (priv->alarm_mail_amount, priv->ico->malarm.count);
alarm_unit_set (priv->alarm_display_unit, priv->ico->dalarm.units);
alarm_unit_set (priv->alarm_audio_unit, priv->ico->aalarm.units);
alarm_unit_set (priv->alarm_program_unit, priv->ico->palarm.units);
alarm_unit_set (priv->alarm_mail_unit, priv->ico->malarm.units);
e_dialog_editable_set (priv->alarm_program_run_program_entry, priv->ico->palarm.data);
e_dialog_editable_set (priv->alarm_mail_mail_to, priv->ico->malarm.data);
#endif
/* Call alarm_toggle to set the sensitivity of the widgets. */
alarm_toggle (priv->alarm_display, ee);
alarm_toggle (priv->alarm_audio, ee);
alarm_toggle (priv->alarm_program, ee);
alarm_toggle (priv->alarm_mail, ee);
/* Classification */
cal_component_get_classification (priv->comp, &cl);
@ -1972,9 +2055,12 @@ fill_widgets (EventEditor *ee)
cal_component_get_categories (priv->comp, &categories);
e_dialog_editable_set (priv->categories, categories);
/* Reminders */
fill_reminder_widgets (ee);
/* Recurrences */
fill_recurrence_widgets (ee);
/* Do this last, since the callbacks will set it to TRUE. */
event_editor_set_changed (ee, FALSE);
}
@ -2017,6 +2103,31 @@ nth_weekday (int pos, icalrecurrencetype_weekday weekday)
return (pos << 3) | (int) weekday;
}
static void
reminder_to_comp_object (EventEditor *ee, CalComponent *comp)
{
EventEditorPrivate *priv;
GList *alarms, *l;
GtkCList *reminder_list;
int i;
priv = ee->priv;
/* Erase all the old ones */
alarms = cal_component_get_alarm_uids (comp);
for (l = alarms; l != NULL; l = l->next)
cal_component_remove_alarm (comp, l->data);
cal_component_free_alarm_uids (alarms);
reminder_list = GTK_CLIST (priv->reminder_list);
for (i = 0; i < reminder_list->rows; i++) {
CalComponentAlarm *alarm;
alarm = gtk_clist_get_row_data (reminder_list, i);
cal_component_add_alarm (priv->comp, alarm);
}
}
/* Gets the simple recurrence data from the recurrence widgets and stores it in
* the calendar component object.
*/
@ -2323,34 +2434,11 @@ dialog_to_comp_object (EventEditor *ee, CalComponent *comp)
if (cat)
g_free (cat);
#if 0
ico->dalarm.enabled = e_dialog_toggle_get (priv->alarm_display);
ico->aalarm.enabled = e_dialog_toggle_get (priv->alarm_program);
ico->palarm.enabled = e_dialog_toggle_get (priv->alarm_audio);
ico->malarm.enabled = e_dialog_toggle_get (priv->alarm_mail);
ico->dalarm.count = e_dialog_spin_get_int (priv->alarm_display_amount);
ico->aalarm.count = e_dialog_spin_get_int (priv->alarm_audio_amount);
ico->palarm.count = e_dialog_spin_get_int (priv->alarm_program_amount);
ico->malarm.count = e_dialog_spin_get_int (priv->alarm_mail_amount);
ico->dalarm.units = alarm_unit_get (priv->alarm_display_unit);
ico->aalarm.units = alarm_unit_get (priv->alarm_audio_unit);
ico->palarm.units = alarm_unit_get (priv->alarm_program_unit);
ico->malarm.units = alarm_unit_get (priv->alarm_mail_unit);
if (ico->palarm.data)
g_free (ico->palarm.data);
if (ico->malarm.data)
g_free (ico->malarm.data);
ico->palarm.data = e_dialog_editable_get (priv->alarm_program_run_program_entry);
ico->malarm.data = e_dialog_editable_get (priv->alarm_mail_mail_to);
#endif
cal_component_set_classification (comp, classification_get (priv->classification_public));
/* Reminder information */
reminder_to_comp_object (ee, comp);
/* Recurrence information */
recur_to_comp_object (ee, comp);
@ -2833,43 +2921,6 @@ event_editor_focus (EventEditor *ee)
raise_and_focus (priv->app);
}
/* Sets the sensitivity of the relevant alarm widgets. Called when filling
the widgets initially and when the alarm button is toggled. */
static void
alarm_toggle (GtkWidget *toggle, EventEditor *ee)
{
EventEditorPrivate *priv;
GtkWidget *alarm_amount = NULL;
GtkWidget *alarm_unit = NULL;
gboolean active;
priv = ee->priv;
event_editor_set_changed (ee, TRUE);
active = GTK_TOGGLE_BUTTON (toggle)->active;
if (toggle == priv->alarm_display) {
alarm_amount = priv->alarm_display_amount;
alarm_unit = priv->alarm_display_unit;
} else if (toggle == priv->alarm_audio) {
alarm_amount = priv->alarm_audio_amount;
alarm_unit = priv->alarm_audio_unit;
} else if (toggle == priv->alarm_program) {
alarm_amount = priv->alarm_program_amount;
alarm_unit = priv->alarm_program_unit;
gtk_widget_set_sensitive (priv->alarm_program_run_program, active);
} else if (toggle == priv->alarm_mail) {
alarm_amount = priv->alarm_mail_amount;
alarm_unit = priv->alarm_mail_unit;
gtk_widget_set_sensitive (priv->alarm_mail_mail_to, active);
} else
g_assert_not_reached ();
gtk_widget_set_sensitive (alarm_amount, active);
gtk_widget_set_sensitive (alarm_unit, active);
}
/* Checks if the event's time starts and ends at midnight, and sets the
* "all day event" box accordingly.
*/
@ -3082,6 +3133,99 @@ date_changed_cb (EDateEdit *dedit, gpointer data)
preview_recur (ee);
}
/* Appends an exception date to the list */
static void
append_alarm (EventEditor *ee, CalComponentAlarm *alarm)
{
EventEditorPrivate *priv;
char *c[1];
int i;
GtkCList *clist;
priv = ee->priv;
clist = GTK_CLIST (priv->reminder_list);
c[0] = get_alarm_string (alarm);
i = e_utf8_gtk_clist_append (clist, c);
gtk_clist_set_row_data (clist, i, alarm);
gtk_clist_select_row (clist, i, 0);
g_free (c[0]);
gtk_widget_set_sensitive (priv->reminder_delete, TRUE);
}
/* Callback for the "add reminder" button */
static void
reminder_add_cb (GtkWidget *widget, EventEditor *ee)
{
EventEditorPrivate *priv;
CalComponentAlarm *alarm;
CalAlarmTrigger trigger;
priv = ee->priv;
event_editor_set_changed (ee, TRUE);
alarm = cal_component_alarm_new ();
memset (&trigger, 0, sizeof (CalAlarmTrigger));
trigger.type = e_dialog_option_menu_get (priv->reminder_time, reminder_time_map);
if (e_dialog_option_menu_get (priv->reminder_relative, reminder_relative_map) == BEFORE)
trigger.u.rel_duration.is_neg = 1;
else
trigger.u.rel_duration.is_neg = 0;
switch (e_dialog_option_menu_get (priv->reminder_relative, reminder_relative_map)) {
case MINUTES:
trigger.u.rel_duration.minutes = e_dialog_spin_get_int (priv->reminder_interval_value);
break;
case HOURS:
trigger.u.rel_duration.hours = e_dialog_spin_get_int (priv->reminder_interval_value);
break;
case DAYS:
trigger.u.rel_duration.days = e_dialog_spin_get_int (priv->reminder_interval_value);
break;
}
cal_component_alarm_set_trigger (alarm, trigger);
cal_component_alarm_set_action (alarm, e_dialog_option_menu_get (priv->reminder_action, reminder_action_map));
append_alarm (ee, alarm);
}
/* Callback for the "delete reminder" button */
static void
reminder_delete_cb (GtkWidget *widget, EventEditor *ee)
{
EventEditorPrivate *priv;
GtkCList *clist;
int sel;
priv = ee->priv;
clist = GTK_CLIST (priv->reminder_list);
if (!clist->selection)
return;
event_editor_set_changed (ee, TRUE);
sel = GPOINTER_TO_INT (clist->selection->data);
cal_component_alarm_free (gtk_clist_get_row_data (clist, sel));
gtk_clist_remove (clist, sel);
if (sel >= clist->rows)
sel--;
if (clist->rows > 0)
gtk_clist_select_row (clist, sel, 0);
else
gtk_widget_set_sensitive (priv->reminder_delete, FALSE);
}
/* Builds a static string out of an exception date */
static char *
get_exception_string (time_t t)

View File

@ -23,6 +23,7 @@
*/
#include <config.h>
#include <gnome.h>
#include <bonobo.h>
#include <bonobo/bonobo-control.h>
#include "e-tasks.h"