[gnome-calendar] Reworked details view of an event.
- From: Erick PÃrez Castellanos <erickpc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-calendar] Reworked details view of an event.
- Date: Thu, 23 Aug 2012 13:46:01 +0000 (UTC)
commit 7581e8bad085f5ba349f1dfc0bcd147735e1a112
Author: Erick PÃrez Castellanos <erick red gmail com>
Date: Thu Aug 23 00:23:02 2012 -0400
Reworked details view of an event.
Removed editable-widgets.
Added GcalEditDialog
Reworked delete-event trigger
Moved method from GcalEventOverlay to utils to use it on GcalEditDialog
src/Makefile.am | 16 +--
src/gcal-edit-dialog.c | 530 ++++++++++++++++++++++++++++++++++++++++++
src/gcal-edit-dialog.h | 69 ++++++
src/gcal-editable-combo.c | 242 -------------------
src/gcal-editable-combo.h | 64 -----
src/gcal-editable-date.c | 275 ----------------------
src/gcal-editable-date.h | 61 -----
src/gcal-editable-entry.c | 202 ----------------
src/gcal-editable-entry.h | 62 -----
src/gcal-editable-reminder.c | 465 ------------------------------------
src/gcal-editable-reminder.h | 61 -----
src/gcal-editable-text.c | 190 ---------------
src/gcal-editable-text.h | 61 -----
src/gcal-editable.c | 190 ---------------
src/gcal-editable.h | 80 -------
src/gcal-event-overlay.c | 33 +---
src/gcal-event-view.c | 493 ---------------------------------------
src/gcal-event-view.h | 70 ------
src/gcal-utils.c | 27 +++
src/gcal-utils.h | 2 +
src/gcal-window.c | 159 +++++--------
21 files changed, 689 insertions(+), 2663 deletions(-)
---
diff --git a/src/Makefile.am b/src/Makefile.am
index b9a7886..d4cc577 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -41,22 +41,10 @@ gnome_calendar_SOURCES = \
gcal-week-view.h \
gcal-event-widget.c \
gcal-event-widget.h \
- gcal-event-view.c \
- gcal-event-view.h \
gcal-event-overlay.c \
gcal-event-overlay.h \
- gcal-editable.c \
- gcal-editable.h \
- gcal-editable-entry.c \
- gcal-editable-entry.h \
- gcal-editable-text.c \
- gcal-editable-text.h \
- gcal-editable-date.c \
- gcal-editable-date.h \
- gcal-editable-combo.c \
- gcal-editable-combo.h \
- gcal-editable-reminder.c \
- gcal-editable-reminder.h \
+ gcal-edit-dialog.c \
+ gcal-edit-dialog.h \
gcal-manager.c \
gcal-manager.h \
gcal-utils.c \
diff --git a/src/gcal-edit-dialog.c b/src/gcal-edit-dialog.c
new file mode 100644
index 0000000..6fdfd7f
--- /dev/null
+++ b/src/gcal-edit-dialog.c
@@ -0,0 +1,530 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 2 -*- */
+/*
+ * gcal-ediat-dialog.c
+ * Copyright (C) 2012 Erick PÃrez Castellanos <erickpc gnome org>
+ *
+ * gnome-calendar 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 3 of the License, or
+ * (at your option) any later version.
+ *
+ * gnome-calendar 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "gcal-edit-dialog.h"
+#include "gcal-utils.h"
+
+#include <glib/gi18n.h>
+
+struct _GcalEditDialogPrivate
+{
+ gchar *source_uid;
+ gchar *event_uid;
+
+ GcalManager *manager;
+ GtkTreeIter *active_iter;
+
+ GtkWidget *summary_entry;
+ GtkWidget *calendar_button;
+ GtkWidget *start_date_entry;
+ GtkWidget *end_date_entry;
+ GtkWidget *all_day_check;
+ GtkWidget *start_time_entry;
+ GtkWidget *end_time_entry;
+ GtkWidget *location_entry;
+ GtkWidget *notes_text;
+};
+
+static void gcal_edit_dialog_constructed (GObject *object);
+
+static void gcal_edit_dialog_finalize (GObject *object);
+
+static void gcal_edit_dialog_calendar_selected (GtkWidget *menu_item,
+ gpointer user_data);
+
+static void gcal_edit_dialog_set_writable (GcalEditDialog *dialog,
+ gboolean writable);
+
+static void gcal_edit_dialog_clear_data (GcalEditDialog *dialog);
+
+static void gcal_edit_dialog_action_button_clicked (GtkWidget *widget,
+ gpointer user_data);
+
+G_DEFINE_TYPE(GcalEditDialog, gcal_edit_dialog, GTK_TYPE_DIALOG)
+
+static void
+gcal_edit_dialog_class_init (GcalEditDialogClass *klass)
+{
+ GObjectClass *object_class;
+
+ object_class = G_OBJECT_CLASS (klass);
+ object_class->constructed = gcal_edit_dialog_constructed;
+ object_class->finalize = gcal_edit_dialog_finalize;
+
+ g_type_class_add_private ((gpointer)klass, sizeof(GcalEditDialogPrivate));
+}
+
+static void
+gcal_edit_dialog_init (GcalEditDialog *self)
+{
+ GcalEditDialogPrivate *priv;
+
+ self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
+ GCAL_TYPE_EDIT_DIALOG,
+ GcalEditDialogPrivate);
+ priv = self->priv;
+
+ priv->source_uid = NULL;
+ priv->event_uid = NULL;
+}
+
+static void
+gcal_edit_dialog_constructed (GObject* object)
+{
+ GcalEditDialogPrivate *priv;
+ GtkWidget *content_area;
+ GtkWidget *grid;
+ GtkWidget *child;
+ GtkWidget *action_area;
+ GtkWidget *button;
+
+ priv = GCAL_EDIT_DIALOG (object)->priv;
+
+ /* chaining up */
+ G_OBJECT_CLASS (gcal_edit_dialog_parent_class)->constructed (object);
+
+ gtk_window_set_title (GTK_WINDOW (object), _("Edit Event"));
+ gtk_window_set_modal (GTK_WINDOW (object), TRUE);
+ gtk_window_set_destroy_with_parent (GTK_WINDOW (object), TRUE);
+ gtk_window_set_resizable (GTK_WINDOW (object), FALSE);
+
+ gtk_container_set_border_width (GTK_CONTAINER (object), 6);
+
+ content_area = gtk_dialog_get_content_area (GTK_DIALOG (object));
+
+ /* edit area, grid */
+ grid = gtk_grid_new ();
+ g_object_set (grid,
+ "row-spacing", 12,
+ "column-spacing", 12,
+ "border-width", 6,
+ NULL);
+
+ /* Summary, title */
+ child = gtk_label_new (_("Title"));
+ gtk_widget_set_halign (child, GTK_ALIGN_END);
+ gtk_grid_attach (GTK_GRID (grid), child, 0, 0, 1, 1);
+
+ priv->summary_entry = gtk_entry_new ();
+ gtk_widget_set_hexpand (priv->summary_entry, TRUE);
+ gtk_grid_attach (GTK_GRID (grid), priv->summary_entry, 1, 0, 1, 1);
+
+ /* Calendar, source */
+ priv->calendar_button = gtk_menu_button_new ();
+ child = gtk_image_new_from_icon_name ("x-office-calendar-symbolic",
+ GTK_ICON_SIZE_MENU);
+ g_object_set (priv->calendar_button,
+ "vexpand", TRUE,
+ "always-show-image", TRUE,
+ "image", child,
+ "menu", gtk_menu_new (),
+ NULL);
+ gtk_grid_attach (GTK_GRID (grid), priv->calendar_button, 2, 0, 1, 1);
+
+ /* Start date and time */
+ child = gtk_label_new (_("Starts"));
+ gtk_widget_set_halign (child, GTK_ALIGN_END);
+ gtk_grid_attach (GTK_GRID (grid), child, 0, 2, 1, 1);
+
+ child = gtk_grid_new ();
+ g_object_set (child,
+ "orientation", GTK_ORIENTATION_HORIZONTAL,
+ "column-spacing", 12,
+ 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");
+ gtk_container_add (GTK_CONTAINER (child), priv->start_date_entry);
+
+ priv->start_time_entry = gtk_entry_new ();
+ gtk_entry_set_icon_from_icon_name (GTK_ENTRY (priv->start_time_entry),
+ GTK_ENTRY_ICON_SECONDARY,
+ "preferences-system-time-symbolic");
+ gtk_container_add (GTK_CONTAINER (child), priv->start_time_entry);
+
+ priv->all_day_check = gtk_check_button_new_with_label (_("All day"));
+ gtk_container_add (GTK_CONTAINER (child), priv->all_day_check);
+ gtk_grid_attach (GTK_GRID (grid), child, 1, 2, 2, 1);
+
+ /* End date and time */
+ child = gtk_label_new (_("Ends"));
+ gtk_widget_set_halign (child, GTK_ALIGN_END);
+ gtk_grid_attach (GTK_GRID (grid), child, 0, 3, 1, 1);
+
+ child = gtk_grid_new ();
+ g_object_set (child,
+ "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");
+ gtk_container_add (GTK_CONTAINER (child), priv->end_date_entry);
+
+ priv->end_time_entry = gtk_entry_new ();
+ gtk_entry_set_icon_from_icon_name (GTK_ENTRY (priv->end_time_entry),
+ GTK_ENTRY_ICON_SECONDARY,
+ "preferences-system-time-symbolic");
+ gtk_container_add (GTK_CONTAINER (child), priv->end_time_entry);
+ gtk_grid_attach (GTK_GRID (grid), child, 1, 3, 2, 1);
+
+ /* Location, location, location */
+ child = gtk_label_new (_("Location"));
+ gtk_widget_set_halign (child, GTK_ALIGN_END);
+ gtk_grid_attach (GTK_GRID (grid), child, 0, 4, 1, 1);
+
+ priv->location_entry = gtk_entry_new ();
+ gtk_widget_set_hexpand (priv->location_entry, TRUE);
+ gtk_entry_set_icon_from_icon_name (GTK_ENTRY (priv->location_entry),
+ GTK_ENTRY_ICON_SECONDARY,
+ "find-location-symbolic");
+ gtk_grid_attach (GTK_GRID (grid), priv->location_entry, 1, 4, 2, 1);
+
+ /* Notes, description */
+ child = gtk_label_new (_("Notes"));
+ gtk_widget_set_halign (child, GTK_ALIGN_END);
+ gtk_grid_attach (GTK_GRID (grid), child, 0, 5, 1, 1);
+
+ child = gtk_frame_new (NULL);
+ priv->notes_text = gtk_text_view_new ();
+ gtk_container_add (GTK_CONTAINER (child), priv->notes_text);
+ gtk_widget_set_hexpand (child, TRUE);
+ gtk_widget_set_size_request (
+ gtk_bin_get_child (GTK_BIN (child)),
+ -1, 80);
+ gtk_grid_attach (GTK_GRID (grid), child, 1, 5, 2, 1);
+
+ gtk_container_add (GTK_CONTAINER (content_area), grid);
+ gtk_widget_show_all (content_area);
+
+ /* action area, buttons */
+ action_area = gtk_dialog_get_action_area (GTK_DIALOG (object));
+ gtk_box_set_spacing (GTK_BOX (action_area), 6);
+
+ button = gtk_button_new_from_stock (GTK_STOCK_CANCEL);
+ gtk_widget_set_can_default (button, TRUE);
+ g_object_set_data (G_OBJECT (button),
+ "response",
+ GINT_TO_POINTER (GTK_RESPONSE_CANCEL));
+ g_signal_connect (button,
+ "clicked",
+ G_CALLBACK (gcal_edit_dialog_action_button_clicked),
+ object);
+ gtk_box_pack_end (GTK_BOX (action_area), button, FALSE, TRUE, 0);
+ gtk_button_box_set_child_secondary (GTK_BUTTON_BOX (action_area),
+ button,
+ TRUE);
+
+ button = gtk_button_new ();
+ gtk_container_add (
+ GTK_CONTAINER (button),
+ gtk_image_new_from_icon_name ("user-trash-symbolic",
+ GTK_ICON_SIZE_MENU));
+ gtk_widget_set_can_default (button, TRUE);
+ g_object_set_data (G_OBJECT (button),
+ "response",
+ GINT_TO_POINTER (GCAL_RESPONSE_DELETE_EVENT));
+ g_signal_connect (button,
+ "clicked",
+ G_CALLBACK (gcal_edit_dialog_action_button_clicked),
+ object);
+ gtk_box_pack_end (GTK_BOX (action_area), button, TRUE, TRUE, 0);
+ gtk_button_box_set_child_non_homogeneous (GTK_BUTTON_BOX (action_area),
+ button,
+ TRUE);
+
+ /* done button */
+ button = gtk_button_new_with_label (_("Done"));
+ gtk_widget_set_can_default (button, TRUE);
+ g_object_set_data (G_OBJECT (button),
+ "response",
+ GINT_TO_POINTER (GTK_RESPONSE_ACCEPT));
+ g_signal_connect (button,
+ "clicked",
+ G_CALLBACK (gcal_edit_dialog_action_button_clicked),
+ object);
+ gtk_style_context_add_class (
+ gtk_widget_get_style_context (button),
+ "suggested-action");
+ gtk_box_pack_end (GTK_BOX (action_area), button, TRUE, TRUE, 0);
+
+ gtk_widget_show_all (action_area);
+
+ /* signals handlers */
+}
+
+static void
+gcal_edit_dialog_finalize (GObject *object)
+{
+ GcalEditDialogPrivate *priv;
+
+ priv = GCAL_EDIT_DIALOG (object)->priv;
+
+ if (priv->source_uid != NULL)
+ g_free (priv->source_uid);
+
+ if (priv->event_uid != NULL)
+ g_free (priv->event_uid);
+
+ G_OBJECT_CLASS (gcal_edit_dialog_parent_class)->finalize (object);
+}
+
+static void
+gcal_edit_dialog_calendar_selected (GtkWidget *menu_item,
+ gpointer user_data)
+{
+ GcalEditDialogPrivate *priv;
+
+ GtkListStore *sources_model;
+ GtkTreeIter *iter;
+ GdkColor *color;
+
+ GdkPixbuf *pix;
+ GtkWidget *cal_image;
+
+ priv = GCAL_EDIT_DIALOG (user_data)->priv;
+ iter = g_object_get_data (G_OBJECT (menu_item), "sources-iter");
+
+ sources_model = gcal_manager_get_sources_model (priv->manager);
+ gtk_tree_model_get (GTK_TREE_MODEL (sources_model), iter,
+ 3, &color,
+ -1);
+
+ 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_object_unref (pix);
+}
+
+static void
+gcal_edit_dialog_set_writable (GcalEditDialog *dialog,
+ gboolean writable)
+{
+ GcalEditDialogPrivate *priv;
+
+ priv = dialog->priv;
+
+ gtk_widget_set_sensitive (priv->summary_entry, writable);
+ gtk_widget_set_sensitive (priv->calendar_button, writable);
+ gtk_widget_set_sensitive (priv->start_date_entry, writable);
+ gtk_widget_set_sensitive (priv->start_time_entry, writable);
+ gtk_widget_set_sensitive (priv->all_day_check, writable);
+ gtk_widget_set_sensitive (priv->end_date_entry, writable);
+ gtk_widget_set_sensitive (priv->end_time_entry, writable);
+ gtk_widget_set_sensitive (priv->location_entry, writable);
+ gtk_widget_set_sensitive (priv->notes_text, writable);
+}
+
+static void
+gcal_edit_dialog_clear_data (GcalEditDialog *dialog)
+{
+ GcalEditDialogPrivate *priv;
+
+ priv = dialog->priv;
+
+ /* FIXME: add clear for the rest of the fields when I define loading code for
+ * those below */
+ gtk_entry_set_text (GTK_ENTRY (priv->summary_entry), "");
+ gtk_entry_set_text (GTK_ENTRY (priv->location_entry), "");
+
+ gtk_text_buffer_set_text (
+ gtk_text_view_get_buffer (GTK_TEXT_VIEW (priv->notes_text)),
+ "",
+ -1);
+}
+
+static void
+gcal_edit_dialog_action_button_clicked (GtkWidget *widget,
+ gpointer user_data)
+{
+ gint response;
+
+ response = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (widget),
+ "response"));
+
+ gtk_dialog_response (GTK_DIALOG (user_data), response);
+}
+
+/* Public API */
+GtkWidget*
+gcal_edit_dialog_new (void)
+{
+ return g_object_new (GCAL_TYPE_EDIT_DIALOG, NULL);
+}
+
+void
+gcal_edit_dialog_set_event (GcalEditDialog *dialog,
+ const gchar *source_uid,
+ const gchar *event_uid)
+{
+ GcalEditDialogPrivate *priv;
+
+ gchar *text;
+ const gchar *const_text;
+ gboolean all_day;
+
+ priv = dialog->priv;
+ all_day = FALSE;
+
+ if (priv->source_uid != NULL)
+ g_free (priv->source_uid);
+ priv->source_uid = g_strdup (source_uid);
+
+ if (priv->event_uid != NULL)
+ g_free (priv->event_uid);
+ priv->event_uid = g_strdup (event_uid);
+
+ /* Load event data */
+ gcal_edit_dialog_clear_data (dialog);
+
+ /* summary */
+ text = gcal_manager_get_event_summary (priv->manager,
+ priv->source_uid,
+ priv->event_uid);
+ gtk_entry_set_text (GTK_ENTRY (priv->summary_entry),
+ text != NULL ? text : "");
+ g_free (text);
+
+ /* start date */
+
+ /* all_day */
+ all_day = gcal_manager_get_event_all_day (priv->manager,
+ priv->source_uid,
+ priv->event_uid);
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->all_day_check),
+ all_day);
+
+ /* start time */
+ if (all_day)
+ {
+ /* FIXME: set time to 00:00 */
+ }
+
+ /* end date */
+
+ /* end time */
+ if (all_day)
+ {
+ /* FIXME: set time to 00:00 */
+ }
+
+ /* location */
+ const_text = gcal_manager_get_event_location (priv->manager,
+ priv->source_uid,
+ priv->event_uid);
+ gtk_entry_set_text (GTK_ENTRY (priv->location_entry),
+ const_text != NULL ? const_text : "");
+
+ /* notes */
+ text = gcal_manager_get_event_description (priv->manager,
+ priv->source_uid,
+ priv->event_uid);
+ gtk_text_buffer_set_text (
+ gtk_text_view_get_buffer (GTK_TEXT_VIEW (priv->notes_text)),
+ text != NULL ? text : "",
+ -1);
+ g_free (text);
+
+ /* FIXME: this is for now, I will have to ask GcalManager */
+ gcal_edit_dialog_set_writable (dialog, FALSE);
+}
+
+void
+gcal_edit_dialog_set_manager (GcalEditDialog *dialog,
+ GcalManager *manager)
+{
+ GcalEditDialogPrivate *priv;
+
+ GtkMenu *menu;
+ GtkWidget *item;
+ GList *children;
+ GtkListStore *sources_model;
+ gboolean valid;
+ GtkTreeIter iter;
+
+ g_return_if_fail (GCAL_IS_MANAGER (manager));
+ priv = dialog->priv;
+
+ 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);
+ if (! valid)
+ return;
+
+ menu = gtk_menu_button_get_popup (GTK_MENU_BUTTON (priv->calendar_button));
+ children = gtk_container_get_children (GTK_CONTAINER (menu));
+ g_list_foreach (children, (GFunc) gtk_widget_destroy, NULL);
+
+ while (valid)
+ {
+ /* Walk through the list, reading each row */
+ gchar *name;
+ GdkColor *color;
+ GtkWidget *cal_image;
+ GdkPixbuf *pix;
+
+ gtk_tree_model_get (GTK_TREE_MODEL (sources_model), &iter,
+ 1, &name,
+ 3, &color,
+ -1);
+
+ item = gtk_image_menu_item_new ();
+ g_object_set_data_full (G_OBJECT (item),
+ "sources-iter",
+ gtk_tree_iter_copy (&iter),
+ (GDestroyNotify) gtk_tree_iter_free);
+ g_signal_connect (item,
+ "activate",
+ G_CALLBACK (gcal_edit_dialog_calendar_selected),
+ dialog);
+
+ pix = gcal_get_pixbuf_from_color (color);
+
+ cal_image = gtk_image_new_from_pixbuf (pix);
+ g_object_set (item,
+ "always-show-image", TRUE,
+ "image", cal_image,
+ "label", name,
+ NULL);
+
+ gtk_container_add (GTK_CONTAINER (menu), item);
+
+ g_object_unref (pix);
+ g_free (name);
+ gdk_color_free (color);
+
+ valid = gtk_tree_model_iter_next (GTK_TREE_MODEL (sources_model),
+ &iter);
+ }
+
+ gtk_widget_show_all (GTK_WIDGET (menu));
+}
diff --git a/src/gcal-edit-dialog.h b/src/gcal-edit-dialog.h
new file mode 100644
index 0000000..63dd28d
--- /dev/null
+++ b/src/gcal-edit-dialog.h
@@ -0,0 +1,69 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 2 -*- */
+/*
+ * gcal-edit-dialog.h
+ * Copyright (C) 2012 Erick PÃrez Castellanos <erickpc gnome org>
+ *
+ * gnome-calendar 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 3 of the License, or
+ * (at your option) any later version.
+ *
+ * gnome-calendar 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef __GCAL_EDIT_DIALOG_H__
+#define __GCAL_EDIT_DIALOG_H__
+
+#include "gcal-manager.h"
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+#define GCAL_RESPONSE_DELETE_EVENT 2
+
+
+#define GCAL_TYPE_EDIT_DIALOG (gcal_edit_dialog_get_type ())
+#define GCAL_EDIT_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GCAL_TYPE_EDIT_DIALOG, GcalEditDialog))
+#define GCAL_EDIT_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GCAL_TYPE_EDIT_DIALOG, GcalEditDialogClass))
+#define GCAL_IS_EDIT_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GCAL_TYPE_EDIT_DIALOG))
+#define GCAL_IS_EDIT_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), GCAL_TYPE_EDIT_DIALOG))
+#define GCAL_EDIT_DIALOG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GCAL_TYPE_EDIT_DIALOG, GcalEditDialogClass))
+
+typedef struct _GcalEditDialog GcalEditDialog;
+typedef struct _GcalEditDialogClass GcalEditDialogClass;
+typedef struct _GcalEditDialogPrivate GcalEditDialogPrivate;
+
+struct _GcalEditDialog
+{
+ GtkDialog parent;
+
+ GcalEditDialogPrivate *priv;
+};
+
+struct _GcalEditDialogClass
+{
+ GtkDialogClass parent_class;
+};
+
+
+GType gcal_edit_dialog_get_type (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_manager (GcalEditDialog *dialog,
+ GcalManager *manager);
+
+G_END_DECLS
+
+#endif /* __GCAL_EDIT_DIALOG_H__ */
diff --git a/src/gcal-event-overlay.c b/src/gcal-event-overlay.c
index 86bf360..51bf200 100644
--- a/src/gcal-event-overlay.c
+++ b/src/gcal-event-overlay.c
@@ -67,8 +67,6 @@ static void gcal_event_overlay_close_button_clicked (GtkWidget *
static void gcal_event_overlay_calendar_selected (GtkWidget *menu_item,
gpointer user_data);
-static GdkPixbuf* gcal_event_overlay_get_pixbuf_for_color (GdkColor *color);
-
G_DEFINE_TYPE(GcalEventOverlay, gcal_event_overlay, GTK_CLUTTER_TYPE_ACTOR)
static void
@@ -294,7 +292,7 @@ gcal_event_overlay_set_calendars_menu (GcalEventOverlay *widget)
G_CALLBACK (gcal_event_overlay_calendar_selected),
widget);
- pix = gcal_event_overlay_get_pixbuf_for_color (color);
+ pix = gcal_get_pixbuf_from_color (color);
cal_image = gtk_image_new_from_pixbuf (pix);
g_object_set (item,
@@ -409,7 +407,7 @@ gcal_event_overlay_calendar_selected (GtkWidget *menu_item,
gtk_tree_iter_free (priv->active_iter);
priv->active_iter = gtk_tree_iter_copy (iter);
- pix = gcal_event_overlay_get_pixbuf_for_color (color);
+ 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);
@@ -417,33 +415,6 @@ gcal_event_overlay_calendar_selected (GtkWidget *menu_item,
g_object_unref (pix);
}
-static GdkPixbuf*
-gcal_event_overlay_get_pixbuf_for_color (GdkColor *color)
-{
- cairo_surface_t *surface;
- cairo_t *cr;
- gint width, height;
- GdkPixbuf *pix;
-
- /* TODO: review size here, maybe not hardcoded */
- width = height = 10;
- surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, width, height);
- cr = cairo_create (surface);
-
- cairo_set_source_rgb (cr,
- color->red / 65535.0,
- color->green / 65535.0,
- color->blue / 65535.0);
- cairo_rectangle (cr, 0, 0, width, height);
- cairo_fill (cr);
- cairo_destroy (cr);
- pix = gdk_pixbuf_get_from_surface (surface,
- 0, 0,
- width, height);
- cairo_surface_destroy (surface);
- return pix;
-}
-
/* Public API */
ClutterActor*
diff --git a/src/gcal-utils.c b/src/gcal-utils.c
index 151d916..189be6b 100644
--- a/src/gcal-utils.c
+++ b/src/gcal-utils.c
@@ -204,6 +204,33 @@ gcal_get_weekday (gint i)
return _(weekdays[i]);
}
+GdkPixbuf*
+gcal_get_pixbuf_from_color (GdkColor *color)
+{
+ cairo_surface_t *surface;
+ cairo_t *cr;
+ gint width, height;
+ GdkPixbuf *pix;
+
+ /* TODO: review size here, maybe not hardcoded */
+ width = height = 10;
+ surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, width, height);
+ cr = cairo_create (surface);
+
+ cairo_set_source_rgb (cr,
+ color->red / 65535.0,
+ color->green / 65535.0,
+ color->blue / 65535.0);
+ cairo_rectangle (cr, 0, 0, width, height);
+ cairo_fill (cr);
+ cairo_destroy (cr);
+ pix = gdk_pixbuf_get_from_surface (surface,
+ 0, 0,
+ width, height);
+ cairo_surface_destroy (surface);
+ return pix;
+}
+
/* Function to do a last minute fixup of the AM/PM stuff if the locale
* and gettext haven't done it right. Most English speaking countries
* except the USA use the 24 hour clock (UK, Australia etc). However
diff --git a/src/gcal-utils.h b/src/gcal-utils.h
index 12b8df7..05e1fd9 100644
--- a/src/gcal-utils.h
+++ b/src/gcal-utils.h
@@ -67,6 +67,8 @@ gchar* gcal_get_source_uid (GtkTreeModel
const gchar* gcal_get_weekday (gint i);
+GdkPixbuf* gcal_get_pixbuf_from_color (GdkColor *color);
+
/* code brought from evolution */
gsize e_strftime_fix_am_pm (gchar *str,
gsize max,
diff --git a/src/gcal-window.c b/src/gcal-window.c
index edff73d..5825fcc 100644
--- a/src/gcal-window.c
+++ b/src/gcal-window.c
@@ -25,7 +25,7 @@
#include "gcal-week-view.h"
#include "gcal-view.h"
#include "gcal-event-widget.h"
-#include "gcal-event-view.h"
+#include "gcal-edit-dialog.h"
#include "gcal-enum-types.h"
#include "gtk-notification.h"
#include "gcal-event-overlay.h"
@@ -121,10 +121,6 @@ static void gcal_window_events_removed (GcalManager *m
static void gcal_window_event_activated (GcalEventWidget *event_widget,
gpointer user_data);
-static void gcal_window_will_remove_event (GcalEventView *view,
- gchar *event_uuid,
- gpointer user_data);
-
static void gcal_window_remove_event (GtkNotification *notification,
gpointer user_data);
@@ -628,43 +624,13 @@ static void
gcal_window_init_edit_dialog (GcalWindow *window)
{
GcalWindowPrivate *priv;
- GcalManager *manager;
-
- GtkWidget *content_area;
- GtkWidget *action_area;
g_return_if_fail (GCAL_IS_WINDOW (window));
priv = window->priv;
- priv->edit_dialog = gtk_dialog_new ();
- gtk_window_set_title (GTK_WINDOW (priv->edit_dialog), _("Edit Event"));
- gtk_window_set_modal (GTK_WINDOW (priv->edit_dialog), TRUE);
- gtk_window_set_destroy_with_parent (GTK_WINDOW (priv->edit_dialog), TRUE);
- gtk_window_set_resizable (GTK_WINDOW (priv->edit_dialog), FALSE);
-
- content_area = gtk_dialog_get_content_area (GTK_DIALOG (priv->edit_dialog));
- manager = gcal_window_get_manager (window);
-
- priv->edit_widget = gcal_event_view_new_with_manager (manager);
- gtk_container_add (GTK_CONTAINER (content_area),
- priv->edit_widget);
-
- gtk_widget_show_all (content_area);
-
- gtk_dialog_add_button (GTK_DIALOG (priv->edit_dialog),
- GTK_STOCK_CANCEL,
- GTK_RESPONSE_REJECT);
- gtk_dialog_add_button (GTK_DIALOG (priv->edit_dialog),
- _("Done"),
- GTK_RESPONSE_ACCEPT);
- action_area = gtk_dialog_get_action_area (GTK_DIALOG (priv->edit_dialog));
- gtk_button_box_set_layout (GTK_BUTTON_BOX (action_area), GTK_BUTTONBOX_EDGE);
- gtk_widget_show_all (action_area);
- /* FIXME: hook delete signal
- g_signal_connect (priv->add_view,
- "will-delete",
- G_CALLBACK (gcal_window_will_remove_event),
- window);*/
+ priv->edit_dialog = gcal_edit_dialog_new ();
+ gcal_edit_dialog_set_manager (GCAL_EDIT_DIALOG (priv->edit_dialog),
+ gcal_window_get_manager (window));
}
static void
@@ -892,6 +858,12 @@ gcal_window_event_activated (GcalEventWidget *event_widget,
gpointer user_data)
{
GcalWindowPrivate *priv;
+ gchar **tokens;
+ gint response;
+
+ GtkWidget *noty;
+ GtkWidget *grid;
+ GtkWidget *undo_button;
g_return_if_fail (GCAL_IS_WINDOW (user_data));
priv = GCAL_WINDOW (user_data)->priv;
@@ -899,73 +871,58 @@ gcal_window_event_activated (GcalEventWidget *event_widget,
if (priv->edit_dialog == NULL)
gcal_window_init_edit_dialog (GCAL_WINDOW (user_data));
- gcal_event_view_load_event (GCAL_EVENT_VIEW (priv->edit_widget),
- gcal_event_widget_peek_uuid (event_widget));
+ tokens = g_strsplit (gcal_event_widget_peek_uuid (event_widget), ":", -1);
+ gcal_edit_dialog_set_event (GCAL_EDIT_DIALOG (priv->edit_dialog),
+ tokens[0],
+ tokens[1]);
+ g_strfreev (tokens);
- gtk_dialog_run (GTK_DIALOG (priv->edit_dialog));
+ response = gtk_dialog_run (GTK_DIALOG (priv->edit_dialog));
gtk_widget_hide (priv->edit_dialog);
-}
-
-static void
-gcal_window_will_remove_event (GcalEventView *view,
- gchar *event_uuid,
- gpointer user_data)
-{
- GcalWindowPrivate *priv;
- gint activated_page;
- GtkWidget *noty;
- GtkWidget *grid;
- GtkWidget *undo_button;
-
- GtkWidget *event_widget;
-
- priv = GCAL_WINDOW (user_data)->priv;
-
- gcal_toolbar_set_mode (GCAL_TOOLBAR (priv->main_toolbar),
- GCAL_TOOLBAR_OVERVIEW);
-
- if ((activated_page = gtk_notebook_page_num (GTK_NOTEBOOK (priv->notebook),
- priv->views[priv->active_view]))
- != -1)
- {
- gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->notebook),
- activated_page);
- }
- else
+ switch (response)
{
- /* FIXME: there's something that needs to be done here. */
- g_warning ("Your app has gone crazy");
+ case GTK_RESPONSE_CANCEL:
+ /* do nothing, nor edit, nor nothing */
+ break;
+ case GTK_RESPONSE_ACCEPT:
+ /* save changes if editable */
+ break;
+ case GCAL_RESPONSE_DELETE_EVENT:
+ /* delete the event */
+ noty = gtk_notification_new ();
+ grid = gtk_grid_new ();
+ gtk_grid_set_column_spacing (GTK_GRID (grid), 12);
+ gtk_container_add (GTK_CONTAINER (grid),
+ gtk_label_new (_("Event deleted")));
+
+ undo_button = gtk_button_new_from_stock (GTK_STOCK_UNDO);
+ gtk_container_add (GTK_CONTAINER (grid), undo_button);
+
+ gtk_container_add (GTK_CONTAINER (noty), grid);
+ gtk_widget_show_all (noty);
+ gcal_window_show_notification (GCAL_WINDOW (user_data), noty);
+
+ g_signal_connect (noty,
+ "dismissed",
+ G_CALLBACK (gcal_window_remove_event),
+ user_data);
+ g_signal_connect (undo_button,
+ "clicked",
+ G_CALLBACK (gcal_window_undo_remove_event),
+ user_data);
+
+ priv->event_to_delete =
+ g_strdup (gcal_event_widget_peek_uuid (event_widget));
+
+ /* hide widget of the event */
+ gtk_widget_hide (GTK_WIDGET (event_widget));
+ break;
+
+ default:
+ /* do nothing */
+ break;
}
-
- noty = gtk_notification_new ();
- grid = gtk_grid_new ();
- gtk_grid_set_column_spacing (GTK_GRID (grid), 12);
- gtk_container_add (GTK_CONTAINER (grid), gtk_label_new (_("Event deleted")));
-
- undo_button = gtk_button_new_from_stock (GTK_STOCK_UNDO);
- gtk_container_add (GTK_CONTAINER (grid), undo_button);
-
- gtk_container_add (GTK_CONTAINER (noty), grid);
- gtk_widget_show_all (noty);
- gcal_window_show_notification (GCAL_WINDOW (user_data), noty);
-
- g_signal_connect (noty,
- "dismissed",
- G_CALLBACK (gcal_window_remove_event),
- user_data);
- g_signal_connect (undo_button,
- "clicked",
- G_CALLBACK (gcal_window_undo_remove_event),
- user_data);
-
- priv->event_to_delete = g_strdup (event_uuid);
-
- /* hide widget of the event */
- event_widget =
- gcal_view_get_by_uuid (GCAL_VIEW (priv->views[priv->active_view]),
- priv->event_to_delete);
- gtk_widget_hide (event_widget);
}
static void
@@ -1134,13 +1091,11 @@ gcal_window_create_event (GcalEventOverlay *widget,
new_data->start_date,
new_data->end_date);
- g_debug ("NOW CREATE THE EVENT");
if (open_details)
g_debug ("Opening details window NOW");
/* reset and hide */
gcal_window_event_overlay_closed (widget, user_data);
-
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]