aboutsummaryrefslogtreecommitdiffstats
path: root/calendar/gui/calendar-commands.c.dead
diff options
context:
space:
mode:
Diffstat (limited to 'calendar/gui/calendar-commands.c.dead')
-rw-r--r--calendar/gui/calendar-commands.c.dead380
1 files changed, 380 insertions, 0 deletions
diff --git a/calendar/gui/calendar-commands.c.dead b/calendar/gui/calendar-commands.c.dead
new file mode 100644
index 0000000000..6368857ead
--- /dev/null
+++ b/calendar/gui/calendar-commands.c.dead
@@ -0,0 +1,380 @@
+/*
+ * Evolution calendar - Commands for the calendar GUI control
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) version 3.
+ *
+ * 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with the program; if not, see <http://www.gnu.org/licenses/>
+ *
+ *
+ * Authors:
+ * Miguel de Icaza <miguel@ximian.com>
+ * Federico Mena-Quintero <federico@ximian.com>
+ * Seth Alves <alves@hungry.com>
+ * Rodrigo Moya <rodrigo@ximian.com>
+ *
+ * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com)
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <string.h>
+#include <ctype.h>
+#include <errno.h>
+
+#include <gtk/gtk.h>
+#include <glib/gi18n.h>
+#include <bonobo/bonobo-ui-util.h>
+#include <bonobo/bonobo-exception.h>
+#include <libecal/e-cal-time-util.h>
+#include "shell/Evolution.h"
+#include "calendar-commands.h"
+#include "calendar-component.h"
+#include "calendar-config.h"
+#include "e-day-view.h"
+#include "e-week-view.h"
+#include "gnome-cal.h"
+#include "goto.h"
+#include "print.h"
+#include "dialogs/cal-prefs-dialog.h"
+#include "itip-utils.h"
+#include "e-cal-list-view.h"
+#include "evolution-shell-component-utils.h"
+#include "e-util/e-icon-factory.h"
+#include "e-util/e-util-private.h"
+#include "e-cal-menu.h"
+
+/* Focusing information for the calendar view. We have to keep track of this
+ * ourselves because with Bonobo controls, we may get unpaired focus_out events.
+ */
+typedef struct {
+ guint calendar_focused : 1;
+ guint taskpad_focused : 1;
+} FocusData;
+
+/* Sets a clock cursor for the specified calendar window */
+static void
+set_clock_cursor (GnomeCalendar *gcal)
+{
+ GdkCursor *cursor;
+
+ cursor = gdk_cursor_new (GDK_WATCH);
+ gdk_window_set_cursor (GTK_WIDGET (gcal)->window, cursor);
+ gdk_cursor_unref (cursor);
+ gdk_flush ();
+}
+
+/* Resets the normal cursor for the specified calendar window */
+static void
+set_normal_cursor (GnomeCalendar *gcal)
+{
+ gdk_window_set_cursor (GTK_WIDGET (gcal)->window, NULL);
+ gdk_flush ();
+}
+
+static void
+show_day_view_clicked (BonoboUIComponent *uic, gpointer data, const gchar *path)
+{
+ GnomeCalendar *gcal;
+
+ gcal = GNOME_CALENDAR (data);
+
+ gnome_calendar_set_view (gcal, GNOME_CAL_DAY_VIEW);
+}
+
+static void
+show_work_week_view_clicked (BonoboUIComponent *uic, gpointer data, const gchar *path)
+{
+ GnomeCalendar *gcal;
+
+ gcal = GNOME_CALENDAR (data);
+
+ gnome_calendar_set_view (gcal, GNOME_CAL_WORK_WEEK_VIEW);
+}
+
+static void
+show_week_view_clicked (BonoboUIComponent *uic, gpointer data, const gchar *path)
+{
+ GnomeCalendar *gcal;
+
+ gcal = GNOME_CALENDAR (data);
+
+ gnome_calendar_set_view (gcal, GNOME_CAL_WEEK_VIEW);
+}
+
+static void
+show_month_view_clicked (BonoboUIComponent *uic, gpointer data, const gchar *path)
+{
+ GnomeCalendar *gcal;
+
+ gcal = GNOME_CALENDAR (data);
+
+ gnome_calendar_set_view (gcal, GNOME_CAL_MONTH_VIEW);
+}
+
+static void
+show_list_view_clicked (BonoboUIComponent *uic, gpointer data, const gchar *path)
+{
+ GnomeCalendar *gcal;
+
+ gcal = GNOME_CALENDAR (data);
+
+ gnome_calendar_set_view (gcal, GNOME_CAL_LIST_VIEW);
+}
+
+struct _sensitize_item {
+ const gchar *command;
+ guint32 enable;
+};
+
+static void
+sensitize_items(BonoboUIComponent *uic, struct _sensitize_item *items, guint32 mask)
+{
+ while (items->command) {
+ gchar command[32];
+
+ if (strlen(items->command)>=21) {
+ g_warning ("items->command >= 21: %s\n", items->command);
+ continue;
+ }
+ sprintf(command, "/commands/%s", items->command);
+
+ bonobo_ui_component_set_prop (uic, command, "sensitive",
+ (items->enable & mask) == 0 ? "1" : "0",
+ NULL);
+ items++;
+ }
+}
+
+static struct _sensitize_item taskpad_sensitize_table[] = {
+ { "Cut", E_CAL_MENU_SELECT_EDITABLE | E_CAL_MENU_SELECT_ANY },
+ { "Copy", E_CAL_MENU_SELECT_ANY },
+ { "Paste", E_CAL_MENU_SELECT_EDITABLE },
+ { "Delete", E_CAL_MENU_SELECT_EDITABLE },
+ { NULL }
+};
+
+/* Sensitizes the UI Component menu/toolbar tasks commands based on the number
+ * of selected tasks. If enable is FALSE, all will be disabled. Otherwise, the
+ * currently-selected number of tasks will be used.
+ */
+static void
+sensitize_taskpad_commands (GnomeCalendar *gcal, BonoboControl *control, gboolean enable)
+{
+ BonoboUIComponent *uic;
+ ECalendarTable *task_pad;
+ ECalModel *model;
+ GSList *selected, *l;
+ ECalMenu *menu;
+ GPtrArray *events;
+ ECalMenuTargetSelect *t;
+
+ uic = bonobo_control_get_ui_component (control);
+ g_return_if_fail (uic != NULL);
+
+ menu = gnome_calendar_get_calendar_menu (gcal);
+ task_pad = gnome_calendar_get_task_pad(gcal);
+ model = e_calendar_table_get_model (task_pad);
+ selected = e_calendar_table_get_selected(task_pad);
+ events = g_ptr_array_new();
+ for (l=selected;l;l=g_slist_next(l))
+ g_ptr_array_add(events, e_cal_model_copy_component_data((ECalModelComponent *)l->data));
+ g_slist_free(selected);
+
+ t = e_cal_menu_target_new_select(menu, model, events);
+ if (!enable)
+ t->target.mask = ~((~t->target.mask) & E_CAL_MENU_SELECT_EDITABLE);
+
+ sensitize_items(uic, taskpad_sensitize_table, t->target.mask);
+}
+
+/* Callback used when the selection in the calendar views changes */
+static void
+gcal_calendar_selection_changed_cb (GnomeCalendar *gcal, gpointer data)
+{
+ BonoboControl *control;
+
+ control = BONOBO_CONTROL (data);
+
+ calendar_control_sensitize_calendar_commands (control, gcal, TRUE);
+}
+
+/* Callback used when the selection in the taskpad changes */
+static void
+gcal_taskpad_selection_changed_cb (GnomeCalendar *gcal, gpointer data)
+{
+ BonoboControl *control;
+
+ control = BONOBO_CONTROL (data);
+
+ sensitize_taskpad_commands (gcal, control, TRUE);
+}
+
+/* Callback used when the focus changes for a calendar view */
+static void
+gcal_calendar_focus_change_cb (GnomeCalendar *gcal, gboolean in, gpointer data)
+{
+ BonoboControl *control;
+ FocusData *focus;
+
+ control = BONOBO_CONTROL (data);
+
+ focus = g_object_get_data (G_OBJECT (control), "focus_data");
+ g_return_if_fail (focus != NULL);
+
+ if (in) {
+ g_signal_connect (gcal, "calendar_selection_changed",
+ G_CALLBACK (gcal_calendar_selection_changed_cb), control);
+ calendar_control_sensitize_calendar_commands (control, gcal, TRUE);
+ focus->calendar_focused = TRUE;
+ } else if (focus->calendar_focused) {
+ g_signal_handlers_disconnect_by_func (
+ gcal, G_CALLBACK (gcal_calendar_selection_changed_cb), control);
+ calendar_control_sensitize_calendar_commands (control, gcal, FALSE);
+ focus->calendar_focused = FALSE;
+ }
+}
+
+/* Callback used when the taskpad focus changes */
+static void
+gcal_taskpad_focus_change_cb (GnomeCalendar *gcal, gboolean in, gpointer data)
+{
+ BonoboControl *control;
+ FocusData *focus;
+
+ control = BONOBO_CONTROL (data);
+
+ focus = g_object_get_data (G_OBJECT (control), "focus_data");
+ g_return_if_fail (focus != NULL);
+
+ if (in) {
+ g_signal_connect (gcal, "taskpad_selection_changed",
+ G_CALLBACK (gcal_taskpad_selection_changed_cb), control);
+ sensitize_taskpad_commands (gcal, control, TRUE);
+ focus->taskpad_focused = TRUE;
+ } else if (focus->taskpad_focused) {
+ /* With Bonobo controls, we may get unpaired focus_out events.
+ * That is why we have to keep track of this ourselves instead
+ * of blindly assumming that we are getting this event because
+ * the taskpad was in fact focused.
+ */
+ g_signal_handlers_disconnect_by_func (
+ gcal, G_CALLBACK (gcal_taskpad_selection_changed_cb), control);
+ sensitize_taskpad_commands (gcal, control, FALSE);
+ focus->taskpad_focused = FALSE;
+ }
+
+}
+
+static void
+help_debug (BonoboUIComponent *uid, gpointer data, const gchar *path)
+{
+ calendar_component_show_logger ((GtkWidget *) data);
+}
+
+static BonoboUIVerb verbs [] = {
+
+ BONOBO_UI_VERB ("ShowDayView", show_day_view_clicked),
+ BONOBO_UI_VERB ("ShowWorkWeekView", show_work_week_view_clicked),
+ BONOBO_UI_VERB ("ShowWeekView", show_week_view_clicked),
+ BONOBO_UI_VERB ("ShowMonthView", show_month_view_clicked),
+ BONOBO_UI_VERB ("ShowListView", show_list_view_clicked),
+
+ BONOBO_UI_VERB ("HelpDebug", help_debug),
+ BONOBO_UI_VERB_END
+};
+
+void
+calendar_control_activate (BonoboControl *control,
+ GnomeCalendar *gcal)
+{
+ Bonobo_UIContainer remote_uih;
+ BonoboUIComponent *uic;
+ FocusData *focus;
+ gchar *xmlfile;
+
+ uic = bonobo_control_get_ui_component (control);
+ g_return_if_fail (uic != NULL);
+
+ remote_uih = bonobo_control_get_remote_ui_container (control, NULL);
+ bonobo_ui_component_set_container (uic, remote_uih, NULL);
+ bonobo_object_release_unref (remote_uih, NULL);
+
+ gnome_calendar_set_ui_component (gcal, uic);
+
+ bonobo_ui_component_add_verb_list_with_data (uic, verbs, gcal);
+
+ bonobo_ui_component_freeze (uic, NULL);
+
+ xmlfile = g_build_filename (EVOLUTION_UIDIR,
+ "evolution-calendar.xml",
+ NULL);
+ bonobo_ui_util_set_ui (uic, PREFIX,
+ xmlfile,
+ "evolution-calendar",
+ NULL);
+ g_free (xmlfile);
+
+ gnome_calendar_setup_view_menus (gcal, uic);
+
+ g_signal_connect (gcal, "calendar_focus_change",
+ G_CALLBACK (gcal_calendar_focus_change_cb), control);
+ g_signal_connect (gcal, "taskpad_focus_change",
+ G_CALLBACK (gcal_taskpad_focus_change_cb), control);
+
+ e_menu_activate((EMenu *)gnome_calendar_get_calendar_menu (gcal), uic, 1);
+ e_menu_activate((EMenu *)gnome_calendar_get_taskpad_menu (gcal), uic, 1);
+
+ calendar_control_sensitize_calendar_commands (control, gcal, TRUE);
+ sensitize_taskpad_commands (gcal, control, TRUE);
+
+ bonobo_ui_component_thaw (uic, NULL);
+
+ focus = g_new (FocusData, 1);
+ focus->calendar_focused = FALSE;
+ focus->taskpad_focused = FALSE;
+
+ g_object_set_data (G_OBJECT (control), "focus_data", focus);
+}
+
+void
+calendar_control_deactivate (BonoboControl *control, GnomeCalendar *gcal)
+{
+ FocusData *focus;
+ BonoboUIComponent *uic;
+
+ uic = bonobo_control_get_ui_component (control);
+ g_return_if_fail (uic != NULL);
+
+ e_menu_activate((EMenu *)gnome_calendar_get_calendar_menu (gcal), uic, 0);
+ e_menu_activate((EMenu *)gnome_calendar_get_taskpad_menu (gcal), uic, 0);
+
+ gnome_calendar_set_ui_component (gcal, NULL);
+
+ focus = g_object_get_data (G_OBJECT (control), "focus_data");
+ g_return_if_fail (focus != NULL);
+
+ g_object_set_data (G_OBJECT (control), "focus_data", NULL);
+ g_free (focus);
+
+ gnome_calendar_discard_view_menus (gcal);
+
+ g_signal_handlers_disconnect_matched (gcal, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, control);
+
+ bonobo_ui_component_rm (uic, "/", NULL);
+ bonobo_ui_component_unset_container (uic, NULL);
+}