aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--calendar/ChangeLog17
-rw-r--r--calendar/gui/Makefile.am10
-rw-r--r--calendar/gui/calendar-commands.h3
-rw-r--r--calendar/gui/gnome-cal.c3
-rw-r--r--calendar/gui/goto-dialog.glade159
-rw-r--r--calendar/gui/goto-dialog.glade.h21
-rw-r--r--calendar/gui/goto.c393
-rw-r--r--calendar/gui/goto.h29
-rw-r--r--widgets/misc/ChangeLog21
-rw-r--r--widgets/misc/e-calendar-item.c83
-rw-r--r--widgets/misc/e-calendar-item.h31
11 files changed, 490 insertions, 280 deletions
diff --git a/calendar/ChangeLog b/calendar/ChangeLog
index 74751b91ca..19dff51e65 100644
--- a/calendar/ChangeLog
+++ b/calendar/ChangeLog
@@ -1,3 +1,20 @@
+2000-12-22 JP Rosevear <jpr@helixcode.com>
+
+ * gui/goto-dialog.glade.h: translations
+
+ * gui/goto-dialog.glade: new glade file for goto dialog
+
+ * gui/gnome-cal.c (setup_widgets): Set date navigator attributes
+
+ * gui/calendar-commands.h: remove prototype
+
+ * gui/goto.h: Add prototype
+
+ * gui/Makefile.am: Add glade file stuff
+
+ * gui/gnome-cal.c (setup_widgets): Use accessors to configure the
+ calendar item properly
+
2000-12-21 Federico Mena Quintero <federico@helixcode.com>
Alarm trigger queueing for the GUI part.
diff --git a/calendar/gui/Makefile.am b/calendar/gui/Makefile.am
index 48ccd78e95..67422a9af3 100644
--- a/calendar/gui/Makefile.am
+++ b/calendar/gui/Makefile.am
@@ -54,9 +54,14 @@ gladedir = $(datadir)/evolution/glade
glade_DATA = \
event-editor-dialog.glade \
e-meeting-dialog.glade \
- e-itip-control.glade
+ e-itip-control.glade \
+ goto-dialog.glade
-glade_messages = event-editor-dialog.glade.h
+glade_messages = \
+ event-editor-dialog.glade.h \
+ e-meet-dialog.glade.h \
+ e-itip-control.glade.h \
+ goto-dialog.glade.h
evolution_calendar_SOURCES = \
$(IDL_GENERATED) \
@@ -107,6 +112,7 @@ evolution_calendar_SOURCES = \
gnome-month-item.c \
gnome-month-item.h \
goto.c \
+ goto.h \
itip-utils.c \
itip-utils.h \
main.c \
diff --git a/calendar/gui/calendar-commands.h b/calendar/gui/calendar-commands.h
index 0c237dad16..5189e2878f 100644
--- a/calendar/gui/calendar-commands.h
+++ b/calendar/gui/calendar-commands.h
@@ -58,9 +58,6 @@ extern const guint MAX_SNOOZE_SECS;
/* This tells all the calendars to reload the config settings. */
void update_all_config_settings (void);
-/* Creates and runs the Go-to date dialog */
-void goto_dialog (GnomeCalendar *gcal);
-
/* Returns a pointer to a statically-allocated string with a representation of the specified color.
* Values must be in [0, 65535].
*/
diff --git a/calendar/gui/gnome-cal.c b/calendar/gui/gnome-cal.c
index e3dae90a4d..77dc0a71dc 100644
--- a/calendar/gui/gnome-cal.c
+++ b/calendar/gui/gnome-cal.c
@@ -244,7 +244,10 @@ setup_widgets (GnomeCalendar *gcal)
/* The ECalendar. */
w = e_calendar_new ();
priv->date_navigator = E_CALENDAR (w);
+ e_calendar_item_set_days_start_week_sel (priv->date_navigator->calitem, 9);
+ e_calendar_item_set_max_days_sel (priv->date_navigator->calitem, 42);
gtk_widget_show (w);
+
e_paned_pack1 (E_PANED (priv->vpane), w, FALSE, TRUE);
gtk_signal_connect (GTK_OBJECT (priv->date_navigator),
"style_set",
diff --git a/calendar/gui/goto-dialog.glade b/calendar/gui/goto-dialog.glade
new file mode 100644
index 0000000000..fb8d67d2bd
--- /dev/null
+++ b/calendar/gui/goto-dialog.glade
@@ -0,0 +1,159 @@
+<?xml version="1.0"?>
+<GTK-Interface>
+
+<project>
+ <name>preferences</name>
+ <program_name>preferences</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>
+ <output_translatable_strings>True</output_translatable_strings>
+ <translatable_strings_file>goto-dialog.glade.h</translatable_strings_file>
+</project>
+
+<widget>
+ <class>GnomeDialog</class>
+ <name>goto-dialog</name>
+ <title>Go To Date</title>
+ <type>GTK_WINDOW_TOPLEVEL</type>
+ <position>GTK_WIN_POS_NONE</position>
+ <modal>False</modal>
+ <allow_shrink>False</allow_shrink>
+ <allow_grow>False</allow_grow>
+ <auto_shrink>False</auto_shrink>
+ <auto_close>False</auto_close>
+ <hide_on_close>False</hide_on_close>
+
+ <widget>
+ <class>GtkVBox</class>
+ <child_name>GnomeDialog:vbox</child_name>
+ <name>dialog-vbox1</name>
+ <homogeneous>False</homogeneous>
+ <spacing>8</spacing>
+ <child>
+ <padding>4</padding>
+ <expand>True</expand>
+ <fill>True</fill>
+ </child>
+
+ <widget>
+ <class>GtkHButtonBox</class>
+ <child_name>GnomeDialog:action_area</child_name>
+ <name>dialog-action_area1</name>
+ <layout_style>GTK_BUTTONBOX_END</layout_style>
+ <spacing>8</spacing>
+ <child_min_width>85</child_min_width>
+ <child_min_height>27</child_min_height>
+ <child_ipad_x>7</child_ipad_x>
+ <child_ipad_y>0</child_ipad_y>
+ <child>
+ <padding>0</padding>
+ <expand>False</expand>
+ <fill>True</fill>
+ <pack>GTK_PACK_END</pack>
+ </child>
+
+ <widget>
+ <class>GtkButton</class>
+ <name>button4</name>
+ <can_default>True</can_default>
+ <can_focus>True</can_focus>
+ <label>Go To Today</label>
+ <stock_pixmap>GNOME_STOCK_PIXMAP_JUMP_TO</stock_pixmap>
+ </widget>
+
+ <widget>
+ <class>GtkButton</class>
+ <name>button5</name>
+ <can_default>True</can_default>
+ <can_focus>True</can_focus>
+ <stock_button>GNOME_STOCK_BUTTON_CANCEL</stock_button>
+ </widget>
+ </widget>
+
+ <widget>
+ <class>GtkVBox</class>
+ <name>vbox</name>
+ <homogeneous>False</homogeneous>
+ <spacing>0</spacing>
+ <child>
+ <padding>0</padding>
+ <expand>True</expand>
+ <fill>True</fill>
+ </child>
+
+ <widget>
+ <class>GtkHBox</class>
+ <name>hbox12</name>
+ <homogeneous>True</homogeneous>
+ <spacing>3</spacing>
+ <child>
+ <padding>0</padding>
+ <expand>True</expand>
+ <fill>True</fill>
+ </child>
+
+ <widget>
+ <class>GtkOptionMenu</class>
+ <name>month</name>
+ <can_focus>True</can_focus>
+ <items>January
+February
+March
+April
+May
+June
+July
+August
+September
+October
+November
+December
+</items>
+ <initial_choice>0</initial_choice>
+ <child>
+ <padding>0</padding>
+ <expand>False</expand>
+ <fill>False</fill>
+ </child>
+ </widget>
+
+ <widget>
+ <class>GtkSpinButton</class>
+ <name>year</name>
+ <can_focus>True</can_focus>
+ <climb_rate>1</climb_rate>
+ <digits>0</digits>
+ <numeric>True</numeric>
+ <update_policy>GTK_UPDATE_IF_VALID</update_policy>
+ <snap>False</snap>
+ <wrap>False</wrap>
+ <value>1969</value>
+ <lower>1969</lower>
+ <upper>2038</upper>
+ <step>1</step>
+ <page>5</page>
+ <page_size>10</page_size>
+ <child>
+ <padding>0</padding>
+ <expand>True</expand>
+ <fill>True</fill>
+ </child>
+ </widget>
+ </widget>
+
+ <widget>
+ <class>Placeholder</class>
+ </widget>
+
+ <widget>
+ <class>Placeholder</class>
+ </widget>
+ </widget>
+ </widget>
+</widget>
+
+</GTK-Interface>
diff --git a/calendar/gui/goto-dialog.glade.h b/calendar/gui/goto-dialog.glade.h
new file mode 100644
index 0000000000..5d970035fc
--- /dev/null
+++ b/calendar/gui/goto-dialog.glade.h
@@ -0,0 +1,21 @@
+/*
+ * Translatable strings file generated by Glade.
+ * Add this file to your project's POTFILES.in.
+ * DO NOT compile it as part of your application.
+ */
+
+gchar *s = N_("Go To Date");
+gchar *s = N_("Go To Today");
+gchar *s = N_("January\n"
+ "February\n"
+ "March\n"
+ "April\n"
+ "May\n"
+ "June\n"
+ "July\n"
+ "August\n"
+ "September\n"
+ "October\n"
+ "November\n"
+ "December\n"
+ "");
diff --git a/calendar/gui/goto.c b/calendar/gui/goto.c
index 07e75e5d3d..71d377f2b8 100644
--- a/calendar/gui/goto.c
+++ b/calendar/gui/goto.c
@@ -1,332 +1,195 @@
-/* Go to date dialog for gnomecal
+/* Go to date dialog for Evolution
*
* Copyright (C) 1998 Red Hat Software, Inc.
+ * Copyright (C) 2000 Helix Code, Inc.
*
- * Author: Federico Mena <federico@nuclecu.unam.mx>
+ * Authors: Federico Mena <federico@nuclecu.unam.mx>
+ * JP Rosevear <jpr@helixcode.com>
*/
#include <config.h>
#include <gnome.h>
-#include <cal-util/timeutil.h>
-#include "gnome-cal.h"
-#include "gnome-month-item.h"
+#include <glade/glade.h>
#include "calendar-commands.h"
-#include "mark.h"
+#include "goto.h"
-
-static GtkWidget *goto_win; /* The goto dialog window */
-static GnomeMonthItem *month_item; /* The month item in the dialog */
-static GnomeCalendar *gnome_calendar; /* The gnome calendar the dialog refers to */
-static int current_index; /* The index of the day marked as current, or -1 if none */
-
-
-/* Updates the specified month item by marking it appropriately from the calendar the dialog refers
- * to. Also marks the current day if appropriate.
- */
-static void
-update (void)
+typedef struct
{
- GnomeCanvasItem *item;
- time_t t;
- struct tm tm;
+ GladeXML *xml;
+ GtkWidget *dialog;
- unmark_month_item (month_item);
- mark_month_item (month_item, gnome_calendar);
-
- if (current_index != -1) {
- item = gnome_month_item_num2child (month_item,
- GNOME_MONTH_ITEM_DAY_LABEL + current_index);
- gnome_canvas_item_set (item,
- "fill_color", color_spec_from_prop (COLOR_PROP_DAY_FG),
- "fontset", NORMAL_DAY_FONTSET,
- NULL);
- current_index = -1;
- }
+ GtkWidget *month;
+ GtkWidget *year;
+ ECalendar *ecal;
+ GtkWidget *vbox;
- t = time (NULL);
- tm = *localtime (&t);
+ GnomeCalendar *gcal;
+ gint year_val;
+ gint month_val;
+ gint day_val;
+
+} GoToDialog;
- if (((tm.tm_year + 1900) == month_item->year) && (tm.tm_mon == month_item->month)) {
- current_index = gnome_month_item_day2index (month_item, tm.tm_mday);
- g_assert (current_index != -1);
-
- item = gnome_month_item_num2child (month_item,
- GNOME_MONTH_ITEM_DAY_LABEL + current_index);
- gnome_canvas_item_set (item,
- "fill_color", color_spec_from_prop (COLOR_PROP_CURRENT_DAY_FG),
- "fontset", CURRENT_DAY_FONTSET,
- NULL);
- }
-}
+GoToDialog *dlg = NULL;
/* Callback used when the year adjustment is changed */
static void
year_changed (GtkAdjustment *adj, gpointer data)
{
- gnome_canvas_item_set (GNOME_CANVAS_ITEM (month_item),
- "year", (int) adj->value,
- NULL);
- update ();
-}
-
-/* Creates the year control with its adjustment */
-static GtkWidget *
-create_year (int year)
-{
- GtkWidget *hbox;
- GtkAdjustment *adj;
- GtkWidget *w;
-
- hbox = gtk_hbox_new (FALSE, GNOME_PAD_SMALL);
-
- w = gtk_label_new (_("Year:"));
- gtk_box_pack_start (GTK_BOX (hbox), w, FALSE, FALSE, 0);
- gtk_widget_show (w);
-
- adj = GTK_ADJUSTMENT (gtk_adjustment_new (year, 1900, 9999, 1, 10, 10));
- gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
- (GtkSignalFunc) year_changed,
- NULL);
-
- w = gtk_spin_button_new (adj, 1.0, 0);
- gtk_widget_set_usize (w, 60, 0);
- gtk_box_pack_start (GTK_BOX (hbox), w, FALSE, FALSE, 0);
- gtk_widget_show (w);
+ GoToDialog *dlg = data;
- return hbox;
+ dlg->year_val = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (dlg->year));
+ e_calendar_item_set_first_month (dlg->ecal->calitem, dlg->year_val, dlg->month_val);
}
/* Callback used when a month button is toggled */
static void
-month_toggled (GtkToggleButton *toggle, gpointer data)
+month_changed (GtkToggleButton *toggle, gpointer data)
{
- if (!toggle->active)
- return;
+ GoToDialog *dlg = data;
+ GtkWidget *menu, *active;
+
+ menu = gtk_option_menu_get_menu (GTK_OPTION_MENU (dlg->month));
+ active = gtk_menu_get_active (GTK_MENU (menu));
+ dlg->month_val = g_list_index (GTK_MENU_SHELL (menu)->children, active);
- gnome_canvas_item_set (GNOME_CANVAS_ITEM (month_item),
- "month", GPOINTER_TO_INT (data),
- NULL);
- update ();
+ e_calendar_item_set_first_month (dlg->ecal->calitem, dlg->year_val, dlg->month_val);
}
-/* Creates the months control */
-static GtkWidget *
-create_months (int month)
+/* Event handler for day groups in the month item. A button press makes the calendar jump to the
+ * selected day and destroys the Go-to dialog box.
+ */
+static void
+ecal_event (ECalendarItem *calitem, gpointer user_data)
{
- time_t start_time;
- GtkWidget *table;
- GtkWidget *w;
- GSList *group;
- int i, row, col;
+ GoToDialog *dlg = user_data;
+ GDate start_date, end_date;
struct tm tm;
- char buf[100];
-
- gnome_calendar_get_selected_time_range (gnome_calendar, &start_time, NULL);
-
- tm = *localtime (&start_time);
-
- table = gtk_table_new (2, 6, TRUE);
-
- group = NULL;
-
- for (i = 0; i < 12; i++) {
- row = i / 6;
- col = i % 6;
-
- tm.tm_mon = i;
- strftime (buf, 100, "%b", &tm);
-
- w = gtk_radio_button_new (group);
- group = gtk_radio_button_group (GTK_RADIO_BUTTON (w));
- gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (w), FALSE);
+ time_t et;
+
+ e_calendar_item_get_selection (calitem, &start_date, &end_date);
+ g_date_to_struct_tm (&start_date, &tm);
+ et = mktime (&tm);
+
+ gnome_calendar_goto (dlg->gcal, et);
- gtk_container_add (GTK_CONTAINER (w), gtk_label_new (buf));
+ gnome_dialog_close (GNOME_DIALOG (dlg->dialog));
+}
- if (i == month)
- gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (w), TRUE);
+/* Creates the canvas with the month item for selecting days */
+static ECalendar *
+create_ecal (void)
+{
+ ECalendar *ecal;
- gtk_signal_connect (GTK_OBJECT (w), "toggled",
- (GtkSignalFunc) month_toggled,
- GINT_TO_POINTER (i));
- gtk_table_attach (GTK_TABLE (table), w,
- col, col + 1,
- row, row + 1,
- GTK_EXPAND | GTK_FILL,
- GTK_EXPAND | GTK_FILL,
- 0, 0);
- gtk_widget_show_all (w);
- }
+ ecal = E_CALENDAR (e_calendar_new ());
- return table;
+ e_calendar_item_set_display_popup (ecal->calitem, FALSE);
+
+ return ecal;
}
-/* Sets the scrolling region of the canvas to the allocation size */
static void
-set_scroll_region (GtkWidget *widget, GtkAllocation *allocation)
+goto_today (GoToDialog *dlg)
{
- gnome_canvas_item_set (GNOME_CANVAS_ITEM (month_item),
- "width", (double) (allocation->width - 1),
- "height", (double) (allocation->height - 1),
- NULL);
-
- gnome_canvas_set_scroll_region (GNOME_CANVAS (widget),
- 0, 0,
- allocation->width, allocation->height);
+ gnome_calendar_goto_today (dlg->gcal);
}
-/* Event handler for day groups in the month item. A button press makes the calendar jump to the
- * selected day and destroys the Go-to dialog box.
+/* Gets the widgets from the XML file and returns if they are all available.
*/
-static gint
-day_event (GnomeCanvasItem *item, GdkEvent *event, gpointer data)
+static gboolean
+get_widgets (GoToDialog *dlg)
{
- int child_num, day;
-
- child_num = gnome_month_item_child2num (month_item, item);
- day = gnome_month_item_num2day (month_item, child_num);
-
- switch (event->type) {
- case GDK_BUTTON_PRESS:
- if ((event->button.button == 1) && (day != 0)) {
- gnome_calendar_goto (gnome_calendar,
- time_from_day (month_item->year, month_item->month, day));
- gtk_widget_destroy (goto_win);
- }
- break;
-
- default:
- break;
- }
+#define GW(name) glade_xml_get_widget (dlg->xml, name)
- return FALSE;
-}
+ dlg->dialog = GW ("goto-dialog");
-/* Creates the canvas with the month item for selecting days */
-static GtkWidget *
-create_days (int day, int month, int year)
-{
- GtkWidget *canvas;
- int i;
- GnomeCanvasItem *day_group;
-
- canvas = gnome_canvas_new ();
- gtk_widget_set_usize (canvas, 150, 120);
-
- month_item = GNOME_MONTH_ITEM (gnome_month_item_new (gnome_canvas_root (GNOME_CANVAS (canvas))));
- gnome_canvas_item_set (GNOME_CANVAS_ITEM (month_item),
- "month", month,
- "year", year,
- "start_on_monday", week_starts_on_monday,
- NULL);
- colorify_month_item (month_item, default_color_func, NULL);
- month_item_prepare_prelight (month_item, default_color_func, NULL);
- update ();
-
- /* Connect to size_allocate so that we can change the size of the month item and the
- * scrolling region appropriately.
- */
-
- gtk_signal_connect (GTK_OBJECT (canvas), "size_allocate",
- (GtkSignalFunc) set_scroll_region,
- NULL);
-
- /* Bind the day groups to our event handler */
-
- for (i = 0; i < 42; i++) {
- day_group = gnome_month_item_num2child (month_item, i + GNOME_MONTH_ITEM_DAY_GROUP);
- gtk_signal_connect (GTK_OBJECT (day_group), "event",
- (GtkSignalFunc) day_event,
- NULL);
- }
+ dlg->month = GW ("month");
+ dlg->year = GW ("year");
+ dlg->vbox = GW ("vbox");
+
+#undef GW
- return canvas;
+ return (dlg->dialog
+ && dlg->month
+ && dlg->year
+ && dlg->vbox);
}
static void
-goto_today (GtkWidget *widget, gpointer data)
+goto_dialog_init_widgets (GoToDialog *dlg)
{
- gnome_calendar_goto_today (gnome_calendar);
- gtk_widget_destroy (goto_win);
+ GtkWidget *menu;
+ GtkAdjustment *adj;
+ GList *l;
+
+ menu = gtk_option_menu_get_menu (GTK_OPTION_MENU (dlg->month));
+ for (l = GTK_MENU_SHELL (menu)->children; l != NULL; l = l->next)
+ gtk_signal_connect (GTK_OBJECT (menu), "selection_done",
+ GTK_SIGNAL_FUNC (month_changed), dlg);
+
+ adj = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (dlg->year));
+ gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
+ (GtkSignalFunc) year_changed, dlg);
+
+ gtk_signal_connect (GTK_OBJECT (dlg->ecal->calitem),
+ "selection_changed",
+ (GtkSignalFunc) ecal_event,
+ dlg);
}
/* Creates a "goto date" dialog and runs it */
void
goto_dialog (GnomeCalendar *gcal)
{
+ GtkWidget *menu;
time_t start_time;
- GtkWidget *vbox;
- GtkWidget *hbox;
- GtkWidget *w;
- GtkWidget *days;
struct tm tm;
+ int b;
- gnome_calendar = gcal;
- current_index = -1;
+ if (dlg) {
+ return;
+ }
+
+ dlg = g_new0 (GoToDialog, 1);
+
+ /* Load the content widgets */
+ dlg->xml = glade_xml_new (EVOLUTION_GLADEDIR "/goto-dialog.glade", NULL);
+ if (!dlg->xml) {
+ g_message ("goto_dialog(): Could not load the Glade XML file!");
+ return;
+ }
- gnome_calendar_get_selected_time_range (gnome_calendar, &start_time, NULL);
+ if (!get_widgets (dlg)) {
+ g_message ("goto_dialog(): Could not find all widgets in the XML file!");
+ return;
+ }
+ dlg->gcal = gcal;
+ gnome_calendar_get_selected_time_range (dlg->gcal, &start_time, NULL);
tm = *localtime (&start_time);
+ dlg->year_val = tm.tm_year + 1900;
+ dlg->month_val = tm.tm_mon;
+ dlg->day_val = tm.tm_mday;
- goto_win = gnome_dialog_new (_("Go to date"),
- GNOME_STOCK_BUTTON_CANCEL,
- NULL);
- gnome_dialog_set_parent (GNOME_DIALOG (goto_win),
- GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (gcal))));
-
+ menu = gtk_option_menu_get_menu (GTK_OPTION_MENU (dlg->month));
+ gtk_option_menu_set_history (GTK_OPTION_MENU (dlg->month), dlg->month_val);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (dlg->year), dlg->year_val);
- vbox = GNOME_DIALOG (goto_win)->vbox;
-
- /* Instructions */
-
- w = gtk_label_new (_("Please select the date you want to go to.\n"
- "When you click on a day, you will be taken\n"
- "to that date."));
- gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_LEFT);
- gtk_misc_set_alignment (GTK_MISC (w), 0.0, 0.0);
- gtk_box_pack_start (GTK_BOX (vbox), w, FALSE, FALSE, 0);
- gtk_widget_show (w);
-
- /* Create month item before creating the year controls, since the
- * latter ones need the month_item to be created.
- */
-
- days = create_days (tm.tm_mday, tm.tm_mon, tm.tm_year + 1900);
-
- /* Year */
-
- w = create_year (tm.tm_year + 1900);
- gtk_box_pack_start (GTK_BOX (vbox), w, FALSE, FALSE, 0);
- gtk_widget_show (w);
-
- /* Month */
-
- w = create_months (tm.tm_mon);
- gtk_box_pack_start (GTK_BOX (vbox), w, FALSE, FALSE, 0);
- gtk_widget_show (w);
-
- /* Days (canvas with month item) */
-
- gtk_box_pack_start (GTK_BOX (vbox), days, TRUE, TRUE, 0);
- gtk_widget_show (days);
-
- /* Today button */
+ dlg->ecal = create_ecal ();
+ gtk_box_pack_start (GTK_BOX (dlg->vbox), GTK_WIDGET (dlg->ecal), TRUE, TRUE, 0);
+ gtk_widget_show (GTK_WIDGET (dlg->ecal));
- hbox = gtk_hbox_new (FALSE, 0);
- gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
- gtk_widget_show (hbox);
+ goto_dialog_init_widgets (dlg);
- w = gtk_button_new_with_label (_("Go to today"));
- gtk_signal_connect (GTK_OBJECT (w), "clicked",
- (GtkSignalFunc) goto_today,
- NULL);
- gtk_box_pack_start (GTK_BOX (hbox), w, FALSE, FALSE, 0);
- gtk_widget_show (w);
+ gnome_dialog_set_parent (GNOME_DIALOG (dlg->dialog),
+ GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (gcal))));
- /* Run! */
+ b = gnome_dialog_run_and_close (GNOME_DIALOG (dlg->dialog));
+ if (b == 0)
+ goto_today (dlg);
- gtk_window_set_modal (GTK_WINDOW (goto_win), TRUE);
- gnome_dialog_set_close (GNOME_DIALOG (goto_win), TRUE);
- gnome_dialog_set_parent (GNOME_DIALOG (goto_win),
- GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (gnome_calendar))));
- gtk_widget_show (goto_win);
+ gtk_object_unref (GTK_OBJECT (dlg->xml));
+ g_free (dlg);
+ dlg = NULL;
}
diff --git a/calendar/gui/goto.h b/calendar/gui/goto.h
new file mode 100644
index 0000000000..f0dc41feba
--- /dev/null
+++ b/calendar/gui/goto.h
@@ -0,0 +1,29 @@
+/* Evolution calendar - Go To Date dialog
+ *
+ * Copyright (C) 2000 Helix Code, Inc.
+ *
+ * Author: JP Rosevear <jpr@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 GOTO_DIALOG_H
+#define GOTO_DIALOG_H
+
+#include "gnome-cal.h"
+
+void goto_dialog (GnomeCalendar *gcal);
+
+#endif
diff --git a/widgets/misc/ChangeLog b/widgets/misc/ChangeLog
index 63a790ba23..afc608faa2 100644
--- a/widgets/misc/ChangeLog
+++ b/widgets/misc/ChangeLog
@@ -1,3 +1,24 @@
+2000-12-22 JP Rosevear <jpr@helixcode.com>
+
+ * e-calendar-item.h: add prototypes
+
+ * e-calendar-item.c (e_calendar_item_init): Set max_days_selected to
+ 1 and days_to_start_week_selection to -1 as documented in header
+ (e_calendar_item_set_arg): use new accessor methods
+ (e_calendar_item_get_arg): ditto
+ (e_calendar_item_get_max_days_sel): accessor
+ (e_calendar_item_set_max_days_sel): ditto
+ (e_calendar_item_get_days_start_week_sel): ditto
+ (e_calendar_item_set_days_start_week_sel): ditto
+ (e_calendar_item_class_init): add display_popup argument
+ (e_calendar_item_init): initialize display_popup member
+ (e_calendar_item_get_arg): get display_popup member
+ (e_calendar_item_set_arg): set display_popup member
+ (e_calendar_item_button_press): only show the popup menu if the
+ member is set
+ (e_calendar_item_get_display_popup): acessor
+ (e_calendar_item_set_display_popup): ditto
+
2000-12-14 Federico Mena Quintero <federico@helixcode.com>
* e-dateedit.h: #include <time.h>
diff --git a/widgets/misc/e-calendar-item.c b/widgets/misc/e-calendar-item.c
index 8e0ff1f604..6442d7d7a5 100644
--- a/widgets/misc/e-calendar-item.c
+++ b/widgets/misc/e-calendar-item.c
@@ -240,7 +240,8 @@ enum {
ARG_MAXIMUM_DAYS_SELECTED,
ARG_DAYS_TO_START_WEEK_SELECTION,
ARG_MOVE_SELECTION_WHEN_MOVING,
- ARG_ROUND_SELECTION_WHEN_MOVING
+ ARG_ROUND_SELECTION_WHEN_MOVING,
+ ARG_DISPLAY_POPUP
};
enum {
@@ -330,6 +331,9 @@ e_calendar_item_class_init (ECalendarItemClass *class)
gtk_object_add_arg_type ("ECalendarItem::round_selection_when_moving",
GTK_TYPE_BOOL, GTK_ARG_READWRITE,
ARG_ROUND_SELECTION_WHEN_MOVING);
+ gtk_object_add_arg_type ("ECalendarItem::display_popup",
+ GTK_TYPE_BOOL, GTK_ARG_READWRITE,
+ ARG_DISPLAY_POPUP);
e_calendar_item_signals[DATE_RANGE_CHANGED] =
gtk_signal_new ("date_range_changed",
@@ -393,11 +397,12 @@ e_calendar_item_init (ECalendarItem *calitem)
calitem->show_week_numbers = FALSE;
calitem->week_start_day = 0;
calitem->expand = TRUE;
- calitem->max_days_selected = 42;
- calitem->days_to_start_week_selection = 9;
+ calitem->max_days_selected = 1;
+ calitem->days_to_start_week_selection = -1;
calitem->move_selection_when_moving = TRUE;
calitem->round_selection_when_moving = FALSE;
-
+ calitem->display_popup = TRUE;
+
calitem->x1 = 0.0;
calitem->y1 = 0.0;
calitem->x2 = 0.0;
@@ -503,10 +508,10 @@ e_calendar_item_get_arg (GtkObject *o, GtkArg *arg, guint arg_id)
GTK_VALUE_BOOL (*arg) = calitem->show_week_numbers;
break;
case ARG_MAXIMUM_DAYS_SELECTED:
- GTK_VALUE_INT (*arg) = calitem->max_days_selected;
+ GTK_VALUE_INT (*arg) = e_calendar_item_get_max_days_sel (calitem);
break;
case ARG_DAYS_TO_START_WEEK_SELECTION:
- GTK_VALUE_INT (*arg) = calitem->days_to_start_week_selection;
+ GTK_VALUE_INT (*arg) = e_calendar_item_get_days_start_week_sel (calitem);
break;
case ARG_MOVE_SELECTION_WHEN_MOVING:
GTK_VALUE_BOOL (*arg) = calitem->move_selection_when_moving;
@@ -514,6 +519,11 @@ e_calendar_item_get_arg (GtkObject *o, GtkArg *arg, guint arg_id)
case ARG_ROUND_SELECTION_WHEN_MOVING:
GTK_VALUE_BOOL (*arg) = calitem->round_selection_when_moving;
break;
+ case ARG_DISPLAY_POPUP:
+ GTK_VALUE_BOOL (*arg) = e_calendar_item_get_display_popup (calitem);
+ break;
+ default:
+ g_warning ("Invalid arg");
}
}
@@ -639,12 +649,11 @@ e_calendar_item_set_arg (GtkObject *o, GtkArg *arg, guint arg_id)
break;
case ARG_MAXIMUM_DAYS_SELECTED:
ivalue = GTK_VALUE_INT (*arg);
- ivalue = MAX (1, ivalue);
- calitem->max_days_selected = ivalue;
+ e_calendar_item_set_max_days_sel (calitem, ivalue);
break;
case ARG_DAYS_TO_START_WEEK_SELECTION:
ivalue = GTK_VALUE_INT (*arg);
- calitem->days_to_start_week_selection = ivalue;
+ e_calendar_item_set_days_start_week_sel (calitem, ivalue);
break;
case ARG_MOVE_SELECTION_WHEN_MOVING:
bvalue = GTK_VALUE_BOOL (*arg);
@@ -654,6 +663,10 @@ e_calendar_item_set_arg (GtkObject *o, GtkArg *arg, guint arg_id)
bvalue = GTK_VALUE_BOOL (*arg);
calitem->round_selection_when_moving = bvalue;
break;
+ case ARG_DISPLAY_POPUP:
+ bvalue = GTK_VALUE_BOOL (*arg);
+ e_calendar_item_set_display_popup (calitem, bvalue);
+ break;
default:
g_warning ("Invalid arg");
}
@@ -1620,7 +1633,8 @@ e_calendar_item_button_press (ECalendarItem *calitem,
&all_week))
return FALSE;
- if (event->button.button == 3 && day == -1) {
+ if (event->button.button == 3 && day == -1
+ && e_calendar_item_get_display_popup (calitem)) {
e_calendar_item_show_popup_menu (calitem,
(GdkEventButton*) event,
month_offset);
@@ -2147,6 +2161,55 @@ e_calendar_item_set_first_month(ECalendarItem *calitem,
gnome_canvas_item_request_update (GNOME_CANVAS_ITEM (calitem));
}
+/* Get the maximum number of days selectable */
+gint
+e_calendar_item_get_max_days_sel (ECalendarItem *calitem)
+{
+ return calitem->max_days_selected;
+}
+
+
+/* Set the maximum number of days selectable */
+void
+e_calendar_item_set_max_days_sel (ECalendarItem *calitem,
+ gint days)
+{
+ calitem->max_days_selected = MAX (1, days);
+}
+
+
+/* Get the maximum number of days selectable */
+gint
+e_calendar_item_get_days_start_week_sel(ECalendarItem *calitem)
+{
+ return calitem->days_to_start_week_selection;
+}
+
+
+/* Set the maximum number of days selectable */
+void
+e_calendar_item_set_days_start_week_sel(ECalendarItem *calitem,
+ gint days)
+{
+ calitem->days_to_start_week_selection = days;
+}
+
+/* Set the maximum number of days before whole weeks are selected */
+gboolean
+e_calendar_item_get_display_popup (ECalendarItem *calitem)
+{
+ return calitem->display_popup;
+}
+
+
+/* Get the maximum number of days before whole weeks are selected */
+void
+e_calendar_item_set_display_popup (ECalendarItem *calitem,
+ gboolean display)
+{
+ calitem->display_popup = display;
+}
+
/* This will make sure that the given year & month are valid, i.e. if month
is < 0 or > 11 the year and month will be updated accordingly. */
diff --git a/widgets/misc/e-calendar-item.h b/widgets/misc/e-calendar-item.h
index a5a871228a..f638b16573 100644
--- a/widgets/misc/e-calendar-item.h
+++ b/widgets/misc/e-calendar-item.h
@@ -135,6 +135,9 @@ struct _ECalendarItem
move back/forward one month. Used for the week view. */
gboolean round_selection_when_moving;
+ /* Whether to display the pop-up, TRUE by default */
+ gboolean display_popup;
+
/*
* Internal stuff.
*/
@@ -230,6 +233,34 @@ void e_calendar_item_set_first_month (ECalendarItem *calitem,
gint year,
gint month);
+/* Get the maximum number of days selectable */
+gint e_calendar_item_get_max_days_sel (ECalendarItem *calitem);
+
+/* Set the maximum number of days selectable */
+void e_calendar_item_set_max_days_sel (ECalendarItem *calitem,
+ gint days);
+
+/* Get the maximum number of days selectable */
+gint e_calendar_item_get_days_start_week_sel(ECalendarItem *calitem);
+
+/* Get the maximum number of days before whole weeks are selected */
+void e_calendar_item_set_days_start_week_sel(ECalendarItem *calitem,
+ gint days);
+
+/* Set the maximum number of days before whole weeks are selected */
+gboolean e_calendar_item_get_display_popup (ECalendarItem *calitem);
+
+/* Get the maximum number of days before whole weeks are selected */
+void e_calendar_item_set_display_popup (ECalendarItem *calitem,
+ gboolean display);
+
+/* Set the maximum number of days before whole weeks are selected */
+gint e_calendar_item_get_days_start_week_sel(ECalendarItem *calitem);
+
+/* Set the maximum number of days selectable */
+void e_calendar_item_set_days_start_week_sel(ECalendarItem *calitem,
+ gint days);
+
/* Returns the range of dates actually shown. Months are 0 to 11.
This also includes the last days of the previous month and the first days
of the following month, which are normally shown in gray. */