diff options
Diffstat (limited to 'calendar/gui/main.c')
-rw-r--r-- | calendar/gui/main.c | 218 |
1 files changed, 218 insertions, 0 deletions
diff --git a/calendar/gui/main.c b/calendar/gui/main.c new file mode 100644 index 0000000000..941efe1c2b --- /dev/null +++ b/calendar/gui/main.c @@ -0,0 +1,218 @@ +/* + * GnomeCalendar widget + * Copyright (C) 1998 the Free Software Foundation + * + * Authors: + * Miguel de Icaza (miguel@kernel.org) + */ +#include <config.h> +#include <gnome.h> +#include <pwd.h> +#include <sys/types.h> +#include "calendar.h" +#include "gnome-cal.h" + +/* The username, used to set the `owner' field of the event */ +char *user_name; + +/* The full user name from the Gecos field */ +char *full_name; + +/* The user's default calendar file */ +char *user_calendar_file; + +/* a gnome-config string prefix that can be used to access the calendar config info */ +char *calendar_settings; + +/* Day begin, day end parameters */ +int day_begin, day_end; + +/* Number of calendars active */ +int active_calendars = 0; + +void +init_username (void) +{ + char *p; + struct passwd *passwd; + + passwd = getpwuid (getuid ()); + if ((p = passwd->pw_name)){ + user_name = g_strdup (p); + full_name = g_strdup (passwd->pw_gecos); + } else { + if ((p = getenv ("USER"))){ + user_name = g_strdup (p); + full_name = g_strdup (p); + return; + } else { + user_name = g_strdup ("unknown"); + full_name = g_strdup ("unknown"); + } + } + endpwent (); +} + +int +range_check_hour (int hour) +{ + if (hour < 0) + hour = 0; + if (hour > 24) + hour = 23; + return hour; +} + +/* + * Initializes the calendar internal variables, loads defaults + */ +void +init_calendar (void) +{ + init_username (); + user_calendar_file = g_concat_dir_and_file (gnome_util_user_home (), ".gnome/user-cal.vcf"); + calendar_settings = g_copy_strings ("=", gnome_util_user_home (), ".gnome/calendar=", NULL); + + gnome_config_push_prefix (calendar_settings); + day_begin = range_check_hour (gnome_config_get_int ("/Calendar/Day start=8")); + day_end = range_check_hour (gnome_config_get_int ("/Calendar/Day end=17")); + + if (day_end < day_begin){ + day_begin = 8; + day_end = 17; + } + gnome_config_pop_prefix (); +} + +void +new_calendar_cmd (GtkWidget *widget, void *data) +{ +} + +void +open_calendar_cmd (GtkWidget *widget, void *data) +{ +} + +void +save_calendar_cmd (GtkWidget *widget, void *data) +{ +} + +void +about_calendar_cmd (GtkWidget *widget, void *data) +{ + + GtkWidget *about; + gchar *authors[] = { + "Miguel de Icaza (miguel@kernel.org)", + "Federico Mena (federico@gimp.org)", + NULL + }; + + about = gnome_about_new (_("Gnome Calendar"), VERSION, + "(C) 1998 the Free Software Fundation", + authors, + _("The GNOME personal calendar and schedule manager."), + NULL); + gtk_widget_show (about); +} + +void +quit_cmd (GtkWidget *widget, GnomeCalendar *gcal) +{ + /* FIXME: check all of the calendars for their state (modified) */ + + gtk_main_quit (); +} + +void +close_cmd (GtkWidget *widget, GnomeCalendar *gcal) +{ + if (gcal->cal->modified){ + gnome_message_box_new (_("The calendar has unsaved changes, Save them?"), + GNOME_MESSAGE_BOX_WARNING, + "Yes", "No"); + } + gtk_widget_destroy (widget); + active_calendars--; + + if (active_calendars == 0) + gtk_main_quit (); +} + +GnomeUIInfo gnome_cal_file_menu [] = { + { GNOME_APP_UI_ITEM, N_("New calendar"), NULL, new_calendar_cmd }, + + { GNOME_APP_UI_ITEM, N_("Open calendar"), NULL, open_calendar_cmd, NULL, NULL, + GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_OPEN }, + + { GNOME_APP_UI_ITEM, N_("Save calendar"), NULL, save_calendar_cmd, NULL, NULL, + GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_SAVE }, + + { GNOME_APP_UI_SEPARATOR }, + { GNOME_APP_UI_ITEM, N_("Close"), NULL, close_cmd, NULL, NULL, + GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_EXIT }, + + { GNOME_APP_UI_ITEM, N_("Exit"), NULL, quit_cmd, NULL, NULL, + GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_EXIT }, + + GNOMEUIINFO_END +}; + +GnomeUIInfo gnome_cal_about_menu [] = { + { GNOME_APP_UI_ITEM, N_("About"), NULL, about_calendar_cmd, NULL, NULL, + GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_ABOUT }, + GNOMEUIINFO_HELP ("midnight-commander"), + GNOMEUIINFO_END +}; + +GnomeUIInfo gnome_cal_menu [] = { + { GNOME_APP_UI_SUBTREE, N_("File"), NULL, &gnome_cal_file_menu }, + { GNOME_APP_UI_SUBTREE, N_("Help"), NULL, &gnome_cal_about_menu }, + GNOMEUIINFO_END +}; + +static void +setup_menu (GtkWidget *gcal) +{ + gnome_app_create_menus_with_data (GNOME_APP (gcal), gnome_cal_menu, gcal); +} + +static void +new_calendar (char *full_name, char *calendar_file) +{ + GtkWidget *toplevel; + char *title; + + title = g_copy_strings (full_name, "'s calendar", NULL); + + toplevel = gnome_calendar_new (title); + setup_menu (toplevel); + gtk_widget_show (toplevel); + + if (g_file_exists (calendar_file)) + gnome_calendar_load (calendar_file); + active_calendars++; +} + +int +main(int argc, char *argv[]) +{ + GnomeClient *client; + + argp_program_version = VERSION; + + /* Initialise the i18n stuff */ + bindtextdomain(PACKAGE, GNOMELOCALEDIR); + textdomain(PACKAGE); + + gnome_init ("gncal", NULL, argc, argv, 0, NULL); + + init_calendar (); + + new_calendar (full_name, user_calendar_file); + gtk_main (); +} + + |