[gnome-calendar] Added start-date change handling.
- From: Erick PÃrez Castellanos <erickpc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-calendar] Added start-date change handling.
- Date: Sat, 1 Dec 2012 20:32:24 +0000 (UTC)
commit 69871884f9adaf52c9c72a018436949ae46abc5a
Author: Erick PÃrez Castellanos <erick red gmail com>
Date: Tue Oct 16 16:27:11 2012 -0400
Added start-date change handling.
Missing: moving end_date accordingly.
src/gcal-edit-dialog.c | 165 ++++++++++++++++++++++++++++++++++++++++++------
src/gcal-edit-dialog.h | 30 +++++----
src/gcal-utils.h | 1 +
src/gcal-window.c | 22 +++----
4 files changed, 171 insertions(+), 47 deletions(-)
---
diff --git a/src/gcal-edit-dialog.c b/src/gcal-edit-dialog.c
index 44022e8..d3c3392 100644
--- a/src/gcal-edit-dialog.c
+++ b/src/gcal-edit-dialog.c
@@ -19,12 +19,14 @@
#include "gcal-edit-dialog.h"
#include "gcal-time-entry.h"
+#include "gcal-date-entry.h"
#include "gcal-utils.h"
#include <libecal/libecal.h>
#include <glib/gi18n.h>
typedef struct _SimpleTime SimpleTime;
+typedef struct _SimpleDate SimpleDate;
typedef struct _SimpleEventStore SimpleEventStore;
struct _SimpleTime
@@ -33,11 +35,20 @@ struct _SimpleTime
guint minute;
};
+struct _SimpleDate
+{
+ guint day;
+ guint month;
+ guint year;
+};
+
struct _SimpleEventStore
{
gchar *summary;
gboolean all_day;
+ SimpleDate *start_date;
+ SimpleDate *end_date;
SimpleTime *start_time;
SimpleTime *end_time;
@@ -96,6 +107,9 @@ static void gcal_edit_dialog_button_toggled (GtkToggleButton *bu
static void gcal_edit_dialog_all_day_changed (GtkWidget *widget,
gpointer user_data);
+static gboolean gcal_edit_dialog_date_changed (GcalEditDialog *dialog,
+ gboolean start_date);
+
G_DEFINE_TYPE(GcalEditDialog, gcal_edit_dialog, GTK_TYPE_DIALOG)
static void
@@ -199,10 +213,7 @@ gcal_edit_dialog_constructed (GObject* object)
"column-spacing", 12,
"column-homogeneous", FALSE,
NULL);
- priv->start_date_entry = gtk_entry_new ();
- gtk_entry_set_icon_from_icon_name (GTK_ENTRY (priv->start_date_entry),
- GTK_ENTRY_ICON_SECONDARY,
- "x-office-calendar-symbolic");
+ priv->start_date_entry = gcal_date_entry_new ();
gtk_container_add (GTK_CONTAINER (child), priv->start_date_entry);
priv->start_time_entry = gcal_time_entry_new ();
@@ -223,10 +234,7 @@ gcal_edit_dialog_constructed (GObject* object)
"orientation", GTK_ORIENTATION_HORIZONTAL,
"column-spacing", 12,
NULL);
- priv->end_date_entry = gtk_entry_new ();
- gtk_entry_set_icon_from_icon_name (GTK_ENTRY (priv->end_date_entry),
- GTK_ENTRY_ICON_SECONDARY,
- "x-office-calendar-symbolic");
+ priv->end_date_entry = gcal_date_entry_new ();
gtk_container_add (GTK_CONTAINER (child), priv->end_date_entry);
priv->end_time_entry = gcal_time_entry_new ();
@@ -355,6 +363,16 @@ gcal_edit_dialog_finalize (GObject *object)
if (priv->event_uid != NULL)
g_free (priv->event_uid);
+ if (priv->ev_store != NULL)
+ {
+ g_free (priv->ev_store->start_date);
+ g_free (priv->ev_store->end_date);
+ g_free (priv->ev_store->start_time);
+ g_free (priv->ev_store->end_time);
+
+ g_free (priv->ev_store);
+ }
+
if (priv->calendars_menu != NULL)
g_object_unref (priv->calendars_menu);
@@ -619,6 +637,59 @@ gcal_edit_dialog_all_day_changed (GtkWidget *widget,
}
}
+static gboolean
+gcal_edit_dialog_date_changed (GcalEditDialog *dialog,
+ gboolean start_date)
+{
+ GcalEditDialogPrivate *priv;
+ guint day;
+ guint month;
+ guint year;
+ guint hour;
+ guint minute;
+
+ GtkWidget *widget;
+ SimpleDate *date;
+ SimpleTime *time;
+ priv = dialog->priv;
+
+ if (start_date)
+ {
+ widget = priv->start_date_entry;
+ date = priv->ev_store->start_date;
+ time = priv->ev_store->start_time;
+ }
+ else
+ {
+ widget = priv->end_date_entry;
+ date = priv->ev_store->end_date;
+ time = priv->ev_store->end_time;
+ }
+
+ gcal_date_entry_get_date (GCAL_DATE_ENTRY (widget),
+ &day,
+ &month,
+ &year);
+ if (day != date->day ||
+ month != date->month ||
+ year != date->year)
+ {
+ return TRUE;
+ }
+
+ widget = start_date ? priv->start_time_entry : priv->end_time_entry;
+ gcal_time_entry_get_time (GCAL_TIME_ENTRY (widget),
+ &hour,
+ &minute);
+ if (hour != time->hour ||
+ minute != time->minute)
+ {
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
/* Public API */
GtkWidget*
gcal_edit_dialog_new (void)
@@ -644,8 +715,6 @@ gcal_edit_dialog_set_event (GcalEditDialog *dialog,
gboolean all_day;
icaltimetype *date;
- gchar buffer [64];
- struct tm tm_date;
priv = dialog->priv;
all_day = FALSE;
@@ -665,6 +734,8 @@ gcal_edit_dialog_set_event (GcalEditDialog *dialog,
{
priv->ev_store = g_new0 (SimpleEventStore, 1);
+ priv->ev_store->start_date = g_new0 (SimpleDate, 1);
+ priv->ev_store->end_date = g_new0 (SimpleDate, 1);
priv->ev_store->start_time = g_new0 (SimpleTime, 1);
priv->ev_store->end_time = g_new0 (SimpleTime, 1);
}
@@ -683,14 +754,16 @@ gcal_edit_dialog_set_event (GcalEditDialog *dialog,
gcal_edit_dialog_set_calendar_selected (dialog);
/* start date */
- /* FIXME: Add dates (start/end) to ev_store and edit-capabilities */
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);
+ gcal_date_entry_set_date (GCAL_DATE_ENTRY (priv->start_date_entry),
+ date->day,
+ date->month,
+ date->year);
+ priv->ev_store->start_date->day = date->day;
+ priv->ev_store->start_date->month = date->month;
+ priv->ev_store->start_date->year = date->year;
/* all_day */
priv->ev_store->all_day = gcal_manager_get_event_all_day (priv->manager,
@@ -719,10 +792,13 @@ gcal_edit_dialog_set_event (GcalEditDialog *dialog,
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);
+ gcal_date_entry_set_date (GCAL_DATE_ENTRY (priv->end_date_entry),
+ date->day,
+ date->month,
+ date->year);
+ priv->ev_store->end_date->day = date->day;
+ priv->ev_store->end_date->month = date->month;
+ priv->ev_store->end_date->year = date->year;
/* end time */
if (all_day)
@@ -893,6 +969,7 @@ GList*
gcal_edit_dialog_get_modified_properties (GcalEditDialog *dialog)
{
GcalEditDialogPrivate *priv;
+ gboolean date_changed;
gchar *desc;
GList *res;
@@ -910,12 +987,24 @@ gcal_edit_dialog_get_modified_properties (GcalEditDialog *dialog)
}
/* FIXME: add calendar and dates and times and all_day */
+ date_changed = gcal_edit_dialog_date_changed (dialog, TRUE);
+ if (date_changed)
+ {
+ res = g_list_append (res, GINT_TO_POINTER (EVENT_START_DATE));
+ }
+
+ date_changed = gcal_edit_dialog_date_changed (dialog, FALSE);
+ if (date_changed)
+ {
+ res = g_list_append (res, GINT_TO_POINTER (EVENT_END_DATE));
+ }
if (g_strcmp0 (priv->ev_store->location,
gtk_entry_get_text (GTK_ENTRY (priv->location_entry))) != 0)
{
res = g_list_append (res, GINT_TO_POINTER (EVENT_LOCATION));
}
+
/* getting desc */
desc = gcal_edit_dialog_get_event_description (dialog);
if (g_strcmp0 (priv->ev_store->description, desc) != 0)
@@ -963,3 +1052,41 @@ gcal_edit_dialog_get_event_description (GcalEditDialog *dialog)
desc = gtk_text_buffer_get_text (buffer, &start_iter, &end_iter, FALSE);
return desc;
}
+
+icaltimetype*
+gcal_edit_dialog_get_start_date (GcalEditDialog *dialog)
+{
+ GcalEditDialogPrivate *priv;
+ icaltimetype *date;
+
+ guint value1;
+ guint value2;
+ guint value3;
+
+ priv = dialog->priv;
+
+ date = g_new0 (icaltimetype, 1);
+
+ gcal_date_entry_get_date (GCAL_DATE_ENTRY (priv->start_date_entry),
+ &value1,
+ &value2,
+ &value3);
+ date->day = value1;
+ date->month = value2;
+ date->year = value3;
+
+ value1 = value2 = 0;
+ gcal_time_entry_get_time (GCAL_TIME_ENTRY (priv->start_time_entry),
+ &value1,
+ &value2);
+ date->hour = value1;
+ date->minute = value2;
+
+ if (date->hour == 0 &&
+ date->minute == 0)
+ {
+ date->is_date = 1;
+ }
+
+ return date;
+}
diff --git a/src/gcal-edit-dialog.h b/src/gcal-edit-dialog.h
index 78bbf43..90c73f4 100644
--- a/src/gcal-edit-dialog.h
+++ b/src/gcal-edit-dialog.h
@@ -53,30 +53,32 @@ struct _GcalEditDialogClass
};
-GType gcal_edit_dialog_get_type (void);
+GType gcal_edit_dialog_get_type (void);
-GtkWidget* gcal_edit_dialog_new (void);
+GtkWidget* gcal_edit_dialog_new (void);
-void gcal_edit_dialog_set_event (GcalEditDialog *dialog,
- const gchar *source_uid,
- const gchar *event_uid);
+void gcal_edit_dialog_set_event (GcalEditDialog *dialog,
+ const gchar *source_uid,
+ const gchar *event_uid);
-void gcal_edit_dialog_set_manager (GcalEditDialog *dialog,
- GcalManager *manager);
+void gcal_edit_dialog_set_manager (GcalEditDialog *dialog,
+ GcalManager *manager);
-const gchar* gcal_edit_dialog_peek_source_uid (GcalEditDialog *dialog);
+const gchar* gcal_edit_dialog_peek_source_uid (GcalEditDialog *dialog);
-const gchar* gcal_edit_dialog_peek_event_uid (GcalEditDialog *dialog);
+const gchar* gcal_edit_dialog_peek_event_uid (GcalEditDialog *dialog);
-gchar* gcal_edit_dialog_get_event_uuid (GcalEditDialog *dialog);
+gchar* gcal_edit_dialog_get_event_uuid (GcalEditDialog *dialog);
-GList* gcal_edit_dialog_get_modified_properties (GcalEditDialog *dialog);
+GList* gcal_edit_dialog_get_modified_properties (GcalEditDialog *dialog);
-const gchar* gcal_edit_dialog_peek_summary (GcalEditDialog *dialog);
+const gchar* gcal_edit_dialog_peek_summary (GcalEditDialog *dialog);
-const gchar* gcal_edit_dialog_peek_location (GcalEditDialog *dialog);
+const gchar* gcal_edit_dialog_peek_location (GcalEditDialog *dialog);
-gchar* gcal_edit_dialog_get_event_description (GcalEditDialog *dialog);
+gchar* gcal_edit_dialog_get_event_description (GcalEditDialog *dialog);
+
+icaltimetype* gcal_edit_dialog_get_start_date (GcalEditDialog *dialog);
G_END_DECLS
diff --git a/src/gcal-utils.h b/src/gcal-utils.h
index 2bfe8ae..02f6747 100644
--- a/src/gcal-utils.h
+++ b/src/gcal-utils.h
@@ -50,6 +50,7 @@ typedef enum
{
EVENT_SUMMARY = 0,
EVENT_START_DATE,
+ EVENT_END_DATE,
EVENT_LOCATION,
EVENT_DESCRIPTION,
} EventEditableProperty;
diff --git a/src/gcal-window.c b/src/gcal-window.c
index bbe1c48..2839d61 100644
--- a/src/gcal-window.c
+++ b/src/gcal-window.c
@@ -1322,23 +1322,17 @@ gcal_window_edit_dialog_responded (GtkDialog *dialog,
break;
case EVENT_START_DATE:
{
- icaltimetype *new_start_date;
+ icaltimetype *date;
+
+ date = gcal_edit_dialog_get_start_date (GCAL_EDIT_DIALOG (dialog));
g_debug ("Will change start_date");
- /* FIXME: will have to call gcal_edit_dialog_peek_start_date */
- /* FIXME: take into account all-day assumptions */
- new_start_date =
- gcal_manager_get_event_start_date (
- manager,
- gcal_edit_dialog_peek_source_uid (GCAL_EDIT_DIALOG (dialog)),
- gcal_edit_dialog_peek_event_uid (GCAL_EDIT_DIALOG (dialog)));
- icaltime_adjust (new_start_date, 1, 0, 0, 0);
gcal_manager_set_event_start_date (
- manager,
- gcal_edit_dialog_peek_source_uid (GCAL_EDIT_DIALOG (dialog)),
- gcal_edit_dialog_peek_event_uid (GCAL_EDIT_DIALOG (dialog)),
- new_start_date);
- g_free (new_start_date);
+ manager,
+ gcal_edit_dialog_peek_source_uid (GCAL_EDIT_DIALOG (dialog)),
+ gcal_edit_dialog_peek_event_uid (GCAL_EDIT_DIALOG (dialog)),
+ date);
+ g_free (date);
break;
}
case EVENT_LOCATION:
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]