diff options
Diffstat (limited to 'calendar/gui/main.c')
-rw-r--r-- | calendar/gui/main.c | 434 |
1 files changed, 0 insertions, 434 deletions
diff --git a/calendar/gui/main.c b/calendar/gui/main.c deleted file mode 100644 index 46f4c31e3e..0000000000 --- a/calendar/gui/main.c +++ /dev/null @@ -1,434 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * Main file for the GNOME Calendar program - * Copyright (C) 1998 the Free Software Foundation - * - * Authors: - * Miguel de Icaza (miguel@kernel.org) - * Federico Mena (federico@helixcode.com) - */ - -#include <config.h> - -#include <pwd.h> -#include <unistd.h> -#include <sys/types.h> -#include <sys/stat.h> -#include <string.h> -#include <ctype.h> -#include <errno.h> -#include <gnome.h> -#include <libgnorba/gnorba.h> -#include <bonobo.h> -#include <cal-util/timeutil.h> -#include <gui/alarm.h> -#include <gui/eventedit.h> -#include <gui/gnome-cal.h> -#include <gui/calendar-commands.h> - - -enum { - GEOMETRY_KEY = -1, - USERFILE_KEY = -2, - VIEW_KEY = -3, - HIDDEN_KEY = -4, - TODO_KEY = -5, - DEBUG_KEY = -6 -}; - -/* Lists used to startup various GnomeCalendars */ -static GList *start_calendars; -static GList *start_geometries; -static GList *start_views; - -/* For dumping part of a calendar */ -static time_t from_t, to_t; - -/* If set, show events for the specified date and quit */ -/*static int show_events;*/ - -/* If set, show todo items quit */ -/*static int show_todo;*/ - -/* If true, do not show our top level window */ -int startup_hidden = 0; - -/* File to load instead of the user default's file */ -static char *load_file; - -extern time_t get_date (); - -static void -process_dates (void) -{ - if (!from_t) - from_t = time_day_begin (time (NULL)); - - if (!to_t || to_t < from_t) - to_t = time_add_day (from_t, 1); -} - - -static int -same_day (struct tm *a, struct tm *b) -{ - return (a->tm_mday == b->tm_mday && - a->tm_mon == b->tm_mon && - a->tm_year == b->tm_year); -} - - -#if 0 -static void -dump_events (void) -{ - CalClient *calc; - gboolean r; - GList *l; - time_t now = time (NULL); - struct tm today = *localtime (&now); - - process_dates (); - init_calendar (); - - /* FIXME: this is not waiting for the calendar to be loaded */ - - /* DELETE - cal = calendar_new (full_name, CALENDAR_INIT_ALARMS); - s = calendar_load (cal, load_file ? load_file : user_calendar_file); - if (s){ - printf ("error: %s\n", s); - exit (1); - } - */ - - r = cal_client_load_calendar (calc, - load_file ? load_file : user_calendar_file); - if (r == FALSE) { - printf ("error: loading %s\n", - load_file ? load_file : user_calendar_file); - exit (1); - } - l = calendar_get_events_in_range (calc, from_t, to_t); - - for (; l; l = l->next){ - char start [80], end [80]; - CalendarObject *co = l->data; - struct tm ts, te; - char *format; - - ts = *localtime (&co->ev_start); - te = *localtime (&co->ev_end); - - if (same_day (&today, &ts)) - format = N_("%H:%M"); - else - format = N_("%A %b %d, %H:%M"); - strftime (start, sizeof (start), _(format), &ts); - - if (!same_day (&ts, &te)) - format = N_("%A %b %d, %H:%M"); - strftime (end, sizeof (start), _(format), &te); - - printf ("%s -- %s\n", start, end); - printf (" %s\n", co->ico->summary); - } - /* calendar_destroy_event_list (l); DELETE / FIXME */ - /* calendar_destroy (cal); DELETE */ - exit (0); -} -#endif /* 0 */ - - -#if 0 -static void -dump_todo (void) -{ - CalClient *calc; - gboolean r; - GList *l; - - process_dates (); - init_calendar (); - - /* FIXME: this is not waiting for the calendar to be loaded */ - - /* DELETE - cal = calendar_new (full_name, CALENDAR_INIT_ALARMS); - s = calendar_load (cal, load_file ? load_file : user_calendar_file); - if (s){ - printf ("error: %s\n", s); - exit (1); - } - */ - - r = cal_client_load_calendar (calc, - load_file ? load_file : user_calendar_file); - if (r == FALSE) { - printf ("error: loading %s\n", - load_file ? load_file : user_calendar_file); - exit (1); - } - l = calendar_get_events_in_range (calc, from_t, to_t); - - for (; l; l = l->next){ - CalendarObject *co = l->data; - iCalObject *object = co->ico; - - if (object->type != ICAL_TODO) - continue; - - printf ("[%s]: %s\n",object->organizer->addr, object->summary); - } - /* calendar_destroy (cal); DELETE */ - exit (0); -} -#endif /* 0 */ - - -static void -session_die (void) -{ - quit_cmd (NULL, NULL, NULL); -} - -/* - * Save the session callback - */ -static int -session_save_state (GnomeClient *client, gint phase, GnomeRestartStyle save_style, gint shutdown, - GnomeInteractStyle interact_style, gint fast, gpointer client_data) -{ - char *sess_id; - char **argv = (char **) g_malloc (sizeof (char *) * ((active_calendars * 6) + 3)); - GList *l, *free_list = 0; - int i; - - sess_id = gnome_client_get_id (client); - - argv [0] = client_data; - for (i = 1, l = all_calendars; l; l = l->next){ - GnomeCalendar *gcal = GNOME_CALENDAR (l->data); - char *geometry; - - geometry = gnome_geometry_string (GTK_WIDGET (gcal)->window); - - /* FIX ME - if (strcmp (gcal->client->filename, user_calendar_file) == 0) - argv [i++] = "--userfile"; - else { - argv [i++] = "--file"; - argv [i++] = gcal->client->filename; - } - */ - - argv [i++] = "--geometry"; - argv [i++] = geometry; - argv [i++] = "--view"; - argv [i++] = gnome_calendar_get_current_view_name (gcal); - free_list = g_list_append (free_list, geometry); - } - argv [i] = NULL; - gnome_client_set_clone_command (client, i, argv); - gnome_client_set_restart_command (client, i, argv); - - for (l = free_list; l; l = l->next) - g_free (l->data); - g_list_free (free_list); - - return 1; -} - -static void -parse_an_arg (poptContext ctx, - enum poptCallbackReason reason, - const struct poptOption *opt, - char *arg, void *data) -{ - switch (opt->val){ - case 'f': - from_t = get_date (arg, NULL); - break; - - case 't': - to_t = get_date (arg, NULL); - break; - - case GEOMETRY_KEY: - start_geometries = g_list_append (start_geometries, arg); - break; - - case USERFILE_KEY: - /* This is a special key that tells the program to load - * the user's calendar file. This allows session management - * to work even if the User's home directory changes location - * (ie, on a networked setup). - */ - arg = COOKIE_USER_HOME_DIR; - /* fall through */ - break; - - case VIEW_KEY: - start_views = g_list_append (start_views, arg); - break; - - case 'F': - start_calendars = g_list_append (start_calendars, arg); - break; - - /* - case TODO_KEY: - show_todo = 1; - break; - */ - - /* - case 'e': - show_events = 1; - break; - */ - - case HIDDEN_KEY: - startup_hidden = 1; - break; - - case DEBUG_KEY: - if (!g_strcasecmp (arg, "alarms")) - debug_alarms = 1; - break; - - default: - } -} - - - - -static const struct poptOption options [] = { - { NULL, '\0', POPT_ARG_CALLBACK, parse_an_arg, 0, NULL, NULL }, - { "events", 'e', POPT_ARG_NONE, NULL, 'e', N_("Show events and quit"), - NULL }, - { "todo", 0, POPT_ARG_NONE, NULL, TODO_KEY, N_("Show TO-DO items and quit"), - NULL }, - { "from", 'f', POPT_ARG_STRING, NULL, 'f', N_("Specifies start date [for --events]"), N_("DATE") }, - { "file", 'F', POPT_ARG_STRING, NULL, 'F', N_("File to load calendar from"), N_("FILE") }, - { "userfile", '\0', POPT_ARG_NONE, NULL, USERFILE_KEY, N_("Load the user calendar"), NULL }, - { "geometry", '\0', POPT_ARG_STRING, NULL, GEOMETRY_KEY, N_("Geometry for starting up"), N_("GEOMETRY") }, - { "view", '\0', POPT_ARG_STRING, NULL, VIEW_KEY, N_("The startup view mode (dayview, weekview, monthview, yearview)"), N_("VIEW") }, - { "to", 't', POPT_ARG_STRING, NULL, 't', N_("Specifies ending date [for --events]"), N_("DATE") }, - { "hidden", 0, POPT_ARG_NONE, NULL, HIDDEN_KEY, N_("If used, starts in iconic mode"), NULL }, - { "debug", 'd', POPT_ARG_STRING, NULL, DEBUG_KEY, N_("Enable debugging output of TYPE (alarms)"), N_("TYPE") }, - { NULL, '\0', 0, NULL, 0} -}; - - -int -main (int argc, char **argv) -{ - GnomeClient *client; - GtkWidget *cal_window; - GnomeCalendar *cal_frame; - - bindtextdomain (PACKAGE, GNOMELOCALEDIR); - textdomain (PACKAGE); - -#ifdef USING_OAF - gnome_init_with_popt_table ("calendar", VERSION, argc, argv, oaf_popt_options, - 0, NULL); - oaf_init (argc, argv); -#else - { - CORBA_Environment ev; - - CORBA_exception_init (&ev); - gnome_CORBA_init_with_popt_table ("calendar", VERSION, &argc, argv, - options, 0, NULL, 0, &ev); - if (ev._major != CORBA_NO_EXCEPTION) { - g_message ("main(): could not initialize the ORB"); - CORBA_exception_free (&ev); - exit (EXIT_FAILURE); - } - CORBA_exception_free (&ev); - } -#endif - - if (!bonobo_init (CORBA_OBJECT_NIL, CORBA_OBJECT_NIL, CORBA_OBJECT_NIL)) { - g_message ("main(): could not initialize Bonobo"); - exit (EXIT_FAILURE); - } - - process_dates (); - -# if 0 - if (show_events) - dump_events (); - - if (show_todo) - dump_todo (); -# endif /* 0 */ - - client = gnome_master_client (); - if (client) { - gtk_signal_connect (GTK_OBJECT (client), "save_yourself", - GTK_SIGNAL_FUNC (session_save_state), argv [0]); - gtk_signal_connect (GTK_OBJECT (client), "die", - GTK_SIGNAL_FUNC (session_die), NULL); - } - - alarm_init (); - init_calendar (); - - /* FIXME: the following is broken-ish, since geometries/views are not matched - * to calendars, but they are just picked in whatever order they came in - * from the command line. - */ - - /* Load all of the calendars specified in the command line with the - * geometry specified, if any. - */ - if (start_calendars) { - GList *p, *g, *v; - char *title; - - p = start_calendars; - g = start_geometries; - v = start_views; - - while (p) { - char *file = p->data; - char *geometry = g ? g->data : NULL; - char *page_name = v ? v->data : NULL; - - if (file == COOKIE_USER_HOME_DIR) - file = user_calendar_file; - - if (strcmp (file, user_calendar_file) == 0) - title = full_name; - else - title = file; - - cal_window = gtk_window_new (GTK_WINDOW_TOPLEVEL); - cal_frame = new_calendar (title, file, geometry, page_name, startup_hidden); - gtk_container_add (GTK_CONTAINER (cal_window), GTK_WIDGET (cal_frame)); - gtk_widget_show (cal_window); - - p = p->next; - if (g) - g = g->next; - if (v) - v = v->next; - } - g_list_free (p); - } else { - char *geometry = start_geometries ? start_geometries->data : NULL; - char *page_name = start_views ? start_views->data : NULL; - - cal_window = gtk_window_new (GTK_WINDOW_TOPLEVEL); - cal_frame = new_calendar (full_name, user_calendar_file, geometry, page_name, startup_hidden); - gtk_container_add (GTK_CONTAINER (cal_window), GTK_WIDGET (cal_frame)); - gtk_widget_show (cal_window); - } - - bonobo_main (); - return 0; -} |