renamed from editor-page for consistency, more complete implementation
2001-06-01 JP Rosevear <jpr@ximian.com> * gui/dialogs/comp-editor-page.[hc]: renamed from editor-page for consistency, more complete implementation * gui/dialogs/comp-editor.[hc]: More complete implementation * gui/dialogs/*-page.*: The various pages needed to construct the event and task dialogs * gui/dialogs/comp-editor-util.[hc]: useful utility functions for the component editor pages to use * gui/dialogs/Makefile.am: Build and install new files * gui/event-editor*: Remove, obsoleted by the new comp-editor stuff * gui/dialogs/task-editor-dialog.glade: ditto * gui/e-calendar-table.c (open_task): update to use comp editor stuff * gui/e-tasks.c (e_tasks_new_task): ditto * gui/gnome-cal.c (gnome_calendar_edit_object): ditto * gui/Makefile.am: don't build non-existent files nor try to install them svn path=/trunk/; revision=10088
This commit is contained in:
@ -1,3 +1,33 @@
|
||||
2001-06-01 JP Rosevear <jpr@ximian.com>
|
||||
|
||||
* gui/dialogs/comp-editor-page.[hc]: renamed from editor-page for
|
||||
consistency, more complete implementation
|
||||
|
||||
* gui/dialogs/comp-editor.[hc]: More complete implementation
|
||||
|
||||
* gui/dialogs/*-page.*: The various pages needed to construct the
|
||||
event and task dialogs
|
||||
|
||||
* gui/dialogs/comp-editor-util.[hc]: useful utility functions for the
|
||||
component editor pages to use
|
||||
|
||||
* gui/dialogs/Makefile.am: Build and install new files
|
||||
|
||||
* gui/event-editor*: Remove, obsoleted by the new comp-editor
|
||||
stuff
|
||||
|
||||
* gui/dialogs/task-editor-dialog.glade: ditto
|
||||
|
||||
* gui/e-calendar-table.c (open_task): update to use comp editor
|
||||
stuff
|
||||
|
||||
* gui/e-tasks.c (e_tasks_new_task): ditto
|
||||
|
||||
* gui/gnome-cal.c (gnome_calendar_edit_object): ditto
|
||||
|
||||
* gui/Makefile.am: don't build non-existent files nor try to
|
||||
install them
|
||||
|
||||
2001-06-01 JP Rosevear <jpr@ximian.com>
|
||||
|
||||
* gui/e-itip-control.c (e_itip_control_factory_init): ditto
|
||||
|
||||
@ -42,7 +42,6 @@ INCLUDES = \
|
||||
gladedir = $(datadir)/evolution/glade
|
||||
|
||||
glade_DATA = \
|
||||
event-editor-dialog.glade \
|
||||
e-meeting-dialog.glade \
|
||||
e-itip-control.glade \
|
||||
goto-dialog.glade
|
||||
@ -91,8 +90,6 @@ evolution_calendar_SOURCES = \
|
||||
e-week-view.h \
|
||||
e-tasks.c \
|
||||
e-tasks.h \
|
||||
event-editor.c \
|
||||
event-editor.h \
|
||||
gnome-cal.c \
|
||||
gnome-cal.h \
|
||||
goto.c \
|
||||
@ -131,8 +128,7 @@ evolution_calendar_LDADD = \
|
||||
$(BONOBO_HTML_GNOME_LIBS) \
|
||||
$(GNOME_VFS_LIBS) \
|
||||
$(GAL_LIBS) \
|
||||
$(INTLLIBS) \
|
||||
$(DB3_LDADD)
|
||||
$(INTLLIBS)
|
||||
|
||||
#evolution_calendar_LDFLAGS = `gnome-config --libs gdk_pixbuf`
|
||||
|
||||
|
||||
@ -24,10 +24,16 @@ libcal_dialogs_a_SOURCES = \
|
||||
alarm-page.h \
|
||||
cal-prefs-dialog.c \
|
||||
cal-prefs-dialog.h \
|
||||
comp-editor.c \
|
||||
comp-editor.h \
|
||||
comp-editor-page.c \
|
||||
comp-editor-page.h \
|
||||
comp-editor-util.c \
|
||||
comp-editor-util.h \
|
||||
delete-comp.c \
|
||||
delete-comp.h \
|
||||
editor-page.c \
|
||||
editor-page.h \
|
||||
event-editor.c \
|
||||
event-editor.h \
|
||||
event-page.c \
|
||||
event-page.h \
|
||||
recurrence-page.c \
|
||||
@ -35,7 +41,11 @@ libcal_dialogs_a_SOURCES = \
|
||||
save-comp.c \
|
||||
save-comp.h \
|
||||
task-editor.c \
|
||||
task-editor.h
|
||||
task-editor.h \
|
||||
task-details-page.c \
|
||||
task-details-page.h \
|
||||
task-page.c \
|
||||
task-page.h
|
||||
|
||||
glade_DATA = \
|
||||
alarm-notify.glade \
|
||||
@ -44,7 +54,6 @@ glade_DATA = \
|
||||
event-page.glade \
|
||||
recurrence-page.glade \
|
||||
task-details-page.glade \
|
||||
task-editor-dialog.glade \
|
||||
task-page.glade
|
||||
|
||||
EXTRA_DIST = \
|
||||
|
||||
@ -26,13 +26,15 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#include <string.h>
|
||||
#include <gtk/gtksignal.h>
|
||||
#include <libgnome/gnome-defs.h>
|
||||
#include <libgnome/gnome-i18n.h>
|
||||
#include <glade/glade.h>
|
||||
#include <gal/widgets/e-unicode.h>
|
||||
#include "cal-util/cal-util.h"
|
||||
#include "e-util/e-dialog-widgets.h"
|
||||
#include "cal-util/cal-util.h"
|
||||
#include "comp-editor-util.h"
|
||||
#include "alarm-page.h"
|
||||
|
||||
|
||||
@ -47,7 +49,7 @@ struct _AlarmPagePrivate {
|
||||
GtkWidget *main;
|
||||
|
||||
GtkWidget *summary;
|
||||
GtkWidget *starting_date;
|
||||
GtkWidget *date_time;
|
||||
|
||||
GtkWidget *list;
|
||||
GtkWidget *add;
|
||||
@ -58,6 +60,8 @@ struct _AlarmPagePrivate {
|
||||
GtkWidget *value_units;
|
||||
GtkWidget *relative;
|
||||
GtkWidget *time;
|
||||
|
||||
gboolean updating;
|
||||
};
|
||||
|
||||
|
||||
@ -66,14 +70,13 @@ static void alarm_page_class_init (AlarmPageClass *class);
|
||||
static void alarm_page_init (AlarmPage *apage);
|
||||
static void alarm_page_destroy (GtkObject *object);
|
||||
|
||||
static GtkWidget *alarm_page_get_widget (EditorPage *page);
|
||||
static void alarm_page_fill_widgets (EditorPage *page, CalComponent *comp);
|
||||
static void alarm_page_fill_component (EditorPage *page, CalComponent *comp);
|
||||
static void alarm_page_set_summary (EditorPage *page, const char *summary);
|
||||
static char *alarm_page_get_summary (EditorPage *page);
|
||||
static void alarm_page_set_dates (EditorPage *page, time_t start, time_t end);
|
||||
static GtkWidget *alarm_page_get_widget (CompEditorPage *page);
|
||||
static void alarm_page_fill_widgets (CompEditorPage *page, CalComponent *comp);
|
||||
static void alarm_page_fill_component (CompEditorPage *page, CalComponent *comp);
|
||||
static void alarm_page_set_summary (CompEditorPage *page, const char *summary);
|
||||
static void alarm_page_set_dates (CompEditorPage *page, CompEditorPageDates *dates);
|
||||
|
||||
static EditorPageClass *parent_class = NULL;
|
||||
static CompEditorPageClass *parent_class = NULL;
|
||||
|
||||
|
||||
|
||||
@ -102,7 +105,8 @@ alarm_page_get_type (void)
|
||||
(GtkClassInitFunc) NULL
|
||||
};
|
||||
|
||||
alarm_page_type = gtk_type_unique (TYPE_EDITOR_PAGE, &alarm_page_info);
|
||||
alarm_page_type = gtk_type_unique (TYPE_COMP_EDITOR_PAGE,
|
||||
&alarm_page_info);
|
||||
}
|
||||
|
||||
return alarm_page_type;
|
||||
@ -112,19 +116,18 @@ alarm_page_get_type (void)
|
||||
static void
|
||||
alarm_page_class_init (AlarmPageClass *class)
|
||||
{
|
||||
EditorPageClass *editor_page_class;
|
||||
CompEditorPageClass *editor_page_class;
|
||||
GtkObjectClass *object_class;
|
||||
|
||||
editor_page_class = (EditorPageClass *) class;
|
||||
editor_page_class = (CompEditorPageClass *) class;
|
||||
object_class = (GtkObjectClass *) class;
|
||||
|
||||
parent_class = gtk_type_class (TYPE_EDITOR_PAGE);
|
||||
parent_class = gtk_type_class (TYPE_COMP_EDITOR_PAGE);
|
||||
|
||||
editor_page_class->get_widget = alarm_page_get_widget;
|
||||
editor_page_class->fill_widgets = alarm_page_fill_widgets;
|
||||
editor_page_class->fill_component = alarm_page_fill_component;
|
||||
editor_page_class->set_summary = alarm_page_set_summary;
|
||||
editor_page_class->get_summary = alarm_page_get_summary;
|
||||
editor_page_class->set_dates = alarm_page_set_dates;
|
||||
|
||||
object_class->destroy = alarm_page_destroy;
|
||||
@ -143,7 +146,7 @@ alarm_page_init (AlarmPage *apage)
|
||||
|
||||
priv->main = NULL;
|
||||
priv->summary = NULL;
|
||||
priv->starting_date = NULL;
|
||||
priv->date_time = NULL;
|
||||
priv->list = NULL;
|
||||
priv->add = NULL;
|
||||
priv->delete = NULL;
|
||||
@ -152,6 +155,8 @@ alarm_page_init (AlarmPage *apage)
|
||||
priv->value_units = NULL;
|
||||
priv->relative = NULL;
|
||||
priv->time = NULL;
|
||||
|
||||
priv->updating = FALSE;
|
||||
}
|
||||
|
||||
/* Frees all the alarm data and empties the list */
|
||||
@ -159,24 +164,25 @@ static void
|
||||
free_alarms (AlarmPage *apage)
|
||||
{
|
||||
AlarmPagePrivate *priv;
|
||||
GtkCList *clist;
|
||||
int i;
|
||||
|
||||
priv = apage->priv;
|
||||
|
||||
clist = GTK_CLIST (priv->list);
|
||||
if (priv->list != NULL) {
|
||||
GtkCList *clist = GTK_CLIST (priv->list);
|
||||
|
||||
for (i = 0; i < clist->rows; i++) {
|
||||
CalComponentAlarm *alarm;
|
||||
|
||||
alarm = gtk_clist_get_row_data (clist, i);
|
||||
g_assert (alarm != NULL);
|
||||
cal_component_alarm_free (alarm);
|
||||
|
||||
gtk_clist_set_row_data (clist, i, NULL);
|
||||
for (i = 0; i < clist->rows; i++) {
|
||||
CalComponentAlarm *alarm;
|
||||
|
||||
alarm = gtk_clist_get_row_data (clist, i);
|
||||
g_assert (alarm != NULL);
|
||||
cal_component_alarm_free (alarm);
|
||||
|
||||
gtk_clist_set_row_data (clist, i, NULL);
|
||||
}
|
||||
|
||||
gtk_clist_clear (clist);
|
||||
}
|
||||
|
||||
gtk_clist_clear (clist);
|
||||
}
|
||||
|
||||
/* Destroy handler for the alarm page */
|
||||
@ -210,7 +216,7 @@ alarm_page_destroy (GtkObject *object)
|
||||
|
||||
/* get_widget handler for the alarm page */
|
||||
static GtkWidget *
|
||||
alarm_page_get_widget (EditorPage *page)
|
||||
alarm_page_get_widget (CompEditorPage *page)
|
||||
{
|
||||
AlarmPage *apage;
|
||||
AlarmPagePrivate *priv;
|
||||
@ -230,10 +236,10 @@ clear_widgets (AlarmPage *apage)
|
||||
priv = apage->priv;
|
||||
|
||||
/* Summary */
|
||||
e_dialog_editable_set (priv->summary, NULL);
|
||||
gtk_label_set_text (GTK_LABEL (priv->summary), "");
|
||||
|
||||
/* Start date */
|
||||
gtk_label_set_text (GTK_LABEL (priv->starting_date), "");
|
||||
gtk_label_set_text (GTK_LABEL (priv->date_time), "");
|
||||
|
||||
/* List data */
|
||||
free_alarms (apage);
|
||||
@ -310,6 +316,7 @@ get_alarm_string (CalComponentAlarm *alarm)
|
||||
|
||||
case CAL_ALARM_NONE:
|
||||
case CAL_ALARM_UNKNOWN:
|
||||
default:
|
||||
base = _("Unknown");
|
||||
break;
|
||||
}
|
||||
@ -344,6 +351,7 @@ get_alarm_string (CalComponentAlarm *alarm)
|
||||
break;
|
||||
case CAL_ALARM_TRIGGER_NONE:
|
||||
case CAL_ALARM_TRIGGER_ABSOLUTE:
|
||||
default:
|
||||
str = g_strdup_printf ("%s %s", base,
|
||||
_("Unknown"));
|
||||
break;
|
||||
@ -377,22 +385,31 @@ append_reminder (AlarmPage *apage, CalComponentAlarm *alarm)
|
||||
|
||||
/* fill_widgets handler for the alarm page */
|
||||
static void
|
||||
alarm_page_fill_widgets (EditorPage *page, CalComponent *comp)
|
||||
alarm_page_fill_widgets (CompEditorPage *page, CalComponent *comp)
|
||||
{
|
||||
AlarmPage *apage;
|
||||
AlarmPagePrivate *priv;
|
||||
CalComponentText text;
|
||||
GList *alarms, *l;
|
||||
GtkCList *clist;
|
||||
|
||||
CompEditorPageDates dates;
|
||||
|
||||
apage = ALARM_PAGE (page);
|
||||
priv = apage->priv;
|
||||
|
||||
/* Don't send off changes during this time */
|
||||
priv->updating = TRUE;
|
||||
|
||||
/* Clean the page */
|
||||
clear_widgets (apage);
|
||||
|
||||
/* Summary */
|
||||
cal_component_get_summary (comp, &text);
|
||||
e_dialog_editable_set (priv->summary, text.value);
|
||||
alarm_page_set_summary (page, text.value);
|
||||
|
||||
/* Dates */
|
||||
comp_editor_dates (&dates, comp);
|
||||
alarm_page_set_dates (page, &dates);
|
||||
|
||||
/* List */
|
||||
if (!cal_component_has_alarms (comp))
|
||||
@ -415,11 +432,13 @@ alarm_page_fill_widgets (EditorPage *page, CalComponent *comp)
|
||||
append_reminder (apage, ca_copy);
|
||||
}
|
||||
cal_obj_uid_list_free (alarms);
|
||||
|
||||
priv->updating = FALSE;
|
||||
}
|
||||
|
||||
/* fill_component handler for the alarm page */
|
||||
static void
|
||||
alarm_page_fill_component (EditorPage *page, CalComponent *comp)
|
||||
alarm_page_fill_component (CompEditorPage *page, CalComponent *comp)
|
||||
{
|
||||
AlarmPage *apage;
|
||||
AlarmPagePrivate *priv;
|
||||
@ -462,48 +481,31 @@ alarm_page_fill_component (EditorPage *page, CalComponent *comp)
|
||||
|
||||
/* set_summary handler for the alarm page */
|
||||
static void
|
||||
alarm_page_set_summary (EditorPage *page, const char *summary)
|
||||
alarm_page_set_summary (CompEditorPage *page, const char *summary)
|
||||
{
|
||||
AlarmPage *apage;
|
||||
AlarmPagePrivate *priv;
|
||||
|
||||
gchar *s;
|
||||
|
||||
apage = ALARM_PAGE (page);
|
||||
priv = apage->priv;
|
||||
|
||||
gtk_signal_handler_block_by_data (GTK_OBJECT (priv->summary), apage);
|
||||
e_utf8_gtk_entry_set_text (GTK_ENTRY (priv->summary), summary);
|
||||
gtk_signal_handler_unblock_by_data (GTK_OBJECT (priv->summary), apage);
|
||||
}
|
||||
|
||||
/* get_summary handler for the alarm page */
|
||||
static char *
|
||||
alarm_page_get_summary (EditorPage *page)
|
||||
{
|
||||
AlarmPage *apage;
|
||||
AlarmPagePrivate *priv;
|
||||
|
||||
apage = ALARM_PAGE (page);
|
||||
priv = apage->priv;
|
||||
|
||||
return e_utf8_gtk_entry_get_text (GTK_ENTRY (priv->summary));
|
||||
s = e_utf8_to_gtk_string (priv->summary, summary);
|
||||
gtk_label_set_text (GTK_LABEL (priv->summary), s);
|
||||
g_free (s);
|
||||
}
|
||||
|
||||
/* set_dates handler for the alarm page */
|
||||
static void
|
||||
alarm_page_set_dates (EditorPage *page, time_t start, time_t end)
|
||||
alarm_page_set_dates (CompEditorPage *page, CompEditorPageDates *dates)
|
||||
{
|
||||
AlarmPage *apage;
|
||||
AlarmPagePrivate *priv;
|
||||
char str[128];
|
||||
struct tm tm;
|
||||
|
||||
apage = ALARM_PAGE (page);
|
||||
priv = apage->priv;
|
||||
|
||||
tm = *localtime (&start);
|
||||
strftime (str, sizeof (str), _("%A %b %d %Y %H:%M:%S"), &tm);
|
||||
|
||||
gtk_label_set_text (GTK_LABEL (priv->starting_date), str);
|
||||
comp_editor_date_label (dates, priv->date_time);
|
||||
}
|
||||
|
||||
|
||||
@ -554,23 +556,18 @@ static gboolean
|
||||
get_widgets (AlarmPage *apage)
|
||||
{
|
||||
AlarmPagePrivate *priv;
|
||||
GtkWidget *toplevel;
|
||||
|
||||
priv = apage->priv;
|
||||
|
||||
#define GW(name) glade_xml_get_widget (priv->xml, name)
|
||||
|
||||
toplevel = GW ("alarm-toplevel");
|
||||
priv->main = GW ("alarm-page");
|
||||
if (!(toplevel && priv->main))
|
||||
return FALSE;
|
||||
|
||||
g_assert (priv->main);
|
||||
gtk_widget_ref (priv->main);
|
||||
gtk_widget_unparent (priv->main);
|
||||
gtk_widget_destroy (toplevel);
|
||||
|
||||
|
||||
priv->summary = GW ("summary");
|
||||
priv->starting_date = GW ("starting-date");
|
||||
priv->date_time = GW ("date-time");
|
||||
|
||||
priv->list = GW ("list");
|
||||
priv->add = GW ("add");
|
||||
@ -585,7 +582,7 @@ get_widgets (AlarmPage *apage)
|
||||
#undef GW
|
||||
|
||||
return (priv->summary
|
||||
&& priv->starting_date
|
||||
&& priv->date_time
|
||||
&& priv->list
|
||||
&& priv->add
|
||||
&& priv->delete
|
||||
@ -596,24 +593,18 @@ get_widgets (AlarmPage *apage)
|
||||
&& priv->time);
|
||||
}
|
||||
|
||||
/* Callback used when the summary changes; we emit the notification signal. */
|
||||
static void
|
||||
summary_changed_cb (GtkEditable *editable, gpointer data)
|
||||
{
|
||||
AlarmPage *apage;
|
||||
|
||||
apage = ALARM_PAGE (data);
|
||||
editor_page_notify_summary_changed (EDITOR_PAGE (apage));
|
||||
}
|
||||
|
||||
/* This is called when any field is changed; it notifies upstream. */
|
||||
static void
|
||||
field_changed_cb (GtkWidget *widget, gpointer data)
|
||||
{
|
||||
AlarmPage *apage;
|
||||
|
||||
AlarmPagePrivate *priv;
|
||||
|
||||
apage = ALARM_PAGE (data);
|
||||
editor_page_notify_changed (EDITOR_PAGE (apage));
|
||||
priv = apage->priv;
|
||||
|
||||
if (!priv->updating)
|
||||
comp_editor_page_notify_changed (COMP_EDITOR_PAGE (apage));
|
||||
}
|
||||
|
||||
/* Callback used for the "add reminder" button */
|
||||
@ -639,15 +630,18 @@ add_clicked_cb (GtkButton *button, gpointer data)
|
||||
|
||||
switch (e_dialog_option_menu_get (priv->value_units, value_map)) {
|
||||
case MINUTES:
|
||||
trigger.u.rel_duration.minutes = e_dialog_spin_get_int (priv->interval_value);
|
||||
trigger.u.rel_duration.minutes =
|
||||
e_dialog_spin_get_int (priv->interval_value);
|
||||
break;
|
||||
|
||||
case HOURS:
|
||||
trigger.u.rel_duration.hours = e_dialog_spin_get_int (priv->interval_value);
|
||||
trigger.u.rel_duration.hours =
|
||||
e_dialog_spin_get_int (priv->interval_value);
|
||||
break;
|
||||
|
||||
case DAYS:
|
||||
trigger.u.rel_duration.days = e_dialog_spin_get_int (priv->interval_value);
|
||||
trigger.u.rel_duration.days =
|
||||
e_dialog_spin_get_int (priv->interval_value);
|
||||
break;
|
||||
|
||||
default:
|
||||
@ -702,10 +696,6 @@ init_widgets (AlarmPage *apage)
|
||||
|
||||
priv = apage->priv;
|
||||
|
||||
/* Summary */
|
||||
gtk_signal_connect (GTK_OBJECT (priv->summary), "changed",
|
||||
GTK_SIGNAL_FUNC (summary_changed_cb), apage);
|
||||
|
||||
/* Reminder buttons */
|
||||
gtk_signal_connect (GTK_OBJECT (priv->add), "clicked",
|
||||
GTK_SIGNAL_FUNC (add_clicked_cb), apage);
|
||||
@ -739,14 +729,17 @@ alarm_page_construct (AlarmPage *apage)
|
||||
|
||||
priv = apage->priv;
|
||||
|
||||
priv->xml = glade_xml_new (EVOLUTION_GLADEDIR "/alarm-page.glade", NULL);
|
||||
priv->xml = glade_xml_new (EVOLUTION_GLADEDIR "/alarm-page.glade",
|
||||
NULL);
|
||||
if (!priv->xml) {
|
||||
g_message ("alarm_page_construct(): Could not load the Glade XML file!");
|
||||
g_message ("alarm_page_construct(): "
|
||||
"Could not load the Glade XML file!");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (!get_widgets (apage)) {
|
||||
g_message ("alarm_page_construct(): Could not find all widgets in the XML file!");
|
||||
g_message ("alarm_page_construct(): "
|
||||
"Could not find all widgets in the XML file!");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
@ -18,6 +18,7 @@
|
||||
<widget>
|
||||
<class>GtkWindow</class>
|
||||
<name>alarm-toplevel</name>
|
||||
<visible>False</visible>
|
||||
<title>window1</title>
|
||||
<type>GTK_WINDOW_TOPLEVEL</type>
|
||||
<position>GTK_WIN_POS_NONE</position>
|
||||
@ -36,7 +37,7 @@
|
||||
<widget>
|
||||
<class>GtkFrame</class>
|
||||
<name>frame33</name>
|
||||
<label>Appointment Basics</label>
|
||||
<label>Basics</label>
|
||||
<label_xalign>0</label_xalign>
|
||||
<shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
|
||||
<child>
|
||||
@ -58,14 +59,13 @@
|
||||
<widget>
|
||||
<class>GtkLabel</class>
|
||||
<name>label62</name>
|
||||
<label>Su_mmary:</label>
|
||||
<label>Summary:</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>
|
||||
@ -82,34 +82,10 @@
|
||||
</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>GtkLabel</class>
|
||||
<name>label63</name>
|
||||
<label>_Starting date:</label>
|
||||
<label>Date/Time:</label>
|
||||
<justify>GTK_JUSTIFY_CENTER</justify>
|
||||
<wrap>False</wrap>
|
||||
<xalign>0</xalign>
|
||||
@ -134,13 +110,13 @@
|
||||
|
||||
<widget>
|
||||
<class>GtkLabel</class>
|
||||
<name>starting date</name>
|
||||
<label>assbarn it</label>
|
||||
<justify>GTK_JUSTIFY_CENTER</justify>
|
||||
<name>date-time</name>
|
||||
<label></label>
|
||||
<justify>GTK_JUSTIFY_LEFT</justify>
|
||||
<wrap>False</wrap>
|
||||
<xalign>0</xalign>
|
||||
<yalign>0</yalign>
|
||||
<xpad>0</xpad>
|
||||
<xalign>0.5</xalign>
|
||||
<yalign>0.5</yalign>
|
||||
<xpad>4</xpad>
|
||||
<ypad>0</ypad>
|
||||
<child>
|
||||
<left_attach>1</left_attach>
|
||||
@ -157,6 +133,32 @@
|
||||
<yfill>True</yfill>
|
||||
</child>
|
||||
</widget>
|
||||
|
||||
<widget>
|
||||
<class>GtkLabel</class>
|
||||
<name>summary</name>
|
||||
<label></label>
|
||||
<justify>GTK_JUSTIFY_LEFT</justify>
|
||||
<wrap>False</wrap>
|
||||
<xalign>0</xalign>
|
||||
<yalign>0.5</yalign>
|
||||
<xpad>4</xpad>
|
||||
<ypad>0</ypad>
|
||||
<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>True</xfill>
|
||||
<yfill>False</yfill>
|
||||
</child>
|
||||
</widget>
|
||||
</widget>
|
||||
</widget>
|
||||
|
||||
@ -192,7 +194,7 @@
|
||||
|
||||
<widget>
|
||||
<class>GtkOptionMenu</class>
|
||||
<name>reminder-action</name>
|
||||
<name>action</name>
|
||||
<can_focus>True</can_focus>
|
||||
<items>Show a dialog
|
||||
Play a sound
|
||||
@ -209,7 +211,7 @@ Run a program
|
||||
|
||||
<widget>
|
||||
<class>GtkSpinButton</class>
|
||||
<name>reminder-interval-value</name>
|
||||
<name>interval-value</name>
|
||||
<can_focus>True</can_focus>
|
||||
<climb_rate>1</climb_rate>
|
||||
<digits>0</digits>
|
||||
@ -232,7 +234,7 @@ Run a program
|
||||
|
||||
<widget>
|
||||
<class>GtkOptionMenu</class>
|
||||
<name>reminder-value-units</name>
|
||||
<name>value-units</name>
|
||||
<can_focus>True</can_focus>
|
||||
<items>minute(s)
|
||||
hour(s)
|
||||
@ -248,7 +250,7 @@ day(s)
|
||||
|
||||
<widget>
|
||||
<class>GtkOptionMenu</class>
|
||||
<name>reminder-relative</name>
|
||||
<name>relative</name>
|
||||
<can_focus>True</can_focus>
|
||||
<items>before
|
||||
after
|
||||
@ -263,7 +265,7 @@ after
|
||||
|
||||
<widget>
|
||||
<class>GtkOptionMenu</class>
|
||||
<name>reminder-time</name>
|
||||
<name>time</name>
|
||||
<can_focus>True</can_focus>
|
||||
<items>start of appointment
|
||||
end of appointment
|
||||
@ -281,7 +283,6 @@ end of appointment
|
||||
<name>button9</name>
|
||||
<can_focus>True</can_focus>
|
||||
<label>Settings...</label>
|
||||
<relief>GTK_RELIEF_NORMAL</relief>
|
||||
<child>
|
||||
<padding>0</padding>
|
||||
<expand>False</expand>
|
||||
@ -316,7 +317,7 @@ end of appointment
|
||||
|
||||
<widget>
|
||||
<class>GtkCList</class>
|
||||
<name>reminder-list</name>
|
||||
<name>list</name>
|
||||
<can_focus>True</can_focus>
|
||||
<columns>1</columns>
|
||||
<column_widths>80</column_widths>
|
||||
@ -356,20 +357,18 @@ end of appointment
|
||||
|
||||
<widget>
|
||||
<class>GtkButton</class>
|
||||
<name>reminder-add</name>
|
||||
<name>add</name>
|
||||
<can_default>True</can_default>
|
||||
<can_focus>True</can_focus>
|
||||
<label>Add</label>
|
||||
<relief>GTK_RELIEF_NORMAL</relief>
|
||||
</widget>
|
||||
|
||||
<widget>
|
||||
<class>GtkButton</class>
|
||||
<name>reminder-delete</name>
|
||||
<name>delete</name>
|
||||
<can_default>True</can_default>
|
||||
<can_focus>True</can_focus>
|
||||
<label>Delete</label>
|
||||
<relief>GTK_RELIEF_NORMAL</relief>
|
||||
</widget>
|
||||
</widget>
|
||||
</widget>
|
||||
|
||||
@ -25,7 +25,7 @@
|
||||
#ifndef ALARM_PAGE_H
|
||||
#define ALARM_PAGE_H
|
||||
|
||||
#include "editor-page.h"
|
||||
#include "comp-editor-page.h"
|
||||
|
||||
BEGIN_GNOME_DECLS
|
||||
|
||||
@ -33,29 +33,27 @@ BEGIN_GNOME_DECLS
|
||||
|
||||
#define TYPE_ALARM_PAGE (alarm_page_get_type ())
|
||||
#define ALARM_PAGE(obj) (GTK_CHECK_CAST ((obj), TYPE_ALARM_PAGE, AlarmPage))
|
||||
#define ALARM_PAGE_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), TYPE_ALARM_PAGE, \
|
||||
AlarmPageClass))
|
||||
#define ALARM_PAGE_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), TYPE_ALARM_PAGE, AlarmPageClass))
|
||||
#define IS_ALARM_PAGE(obj) (GTK_CHECK_TYPE ((obj), TYPE_ALARM_PAGE))
|
||||
#define IS_ALARM_PAGE_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), TYPE_ALARM_PAGE))
|
||||
|
||||
typedef struct _AlarmPagePrivate AlarmPagePrivate;
|
||||
|
||||
typedef struct {
|
||||
EditorPage page;
|
||||
CompEditorPage page;
|
||||
|
||||
/* Private data */
|
||||
AlarmPagePrivate *priv;
|
||||
} AlarmPage;
|
||||
|
||||
typedef struct {
|
||||
EditorPageClass parent_class;
|
||||
CompEditorPageClass parent_class;
|
||||
} AlarmPageClass;
|
||||
|
||||
GtkType alarm_page_get_type (void);
|
||||
|
||||
GtkType alarm_page_get_type (void);
|
||||
AlarmPage *alarm_page_construct (AlarmPage *apage);
|
||||
|
||||
AlarmPage *alarm_page_new (void);
|
||||
AlarmPage *alarm_page_new (void);
|
||||
|
||||
|
||||
|
||||
|
||||
277
calendar/gui/dialogs/comp-editor-page.c
Normal file
277
calendar/gui/dialogs/comp-editor-page.c
Normal file
@ -0,0 +1,277 @@
|
||||
/* Evolution calendar - Base class for calendar component editor pages
|
||||
*
|
||||
* Copyright (C) 2001 Ximian, Inc.
|
||||
*
|
||||
* Authors: Federico Mena-Quintero <federico@ximian.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#include <gtk/gtksignal.h>
|
||||
#include "comp-editor-page.h"
|
||||
|
||||
|
||||
|
||||
static void comp_editor_page_class_init (CompEditorPageClass *class);
|
||||
|
||||
/* Signal IDs */
|
||||
|
||||
enum {
|
||||
CHANGED,
|
||||
SUMMARY_CHANGED,
|
||||
DATES_CHANGED,
|
||||
LAST_SIGNAL
|
||||
};
|
||||
|
||||
static guint comp_editor_page_signals[LAST_SIGNAL];
|
||||
|
||||
#define CLASS(page) (COMP_EDITOR_PAGE_CLASS (GTK_OBJECT (page)->klass))
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* comp_editor_page_get_type:
|
||||
*
|
||||
* Registers the #CompEditorPage class if necessary, and returns the type ID
|
||||
* associated to it.
|
||||
*
|
||||
* Return value: The type ID of the #CompEditorPage class.
|
||||
**/
|
||||
GtkType
|
||||
comp_editor_page_get_type (void)
|
||||
{
|
||||
static GtkType comp_editor_page_type = 0;
|
||||
|
||||
if (!comp_editor_page_type) {
|
||||
static const GtkTypeInfo comp_editor_page_info = {
|
||||
"CompEditorPage",
|
||||
sizeof (CompEditorPage),
|
||||
sizeof (CompEditorPageClass),
|
||||
(GtkClassInitFunc) comp_editor_page_class_init,
|
||||
(GtkObjectInitFunc) NULL,
|
||||
NULL, /* reserved_1 */
|
||||
NULL, /* reserved_2 */
|
||||
(GtkClassInitFunc) NULL
|
||||
};
|
||||
|
||||
comp_editor_page_type =
|
||||
gtk_type_unique (GTK_TYPE_OBJECT,
|
||||
&comp_editor_page_info);
|
||||
}
|
||||
|
||||
return comp_editor_page_type;
|
||||
}
|
||||
|
||||
/* Class initialization function for the abstract editor page */
|
||||
static void
|
||||
comp_editor_page_class_init (CompEditorPageClass *class)
|
||||
{
|
||||
GtkObjectClass *object_class;
|
||||
|
||||
object_class = (GtkObjectClass *) class;
|
||||
|
||||
comp_editor_page_signals[CHANGED] =
|
||||
gtk_signal_new ("changed",
|
||||
GTK_RUN_FIRST,
|
||||
object_class->type,
|
||||
GTK_SIGNAL_OFFSET (CompEditorPageClass,
|
||||
changed),
|
||||
gtk_marshal_NONE__NONE,
|
||||
GTK_TYPE_NONE, 0);
|
||||
|
||||
comp_editor_page_signals[SUMMARY_CHANGED] =
|
||||
gtk_signal_new ("summary_changed",
|
||||
GTK_RUN_FIRST,
|
||||
object_class->type,
|
||||
GTK_SIGNAL_OFFSET (CompEditorPageClass,
|
||||
summary_changed),
|
||||
gtk_marshal_NONE__POINTER,
|
||||
GTK_TYPE_NONE, 1, GTK_TYPE_POINTER);
|
||||
|
||||
comp_editor_page_signals[DATES_CHANGED] =
|
||||
gtk_signal_new ("dates_changed",
|
||||
GTK_RUN_FIRST,
|
||||
object_class->type,
|
||||
GTK_SIGNAL_OFFSET (CompEditorPageClass,
|
||||
dates_changed),
|
||||
gtk_marshal_NONE__POINTER,
|
||||
GTK_TYPE_NONE, 1, GTK_TYPE_POINTER);
|
||||
|
||||
gtk_object_class_add_signals (object_class,
|
||||
comp_editor_page_signals,
|
||||
LAST_SIGNAL);
|
||||
|
||||
class->changed = NULL;
|
||||
class->summary_changed = NULL;
|
||||
class->dates_changed = NULL;
|
||||
|
||||
class->get_widget = NULL;
|
||||
class->fill_widgets = NULL;
|
||||
class->fill_component = NULL;
|
||||
class->set_summary = NULL;
|
||||
class->set_dates = NULL;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* comp_editor_page_get_widget:
|
||||
* @page: An editor page.
|
||||
*
|
||||
* Queries the main widget of an editor page.
|
||||
*
|
||||
* Return value: The widget that is the page's upper container. It should
|
||||
* normally be inserted in a notebook widget.
|
||||
**/
|
||||
GtkWidget *
|
||||
comp_editor_page_get_widget (CompEditorPage *page)
|
||||
{
|
||||
g_return_val_if_fail (page != NULL, NULL);
|
||||
g_return_val_if_fail (IS_COMP_EDITOR_PAGE (page), NULL);
|
||||
|
||||
g_assert (CLASS (page)->get_widget != NULL);
|
||||
return (* CLASS (page)->get_widget) (page);
|
||||
}
|
||||
|
||||
/**
|
||||
* comp_editor_page_fill_widgets:
|
||||
* @page: An editor page.
|
||||
* @comp: A calendar component.
|
||||
*
|
||||
* Fills the widgets of an editor page with the data from a calendar component.
|
||||
**/
|
||||
void
|
||||
comp_editor_page_fill_widgets (CompEditorPage *page, CalComponent *comp)
|
||||
{
|
||||
g_return_if_fail (page != NULL);
|
||||
g_return_if_fail (IS_COMP_EDITOR_PAGE (page));
|
||||
g_return_if_fail (comp != NULL);
|
||||
|
||||
g_assert (CLASS (page)->fill_widgets != NULL);
|
||||
(* CLASS (page)->fill_widgets) (page, comp);
|
||||
}
|
||||
|
||||
/**
|
||||
* comp_editor_page_fill_component:
|
||||
* @page: An editor page.
|
||||
* @comp: A calendar component.
|
||||
*
|
||||
* Takes the data from the widgets of an editor page and sets it on a calendar
|
||||
* component, replacing the contents of the properties that the editor page
|
||||
* knows how to manipulate.
|
||||
**/
|
||||
void
|
||||
comp_editor_page_fill_component (CompEditorPage *page, CalComponent *comp)
|
||||
{
|
||||
g_return_if_fail (page != NULL);
|
||||
g_return_if_fail (IS_COMP_EDITOR_PAGE (page));
|
||||
g_return_if_fail (comp != NULL);
|
||||
|
||||
if (CLASS (page)->fill_component != NULL)
|
||||
(* CLASS (page)->fill_component) (page, comp);
|
||||
}
|
||||
|
||||
/**
|
||||
* comp_editor_page_set_summary:
|
||||
* @page: An editor page
|
||||
* @summary: The text of the new summary value
|
||||
*
|
||||
* Sets the summary value for this group of widgets
|
||||
**/
|
||||
void
|
||||
comp_editor_page_set_summary (CompEditorPage *page, const char *summary)
|
||||
{
|
||||
g_return_if_fail (page != NULL);
|
||||
g_return_if_fail (IS_COMP_EDITOR_PAGE (page));
|
||||
|
||||
if (CLASS (page)->set_summary != NULL)
|
||||
(* CLASS (page)->set_summary) (page, summary);
|
||||
}
|
||||
|
||||
/**
|
||||
* comp_editor_page_set_dates:
|
||||
* @page: An editor page
|
||||
* @dates: A collection of various dates in time_t format
|
||||
*
|
||||
* Sets the date values for this group of widgets
|
||||
**/
|
||||
void
|
||||
comp_editor_page_set_dates (CompEditorPage *page, CompEditorPageDates *dates)
|
||||
{
|
||||
g_return_if_fail (page != NULL);
|
||||
g_return_if_fail (IS_COMP_EDITOR_PAGE (page));
|
||||
|
||||
if (CLASS (page)->set_dates != NULL)
|
||||
(* CLASS (page)->set_dates) (page, dates);
|
||||
}
|
||||
|
||||
/**
|
||||
* comp_editor_page_notify_changed:
|
||||
* @page: An editor page.
|
||||
*
|
||||
* Makes an editor page emit the "changed" signal. This is meant to be
|
||||
* used only by page implementations.
|
||||
**/
|
||||
void
|
||||
comp_editor_page_notify_changed (CompEditorPage *page)
|
||||
{
|
||||
g_return_if_fail (page != NULL);
|
||||
g_return_if_fail (IS_COMP_EDITOR_PAGE (page));
|
||||
|
||||
gtk_signal_emit (GTK_OBJECT (page), comp_editor_page_signals[CHANGED]);
|
||||
}
|
||||
|
||||
/**
|
||||
* comp_editor_page_notify_summary_changed:
|
||||
* @page: An editor page.
|
||||
*
|
||||
* Makes an editor page emit the "summary_changed" signal. This is meant to be
|
||||
* used only by page implementations.
|
||||
**/
|
||||
void
|
||||
comp_editor_page_notify_summary_changed (CompEditorPage *page,
|
||||
const char *summary)
|
||||
{
|
||||
g_return_if_fail (page != NULL);
|
||||
g_return_if_fail (IS_COMP_EDITOR_PAGE (page));
|
||||
|
||||
|
||||
gtk_signal_emit (GTK_OBJECT (page),
|
||||
comp_editor_page_signals[SUMMARY_CHANGED],
|
||||
summary);
|
||||
}
|
||||
|
||||
/**
|
||||
* comp_editor_page_notify_dates_changed:
|
||||
* @page: An editor page.
|
||||
*
|
||||
* Makes an editor page emit the "dates_changed" signal. This is meant to be
|
||||
* used only by page implementations.
|
||||
**/
|
||||
void
|
||||
comp_editor_page_notify_dates_changed (CompEditorPage *page,
|
||||
CompEditorPageDates *dates)
|
||||
{
|
||||
g_return_if_fail (page != NULL);
|
||||
g_return_if_fail (IS_COMP_EDITOR_PAGE (page));
|
||||
|
||||
gtk_signal_emit (GTK_OBJECT (page),
|
||||
comp_editor_page_signals[DATES_CHANGED],
|
||||
dates);
|
||||
}
|
||||
93
calendar/gui/dialogs/comp-editor-page.h
Normal file
93
calendar/gui/dialogs/comp-editor-page.h
Normal file
@ -0,0 +1,93 @@
|
||||
/* Evolution calendar - Base class for calendar component editor pages
|
||||
*
|
||||
* Copyright (C) 2001 Ximian, Inc.
|
||||
*
|
||||
* Authors: Federico Mena-Quintero <federico@ximian.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifndef COMP_EDITOR_PAGE_H
|
||||
#define COMP_EDITOR_PAGE_H
|
||||
|
||||
#include <time.h>
|
||||
#include <libgnome/gnome-defs.h>
|
||||
#include <gtk/gtkwidget.h>
|
||||
#include <cal-util/cal-component.h>
|
||||
|
||||
BEGIN_GNOME_DECLS
|
||||
|
||||
|
||||
|
||||
#define TYPE_COMP_EDITOR_PAGE (comp_editor_page_get_type ())
|
||||
#define COMP_EDITOR_PAGE(obj) (GTK_CHECK_CAST ((obj), TYPE_COMP_EDITOR_PAGE, CompEditorPage))
|
||||
#define COMP_EDITOR_PAGE_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), TYPE_COMP_EDITOR_PAGE, CompEditorPageClass))
|
||||
#define IS_COMP_EDITOR_PAGE(obj) (GTK_CHECK_TYPE ((obj), TYPE_COMP_EDITOR_PAGE))
|
||||
#define IS_COMP_EDITOR_PAGE_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), TYPE_COMP_EDITOR_PAGE))
|
||||
|
||||
typedef struct {
|
||||
time_t start;
|
||||
time_t end;
|
||||
time_t due;
|
||||
time_t complete;
|
||||
} CompEditorPageDates;
|
||||
|
||||
typedef struct {
|
||||
GtkObject object;
|
||||
} CompEditorPage;
|
||||
|
||||
typedef struct {
|
||||
GtkObjectClass parent_class;
|
||||
|
||||
/* Notification signals */
|
||||
|
||||
void (* changed) (CompEditorPage *page);
|
||||
void (* summary_changed) (CompEditorPage *page, const char *summary);
|
||||
void (* dates_changed) (CompEditorPage *page, const char *dates);
|
||||
|
||||
/* Virtual methods */
|
||||
|
||||
GtkWidget *(* get_widget) (CompEditorPage *page);
|
||||
|
||||
void (* fill_widgets) (CompEditorPage *page, CalComponent *comp);
|
||||
void (* fill_component) (CompEditorPage *page, CalComponent *comp);
|
||||
|
||||
void (* set_summary) (CompEditorPage *page, const char *summary);
|
||||
void (* set_dates) (CompEditorPage *page, CompEditorPageDates *dates);
|
||||
} CompEditorPageClass;
|
||||
|
||||
|
||||
GtkType comp_editor_page_get_type (void);
|
||||
GtkWidget *comp_editor_page_get_widget (CompEditorPage *page);
|
||||
void comp_editor_page_fill_widgets (CompEditorPage *page,
|
||||
CalComponent *comp);
|
||||
void comp_editor_page_fill_component (CompEditorPage *page,
|
||||
CalComponent *comp);
|
||||
void comp_editor_page_set_summary (CompEditorPage *page,
|
||||
const char *summary);
|
||||
void comp_editor_page_set_dates (CompEditorPage *page,
|
||||
CompEditorPageDates *dates);
|
||||
void comp_editor_page_notify_changed (CompEditorPage *page);
|
||||
void comp_editor_page_notify_summary_changed (CompEditorPage *page,
|
||||
const char *summary);
|
||||
void comp_editor_page_notify_dates_changed (CompEditorPage *page,
|
||||
CompEditorPageDates *dates);
|
||||
|
||||
|
||||
|
||||
|
||||
END_GNOME_DECLS
|
||||
|
||||
#endif
|
||||
129
calendar/gui/dialogs/comp-editor-util.c
Normal file
129
calendar/gui/dialogs/comp-editor-util.c
Normal file
@ -0,0 +1,129 @@
|
||||
/* Evolution calendar - Widget utilities
|
||||
*
|
||||
* Copyright (C) 2000 Helix Code, Inc.
|
||||
*
|
||||
* Author: Federico Mena-Quintero <federico@helixcode.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#include <string.h>
|
||||
#include <glib.h>
|
||||
#include <libgnome/gnome-defs.h>
|
||||
#include <libgnome/gnome-i18n.h>
|
||||
#include <e-util/e-time-utils.h>
|
||||
#include "../calendar-config.h"
|
||||
#include "comp-editor-util.h"
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* comp_editor_dates:
|
||||
* @dates: A structure to be filled out with dates of a component
|
||||
* @comp: The component to extract the dates from
|
||||
*
|
||||
* Extracts the dates from the calendar component into the
|
||||
* CompEditorPageDates structure
|
||||
**/
|
||||
void
|
||||
comp_editor_dates (CompEditorPageDates *dates, CalComponent *comp)
|
||||
{
|
||||
CalComponentDateTime dt;
|
||||
struct icaltimetype *completed;
|
||||
|
||||
dates->start = 0;
|
||||
dates->end = 0;
|
||||
dates->due = 0;
|
||||
dates->complete = 0;
|
||||
|
||||
cal_component_get_dtstart (comp, &dt);
|
||||
if (dt.value)
|
||||
dates->start = icaltime_as_timet (*dt.value);
|
||||
|
||||
cal_component_get_dtend (comp, &dt);
|
||||
if (dt.value)
|
||||
dates->end = icaltime_as_timet (*dt.value);
|
||||
|
||||
cal_component_get_due (comp, &dt);
|
||||
if (dt.value)
|
||||
dates->due = icaltime_as_timet (*dt.value);
|
||||
|
||||
cal_component_get_completed (comp, &completed);
|
||||
if (completed) {
|
||||
dates->complete = icaltime_as_timet (*completed);
|
||||
cal_component_free_icaltimetype (completed);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
write_label_piece (time_t t, char *buffer, int size, char *stext, char *etext)
|
||||
{
|
||||
struct tm *tmp_tm;
|
||||
int len;
|
||||
|
||||
tmp_tm = localtime (&t);
|
||||
if (stext != NULL)
|
||||
strcat (buffer, stext);
|
||||
|
||||
len = strlen (buffer);
|
||||
e_time_format_date_and_time (tmp_tm,
|
||||
calendar_config_get_24_hour_format (),
|
||||
FALSE, FALSE,
|
||||
&buffer[len], size - len);
|
||||
if (etext != NULL)
|
||||
strcat (buffer, etext);
|
||||
}
|
||||
|
||||
/**
|
||||
* comp_editor_date_label:
|
||||
* @dates: The dates to use in constructing a label
|
||||
* @label: The label whose text is to be set
|
||||
*
|
||||
* Set the text of a label based on the dates available and the user's
|
||||
* formatting preferences
|
||||
**/
|
||||
void
|
||||
comp_editor_date_label (CompEditorPageDates *dates, GtkWidget *label)
|
||||
{
|
||||
static char buffer[1024];
|
||||
|
||||
buffer[0] = '\0';
|
||||
|
||||
if (dates->start > 0)
|
||||
write_label_piece (dates->start, buffer, 1024, NULL, NULL);
|
||||
|
||||
if (dates->end > 0 && dates->start > 0)
|
||||
write_label_piece (dates->end, buffer, 1024, _(" to "), NULL);
|
||||
|
||||
if (dates->complete > 0) {
|
||||
if (dates->start > 0)
|
||||
write_label_piece (dates->complete, buffer, 1024, _(" (Completed "), ")");
|
||||
else
|
||||
write_label_piece (dates->complete, buffer, 1024, _(" Completed "), NULL);
|
||||
}
|
||||
|
||||
if (dates->due > 0 && dates->complete == 0) {
|
||||
if (dates->start > 0)
|
||||
write_label_piece (dates->due, buffer, 1024, _(" (Due "), ")");
|
||||
else
|
||||
write_label_piece (dates->due, buffer, 1024, _("Due "), NULL);
|
||||
}
|
||||
|
||||
gtk_label_set_text (GTK_LABEL (label), buffer);
|
||||
}
|
||||
31
calendar/gui/dialogs/comp-editor-util.h
Normal file
31
calendar/gui/dialogs/comp-editor-util.h
Normal file
@ -0,0 +1,31 @@
|
||||
/* Evolution calendar - Widget utilities
|
||||
*
|
||||
* Copyright (C) 2000 Helix Code, Inc.
|
||||
*
|
||||
* Author: JP Rosevear <jpr@ximian.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifndef _COMP_EDITOR_UTIL_H_
|
||||
#define _COMP_EDITOR_UTIL_H_
|
||||
|
||||
#include <gtk/gtkwidget.h>
|
||||
#include "comp-editor-page.h"
|
||||
|
||||
void comp_editor_dates (CompEditorPageDates *date, CalComponent *comp);
|
||||
void comp_editor_date_label (CompEditorPageDates *dates, GtkWidget *label);
|
||||
|
||||
#endif
|
||||
@ -23,12 +23,21 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#include <gnome.h>
|
||||
#include <gal/widgets/e-unicode.h>
|
||||
#include "save-comp.h"
|
||||
#include "comp-editor.h"
|
||||
|
||||
|
||||
|
||||
/* Private part of the CompEditor structure */
|
||||
struct _CompEditorPrivate {
|
||||
/* Client to use */
|
||||
CalClient *client;
|
||||
|
||||
/* Calendar object/uid we are editing; this is an internal copy */
|
||||
CalComponent *comp;
|
||||
|
||||
/* The pages we have */
|
||||
GList *pages;
|
||||
|
||||
@ -37,6 +46,8 @@ struct _CompEditorPrivate {
|
||||
|
||||
/* Notebook to hold the pages */
|
||||
GtkNotebook *notebook;
|
||||
|
||||
gboolean changed;
|
||||
};
|
||||
|
||||
|
||||
@ -45,6 +56,15 @@ static void comp_editor_class_init (CompEditorClass *class);
|
||||
static void comp_editor_init (CompEditor *editor);
|
||||
static void comp_editor_destroy (GtkObject *object);
|
||||
|
||||
static void page_summary_changed_cb (GtkWidget *widget, const char *summary, gpointer data);
|
||||
static void page_dates_changed_cb (GtkWidget *widget, CompEditorPageDates *dates, gpointer data);
|
||||
static void page_changed_cb (GtkWidget *widget, gpointer data);
|
||||
|
||||
static void save_clicked_cb (GtkWidget *widget, gpointer data);
|
||||
static void close_clicked_cb (GtkWidget *widget, gpointer data);
|
||||
static void help_clicked_cb (GtkWidget *widget, gpointer data);
|
||||
static gint delete_event_cb (GtkWidget *widget, GdkEvent *event, gpointer data);
|
||||
|
||||
static GtkObjectClass *parent_class;
|
||||
|
||||
|
||||
@ -52,21 +72,22 @@ static GtkObjectClass *parent_class;
|
||||
GtkType
|
||||
comp_editor_get_type (void)
|
||||
{
|
||||
static GtkType comp_editor_type;
|
||||
static GtkType comp_editor_type = 0;
|
||||
|
||||
if (!comp_editor_type) {
|
||||
static const GtkTypeInfo comp_editor_info = {
|
||||
GtkTypeInfo comp_editor_info = {
|
||||
"CompEditor",
|
||||
sizeof (CompEditor),
|
||||
sizeof (CompEditorClass),
|
||||
(GtkClassInitFunc) comp_editor_class_init,
|
||||
(GtkObjectInitfunc) comp_editor_init,
|
||||
(GtkObjectInitFunc) comp_editor_init,
|
||||
NULL, /* reserved_1 */
|
||||
NULL, /* reserved_2 */
|
||||
(GtkClassInitFunc) NULL
|
||||
}
|
||||
};
|
||||
|
||||
comp_editor_type = gtk_type_unique (GTK_TYPE_OBJECT, &comp_editor_info);
|
||||
comp_editor_type = gtk_type_unique (GTK_TYPE_OBJECT,
|
||||
&comp_editor_info);
|
||||
}
|
||||
|
||||
return comp_editor_type;
|
||||
@ -110,23 +131,30 @@ setup_widgets (CompEditor *editor)
|
||||
/* Notebook */
|
||||
|
||||
priv->notebook = GTK_NOTEBOOK (gtk_notebook_new ());
|
||||
gtk_box_pack_start (GTK_BOX (vbox), priv->notebook, TRUE, TRUE, 0);
|
||||
gtk_box_pack_start (GTK_BOX (vbox), GTK_WIDGET (priv->notebook),
|
||||
TRUE, TRUE, 0);
|
||||
|
||||
/* Buttons */
|
||||
|
||||
bbox = gtk_hbutton_box_new ();
|
||||
gtk_hbutton_box_set_layout_default (GTK_HBUTTON_BOX (bbox), GTK_BUTTONBOX_END);
|
||||
gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), GTK_BUTTONBOX_END);
|
||||
gtk_box_pack_start (GTK_BOX (vbox), bbox, FALSE, FALSE, 0);
|
||||
|
||||
pixmap = gnome_stock_pixmap_widget (NULL, GNOME_STOCK_PIXMAP_SAVE);
|
||||
button = gnome_pixmap_button (pixmap, _("Save"));
|
||||
gtk_box_pack_start (GTK_BOX (bbox), button, FALSE, FALSE, 0);
|
||||
|
||||
gtk_signal_connect (GTK_OBJECT (button), "clicked",
|
||||
GTK_SIGNAL_FUNC (save_clicked_cb), editor);
|
||||
|
||||
button = gnome_stock_button (GNOME_STOCK_BUTTON_CLOSE);
|
||||
gtk_box_pack_start (GTK_BOX (bbox), button, FALSE, FALSE, 0);
|
||||
gtk_signal_connect (GTK_OBJECT (button), "clicked",
|
||||
GTK_SIGNAL_FUNC (close_clicked_cb), editor);
|
||||
|
||||
button = gnome_stock_button (GNOME_STOCK_BUTTON_HELP);
|
||||
gtk_box_pack_start (GTK_BOX (bbox), button, FALSE, FALSE, 0);
|
||||
gtk_signal_connect (GTK_OBJECT (button), "clicked",
|
||||
GTK_SIGNAL_FUNC (help_clicked_cb), editor);
|
||||
}
|
||||
|
||||
/* Object initialization function for the calendar component editor */
|
||||
@ -141,6 +169,7 @@ comp_editor_init (CompEditor *editor)
|
||||
setup_widgets (editor);
|
||||
|
||||
priv->pages = NULL;
|
||||
priv->changed = FALSE;
|
||||
}
|
||||
|
||||
/* Destroy handler for the calendar component editor */
|
||||
@ -167,8 +196,18 @@ comp_editor_destroy (GtkObject *object)
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* comp_editor_append_page:
|
||||
* @editor: A component editor
|
||||
* @page: Top level widget of the page
|
||||
* @label: Label of the page
|
||||
*
|
||||
* Appends a page to the editor notebook with the given label
|
||||
**/
|
||||
void
|
||||
comp_editor_append_page (CompEditor *editor, EditorPage *page, const char *label)
|
||||
comp_editor_append_page (CompEditor *editor,
|
||||
CompEditorPage *page,
|
||||
const char *label)
|
||||
{
|
||||
CompEditorPrivate *priv;
|
||||
GtkWidget *page_widget;
|
||||
@ -177,7 +216,7 @@ comp_editor_append_page (CompEditor *editor, EditorPage *page, const char *label
|
||||
g_return_if_fail (editor != NULL);
|
||||
g_return_if_fail (IS_COMP_EDITOR (editor));
|
||||
g_return_if_fail (page != NULL);
|
||||
g_return_if_fail (IS_EDITOR_PAGE (page));
|
||||
g_return_if_fail (IS_COMP_EDITOR_PAGE (page));
|
||||
g_return_if_fail (label != NULL);
|
||||
|
||||
priv = editor->priv;
|
||||
@ -185,11 +224,333 @@ comp_editor_append_page (CompEditor *editor, EditorPage *page, const char *label
|
||||
/* Only allow adding the pages while a component has not been set */
|
||||
g_return_if_fail (priv->comp == NULL);
|
||||
|
||||
page_widget = editor_page_get_widget (page);
|
||||
page_widget = comp_editor_page_get_widget (page);
|
||||
g_assert (page_widget != NULL);
|
||||
|
||||
|
||||
label_widget = gtk_label_new (label);
|
||||
|
||||
priv->pages = g_list_append (priv->pages, page);
|
||||
gtk_notebook_append_page (priv->notebook, page_widget, label_widget);
|
||||
|
||||
/* Listen for things happening on the page */
|
||||
gtk_signal_connect (GTK_OBJECT (page), "summary_changed",
|
||||
GTK_SIGNAL_FUNC (page_summary_changed_cb), editor);
|
||||
gtk_signal_connect (GTK_OBJECT (page), "dates_changed",
|
||||
GTK_SIGNAL_FUNC (page_dates_changed_cb), editor);
|
||||
gtk_signal_connect (GTK_OBJECT (page), "changed",
|
||||
GTK_SIGNAL_FUNC (page_changed_cb), editor);
|
||||
}
|
||||
|
||||
/**
|
||||
* comp_editor_set_cal_client:
|
||||
* @editor: A component editor
|
||||
* @client: The calendar client to use
|
||||
*
|
||||
* Sets the calendar client used by the editor to update components
|
||||
**/
|
||||
void
|
||||
comp_editor_set_cal_client (CompEditor *editor, CalClient *client)
|
||||
{
|
||||
CompEditorPrivate *priv;
|
||||
|
||||
g_return_if_fail (editor != NULL);
|
||||
g_return_if_fail (IS_COMP_EDITOR (editor));
|
||||
|
||||
priv = editor->priv;
|
||||
|
||||
if (client == priv->client)
|
||||
return;
|
||||
|
||||
if (client) {
|
||||
g_return_if_fail (IS_CAL_CLIENT (client));
|
||||
g_return_if_fail (cal_client_get_load_state (client) ==
|
||||
CAL_CLIENT_LOAD_LOADED);
|
||||
gtk_object_ref (GTK_OBJECT (client));
|
||||
}
|
||||
|
||||
if (priv->client) {
|
||||
gtk_signal_disconnect_by_data (GTK_OBJECT (priv->client),
|
||||
editor);
|
||||
gtk_object_unref (GTK_OBJECT (priv->client));
|
||||
}
|
||||
|
||||
priv->client = client;
|
||||
}
|
||||
|
||||
/**
|
||||
* comp_editor_get_cal_client:
|
||||
* @editor: A component editor
|
||||
*
|
||||
* Returns the calendar client of the editor
|
||||
*
|
||||
* Return value: The calendar client of the editor
|
||||
**/
|
||||
CalClient *
|
||||
comp_editor_get_cal_client (CompEditor *editor)
|
||||
{
|
||||
CompEditorPrivate *priv;
|
||||
|
||||
g_return_val_if_fail (editor != NULL, NULL);
|
||||
g_return_val_if_fail (IS_COMP_EDITOR (editor), NULL);
|
||||
|
||||
priv = editor->priv;
|
||||
|
||||
return priv->client;
|
||||
}
|
||||
|
||||
/* Creates an appropriate title for the event editor dialog */
|
||||
static char *
|
||||
make_title_from_comp (CalComponent *comp)
|
||||
{
|
||||
char *title;
|
||||
const char *type_string;
|
||||
CalComponentVType type;
|
||||
CalComponentText text;
|
||||
|
||||
if (!comp)
|
||||
return g_strdup (_("Edit Appointment"));
|
||||
|
||||
type = cal_component_get_vtype (comp);
|
||||
switch (type) {
|
||||
case CAL_COMPONENT_EVENT:
|
||||
type_string = _("Appointment - %s");
|
||||
break;
|
||||
case CAL_COMPONENT_TODO:
|
||||
type_string = _("Task - %s");
|
||||
break;
|
||||
case CAL_COMPONENT_JOURNAL:
|
||||
type_string = _("Journal entry - %s");
|
||||
break;
|
||||
default:
|
||||
g_message ("make_title_from_comp(): Cannot handle object of type %d", type);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
cal_component_get_summary (comp, &text);
|
||||
if (text.value) {
|
||||
char *summary;
|
||||
summary = e_utf8_to_locale_string (text.value);
|
||||
title = g_strdup_printf (type_string, summary);
|
||||
g_free (summary);
|
||||
} else
|
||||
title = g_strdup_printf (type_string, _("No summary"));
|
||||
|
||||
return title;
|
||||
}
|
||||
|
||||
/* Sets the event editor's window title from a calendar component */
|
||||
static void
|
||||
set_title_from_comp (CompEditor *editor)
|
||||
{
|
||||
CompEditorPrivate *priv;
|
||||
char *title;
|
||||
|
||||
priv = editor->priv;
|
||||
title = make_title_from_comp (priv->comp);
|
||||
gtk_window_set_title (GTK_WINDOW (priv->window), title);
|
||||
g_free (title);
|
||||
}
|
||||
|
||||
static void
|
||||
fill_widgets (CompEditor *editor)
|
||||
{
|
||||
CompEditorPrivate *priv;
|
||||
GList *l;
|
||||
|
||||
priv = editor->priv;
|
||||
|
||||
for (l = priv->pages; l != NULL; l = l->next)
|
||||
comp_editor_page_fill_widgets (l->data, priv->comp);
|
||||
}
|
||||
|
||||
/**
|
||||
* comp_editor_edit_comp:
|
||||
* @editor: A component editor
|
||||
* @comp: A calendar component
|
||||
*
|
||||
* Starts the editor editing the given component
|
||||
**/
|
||||
void
|
||||
comp_editor_edit_comp (CompEditor *editor, CalComponent *comp)
|
||||
{
|
||||
CompEditorPrivate *priv;
|
||||
|
||||
g_return_if_fail (editor != NULL);
|
||||
g_return_if_fail (IS_COMP_EDITOR (editor));
|
||||
|
||||
priv = editor->priv;
|
||||
|
||||
if (priv->comp) {
|
||||
gtk_object_unref (GTK_OBJECT (priv->comp));
|
||||
priv->comp = NULL;
|
||||
}
|
||||
|
||||
if (comp)
|
||||
priv->comp = cal_component_clone (comp);
|
||||
|
||||
set_title_from_comp (editor);
|
||||
fill_widgets (editor);
|
||||
}
|
||||
|
||||
|
||||
/* Brings attention to a window by raising it and giving it focus */
|
||||
static void
|
||||
raise_and_focus (GtkWidget *widget)
|
||||
{
|
||||
g_assert (GTK_WIDGET_REALIZED (widget));
|
||||
gdk_window_show (widget->window);
|
||||
gtk_widget_grab_focus (widget);
|
||||
}
|
||||
|
||||
/**
|
||||
* comp_editor_focus:
|
||||
* @editor: A component editor
|
||||
*
|
||||
* Brings the editor window to the front and gives it focus
|
||||
**/
|
||||
void
|
||||
comp_editor_focus (CompEditor *editor)
|
||||
{
|
||||
CompEditorPrivate *priv;
|
||||
|
||||
g_return_if_fail (editor != NULL);
|
||||
g_return_if_fail (IS_COMP_EDITOR (editor));
|
||||
|
||||
priv = editor->priv;
|
||||
|
||||
gtk_widget_show_all (priv->window);
|
||||
raise_and_focus (priv->window);
|
||||
}
|
||||
|
||||
static void
|
||||
save_comp (CompEditor *editor)
|
||||
{
|
||||
CompEditorPrivate *priv;
|
||||
GList *l;
|
||||
|
||||
priv = editor->priv;
|
||||
|
||||
for (l = priv->pages; l != NULL; l = l->next)
|
||||
comp_editor_page_fill_component (l->data, priv->comp);
|
||||
|
||||
if (!cal_client_update_object (priv->client, priv->comp))
|
||||
g_message ("save_comp (): Could not update the object!");
|
||||
else
|
||||
priv->changed = FALSE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
prompt_to_save_changes (CompEditor *editor)
|
||||
{
|
||||
CompEditorPrivate *priv;
|
||||
|
||||
priv = editor->priv;
|
||||
|
||||
if (!priv->changed)
|
||||
return TRUE;
|
||||
|
||||
switch (save_component_dialog (GTK_WINDOW (priv->window))) {
|
||||
case 0: /* Save */
|
||||
/* FIXME: If an error occurs here, we should popup a dialog
|
||||
and then return FALSE. */
|
||||
save_comp (editor);
|
||||
return TRUE;
|
||||
case 1: /* Discard */
|
||||
return TRUE;
|
||||
case 2: /* Cancel */
|
||||
default:
|
||||
return FALSE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* Closes the dialog box and emits the appropriate signals */
|
||||
static void
|
||||
close_dialog (CompEditor *editor)
|
||||
{
|
||||
CompEditorPrivate *priv;
|
||||
|
||||
priv = editor->priv;
|
||||
|
||||
g_assert (priv->window != NULL);
|
||||
|
||||
gtk_object_destroy (GTK_OBJECT (editor));
|
||||
}
|
||||
|
||||
static void
|
||||
save_clicked_cb (GtkWidget *widget, gpointer data)
|
||||
{
|
||||
CompEditor *editor = COMP_EDITOR (data);
|
||||
|
||||
save_comp (editor);
|
||||
close_dialog (editor);
|
||||
}
|
||||
|
||||
static void
|
||||
close_clicked_cb (GtkWidget *widget, gpointer data)
|
||||
{
|
||||
CompEditor *editor = COMP_EDITOR (data);
|
||||
|
||||
if (prompt_to_save_changes (editor))
|
||||
close_dialog (editor);
|
||||
}
|
||||
|
||||
static void
|
||||
help_clicked_cb (GtkWidget *widget, gpointer data)
|
||||
{
|
||||
}
|
||||
|
||||
static void
|
||||
page_summary_changed_cb (GtkWidget *widget, const char *summary, gpointer data)
|
||||
{
|
||||
CompEditor *editor = COMP_EDITOR (data);
|
||||
CompEditorPrivate *priv;
|
||||
GList *l;
|
||||
|
||||
priv = editor->priv;
|
||||
|
||||
for (l = priv->pages; l != NULL; l = l->next)
|
||||
comp_editor_page_set_summary (l->data, summary);
|
||||
|
||||
priv->changed = TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
page_dates_changed_cb (GtkWidget *widget,
|
||||
CompEditorPageDates *dates,
|
||||
gpointer data)
|
||||
{
|
||||
CompEditor *editor = COMP_EDITOR (data);
|
||||
CompEditorPrivate *priv;
|
||||
GList *l;
|
||||
|
||||
priv = editor->priv;
|
||||
|
||||
for (l = priv->pages; l != NULL; l = l->next)
|
||||
comp_editor_page_set_dates (l->data, dates);
|
||||
|
||||
priv->changed = TRUE;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
page_changed_cb (GtkWidget *widget, gpointer data)
|
||||
{
|
||||
CompEditor *editor = COMP_EDITOR (data);
|
||||
CompEditorPrivate *priv;
|
||||
|
||||
priv = editor->priv;
|
||||
|
||||
priv->changed = TRUE;
|
||||
}
|
||||
|
||||
static gint
|
||||
delete_event_cb (GtkWidget *widget, GdkEvent *event, gpointer data)
|
||||
{
|
||||
CompEditor *editor = COMP_EDITOR (data);
|
||||
|
||||
if (prompt_to_save_changes (editor))
|
||||
close_dialog (editor);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@ -22,7 +22,9 @@
|
||||
#ifndef COMP_EDITOR_H
|
||||
#define COMP_EDITOR_H
|
||||
|
||||
#include "editor-page.h"
|
||||
#include <gtk/gtk.h>
|
||||
#include "cal-client.h"
|
||||
#include "comp-editor-page.h"
|
||||
|
||||
BEGIN_GNOME_DECLS
|
||||
|
||||
@ -30,8 +32,7 @@ BEGIN_GNOME_DECLS
|
||||
|
||||
#define TYPE_COMP_EDITOR (comp_editor_get_type ())
|
||||
#define COMP_EDITOR(obj) (GTK_CHECK_CAST ((obj), TYPE_COMP_EDITOR, CompEditor))
|
||||
#define COMP_EDITOR_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), TYPE_COMP_EDITOR, \
|
||||
CompEditorClass))
|
||||
#define COMP_EDITOR_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), TYPE_COMP_EDITOR, CompEditorClass))
|
||||
#define IS_COMP_EDITOR(obj) (GTK_CHECK_TYPE ((obj), TYPE_COMP_EDITOR))
|
||||
#define IS_COMP_EDITOR_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), TYPE_COMP_EDITOR))
|
||||
|
||||
@ -48,11 +49,17 @@ typedef struct {
|
||||
GtkObjectClass parent_class;
|
||||
} CompEditorClass;
|
||||
|
||||
GtkType comp_editor_get_type (void);
|
||||
|
||||
CompEditor *comp_editor_new (void);
|
||||
|
||||
void comp_editor_add_page (CompEditor *editor, EditorPage *page);
|
||||
GtkType comp_editor_get_type (void);
|
||||
CompEditor *comp_editor_new (void);
|
||||
void comp_editor_append_page (CompEditor *editor,
|
||||
CompEditorPage *page,
|
||||
const char *label);
|
||||
void comp_editor_set_cal_client (CompEditor *editor,
|
||||
CalClient *client);
|
||||
CalClient * comp_editor_get_cal_client (CompEditor *editor);
|
||||
void comp_editor_edit_comp (CompEditor *ee,
|
||||
CalComponent *comp);
|
||||
void comp_editor_focus (CompEditor *editor);
|
||||
|
||||
|
||||
|
||||
|
||||
@ -1,260 +0,0 @@
|
||||
/* Evolution calendar - Base class for calendar component editor pages
|
||||
*
|
||||
* Copyright (C) 2001 Ximian, Inc.
|
||||
*
|
||||
* Authors: Federico Mena-Quintero <federico@ximian.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#include <gtk/gtksignal.h>
|
||||
#include "editor-page.h"
|
||||
|
||||
|
||||
|
||||
static void editor_page_class_init (EditorPageClass *class);
|
||||
|
||||
/* Signal IDs */
|
||||
|
||||
enum {
|
||||
CHANGED,
|
||||
SUMMARY_CHANGED,
|
||||
LAST_SIGNAL
|
||||
};
|
||||
|
||||
static guint editor_page_signals[LAST_SIGNAL];
|
||||
|
||||
#define CLASS(page) (EDITOR_PAGE_CLASS (GTK_OBJECT (page)->klass))
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* editor_page_get_type:
|
||||
*
|
||||
* Registers the #EditorPage class if necessary, and returns the type ID
|
||||
* associated to it.
|
||||
*
|
||||
* Return value: The type ID of the #EditorPage class.
|
||||
**/
|
||||
GtkType
|
||||
editor_page_get_type (void)
|
||||
{
|
||||
static GtkType editor_page_type = 0;
|
||||
|
||||
if (!editor_page_type) {
|
||||
static const GtkTypeInfo editor_page_info = {
|
||||
"EditorPage",
|
||||
sizeof (EditorPage),
|
||||
sizeof (EditorPageClass),
|
||||
(GtkClassInitFunc) editor_page_class_init,
|
||||
(GtkObjectInitFunc) NULL,
|
||||
NULL, /* reserved_1 */
|
||||
NULL, /* reserved_2 */
|
||||
(GtkClassInitFunc) NULL
|
||||
};
|
||||
|
||||
editor_page_type = gtk_type_unique (GTK_TYPE_OBJECT, &editor_page_info);
|
||||
}
|
||||
|
||||
return editor_page_type;
|
||||
}
|
||||
|
||||
/* Class initialization function for the abstract editor page */
|
||||
static void
|
||||
editor_page_class_init (EditorPageClass *class)
|
||||
{
|
||||
GtkObjectClass *object_class;
|
||||
|
||||
object_class = (GtkObjectClass *) class;
|
||||
|
||||
editor_page_signals[CHANGED] =
|
||||
gtk_signal_new ("changed",
|
||||
GTK_RUN_FIRST,
|
||||
object_class->type,
|
||||
GTK_SIGNAL_OFFSET (EditorPageClass, changed),
|
||||
gtk_marshal_NONE__NONE,
|
||||
GTK_TYPE_NONE, 0);
|
||||
|
||||
editor_page_signals[SUMMARY_CHANGED] =
|
||||
gtk_signal_new ("summary_changed",
|
||||
GTK_RUN_FIRST,
|
||||
object_class->type,
|
||||
GTK_SIGNAL_OFFSET (EditorPageClass, summary_changed),
|
||||
gtk_marshal_NONE__NONE,
|
||||
GTK_TYPE_NONE, 0);
|
||||
|
||||
gtk_object_class_add_signals (object_class, editor_page_signals, LAST_SIGNAL);
|
||||
|
||||
class->changed = NULL;
|
||||
class->summary_changed = NULL;
|
||||
|
||||
class->get_widget = NULL;
|
||||
class->fill_widgets = NULL;
|
||||
class->fill_component = NULL;
|
||||
class->set_summary = NULL;
|
||||
class->get_summary = NULL;
|
||||
class->set_dates = NULL;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* editor_page_get_widget:
|
||||
* @page: An editor page.
|
||||
*
|
||||
* Queries the main widget of an editor page.
|
||||
*
|
||||
* Return value: The widget that is the page's upper container. It should
|
||||
* normally be inserted in a notebook widget.
|
||||
**/
|
||||
GtkWidget *
|
||||
editor_page_get_widget (EditorPage *page)
|
||||
{
|
||||
g_return_val_if_fail (page != NULL, NULL);
|
||||
g_return_val_if_fail (IS_EDITOR_PAGE (page), NULL);
|
||||
|
||||
g_assert (CLASS (page)->get_widget != NULL);
|
||||
return (* CLASS (page)->get_widget) (page);
|
||||
}
|
||||
|
||||
/**
|
||||
* editor_page_fill_widgets:
|
||||
* @page: An editor page.
|
||||
* @comp: A calendar component.
|
||||
*
|
||||
* Fills the widgets of an editor page with the data from a calendar component.
|
||||
**/
|
||||
void
|
||||
editor_page_fill_widgets (EditorPage *page, CalComponent *comp)
|
||||
{
|
||||
g_return_if_fail (page != NULL);
|
||||
g_return_if_fail (IS_EDITOR_PAGE (page));
|
||||
g_return_if_fail (comp != NULL);
|
||||
|
||||
g_assert (CLASS (page)->fill_widgets != NULL);
|
||||
(* CLASS (page)->fill_widgets) (page, comp);
|
||||
}
|
||||
|
||||
/**
|
||||
* editor_page_fill_component:
|
||||
* @page: An editor page.
|
||||
* @comp: A calendar component.
|
||||
*
|
||||
* Takes the data from the widgets of an editor page and sets it on a calendar
|
||||
* component, replacing the contents of the properties that the editor page
|
||||
* knows how to manipulate.
|
||||
**/
|
||||
void
|
||||
editor_page_fill_component (EditorPage *page, CalComponent *comp)
|
||||
{
|
||||
g_return_if_fail (page != NULL);
|
||||
g_return_if_fail (IS_EDITOR_PAGE (page));
|
||||
g_return_if_fail (comp != NULL);
|
||||
|
||||
g_assert (CLASS (page)->fill_component != NULL);
|
||||
(* CLASS (page)->fill_component) (page, comp);
|
||||
}
|
||||
|
||||
/**
|
||||
* editor_page_set_summary:
|
||||
* @page: An editor page.
|
||||
* @summary: Summary string to set in the page's widgets, which must be encoded
|
||||
* in UTF8.
|
||||
*
|
||||
* Sets the calendar component summary string in an editor page.
|
||||
**/
|
||||
void
|
||||
editor_page_set_summary (EditorPage *page, const char *summary)
|
||||
{
|
||||
g_return_if_fail (page != NULL);
|
||||
g_return_if_fail (IS_EDITOR_PAGE (page));
|
||||
g_return_if_fail (summary != NULL);
|
||||
|
||||
g_assert (CLASS (page)->set_summary != NULL);
|
||||
(* CLASS (page)->set_summary) (page, summary);
|
||||
}
|
||||
|
||||
/**
|
||||
* editor_page_get_summary:
|
||||
* @page: An editor page.
|
||||
*
|
||||
* Queries the current summary string in an editor page.
|
||||
*
|
||||
* Return value: Summary string in UTF8; must be freed by the caller.
|
||||
**/
|
||||
char *
|
||||
editor_page_get_summary (EditorPage *page)
|
||||
{
|
||||
g_return_val_if_fail (page != NULL, NULL);
|
||||
g_return_val_if_fail (IS_EDITOR_PAGE (page), NULL);
|
||||
|
||||
g_assert (CLASS (page)->get_summary != NULL);
|
||||
return (* CLASS (page)->get_summary) (page);
|
||||
}
|
||||
|
||||
/**
|
||||
* editor_page_set_dates:
|
||||
* @page: An editor page.
|
||||
* @start: Start date for calendar component.
|
||||
* @end: End date for calendar component.
|
||||
*
|
||||
* Sets the calendar component DTSTART and DTEND in an editor page.
|
||||
**/
|
||||
void
|
||||
editor_page_set_dates (EditorPage *page, time_t start, time_t end)
|
||||
{
|
||||
g_return_if_fail (page != NULL);
|
||||
g_return_if_fail (IS_EDITOR_PAGE (page));
|
||||
g_return_if_fail (start != -1);
|
||||
|
||||
g_assert (CLASS (page)->set_dates != NULL);
|
||||
(* CLASS (page)->set_dates) (page, start, end);
|
||||
}
|
||||
|
||||
/**
|
||||
* editor_page_notify_changed:
|
||||
* @page: An editor page.
|
||||
*
|
||||
* Makes an editor page emit the "changed" signal. This is meant to be
|
||||
* used only by page implementations.
|
||||
**/
|
||||
void
|
||||
editor_page_notify_changed (EditorPage *page)
|
||||
{
|
||||
g_return_if_fail (page != NULL);
|
||||
g_return_if_fail (IS_EDITOR_PAGE (page));
|
||||
|
||||
gtk_signal_emit (GTK_OBJECT (page), editor_page_signals[CHANGED]);
|
||||
}
|
||||
|
||||
/**
|
||||
* editor_page_notify_summary_changed:
|
||||
* @page: An editor page.
|
||||
*
|
||||
* Makes an editor page emit the "summary_changed" signal. This is meant to be
|
||||
* used only by page implementations.
|
||||
**/
|
||||
void
|
||||
editor_page_notify_summary_changed (EditorPage *page)
|
||||
{
|
||||
g_return_if_fail (page != NULL);
|
||||
g_return_if_fail (IS_EDITOR_PAGE (page));
|
||||
|
||||
gtk_signal_emit (GTK_OBJECT (page), editor_page_signals[SUMMARY_CHANGED]);
|
||||
}
|
||||
@ -1,86 +0,0 @@
|
||||
/* Evolution calendar - Base class for calendar component editor pages
|
||||
*
|
||||
* Copyright (C) 2001 Ximian, Inc.
|
||||
*
|
||||
* Authors: Federico Mena-Quintero <federico@ximian.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifndef EDITOR_PAGE_H
|
||||
#define EDITOR_PAGE_H
|
||||
|
||||
#include <time.h>
|
||||
#include <libgnome/gnome-defs.h>
|
||||
#include <gtk/gtkwidget.h>
|
||||
#include <cal-util/cal-component.h>
|
||||
|
||||
BEGIN_GNOME_DECLS
|
||||
|
||||
|
||||
|
||||
#define TYPE_EDITOR_PAGE (editor_page_get_type ())
|
||||
#define EDITOR_PAGE(obj) (GTK_CHECK_CAST ((obj), TYPE_EDITOR_PAGE, EditorPage))
|
||||
#define EDITOR_PAGE_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), TYPE_EDITOR_PAGE, \
|
||||
EditorPageClass))
|
||||
#define IS_EDITOR_PAGE(obj) (GTK_CHECK_TYPE ((obj), TYPE_EDITOR_PAGE))
|
||||
#define IS_EDITOR_PAGE_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), TYPE_EDITOR_PAGE))
|
||||
|
||||
typedef struct {
|
||||
GtkObject object;
|
||||
} EditorPage;
|
||||
|
||||
typedef struct {
|
||||
GtkObjectClass parent_class;
|
||||
|
||||
/* Notification signals */
|
||||
|
||||
void (* changed) (EditorPage *page);
|
||||
void (* summary_changed) (EditorPage *page);
|
||||
void (* dtstart_changed) (EditorPage *page);
|
||||
|
||||
/* Virtual methods */
|
||||
|
||||
GtkWidget *(* get_widget) (EditorPage *page);
|
||||
|
||||
void (* fill_widgets) (EditorPage *page, CalComponent *comp);
|
||||
void (* fill_component) (EditorPage *page, CalComponent *comp);
|
||||
|
||||
void (* set_summary) (EditorPage *page, const char *summary);
|
||||
char *(* get_summary) (EditorPage *page);
|
||||
|
||||
void (* set_dates) (EditorPage *page, time_t start, time_t end);
|
||||
} EditorPageClass;
|
||||
|
||||
GtkType editor_page_get_type (void);
|
||||
|
||||
GtkWidget *editor_page_get_widget (EditorPage *page);
|
||||
|
||||
void editor_page_fill_widgets (EditorPage *page, CalComponent *comp);
|
||||
void editor_page_fill_component (EditorPage *page, CalComponent *comp);
|
||||
|
||||
void editor_page_set_summary (EditorPage *page, const char *summary);
|
||||
char *editor_page_get_summary (EditorPage *page);
|
||||
|
||||
void editor_page_set_dates (EditorPage *page, time_t start, time_t end);
|
||||
|
||||
void editor_page_notify_changed (EditorPage *page);
|
||||
void editor_page_notify_summary_changed (EditorPage *page);
|
||||
|
||||
|
||||
|
||||
END_GNOME_DECLS
|
||||
|
||||
#endif
|
||||
155
calendar/gui/dialogs/event-editor.c
Normal file
155
calendar/gui/dialogs/event-editor.c
Normal file
@ -0,0 +1,155 @@
|
||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
|
||||
|
||||
/* Evolution calendar - Event editor dialog
|
||||
*
|
||||
* Copyright (C) 2000 Helix Code, Inc.
|
||||
* Copyright (C) 2001 Ximian, Inc.
|
||||
*
|
||||
* Authors: Miguel de Icaza <miguel@ximian.com>
|
||||
* Federico Mena-Quintero <federico@ximian.com>
|
||||
* Seth Alves <alves@hungry.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
#include <string.h>
|
||||
#include <glade/glade.h>
|
||||
#include <gal/widgets/e-unicode.h>
|
||||
#include <libgnome/gnome-i18n.h>
|
||||
#include <widgets/misc/e-dateedit.h>
|
||||
|
||||
#include "event-page.h"
|
||||
#include "alarm-page.h"
|
||||
#include "recurrence-page.h"
|
||||
#include "event-editor.h"
|
||||
|
||||
struct _EventEditorPrivate {
|
||||
EventPage *event_page;
|
||||
AlarmPage *alarm_page;
|
||||
RecurrencePage *recur_page;
|
||||
};
|
||||
|
||||
|
||||
|
||||
static void event_editor_class_init (EventEditorClass *class);
|
||||
static void event_editor_init (EventEditor *ee);
|
||||
static void event_editor_destroy (GtkObject *object);
|
||||
|
||||
static CompEditor *parent_class;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* event_editor_get_type:
|
||||
*
|
||||
* Registers the #EventEditor class if necessary, and returns the type ID
|
||||
* associated to it.
|
||||
*
|
||||
* Return value: The type ID of the #EventEditor class.
|
||||
**/
|
||||
GtkType
|
||||
event_editor_get_type (void)
|
||||
{
|
||||
static GtkType event_editor_type = 0;
|
||||
|
||||
if (!event_editor_type) {
|
||||
static const GtkTypeInfo event_editor_info = {
|
||||
"EventEditor",
|
||||
sizeof (EventEditor),
|
||||
sizeof (EventEditorClass),
|
||||
(GtkClassInitFunc) event_editor_class_init,
|
||||
(GtkObjectInitFunc) event_editor_init,
|
||||
NULL, /* reserved_1 */
|
||||
NULL, /* reserved_2 */
|
||||
(GtkClassInitFunc) NULL
|
||||
};
|
||||
|
||||
event_editor_type = gtk_type_unique (TYPE_COMP_EDITOR,
|
||||
&event_editor_info);
|
||||
}
|
||||
|
||||
return event_editor_type;
|
||||
}
|
||||
|
||||
/* Class initialization function for the event editor */
|
||||
static void
|
||||
event_editor_class_init (EventEditorClass *class)
|
||||
{
|
||||
GtkObjectClass *object_class;
|
||||
|
||||
object_class = (GtkObjectClass *) class;
|
||||
|
||||
parent_class = gtk_type_class (TYPE_COMP_EDITOR);
|
||||
|
||||
object_class->destroy = event_editor_destroy;
|
||||
}
|
||||
|
||||
/* Object initialization function for the event editor */
|
||||
static void
|
||||
event_editor_init (EventEditor *ee)
|
||||
{
|
||||
EventEditorPrivate *priv;
|
||||
|
||||
priv = g_new0 (EventEditorPrivate, 1);
|
||||
ee->priv = priv;
|
||||
|
||||
priv->event_page = event_page_new ();
|
||||
comp_editor_append_page (COMP_EDITOR (ee),
|
||||
COMP_EDITOR_PAGE (priv->event_page),
|
||||
_("Appointment"));
|
||||
|
||||
priv->alarm_page = alarm_page_new ();
|
||||
comp_editor_append_page (COMP_EDITOR (ee),
|
||||
COMP_EDITOR_PAGE (priv->alarm_page),
|
||||
_("Reminder"));
|
||||
|
||||
priv->recur_page = recurrence_page_new ();
|
||||
comp_editor_append_page (COMP_EDITOR (ee),
|
||||
COMP_EDITOR_PAGE (priv->recur_page),
|
||||
_("Recurrence"));
|
||||
|
||||
}
|
||||
|
||||
/* Destroy handler for the event editor */
|
||||
static void
|
||||
event_editor_destroy (GtkObject *object)
|
||||
{
|
||||
EventEditor *ee;
|
||||
EventEditorPrivate *priv;
|
||||
|
||||
g_return_if_fail (object != NULL);
|
||||
g_return_if_fail (IS_EVENT_EDITOR (object));
|
||||
|
||||
ee = EVENT_EDITOR (object);
|
||||
priv = ee->priv;
|
||||
|
||||
if (GTK_OBJECT_CLASS (parent_class)->destroy)
|
||||
(* GTK_OBJECT_CLASS (parent_class)->destroy) (object);
|
||||
}
|
||||
|
||||
/**
|
||||
* event_editor_new:
|
||||
*
|
||||
* Creates a new event editor dialog.
|
||||
*
|
||||
* Return value: A newly-created event editor dialog, or NULL if the event
|
||||
* editor could not be created.
|
||||
**/
|
||||
EventEditor *
|
||||
event_editor_new (void)
|
||||
{
|
||||
return EVENT_EDITOR (gtk_type_new (TYPE_EVENT_EDITOR));
|
||||
}
|
||||
@ -22,19 +22,18 @@
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifndef __EVENT_EDITOR_DIALOG_H__
|
||||
#define __EVENT_EDITOR_DIALOG_H__
|
||||
#ifndef __EVENT_EDITOR_H__
|
||||
#define __EVENT_EDITOR_H__
|
||||
|
||||
#include <libgnome/gnome-defs.h>
|
||||
#include <gtk/gtkobject.h>
|
||||
#include "gnome-cal.h"
|
||||
#include "comp-editor.h"
|
||||
|
||||
|
||||
|
||||
#define TYPE_EVENT_EDITOR (event_editor_get_type ())
|
||||
#define EVENT_EDITOR(obj) (GTK_CHECK_CAST ((obj), TYPE_EVENT_EDITOR, EventEditor))
|
||||
#define EVENT_EDITOR_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), TYPE_EVENT_EDITOR, \
|
||||
EventEditorClass))
|
||||
#define EVENT_EDITOR_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), TYPE_EVENT_EDITOR, EventEditorClass))
|
||||
#define IS_EVENT_EDITOR(obj) (GTK_CHECK_TYPE ((obj), TYPE_EVENT_EDITOR))
|
||||
#define IS_EVENT_EDITOR_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), TYPE_EVENT_EDITOR))
|
||||
|
||||
@ -43,35 +42,21 @@ typedef struct _EventEditorClass EventEditorClass;
|
||||
typedef struct _EventEditorPrivate EventEditorPrivate;
|
||||
|
||||
struct _EventEditor {
|
||||
GtkObject object;
|
||||
CompEditor parent;
|
||||
|
||||
/* Private data */
|
||||
EventEditorPrivate *priv;
|
||||
};
|
||||
|
||||
struct _EventEditorClass {
|
||||
GtkObjectClass parent_class;
|
||||
CompEditorClass parent_class;
|
||||
};
|
||||
|
||||
|
||||
GtkType event_editor_get_type (void);
|
||||
EventEditor *event_editor_construct (EventEditor *ee);
|
||||
|
||||
EventEditor *event_editor_new (void);
|
||||
|
||||
void event_editor_set_cal_client (EventEditor *ee, CalClient *client);
|
||||
CalClient *event_editor_get_cal_client (EventEditor *ee);
|
||||
|
||||
void event_editor_set_event_object (EventEditor *ee, CalComponent *comp);
|
||||
|
||||
void event_editor_focus (EventEditor *ee);
|
||||
|
||||
void event_editor_update_widgets (EventEditor *ee);
|
||||
|
||||
|
||||
GtkWidget *make_date_edit (void);
|
||||
GtkWidget *make_spin_button (int val, int low, int high);
|
||||
GtkType event_editor_get_type (void);
|
||||
EventEditor *event_editor_construct (EventEditor *ee);
|
||||
EventEditor *event_editor_new (void);
|
||||
void event_editor_update_widgets (EventEditor *ee);
|
||||
|
||||
|
||||
|
||||
#endif /* __EVENT_EDITOR_DIALOG_H__ */
|
||||
#endif /* __EVENT_EDITOR_H__ */
|
||||
@ -31,9 +31,10 @@
|
||||
#include <glade/glade.h>
|
||||
#include <gal/widgets/e-unicode.h>
|
||||
#include <gal/widgets/e-categories.h>
|
||||
#include "cal-util/timeutil.h"
|
||||
#include "e-util/e-dialog-widgets.h"
|
||||
#include "widgets/misc/e-dateedit.h"
|
||||
#include "cal-util/timeutil.h"
|
||||
#include "../widget-util.h"
|
||||
#include "../calendar-config.h"
|
||||
#include "event-page.h"
|
||||
|
||||
@ -65,6 +66,8 @@ struct _EventPagePrivate {
|
||||
|
||||
GtkWidget *categories_btn;
|
||||
GtkWidget *categories;
|
||||
|
||||
gboolean updating;
|
||||
};
|
||||
|
||||
|
||||
@ -73,22 +76,15 @@ static void event_page_class_init (EventPageClass *class);
|
||||
static void event_page_init (EventPage *epage);
|
||||
static void event_page_destroy (GtkObject *object);
|
||||
|
||||
static GtkWidget *event_page_get_widget (EditorPage *page);
|
||||
static void event_page_fill_widgets (EditorPage *page, CalComponent *comp);
|
||||
static void event_page_fill_component (EditorPage *page, CalComponent *comp);
|
||||
static void event_page_set_summary (EditorPage *page, const char *summary);
|
||||
static char *event_page_get_summary (EditorPage *page);
|
||||
static void event_page_set_dates (EditorPage *page, time_t start, time_t end);
|
||||
static GtkWidget *event_page_get_widget (CompEditorPage *page);
|
||||
static void event_page_fill_widgets (CompEditorPage *page, CalComponent *comp);
|
||||
static void event_page_fill_component (CompEditorPage *page, CalComponent *comp);
|
||||
static void event_page_set_summary (CompEditorPage *page, const char *summary);
|
||||
static void event_page_set_dates (CompEditorPage *page, CompEditorPageDates *dates);
|
||||
|
||||
/* Signal IDs */
|
||||
enum {
|
||||
DATES_CHANGED,
|
||||
LAST_SIGNAL
|
||||
};
|
||||
GtkWidget *make_date_edit (void);
|
||||
|
||||
static guint event_page_signals[LAST_SIGNAL] = { 0 };
|
||||
|
||||
static EditorPageClass *parent_class = NULL;
|
||||
static CompEditorPageClass *parent_class = NULL;
|
||||
|
||||
|
||||
|
||||
@ -117,7 +113,8 @@ event_page_get_type (void)
|
||||
(GtkClassInitFunc) NULL
|
||||
};
|
||||
|
||||
event_page_type = gtk_type_unique (TYPE_EDITOR_PAGE, &event_page_info);
|
||||
event_page_type = gtk_type_unique (TYPE_COMP_EDITOR_PAGE,
|
||||
&event_page_info);
|
||||
}
|
||||
|
||||
return event_page_type;
|
||||
@ -127,31 +124,18 @@ event_page_get_type (void)
|
||||
static void
|
||||
event_page_class_init (EventPageClass *class)
|
||||
{
|
||||
EditorPageClass *editor_page_class;
|
||||
CompEditorPageClass *editor_page_class;
|
||||
GtkObjectClass *object_class;
|
||||
|
||||
editor_page_class = (EditorPageClass *) class;
|
||||
editor_page_class = (CompEditorPageClass *) class;
|
||||
object_class = (GtkObjectClass *) class;
|
||||
|
||||
parent_class = gtk_type_class (TYPE_EDITOR_PAGE);
|
||||
|
||||
event_page_signals[DATES_CHANGED] =
|
||||
gtk_signal_new ("dates_changed",
|
||||
GTK_RUN_FIRST,
|
||||
object_class->type,
|
||||
GTK_SIGNAL_OFFSET (EventPageClass, dates_changed),
|
||||
gtk_marshal_NONE__NONE,
|
||||
GTK_TYPE_NONE, 0);
|
||||
|
||||
gtk_object_class_add_signals (object_class, event_page_signals, LAST_SIGNAL);
|
||||
|
||||
class->dates_changed = NULL;
|
||||
parent_class = gtk_type_class (TYPE_COMP_EDITOR_PAGE);
|
||||
|
||||
editor_page_class->get_widget = event_page_get_widget;
|
||||
editor_page_class->fill_widgets = event_page_fill_widgets;
|
||||
editor_page_class->fill_component = event_page_fill_component;
|
||||
editor_page_class->set_summary = event_page_set_summary;
|
||||
editor_page_class->get_summary = event_page_get_summary;
|
||||
editor_page_class->set_dates = event_page_set_dates;
|
||||
|
||||
object_class->destroy = event_page_destroy;
|
||||
@ -181,6 +165,8 @@ event_page_init (EventPage *epage)
|
||||
priv->contacts = NULL;
|
||||
priv->categories_btn = NULL;
|
||||
priv->categories = NULL;
|
||||
|
||||
priv->updating = FALSE;
|
||||
}
|
||||
|
||||
/* Destroy handler for the event page */
|
||||
@ -219,7 +205,7 @@ static const int classification_map[] = {
|
||||
|
||||
/* get_widget handler for the event page */
|
||||
static GtkWidget *
|
||||
event_page_get_widget (EditorPage *page)
|
||||
event_page_get_widget (CompEditorPage *page)
|
||||
{
|
||||
EventPage *epage;
|
||||
EventPagePrivate *priv;
|
||||
@ -230,8 +216,8 @@ event_page_get_widget (EditorPage *page)
|
||||
return priv->main;
|
||||
}
|
||||
|
||||
/* Checks if the event's time starts and ends at midnight, and sets the "all day
|
||||
* event" box accordingly.
|
||||
/* Checks if the event's time starts and ends at midnight, and sets the
|
||||
*"all day event" box accordingly.
|
||||
*/
|
||||
static void
|
||||
check_all_day (EventPage *epage)
|
||||
@ -251,12 +237,15 @@ check_all_day (EventPage *epage)
|
||||
g_assert (ev_end != -1);
|
||||
|
||||
/* all day event checkbox */
|
||||
if (time_day_begin (ev_start) == ev_start && time_day_begin (ev_end) == ev_end)
|
||||
if (time_day_begin (ev_start) == ev_start
|
||||
&& time_day_begin (ev_end) == ev_end)
|
||||
all_day = TRUE;
|
||||
|
||||
gtk_signal_handler_block_by_data (GTK_OBJECT (priv->all_day_event), epage);
|
||||
gtk_signal_handler_block_by_data (GTK_OBJECT (priv->all_day_event),
|
||||
epage);
|
||||
e_dialog_toggle_set (priv->all_day_event, all_day);
|
||||
gtk_signal_handler_unblock_by_data (GTK_OBJECT (priv->all_day_event), epage);
|
||||
gtk_signal_handler_unblock_by_data (GTK_OBJECT (priv->all_day_event),
|
||||
epage);
|
||||
|
||||
e_date_edit_set_show_time (E_DATE_EDIT (priv->start_time), !all_day);
|
||||
e_date_edit_set_show_time (E_DATE_EDIT (priv->end_time), !all_day);
|
||||
@ -278,14 +267,17 @@ clear_widgets (EventPage *epage)
|
||||
e_dialog_editable_set (priv->description, NULL);
|
||||
|
||||
/* Start and end times */
|
||||
gtk_signal_handler_block_by_data (GTK_OBJECT (priv->start_time), epage);
|
||||
gtk_signal_handler_block_by_data (GTK_OBJECT (priv->start_time),
|
||||
epage);
|
||||
gtk_signal_handler_block_by_data (GTK_OBJECT (priv->end_time), epage);
|
||||
|
||||
e_date_edit_set_time (E_DATE_EDIT (priv->start_time), now);
|
||||
e_date_edit_set_time (E_DATE_EDIT (priv->end_time), now);
|
||||
|
||||
gtk_signal_handler_unblock_by_data (GTK_OBJECT (priv->start_time), epage);
|
||||
gtk_signal_handler_unblock_by_data (GTK_OBJECT (priv->end_time), epage);
|
||||
gtk_signal_handler_unblock_by_data (GTK_OBJECT (priv->start_time),
|
||||
epage);
|
||||
gtk_signal_handler_unblock_by_data (GTK_OBJECT (priv->end_time),
|
||||
epage);
|
||||
|
||||
check_all_day (epage);
|
||||
|
||||
@ -299,7 +291,7 @@ clear_widgets (EventPage *epage)
|
||||
|
||||
/* fill_widgets handler for the event page */
|
||||
static void
|
||||
event_page_fill_widgets (EditorPage *page, CalComponent *comp)
|
||||
event_page_fill_widgets (CompEditorPage *page, CalComponent *comp)
|
||||
{
|
||||
EventPage *epage;
|
||||
EventPagePrivate *priv;
|
||||
@ -313,6 +305,10 @@ event_page_fill_widgets (EditorPage *page, CalComponent *comp)
|
||||
epage = EVENT_PAGE (page);
|
||||
priv = epage->priv;
|
||||
|
||||
/* Don't send off changes during this time */
|
||||
priv->updating = TRUE;
|
||||
|
||||
/* Clean the page */
|
||||
clear_widgets (epage);
|
||||
|
||||
/* Summary, description(s) */
|
||||
@ -341,17 +337,21 @@ event_page_fill_widgets (EditorPage *page, CalComponent *comp)
|
||||
dtend = icaltime_as_timet (*d.value);
|
||||
cal_component_free_datetime (&d);
|
||||
|
||||
if (time_day_begin (dtstart) == dtstart && time_day_begin (dtend) == dtend)
|
||||
if (time_day_begin (dtstart) == dtstart
|
||||
&& time_day_begin (dtend) == dtend)
|
||||
dtend = time_add_day (dtend, -1);
|
||||
|
||||
gtk_signal_handler_block_by_data (GTK_OBJECT (priv->start_time), epage);
|
||||
gtk_signal_handler_block_by_data (GTK_OBJECT (priv->start_time),
|
||||
epage);
|
||||
gtk_signal_handler_block_by_data (GTK_OBJECT (priv->end_time), epage);
|
||||
|
||||
e_date_edit_set_time (E_DATE_EDIT (priv->start_time), dtstart);
|
||||
e_date_edit_set_time (E_DATE_EDIT (priv->end_time), dtend);
|
||||
|
||||
gtk_signal_handler_unblock_by_data (GTK_OBJECT (priv->start_time), epage);
|
||||
gtk_signal_handler_unblock_by_data (GTK_OBJECT (priv->end_time), epage);
|
||||
gtk_signal_handler_unblock_by_data (GTK_OBJECT (priv->start_time),
|
||||
epage);
|
||||
gtk_signal_handler_unblock_by_data (GTK_OBJECT (priv->end_time),
|
||||
epage);
|
||||
|
||||
check_all_day (epage);
|
||||
|
||||
@ -361,17 +361,20 @@ event_page_fill_widgets (EditorPage *page, CalComponent *comp)
|
||||
|
||||
switch (cl) {
|
||||
case CAL_COMPONENT_CLASS_PUBLIC:
|
||||
e_dialog_radio_set (priv->classification_public, CAL_COMPONENT_CLASS_PUBLIC,
|
||||
e_dialog_radio_set (priv->classification_public,
|
||||
CAL_COMPONENT_CLASS_PUBLIC,
|
||||
classification_map);
|
||||
break;
|
||||
|
||||
case CAL_COMPONENT_CLASS_PRIVATE:
|
||||
e_dialog_radio_set (priv->classification_public, CAL_COMPONENT_CLASS_PRIVATE,
|
||||
e_dialog_radio_set (priv->classification_public,
|
||||
CAL_COMPONENT_CLASS_PRIVATE,
|
||||
classification_map);
|
||||
break;
|
||||
|
||||
case CAL_COMPONENT_CLASS_CONFIDENTIAL:
|
||||
e_dialog_radio_set (priv->classification_public, CAL_COMPONENT_CLASS_CONFIDENTIAL,
|
||||
e_dialog_radio_set (priv->classification_public,
|
||||
CAL_COMPONENT_CLASS_CONFIDENTIAL,
|
||||
classification_map);
|
||||
break;
|
||||
|
||||
@ -382,14 +385,15 @@ event_page_fill_widgets (EditorPage *page, CalComponent *comp)
|
||||
}
|
||||
|
||||
/* Categories */
|
||||
|
||||
cal_component_get_categories (comp, &categories);
|
||||
e_dialog_editable_set (priv->categories, categories);
|
||||
|
||||
priv->updating = FALSE;
|
||||
}
|
||||
|
||||
/* fill_component handler for the event page */
|
||||
static void
|
||||
event_page_fill_component (EditorPage *page, CalComponent *comp)
|
||||
event_page_fill_component (CompEditorPage *page, CalComponent *comp)
|
||||
{
|
||||
EventPage *epage;
|
||||
EventPagePrivate *priv;
|
||||
@ -477,13 +481,14 @@ event_page_fill_component (EditorPage *page, CalComponent *comp)
|
||||
|
||||
/* Classification */
|
||||
|
||||
classif = e_dialog_radio_get (priv->classification_public, classification_map);
|
||||
classif = e_dialog_radio_get (priv->classification_public,
|
||||
classification_map);
|
||||
cal_component_set_classification (comp, classif);
|
||||
}
|
||||
|
||||
/* set_summary handler for the event page */
|
||||
static void
|
||||
event_page_set_summary (EditorPage *page, const char *summary)
|
||||
event_page_set_summary (CompEditorPage *page, const char *summary)
|
||||
{
|
||||
EventPage *epage;
|
||||
EventPagePrivate *priv;
|
||||
@ -496,24 +501,8 @@ event_page_set_summary (EditorPage *page, const char *summary)
|
||||
gtk_signal_handler_unblock_by_data (GTK_OBJECT (priv->summary), epage);
|
||||
}
|
||||
|
||||
/* get_summary handler for the event page */
|
||||
static char *
|
||||
event_page_get_summary (EditorPage *page)
|
||||
{
|
||||
EventPage *epage;
|
||||
EventPagePrivate *priv;
|
||||
|
||||
epage = EVENT_PAGE (page);
|
||||
priv = epage->priv;
|
||||
|
||||
return e_utf8_gtk_entry_get_text (GTK_ENTRY (priv->summary));
|
||||
}
|
||||
|
||||
/* set_dates handler for the event page. We do nothing since we are *the*
|
||||
* only provider of the date values.
|
||||
*/
|
||||
static void
|
||||
event_page_set_dates (EditorPage *page, time_t start, time_t end)
|
||||
event_page_set_dates (CompEditorPage *page, CompEditorPageDates *dates)
|
||||
{
|
||||
/* nothing */
|
||||
}
|
||||
@ -525,22 +514,17 @@ static gboolean
|
||||
get_widgets (EventPage *epage)
|
||||
{
|
||||
EventPagePrivate *priv;
|
||||
GtkWidget *toplevel;
|
||||
|
||||
priv = epage->priv;
|
||||
|
||||
#define GW(name) glade_xml_get_widget (priv->xml, name)
|
||||
|
||||
toplevel = GW ("event-toplevel");
|
||||
priv->main = GW ("event-page");
|
||||
if (!(toplevel && priv->main))
|
||||
return FALSE;
|
||||
|
||||
g_assert (priv->main);
|
||||
gtk_widget_ref (priv->main);
|
||||
gtk_widget_unparent (priv->main);
|
||||
gtk_widget_destroy (toplevel);
|
||||
|
||||
priv->summary = GW ("summary");
|
||||
priv->summary = GW ("general-summary");
|
||||
|
||||
priv->start_time = GW ("start-time");
|
||||
priv->end_time = GW ("end-time");
|
||||
@ -579,9 +563,19 @@ static void
|
||||
summary_changed_cb (GtkEditable *editable, gpointer data)
|
||||
{
|
||||
EventPage *epage;
|
||||
EventPagePrivate *priv;
|
||||
gchar *summary;
|
||||
|
||||
epage = EVENT_PAGE (data);
|
||||
editor_page_notify_summary_changed (EDITOR_PAGE (epage));
|
||||
priv = epage->priv;
|
||||
|
||||
if (priv->updating)
|
||||
return;
|
||||
|
||||
summary = gtk_editable_get_chars (editable, 0, -1);
|
||||
comp_editor_page_notify_summary_changed (COMP_EDITOR_PAGE (epage),
|
||||
summary);
|
||||
g_free (summary);
|
||||
}
|
||||
|
||||
/* Callback used when the start or end date widgets change. We check that the
|
||||
@ -594,12 +588,15 @@ date_changed_cb (EDateEdit *dedit, gpointer data)
|
||||
EventPagePrivate *priv;
|
||||
time_t start, end;
|
||||
struct tm tm_start, tm_end;
|
||||
|
||||
CompEditorPageDates dates;
|
||||
|
||||
epage = EVENT_PAGE (data);
|
||||
priv = epage->priv;
|
||||
|
||||
/* Ensure that start < end */
|
||||
if (priv->updating)
|
||||
return;
|
||||
|
||||
/* Ensure that start < end */
|
||||
start = e_date_edit_get_time (E_DATE_EDIT (priv->start_time));
|
||||
g_assert (start != -1);
|
||||
end = e_date_edit_get_time (E_DATE_EDIT (priv->end_time));
|
||||
@ -611,10 +608,10 @@ date_changed_cb (EDateEdit *dedit, gpointer data)
|
||||
|
||||
if (start == end && tm_start.tm_hour == 0
|
||||
&& tm_start.tm_min == 0 && tm_start.tm_sec == 0) {
|
||||
/* If the start and end times are the same, but both are
|
||||
* on day boundaries, then that is OK since it means we
|
||||
* have an all-day event lasting 1 day. So we do
|
||||
* nothing here.
|
||||
/* If the start and end times are the same, but both
|
||||
* are on day boundaries, then that is OK since it
|
||||
* means we have an all-day event lasting 1 day. So
|
||||
* we do nothing here.
|
||||
*/
|
||||
} else if (GTK_WIDGET (dedit) == priv->start_time) {
|
||||
/* Modify the end time */
|
||||
@ -627,7 +624,8 @@ date_changed_cb (EDateEdit *dedit, gpointer data)
|
||||
tm_end.tm_sec = tm_start.tm_sec;
|
||||
|
||||
gtk_signal_handler_block_by_data (GTK_OBJECT (priv->end_time), epage);
|
||||
e_date_edit_set_time (E_DATE_EDIT (priv->end_time), mktime (&tm_end));
|
||||
end = mktime (&tm_end);
|
||||
e_date_edit_set_time (E_DATE_EDIT (priv->end_time), end);
|
||||
gtk_signal_handler_unblock_by_data (GTK_OBJECT (priv->end_time), epage);
|
||||
} else if (GTK_WIDGET (dedit) == priv->end_time) {
|
||||
/* Modify the start time */
|
||||
@ -640,7 +638,8 @@ date_changed_cb (EDateEdit *dedit, gpointer data)
|
||||
tm_start.tm_sec = tm_end.tm_sec;
|
||||
|
||||
gtk_signal_handler_block_by_data (GTK_OBJECT (priv->start_time), epage);
|
||||
e_date_edit_set_time (E_DATE_EDIT (priv->start_time), mktime (&tm_start));
|
||||
start = mktime (&tm_start);
|
||||
e_date_edit_set_time (E_DATE_EDIT (priv->start_time), start);
|
||||
gtk_signal_handler_unblock_by_data (GTK_OBJECT (priv->start_time), epage);
|
||||
} else
|
||||
g_assert_not_reached ();
|
||||
@ -650,7 +649,12 @@ date_changed_cb (EDateEdit *dedit, gpointer data)
|
||||
check_all_day (epage);
|
||||
|
||||
/* Notify upstream */
|
||||
gtk_signal_emit (GTK_OBJECT (epage), event_page_signals[DATES_CHANGED]);
|
||||
dates.start = start;
|
||||
dates.end = end;
|
||||
dates.due = 0;
|
||||
dates.complete = 0;
|
||||
comp_editor_page_notify_dates_changed (COMP_EDITOR_PAGE (epage),
|
||||
&dates);
|
||||
}
|
||||
|
||||
/* Callback: all day event button toggled.
|
||||
@ -666,19 +670,21 @@ all_day_event_toggled_cb (GtkWidget *toggle, gpointer data)
|
||||
struct tm start_tm, end_tm;
|
||||
time_t start_t, end_t;
|
||||
gboolean all_day;
|
||||
|
||||
CompEditorPageDates dates;
|
||||
|
||||
epage = EVENT_PAGE (data);
|
||||
priv = epage->priv;
|
||||
|
||||
/* When the all_day toggle is turned on, the start date is rounded down
|
||||
* to the start of the day, and end date is rounded down to the start of
|
||||
* the day on which the event ends. The event is then taken to be
|
||||
* inclusive of the days between the start and end days. Note that if
|
||||
* the event end is at midnight, we do not round it down to the previous
|
||||
* day, since if we do that and the user repeatedly turns the all_day
|
||||
* toggle on and off, the event keeps shrinking. (We'd also need to
|
||||
* make sure we didn't adjust the time when the radio button is
|
||||
* initially set.)
|
||||
/* When the all_day toggle is turned on, the start date is
|
||||
* rounded down to the start of the day, and end date is
|
||||
* rounded down to the start of the day on which the event
|
||||
* ends. The event is then taken to be inclusive of the days
|
||||
* between the start and end days. Note that if the event end
|
||||
* is at midnight, we do not round it down to the previous
|
||||
* day, since if we do that and the user repeatedly turns the
|
||||
* all_day toggle on and off, the event keeps shrinking.
|
||||
* (We'd also need to make sure we didn't adjust the time when
|
||||
* the radio button is initially set.)
|
||||
*
|
||||
* When the all_day_toggle is turned off, we set the event start to the
|
||||
* start of the working day, and if the event end is on or before the
|
||||
@ -737,20 +743,30 @@ all_day_event_toggled_cb (GtkWidget *toggle, gpointer data)
|
||||
}
|
||||
}
|
||||
|
||||
gtk_signal_handler_block_by_data (GTK_OBJECT (priv->start_time), epage);
|
||||
gtk_signal_handler_block_by_data (GTK_OBJECT (priv->end_time), epage);
|
||||
gtk_signal_handler_block_by_data (GTK_OBJECT (priv->start_time),
|
||||
epage);
|
||||
gtk_signal_handler_block_by_data (GTK_OBJECT (priv->end_time),
|
||||
epage);
|
||||
|
||||
e_date_edit_set_time (E_DATE_EDIT (priv->start_time), mktime (&start_tm));
|
||||
e_date_edit_set_time (E_DATE_EDIT (priv->end_time), mktime (&end_tm));
|
||||
start_t = mktime (&start_tm);
|
||||
end_t = mktime (&end_tm);
|
||||
e_date_edit_set_time (E_DATE_EDIT (priv->start_time), start_t);
|
||||
e_date_edit_set_time (E_DATE_EDIT (priv->end_time), end_t);
|
||||
|
||||
gtk_signal_handler_unblock_by_data (GTK_OBJECT (priv->start_time), epage);
|
||||
gtk_signal_handler_unblock_by_data (GTK_OBJECT (priv->end_time), epage);
|
||||
gtk_signal_handler_unblock_by_data (GTK_OBJECT (priv->start_time),
|
||||
epage);
|
||||
gtk_signal_handler_unblock_by_data (GTK_OBJECT (priv->end_time),
|
||||
epage);
|
||||
|
||||
e_date_edit_set_show_time (E_DATE_EDIT (priv->start_time), !all_day);
|
||||
e_date_edit_set_show_time (E_DATE_EDIT (priv->end_time), !all_day);
|
||||
|
||||
/* Notify upstream */
|
||||
gtk_signal_emit (GTK_OBJECT (epage), event_page_signals[DATES_CHANGED]);
|
||||
dates.start = start_t;
|
||||
dates.end = end_t;
|
||||
dates.due = 0;
|
||||
comp_editor_page_notify_dates_changed (COMP_EDITOR_PAGE (epage),
|
||||
&dates);
|
||||
}
|
||||
|
||||
/* Callback used when the categories button is clicked; we must bring up the
|
||||
@ -792,9 +808,13 @@ static void
|
||||
field_changed_cb (GtkWidget *widget, gpointer data)
|
||||
{
|
||||
EventPage *epage;
|
||||
|
||||
EventPagePrivate *priv;
|
||||
|
||||
epage = EVENT_PAGE (data);
|
||||
editor_page_notify_changed (EDITOR_PAGE (epage));
|
||||
priv = epage->priv;
|
||||
|
||||
if (!priv->updating)
|
||||
comp_editor_page_notify_changed (COMP_EDITOR_PAGE (epage));
|
||||
}
|
||||
|
||||
/* Hooks the widget signals */
|
||||
@ -836,12 +856,15 @@ init_widgets (EventPage *epage)
|
||||
GTK_SIGNAL_FUNC (field_changed_cb), epage);
|
||||
gtk_signal_connect (GTK_OBJECT (priv->description), "changed",
|
||||
GTK_SIGNAL_FUNC (field_changed_cb), epage);
|
||||
gtk_signal_connect (GTK_OBJECT (priv->classification_public), "toggled",
|
||||
GTK_SIGNAL_FUNC (field_changed_cb), epage);
|
||||
gtk_signal_connect (GTK_OBJECT (priv->classification_private), "toggled",
|
||||
GTK_SIGNAL_FUNC (field_changed_cb), epage);
|
||||
gtk_signal_connect (GTK_OBJECT (priv->classification_confidential), "toggled",
|
||||
GTK_SIGNAL_FUNC (field_changed_cb), epage);
|
||||
gtk_signal_connect (GTK_OBJECT (priv->classification_public),
|
||||
"toggled", GTK_SIGNAL_FUNC (field_changed_cb),
|
||||
epage);
|
||||
gtk_signal_connect (GTK_OBJECT (priv->classification_private),
|
||||
"toggled", GTK_SIGNAL_FUNC (field_changed_cb),
|
||||
epage);
|
||||
gtk_signal_connect (GTK_OBJECT (priv->classification_confidential),
|
||||
"toggled", GTK_SIGNAL_FUNC (field_changed_cb),
|
||||
epage);
|
||||
gtk_signal_connect (GTK_OBJECT (priv->categories), "changed",
|
||||
GTK_SIGNAL_FUNC (field_changed_cb), epage);
|
||||
|
||||
@ -869,14 +892,17 @@ event_page_construct (EventPage *epage)
|
||||
|
||||
priv = epage->priv;
|
||||
|
||||
priv->xml = glade_xml_new (EVOLUTION_GLADEDIR "/event-page.glade", NULL);
|
||||
priv->xml = glade_xml_new (EVOLUTION_GLADEDIR "/event-page.glade",
|
||||
NULL);
|
||||
if (!priv->xml) {
|
||||
g_message ("event_page_construct(): Could not load the Glade XML file!");
|
||||
g_message ("event_page_construct(): "
|
||||
"Could not load the Glade XML file!");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (!get_widgets (epage)) {
|
||||
g_message ("event_page_construct(): Could not find all widgets in the XML file!");
|
||||
g_message ("event_page_construct(): "
|
||||
"Could not find all widgets in the XML file!");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -907,27 +933,8 @@ event_page_new (void)
|
||||
return epage;
|
||||
}
|
||||
|
||||
/**
|
||||
* event_page_get_dates:
|
||||
* @page: An event page.
|
||||
* @start: Return value for the start date, can be NULL.
|
||||
* @end: Return value for the end date, can be NULL.
|
||||
*
|
||||
* Queries the start and end dates for the calendar component in an event page.
|
||||
**/
|
||||
void
|
||||
event_page_get_dates (EventPage *page, time_t *start, time_t *end)
|
||||
GtkWidget *
|
||||
make_date_edit (void)
|
||||
{
|
||||
EventPagePrivate *priv;
|
||||
|
||||
g_return_if_fail (page != NULL);
|
||||
g_return_if_fail (IS_EVENT_PAGE (page));
|
||||
|
||||
priv = page->priv;
|
||||
|
||||
if (start)
|
||||
*start = e_date_edit_get_time (E_DATE_EDIT (priv->start_time));
|
||||
|
||||
if (end)
|
||||
*end = e_date_edit_get_time (E_DATE_EDIT (priv->end_time));
|
||||
return date_edit_new (TRUE, TRUE);
|
||||
}
|
||||
|
||||
@ -18,6 +18,7 @@
|
||||
<widget>
|
||||
<class>GtkWindow</class>
|
||||
<name>event-toplevel</name>
|
||||
<visible>False</visible>
|
||||
<title>window1</title>
|
||||
<type>GTK_WINDOW_TOPLEVEL</type>
|
||||
<position>GTK_WIN_POS_NONE</position>
|
||||
@ -349,7 +350,6 @@
|
||||
<class>GtkButton</class>
|
||||
<name>contacts-button</name>
|
||||
<can_focus>True</can_focus>
|
||||
<relief>GTK_RELIEF_NORMAL</relief>
|
||||
<child>
|
||||
<padding>0</padding>
|
||||
<expand>False</expand>
|
||||
@ -388,7 +388,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>
|
||||
|
||||
@ -25,7 +25,7 @@
|
||||
#ifndef EVENT_PAGE_H
|
||||
#define EVENT_PAGE_H
|
||||
|
||||
#include "editor-page.h"
|
||||
#include "comp-editor-page.h"
|
||||
|
||||
BEGIN_GNOME_DECLS
|
||||
|
||||
@ -33,35 +33,27 @@ BEGIN_GNOME_DECLS
|
||||
|
||||
#define TYPE_EVENT_PAGE (event_page_get_type ())
|
||||
#define EVENT_PAGE(obj) (GTK_CHECK_CAST ((obj), TYPE_EVENT_PAGE, EventPage))
|
||||
#define EVENT_PAGE_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), TYPE_EVENT_PAGE, \
|
||||
EventPageClass))
|
||||
#define EVENT_PAGE_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), TYPE_EVENT_PAGE, EventPageClass))
|
||||
#define IS_EVENT_PAGE(obj) (GTK_CHECK_TYPE ((obj), TYPE_EVENT_PAGE))
|
||||
#define IS_EVENT_PAGE_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), TYPE_EVENT_PAGE))
|
||||
|
||||
typedef struct _EventPagePrivate EventPagePrivate;
|
||||
|
||||
typedef struct {
|
||||
EditorPage page;
|
||||
CompEditorPage page;
|
||||
|
||||
/* Private data */
|
||||
EventPagePrivate *priv;
|
||||
} EventPage;
|
||||
|
||||
typedef struct {
|
||||
EditorPageClass parent_class;
|
||||
|
||||
/* Notification signals */
|
||||
|
||||
void (* dates_changed) (EventPage *epage);
|
||||
CompEditorPageClass parent_class;
|
||||
} EventPageClass;
|
||||
|
||||
GtkType event_page_get_type (void);
|
||||
|
||||
GtkType event_page_get_type (void);
|
||||
EventPage *event_page_construct (EventPage *epage);
|
||||
|
||||
EventPage *event_page_new (void);
|
||||
|
||||
void event_page_get_dates (EventPage *epage, time_t *start, time_t *end);
|
||||
EventPage *event_page_new (void);
|
||||
|
||||
|
||||
|
||||
|
||||
@ -39,6 +39,7 @@
|
||||
#include "../tag-calendar.h"
|
||||
#include "../weekday-picker.h"
|
||||
#include "../widget-util.h"
|
||||
#include "comp-editor-util.h"
|
||||
#include "recurrence-page.h"
|
||||
|
||||
|
||||
@ -102,6 +103,9 @@ static const int ending_types_map[] = {
|
||||
|
||||
/* Private part of the RecurrencePage structure */
|
||||
struct _RecurrencePagePrivate {
|
||||
/* Component we use to expand the recurrence rules for the preview */
|
||||
CalComponent *comp;
|
||||
|
||||
/* Glade XML data */
|
||||
GladeXML *xml;
|
||||
|
||||
@ -110,7 +114,7 @@ struct _RecurrencePagePrivate {
|
||||
GtkWidget *main;
|
||||
|
||||
GtkWidget *summary;
|
||||
GtkWidget *starting_date;
|
||||
GtkWidget *date_time;
|
||||
|
||||
GtkWidget *none;
|
||||
GtkWidget *simple;
|
||||
@ -157,8 +161,7 @@ struct _RecurrencePagePrivate {
|
||||
/* For the recurrence preview, the actual widget */
|
||||
GtkWidget *preview_calendar;
|
||||
|
||||
/* Component we use to expand the recurrence rules for the preview calendar */
|
||||
CalComponent *comp;
|
||||
gboolean updating;
|
||||
};
|
||||
|
||||
|
||||
@ -167,14 +170,15 @@ static void recurrence_page_class_init (RecurrencePageClass *class);
|
||||
static void recurrence_page_init (RecurrencePage *rpage);
|
||||
static void recurrence_page_destroy (GtkObject *object);
|
||||
|
||||
static GtkWidget *recurrence_page_get_widget (EditorPage *page);
|
||||
static void recurrence_page_fill_widgets (EditorPage *page, CalComponent *comp);
|
||||
static void recurrence_page_fill_component (EditorPage *page, CalComponent *comp);
|
||||
static void recurrence_page_set_summary (EditorPage *page, const char *summary);
|
||||
static char *recurrence_page_get_summary (EditorPage *page);
|
||||
static void recurrence_page_set_dates (EditorPage *page, time_t start, time_t end);
|
||||
static GtkWidget *recurrence_page_get_widget (CompEditorPage *page);
|
||||
static void recurrence_page_fill_widgets (CompEditorPage *page, CalComponent *comp);
|
||||
static void recurrence_page_fill_component (CompEditorPage *page, CalComponent *comp);
|
||||
static void recurrence_page_set_summary (CompEditorPage *page, const char *summary);
|
||||
static void recurrence_page_set_dates (CompEditorPage *page, CompEditorPageDates *dates);
|
||||
|
||||
static EditorPageClass *parent_class = NULL;
|
||||
static void field_changed (RecurrencePage *apage);
|
||||
|
||||
static CompEditorPageClass *parent_class = NULL;
|
||||
|
||||
|
||||
|
||||
@ -203,7 +207,8 @@ recurrence_page_get_type (void)
|
||||
(GtkClassInitFunc) NULL
|
||||
};
|
||||
|
||||
recurrence_page_type = gtk_type_unique (TYPE_EDITOR_PAGE, &recurrence_page_info);
|
||||
recurrence_page_type = gtk_type_unique (TYPE_COMP_EDITOR_PAGE,
|
||||
&recurrence_page_info);
|
||||
}
|
||||
|
||||
return recurrence_page_type;
|
||||
@ -213,19 +218,18 @@ recurrence_page_get_type (void)
|
||||
static void
|
||||
recurrence_page_class_init (RecurrencePageClass *class)
|
||||
{
|
||||
EditorPageClass *editor_page_class;
|
||||
CompEditorPageClass *editor_page_class;
|
||||
GtkObjectClass *object_class;
|
||||
|
||||
editor_page_class = (EditorPageClass *) class;
|
||||
editor_page_class = (CompEditorPageClass *) class;
|
||||
object_class = (GtkObjectClass *) class;
|
||||
|
||||
parent_class = gtk_type_class (TYPE_EDITOR_PAGE);
|
||||
parent_class = gtk_type_class (TYPE_COMP_EDITOR_PAGE);
|
||||
|
||||
editor_page_class->get_widget = recurrence_page_get_widget;
|
||||
editor_page_class->fill_widgets = recurrence_page_fill_widgets;
|
||||
editor_page_class->fill_component = recurrence_page_fill_component;
|
||||
editor_page_class->set_summary = recurrence_page_set_summary;
|
||||
editor_page_class->get_summary = recurrence_page_get_summary;
|
||||
editor_page_class->set_dates = recurrence_page_set_dates;
|
||||
|
||||
object_class->destroy = recurrence_page_destroy;
|
||||
@ -244,7 +248,7 @@ recurrence_page_init (RecurrencePage *rpage)
|
||||
|
||||
priv->main = NULL;
|
||||
priv->summary = NULL;
|
||||
priv->starting_date = NULL;
|
||||
priv->date_time = NULL;
|
||||
priv->none = NULL;
|
||||
priv->simple = NULL;
|
||||
priv->custom = NULL;
|
||||
@ -276,22 +280,23 @@ static void
|
||||
free_exception_clist_data (RecurrencePage *rpage)
|
||||
{
|
||||
RecurrencePagePrivate *priv;
|
||||
GtkCList *clist;
|
||||
int i;
|
||||
|
||||
priv = rpage->priv;
|
||||
|
||||
clist = GTK_CLIST (priv->exception_list);
|
||||
if (priv->exception_list) {
|
||||
GtkCList *clist = GTK_CLIST (priv->exception_list);
|
||||
|
||||
for (i = 0; i < clist->rows; i++) {
|
||||
gpointer data;
|
||||
|
||||
data = gtk_clist_get_row_data (clist, i);
|
||||
g_free (data);
|
||||
gtk_clist_set_row_data (clist, i, NULL);
|
||||
for (i = 0; i < clist->rows; i++) {
|
||||
gpointer data;
|
||||
|
||||
data = gtk_clist_get_row_data (clist, i);
|
||||
g_free (data);
|
||||
gtk_clist_set_row_data (clist, i, NULL);
|
||||
}
|
||||
|
||||
gtk_clist_clear (clist);
|
||||
}
|
||||
|
||||
gtk_clist_clear (clist);
|
||||
}
|
||||
|
||||
/* Destroy handler for the recurrence page */
|
||||
@ -325,7 +330,7 @@ recurrence_page_destroy (GtkObject *object)
|
||||
|
||||
/* get_widget handler for the recurrence page */
|
||||
static GtkWidget *
|
||||
recurrence_page_get_widget (EditorPage *page)
|
||||
recurrence_page_get_widget (CompEditorPage *page)
|
||||
{
|
||||
RecurrencePage *rpage;
|
||||
RecurrencePagePrivate *priv;
|
||||
@ -366,7 +371,9 @@ clear_widgets (RecurrencePage *rpage)
|
||||
|
||||
menu = gtk_option_menu_get_menu (GTK_OPTION_MENU (priv->interval_unit));
|
||||
gtk_signal_handler_block_by_data (GTK_OBJECT (menu), rpage);
|
||||
e_dialog_option_menu_set (priv->interval_unit, ICAL_DAILY_RECURRENCE, freq_map);
|
||||
e_dialog_option_menu_set (priv->interval_unit,
|
||||
ICAL_DAILY_RECURRENCE,
|
||||
freq_map);
|
||||
gtk_signal_handler_unblock_by_data (GTK_OBJECT (menu), rpage);
|
||||
|
||||
priv->ending_date = time (NULL);
|
||||
@ -374,7 +381,9 @@ clear_widgets (RecurrencePage *rpage)
|
||||
|
||||
menu = gtk_option_menu_get_menu (GTK_OPTION_MENU (priv->ending_menu));
|
||||
gtk_signal_handler_block_by_data (GTK_OBJECT (menu), rpage);
|
||||
e_dialog_option_menu_set (priv->ending_menu, ENDING_FOREVER, ending_types_map);
|
||||
e_dialog_option_menu_set (priv->ending_menu,
|
||||
ENDING_FOREVER,
|
||||
ending_types_map);
|
||||
gtk_signal_handler_unblock_by_data (GTK_OBJECT (menu), rpage);
|
||||
|
||||
/* Exceptions list */
|
||||
@ -455,8 +464,8 @@ fill_exception_widgets (RecurrencePage *rpage, CalComponent *comp)
|
||||
gtk_clist_select_row (GTK_CLIST (priv->exception_list), 0, 0);
|
||||
}
|
||||
|
||||
/* Computes a weekday mask for the start day of a calendar component, for use in
|
||||
* a WeekdayPicker widget.
|
||||
/* Computes a weekday mask for the start day of a calendar component,
|
||||
* for use in a WeekdayPicker widget.
|
||||
*/
|
||||
static guint8
|
||||
get_start_weekday_mask (CalComponent *comp)
|
||||
@ -533,9 +542,11 @@ sensitize_recur_widgets (RecurrencePage *rpage)
|
||||
gtk_widget_set_sensitive (priv->params, FALSE);
|
||||
gtk_widget_hide (priv->params);
|
||||
|
||||
label = gtk_label_new (_("This appointment contains recurrences that Evolution "
|
||||
label = gtk_label_new (_("This appointment contains "
|
||||
"recurrences that Evolution "
|
||||
"cannot edit."));
|
||||
gtk_container_add (GTK_CONTAINER (priv->custom_warning_bin), label);
|
||||
gtk_container_add (GTK_CONTAINER (priv->custom_warning_bin),
|
||||
label);
|
||||
gtk_widget_show_all (priv->custom_warning_bin);
|
||||
break;
|
||||
|
||||
@ -574,7 +585,8 @@ simple_recur_to_comp (RecurrencePage *rpage, CalComponent *comp)
|
||||
|
||||
r.freq = e_dialog_option_menu_get (priv->interval_unit, freq_map);
|
||||
r.interval = e_dialog_spin_get_int (priv->interval_value);
|
||||
r.week_start = ICAL_SUNDAY_WEEKDAY + calendar_config_get_week_start_day ();
|
||||
r.week_start = ICAL_SUNDAY_WEEKDAY
|
||||
+ calendar_config_get_week_start_day ();
|
||||
|
||||
/* Frequency-specific data */
|
||||
|
||||
@ -639,31 +651,38 @@ simple_recur_to_comp (RecurrencePage *rpage, CalComponent *comp)
|
||||
break;
|
||||
|
||||
case MONTH_DAY_MON:
|
||||
r.by_day[0] = nth_weekday (day_index, ICAL_MONDAY_WEEKDAY);
|
||||
r.by_day[0] = nth_weekday (day_index,
|
||||
ICAL_MONDAY_WEEKDAY);
|
||||
break;
|
||||
|
||||
case MONTH_DAY_TUE:
|
||||
r.by_day[0] = nth_weekday (day_index, ICAL_TUESDAY_WEEKDAY);
|
||||
r.by_day[0] = nth_weekday (day_index,
|
||||
ICAL_TUESDAY_WEEKDAY);
|
||||
break;
|
||||
|
||||
case MONTH_DAY_WED:
|
||||
r.by_day[0] = nth_weekday (day_index, ICAL_WEDNESDAY_WEEKDAY);
|
||||
r.by_day[0] = nth_weekday (day_index,
|
||||
ICAL_WEDNESDAY_WEEKDAY);
|
||||
break;
|
||||
|
||||
case MONTH_DAY_THU:
|
||||
r.by_day[0] = nth_weekday (day_index, ICAL_THURSDAY_WEEKDAY);
|
||||
r.by_day[0] = nth_weekday (day_index,
|
||||
ICAL_THURSDAY_WEEKDAY);
|
||||
break;
|
||||
|
||||
case MONTH_DAY_FRI:
|
||||
r.by_day[0] = nth_weekday (day_index, ICAL_FRIDAY_WEEKDAY);
|
||||
r.by_day[0] = nth_weekday (day_index,
|
||||
ICAL_FRIDAY_WEEKDAY);
|
||||
break;
|
||||
|
||||
case MONTH_DAY_SAT:
|
||||
r.by_day[0] = nth_weekday (day_index, ICAL_SATURDAY_WEEKDAY);
|
||||
r.by_day[0] = nth_weekday (day_index,
|
||||
ICAL_SATURDAY_WEEKDAY);
|
||||
break;
|
||||
|
||||
case MONTH_DAY_SUN:
|
||||
r.by_day[0] = nth_weekday (day_index, ICAL_SUNDAY_WEEKDAY);
|
||||
r.by_day[0] = nth_weekday (day_index,
|
||||
ICAL_SUNDAY_WEEKDAY);
|
||||
break;
|
||||
|
||||
default:
|
||||
@ -683,7 +702,8 @@ simple_recur_to_comp (RecurrencePage *rpage, CalComponent *comp)
|
||||
|
||||
/* Ending date */
|
||||
|
||||
ending_type = e_dialog_option_menu_get (priv->ending_menu, ending_types_map);
|
||||
ending_type = e_dialog_option_menu_get (priv->ending_menu,
|
||||
ending_types_map);
|
||||
|
||||
switch (ending_type) {
|
||||
case ENDING_FOR:
|
||||
@ -842,7 +862,7 @@ weekday_picker_changed_cb (WeekdayPicker *wp, gpointer data)
|
||||
|
||||
rpage = RECURRENCE_PAGE (data);
|
||||
|
||||
editor_page_notify_changed (EDITOR_PAGE (rpage));
|
||||
field_changed (rpage);
|
||||
preview_recur (rpage);
|
||||
}
|
||||
|
||||
@ -882,7 +902,8 @@ make_weekly_special (RecurrencePage *rpage)
|
||||
weekday_picker_set_blocked_days (wp, priv->weekday_blocked_day_mask);
|
||||
|
||||
gtk_signal_connect (GTK_OBJECT (wp), "changed",
|
||||
GTK_SIGNAL_FUNC (weekday_picker_changed_cb), rpage);
|
||||
GTK_SIGNAL_FUNC (weekday_picker_changed_cb),
|
||||
rpage);
|
||||
}
|
||||
|
||||
/* Creates the option menu for the monthly recurrence days */
|
||||
@ -938,7 +959,8 @@ adjust_day_index_spin (RecurrencePage *rpage)
|
||||
g_assert (priv->month_index_spin != NULL);
|
||||
g_assert (GTK_IS_SPIN_BUTTON (priv->month_index_spin));
|
||||
|
||||
month_day = e_dialog_option_menu_get (priv->month_day_menu, month_day_options_map);
|
||||
month_day = e_dialog_option_menu_get (priv->month_day_menu,
|
||||
month_day_options_map);
|
||||
|
||||
adj = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (priv->month_index_spin));
|
||||
|
||||
@ -970,9 +992,9 @@ adjust_day_index_spin (RecurrencePage *rpage)
|
||||
}
|
||||
}
|
||||
|
||||
/* Callback used when the monthly day selection menu changes. We need to change
|
||||
* the valid range of the day index spin button; e.g. days are 1-31 while a
|
||||
* Sunday is the 1st through 5th.
|
||||
/* Callback used when the monthly day selection menu changes. We need
|
||||
* to change the valid range of the day index spin button; e.g. days
|
||||
* are 1-31 while a Sunday is the 1st through 5th.
|
||||
*/
|
||||
static void
|
||||
month_day_menu_selection_done_cb (GtkMenuShell *menu_shell, gpointer data)
|
||||
@ -982,7 +1004,7 @@ month_day_menu_selection_done_cb (GtkMenuShell *menu_shell, gpointer data)
|
||||
rpage = RECURRENCE_PAGE (data);
|
||||
|
||||
adjust_day_index_spin (rpage);
|
||||
editor_page_notify_changed (EDITOR_PAGE (rpage));
|
||||
field_changed (rpage);
|
||||
preview_recur (rpage);
|
||||
}
|
||||
|
||||
@ -994,7 +1016,7 @@ month_index_value_changed_cb (GtkAdjustment *adj, gpointer data)
|
||||
|
||||
rpage = RECURRENCE_PAGE (data);
|
||||
|
||||
editor_page_notify_changed (EDITOR_PAGE (rpage));
|
||||
field_changed (rpage);
|
||||
preview_recur (rpage);
|
||||
}
|
||||
|
||||
@ -1024,13 +1046,15 @@ make_monthly_special (RecurrencePage *rpage)
|
||||
|
||||
adj = GTK_ADJUSTMENT (gtk_adjustment_new (1, 1, 31, 1, 10, 10));
|
||||
priv->month_index_spin = gtk_spin_button_new (adj, 1, 0);
|
||||
gtk_box_pack_start (GTK_BOX (hbox), priv->month_index_spin, FALSE, FALSE, 0);
|
||||
gtk_box_pack_start (GTK_BOX (hbox), priv->month_index_spin,
|
||||
FALSE, FALSE, 0);
|
||||
|
||||
label = gtk_label_new (_("th"));
|
||||
gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
|
||||
|
||||
priv->month_day_menu = make_recur_month_menu ();
|
||||
gtk_box_pack_start (GTK_BOX (hbox), priv->month_day_menu, FALSE, FALSE, 0);
|
||||
gtk_box_pack_start (GTK_BOX (hbox), priv->month_day_menu,
|
||||
FALSE, FALSE, 0);
|
||||
|
||||
gtk_widget_show_all (hbox);
|
||||
|
||||
@ -1043,11 +1067,13 @@ make_monthly_special (RecurrencePage *rpage)
|
||||
adjust_day_index_spin (rpage);
|
||||
|
||||
gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
|
||||
GTK_SIGNAL_FUNC (month_index_value_changed_cb), rpage);
|
||||
GTK_SIGNAL_FUNC (month_index_value_changed_cb),
|
||||
rpage);
|
||||
|
||||
menu = gtk_option_menu_get_menu (GTK_OPTION_MENU (priv->month_day_menu));
|
||||
gtk_signal_connect (GTK_OBJECT (menu), "selection_done",
|
||||
GTK_SIGNAL_FUNC (month_day_menu_selection_done_cb), rpage);
|
||||
GTK_SIGNAL_FUNC (month_day_menu_selection_done_cb),
|
||||
rpage);
|
||||
}
|
||||
|
||||
/* Changes the recurrence-special widget to match the interval units.
|
||||
@ -1099,7 +1125,7 @@ make_recurrence_special (RecurrencePage *rpage)
|
||||
}
|
||||
}
|
||||
|
||||
/* Counts the number of elements in the by_xxx fields of an icalrecurrencetype */
|
||||
/* Counts the elements in the by_xxx fields of an icalrecurrencetype */
|
||||
static int
|
||||
count_by_xxx (short *field, int max_elements)
|
||||
{
|
||||
@ -1119,7 +1145,7 @@ ending_until_changed_cb (EDateEdit *de, gpointer data)
|
||||
RecurrencePage *rpage;
|
||||
|
||||
rpage = RECURRENCE_PAGE (data);
|
||||
editor_page_notify_changed (EDITOR_PAGE (rpage));
|
||||
field_changed (rpage);
|
||||
preview_recur (rpage);
|
||||
}
|
||||
|
||||
@ -1140,7 +1166,8 @@ make_ending_until_special (RecurrencePage *rpage)
|
||||
priv->ending_date_edit = date_edit_new (TRUE, FALSE);
|
||||
de = E_DATE_EDIT (priv->ending_date_edit);
|
||||
|
||||
gtk_container_add (GTK_CONTAINER (priv->ending_special), GTK_WIDGET (de));
|
||||
gtk_container_add (GTK_CONTAINER (priv->ending_special),
|
||||
GTK_WIDGET (de));
|
||||
gtk_widget_show_all (GTK_WIDGET (de));
|
||||
|
||||
/* Set the value */
|
||||
@ -1158,7 +1185,7 @@ ending_count_value_changed_cb (GtkAdjustment *adj, gpointer data)
|
||||
RecurrencePage *rpage;
|
||||
|
||||
rpage = RECURRENCE_PAGE (data);
|
||||
editor_page_notify_changed (EDITOR_PAGE (rpage));
|
||||
field_changed (rpage);
|
||||
preview_recur (rpage);
|
||||
}
|
||||
|
||||
@ -1183,7 +1210,8 @@ make_ending_count_special (RecurrencePage *rpage)
|
||||
|
||||
adj = GTK_ADJUSTMENT (gtk_adjustment_new (1, 1, 10000, 1, 10, 10));
|
||||
priv->ending_count_spin = gtk_spin_button_new (adj, 1, 0);
|
||||
gtk_box_pack_start (GTK_BOX (hbox), priv->ending_count_spin, FALSE, FALSE, 0);
|
||||
gtk_box_pack_start (GTK_BOX (hbox), priv->ending_count_spin,
|
||||
FALSE, FALSE, 0);
|
||||
|
||||
label = gtk_label_new (_("occurrences"));
|
||||
gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
|
||||
@ -1195,10 +1223,11 @@ make_ending_count_special (RecurrencePage *rpage)
|
||||
e_dialog_spin_set (priv->ending_count_spin, priv->ending_count);
|
||||
|
||||
gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
|
||||
GTK_SIGNAL_FUNC (ending_count_value_changed_cb), rpage);
|
||||
GTK_SIGNAL_FUNC (ending_count_value_changed_cb),
|
||||
rpage);
|
||||
}
|
||||
|
||||
/* Changes the recurrence-ending-special widget to match the ending date option.
|
||||
/* Changes the recurrence-ending-special widget to match the ending date option
|
||||
*
|
||||
* For: <n> [days, weeks, months, years, occurrences]
|
||||
* Until: <date selector>
|
||||
@ -1219,7 +1248,8 @@ make_ending_special (RecurrencePage *rpage)
|
||||
priv->ending_count_spin = NULL;
|
||||
}
|
||||
|
||||
ending_type = e_dialog_option_menu_get (priv->ending_menu, ending_types_map);
|
||||
ending_type = e_dialog_option_menu_get (priv->ending_menu,
|
||||
ending_types_map);
|
||||
|
||||
switch (ending_type) {
|
||||
case ENDING_FOR:
|
||||
@ -1290,10 +1320,12 @@ fill_ending_date (RecurrencePage *rpage, struct icalrecurrencetype *r)
|
||||
* no rdates or exrules (exdates are handled just fine elsewhere).
|
||||
*/
|
||||
static void
|
||||
recurrence_page_fill_widgets (EditorPage *page, CalComponent *comp)
|
||||
recurrence_page_fill_widgets (CompEditorPage *page, CalComponent *comp)
|
||||
{
|
||||
RecurrencePage *rpage;
|
||||
RecurrencePagePrivate *priv;
|
||||
CalComponentText text;
|
||||
CompEditorPageDates dates;
|
||||
GSList *rrule_list;
|
||||
int len;
|
||||
struct icalrecurrencetype *r;
|
||||
@ -1306,8 +1338,8 @@ recurrence_page_fill_widgets (EditorPage *page, CalComponent *comp)
|
||||
rpage = RECURRENCE_PAGE (page);
|
||||
priv = rpage->priv;
|
||||
|
||||
/* Keep a copy of the component so that we can expand the recurrence set
|
||||
* for the preview.
|
||||
/* Keep a copy of the component so that we can expand the recurrence
|
||||
* set for the preview.
|
||||
*/
|
||||
|
||||
if (priv->comp)
|
||||
@ -1315,10 +1347,21 @@ recurrence_page_fill_widgets (EditorPage *page, CalComponent *comp)
|
||||
|
||||
priv->comp = cal_component_clone (comp);
|
||||
|
||||
/* Clean the page */
|
||||
/* Don't send off changes during this time */
|
||||
priv->updating = TRUE;
|
||||
|
||||
/* Clean the page */
|
||||
clear_widgets (rpage);
|
||||
|
||||
/* Summary */
|
||||
cal_component_get_summary (comp, &text);
|
||||
recurrence_page_set_summary (page, text.value);
|
||||
|
||||
/* Dates */
|
||||
comp_editor_dates (&dates, comp);
|
||||
recurrence_page_set_dates (page, &dates);
|
||||
|
||||
/* Exceptions */
|
||||
fill_exception_widgets (rpage, comp);
|
||||
|
||||
/* Set up defaults for the special widgets */
|
||||
@ -1329,13 +1372,19 @@ recurrence_page_fill_widgets (EditorPage *page, CalComponent *comp)
|
||||
if (!cal_component_has_rdates (comp)
|
||||
&& !cal_component_has_rrules (comp)
|
||||
&& !cal_component_has_exrules (comp)) {
|
||||
gtk_signal_handler_block_by_data (GTK_OBJECT (priv->none), rpage);
|
||||
gtk_signal_handler_block_by_data (GTK_OBJECT (priv->simple), rpage);
|
||||
gtk_signal_handler_block_by_data (GTK_OBJECT (priv->custom), rpage);
|
||||
gtk_signal_handler_block_by_data (GTK_OBJECT (priv->none),
|
||||
rpage);
|
||||
gtk_signal_handler_block_by_data (GTK_OBJECT (priv->simple),
|
||||
rpage);
|
||||
gtk_signal_handler_block_by_data (GTK_OBJECT (priv->custom),
|
||||
rpage);
|
||||
e_dialog_radio_set (priv->none, RECUR_NONE, type_map);
|
||||
gtk_signal_handler_unblock_by_data (GTK_OBJECT (priv->none), rpage);
|
||||
gtk_signal_handler_unblock_by_data (GTK_OBJECT (priv->simple), rpage);
|
||||
gtk_signal_handler_unblock_by_data (GTK_OBJECT (priv->custom), rpage);
|
||||
gtk_signal_handler_unblock_by_data (GTK_OBJECT (priv->none),
|
||||
rpage);
|
||||
gtk_signal_handler_unblock_by_data (GTK_OBJECT (priv->simple),
|
||||
rpage);
|
||||
gtk_signal_handler_unblock_by_data (GTK_OBJECT (priv->custom),
|
||||
rpage);
|
||||
|
||||
gtk_widget_set_sensitive (priv->custom, FALSE);
|
||||
|
||||
@ -1400,7 +1449,9 @@ recurrence_page_fill_widgets (EditorPage *page, CalComponent *comp)
|
||||
|
||||
menu = gtk_option_menu_get_menu (GTK_OPTION_MENU (priv->interval_unit));
|
||||
gtk_signal_handler_block_by_data (GTK_OBJECT (menu), rpage);
|
||||
e_dialog_option_menu_set (priv->interval_unit, ICAL_DAILY_RECURRENCE, freq_map);
|
||||
e_dialog_option_menu_set (priv->interval_unit,
|
||||
ICAL_DAILY_RECURRENCE,
|
||||
freq_map);
|
||||
gtk_signal_handler_unblock_by_data (GTK_OBJECT (menu), rpage);
|
||||
break;
|
||||
|
||||
@ -1465,7 +1516,9 @@ recurrence_page_fill_widgets (EditorPage *page, CalComponent *comp)
|
||||
|
||||
menu = gtk_option_menu_get_menu (GTK_OPTION_MENU (priv->interval_unit));
|
||||
gtk_signal_handler_block_by_data (GTK_OBJECT (menu), rpage);
|
||||
e_dialog_option_menu_set (priv->interval_unit, ICAL_WEEKLY_RECURRENCE, freq_map);
|
||||
e_dialog_option_menu_set (priv->interval_unit,
|
||||
ICAL_WEEKLY_RECURRENCE,
|
||||
freq_map);
|
||||
gtk_signal_handler_unblock_by_data (GTK_OBJECT (menu), rpage);
|
||||
break;
|
||||
}
|
||||
@ -1537,7 +1590,9 @@ recurrence_page_fill_widgets (EditorPage *page, CalComponent *comp)
|
||||
|
||||
menu = gtk_option_menu_get_menu (GTK_OPTION_MENU (priv->interval_unit));
|
||||
gtk_signal_handler_block_by_data (GTK_OBJECT (menu), rpage);
|
||||
e_dialog_option_menu_set (priv->interval_unit, ICAL_MONTHLY_RECURRENCE, freq_map);
|
||||
e_dialog_option_menu_set (priv->interval_unit,
|
||||
ICAL_MONTHLY_RECURRENCE,
|
||||
freq_map);
|
||||
gtk_signal_handler_unblock_by_data (GTK_OBJECT (menu), rpage);
|
||||
break;
|
||||
|
||||
@ -1552,7 +1607,9 @@ recurrence_page_fill_widgets (EditorPage *page, CalComponent *comp)
|
||||
|
||||
menu = gtk_option_menu_get_menu (GTK_OPTION_MENU (priv->interval_unit));
|
||||
gtk_signal_handler_block_by_data (GTK_OBJECT (menu), rpage);
|
||||
e_dialog_option_menu_set (priv->interval_unit, ICAL_YEARLY_RECURRENCE, freq_map);
|
||||
e_dialog_option_menu_set (priv->interval_unit,
|
||||
ICAL_YEARLY_RECURRENCE,
|
||||
freq_map);
|
||||
gtk_signal_handler_unblock_by_data (GTK_OBJECT (menu), rpage);
|
||||
break;
|
||||
|
||||
@ -1601,11 +1658,13 @@ recurrence_page_fill_widgets (EditorPage *page, CalComponent *comp)
|
||||
|
||||
cal_component_free_recur_list (rrule_list);
|
||||
preview_recur (rpage);
|
||||
|
||||
priv->updating = FALSE;
|
||||
}
|
||||
|
||||
/* fill_component handler for the recurrence page */
|
||||
static void
|
||||
recurrence_page_fill_component (EditorPage *page, CalComponent *comp)
|
||||
recurrence_page_fill_component (CompEditorPage *page, CalComponent *comp)
|
||||
{
|
||||
RecurrencePage *rpage;
|
||||
|
||||
@ -1615,52 +1674,33 @@ recurrence_page_fill_component (EditorPage *page, CalComponent *comp)
|
||||
|
||||
/* set_summary handler for the recurrence page */
|
||||
static void
|
||||
recurrence_page_set_summary (EditorPage *page, const char *summary)
|
||||
recurrence_page_set_summary (CompEditorPage *page, const char *summary)
|
||||
{
|
||||
RecurrencePage *rpage;
|
||||
RecurrencePagePrivate *priv;
|
||||
|
||||
gchar *s;
|
||||
|
||||
rpage = RECURRENCE_PAGE (page);
|
||||
priv = rpage->priv;
|
||||
|
||||
gtk_signal_handler_block_by_data (GTK_OBJECT (priv->summary), rpage);
|
||||
e_utf8_gtk_entry_set_text (GTK_ENTRY (priv->summary), summary);
|
||||
gtk_signal_handler_unblock_by_data (GTK_OBJECT (priv->summary), rpage);
|
||||
}
|
||||
|
||||
/* get_summary handler for the recurrence page */
|
||||
static char *
|
||||
recurrence_page_get_summary (EditorPage *page)
|
||||
{
|
||||
RecurrencePage *rpage;
|
||||
RecurrencePagePrivate *priv;
|
||||
|
||||
rpage = RECURRENCE_PAGE (page);
|
||||
priv = rpage->priv;
|
||||
|
||||
return e_utf8_gtk_entry_get_text (GTK_ENTRY (priv->summary));
|
||||
s = e_utf8_to_gtk_string (priv->summary, summary);
|
||||
gtk_label_set_text (GTK_LABEL (priv->summary), s);
|
||||
g_free (s);
|
||||
}
|
||||
|
||||
/* set_dates handler for the recurrence page */
|
||||
static void
|
||||
recurrence_page_set_dates (EditorPage *page, time_t start, time_t end)
|
||||
recurrence_page_set_dates (CompEditorPage *page, CompEditorPageDates *dates)
|
||||
{
|
||||
RecurrencePage *rpage;
|
||||
RecurrencePagePrivate *priv;
|
||||
char str[128];
|
||||
struct tm tm;
|
||||
CalComponentDateTime dt;
|
||||
struct icaltimetype icaltime;
|
||||
|
||||
rpage = RECURRENCE_PAGE (page);
|
||||
priv = rpage->priv;
|
||||
|
||||
/* Set the starting date label */
|
||||
|
||||
tm = *localtime (&start);
|
||||
strftime (str, sizeof (str), _("%A %b %d %Y %H:%M:%S"), &tm);
|
||||
|
||||
gtk_label_set_text (GTK_LABEL (priv->starting_date), str);
|
||||
comp_editor_date_label (dates, priv->date_time);
|
||||
|
||||
/* Copy the dates to our component */
|
||||
|
||||
@ -1670,11 +1710,13 @@ recurrence_page_set_dates (EditorPage *page, time_t start, time_t end)
|
||||
dt.value = &icaltime;
|
||||
dt.tzid = NULL;
|
||||
|
||||
*dt.value = icaltime_from_timet (start, FALSE);
|
||||
*dt.value = icaltime_from_timet (dates->start, FALSE);
|
||||
cal_component_set_dtstart (priv->comp, &dt);
|
||||
|
||||
*dt.value = icaltime_from_timet (end, FALSE);
|
||||
cal_component_set_dtend (priv->comp, &dt);
|
||||
if (dates->end != 0) {
|
||||
*dt.value = icaltime_from_timet (dates->end, FALSE);
|
||||
cal_component_set_dtend (priv->comp, &dt);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -1684,23 +1726,18 @@ static gboolean
|
||||
get_widgets (RecurrencePage *rpage)
|
||||
{
|
||||
RecurrencePagePrivate *priv;
|
||||
GtkWidget *toplevel;
|
||||
|
||||
priv = rpage->priv;
|
||||
|
||||
#define GW(name) glade_xml_get_widget (priv->xml, name)
|
||||
|
||||
toplevel = GW ("recurrence-toplevel");
|
||||
priv->main = GW ("recurrence-page");
|
||||
if (!(toplevel && priv->main))
|
||||
return FALSE;
|
||||
|
||||
g_assert (priv->main);
|
||||
gtk_widget_ref (priv->main);
|
||||
gtk_widget_unparent (priv->main);
|
||||
gtk_widget_destroy (toplevel);
|
||||
|
||||
priv->summary = GW ("summary");
|
||||
priv->starting_date = GW ("starting-date");
|
||||
priv->date_time = GW ("date-time");
|
||||
|
||||
priv->none = GW ("none");
|
||||
priv->simple = GW ("simple");
|
||||
@ -1723,9 +1760,9 @@ get_widgets (RecurrencePage *rpage)
|
||||
priv->preview_bin = GW ("preview-bin");
|
||||
|
||||
#undef GW
|
||||
|
||||
|
||||
return (priv->summary
|
||||
&& priv->starting_date
|
||||
&& priv->date_time
|
||||
&& priv->none
|
||||
&& priv->simple
|
||||
&& priv->custom
|
||||
@ -1744,16 +1781,6 @@ get_widgets (RecurrencePage *rpage)
|
||||
&& priv->preview_bin);
|
||||
}
|
||||
|
||||
/* Callback used when the summary changes; we emit the notification signal. */
|
||||
static void
|
||||
summary_changed_cb (GtkEditable *editable, gpointer data)
|
||||
{
|
||||
RecurrencePage *rpage;
|
||||
|
||||
rpage = RECURRENCE_PAGE (data);
|
||||
editor_page_notify_summary_changed (EDITOR_PAGE (rpage));
|
||||
}
|
||||
|
||||
/* Callback used when the displayed date range in the recurrence preview
|
||||
* calendar changes.
|
||||
*/
|
||||
@ -1776,7 +1803,7 @@ type_toggled_cb (GtkToggleButton *toggle, gpointer data)
|
||||
|
||||
rpage = RECURRENCE_PAGE (data);
|
||||
|
||||
editor_page_notify_changed (EDITOR_PAGE (rpage));
|
||||
field_changed (rpage);
|
||||
|
||||
if (toggle->active) {
|
||||
sensitize_recur_widgets (rpage);
|
||||
@ -1792,7 +1819,7 @@ interval_value_changed_cb (GtkAdjustment *adj, gpointer data)
|
||||
|
||||
rpage = RECURRENCE_PAGE (data);
|
||||
|
||||
editor_page_notify_changed (EDITOR_PAGE (rpage));
|
||||
field_changed (rpage);
|
||||
preview_recur (rpage);
|
||||
}
|
||||
|
||||
@ -1806,7 +1833,7 @@ interval_selection_done_cb (GtkMenuShell *menu_shell, gpointer data)
|
||||
|
||||
rpage = RECURRENCE_PAGE (data);
|
||||
|
||||
editor_page_notify_changed (EDITOR_PAGE (rpage));
|
||||
field_changed (rpage);
|
||||
make_recurrence_special (rpage);
|
||||
preview_recur (rpage);
|
||||
}
|
||||
@ -1821,7 +1848,7 @@ ending_selection_done_cb (GtkMenuShell *menu_shell, gpointer data)
|
||||
|
||||
rpage = RECURRENCE_PAGE (data);
|
||||
|
||||
editor_page_notify_changed (EDITOR_PAGE (rpage));
|
||||
field_changed (rpage);
|
||||
make_ending_special (rpage);
|
||||
preview_recur (rpage);
|
||||
}
|
||||
@ -1837,7 +1864,7 @@ exception_add_cb (GtkWidget *widget, gpointer data)
|
||||
rpage = RECURRENCE_PAGE (data);
|
||||
priv = rpage->priv;
|
||||
|
||||
editor_page_notify_changed (EDITOR_PAGE (rpage));
|
||||
field_changed (rpage);
|
||||
|
||||
t = e_date_edit_get_time (E_DATE_EDIT (priv->exception_date));
|
||||
append_exception (rpage, t);
|
||||
@ -1861,7 +1888,7 @@ exception_modify_cb (GtkWidget *widget, gpointer data)
|
||||
if (!clist->selection)
|
||||
return;
|
||||
|
||||
editor_page_notify_changed (EDITOR_PAGE (rpage));
|
||||
field_changed (rpage);
|
||||
|
||||
sel = GPOINTER_TO_INT (clist->selection->data);
|
||||
|
||||
@ -1890,7 +1917,7 @@ exception_delete_cb (GtkWidget *widget, gpointer data)
|
||||
if (!clist->selection)
|
||||
return;
|
||||
|
||||
editor_page_notify_changed (EDITOR_PAGE (rpage));
|
||||
field_changed (rpage);
|
||||
|
||||
sel = GPOINTER_TO_INT (clist->selection->data);
|
||||
|
||||
@ -1912,11 +1939,13 @@ exception_delete_cb (GtkWidget *widget, gpointer data)
|
||||
preview_recur (rpage);
|
||||
}
|
||||
|
||||
/* Callback used when a row is selected in the list of exception dates. We must
|
||||
* update the date/time widgets to reflect the exception's value.
|
||||
/* Callback used when a row is selected in the list of exception
|
||||
* dates. We must update the date/time widgets to reflect the
|
||||
* exception's value.
|
||||
*/
|
||||
static void
|
||||
exception_select_row_cb (GtkCList *clist, gint row, gint col, GdkEvent *event, gpointer data)
|
||||
exception_select_row_cb (GtkCList *clist, gint row, gint col,
|
||||
GdkEvent *event, gpointer data)
|
||||
{
|
||||
RecurrencePage *rpage;
|
||||
RecurrencePagePrivate *priv;
|
||||
@ -1931,6 +1960,18 @@ exception_select_row_cb (GtkCList *clist, gint row, gint col, GdkEvent *event, g
|
||||
e_date_edit_set_time (E_DATE_EDIT (priv->exception_date), *t);
|
||||
}
|
||||
|
||||
/* This is called when any field is changed; it notifies upstream. */
|
||||
static void
|
||||
field_changed (RecurrencePage *rpage)
|
||||
{
|
||||
RecurrencePagePrivate *priv;
|
||||
|
||||
priv = rpage->priv;
|
||||
|
||||
if (!priv->updating)
|
||||
comp_editor_page_notify_changed (COMP_EDITOR_PAGE (rpage));
|
||||
}
|
||||
|
||||
/* Hooks the widget signals */
|
||||
static void
|
||||
init_widgets (RecurrencePage *rpage)
|
||||
@ -1942,19 +1983,17 @@ init_widgets (RecurrencePage *rpage)
|
||||
|
||||
priv = rpage->priv;
|
||||
|
||||
/* Summary */
|
||||
gtk_signal_connect (GTK_OBJECT (priv->summary), "changed",
|
||||
GTK_SIGNAL_FUNC (summary_changed_cb), rpage);
|
||||
|
||||
/* Recurrence preview */
|
||||
|
||||
priv->preview_calendar = e_calendar_new ();
|
||||
ecal = E_CALENDAR (priv->preview_calendar);
|
||||
gtk_signal_connect (GTK_OBJECT (ecal->calitem), "date_range_changed",
|
||||
GTK_SIGNAL_FUNC (preview_date_range_changed_cb), rpage);
|
||||
GTK_SIGNAL_FUNC (preview_date_range_changed_cb),
|
||||
rpage);
|
||||
calendar_config_configure_e_calendar (ecal);
|
||||
e_calendar_item_set_max_days_sel (ecal->calitem, 0);
|
||||
gtk_container_add (GTK_CONTAINER (priv->preview_bin), priv->preview_calendar);
|
||||
gtk_container_add (GTK_CONTAINER (priv->preview_bin),
|
||||
priv->preview_calendar);
|
||||
gtk_widget_show (priv->preview_calendar);
|
||||
|
||||
/* Recurrence types */
|
||||
@ -1970,13 +2009,15 @@ init_widgets (RecurrencePage *rpage)
|
||||
|
||||
adj = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (priv->interval_value));
|
||||
gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
|
||||
GTK_SIGNAL_FUNC (interval_value_changed_cb), rpage);
|
||||
GTK_SIGNAL_FUNC (interval_value_changed_cb),
|
||||
rpage);
|
||||
|
||||
/* Recurrence units */
|
||||
|
||||
menu = gtk_option_menu_get_menu (GTK_OPTION_MENU (priv->interval_unit));
|
||||
gtk_signal_connect (GTK_OBJECT (menu), "selection_done",
|
||||
GTK_SIGNAL_FUNC (interval_selection_done_cb), rpage);
|
||||
GTK_SIGNAL_FUNC (interval_selection_done_cb),
|
||||
rpage);
|
||||
|
||||
/* Recurrence ending */
|
||||
|
||||
@ -2017,14 +2058,17 @@ recurrence_page_construct (RecurrencePage *rpage)
|
||||
|
||||
priv = rpage->priv;
|
||||
|
||||
priv->xml = glade_xml_new (EVOLUTION_GLADEDIR "/recurrence-page.glade", NULL);
|
||||
priv->xml = glade_xml_new (EVOLUTION_GLADEDIR
|
||||
"/recurrence-page.glade", NULL);
|
||||
if (!priv->xml) {
|
||||
g_message ("recurrence_page_construct(): Could not load the Glade XML file!");
|
||||
g_message ("recurrence_page_construct(): "
|
||||
"Could not load the Glade XML file!");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (!get_widgets (rpage)) {
|
||||
g_message ("recurrence_page_construct(): Could not find all widgets in the XML file!");
|
||||
g_message ("recurrence_page_construct(): "
|
||||
"Could not find all widgets in the XML file!");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
@ -18,6 +18,7 @@
|
||||
<widget>
|
||||
<class>GtkWindow</class>
|
||||
<name>recurrence-toplevel</name>
|
||||
<visible>False</visible>
|
||||
<title>window1</title>
|
||||
<type>GTK_WINDOW_TOPLEVEL</type>
|
||||
<position>GTK_WIN_POS_NONE</position>
|
||||
@ -36,7 +37,7 @@
|
||||
<widget>
|
||||
<class>GtkFrame</class>
|
||||
<name>frame35</name>
|
||||
<label>Appointment Basics</label>
|
||||
<label>Basics</label>
|
||||
<label_xalign>0</label_xalign>
|
||||
<shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
|
||||
<child>
|
||||
@ -58,14 +59,13 @@
|
||||
<widget>
|
||||
<class>GtkLabel</class>
|
||||
<name>label66</name>
|
||||
<label>Su_mmary:</label>
|
||||
<label>Summary:</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>recurrence-summary</default_focus_target>
|
||||
<child>
|
||||
<left_attach>0</left_attach>
|
||||
<right_attach>1</right_attach>
|
||||
@ -85,7 +85,7 @@
|
||||
<widget>
|
||||
<class>GtkLabel</class>
|
||||
<name>label67</name>
|
||||
<label>_Starting date:</label>
|
||||
<label>Date/Time:</label>
|
||||
<justify>GTK_JUSTIFY_CENTER</justify>
|
||||
<wrap>False</wrap>
|
||||
<xalign>0</xalign>
|
||||
@ -109,13 +109,15 @@
|
||||
</widget>
|
||||
|
||||
<widget>
|
||||
<class>GtkEntry</class>
|
||||
<name>recurrence-summary</name>
|
||||
<can_focus>True</can_focus>
|
||||
<editable>True</editable>
|
||||
<text_visible>True</text_visible>
|
||||
<text_max_length>0</text_max_length>
|
||||
<text></text>
|
||||
<class>GtkLabel</class>
|
||||
<name>summary</name>
|
||||
<label></label>
|
||||
<justify>GTK_JUSTIFY_CENTER</justify>
|
||||
<wrap>False</wrap>
|
||||
<xalign>0</xalign>
|
||||
<yalign>0.5</yalign>
|
||||
<xpad>4</xpad>
|
||||
<ypad>0</ypad>
|
||||
<child>
|
||||
<left_attach>1</left_attach>
|
||||
<right_attach>2</right_attach>
|
||||
@ -123,9 +125,9 @@
|
||||
<bottom_attach>1</bottom_attach>
|
||||
<xpad>0</xpad>
|
||||
<ypad>0</ypad>
|
||||
<xexpand>True</xexpand>
|
||||
<xexpand>False</xexpand>
|
||||
<yexpand>False</yexpand>
|
||||
<xshrink>True</xshrink>
|
||||
<xshrink>False</xshrink>
|
||||
<yshrink>False</yshrink>
|
||||
<xfill>True</xfill>
|
||||
<yfill>False</yfill>
|
||||
@ -133,12 +135,15 @@
|
||||
</widget>
|
||||
|
||||
<widget>
|
||||
<class>GtkAlignment</class>
|
||||
<name>alignment40</name>
|
||||
<class>GtkLabel</class>
|
||||
<name>date-time</name>
|
||||
<label></label>
|
||||
<justify>GTK_JUSTIFY_CENTER</justify>
|
||||
<wrap>False</wrap>
|
||||
<xalign>0</xalign>
|
||||
<yalign>0.5</yalign>
|
||||
<xscale>0</xscale>
|
||||
<yscale>0</yscale>
|
||||
<xpad>4</xpad>
|
||||
<ypad>0</ypad>
|
||||
<child>
|
||||
<left_attach>1</left_attach>
|
||||
<right_attach>2</right_attach>
|
||||
@ -151,17 +156,8 @@
|
||||
<xshrink>False</xshrink>
|
||||
<yshrink>False</yshrink>
|
||||
<xfill>True</xfill>
|
||||
<yfill>True</yfill>
|
||||
<yfill>False</yfill>
|
||||
</child>
|
||||
|
||||
<widget>
|
||||
<class>Custom</class>
|
||||
<name>recurrence-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>
|
||||
@ -209,7 +205,7 @@
|
||||
|
||||
<widget>
|
||||
<class>GtkRadioButton</class>
|
||||
<name>recurrence-none</name>
|
||||
<name>none</name>
|
||||
<can_focus>True</can_focus>
|
||||
<label>No recurrence</label>
|
||||
<active>False</active>
|
||||
@ -224,7 +220,7 @@
|
||||
|
||||
<widget>
|
||||
<class>GtkRadioButton</class>
|
||||
<name>recurrence-simple</name>
|
||||
<name>simple</name>
|
||||
<can_focus>True</can_focus>
|
||||
<label>Simple recurrence</label>
|
||||
<active>False</active>
|
||||
@ -239,7 +235,7 @@
|
||||
|
||||
<widget>
|
||||
<class>GtkRadioButton</class>
|
||||
<name>recurrence-custom</name>
|
||||
<name>custom</name>
|
||||
<can_focus>True</can_focus>
|
||||
<label>Custom recurrence</label>
|
||||
<active>False</active>
|
||||
@ -266,7 +262,7 @@
|
||||
|
||||
<widget>
|
||||
<class>GtkHBox</class>
|
||||
<name>recurrence-params</name>
|
||||
<name>params</name>
|
||||
<homogeneous>False</homogeneous>
|
||||
<spacing>2</spacing>
|
||||
<child>
|
||||
@ -294,7 +290,7 @@
|
||||
|
||||
<widget>
|
||||
<class>GtkSpinButton</class>
|
||||
<name>recurrence-interval-value</name>
|
||||
<name>interval-value</name>
|
||||
<can_focus>True</can_focus>
|
||||
<climb_rate>1</climb_rate>
|
||||
<digits>0</digits>
|
||||
@ -317,7 +313,7 @@
|
||||
|
||||
<widget>
|
||||
<class>GtkOptionMenu</class>
|
||||
<name>recurrence-interval-unit</name>
|
||||
<name>interval-unit</name>
|
||||
<can_focus>True</can_focus>
|
||||
<items>day(s)
|
||||
week(s)
|
||||
@ -334,7 +330,7 @@ year(s)
|
||||
|
||||
<widget>
|
||||
<class>GtkAlignment</class>
|
||||
<name>recurrence-special</name>
|
||||
<name>special</name>
|
||||
<xalign>0.5</xalign>
|
||||
<yalign>0.5</yalign>
|
||||
<xscale>0</xscale>
|
||||
@ -352,7 +348,7 @@ year(s)
|
||||
|
||||
<widget>
|
||||
<class>GtkOptionMenu</class>
|
||||
<name>recurrence-ending-menu</name>
|
||||
<name>ending-menu</name>
|
||||
<can_focus>True</can_focus>
|
||||
<items>for
|
||||
until
|
||||
@ -368,7 +364,7 @@ forever
|
||||
|
||||
<widget>
|
||||
<class>GtkAlignment</class>
|
||||
<name>recurrence-ending-special</name>
|
||||
<name>ending-special</name>
|
||||
<xalign>0.5</xalign>
|
||||
<yalign>0.5</yalign>
|
||||
<xscale>0</xscale>
|
||||
@ -387,7 +383,7 @@ forever
|
||||
|
||||
<widget>
|
||||
<class>GtkAlignment</class>
|
||||
<name>recurrence-custom-warning-bin</name>
|
||||
<name>custom-warning-bin</name>
|
||||
<xalign>0</xalign>
|
||||
<yalign>0.5</yalign>
|
||||
<xscale>1</xscale>
|
||||
@ -449,10 +445,9 @@ forever
|
||||
|
||||
<widget>
|
||||
<class>GtkButton</class>
|
||||
<name>recurrence-exception-add</name>
|
||||
<name>exception-add</name>
|
||||
<can_focus>True</can_focus>
|
||||
<label>Add</label>
|
||||
<relief>GTK_RELIEF_NORMAL</relief>
|
||||
<child>
|
||||
<padding>0</padding>
|
||||
<expand>False</expand>
|
||||
@ -462,10 +457,9 @@ forever
|
||||
|
||||
<widget>
|
||||
<class>GtkButton</class>
|
||||
<name>recurrence-exception-modify</name>
|
||||
<name>exception-modify</name>
|
||||
<can_focus>True</can_focus>
|
||||
<label>Modify</label>
|
||||
<relief>GTK_RELIEF_NORMAL</relief>
|
||||
<child>
|
||||
<padding>0</padding>
|
||||
<expand>False</expand>
|
||||
@ -475,10 +469,9 @@ forever
|
||||
|
||||
<widget>
|
||||
<class>GtkButton</class>
|
||||
<name>recurrence-exception-delete</name>
|
||||
<name>exception-delete</name>
|
||||
<can_focus>True</can_focus>
|
||||
<label>Delete</label>
|
||||
<relief>GTK_RELIEF_NORMAL</relief>
|
||||
<child>
|
||||
<padding>0</padding>
|
||||
<expand>False</expand>
|
||||
@ -500,7 +493,7 @@ forever
|
||||
|
||||
<widget>
|
||||
<class>Custom</class>
|
||||
<name>recurrence-exception-date</name>
|
||||
<name>exception-date</name>
|
||||
<creation_function>make_date_edit</creation_function>
|
||||
<int1>0</int1>
|
||||
<int2>0</int2>
|
||||
@ -527,7 +520,7 @@ forever
|
||||
|
||||
<widget>
|
||||
<class>GtkCList</class>
|
||||
<name>recurrence-exception-list</name>
|
||||
<name>exception-list</name>
|
||||
<can_focus>True</can_focus>
|
||||
<columns>1</columns>
|
||||
<column_widths>80</column_widths>
|
||||
@ -583,7 +576,7 @@ forever
|
||||
|
||||
<widget>
|
||||
<class>GtkAlignment</class>
|
||||
<name>recurrence-preview-bin</name>
|
||||
<name>preview-bin</name>
|
||||
<xalign>0</xalign>
|
||||
<yalign>0</yalign>
|
||||
<xscale>1</xscale>
|
||||
|
||||
@ -25,7 +25,7 @@
|
||||
#ifndef RECURRENCE_PAGE_H
|
||||
#define RECURRENCE_PAGE_H
|
||||
|
||||
#include "editor-page.h"
|
||||
#include "comp-editor-page.h"
|
||||
|
||||
BEGIN_GNOME_DECLS
|
||||
|
||||
@ -33,29 +33,27 @@ BEGIN_GNOME_DECLS
|
||||
|
||||
#define TYPE_RECURRENCE_PAGE (recurrence_page_get_type ())
|
||||
#define RECURRENCE_PAGE(obj) (GTK_CHECK_CAST ((obj), TYPE_RECURRENCE_PAGE, RecurrencePage))
|
||||
#define RECURRENCE_PAGE_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), TYPE_RECURRENCE_PAGE, \
|
||||
RecurrencePageClass))
|
||||
#define RECURRENCE_PAGE_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), TYPE_RECURRENCE_PAGE, RecurrencePageClass))
|
||||
#define IS_RECURRENCE_PAGE(obj) (GTK_CHECK_TYPE ((obj), TYPE_RECURRENCE_PAGE))
|
||||
#define IS_RECURRENCE_PAGE_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), TYPE_RECURRENCE_PAGE))
|
||||
|
||||
typedef struct _RecurrencePagePrivate RecurrencePagePrivate;
|
||||
|
||||
typedef struct {
|
||||
EditorPage page;
|
||||
CompEditorPage page;
|
||||
|
||||
/* Private data */
|
||||
RecurrencePagePrivate *priv;
|
||||
} RecurrencePage;
|
||||
|
||||
typedef struct {
|
||||
EditorPageClass parent_class;
|
||||
CompEditorPageClass parent_class;
|
||||
} RecurrencePageClass;
|
||||
|
||||
GtkType recurrence_page_get_type (void);
|
||||
|
||||
GtkType recurrence_page_get_type (void);
|
||||
RecurrencePage *recurrence_page_construct (RecurrencePage *rpage);
|
||||
|
||||
RecurrencePage *recurrence_page_new (void);
|
||||
RecurrencePage *recurrence_page_new (void);
|
||||
|
||||
|
||||
|
||||
|
||||
461
calendar/gui/dialogs/task-details-page.c
Normal file
461
calendar/gui/dialogs/task-details-page.c
Normal file
@ -0,0 +1,461 @@
|
||||
/* Evolution calendar - Main page of the task editor dialog
|
||||
*
|
||||
* Copyright (C) 2001 Ximian, Inc.
|
||||
*
|
||||
* Authors: Federico Mena-Quintero <federico@ximian.com>
|
||||
* Miguel de Icaza <miguel@ximian.com>
|
||||
* Seth Alves <alves@hungry.com>
|
||||
* JP Rosevear <jpr@ximian.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#include <gtk/gtksignal.h>
|
||||
#include <gtk/gtktogglebutton.h>
|
||||
#include <glade/glade.h>
|
||||
#include <gal/widgets/e-unicode.h>
|
||||
#include <widgets/misc/e-dateedit.h>
|
||||
#include "e-util/e-dialog-widgets.h"
|
||||
#include "../widget-util.h"
|
||||
#include "comp-editor-util.h"
|
||||
#include "task-details-page.h"
|
||||
|
||||
|
||||
|
||||
/* Private part of the TaskDetailsPage structure */
|
||||
struct _TaskDetailsPagePrivate {
|
||||
/* Glade XML data */
|
||||
GladeXML *xml;
|
||||
|
||||
/* Widgets from the Glade file */
|
||||
GtkWidget *main;
|
||||
|
||||
GtkWidget *summary;
|
||||
GtkWidget *date_time;
|
||||
|
||||
GtkWidget *completed_date;
|
||||
GtkWidget *url;
|
||||
|
||||
gboolean updating;
|
||||
};
|
||||
|
||||
|
||||
|
||||
static void task_details_page_class_init (TaskDetailsPageClass *class);
|
||||
static void task_details_page_init (TaskDetailsPage *tdpage);
|
||||
static void task_details_page_destroy (GtkObject *object);
|
||||
|
||||
static GtkWidget *task_details_page_get_widget (CompEditorPage *page);
|
||||
static void task_details_page_fill_widgets (CompEditorPage *page, CalComponent *comp);
|
||||
static void task_details_page_fill_component (CompEditorPage *page, CalComponent *comp);
|
||||
static void task_details_page_set_summary (CompEditorPage *page, const char *summary);
|
||||
static void task_details_page_set_dates (CompEditorPage *page, CompEditorPageDates *dates);
|
||||
|
||||
static CompEditorPageClass *parent_class = NULL;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* task_details_page_get_type:
|
||||
*
|
||||
* Registers the #TaskDetailsPage class if necessary, and returns the type ID
|
||||
* associated to it.
|
||||
*
|
||||
* Return value: The type ID of the #TaskDetailsPage class.
|
||||
**/
|
||||
GtkType
|
||||
task_details_page_get_type (void)
|
||||
{
|
||||
static GtkType task_details_page_type;
|
||||
|
||||
if (!task_details_page_type) {
|
||||
static const GtkTypeInfo task_details_page_info = {
|
||||
"TaskDetailsPage",
|
||||
sizeof (TaskDetailsPage),
|
||||
sizeof (TaskDetailsPageClass),
|
||||
(GtkClassInitFunc) task_details_page_class_init,
|
||||
(GtkObjectInitFunc) task_details_page_init,
|
||||
NULL, /* reserved_1 */
|
||||
NULL, /* reserved_2 */
|
||||
(GtkClassInitFunc) NULL
|
||||
};
|
||||
|
||||
task_details_page_type =
|
||||
gtk_type_unique (TYPE_COMP_EDITOR_PAGE,
|
||||
&task_details_page_info);
|
||||
}
|
||||
|
||||
return task_details_page_type;
|
||||
}
|
||||
|
||||
/* Class initialization function for the task page */
|
||||
static void
|
||||
task_details_page_class_init (TaskDetailsPageClass *class)
|
||||
{
|
||||
CompEditorPageClass *editor_page_class;
|
||||
GtkObjectClass *object_class;
|
||||
|
||||
editor_page_class = (CompEditorPageClass *) class;
|
||||
object_class = (GtkObjectClass *) class;
|
||||
|
||||
parent_class = gtk_type_class (TYPE_COMP_EDITOR_PAGE);
|
||||
|
||||
editor_page_class->get_widget = task_details_page_get_widget;
|
||||
editor_page_class->fill_widgets = task_details_page_fill_widgets;
|
||||
editor_page_class->fill_component = task_details_page_fill_component;
|
||||
editor_page_class->set_summary = task_details_page_set_summary;
|
||||
editor_page_class->set_dates = task_details_page_set_dates;
|
||||
|
||||
object_class->destroy = task_details_page_destroy;
|
||||
}
|
||||
|
||||
/* Object initialization function for the task page */
|
||||
static void
|
||||
task_details_page_init (TaskDetailsPage *tdpage)
|
||||
{
|
||||
TaskDetailsPagePrivate *priv;
|
||||
|
||||
priv = g_new0 (TaskDetailsPagePrivate, 1);
|
||||
tdpage->priv = priv;
|
||||
|
||||
priv->xml = NULL;
|
||||
|
||||
priv->main = NULL;
|
||||
priv->summary = NULL;
|
||||
priv->date_time = NULL;
|
||||
priv->completed_date = NULL;
|
||||
priv->url = NULL;
|
||||
|
||||
priv->updating = FALSE;
|
||||
}
|
||||
|
||||
/* Destroy handler for the task page */
|
||||
static void
|
||||
task_details_page_destroy (GtkObject *object)
|
||||
{
|
||||
TaskDetailsPage *tdpage;
|
||||
TaskDetailsPagePrivate *priv;
|
||||
|
||||
g_return_if_fail (object != NULL);
|
||||
g_return_if_fail (IS_TASK_DETAILS_PAGE (object));
|
||||
|
||||
tdpage = TASK_DETAILS_PAGE (object);
|
||||
priv = tdpage->priv;
|
||||
|
||||
if (priv->xml) {
|
||||
gtk_object_unref (GTK_OBJECT (priv->xml));
|
||||
priv->xml = NULL;
|
||||
}
|
||||
|
||||
g_free (priv);
|
||||
tdpage->priv = NULL;
|
||||
|
||||
if (GTK_OBJECT_CLASS (parent_class)->destroy)
|
||||
(* GTK_OBJECT_CLASS (parent_class)->destroy) (object);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* get_widget handler for the task page */
|
||||
static GtkWidget *
|
||||
task_details_page_get_widget (CompEditorPage *page)
|
||||
{
|
||||
TaskDetailsPage *tdpage;
|
||||
TaskDetailsPagePrivate *priv;
|
||||
|
||||
tdpage = TASK_DETAILS_PAGE (page);
|
||||
priv = tdpage->priv;
|
||||
|
||||
return priv->main;
|
||||
}
|
||||
|
||||
/* Fills the widgets with default values */
|
||||
static void
|
||||
clear_widgets (TaskDetailsPage *tdpage)
|
||||
{
|
||||
TaskDetailsPagePrivate *priv;
|
||||
|
||||
priv = tdpage->priv;
|
||||
|
||||
/* Summary */
|
||||
gtk_label_set_text (GTK_LABEL (priv->summary), "");
|
||||
|
||||
/* Start date */
|
||||
gtk_label_set_text (GTK_LABEL (priv->date_time), "");
|
||||
|
||||
/* Date completed */
|
||||
e_date_edit_set_time (E_DATE_EDIT (priv->completed_date), -1);
|
||||
|
||||
/* URL */
|
||||
e_dialog_editable_set (priv->url, NULL);
|
||||
}
|
||||
|
||||
/* fill_widgets handler for the task page */
|
||||
static void
|
||||
task_details_page_fill_widgets (CompEditorPage *page, CalComponent *comp)
|
||||
{
|
||||
TaskDetailsPage *tdpage;
|
||||
TaskDetailsPagePrivate *priv;
|
||||
CalComponentText text;
|
||||
const char *url;
|
||||
CompEditorPageDates dates;
|
||||
|
||||
tdpage = TASK_DETAILS_PAGE (page);
|
||||
priv = tdpage->priv;
|
||||
|
||||
priv->updating = TRUE;
|
||||
|
||||
/* Clean the screen */
|
||||
clear_widgets (tdpage);
|
||||
|
||||
/* Summary */
|
||||
cal_component_get_summary (comp, &text);
|
||||
task_details_page_set_summary (page, text.value);
|
||||
|
||||
/* Dates */
|
||||
comp_editor_dates (&dates, comp);
|
||||
task_details_page_set_dates (page, &dates);
|
||||
|
||||
/* URL */
|
||||
cal_component_get_url (comp, &url);
|
||||
e_dialog_editable_set (priv->url, url);
|
||||
|
||||
priv->updating = FALSE;
|
||||
}
|
||||
|
||||
/* fill_component handler for the task page */
|
||||
static void
|
||||
task_details_page_fill_component (CompEditorPage *page, CalComponent *comp)
|
||||
{
|
||||
TaskDetailsPage *tdpage;
|
||||
TaskDetailsPagePrivate *priv;
|
||||
CalComponentDateTime date;
|
||||
time_t t;
|
||||
char *url;
|
||||
|
||||
tdpage = TASK_DETAILS_PAGE (page);
|
||||
priv = tdpage->priv;
|
||||
|
||||
/* Completed Date. */
|
||||
date.value = g_new (struct icaltimetype, 1);
|
||||
date.tzid = NULL;
|
||||
|
||||
t = e_date_edit_get_time (E_DATE_EDIT (priv->completed_date));
|
||||
if (t != -1) {
|
||||
*date.value = icaltime_from_timet (t, FALSE);
|
||||
cal_component_set_completed (comp, date.value);
|
||||
} else {
|
||||
cal_component_set_completed (comp, NULL);
|
||||
}
|
||||
|
||||
g_free (date.value);
|
||||
|
||||
/* URL. */
|
||||
url = e_dialog_editable_get (priv->url);
|
||||
cal_component_set_url (comp, url);
|
||||
if (url)
|
||||
g_free (url);
|
||||
}
|
||||
|
||||
/* set_summary handler for the task page */
|
||||
static void
|
||||
task_details_page_set_summary (CompEditorPage *page, const char *summary)
|
||||
{
|
||||
TaskDetailsPage *tdpage;
|
||||
TaskDetailsPagePrivate *priv;
|
||||
gchar *s;
|
||||
|
||||
tdpage = TASK_DETAILS_PAGE (page);
|
||||
priv = tdpage->priv;
|
||||
|
||||
s = e_utf8_to_gtk_string (priv->summary, summary);
|
||||
gtk_label_set_text (GTK_LABEL (priv->summary), s);
|
||||
g_free (s);
|
||||
}
|
||||
|
||||
static void
|
||||
task_details_page_set_dates (CompEditorPage *page, CompEditorPageDates *dates)
|
||||
{
|
||||
TaskDetailsPage *tdpage;
|
||||
TaskDetailsPagePrivate *priv;
|
||||
|
||||
tdpage = TASK_DETAILS_PAGE (page);
|
||||
priv = tdpage->priv;
|
||||
|
||||
comp_editor_date_label (dates, priv->date_time);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Gets the widgets from the XML file and returns if they are all available. */
|
||||
static gboolean
|
||||
get_widgets (TaskDetailsPage *tdpage)
|
||||
{
|
||||
TaskDetailsPagePrivate *priv;
|
||||
|
||||
priv = tdpage->priv;
|
||||
|
||||
#define GW(name) glade_xml_get_widget (priv->xml, name)
|
||||
|
||||
priv->main = GW ("task-details-page");
|
||||
g_assert (priv->main);
|
||||
gtk_widget_ref (priv->main);
|
||||
gtk_widget_unparent (priv->main);
|
||||
|
||||
priv->summary = GW ("summary");
|
||||
priv->date_time = GW ("date-time");
|
||||
|
||||
priv->completed_date = GW ("completed-date");
|
||||
priv->url = GW ("url");
|
||||
|
||||
#undef GW
|
||||
|
||||
return (priv->summary
|
||||
&& priv->date_time
|
||||
&& priv->completed_date
|
||||
&& priv->url);
|
||||
}
|
||||
|
||||
/* Callback used when the start or end date widgets change. We check that the
|
||||
* start date < end date and we set the "all day task" button as appropriate.
|
||||
*/
|
||||
static void
|
||||
date_changed_cb (EDateEdit *dedit, gpointer data)
|
||||
{
|
||||
TaskDetailsPage *tdpage;
|
||||
TaskDetailsPagePrivate *priv;
|
||||
CompEditorPageDates dates;
|
||||
|
||||
tdpage = TASK_DETAILS_PAGE (data);
|
||||
priv = tdpage->priv;
|
||||
|
||||
if (priv->updating)
|
||||
return;
|
||||
|
||||
dates.start = 0;
|
||||
dates.end = 0;
|
||||
dates.due = 0;
|
||||
dates.complete = e_date_edit_get_time (E_DATE_EDIT (priv->completed_date));
|
||||
|
||||
/* Notify upstream */
|
||||
comp_editor_page_notify_dates_changed (COMP_EDITOR_PAGE (tdpage), &dates);
|
||||
}
|
||||
|
||||
/* This is called when any field is changed; it notifies upstream. */
|
||||
static void
|
||||
field_changed_cb (GtkWidget *widget, gpointer data)
|
||||
{
|
||||
TaskDetailsPage *tdpage;
|
||||
TaskDetailsPagePrivate *priv;
|
||||
|
||||
tdpage = TASK_DETAILS_PAGE (data);
|
||||
priv = tdpage->priv;
|
||||
|
||||
if (!priv->updating)
|
||||
comp_editor_page_notify_changed (COMP_EDITOR_PAGE (tdpage));
|
||||
}
|
||||
|
||||
/* Hooks the widget signals */
|
||||
static void
|
||||
init_widgets (TaskDetailsPage *tdpage)
|
||||
{
|
||||
TaskDetailsPagePrivate *priv;
|
||||
|
||||
priv = tdpage->priv;
|
||||
|
||||
/* Completed Date */
|
||||
gtk_signal_connect (GTK_OBJECT (priv->completed_date), "changed",
|
||||
GTK_SIGNAL_FUNC (date_changed_cb), tdpage);
|
||||
|
||||
/* URL */
|
||||
gtk_signal_connect (GTK_OBJECT (priv->url), "changed",
|
||||
GTK_SIGNAL_FUNC (field_changed_cb), tdpage);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* task_details_page_construct:
|
||||
* @tdpage: An task details page.
|
||||
*
|
||||
* Constructs an task page by loading its Glade data.
|
||||
*
|
||||
* Return value: The same object as @tdpage, or NULL if the widgets could not
|
||||
* be created.
|
||||
**/
|
||||
TaskDetailsPage *
|
||||
task_details_page_construct (TaskDetailsPage *tdpage)
|
||||
{
|
||||
TaskDetailsPagePrivate *priv;
|
||||
|
||||
priv = tdpage->priv;
|
||||
|
||||
priv->xml = glade_xml_new (EVOLUTION_GLADEDIR
|
||||
"/task-details-page.glade", NULL);
|
||||
if (!priv->xml) {
|
||||
g_message ("task_details_page_construct(): "
|
||||
"Could not load the Glade XML file!");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (!get_widgets (tdpage)) {
|
||||
g_message ("task_details_page_construct(): "
|
||||
"Could not find all widgets in the XML file!");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
init_widgets (tdpage);
|
||||
|
||||
return tdpage;
|
||||
}
|
||||
|
||||
/**
|
||||
* task_details_page_new:
|
||||
*
|
||||
* Creates a new task details page.
|
||||
*
|
||||
* Return value: A newly-created task details page, or NULL if the page could
|
||||
* not be created.
|
||||
**/
|
||||
TaskDetailsPage *
|
||||
task_details_page_new (void)
|
||||
{
|
||||
TaskDetailsPage *tdpage;
|
||||
|
||||
tdpage = gtk_type_new (TYPE_TASK_DETAILS_PAGE);
|
||||
if (!task_details_page_construct (tdpage)) {
|
||||
gtk_object_unref (GTK_OBJECT (tdpage));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return tdpage;
|
||||
}
|
||||
|
||||
GtkWidget *task_details_page_create_date_edit (void);
|
||||
|
||||
GtkWidget *
|
||||
task_details_page_create_date_edit (void)
|
||||
{
|
||||
GtkWidget *dedit;
|
||||
|
||||
dedit = date_edit_new (TRUE, TRUE);
|
||||
e_date_edit_set_allow_no_date_set (E_DATE_EDIT (dedit), TRUE);
|
||||
|
||||
return dedit;
|
||||
}
|
||||
@ -15,6 +15,7 @@
|
||||
<widget>
|
||||
<class>GtkWindow</class>
|
||||
<name>task-details-toplevel</name>
|
||||
<visible>False</visible>
|
||||
<title>window1</title>
|
||||
<type>GTK_WINDOW_TOPLEVEL</type>
|
||||
<position>GTK_WIN_POS_NONE</position>
|
||||
@ -24,112 +25,253 @@
|
||||
<auto_shrink>False</auto_shrink>
|
||||
|
||||
<widget>
|
||||
<class>GtkTable</class>
|
||||
<class>GtkVBox</class>
|
||||
<name>task-details-page</name>
|
||||
<border_width>4</border_width>
|
||||
<rows>2</rows>
|
||||
<columns>2</columns>
|
||||
<homogeneous>False</homogeneous>
|
||||
<row_spacing>2</row_spacing>
|
||||
<column_spacing>4</column_spacing>
|
||||
<spacing>4</spacing>
|
||||
|
||||
<widget>
|
||||
<class>GtkLabel</class>
|
||||
<name>label12</name>
|
||||
<label>Date Completed:</label>
|
||||
<justify>GTK_JUSTIFY_CENTER</justify>
|
||||
<wrap>False</wrap>
|
||||
<xalign>0</xalign>
|
||||
<yalign>0.5</yalign>
|
||||
<xpad>0</xpad>
|
||||
<ypad>0</ypad>
|
||||
<class>GtkFrame</class>
|
||||
<name>frame1</name>
|
||||
<label>Basics</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>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>
|
||||
<padding>0</padding>
|
||||
<expand>False</expand>
|
||||
<fill>False</fill>
|
||||
</child>
|
||||
|
||||
<widget>
|
||||
<class>GtkTable</class>
|
||||
<name>table1</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>label15</name>
|
||||
<label>Summary:</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>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>GtkLabel</class>
|
||||
<name>label16</name>
|
||||
<label>Date/Time:</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>False</xfill>
|
||||
<yfill>False</yfill>
|
||||
</child>
|
||||
</widget>
|
||||
|
||||
<widget>
|
||||
<class>GtkLabel</class>
|
||||
<name>date-time</name>
|
||||
<label></label>
|
||||
<justify>GTK_JUSTIFY_CENTER</justify>
|
||||
<wrap>False</wrap>
|
||||
<xalign>0</xalign>
|
||||
<yalign>0.5</yalign>
|
||||
<xpad>4</xpad>
|
||||
<ypad>0</ypad>
|
||||
<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>False</yfill>
|
||||
</child>
|
||||
</widget>
|
||||
|
||||
<widget>
|
||||
<class>GtkLabel</class>
|
||||
<name>summary</name>
|
||||
<label></label>
|
||||
<justify>GTK_JUSTIFY_LEFT</justify>
|
||||
<wrap>False</wrap>
|
||||
<xalign>0</xalign>
|
||||
<yalign>0.5</yalign>
|
||||
<xpad>4</xpad>
|
||||
<ypad>0</ypad>
|
||||
<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>True</xfill>
|
||||
<yfill>False</yfill>
|
||||
</child>
|
||||
</widget>
|
||||
</widget>
|
||||
</widget>
|
||||
|
||||
<widget>
|
||||
<class>GtkLabel</class>
|
||||
<name>label14</name>
|
||||
<label>URL:</label>
|
||||
<justify>GTK_JUSTIFY_CENTER</justify>
|
||||
<wrap>False</wrap>
|
||||
<xalign>0</xalign>
|
||||
<yalign>0.5</yalign>
|
||||
<xpad>0</xpad>
|
||||
<ypad>0</ypad>
|
||||
<class>GtkTable</class>
|
||||
<name>table1</name>
|
||||
<border_width>4</border_width>
|
||||
<rows>2</rows>
|
||||
<columns>2</columns>
|
||||
<homogeneous>False</homogeneous>
|
||||
<row_spacing>2</row_spacing>
|
||||
<column_spacing>4</column_spacing>
|
||||
<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>GtkEntry</class>
|
||||
<name>url</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>1</top_attach>
|
||||
<bottom_attach>2</bottom_attach>
|
||||
<widget>
|
||||
<class>GtkLabel</class>
|
||||
<name>label12</name>
|
||||
<label>Date Completed:</label>
|
||||
<justify>GTK_JUSTIFY_CENTER</justify>
|
||||
<wrap>False</wrap>
|
||||
<xalign>0</xalign>
|
||||
<yalign>0.5</yalign>
|
||||
<xpad>0</xpad>
|
||||
<ypad>0</ypad>
|
||||
<xexpand>True</xexpand>
|
||||
<yexpand>False</yexpand>
|
||||
<xshrink>False</xshrink>
|
||||
<yshrink>False</yshrink>
|
||||
<xfill>True</xfill>
|
||||
<yfill>False</yfill>
|
||||
</child>
|
||||
</widget>
|
||||
<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>Custom</class>
|
||||
<name>completed-date</name>
|
||||
<creation_function>task_editor_create_date_edit</creation_function>
|
||||
<int1>0</int1>
|
||||
<int2>0</int2>
|
||||
<last_modification_time>Sun, 10 Sep 2000 17:34:07 GMT</last_modification_time>
|
||||
<child>
|
||||
<left_attach>1</left_attach>
|
||||
<right_attach>2</right_attach>
|
||||
<top_attach>0</top_attach>
|
||||
<bottom_attach>1</bottom_attach>
|
||||
<widget>
|
||||
<class>GtkLabel</class>
|
||||
<name>label14</name>
|
||||
<label>URL:</label>
|
||||
<justify>GTK_JUSTIFY_CENTER</justify>
|
||||
<wrap>False</wrap>
|
||||
<xalign>0</xalign>
|
||||
<yalign>0.5</yalign>
|
||||
<xpad>0</xpad>
|
||||
<ypad>0</ypad>
|
||||
<xexpand>True</xexpand>
|
||||
<yexpand>False</yexpand>
|
||||
<xshrink>False</xshrink>
|
||||
<yshrink>False</yshrink>
|
||||
<xfill>True</xfill>
|
||||
<yfill>False</yfill>
|
||||
</child>
|
||||
<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>url</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>1</top_attach>
|
||||
<bottom_attach>2</bottom_attach>
|
||||
<xpad>0</xpad>
|
||||
<ypad>0</ypad>
|
||||
<xexpand>True</xexpand>
|
||||
<yexpand>False</yexpand>
|
||||
<xshrink>False</xshrink>
|
||||
<yshrink>False</yshrink>
|
||||
<xfill>True</xfill>
|
||||
<yfill>False</yfill>
|
||||
</child>
|
||||
</widget>
|
||||
|
||||
<widget>
|
||||
<class>Custom</class>
|
||||
<name>completed-date</name>
|
||||
<creation_function>task_details_page_create_date_edit</creation_function>
|
||||
<int1>0</int1>
|
||||
<int2>0</int2>
|
||||
<last_modification_time>Fri, 01 Jun 2001 18:58:51 GMT</last_modification_time>
|
||||
<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>False</xshrink>
|
||||
<yshrink>False</yshrink>
|
||||
<xfill>True</xfill>
|
||||
<yfill>False</yfill>
|
||||
</child>
|
||||
</widget>
|
||||
</widget>
|
||||
</widget>
|
||||
</widget>
|
||||
|
||||
62
calendar/gui/dialogs/task-details-page.h
Normal file
62
calendar/gui/dialogs/task-details-page.h
Normal file
@ -0,0 +1,62 @@
|
||||
/* Evolution calendar - Main page of the task editor dialog
|
||||
*
|
||||
* Copyright (C) 2001 Ximian, Inc.
|
||||
*
|
||||
* Authors: Federico Mena-Quintero <federico@ximian.com>
|
||||
* Miguel de Icaza <miguel@ximian.com>
|
||||
* Seth Alves <alves@hungry.com>
|
||||
* JP Rosevear <jpr@ximian.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifndef TASK_DETAILS_PAGE_H
|
||||
#define TASK_DETAILS_PAGE_H
|
||||
|
||||
#include "comp-editor-page.h"
|
||||
|
||||
BEGIN_GNOME_DECLS
|
||||
|
||||
|
||||
|
||||
#define TYPE_TASK_DETAILS_PAGE (task_details_page_get_type ())
|
||||
#define TASK_DETAILS_PAGE(obj) (GTK_CHECK_CAST ((obj), TYPE_TASK_DETAILS_PAGE, TaskDetailsPage))
|
||||
#define TASK_DETAILS_PAGE_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), TYPE_TASK_DETAILS_PAGE, TaskDetailsPageClass))
|
||||
#define IS_TASK_DETAILS_PAGE(obj) (GTK_CHECK_TYPE ((obj), TYPE_TASK_DETAILS_PAGE))
|
||||
#define IS_TASK_DETAILS_PAGE_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), TYPE_TASK_DETAILS_PAGE))
|
||||
|
||||
typedef struct _TaskDetailsPagePrivate TaskDetailsPagePrivate;
|
||||
|
||||
typedef struct {
|
||||
CompEditorPage page;
|
||||
|
||||
/* Private data */
|
||||
TaskDetailsPagePrivate *priv;
|
||||
} TaskDetailsPage;
|
||||
|
||||
typedef struct {
|
||||
CompEditorPageClass parent_class;
|
||||
} TaskDetailsPageClass;
|
||||
|
||||
|
||||
GtkType task_details_page_get_type (void);
|
||||
TaskDetailsPage *task_details_page_construct (TaskDetailsPage *epage);
|
||||
TaskDetailsPage *task_details_page_new (void);
|
||||
|
||||
|
||||
|
||||
END_GNOME_DECLS
|
||||
|
||||
#endif
|
||||
@ -1,695 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<GTK-Interface>
|
||||
|
||||
<project>
|
||||
<name>task-editor-dialog</name>
|
||||
<program_name>task-editor-dialog</program_name>
|
||||
<directory></directory>
|
||||
<source_directory>src</source_directory>
|
||||
<pixmaps_directory>pixmaps</pixmaps_directory>
|
||||
<language>C</language>
|
||||
<gnome_support>True</gnome_support>
|
||||
<gettext_support>True</gettext_support>
|
||||
</project>
|
||||
|
||||
<widget>
|
||||
<class>GnomePropertyBox</class>
|
||||
<name>task-editor-dialog</name>
|
||||
<visible>False</visible>
|
||||
<position>GTK_WIN_POS_NONE</position>
|
||||
<modal>False</modal>
|
||||
<allow_shrink>False</allow_shrink>
|
||||
<allow_grow>False</allow_grow>
|
||||
<auto_shrink>False</auto_shrink>
|
||||
|
||||
<widget>
|
||||
<class>GtkNotebook</class>
|
||||
<child_name>GnomeDock:contents</child_name>
|
||||
<name>notebook1</name>
|
||||
<border_width>2</border_width>
|
||||
<can_focus>True</can_focus>
|
||||
<show_tabs>True</show_tabs>
|
||||
<show_border>True</show_border>
|
||||
<tab_pos>GTK_POS_TOP</tab_pos>
|
||||
<scrollable>False</scrollable>
|
||||
<tab_hborder>2</tab_hborder>
|
||||
<tab_vborder>2</tab_vborder>
|
||||
<popup_enable>False</popup_enable>
|
||||
|
||||
<widget>
|
||||
<class>GtkVBox</class>
|
||||
<name>vbox1</name>
|
||||
<border_width>4</border_width>
|
||||
<homogeneous>False</homogeneous>
|
||||
<spacing>4</spacing>
|
||||
|
||||
<widget>
|
||||
<class>GtkTable</class>
|
||||
<name>table3</name>
|
||||
<rows>1</rows>
|
||||
<columns>2</columns>
|
||||
<homogeneous>False</homogeneous>
|
||||
<row_spacing>4</row_spacing>
|
||||
<column_spacing>4</column_spacing>
|
||||
<child>
|
||||
<padding>0</padding>
|
||||
<expand>False</expand>
|
||||
<fill>True</fill>
|
||||
</child>
|
||||
|
||||
<widget>
|
||||
<class>GtkLabel</class>
|
||||
<name>label3</name>
|
||||
<label>Su_mmary:</label>
|
||||
<justify>GTK_JUSTIFY_CENTER</justify>
|
||||
<wrap>False</wrap>
|
||||
<xalign>0.5</xalign>
|
||||
<yalign>0.5</yalign>
|
||||
<xpad>0</xpad>
|
||||
<ypad>0</ypad>
|
||||
<default_focus_target>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>False</xfill>
|
||||
<yfill>False</yfill>
|
||||
</child>
|
||||
</widget>
|
||||
|
||||
<widget>
|
||||
<class>GtkEntry</class>
|
||||
<name>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>False</xshrink>
|
||||
<yshrink>False</yshrink>
|
||||
<xfill>True</xfill>
|
||||
<yfill>False</yfill>
|
||||
</child>
|
||||
</widget>
|
||||
</widget>
|
||||
|
||||
<widget>
|
||||
<class>GtkFrame</class>
|
||||
<name>frame2</name>
|
||||
<label>Date & Time</label>
|
||||
<label_xalign>0</label_xalign>
|
||||
<shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
|
||||
<child>
|
||||
<padding>0</padding>
|
||||
<expand>False</expand>
|
||||
<fill>True</fill>
|
||||
</child>
|
||||
|
||||
<widget>
|
||||
<class>GtkHBox</class>
|
||||
<name>hbox4</name>
|
||||
<border_width>4</border_width>
|
||||
<homogeneous>False</homogeneous>
|
||||
<spacing>0</spacing>
|
||||
|
||||
<widget>
|
||||
<class>GtkTable</class>
|
||||
<name>table1</name>
|
||||
<rows>2</rows>
|
||||
<columns>2</columns>
|
||||
<homogeneous>False</homogeneous>
|
||||
<row_spacing>2</row_spacing>
|
||||
<column_spacing>4</column_spacing>
|
||||
<child>
|
||||
<padding>0</padding>
|
||||
<expand>False</expand>
|
||||
<fill>True</fill>
|
||||
</child>
|
||||
|
||||
<widget>
|
||||
<class>GtkLabel</class>
|
||||
<name>label6</name>
|
||||
<label>Sta_rt 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>GtkLabel</class>
|
||||
<name>label5</name>
|
||||
<label>_Due 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>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>Custom</class>
|
||||
<name>due-date</name>
|
||||
<creation_function>task_editor_create_date_edit</creation_function>
|
||||
<int1>0</int1>
|
||||
<int2>0</int2>
|
||||
<last_modification_time>Sun, 10 Sep 2000 17:32:18 GMT</last_modification_time>
|
||||
<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>False</xshrink>
|
||||
<yshrink>False</yshrink>
|
||||
<xfill>True</xfill>
|
||||
<yfill>False</yfill>
|
||||
</child>
|
||||
</widget>
|
||||
|
||||
<widget>
|
||||
<class>Custom</class>
|
||||
<name>start-date</name>
|
||||
<creation_function>task_editor_create_date_edit</creation_function>
|
||||
<int1>0</int1>
|
||||
<int2>0</int2>
|
||||
<last_modification_time>Sun, 10 Sep 2000 17:33:31 GMT</last_modification_time>
|
||||
<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>True</xexpand>
|
||||
<yexpand>False</yexpand>
|
||||
<xshrink>False</xshrink>
|
||||
<yshrink>False</yshrink>
|
||||
<xfill>True</xfill>
|
||||
<yfill>False</yfill>
|
||||
</child>
|
||||
</widget>
|
||||
</widget>
|
||||
</widget>
|
||||
</widget>
|
||||
|
||||
<widget>
|
||||
<class>GtkScrolledWindow</class>
|
||||
<name>scrolledwindow1</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>False</expand>
|
||||
<fill>True</fill>
|
||||
</child>
|
||||
|
||||
<widget>
|
||||
<class>GtkText</class>
|
||||
<name>description</name>
|
||||
<height>80</height>
|
||||
<can_focus>True</can_focus>
|
||||
<editable>True</editable>
|
||||
<text></text>
|
||||
</widget>
|
||||
</widget>
|
||||
|
||||
<widget>
|
||||
<class>GtkFrame</class>
|
||||
<name>frame23</name>
|
||||
<label>Progress</label>
|
||||
<label_xalign>0</label_xalign>
|
||||
<shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
|
||||
<child>
|
||||
<padding>0</padding>
|
||||
<expand>False</expand>
|
||||
<fill>True</fill>
|
||||
</child>
|
||||
|
||||
<widget>
|
||||
<class>GtkHBox</class>
|
||||
<name>hbox3</name>
|
||||
<border_width>4</border_width>
|
||||
<homogeneous>False</homogeneous>
|
||||
<spacing>4</spacing>
|
||||
|
||||
<widget>
|
||||
<class>GtkLabel</class>
|
||||
<name>label7</name>
|
||||
<label>_Status:</label>
|
||||
<justify>GTK_JUSTIFY_CENTER</justify>
|
||||
<wrap>False</wrap>
|
||||
<xalign>0.5</xalign>
|
||||
<yalign>0.5</yalign>
|
||||
<xpad>0</xpad>
|
||||
<ypad>0</ypad>
|
||||
<default_focus_target>status</default_focus_target>
|
||||
<child>
|
||||
<padding>0</padding>
|
||||
<expand>False</expand>
|
||||
<fill>False</fill>
|
||||
</child>
|
||||
</widget>
|
||||
|
||||
<widget>
|
||||
<class>GtkOptionMenu</class>
|
||||
<name>status</name>
|
||||
<can_focus>True</can_focus>
|
||||
<items>Not Started
|
||||
In Progress
|
||||
Completed
|
||||
Cancelled
|
||||
</items>
|
||||
<initial_choice>0</initial_choice>
|
||||
<child>
|
||||
<padding>0</padding>
|
||||
<expand>False</expand>
|
||||
<fill>False</fill>
|
||||
</child>
|
||||
</widget>
|
||||
|
||||
<widget>
|
||||
<class>GtkLabel</class>
|
||||
<name>label8</name>
|
||||
<label>_Priority:</label>
|
||||
<justify>GTK_JUSTIFY_CENTER</justify>
|
||||
<wrap>False</wrap>
|
||||
<xalign>0.5</xalign>
|
||||
<yalign>0.5</yalign>
|
||||
<xpad>0</xpad>
|
||||
<ypad>0</ypad>
|
||||
<default_focus_target>priority</default_focus_target>
|
||||
<child>
|
||||
<padding>0</padding>
|
||||
<expand>False</expand>
|
||||
<fill>False</fill>
|
||||
</child>
|
||||
</widget>
|
||||
|
||||
<widget>
|
||||
<class>GtkOptionMenu</class>
|
||||
<name>priority</name>
|
||||
<can_focus>True</can_focus>
|
||||
<items>High
|
||||
Normal
|
||||
Low
|
||||
Undefined
|
||||
</items>
|
||||
<initial_choice>0</initial_choice>
|
||||
<child>
|
||||
<padding>0</padding>
|
||||
<expand>False</expand>
|
||||
<fill>False</fill>
|
||||
</child>
|
||||
</widget>
|
||||
|
||||
<widget>
|
||||
<class>GtkLabel</class>
|
||||
<name>label9</name>
|
||||
<label>% Comp_lete:</label>
|
||||
<justify>GTK_JUSTIFY_CENTER</justify>
|
||||
<wrap>False</wrap>
|
||||
<xalign>0.5</xalign>
|
||||
<yalign>0.5</yalign>
|
||||
<xpad>0</xpad>
|
||||
<ypad>0</ypad>
|
||||
<default_focus_target>percent-complete</default_focus_target>
|
||||
<child>
|
||||
<padding>0</padding>
|
||||
<expand>False</expand>
|
||||
<fill>False</fill>
|
||||
</child>
|
||||
</widget>
|
||||
|
||||
<widget>
|
||||
<class>GtkSpinButton</class>
|
||||
<name>percent-complete</name>
|
||||
<width>60</width>
|
||||
<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>10</step>
|
||||
<page>10</page>
|
||||
<page_size>10</page_size>
|
||||
<child>
|
||||
<padding>0</padding>
|
||||
<expand>False</expand>
|
||||
<fill>False</fill>
|
||||
</child>
|
||||
</widget>
|
||||
</widget>
|
||||
</widget>
|
||||
|
||||
<widget>
|
||||
<class>GtkFrame</class>
|
||||
<name>frame24</name>
|
||||
<label>Classification</label>
|
||||
<label_xalign>0</label_xalign>
|
||||
<shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
|
||||
<child>
|
||||
<padding>0</padding>
|
||||
<expand>False</expand>
|
||||
<fill>True</fill>
|
||||
</child>
|
||||
|
||||
<widget>
|
||||
<class>GtkHBox</class>
|
||||
<name>hbox6</name>
|
||||
<border_width>2</border_width>
|
||||
<homogeneous>False</homogeneous>
|
||||
<spacing>4</spacing>
|
||||
|
||||
<widget>
|
||||
<class>GtkRadioButton</class>
|
||||
<name>classification-public</name>
|
||||
<can_focus>True</can_focus>
|
||||
<label>Pu_blic</label>
|
||||
<active>True</active>
|
||||
<draw_indicator>True</draw_indicator>
|
||||
<group>classification_radio_group</group>
|
||||
<child>
|
||||
<padding>0</padding>
|
||||
<expand>False</expand>
|
||||
<fill>False</fill>
|
||||
</child>
|
||||
</widget>
|
||||
|
||||
<widget>
|
||||
<class>GtkRadioButton</class>
|
||||
<name>classification-private</name>
|
||||
<can_focus>True</can_focus>
|
||||
<label>Pri_vate</label>
|
||||
<active>False</active>
|
||||
<draw_indicator>True</draw_indicator>
|
||||
<group>classification_radio_group</group>
|
||||
<child>
|
||||
<padding>0</padding>
|
||||
<expand>False</expand>
|
||||
<fill>False</fill>
|
||||
</child>
|
||||
</widget>
|
||||
|
||||
<widget>
|
||||
<class>GtkRadioButton</class>
|
||||
<name>classification-confidential</name>
|
||||
<can_focus>True</can_focus>
|
||||
<label>_Confidential</label>
|
||||
<active>False</active>
|
||||
<draw_indicator>True</draw_indicator>
|
||||
<group>classification_radio_group</group>
|
||||
<child>
|
||||
<padding>0</padding>
|
||||
<expand>False</expand>
|
||||
<fill>False</fill>
|
||||
</child>
|
||||
</widget>
|
||||
</widget>
|
||||
</widget>
|
||||
|
||||
<widget>
|
||||
<class>GtkHBox</class>
|
||||
<name>hbox2</name>
|
||||
<homogeneous>False</homogeneous>
|
||||
<spacing>2</spacing>
|
||||
<child>
|
||||
<padding>0</padding>
|
||||
<expand>True</expand>
|
||||
<fill>True</fill>
|
||||
</child>
|
||||
|
||||
<widget>
|
||||
<class>GtkButton</class>
|
||||
<name>contacts-button</name>
|
||||
<can_focus>True</can_focus>
|
||||
<child>
|
||||
<padding>0</padding>
|
||||
<expand>False</expand>
|
||||
<fill>False</fill>
|
||||
</child>
|
||||
|
||||
<widget>
|
||||
<class>GtkLabel</class>
|
||||
<name>label16</name>
|
||||
<label>_Contacts...</label>
|
||||
<justify>GTK_JUSTIFY_CENTER</justify>
|
||||
<wrap>False</wrap>
|
||||
<xalign>0.5</xalign>
|
||||
<yalign>0.5</yalign>
|
||||
<xpad>4</xpad>
|
||||
<ypad>0</ypad>
|
||||
</widget>
|
||||
</widget>
|
||||
|
||||
<widget>
|
||||
<class>GtkEntry</class>
|
||||
<name>contacts</name>
|
||||
<can_focus>True</can_focus>
|
||||
<editable>True</editable>
|
||||
<text_visible>True</text_visible>
|
||||
<text_max_length>0</text_max_length>
|
||||
<text></text>
|
||||
<child>
|
||||
<padding>0</padding>
|
||||
<expand>True</expand>
|
||||
<fill>True</fill>
|
||||
</child>
|
||||
</widget>
|
||||
|
||||
<widget>
|
||||
<class>GtkButton</class>
|
||||
<name>categories-button</name>
|
||||
<can_focus>True</can_focus>
|
||||
<child>
|
||||
<padding>0</padding>
|
||||
<expand>False</expand>
|
||||
<fill>False</fill>
|
||||
</child>
|
||||
|
||||
<widget>
|
||||
<class>GtkLabel</class>
|
||||
<name>label17</name>
|
||||
<label>Ca_tegories...</label>
|
||||
<justify>GTK_JUSTIFY_CENTER</justify>
|
||||
<wrap>False</wrap>
|
||||
<xalign>0.5</xalign>
|
||||
<yalign>0.5</yalign>
|
||||
<xpad>4</xpad>
|
||||
<ypad>0</ypad>
|
||||
</widget>
|
||||
</widget>
|
||||
|
||||
<widget>
|
||||
<class>GtkEntry</class>
|
||||
<name>categories</name>
|
||||
<can_focus>True</can_focus>
|
||||
<editable>True</editable>
|
||||
<text_visible>True</text_visible>
|
||||
<text_max_length>0</text_max_length>
|
||||
<text></text>
|
||||
<child>
|
||||
<padding>0</padding>
|
||||
<expand>True</expand>
|
||||
<fill>True</fill>
|
||||
</child>
|
||||
</widget>
|
||||
</widget>
|
||||
</widget>
|
||||
|
||||
<widget>
|
||||
<class>GtkLabel</class>
|
||||
<child_name>Notebook:tab</child_name>
|
||||
<name>label1</name>
|
||||
<label>Task</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>
|
||||
<class>GtkTable</class>
|
||||
<name>table4</name>
|
||||
<border_width>4</border_width>
|
||||
<rows>2</rows>
|
||||
<columns>2</columns>
|
||||
<homogeneous>False</homogeneous>
|
||||
<row_spacing>2</row_spacing>
|
||||
<column_spacing>4</column_spacing>
|
||||
|
||||
<widget>
|
||||
<class>GtkLabel</class>
|
||||
<name>label12</name>
|
||||
<label>Date Completed:</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>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>label14</name>
|
||||
<label>URL:</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>url</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>1</top_attach>
|
||||
<bottom_attach>2</bottom_attach>
|
||||
<xpad>0</xpad>
|
||||
<ypad>0</ypad>
|
||||
<xexpand>True</xexpand>
|
||||
<yexpand>False</yexpand>
|
||||
<xshrink>False</xshrink>
|
||||
<yshrink>False</yshrink>
|
||||
<xfill>True</xfill>
|
||||
<yfill>False</yfill>
|
||||
</child>
|
||||
</widget>
|
||||
|
||||
<widget>
|
||||
<class>Custom</class>
|
||||
<name>completed-date</name>
|
||||
<creation_function>task_editor_create_date_edit</creation_function>
|
||||
<int1>0</int1>
|
||||
<int2>0</int2>
|
||||
<last_modification_time>Sun, 10 Sep 2000 17:34:07 GMT</last_modification_time>
|
||||
<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>False</xshrink>
|
||||
<yshrink>False</yshrink>
|
||||
<xfill>True</xfill>
|
||||
<yfill>False</yfill>
|
||||
</child>
|
||||
</widget>
|
||||
</widget>
|
||||
|
||||
<widget>
|
||||
<class>GtkLabel</class>
|
||||
<child_name>Notebook:tab</child_name>
|
||||
<name>label2</name>
|
||||
<label>Details</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>
|
||||
|
||||
</GTK-Interface>
|
||||
File diff suppressed because it is too large
Load Diff
@ -1,16 +1,16 @@
|
||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
|
||||
|
||||
/*
|
||||
* Author :
|
||||
* Damon Chaplin <damon@ximian.com>
|
||||
/* Evolution calendar - Task editor dialog
|
||||
*
|
||||
* Copyright 2000, Helix Code, Inc.
|
||||
* Copyright 2000, Ximian, Inc.
|
||||
* Copyright (C) 2000 Helix Code, Inc.
|
||||
* Copyright (C) 2001 Ximian, Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of the
|
||||
* License, or (at your option) any later version.
|
||||
* Authors: Miguel de Icaza <miguel@ximian.com>
|
||||
* Federico Mena-Quintero <federico@ximian.com>
|
||||
* Seth Alves <alves@hungry.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
@ -19,52 +19,45 @@
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
|
||||
* USA
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
#ifndef _TASK_EDITOR_H_
|
||||
#define _TASK_EDITOR_H_
|
||||
|
||||
#include <gtk/gtkobject.h>
|
||||
#ifndef __TASK_EDITOR_H__
|
||||
#define __TASK_EDITOR_H__
|
||||
|
||||
#include <libgnome/gnome-defs.h>
|
||||
#include <bonobo.h>
|
||||
#include <cal-client/cal-client.h>
|
||||
#include <gtk/gtkobject.h>
|
||||
#include "comp-editor.h"
|
||||
|
||||
BEGIN_GNOME_DECLS
|
||||
|
||||
|
||||
#define TYPE_TASK_EDITOR (task_editor_get_type ())
|
||||
#define TASK_EDITOR(obj) (GTK_CHECK_CAST ((obj), TYPE_TASK_EDITOR, TaskEditor))
|
||||
#define TASK_EDITOR_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), TYPE_TASK_EDITOR, \
|
||||
TaskEditorClass))
|
||||
#define IS_TASK_EDITOR(obj) (GTK_CHECK_TYPE ((obj), TYPE_TASK_EDITOR))
|
||||
#define IS_TASK_EDITOR_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), TYPE_TASK_EDITOR))
|
||||
|
||||
#define TASK_EDITOR(obj) GTK_CHECK_CAST (obj, task_editor_get_type (), TaskEditor)
|
||||
#define TASK_EDITOR_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, task_editor_get_type (), TaskEditorClass)
|
||||
#define IS_TASK_EDITOR(obj) GTK_CHECK_TYPE (obj, task_editor_get_type ())
|
||||
typedef struct _TaskEditor TaskEditor;
|
||||
typedef struct _TaskEditorClass TaskEditorClass;
|
||||
typedef struct _TaskEditorPrivate TaskEditorPrivate;
|
||||
|
||||
|
||||
typedef struct _TaskEditor TaskEditor;
|
||||
typedef struct _TaskEditorClass TaskEditorClass;
|
||||
|
||||
struct _TaskEditor
|
||||
{
|
||||
GtkObject object;
|
||||
struct _TaskEditor {
|
||||
CompEditor parent;
|
||||
|
||||
/* Private data */
|
||||
gpointer priv;
|
||||
TaskEditorPrivate *priv;
|
||||
};
|
||||
|
||||
struct _TaskEditorClass
|
||||
{
|
||||
GtkObjectClass parent_class;
|
||||
struct _TaskEditorClass {
|
||||
CompEditorClass parent_class;
|
||||
};
|
||||
|
||||
GtkType task_editor_get_type (void);
|
||||
TaskEditor* task_editor_construct (TaskEditor *tedit);
|
||||
TaskEditor* task_editor_new (void);
|
||||
void task_editor_set_cal_client (TaskEditor *tedit,
|
||||
CalClient *client);
|
||||
void task_editor_set_todo_object (TaskEditor *tedit,
|
||||
CalComponent *comp);
|
||||
void task_editor_focus (TaskEditor *tedit);
|
||||
GtkType task_editor_get_type (void);
|
||||
TaskEditor *task_editor_construct (TaskEditor *ee);
|
||||
TaskEditor *task_editor_new (void);
|
||||
void task_editor_update_widgets (TaskEditor *ee);
|
||||
|
||||
|
||||
|
||||
|
||||
END_GNOME_DECLS
|
||||
|
||||
#endif /* _TASK_EDITOR_H_ */
|
||||
#endif /* __TASK_EDITOR_H__ */
|
||||
|
||||
966
calendar/gui/dialogs/task-page.c
Normal file
966
calendar/gui/dialogs/task-page.c
Normal file
@ -0,0 +1,966 @@
|
||||
/* Evolution calendar - Main page of the task editor dialog
|
||||
*
|
||||
* Copyright (C) 2001 Ximian, Inc.
|
||||
*
|
||||
* Authors: Federico Mena-Quintero <federico@ximian.com>
|
||||
* Miguel de Icaza <miguel@ximian.com>
|
||||
* Seth Alves <alves@hungry.com>
|
||||
* JP Rosevear <jpr@ximian.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#include <string.h>
|
||||
#include <gtk/gtksignal.h>
|
||||
#include <gtk/gtktogglebutton.h>
|
||||
#include <gtk/gtkspinbutton.h>
|
||||
#include <gtk/gtkoptionmenu.h>
|
||||
#include <glade/glade.h>
|
||||
#include <gal/widgets/e-unicode.h>
|
||||
#include <gal/widgets/e-categories.h>
|
||||
#include <widgets/misc/e-dateedit.h>
|
||||
#include "e-util/e-dialog-widgets.h"
|
||||
#include "../widget-util.h"
|
||||
#include "task-page.h"
|
||||
|
||||
|
||||
|
||||
/* Private part of the TaskPage structure */
|
||||
struct _TaskPagePrivate {
|
||||
/* Glade XML data */
|
||||
GladeXML *xml;
|
||||
|
||||
/* Widgets from the Glade file */
|
||||
GtkWidget *main;
|
||||
|
||||
GtkWidget *summary;
|
||||
|
||||
GtkWidget *due_date;
|
||||
GtkWidget *start_date;
|
||||
|
||||
GtkWidget *percent_complete;
|
||||
|
||||
GtkWidget *status;
|
||||
GtkWidget *priority;
|
||||
|
||||
GtkWidget *description;
|
||||
|
||||
GtkWidget *classification_public;
|
||||
GtkWidget *classification_private;
|
||||
GtkWidget *classification_confidential;
|
||||
|
||||
GtkWidget *contacts_btn;
|
||||
GtkWidget *contacts;
|
||||
|
||||
GtkWidget *categories_btn;
|
||||
GtkWidget *categories;
|
||||
|
||||
gboolean updating;
|
||||
};
|
||||
|
||||
/* Note that these two arrays must match. */
|
||||
static const int status_map[] = {
|
||||
ICAL_STATUS_NEEDSACTION,
|
||||
ICAL_STATUS_INPROCESS,
|
||||
ICAL_STATUS_COMPLETED,
|
||||
ICAL_STATUS_CANCELLED,
|
||||
-1
|
||||
};
|
||||
|
||||
typedef enum {
|
||||
PRIORITY_HIGH,
|
||||
PRIORITY_NORMAL,
|
||||
PRIORITY_LOW,
|
||||
PRIORITY_UNDEFINED,
|
||||
} TaskEditorPriority;
|
||||
|
||||
static const int priority_map[] = {
|
||||
PRIORITY_HIGH,
|
||||
PRIORITY_NORMAL,
|
||||
PRIORITY_LOW,
|
||||
PRIORITY_UNDEFINED,
|
||||
-1
|
||||
};
|
||||
|
||||
static const int classification_map[] = {
|
||||
CAL_COMPONENT_CLASS_PUBLIC,
|
||||
CAL_COMPONENT_CLASS_PRIVATE,
|
||||
CAL_COMPONENT_CLASS_CONFIDENTIAL,
|
||||
-1
|
||||
};
|
||||
|
||||
|
||||
|
||||
static void task_page_class_init (TaskPageClass *class);
|
||||
static void task_page_init (TaskPage *tpage);
|
||||
static void task_page_destroy (GtkObject *object);
|
||||
|
||||
static GtkWidget *task_page_get_widget (CompEditorPage *page);
|
||||
static void task_page_fill_widgets (CompEditorPage *page, CalComponent *comp);
|
||||
static void task_page_fill_component (CompEditorPage *page, CalComponent *comp);
|
||||
static void task_page_set_summary (CompEditorPage *page, const char *summary);
|
||||
static void task_page_set_dates (CompEditorPage *page, CompEditorPageDates *dates);
|
||||
|
||||
static CompEditorPageClass *parent_class = NULL;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* task_page_get_type:
|
||||
*
|
||||
* Registers the #TaskPage class if necessary, and returns the type ID
|
||||
* associated to it.
|
||||
*
|
||||
* Return value: The type ID of the #TaskPage class.
|
||||
**/
|
||||
GtkType
|
||||
task_page_get_type (void)
|
||||
{
|
||||
static GtkType task_page_type;
|
||||
|
||||
if (!task_page_type) {
|
||||
static const GtkTypeInfo task_page_info = {
|
||||
"TaskPage",
|
||||
sizeof (TaskPage),
|
||||
sizeof (TaskPageClass),
|
||||
(GtkClassInitFunc) task_page_class_init,
|
||||
(GtkObjectInitFunc) task_page_init,
|
||||
NULL, /* reserved_1 */
|
||||
NULL, /* reserved_2 */
|
||||
(GtkClassInitFunc) NULL
|
||||
};
|
||||
|
||||
task_page_type = gtk_type_unique (TYPE_COMP_EDITOR_PAGE,
|
||||
&task_page_info);
|
||||
}
|
||||
|
||||
return task_page_type;
|
||||
}
|
||||
|
||||
/* Class initialization function for the task page */
|
||||
static void
|
||||
task_page_class_init (TaskPageClass *class)
|
||||
{
|
||||
CompEditorPageClass *editor_page_class;
|
||||
GtkObjectClass *object_class;
|
||||
|
||||
editor_page_class = (CompEditorPageClass *) class;
|
||||
object_class = (GtkObjectClass *) class;
|
||||
|
||||
parent_class = gtk_type_class (TYPE_COMP_EDITOR_PAGE);
|
||||
|
||||
editor_page_class->get_widget = task_page_get_widget;
|
||||
editor_page_class->fill_widgets = task_page_fill_widgets;
|
||||
editor_page_class->fill_component = task_page_fill_component;
|
||||
editor_page_class->set_summary = task_page_set_summary;
|
||||
editor_page_class->set_dates = task_page_set_dates;
|
||||
|
||||
object_class->destroy = task_page_destroy;
|
||||
}
|
||||
|
||||
/* Object initialization function for the task page */
|
||||
static void
|
||||
task_page_init (TaskPage *tpage)
|
||||
{
|
||||
TaskPagePrivate *priv;
|
||||
|
||||
priv = g_new0 (TaskPagePrivate, 1);
|
||||
tpage->priv = priv;
|
||||
|
||||
priv->xml = NULL;
|
||||
|
||||
priv->main = NULL;
|
||||
priv->summary = NULL;
|
||||
priv->due_date = NULL;
|
||||
priv->start_date = NULL;
|
||||
priv->percent_complete = NULL;
|
||||
priv->status = NULL;
|
||||
priv->description = NULL;
|
||||
priv->classification_public = NULL;
|
||||
priv->classification_private = NULL;
|
||||
priv->classification_confidential = NULL;
|
||||
priv->contacts_btn = NULL;
|
||||
priv->contacts = NULL;
|
||||
priv->categories_btn = NULL;
|
||||
priv->categories = NULL;
|
||||
|
||||
priv->updating = FALSE;
|
||||
}
|
||||
|
||||
/* Destroy handler for the task page */
|
||||
static void
|
||||
task_page_destroy (GtkObject *object)
|
||||
{
|
||||
TaskPage *tpage;
|
||||
TaskPagePrivate *priv;
|
||||
|
||||
g_return_if_fail (object != NULL);
|
||||
g_return_if_fail (IS_TASK_PAGE (object));
|
||||
|
||||
tpage = TASK_PAGE (object);
|
||||
priv = tpage->priv;
|
||||
|
||||
if (priv->xml) {
|
||||
gtk_object_unref (GTK_OBJECT (priv->xml));
|
||||
priv->xml = NULL;
|
||||
}
|
||||
|
||||
g_free (priv);
|
||||
tpage->priv = NULL;
|
||||
|
||||
if (GTK_OBJECT_CLASS (parent_class)->destroy)
|
||||
(* GTK_OBJECT_CLASS (parent_class)->destroy) (object);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* get_widget handler for the task page */
|
||||
static GtkWidget *
|
||||
task_page_get_widget (CompEditorPage *page)
|
||||
{
|
||||
TaskPage *tpage;
|
||||
TaskPagePrivate *priv;
|
||||
|
||||
tpage = TASK_PAGE (page);
|
||||
priv = tpage->priv;
|
||||
|
||||
return priv->main;
|
||||
}
|
||||
|
||||
/* Fills the widgets with default values */
|
||||
static void
|
||||
clear_widgets (TaskPage *tpage)
|
||||
{
|
||||
TaskPagePrivate *priv;
|
||||
time_t now;
|
||||
|
||||
priv = tpage->priv;
|
||||
|
||||
now = time (NULL);
|
||||
|
||||
/* Summary, description */
|
||||
e_dialog_editable_set (priv->summary, NULL);
|
||||
e_dialog_editable_set (priv->description, NULL);
|
||||
|
||||
/* Start, due times */
|
||||
e_date_edit_set_time (E_DATE_EDIT (priv->start_date), now);
|
||||
e_date_edit_set_time (E_DATE_EDIT (priv->due_date), now);
|
||||
|
||||
/* Classification */
|
||||
e_dialog_radio_set (priv->classification_public,
|
||||
CAL_COMPONENT_CLASS_PRIVATE, classification_map);
|
||||
|
||||
/* Status, priority, complete percent */
|
||||
e_dialog_spin_set (priv->percent_complete, 0.0);
|
||||
e_dialog_option_menu_set (priv->status, 0, status_map);
|
||||
e_dialog_option_menu_set (priv->priority, 0, priority_map);
|
||||
|
||||
/* Categories */
|
||||
e_dialog_editable_set (priv->categories, NULL);
|
||||
}
|
||||
|
||||
static TaskEditorPriority
|
||||
priority_value_to_index (int priority_value)
|
||||
{
|
||||
TaskEditorPriority retval;
|
||||
|
||||
if (priority_value == 0)
|
||||
retval = PRIORITY_UNDEFINED;
|
||||
else if (priority_value <= 4)
|
||||
retval = PRIORITY_HIGH;
|
||||
else if (priority_value == 5)
|
||||
retval = PRIORITY_NORMAL;
|
||||
else
|
||||
retval = PRIORITY_LOW;
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
static int
|
||||
priority_index_to_value (TaskEditorPriority priority)
|
||||
{
|
||||
int retval;
|
||||
|
||||
switch (priority) {
|
||||
case PRIORITY_UNDEFINED:
|
||||
retval = 0;
|
||||
break;
|
||||
case PRIORITY_HIGH:
|
||||
retval = 3;
|
||||
break;
|
||||
case PRIORITY_NORMAL:
|
||||
retval = 5;
|
||||
break;
|
||||
case PRIORITY_LOW:
|
||||
retval = 7;
|
||||
break;
|
||||
default:
|
||||
retval = -1;
|
||||
g_assert_not_reached ();
|
||||
break;
|
||||
}
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
/* Decode the radio button group for classifications */
|
||||
static CalComponentClassification
|
||||
classification_get (GtkWidget *widget)
|
||||
{
|
||||
return e_dialog_radio_get (widget, classification_map);
|
||||
}
|
||||
|
||||
/* fill_widgets handler for the task page */
|
||||
static void
|
||||
task_page_fill_widgets (CompEditorPage *page, CalComponent *comp)
|
||||
{
|
||||
TaskPage *tpage;
|
||||
TaskPagePrivate *priv;
|
||||
CalComponentText text;
|
||||
CalComponentDateTime d;
|
||||
CalComponentClassification cl;
|
||||
GSList *l;
|
||||
time_t t;
|
||||
int *priority_value, *percent;
|
||||
icalproperty_status status;
|
||||
TaskEditorPriority priority;
|
||||
const char *categories;
|
||||
|
||||
tpage = TASK_PAGE (page);
|
||||
priv = tpage->priv;
|
||||
|
||||
priv->updating = TRUE;
|
||||
|
||||
/* Clean the screen */
|
||||
clear_widgets (tpage);
|
||||
|
||||
/* Summary, description(s) */
|
||||
cal_component_get_summary (comp, &text);
|
||||
e_dialog_editable_set (priv->summary, text.value);
|
||||
|
||||
cal_component_get_description_list (comp, &l);
|
||||
if (l) {
|
||||
text = *(CalComponentText *)l->data;
|
||||
e_dialog_editable_set (priv->description, text.value);
|
||||
} else {
|
||||
e_dialog_editable_set (priv->description, NULL);
|
||||
}
|
||||
cal_component_free_text_list (l);
|
||||
|
||||
/* Due Date. */
|
||||
cal_component_get_due (comp, &d);
|
||||
if (d.value) {
|
||||
t = icaltime_as_timet (*d.value);
|
||||
} else {
|
||||
t = -1;
|
||||
}
|
||||
e_date_edit_set_time (E_DATE_EDIT (priv->due_date), t);
|
||||
|
||||
/* Start Date. */
|
||||
cal_component_get_dtstart (comp, &d);
|
||||
if (d.value) {
|
||||
t = icaltime_as_timet (*d.value);
|
||||
} else {
|
||||
t = -1;
|
||||
}
|
||||
e_date_edit_set_time (E_DATE_EDIT (priv->start_date), t);
|
||||
|
||||
/* Percent Complete. */
|
||||
cal_component_get_percent (comp, &percent);
|
||||
if (percent) {
|
||||
e_dialog_spin_set (priv->percent_complete, *percent);
|
||||
cal_component_free_percent (percent);
|
||||
} else {
|
||||
/* FIXME: Could check if task is completed and set 100%. */
|
||||
e_dialog_spin_set (priv->percent_complete, 0);
|
||||
}
|
||||
|
||||
/* Status. */
|
||||
cal_component_get_status (comp, &status);
|
||||
if (status == ICAL_STATUS_NONE) {
|
||||
/* Try to user the percent value. */
|
||||
if (percent) {
|
||||
if (*percent == 0)
|
||||
status = ICAL_STATUS_NEEDSACTION;
|
||||
else if (*percent == 100)
|
||||
status = ICAL_STATUS_COMPLETED;
|
||||
else
|
||||
status = ICAL_STATUS_INPROCESS;
|
||||
} else
|
||||
status = ICAL_STATUS_NEEDSACTION;
|
||||
}
|
||||
e_dialog_option_menu_set (priv->status, status, status_map);
|
||||
|
||||
/* Priority. */
|
||||
cal_component_get_priority (comp, &priority_value);
|
||||
if (priority_value) {
|
||||
priority = priority_value_to_index (*priority_value);
|
||||
cal_component_free_priority (priority_value);
|
||||
} else {
|
||||
priority = PRIORITY_UNDEFINED;
|
||||
}
|
||||
e_dialog_option_menu_set (priv->priority, priority, priority_map);
|
||||
|
||||
|
||||
/* Classification. */
|
||||
cal_component_get_classification (comp, &cl);
|
||||
|
||||
switch (cl) {
|
||||
case CAL_COMPONENT_CLASS_PUBLIC:
|
||||
e_dialog_radio_set (priv->classification_public,
|
||||
CAL_COMPONENT_CLASS_PUBLIC,
|
||||
classification_map);
|
||||
case CAL_COMPONENT_CLASS_PRIVATE:
|
||||
e_dialog_radio_set (priv->classification_public,
|
||||
CAL_COMPONENT_CLASS_PRIVATE,
|
||||
classification_map);
|
||||
case CAL_COMPONENT_CLASS_CONFIDENTIAL:
|
||||
e_dialog_radio_set (priv->classification_public,
|
||||
CAL_COMPONENT_CLASS_CONFIDENTIAL,
|
||||
classification_map);
|
||||
default:
|
||||
/* What do do? We can't g_assert_not_reached() since it is a
|
||||
* value from an external file.
|
||||
*/
|
||||
}
|
||||
|
||||
/* Categories */
|
||||
cal_component_get_categories (comp, &categories);
|
||||
e_dialog_editable_set (priv->categories, categories);
|
||||
|
||||
priv->updating = FALSE;
|
||||
}
|
||||
|
||||
/* fill_component handler for the task page */
|
||||
static void
|
||||
task_page_fill_component (CompEditorPage *page, CalComponent *comp)
|
||||
{
|
||||
TaskPage *tpage;
|
||||
TaskPagePrivate *priv;
|
||||
CalComponentDateTime date;
|
||||
time_t t;
|
||||
icalproperty_status status;
|
||||
TaskEditorPriority priority;
|
||||
int priority_value, percent;
|
||||
char *cat;
|
||||
char *str;
|
||||
|
||||
tpage = TASK_PAGE (page);
|
||||
priv = tpage->priv;
|
||||
|
||||
/* Summary. */
|
||||
|
||||
str = e_dialog_editable_get (priv->summary);
|
||||
if (!str || strlen (str) == 0)
|
||||
cal_component_set_summary (comp, NULL);
|
||||
else {
|
||||
CalComponentText text;
|
||||
|
||||
text.value = str;
|
||||
text.altrep = NULL;
|
||||
|
||||
cal_component_set_summary (comp, &text);
|
||||
}
|
||||
|
||||
if (str)
|
||||
g_free (str);
|
||||
|
||||
/* Description */
|
||||
|
||||
str = e_dialog_editable_get (priv->description);
|
||||
if (!str || strlen (str) == 0)
|
||||
cal_component_set_description_list (comp, NULL);
|
||||
else {
|
||||
GSList l;
|
||||
CalComponentText text;
|
||||
|
||||
text.value = str;
|
||||
text.altrep = NULL;
|
||||
l.data = &text;
|
||||
l.next = NULL;
|
||||
|
||||
cal_component_set_description_list (comp, &l);
|
||||
}
|
||||
|
||||
if (!str)
|
||||
g_free (str);
|
||||
|
||||
/* Dates */
|
||||
|
||||
date.value = g_new (struct icaltimetype, 1);
|
||||
date.tzid = NULL;
|
||||
|
||||
/* Due Date. */
|
||||
t = e_date_edit_get_time (E_DATE_EDIT (priv->due_date));
|
||||
if (t != -1) {
|
||||
*date.value = icaltime_from_timet (t, FALSE);
|
||||
cal_component_set_due (comp, &date);
|
||||
} else {
|
||||
cal_component_set_due (comp, NULL);
|
||||
}
|
||||
|
||||
/* Start Date. */
|
||||
t = e_date_edit_get_time (E_DATE_EDIT (priv->start_date));
|
||||
if (t != -1) {
|
||||
*date.value = icaltime_from_timet (t, FALSE);
|
||||
cal_component_set_dtstart (comp, &date);
|
||||
} else {
|
||||
cal_component_set_dtstart (comp, NULL);
|
||||
}
|
||||
|
||||
/* Percent Complete. */
|
||||
percent = e_dialog_spin_get_int (priv->percent_complete);
|
||||
cal_component_set_percent (comp, &percent);
|
||||
|
||||
/* Status. */
|
||||
status = e_dialog_option_menu_get (priv->status, status_map);
|
||||
cal_component_set_status (comp, status);
|
||||
|
||||
/* Priority. */
|
||||
priority = e_dialog_option_menu_get (priv->priority, priority_map);
|
||||
priority_value = priority_index_to_value (priority);
|
||||
cal_component_set_priority (comp, &priority_value);
|
||||
|
||||
/* Classification. */
|
||||
cal_component_set_classification (comp, classification_get (priv->classification_public));
|
||||
|
||||
/* Categories */
|
||||
cat = e_dialog_editable_get (priv->categories);
|
||||
cal_component_set_categories (comp, cat);
|
||||
|
||||
if (cat)
|
||||
g_free (cat);
|
||||
}
|
||||
|
||||
/* set_summary handler for the task page */
|
||||
static void
|
||||
task_page_set_summary (CompEditorPage *page, const char *summary)
|
||||
{
|
||||
TaskPage *tpage;
|
||||
TaskPagePrivate *priv;
|
||||
|
||||
tpage = TASK_PAGE (page);
|
||||
priv = tpage->priv;
|
||||
|
||||
gtk_signal_handler_block_by_data (GTK_OBJECT (priv->summary), tpage);
|
||||
e_utf8_gtk_entry_set_text (GTK_ENTRY (priv->summary), summary);
|
||||
gtk_signal_handler_unblock_by_data (GTK_OBJECT (priv->summary), tpage);
|
||||
}
|
||||
|
||||
static void
|
||||
task_page_set_dates (CompEditorPage *page, CompEditorPageDates *dates)
|
||||
{
|
||||
TaskPage *tpage;
|
||||
TaskPagePrivate *priv;
|
||||
|
||||
tpage = TASK_PAGE (page);
|
||||
priv = tpage->priv;
|
||||
|
||||
priv->updating = TRUE;
|
||||
|
||||
if (dates->complete != 0) {
|
||||
if (dates->complete == -1) {
|
||||
/* If the 'Completed Date' is set to 'None',
|
||||
we set the status to 'Not Started' and the
|
||||
percent-complete to 0. The task may
|
||||
actually be partially-complete, but we
|
||||
leave it to the user to set those
|
||||
fields. */
|
||||
e_dialog_option_menu_set (priv->status,
|
||||
ICAL_STATUS_NEEDSACTION,
|
||||
status_map);
|
||||
e_dialog_spin_set (priv->percent_complete, 0);
|
||||
} else {
|
||||
e_dialog_option_menu_set (priv->status,
|
||||
ICAL_STATUS_COMPLETED,
|
||||
status_map);
|
||||
e_dialog_spin_set (priv->percent_complete, 100);
|
||||
}
|
||||
}
|
||||
|
||||
priv->updating = FALSE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Gets the widgets from the XML file and returns if they are all available. */
|
||||
static gboolean
|
||||
get_widgets (TaskPage *tpage)
|
||||
{
|
||||
TaskPagePrivate *priv;
|
||||
|
||||
priv = tpage->priv;
|
||||
|
||||
#define GW(name) glade_xml_get_widget (priv->xml, name)
|
||||
|
||||
priv->main = GW ("task-page");
|
||||
g_assert (priv->main);
|
||||
gtk_widget_ref (priv->main);
|
||||
gtk_widget_unparent (priv->main);
|
||||
|
||||
priv->summary = GW ("summary");
|
||||
|
||||
priv->due_date = GW ("due-date");
|
||||
priv->start_date = GW ("start-date");
|
||||
|
||||
priv->percent_complete = GW ("percent-complete");
|
||||
|
||||
priv->status = GW ("status");
|
||||
priv->priority = GW ("priority");
|
||||
|
||||
priv->description = GW ("description");
|
||||
|
||||
priv->classification_public = GW ("classification-public");
|
||||
priv->classification_private = GW ("classification-private");
|
||||
priv->classification_confidential = GW ("classification-confidential");
|
||||
|
||||
priv->contacts_btn = GW ("contacts-button");
|
||||
priv->contacts = GW ("contacts");
|
||||
|
||||
priv->categories_btn = GW ("categories-button");
|
||||
priv->categories = GW ("categories");
|
||||
|
||||
#undef GW
|
||||
|
||||
return (priv->summary
|
||||
&& priv->due_date
|
||||
&& priv->start_date
|
||||
&& priv->percent_complete
|
||||
&& priv->status
|
||||
&& priv->priority
|
||||
&& priv->classification_public
|
||||
&& priv->classification_private
|
||||
&& priv->classification_confidential
|
||||
&& priv->description
|
||||
&& priv->contacts_btn
|
||||
&& priv->contacts
|
||||
&& priv->categories_btn
|
||||
&& priv->categories);
|
||||
}
|
||||
|
||||
/* Callback used when the summary changes; we emit the notification signal. */
|
||||
static void
|
||||
summary_changed_cb (GtkEditable *editable, gpointer data)
|
||||
{
|
||||
TaskPage *tpage;
|
||||
TaskPagePrivate *priv;
|
||||
gchar *summary;
|
||||
|
||||
tpage = TASK_PAGE (data);
|
||||
priv = tpage->priv;
|
||||
|
||||
if (priv->updating)
|
||||
return;
|
||||
|
||||
summary = gtk_editable_get_chars (editable, 0, -1);
|
||||
comp_editor_page_notify_summary_changed (COMP_EDITOR_PAGE (tpage),
|
||||
summary);
|
||||
g_free (summary);
|
||||
}
|
||||
|
||||
/* Callback used when the start or end date widgets change. We check that the
|
||||
* start date < end date and we set the "all day task" button as appropriate.
|
||||
*/
|
||||
static void
|
||||
date_changed_cb (EDateEdit *dedit, gpointer data)
|
||||
{
|
||||
TaskPage *tpage;
|
||||
TaskPagePrivate *priv;
|
||||
CompEditorPageDates dates;
|
||||
|
||||
tpage = TASK_PAGE (data);
|
||||
priv = tpage->priv;
|
||||
|
||||
if (priv->updating)
|
||||
return;
|
||||
|
||||
dates.start = e_date_edit_get_time (E_DATE_EDIT (priv->start_date));
|
||||
dates.end = 0;
|
||||
dates.due = e_date_edit_get_time (E_DATE_EDIT (priv->due_date));
|
||||
dates.complete = 0;
|
||||
|
||||
/* Notify upstream */
|
||||
comp_editor_page_notify_dates_changed (COMP_EDITOR_PAGE (tpage),
|
||||
&dates);
|
||||
}
|
||||
|
||||
/* Callback used when the categories button is clicked; we must bring up the
|
||||
* category list dialog.
|
||||
*/
|
||||
static void
|
||||
categories_clicked_cb (GtkWidget *button, gpointer data)
|
||||
{
|
||||
TaskPage *tpage;
|
||||
TaskPagePrivate *priv;
|
||||
char *categories;
|
||||
GnomeDialog *dialog;
|
||||
int result;
|
||||
GtkWidget *entry;
|
||||
|
||||
tpage = TASK_PAGE (data);
|
||||
priv = tpage->priv;
|
||||
|
||||
entry = priv->categories;
|
||||
categories = e_utf8_gtk_entry_get_text (GTK_ENTRY (entry));
|
||||
|
||||
dialog = GNOME_DIALOG (e_categories_new (categories));
|
||||
result = gnome_dialog_run (dialog);
|
||||
g_free (categories);
|
||||
|
||||
if (result == 0) {
|
||||
gtk_object_get (GTK_OBJECT (dialog),
|
||||
"categories", &categories,
|
||||
NULL);
|
||||
e_utf8_gtk_entry_set_text (GTK_ENTRY (entry), categories);
|
||||
g_free (categories);
|
||||
}
|
||||
|
||||
gtk_object_destroy (GTK_OBJECT (dialog));
|
||||
}
|
||||
|
||||
/* This is called when any field is changed; it notifies upstream. */
|
||||
static void
|
||||
field_changed_cb (GtkWidget *widget, gpointer data)
|
||||
{
|
||||
TaskPage *tpage;
|
||||
TaskPagePrivate *priv;
|
||||
|
||||
tpage = TASK_PAGE (data);
|
||||
priv = tpage->priv;
|
||||
|
||||
if (!priv->updating)
|
||||
comp_editor_page_notify_changed (COMP_EDITOR_PAGE (tpage));
|
||||
}
|
||||
|
||||
static void
|
||||
complete_date_changed (TaskPage *tpage, time_t complete)
|
||||
{
|
||||
TaskPagePrivate *priv;
|
||||
CompEditorPageDates dates;
|
||||
|
||||
priv = tpage->priv;
|
||||
|
||||
if (priv->updating)
|
||||
return;
|
||||
|
||||
dates.start = 0;
|
||||
dates.end = 0;
|
||||
dates.due = 0;
|
||||
dates.complete = complete;
|
||||
|
||||
/* Notify upstream */
|
||||
comp_editor_page_notify_dates_changed (COMP_EDITOR_PAGE (tpage),
|
||||
&dates);
|
||||
}
|
||||
|
||||
static void
|
||||
status_changed (GtkMenu *menu, TaskPage *tpage)
|
||||
{
|
||||
TaskPagePrivate *priv;
|
||||
icalproperty_status status;
|
||||
|
||||
priv = tpage->priv;
|
||||
|
||||
if (priv->updating)
|
||||
return;
|
||||
|
||||
status = e_dialog_option_menu_get (priv->status, status_map);
|
||||
if (status == ICAL_STATUS_NEEDSACTION) {
|
||||
e_dialog_spin_set (priv->percent_complete, 0);
|
||||
complete_date_changed (tpage, -1);
|
||||
} else if (status == ICAL_STATUS_INPROCESS) {
|
||||
e_dialog_spin_set (priv->percent_complete, 50);
|
||||
complete_date_changed (tpage, -1);
|
||||
} else if (status == ICAL_STATUS_COMPLETED) {
|
||||
e_dialog_spin_set (priv->percent_complete, 100);
|
||||
complete_date_changed (tpage, time (NULL));
|
||||
}
|
||||
|
||||
comp_editor_page_notify_changed (COMP_EDITOR_PAGE (tpage));
|
||||
}
|
||||
|
||||
static void
|
||||
percent_complete_changed (GtkAdjustment *adj, TaskPage *tpage)
|
||||
{
|
||||
TaskPagePrivate *priv;
|
||||
gint percent;
|
||||
icalproperty_status status;
|
||||
time_t date_completed;
|
||||
|
||||
priv = tpage->priv;
|
||||
|
||||
if (priv->updating)
|
||||
return;
|
||||
|
||||
percent = e_dialog_spin_get_int (priv->percent_complete);
|
||||
if (percent == 100) {
|
||||
date_completed = time (NULL);
|
||||
status = ICAL_STATUS_COMPLETED;
|
||||
} else {
|
||||
date_completed = -1;
|
||||
|
||||
if (percent == 0)
|
||||
status = ICAL_STATUS_NEEDSACTION;
|
||||
else
|
||||
status = ICAL_STATUS_INPROCESS;
|
||||
}
|
||||
|
||||
complete_date_changed (tpage, date_completed);
|
||||
e_dialog_option_menu_set (priv->status, status, status_map);
|
||||
|
||||
comp_editor_page_notify_changed (COMP_EDITOR_PAGE (tpage));
|
||||
}
|
||||
|
||||
|
||||
/* Hooks the widget signals */
|
||||
static void
|
||||
init_widgets (TaskPage *tpage)
|
||||
{
|
||||
TaskPagePrivate *priv;
|
||||
|
||||
priv = tpage->priv;
|
||||
|
||||
|
||||
/* Summary */
|
||||
gtk_signal_connect (GTK_OBJECT (priv->summary), "changed",
|
||||
GTK_SIGNAL_FUNC (summary_changed_cb), tpage);
|
||||
|
||||
/* Dates */
|
||||
gtk_signal_connect (GTK_OBJECT (priv->start_date), "changed",
|
||||
GTK_SIGNAL_FUNC (date_changed_cb), tpage);
|
||||
gtk_signal_connect (GTK_OBJECT (priv->due_date), "changed",
|
||||
GTK_SIGNAL_FUNC (date_changed_cb), tpage);
|
||||
|
||||
/* Connect signals. The Status, Percent Complete & Date Completed
|
||||
properties are closely related so whenever one changes we may need
|
||||
to update the other 2. */
|
||||
gtk_signal_connect (GTK_OBJECT (GTK_OPTION_MENU (priv->status)->menu),
|
||||
"deactivate",
|
||||
GTK_SIGNAL_FUNC (status_changed), tpage);
|
||||
|
||||
gtk_signal_connect (GTK_OBJECT (GTK_SPIN_BUTTON (priv->percent_complete)->adjustment),
|
||||
"value_changed",
|
||||
GTK_SIGNAL_FUNC (percent_complete_changed), tpage);
|
||||
|
||||
/* Classification */
|
||||
gtk_signal_connect (GTK_OBJECT (priv->description), "changed",
|
||||
GTK_SIGNAL_FUNC (field_changed_cb), tpage);
|
||||
gtk_signal_connect (GTK_OBJECT (priv->classification_public),
|
||||
"toggled",
|
||||
GTK_SIGNAL_FUNC (field_changed_cb), tpage);
|
||||
gtk_signal_connect (GTK_OBJECT (priv->classification_private),
|
||||
"toggled",
|
||||
GTK_SIGNAL_FUNC (field_changed_cb), tpage);
|
||||
gtk_signal_connect (GTK_OBJECT (priv->classification_confidential),
|
||||
"toggled",
|
||||
GTK_SIGNAL_FUNC (field_changed_cb), tpage);
|
||||
|
||||
/* Connect the default signal handler to use to make sure the "changed"
|
||||
field gets set whenever a field is changed. */
|
||||
gtk_signal_connect (GTK_OBJECT (GTK_OPTION_MENU (priv->priority)->menu),
|
||||
"deactivate",
|
||||
GTK_SIGNAL_FUNC (field_changed_cb), tpage);
|
||||
gtk_signal_connect (GTK_OBJECT (priv->description), "changed",
|
||||
GTK_SIGNAL_FUNC (field_changed_cb), tpage);
|
||||
gtk_signal_connect (GTK_OBJECT (priv->contacts), "changed",
|
||||
GTK_SIGNAL_FUNC (field_changed_cb), tpage);
|
||||
gtk_signal_connect (GTK_OBJECT (priv->categories), "changed",
|
||||
GTK_SIGNAL_FUNC (field_changed_cb), tpage);
|
||||
|
||||
/* Button clicks */
|
||||
gtk_signal_connect (GTK_OBJECT (priv->categories_btn), "clicked",
|
||||
GTK_SIGNAL_FUNC (categories_clicked_cb), tpage);
|
||||
|
||||
/* FIXME: we do not support these fields yet, so we disable them */
|
||||
|
||||
gtk_widget_set_sensitive (priv->contacts_btn, FALSE);
|
||||
gtk_widget_set_sensitive (priv->contacts, FALSE);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* task_page_construct:
|
||||
* @tpage: An task page.
|
||||
*
|
||||
* Constructs an task page by loading its Glade data.
|
||||
*
|
||||
* Return value: The same object as @tpage, or NULL if the widgets could not be
|
||||
* created.
|
||||
**/
|
||||
TaskPage *
|
||||
task_page_construct (TaskPage *tpage)
|
||||
{
|
||||
TaskPagePrivate *priv;
|
||||
|
||||
priv = tpage->priv;
|
||||
|
||||
priv->xml = glade_xml_new (EVOLUTION_GLADEDIR "/task-page.glade",
|
||||
NULL);
|
||||
if (!priv->xml) {
|
||||
g_message ("task_page_construct(): "
|
||||
"Could not load the Glade XML file!");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (!get_widgets (tpage)) {
|
||||
g_message ("task_page_construct(): "
|
||||
"Could not find all widgets in the XML file!");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
init_widgets (tpage);
|
||||
|
||||
return tpage;
|
||||
}
|
||||
|
||||
/**
|
||||
* task_page_new:
|
||||
*
|
||||
* Creates a new task page.
|
||||
*
|
||||
* Return value: A newly-created task page, or NULL if the page could
|
||||
* not be created.
|
||||
**/
|
||||
TaskPage *
|
||||
task_page_new (void)
|
||||
{
|
||||
TaskPage *tpage;
|
||||
|
||||
tpage = gtk_type_new (TYPE_TASK_PAGE);
|
||||
if (!task_page_construct (tpage)) {
|
||||
gtk_object_unref (GTK_OBJECT (tpage));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return tpage;
|
||||
}
|
||||
|
||||
GtkWidget *task_page_create_date_edit (void);
|
||||
|
||||
GtkWidget *
|
||||
task_page_create_date_edit (void)
|
||||
{
|
||||
GtkWidget *dedit;
|
||||
|
||||
dedit = date_edit_new (TRUE, TRUE);
|
||||
e_date_edit_set_allow_no_date_set (E_DATE_EDIT (dedit), TRUE);
|
||||
|
||||
return dedit;
|
||||
}
|
||||
@ -15,6 +15,7 @@
|
||||
<widget>
|
||||
<class>GtkWindow</class>
|
||||
<name>task-toplevel</name>
|
||||
<visible>False</visible>
|
||||
<title>window1</title>
|
||||
<type>GTK_WINDOW_TOPLEVEL</type>
|
||||
<position>GTK_WIN_POS_NONE</position>
|
||||
@ -184,10 +185,10 @@
|
||||
<widget>
|
||||
<class>Custom</class>
|
||||
<name>due-date</name>
|
||||
<creation_function>task_editor_create_date_edit</creation_function>
|
||||
<creation_function>task_page_create_date_edit</creation_function>
|
||||
<int1>0</int1>
|
||||
<int2>0</int2>
|
||||
<last_modification_time>Sun, 10 Sep 2000 17:32:18 GMT</last_modification_time>
|
||||
<last_modification_time>Fri, 01 Jun 2001 18:59:52 GMT</last_modification_time>
|
||||
<child>
|
||||
<left_attach>1</left_attach>
|
||||
<right_attach>2</right_attach>
|
||||
@ -207,10 +208,10 @@
|
||||
<widget>
|
||||
<class>Custom</class>
|
||||
<name>start-date</name>
|
||||
<creation_function>task_editor_create_date_edit</creation_function>
|
||||
<creation_function>task_page_create_date_edit</creation_function>
|
||||
<int1>0</int1>
|
||||
<int2>0</int2>
|
||||
<last_modification_time>Sun, 10 Sep 2000 17:33:31 GMT</last_modification_time>
|
||||
<last_modification_time>Fri, 01 Jun 2001 18:59:57 GMT</last_modification_time>
|
||||
<child>
|
||||
<left_attach>1</left_attach>
|
||||
<right_attach>2</right_attach>
|
||||
@ -239,7 +240,7 @@
|
||||
<vupdate_policy>GTK_UPDATE_CONTINUOUS</vupdate_policy>
|
||||
<child>
|
||||
<padding>0</padding>
|
||||
<expand>False</expand>
|
||||
<expand>True</expand>
|
||||
<fill>True</fill>
|
||||
</child>
|
||||
|
||||
@ -459,7 +460,7 @@ Undefined
|
||||
<spacing>2</spacing>
|
||||
<child>
|
||||
<padding>0</padding>
|
||||
<expand>True</expand>
|
||||
<expand>False</expand>
|
||||
<fill>True</fill>
|
||||
</child>
|
||||
|
||||
@ -467,7 +468,6 @@ Undefined
|
||||
<class>GtkButton</class>
|
||||
<name>contacts-button</name>
|
||||
<can_focus>True</can_focus>
|
||||
<relief>GTK_RELIEF_NORMAL</relief>
|
||||
<child>
|
||||
<padding>0</padding>
|
||||
<expand>False</expand>
|
||||
@ -506,7 +506,6 @@ Undefined
|
||||
<class>GtkButton</class>
|
||||
<name>categories-button</name>
|
||||
<can_focus>True</can_focus>
|
||||
<relief>GTK_RELIEF_NORMAL</relief>
|
||||
<child>
|
||||
<padding>0</padding>
|
||||
<expand>False</expand>
|
||||
|
||||
61
calendar/gui/dialogs/task-page.h
Normal file
61
calendar/gui/dialogs/task-page.h
Normal file
@ -0,0 +1,61 @@
|
||||
/* Evolution calendar - Main page of the task editor dialog
|
||||
*
|
||||
* Copyright (C) 2001 Ximian, Inc.
|
||||
*
|
||||
* Authors: Federico Mena-Quintero <federico@ximian.com>
|
||||
* Miguel de Icaza <miguel@ximian.com>
|
||||
* Seth Alves <alves@hungry.com>
|
||||
* JP Rosevear <jpr@ximian.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifndef TASK_PAGE_H
|
||||
#define TASK_PAGE_H
|
||||
|
||||
#include "comp-editor-page.h"
|
||||
|
||||
BEGIN_GNOME_DECLS
|
||||
|
||||
|
||||
|
||||
#define TYPE_TASK_PAGE (task_page_get_type ())
|
||||
#define TASK_PAGE(obj) (GTK_CHECK_CAST ((obj), TYPE_TASK_PAGE, TaskPage))
|
||||
#define TASK_PAGE_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), TYPE_TASK_PAGE, TaskPageClass))
|
||||
#define IS_TASK_PAGE(obj) (GTK_CHECK_TYPE ((obj), TYPE_TASK_PAGE))
|
||||
#define IS_TASK_PAGE_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), TYPE_TASK_PAGE))
|
||||
|
||||
typedef struct _TaskPagePrivate TaskPagePrivate;
|
||||
|
||||
typedef struct {
|
||||
CompEditorPage page;
|
||||
|
||||
/* Private data */
|
||||
TaskPagePrivate *priv;
|
||||
} TaskPage;
|
||||
|
||||
typedef struct {
|
||||
CompEditorPageClass parent_class;
|
||||
} TaskPageClass;
|
||||
|
||||
GtkType task_page_get_type (void);
|
||||
TaskPage *task_page_construct (TaskPage *epage);
|
||||
TaskPage *task_page_new (void);
|
||||
|
||||
|
||||
|
||||
END_GNOME_DECLS
|
||||
|
||||
#endif
|
||||
@ -31,6 +31,7 @@
|
||||
#include <config.h>
|
||||
#include <sys/stat.h>
|
||||
#include <unistd.h>
|
||||
#include <gnome.h>
|
||||
#include <gal/e-table/e-cell-checkbox.h>
|
||||
#include <gal/e-table/e-cell-toggle.h>
|
||||
#include <gal/e-table/e-cell-text.h>
|
||||
@ -674,9 +675,9 @@ open_task (ECalendarTable *cal_table, CalComponent *comp)
|
||||
TaskEditor *tedit;
|
||||
|
||||
tedit = task_editor_new ();
|
||||
task_editor_set_cal_client (tedit, calendar_model_get_cal_client (cal_table->model));
|
||||
task_editor_set_todo_object (tedit, comp);
|
||||
task_editor_focus (tedit);
|
||||
comp_editor_set_cal_client (COMP_EDITOR (tedit), calendar_model_get_cal_client (cal_table->model));
|
||||
comp_editor_edit_comp (COMP_EDITOR (tedit), comp);
|
||||
comp_editor_focus (COMP_EDITOR (tedit));
|
||||
}
|
||||
|
||||
/* Opens the task in the specified row */
|
||||
|
||||
@ -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 <gal/menus/gal-view-collection.h>
|
||||
@ -468,15 +469,15 @@ e_tasks_new_task (ETasks *tasks)
|
||||
priv = tasks->priv;
|
||||
|
||||
tedit = task_editor_new ();
|
||||
task_editor_set_cal_client (tedit, priv->client);
|
||||
comp_editor_set_cal_client (COMP_EDITOR (tedit), priv->client);
|
||||
|
||||
comp = cal_component_new ();
|
||||
cal_component_set_new_vtype (comp, CAL_COMPONENT_TODO);
|
||||
|
||||
task_editor_set_todo_object (tedit, comp);
|
||||
comp_editor_edit_comp (COMP_EDITOR (tedit), comp);
|
||||
gtk_object_unref (GTK_OBJECT (comp));
|
||||
|
||||
task_editor_focus (tedit);
|
||||
comp_editor_focus (COMP_EDITOR (tedit));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -40,10 +40,10 @@
|
||||
#include "widgets/misc/e-search-bar.h"
|
||||
#include "widgets/misc/e-filter-bar.h"
|
||||
#include "dialogs/alarm-notify-dialog.h"
|
||||
#include "dialogs/event-editor.h"
|
||||
#include "e-calendar-table.h"
|
||||
#include "e-day-view.h"
|
||||
#include "e-week-view.h"
|
||||
#include "event-editor.h"
|
||||
#include "gnome-cal.h"
|
||||
#include "component-factory.h"
|
||||
#include "calendar-commands.h"
|
||||
@ -1308,11 +1308,11 @@ gnome_calendar_edit_object (GnomeCalendar *gcal, CalComponent *comp)
|
||||
GTK_SIGNAL_FUNC (editor_closed_cb),
|
||||
ec);
|
||||
|
||||
event_editor_set_cal_client (EVENT_EDITOR (ee), priv->client);
|
||||
event_editor_set_event_object (EVENT_EDITOR (ee), comp);
|
||||
comp_editor_set_cal_client (COMP_EDITOR (ee), priv->client);
|
||||
comp_editor_edit_comp (COMP_EDITOR (ee), comp);
|
||||
}
|
||||
|
||||
event_editor_focus (ee);
|
||||
comp_editor_focus (COMP_EDITOR (ee));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user