aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--calendar/ChangeLog8
-rw-r--r--calendar/gui/e-itip-control.c89
-rw-r--r--calendar/gui/e-itip-control.glade104
3 files changed, 194 insertions, 7 deletions
diff --git a/calendar/ChangeLog b/calendar/ChangeLog
index 073eb638df..9bb02b4b5d 100644
--- a/calendar/ChangeLog
+++ b/calendar/ChangeLog
@@ -1,3 +1,11 @@
+2000-10-16 Jesse Pavel <jpavel@helixcode.com>
+
+ * gui/e-itip-control.c: You can now add incoming iTip
+ messages to your calendar store.
+
+ * gui/e-itip-control.glade: added a progress bar dialog
+ in case the calendar loading takes a long time.
+
2000-10-16 JP Rosevear <jpr@helixcode.com>
* cal-client/cal-client.h: Remove pilot cruft. All pilot stuff
diff --git a/calendar/gui/e-itip-control.c b/calendar/gui/e-itip-control.c
index 463941e6c2..28071be091 100644
--- a/calendar/gui/e-itip-control.c
+++ b/calendar/gui/e-itip-control.c
@@ -18,11 +18,13 @@
#include "e-itip-control.h"
#include <cal-util/cal-component.h>
+#include <cal-client/cal-client.h>
#define DEFAULT_WIDTH 500
#define DEFAULT_HEIGHT 400
+extern gchar *evolution_dir;
typedef struct _EItipControlPrivate EItipControlPrivate;
@@ -32,6 +34,9 @@ struct _EItipControlPrivate {
GtkWidget *text_box;
GtkWidget *organizer_entry, *dtstart_label, *dtend_label;
GtkWidget *summary_entry, *description_box;
+ GtkWidget *add_button;
+ GtkWidget *loading_window;
+ GtkWidget *loading_progress;
icalcomponent *main_comp, *comp;
CalComponent *cal_comp;
@@ -63,6 +68,9 @@ itip_control_destroy_cb (GtkObject *object,
icalcomponent_free (priv->main_comp);
}
+ if (priv->cal_comp != NULL) {
+ gtk_object_unref (GTK_OBJECT (priv->cal_comp));
+ }
g_free (priv);
}
@@ -73,6 +81,69 @@ itip_control_size_request_cb (GtkWidget *widget, GtkRequisition *requisition)
requisition->height = DEFAULT_HEIGHT;
}
+static void
+cal_loaded_cb (GtkObject *object, CalClientGetStatus status, gpointer data)
+{
+ CalClient *client = CAL_CLIENT (object);
+ EItipControlPrivate *priv = data;
+
+ gtk_widget_hide (priv->loading_progress);
+
+ if (status == CAL_CLIENT_GET_SUCCESS) {
+ if (cal_client_update_object (client, priv->cal_comp) == FALSE) {
+ GtkWidget *dialog;
+
+ dialog = gnome_warning_dialog("I couldn't update your calendar file!\n");
+ gnome_dialog_run (GNOME_DIALOG(dialog));
+ }
+ else {
+ /* We have success. */
+ GtkWidget *dialog;
+
+ dialog = gnome_ok_dialog("Component successfully added.");
+ gnome_dialog_run (GNOME_DIALOG(dialog));
+ }
+ }
+ else {
+ GtkWidget *dialog;
+
+ dialog = gnome_ok_dialog("There was an error loading the calendar file.");
+ gnome_dialog_run (GNOME_DIALOG(dialog));
+ }
+
+ gtk_object_unref (GTK_OBJECT (client));
+ return;
+}
+
+static void
+add_button_clicked_cb (GtkWidget *widget, gpointer data)
+{
+ EItipControlPrivate *priv = data;
+ gchar cal_uri[255];
+ CalClient *client;
+
+ sprintf (cal_uri, "%s/local/Calendar/calendar.ics", evolution_dir);
+
+ client = cal_client_new ();
+ if (cal_client_load_calendar (client, cal_uri) == FALSE) {
+ GtkWidget *dialog;
+
+ dialog = gnome_warning_dialog("I couldn't open your calendar file!\n");
+ gnome_dialog_run (GNOME_DIALOG(dialog));
+ gtk_object_unref (GTK_OBJECT (client));
+
+ return;
+ }
+
+ gtk_signal_connect (GTK_OBJECT (client), "cal_loaded",
+ GTK_SIGNAL_FUNC (cal_loaded_cb), priv);
+
+ gtk_progress_bar_update (GTK_PROGRESS_BAR (priv->loading_progress), 0.5);
+ gtk_widget_show (priv->loading_progress);
+
+ return;
+}
+
/*
* Bonobo::PersistStream
@@ -178,15 +249,13 @@ pstream_load (BonoboPersistStream *ps, const Bonobo_Stream stream,
return;
}
-#if 0
priv->cal_comp = cal_component_new ();
- if (cal_component_set_icalcomponent (priv->cal_comp, priv->comp) == FALSE)) {
- gtk_object_destroy (GTK_OBJECT (priv->cal_comp));
- icalcomponent_free (main_comp);
+ if (cal_component_set_icalcomponent (priv->cal_comp, priv->comp) == FALSE) {
+ g_printerr ("e-itip-control.c: I couldn't create a CalComponent from the iTip data.\n");
+ gtk_object_unref (GTK_OBJECT (priv->cal_comp));
}
-#endif
- /* Okay, good then; now I will pick apart the CalComponent to get
+ /* Okay, good then; now I will pick apart the component to get
all the things I'll show in my control. */
{
icalproperty *prop;
@@ -328,12 +397,18 @@ e_itip_control_factory (BonoboGenericFactory *Factory, void *closure)
priv->dtend_label = glade_xml_get_widget (priv->xml, "dtend_label");
priv->summary_entry = glade_xml_get_widget (priv->xml, "summary_entry");
priv->description_box = glade_xml_get_widget (priv->xml, "description_box");
- gtk_text_set_editable (GTK_TEXT (priv->text_box), FALSE);
+ priv->add_button = glade_xml_get_widget (priv->xml, "add_button");
+ priv->loading_progress = glade_xml_get_widget (priv->xml, "loading_progress");
+ priv->loading_window = glade_xml_get_widget (priv->xml, "loading_window");
+ gtk_text_set_editable (GTK_TEXT (priv->text_box), FALSE);
+
gtk_signal_connect (GTK_OBJECT (priv->main_frame), "destroy",
GTK_SIGNAL_FUNC (itip_control_destroy_cb), priv);
gtk_signal_connect (GTK_OBJECT (priv->main_frame), "size_request",
GTK_SIGNAL_FUNC (itip_control_size_request_cb), priv);
+ gtk_signal_connect (GTK_OBJECT (priv->add_button), "clicked",
+ GTK_SIGNAL_FUNC (add_button_clicked_cb), priv);
gtk_widget_show (priv->text_box);
gtk_widget_show (priv->main_frame);
diff --git a/calendar/gui/e-itip-control.glade b/calendar/gui/e-itip-control.glade
index da2e1dcdae..8a683f72aa 100644
--- a/calendar/gui/e-itip-control.glade
+++ b/calendar/gui/e-itip-control.glade
@@ -331,6 +331,30 @@
</widget>
<widget>
+ <class>GtkHButtonBox</class>
+ <name>hbuttonbox1</name>
+ <layout_style>GTK_BUTTONBOX_DEFAULT_STYLE</layout_style>
+ <spacing>30</spacing>
+ <child_min_width>85</child_min_width>
+ <child_min_height>27</child_min_height>
+ <child_ipad_x>7</child_ipad_x>
+ <child_ipad_y>0</child_ipad_y>
+ <child>
+ <padding>0</padding>
+ <expand>True</expand>
+ <fill>True</fill>
+ </child>
+
+ <widget>
+ <class>GtkButton</class>
+ <name>add_button</name>
+ <can_default>True</can_default>
+ <can_focus>True</can_focus>
+ <label>Add to Calendar</label>
+ </widget>
+ </widget>
+
+ <widget>
<class>GtkText</class>
<name>text_box</name>
<can_focus>True</can_focus>
@@ -348,4 +372,84 @@
</widget>
</widget>
+<widget>
+ <class>GtkWindow</class>
+ <name>loading_window</name>
+ <visible>False</visible>
+ <title>Loading Calendar</title>
+ <type>GTK_WINDOW_DIALOG</type>
+ <position>GTK_WIN_POS_CENTER</position>
+ <modal>False</modal>
+ <allow_shrink>False</allow_shrink>
+ <allow_grow>True</allow_grow>
+ <auto_shrink>False</auto_shrink>
+
+ <widget>
+ <class>GtkFrame</class>
+ <name>frame1</name>
+ <border_width>4</border_width>
+ <label></label>
+ <label_xalign>0</label_xalign>
+ <shadow_type>GTK_SHADOW_ETCHED_OUT</shadow_type>
+
+ <widget>
+ <class>GtkVBox</class>
+ <name>vbox2</name>
+ <border_width>7</border_width>
+ <homogeneous>False</homogeneous>
+ <spacing>1</spacing>
+
+ <widget>
+ <class>GtkHBox</class>
+ <name>hbox2</name>
+ <border_width>6</border_width>
+ <homogeneous>False</homogeneous>
+ <spacing>9</spacing>
+ <child>
+ <padding>0</padding>
+ <expand>False</expand>
+ <fill>False</fill>
+ </child>
+
+ <widget>
+ <class>GtkLabel</class>
+ <name>label10</name>
+ <label>Loading calendar...</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0.5</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <child>
+ <padding>0</padding>
+ <expand>False</expand>
+ <fill>False</fill>
+ </child>
+ </widget>
+
+ <widget>
+ <class>GtkProgressBar</class>
+ <name>progressbar1</name>
+ <value>0</value>
+ <lower>0</lower>
+ <upper>100</upper>
+ <bar_style>GTK_PROGRESS_CONTINUOUS</bar_style>
+ <orientation>GTK_PROGRESS_LEFT_TO_RIGHT</orientation>
+ <activity_mode>False</activity_mode>
+ <show_text>False</show_text>
+ <format>%P %%</format>
+ <text_xalign>0.5</text_xalign>
+ <text_yalign>0.5</text_yalign>
+ <child>
+ <padding>0</padding>
+ <expand>False</expand>
+ <fill>False</fill>
+ </child>
+ </widget>
+ </widget>
+ </widget>
+ </widget>
+</widget>
+
</GTK-Interface>