[gnome-calendar] Added more details to event-details view.



commit 4801dd351302bfab19b9f28bb127d6de22621224
Author: Erick PÃrez Castellanos <erick red gmail com>
Date:   Thu Aug 23 11:18:03 2012 -0400

    Added more details to event-details view.
    
    Added start and end date loading.
    Added start and end time loading.
    Added calendar loading.

 src/gcal-edit-dialog.c |  118 ++++++++++++++++++++++++++++++++++++++++++++++--
 src/gcal-manager.c     |   26 +++++++++++
 src/gcal-manager.h     |    4 ++
 3 files changed, 144 insertions(+), 4 deletions(-)
---
diff --git a/src/gcal-edit-dialog.c b/src/gcal-edit-dialog.c
index 6fbf670..35457cf 100644
--- a/src/gcal-edit-dialog.c
+++ b/src/gcal-edit-dialog.c
@@ -20,6 +20,7 @@
 #include "gcal-edit-dialog.h"
 #include "gcal-utils.h"
 
+#include <libecal/libecal.h>
 #include <glib/gi18n.h>
 
 struct _GcalEditDialogPrivate
@@ -327,6 +328,59 @@ gcal_edit_dialog_calendar_selected (GtkWidget *menu_item,
 }
 
 static void
+gcal_edit_dialog_set_calendar_selected (GcalEditDialog *dialog)
+{
+  GcalEditDialogPrivate *priv;
+
+  GtkListStore *sources_model;
+  gboolean valid;
+  GtkTreeIter iter;
+
+  priv = dialog->priv;
+
+  /* Loading calendars */
+  sources_model = gcal_manager_get_sources_model (priv->manager);
+  valid = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (sources_model),
+                                         &iter);
+  while (valid)
+    {
+      /* Walk through the list, reading each row */
+      gchar *uid;
+      GdkColor *color;
+      GtkWidget *cal_image;
+      GdkPixbuf *pix;
+
+      gtk_tree_model_get (GTK_TREE_MODEL (sources_model), &iter,
+                          0, &uid,
+                          3, &color,
+                          -1);
+
+      if (g_strcmp0 (priv->source_uid, uid) == 0)
+        {
+          if (priv->active_iter != NULL)
+            gtk_tree_iter_free (priv->active_iter);
+          priv->active_iter = gtk_tree_iter_copy (&iter);
+
+          pix = gcal_get_pixbuf_from_color (color);
+          cal_image = gtk_image_new_from_pixbuf (pix);
+          gtk_button_set_image (GTK_BUTTON (priv->calendar_button), cal_image);
+
+          gdk_color_free (color);
+          g_free (uid);
+          g_object_unref (pix);
+
+          return;
+        }
+
+      gdk_color_free (color);
+      g_free (uid);
+
+      valid = gtk_tree_model_iter_next (GTK_TREE_MODEL (sources_model),
+                                        &iter);
+    }
+}
+
+static void
 gcal_edit_dialog_set_writable (GcalEditDialog *dialog,
                                gboolean        writable)
 {
@@ -357,9 +411,29 @@ gcal_edit_dialog_clear_data (GcalEditDialog *dialog)
 
   /* FIXME: add clear for the rest of the fields when I define loading code for
    * those below */
+  /* summary */
   gtk_entry_set_text (GTK_ENTRY (priv->summary_entry), "");
+
+  /* calendar button */
+  if (priv->active_iter != NULL)
+    {
+      gtk_tree_iter_free (priv->active_iter);
+      priv->active_iter = NULL;
+    }
+  gtk_button_set_image (GTK_BUTTON (priv->calendar_button),
+                        gtk_image_new_from_icon_name ("x-office-calendar-symbolic",
+                                                      GTK_ICON_SIZE_MENU));
+
+  /* date and time */
+  gtk_entry_set_text (GTK_ENTRY (priv->start_date_entry), "");
+  gtk_entry_set_text (GTK_ENTRY (priv->start_time_entry), "");
+  gtk_entry_set_text (GTK_ENTRY (priv->end_date_entry), "");
+  gtk_entry_set_text (GTK_ENTRY (priv->end_time_entry), "");
+
+  /* location */
   gtk_entry_set_text (GTK_ENTRY (priv->location_entry), "");
 
+  /* notes */
   gtk_text_buffer_set_text (
       gtk_text_view_get_buffer (GTK_TEXT_VIEW (priv->notes_text)),
       "",
@@ -396,6 +470,10 @@ gcal_edit_dialog_set_event (GcalEditDialog *dialog,
   const gchar *const_text;
   gboolean all_day;
 
+  icaltimetype *date;
+  gchar buffer [64];
+  struct tm tm_date;
+
   priv = dialog->priv;
   all_day = FALSE;
 
@@ -418,8 +496,19 @@ gcal_edit_dialog_set_event (GcalEditDialog *dialog,
                       text != NULL ? text : "");
   g_free (text);
 
+  /* calendar button */
+  gcal_edit_dialog_set_calendar_selected (dialog);
+
   /* start date */
+  date = gcal_manager_get_event_start_date (priv->manager,
+                                            priv->source_uid,
+                                            priv->event_uid);
+  tm_date = icaltimetype_to_tm (date);
+  e_utf8_strftime_fix_am_pm (buffer, 64, "%x", &tm_date);
+  gtk_entry_set_text (GTK_ENTRY (priv->start_date_entry),
+                      buffer);
 
+  g_free (date);
   /* all_day  */
   all_day = gcal_manager_get_event_all_day (priv->manager,
                                             priv->source_uid,
@@ -430,15 +519,38 @@ gcal_edit_dialog_set_event (GcalEditDialog *dialog,
   /* start time */
   if (all_day)
     {
-      /* FIXME: set time to 00:00 */
+      gtk_entry_set_text (GTK_ENTRY (priv->start_time_entry),
+                          "00:00");
+    }
+  else
+    {
+      e_utf8_strftime_fix_am_pm (buffer, 64, "%R", &tm_date);
+      gtk_entry_set_text (GTK_ENTRY (priv->start_time_entry),
+                          buffer);
     }
 
   /* end date */
+  date = gcal_manager_get_event_end_date (priv->manager,
+                                          priv->source_uid,
+                                          priv->event_uid);
+  tm_date = icaltimetype_to_tm (date);
+  e_utf8_strftime_fix_am_pm (buffer, 64, "%x", &tm_date);
+  gtk_entry_set_text (GTK_ENTRY (priv->end_date_entry),
+                      buffer);
+
+  g_free (date);
 
   /* end time */
   if (all_day)
     {
-      /* FIXME: set time to 00:00 */
+      gtk_entry_set_text (GTK_ENTRY (priv->end_time_entry),
+                          "00:00");
+    }
+  else
+    {
+      e_utf8_strftime_fix_am_pm (buffer, 64, "%R", &tm_date);
+      gtk_entry_set_text (GTK_ENTRY (priv->end_time_entry),
+                          buffer);
     }
 
   /* location */
@@ -484,8 +596,6 @@ gcal_edit_dialog_set_manager (GcalEditDialog *dialog,
   priv->manager = manager;
 
   /* Loading calendars */
-
-
   sources_model = gcal_manager_get_sources_model (priv->manager);
   valid = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (sources_model),
                                          &iter);
diff --git a/src/gcal-manager.c b/src/gcal-manager.c
index 74b3ef4..99d100a 100644
--- a/src/gcal-manager.c
+++ b/src/gcal-manager.c
@@ -1160,6 +1160,32 @@ gcal_manager_get_event_start_date (GcalManager *manager,
   return dtstart;
 }
 
+icaltimetype*
+gcal_manager_get_event_end_date (GcalManager *manager,
+                                 const gchar *source_uid,
+                                 const gchar *event_uid)
+{
+  GcalManagerPrivate *priv;
+  GcalManagerUnit *unit;
+  ECalComponent *event;
+  ECalComponentDateTime dt;
+  icaltimetype *dtend;
+
+  g_return_val_if_fail (GCAL_IS_MANAGER (manager), NULL);
+  priv = manager->priv;
+
+  unit = g_hash_table_lookup (priv->clients, source_uid);
+  event = g_hash_table_lookup (unit->events, event_uid);
+  e_cal_component_get_dtend (event, &dt);
+  dtend = gcal_dup_icaltime (dt.value);
+
+  if (dtend->is_date != 1)
+    *dtend = icaltime_convert_to_zone (*(dt.value), priv->system_timezone);
+
+  e_cal_component_free_datetime (&dt);
+  return dtend;
+}
+
 gchar*
 gcal_manager_get_event_summary (GcalManager *manager,
                                 const gchar *source_uid,
diff --git a/src/gcal-manager.h b/src/gcal-manager.h
index f536e4b..2015fe6 100644
--- a/src/gcal-manager.h
+++ b/src/gcal-manager.h
@@ -88,6 +88,10 @@ icaltimetype*  gcal_manager_get_event_start_date    (GcalManager        *manager
                                                      const gchar        *source_uid,
                                                      const gchar        *event_uid);
 
+icaltimetype*  gcal_manager_get_event_end_date      (GcalManager        *manager,
+                                                     const gchar        *source_uid,
+                                                     const gchar        *event_uid);
+
 gchar*         gcal_manager_get_event_summary       (GcalManager        *manager,
                                                      const gchar        *source_uid,
                                                      const gchar        *event_uid);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]