aboutsummaryrefslogtreecommitdiffstats
path: root/calendar/gui/alarm-notify
diff options
context:
space:
mode:
Diffstat (limited to 'calendar/gui/alarm-notify')
-rw-r--r--calendar/gui/alarm-notify/alarm-notify-dialog.c218
-rw-r--r--calendar/gui/alarm-notify/alarm-notify-dialog.h44
-rw-r--r--calendar/gui/alarm-notify/alarm-notify.glade230
3 files changed, 492 insertions, 0 deletions
diff --git a/calendar/gui/alarm-notify/alarm-notify-dialog.c b/calendar/gui/alarm-notify/alarm-notify-dialog.c
new file mode 100644
index 0000000000..931ab0bfac
--- /dev/null
+++ b/calendar/gui/alarm-notify/alarm-notify-dialog.c
@@ -0,0 +1,218 @@
+/* Evolution calendar - alarm notification dialog
+ *
+ * Copyright (C) 2000 Helix Code, Inc.
+ *
+ * Author: Federico Mena-Quintero <federico@helixcode.com>
+ *
+ * This program 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 2 of the License, or
+ * (at your option) any later version.
+ *
+ * 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <config.h>
+#include <gtk/gtklabel.h>
+#include <gtk/gtksignal.h>
+#include <gtk/gtkspinbutton.h>
+#include <gtk/gtkwindow.h>
+#include <glade/glade.h>
+#include "alarm-notify-dialog.h"
+
+
+
+/* The useful contents of the alarm notify dialog */
+typedef struct {
+ GladeXML *xml;
+
+ GtkWidget *dialog;
+ GtkWidget *close;
+ GtkWidget *snooze;
+ GtkWidget *edit;
+ GtkWidget *heading;
+ GtkWidget *summary;
+ GtkWidget *snooze_time;
+
+ AlarmNotifyFunc func;
+ gpointer func_data;
+} AlarmNotify;
+
+
+
+/* Callback used when the notify dialog is destroyed */
+static void
+dialog_destroy_cb (GtkObject *object, gpointer data)
+{
+ AlarmNotify *an;
+
+ an = data;
+ gtk_object_unref (GTK_OBJECT (an->xml));
+ g_free (an);
+}
+
+/* Delete_event handler for the alarm notify dialog */
+static gint
+delete_event_cb (GtkWidget *widget, GdkEvent *event, gpointer data)
+{
+ AlarmNotify *an;
+
+ an = data;
+ g_assert (an->func != NULL);
+
+ (* an->func) (ALARM_NOTIFY_CLOSE, -1, an->func_data);
+
+ gtk_widget_destroy (widget);
+ return TRUE;
+}
+
+/* Callback for the close button */
+static void
+close_clicked_cb (GtkWidget *widget, gpointer data)
+{
+ AlarmNotify *an;
+
+ an = data;
+ g_assert (an->func != NULL);
+
+ (* an->func) (ALARM_NOTIFY_CLOSE, -1, an->func_data);
+
+ gtk_widget_destroy (an->dialog);
+}
+
+/* Callback for the snooze button */
+static void
+snooze_clicked_cb (GtkWidget *widget, gpointer data)
+{
+ AlarmNotify *an;
+ int snooze_time;
+
+ an = data;
+ g_assert (an->func != NULL);
+
+ snooze_time = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (an->snooze_time));
+ (* an->func) (ALARM_NOTIFY_SNOOZE, snooze_time, an->func_data);
+
+ gtk_widget_destroy (an->dialog);
+}
+
+/* Callback for the edit button */
+static void
+edit_clicked_cb (GtkWidget *widget, gpointer data)
+{
+ AlarmNotify *an;
+
+ an = data;
+ g_assert (an->func != NULL);
+
+ (* an->func) (ALARM_NOTIFY_EDIT, -1, an->func_data);
+
+ gtk_widget_destroy (an->dialog);
+}
+
+/**
+ * alarm_notify_dialog:
+ * @func: Function to be called when a dialog action is invoked.
+ * @data: Closure data for @func.
+ *
+ * Runs the alarm notification dialog. The specified @func will be used to
+ * notify the client about result of the actions in the dialog.
+ *
+ * Return value: TRUE on success, FALSE if the dialog could not be created.
+ **/
+gboolean
+alarm_notify_dialog (time_t trigger, time_t occur, iCalObject *ico,
+ AlarmNotifyFunc func, gpointer func_data)
+{
+ AlarmNotify *an;
+ char buf[256];
+ struct tm tm_trigger;
+ struct tm tm_occur;
+
+ g_return_val_if_fail (trigger != -1, FALSE);
+ g_return_val_if_fail (occur != -1, FALSE);
+ g_return_val_if_fail (ico != NULL, FALSE);
+ g_return_val_if_fail (func != NULL, FALSE);
+
+ an = g_new0 (AlarmNotify, 1);
+
+ an->func = func;
+ an->func_data = func_data;
+
+ an->xml = glade_xml_new (EVOLUTION_GLADEDIR "/alarm-notify.glade", NULL);
+ if (!an->xml) {
+ g_message ("alarm_notify_dialog(): Could not load the Glade XML file!");
+ g_free (an);
+ return FALSE;
+ }
+
+ an->dialog = glade_xml_get_widget (an->xml, "alarm-notify");
+ an->close = glade_xml_get_widget (an->xml, "close");
+ an->snooze = glade_xml_get_widget (an->xml, "snooze");
+ an->edit = glade_xml_get_widget (an->xml, "edit");
+ an->heading = glade_xml_get_widget (an->xml, "heading");
+ an->summary = glade_xml_get_widget (an->xml, "summary");
+ an->snooze_time = glade_xml_get_widget (an->xml, "snooze-time");
+
+ if (!(an->dialog && an->close && an->snooze && an->edit && an->heading && an->summary
+ && an->snooze_time)) {
+ g_message ("alarm_notify_dialog(): Could not find all widgets in Glade file!");
+ gtk_object_unref (GTK_OBJECT (an->xml));
+ g_free (an);
+ return FALSE;
+ }
+
+ gtk_object_set_data (GTK_OBJECT (an->dialog), "alarm-notify", an);
+ gtk_signal_connect (GTK_OBJECT (an->dialog), "destroy",
+ GTK_SIGNAL_FUNC (dialog_destroy_cb), an);
+
+ /* Title */
+
+ /* FIXME: use am_pm_flag or 24-hour time */
+
+ tm_trigger = *localtime (&trigger);
+ strftime (buf, sizeof (buf), _("Alarm on %A %b %d %Y %H:%M"), &tm_trigger);
+ gtk_window_set_title (GTK_WINDOW (an->dialog), buf);
+
+ /* Heading */
+
+ tm_occur = *localtime (&occur);
+ strftime (buf, sizeof (buf),
+ _("Notification about your appointment on %A %b %d %Y %H:%M"),
+ &tm_occur);
+ gtk_label_set_text (GTK_LABEL (an->heading), buf);
+
+ /* Summary */
+
+ gtk_label_set_text (GTK_LABEL (an->summary), ico->summary);
+
+ /* Connect actions */
+
+ gtk_signal_connect (GTK_OBJECT (an->dialog), "delete_event",
+ GTK_SIGNAL_FUNC (delete_event_cb),
+ an);
+
+ gtk_signal_connect (GTK_OBJECT (an->close), "clicked",
+ GTK_SIGNAL_FUNC (close_clicked_cb),
+ an);
+
+ gtk_signal_connect (GTK_OBJECT (an->snooze), "clicked",
+ GTK_SIGNAL_FUNC (snooze_clicked_cb),
+ an);
+
+ gtk_signal_connect (GTK_OBJECT (an->edit), "clicked",
+ GTK_SIGNAL_FUNC (edit_clicked_cb),
+ an);
+
+ /* Run! */
+
+ gtk_widget_show (an->dialog);
+ return TRUE;
+}
diff --git a/calendar/gui/alarm-notify/alarm-notify-dialog.h b/calendar/gui/alarm-notify/alarm-notify-dialog.h
new file mode 100644
index 0000000000..770768f59c
--- /dev/null
+++ b/calendar/gui/alarm-notify/alarm-notify-dialog.h
@@ -0,0 +1,44 @@
+/* Evolution calendar - alarm notification dialog
+ *
+ * Copyright (C) 2000 Helix Code, Inc.
+ *
+ * Author: Federico Mena-Quintero <federico@helixcode.com>
+ *
+ * This program 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 2 of the License, or
+ * (at your option) any later version.
+ *
+ * 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef ALARM_NOTIFY_DIALOG_H
+#define ALARM_NOTIFY_DIALOG_H
+
+#include <time.h>
+#include <glib.h>
+#include <cal-util/calobj.h>
+
+
+
+typedef enum {
+ ALARM_NOTIFY_CLOSE,
+ ALARM_NOTIFY_SNOOZE,
+ ALARM_NOTIFY_EDIT
+} AlarmNotifyResult;
+
+typedef void (* AlarmNotifyFunc) (AlarmNotifyResult result, int snooze_mins, gpointer data);
+
+gboolean alarm_notify_dialog (time_t trigger, time_t occur, iCalObject *ico,
+ AlarmNotifyFunc func, gpointer func_data);
+
+
+
+#endif
diff --git a/calendar/gui/alarm-notify/alarm-notify.glade b/calendar/gui/alarm-notify/alarm-notify.glade
new file mode 100644
index 0000000000..32d7e03f8b
--- /dev/null
+++ b/calendar/gui/alarm-notify/alarm-notify.glade
@@ -0,0 +1,230 @@
+<?xml version="1.0"?>
+<GTK-Interface>
+
+<project>
+ <name>Evolution Calendar</name>
+ <program_name>evolution-calendar</program_name>
+ <directory></directory>
+ <source_directory>src</source_directory>
+ <pixmaps_directory>pixmaps</pixmaps_directory>
+ <language>C</language>
+ <gnome_support>True</gnome_support>
+ <gettext_support>True</gettext_support>
+ <use_widget_names>False</use_widget_names>
+ <output_main_file>True</output_main_file>
+ <output_support_files>True</output_support_files>
+ <output_build_files>True</output_build_files>
+ <backup_source_files>True</backup_source_files>
+ <main_source_file>interface.c</main_source_file>
+ <main_header_file>interface.h</main_header_file>
+ <handler_source_file>callbacks.c</handler_source_file>
+ <handler_header_file>callbacks.h</handler_header_file>
+ <support_source_file>support.c</support_source_file>
+ <support_header_file>support.h</support_header_file>
+ <output_translatable_strings>True</output_translatable_strings>
+ <translatable_strings_file>alarm-notify.glade.h</translatable_strings_file>
+</project>
+
+<widget>
+ <class>GtkWindow</class>
+ <name>alarm-notify</name>
+ <cxx_use_heap>True</cxx_use_heap>
+ <title></title>
+ <type>GTK_WINDOW_DIALOG</type>
+ <position>GTK_WIN_POS_CENTER</position>
+ <modal>False</modal>
+ <allow_shrink>False</allow_shrink>
+ <allow_grow>False</allow_grow>
+ <auto_shrink>False</auto_shrink>
+
+ <widget>
+ <class>GtkVBox</class>
+ <name>vbox2</name>
+ <border_width>4</border_width>
+ <cxx_use_heap>True</cxx_use_heap>
+ <homogeneous>False</homogeneous>
+ <spacing>4</spacing>
+
+ <widget>
+ <class>GtkHBox</class>
+ <name>hbox3</name>
+ <cxx_use_heap>True</cxx_use_heap>
+ <homogeneous>False</homogeneous>
+ <spacing>8</spacing>
+ <child>
+ <padding>0</padding>
+ <expand>True</expand>
+ <fill>True</fill>
+ </child>
+
+ <widget>
+ <class>GtkVBox</class>
+ <name>vbox5</name>
+ <cxx_use_heap>True</cxx_use_heap>
+ <homogeneous>False</homogeneous>
+ <spacing>4</spacing>
+ <child>
+ <padding>0</padding>
+ <expand>True</expand>
+ <fill>True</fill>
+ </child>
+
+ <widget>
+ <class>GtkLabel</class>
+ <name>heading</name>
+ <cxx_use_heap>True</cxx_use_heap>
+ <label></label>
+ <justify>GTK_JUSTIFY_LEFT</justify>
+ <wrap>True</wrap>
+ <xalign>0</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>GtkLabel</class>
+ <name>summary</name>
+ <cxx_use_heap>True</cxx_use_heap>
+ <label></label>
+ <justify>GTK_JUSTIFY_LEFT</justify>
+ <wrap>True</wrap>
+ <xalign>0</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <child>
+ <padding>0</padding>
+ <expand>False</expand>
+ <fill>False</fill>
+ </child>
+ </widget>
+ </widget>
+
+ <widget>
+ <class>GtkVBox</class>
+ <name>vbox4</name>
+ <cxx_use_heap>True</cxx_use_heap>
+ <homogeneous>False</homogeneous>
+ <spacing>4</spacing>
+ <child>
+ <padding>0</padding>
+ <expand>True</expand>
+ <fill>True</fill>
+ </child>
+
+ <widget>
+ <class>GtkButton</class>
+ <name>close</name>
+ <cxx_use_heap>True</cxx_use_heap>
+ <can_focus>True</can_focus>
+ <label>Close</label>
+ <child>
+ <padding>0</padding>
+ <expand>False</expand>
+ <fill>False</fill>
+ </child>
+ </widget>
+
+ <widget>
+ <class>GtkButton</class>
+ <name>snooze</name>
+ <cxx_use_heap>True</cxx_use_heap>
+ <can_focus>True</can_focus>
+ <label>Snooze</label>
+ <child>
+ <padding>0</padding>
+ <expand>False</expand>
+ <fill>False</fill>
+ </child>
+ </widget>
+
+ <widget>
+ <class>GtkButton</class>
+ <name>edit</name>
+ <cxx_use_heap>True</cxx_use_heap>
+ <can_focus>True</can_focus>
+ <label>Edit appointment</label>
+ <child>
+ <padding>0</padding>
+ <expand>False</expand>
+ <fill>False</fill>
+ </child>
+ </widget>
+ </widget>
+ </widget>
+
+ <widget>
+ <class>GtkHSeparator</class>
+ <name>hseparator1</name>
+ <cxx_use_heap>True</cxx_use_heap>
+ <child>
+ <padding>0</padding>
+ <expand>True</expand>
+ <fill>True</fill>
+ </child>
+ </widget>
+
+ <widget>
+ <class>GtkHBox</class>
+ <name>hbox4</name>
+ <cxx_use_heap>True</cxx_use_heap>
+ <homogeneous>False</homogeneous>
+ <spacing>4</spacing>
+ <child>
+ <padding>0</padding>
+ <expand>True</expand>
+ <fill>True</fill>
+ </child>
+
+ <widget>
+ <class>GtkLabel</class>
+ <name>label4</name>
+ <cxx_use_heap>True</cxx_use_heap>
+ <label>Snooze time (minutes)</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0</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>GtkSpinButton</class>
+ <name>snooze-time</name>
+ <cxx_use_heap>True</cxx_use_heap>
+ <can_focus>True</can_focus>
+ <climb_rate>1</climb_rate>
+ <digits>0</digits>
+ <numeric>False</numeric>
+ <update_policy>GTK_UPDATE_ALWAYS</update_policy>
+ <snap>False</snap>
+ <wrap>False</wrap>
+ <value>5</value>
+ <lower>1</lower>
+ <upper>1440</upper>
+ <step>1</step>
+ <page>5</page>
+ <page_size>5</page_size>
+ <child>
+ <padding>0</padding>
+ <expand>False</expand>
+ <fill>False</fill>
+ </child>
+ </widget>
+ </widget>
+ </widget>
+</widget>
+
+</GTK-Interface>