aboutsummaryrefslogtreecommitdiffstats
path: root/calendar/gncal.c
diff options
context:
space:
mode:
Diffstat (limited to 'calendar/gncal.c')
-rw-r--r--calendar/gncal.c449
1 files changed, 449 insertions, 0 deletions
diff --git a/calendar/gncal.c b/calendar/gncal.c
new file mode 100644
index 0000000000..09bd007587
--- /dev/null
+++ b/calendar/gncal.c
@@ -0,0 +1,449 @@
+/*
+ * gnlp.c: LPQ/LPR stuff
+ */
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <dirent.h>
+#include <stdio.h>
+#include <errno.h>
+#include <unistd.h>
+#include <time.h>
+#include <string.h>
+#include <gtk/gtk.h>
+#include <gnome.h>
+
+#include "gncal.h"
+#include "menus.h"
+#include "calcs.h"
+
+
+#define DAY_ARRAY_MAX 35
+/* The naughty global variables */
+int curr_day, old_day;
+int curr_month, old_month;
+int curr_year, old_year;
+GtkWidget *month_label;
+GtkWidget *year_label;
+GtkWidget *dailylist;
+GtkWidget *calendar_days[DAY_ARRAY_MAX];
+GtkWidget *calendar_buttons[DAY_ARRAY_MAX];
+
+
+
+/* place marker until i get get something better */
+void print_error(char *text)
+{
+ GtkWidget *msgbox;
+ char buf[512];
+
+ if (errno == 0)
+ sprintf(buf, "%s", text);
+ else
+ sprintf(buf, "%s (%s)", text, g_strerror(errno));
+
+ g_warning("%s\n", buf);
+ msgbox = gnome_messagebox_new(buf, "error", "OK", NULL, NULL);
+
+ gtk_widget_show(msgbox);
+}
+
+
+void menu_file_quit(GtkWidget *widget, gpointer data)
+{
+ gtk_exit(0);
+}
+
+void menu_help_about(GtkWidget *widget, gpointer data)
+{
+ GtkWidget *msgbox;
+ msgbox = gnome_messagebox_new("gncal v0.01 by Craig Small <csmall@small.dropbear.id.au>", "info", "OK", NULL, NULL);
+ gtk_widget_show(msgbox);
+}
+
+void dailylist_item_select(GtkWidget *widget, gpointer data)
+{
+ int *x = (int*)data;
+
+ g_print("Selected %d\n", x);
+}
+
+void update_today_list(void)
+{
+ GtkWidget *listitem;
+ GtkWidget *list_hbox;
+ GtkWidget *hour_label;
+ GtkWidget *event_label;
+ char buf[50];
+ int tmphr, tmpmin,i;
+
+}
+
+/*
+ * updates the calendar that appears in the left collumn
+ */
+void update_calendar()
+{
+ int tmpday;
+ int i;
+ char buf[50];
+ int month_changed;
+ static int offset;
+
+ /* Only update the whole calendar if the year or month has changed */
+ tmpday=1;
+ month_changed = FALSE;
+ if (curr_month != old_month || curr_year != old_year) {
+ month_changed = TRUE;
+ offset = weekday_of_date(tmpday, curr_month, curr_year) - 1;
+ }
+
+ for(i=0; i < DAY_ARRAY_MAX; i++) {
+ tmpday = i - offset +1;
+ if (valid_date(tmpday, curr_month, curr_year)) {
+ sprintf(buf, "%2d", tmpday);
+ /*if (month_changed) {*/
+ gtk_label_set(GTK_LABEL(calendar_days[i]), buf);
+ gtk_widget_show(calendar_buttons[i]);
+ /*}*/
+ if (tmpday == curr_day) {
+ gtk_container_border_width(GTK_CONTAINER(calendar_buttons[i]), 2);
+ gtk_widget_show(calendar_buttons[i]);
+ } else {
+ gtk_container_border_width(GTK_CONTAINER(calendar_buttons[i]), 0);
+ }
+ } else if (month_changed) {
+ gtk_label_set(GTK_LABEL(calendar_days[i]), "");
+ gtk_widget_hide(calendar_buttons[i]);
+ gtk_container_border_width(GTK_CONTAINER(calendar_buttons[i]), 0);
+ }
+ } /* for i */
+
+}
+
+/*
+ * Updates all the main window widgets when the current day of interest is
+ * changed
+ */
+void update_today(void)
+{
+ char buf[50];
+
+ /* This needs to be fixed to get the right date order for the country*/
+ if (curr_month != old_month) {
+ gtk_label_set(GTK_LABEL(month_label), month_name(curr_month));
+ }
+ if (curr_year != old_year) {
+ sprintf(buf, "%4d", curr_year);
+ gtk_label_set(GTK_LABEL(year_label), buf);
+ }
+ update_today_list();
+ update_calendar();
+}
+
+void next_day_but_clicked(GtkWidget *widget, gpointer data)
+{
+ old_day = curr_day;
+ old_month = curr_month;
+ old_year = curr_year;
+ next_date(&curr_day, &curr_month, &curr_year);
+ update_today();
+}
+
+void prev_day_but_clicked(GtkWidget *widget, gpointer data)
+{
+ old_day = curr_day;
+ old_month = curr_month;
+ old_year = curr_year;
+ prev_date(&curr_day, &curr_month, &curr_year);
+ update_today();
+}
+
+void today_but_clicked(GtkWidget *widget, gpointer data)
+{
+ old_day = curr_day;
+ old_month = curr_month;
+ old_year = curr_year;
+ get_system_date(&curr_day, &curr_month, &curr_year);
+ update_today();
+}
+
+void prev_month_but_clicked(GtkWidget *widget, gpointer data)
+{
+ if (curr_year == 0 && curr_month == MONTH_MIN)
+ return;
+ old_day = curr_day;
+ old_month = curr_month;
+ old_year = curr_year;
+ curr_month--;
+ if (curr_month < MONTH_MIN) {
+ curr_month = MONTH_MAX;
+ curr_year--;
+ }
+ update_today();
+}
+
+void next_month_but_clicked(GtkWidget *widget, gpointer data)
+{
+ if (curr_year == 3000 && curr_month == MONTH_MAX)
+ return;
+ old_day = curr_day;
+ old_month = curr_month;
+ old_year = curr_year;
+ curr_month++;
+ if (curr_month > MONTH_MAX ) {
+ curr_month = MONTH_MIN;
+ curr_year++;
+ }
+ update_today();
+}
+
+void prev_year_but_clicked(GtkWidget *widget, gpointer data)
+{
+ if (curr_year == 0)
+ return;
+
+ old_day = curr_day;
+ old_month = curr_month;
+ old_year = curr_year;
+ curr_year--;
+ update_today();
+}
+
+
+void next_year_but_clicked(GtkWidget *widget, gpointer data)
+{
+ if (curr_year == 3000)
+ return;
+
+ old_day = curr_day;
+ old_month = curr_month;
+ old_year = curr_year;
+ curr_year++;
+ update_today();
+}
+
+
+void calendar_but_clicked(GtkWidget *widget, gpointer data)
+{
+ char *ptr;
+ int x;
+
+ ptr = GTK_LABEL(GTK_BUTTON(widget)->child)->label;
+ x = atoi(ptr);
+
+ if (valid_date(x, curr_month, curr_year)) {
+ old_day = curr_day;
+ old_month = curr_month;
+ old_year = curr_year;
+ curr_day = x;
+ update_today();
+ }
+}
+
+void test_foreach(GtkWidget *widget, gpointer data)
+{
+ char *ptr;
+
+ ptr = GTK_LABEL(GTK_BUTTON(widget)->child)->label;
+ g_print("%s\n", ptr);
+}
+
+void show_main_window()
+{
+ GtkWidget *window;
+ GtkWidget *main_vbox;
+ GtkWidget *menubar;
+ GtkAcceleratorTable *accel;
+ GtkWidget *main_hbox;
+ GtkWidget *left_vbox;
+ GtkWidget *right_vbox;
+ GtkWidget *date_hbox;
+ GtkWidget *prev_mth_but;
+ GtkWidget *next_mth_but;
+ GtkWidget *prev_year_but;
+ GtkWidget *next_year_but;
+ GtkWidget *day_but_hbox;
+ GtkWidget *prev_day_but;
+ GtkWidget *today_but;
+ GtkWidget *next_day_but;
+ GtkWidget *separator;
+ GtkWidget *cal_table;
+ GtkWidget *day_name_label;
+ GtkWidget *scrolledwindow;
+ GtkWidget *scroll_hbox;
+ GtkWidget *hour_list;
+ GtkWidget *list_item;
+ GtkWidget *dailylist_item;
+ GtkWidget *event_label;
+ int i,j;
+ struct tm tm;
+ char buf[50];
+
+ bzero((char*)&tm, sizeof(struct tm));
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_signal_connect(GTK_OBJECT(window), "destroy",
+ GTK_SIGNAL_FUNC(menu_file_quit), NULL);
+ gtk_window_set_title(GTK_WINDOW(window), "Gnome Calendar");
+ gtk_widget_set_usize(GTK_WIDGET(window), 600, 400);
+
+ main_vbox = gtk_vbox_new(FALSE, 1);
+ gtk_container_add(GTK_CONTAINER(window), main_vbox);
+ gtk_widget_show(main_vbox);
+
+ get_main_menu(&menubar, &accel);
+ gtk_window_add_accelerator_table(GTK_WINDOW(window), accel);
+ gtk_box_pack_start(GTK_BOX(main_vbox), menubar, FALSE, FALSE, 0);
+ gtk_widget_show(menubar);
+
+ main_hbox = gtk_hbox_new(FALSE,1);
+ gtk_box_pack_start(GTK_BOX(main_vbox), main_hbox, TRUE, TRUE, 0);
+ gtk_widget_show(main_hbox);
+
+ left_vbox = gtk_vbox_new(FALSE, 1);
+ gtk_box_pack_start(GTK_BOX(main_hbox), left_vbox, FALSE, TRUE,0);
+ gtk_widget_show(left_vbox);
+
+ separator = gtk_vseparator_new();
+ gtk_box_pack_start(GTK_BOX(main_hbox), separator, FALSE, TRUE, 0);
+ gtk_widget_show(separator);
+
+ right_vbox = gtk_vbox_new(FALSE, 1);
+ gtk_box_pack_start(GTK_BOX(main_hbox), right_vbox, TRUE, TRUE, 0);
+ gtk_widget_show(right_vbox);
+
+ date_hbox = gtk_hbox_new(FALSE, 1);
+ gtk_box_pack_start(GTK_BOX(left_vbox), date_hbox, FALSE, FALSE, 0);
+ gtk_widget_show(date_hbox);
+
+ prev_mth_but = gtk_button_new_with_label("<");
+ gtk_box_pack_start(GTK_BOX(date_hbox), prev_mth_but, FALSE, FALSE, 0);
+ gtk_signal_connect(GTK_OBJECT(prev_mth_but), "clicked", GTK_SIGNAL_FUNC(prev_month_but_clicked), NULL);
+ gtk_widget_show(prev_mth_but);
+
+ month_label = gtk_label_new("Fooary");
+ gtk_box_pack_start(GTK_BOX(date_hbox), month_label, TRUE, FALSE, 0);
+ gtk_widget_show(month_label);
+
+ next_mth_but = gtk_button_new_with_label(">");
+ gtk_box_pack_start(GTK_BOX(date_hbox), next_mth_but, FALSE, FALSE, 0);
+ gtk_signal_connect(GTK_OBJECT(next_mth_but), "clicked", GTK_SIGNAL_FUNC(next_month_but_clicked), NULL);
+ gtk_widget_show(next_mth_but);
+
+ prev_year_but = gtk_button_new_with_label("<");
+ gtk_box_pack_start(GTK_BOX(date_hbox), prev_year_but, FALSE, FALSE, 0);
+ gtk_signal_connect(GTK_OBJECT(prev_year_but), "clicked", GTK_SIGNAL_FUNC(prev_year_but_clicked), NULL);
+ gtk_widget_show(prev_year_but);
+
+ year_label = gtk_label_new("1971");
+ gtk_box_pack_start(GTK_BOX(date_hbox), year_label, TRUE, FALSE, 0);
+ gtk_widget_show(year_label);
+
+ next_year_but = gtk_button_new_with_label(">");
+ gtk_box_pack_start(GTK_BOX(date_hbox), next_year_but, FALSE, FALSE, 0);
+ gtk_signal_connect(GTK_OBJECT(next_year_but), "clicked", GTK_SIGNAL_FUNC(next_year_but_clicked), NULL);
+ gtk_widget_show(next_year_but);
+
+ /* Build up the calendar table */
+ cal_table = gtk_table_new(7,7,TRUE);
+ gtk_box_pack_start(GTK_BOX(left_vbox), cal_table, FALSE, FALSE, 0);
+ gtk_widget_show(cal_table);
+
+ for(i=DAY_MIN; i <= DAY_MAX; i++) {
+ day_name_label = gtk_label_new(short3_day_name(i));
+ gtk_table_attach_defaults(GTK_TABLE(cal_table), day_name_label, i-1, i, 0, 1);
+ gtk_widget_show(day_name_label);
+ }
+ for(j=0; j < 5; j++) {
+ for(i=0; i < 7; i++) {
+ calendar_buttons[i+j*7] = gtk_button_new();
+ gtk_container_border_width(GTK_CONTAINER(calendar_buttons[i+j*7]), 0);
+ gtk_table_attach_defaults(GTK_TABLE(cal_table), calendar_buttons[i+j*7], i, i+1, j+2, j+3);
+ gtk_signal_connect(GTK_OBJECT(calendar_buttons[i+j*7]), "clicked", GTK_SIGNAL_FUNC(calendar_but_clicked), NULL);
+ gtk_widget_show(calendar_buttons[i+j*7]);
+ calendar_days[i+j*7] = gtk_label_new("");
+ gtk_container_add(GTK_CONTAINER(calendar_buttons[i+j*7]), calendar_days[i+j*7]);
+ gtk_widget_show(calendar_days[i+j*7]);
+ }
+ }
+
+
+
+
+ day_but_hbox = gtk_hbox_new(TRUE, 1);
+ gtk_box_pack_start(GTK_BOX(left_vbox), day_but_hbox, FALSE, FALSE, 0);
+ gtk_widget_show(day_but_hbox);
+
+ prev_day_but = gtk_button_new_with_label("Prev");
+ gtk_box_pack_start(GTK_BOX(day_but_hbox), prev_day_but, TRUE, TRUE, 0);
+ gtk_signal_connect(GTK_OBJECT(prev_day_but), "clicked", GTK_SIGNAL_FUNC(prev_day_but_clicked), NULL);
+ gtk_widget_show(prev_day_but);
+
+ today_but = gtk_button_new_with_label("Today");
+ gtk_box_pack_start(GTK_BOX(day_but_hbox), today_but, TRUE, TRUE, 0);
+ gtk_signal_connect(GTK_OBJECT(today_but), "clicked", GTK_SIGNAL_FUNC(today_but_clicked), NULL);
+ gtk_widget_show(today_but);
+
+ next_day_but = gtk_button_new_with_label("Next");
+ gtk_box_pack_start(GTK_BOX(day_but_hbox), next_day_but, TRUE, TRUE, 0);
+ gtk_signal_connect(GTK_OBJECT(next_day_but), "clicked", GTK_SIGNAL_FUNC(next_day_but_clicked), NULL);
+ gtk_widget_show(next_day_but);
+
+ scrolledwindow = gtk_scrolled_window_new(NULL, NULL);
+ gtk_box_pack_start(GTK_BOX(right_vbox), scrolledwindow, TRUE, TRUE, 0);
+ gtk_widget_show(scrolledwindow);
+
+ scroll_hbox = gtk_hbox_new(FALSE, 0);
+ gtk_container_add(GTK_CONTAINER(scrolledwindow), scroll_hbox);
+ gtk_widget_show(scroll_hbox);
+
+ hour_list = gtk_list_new();
+ gtk_box_pack_start(GTK_BOX(scroll_hbox), hour_list, FALSE, FALSE, 0);
+ gtk_widget_show(hour_list);
+
+ separator = gtk_vseparator_new();
+ gtk_box_pack_start(GTK_BOX(scroll_hbox), separator, FALSE, FALSE, 0);
+ gtk_widget_show(separator);
+
+ dailylist = gtk_list_new();
+ gtk_box_pack_start(GTK_BOX(scroll_hbox), dailylist, TRUE, TRUE, 0);
+ gtk_widget_show(dailylist);
+
+ for (i=0; i< 24 ; i++) {
+ sprintf(buf, "%d:00", i);
+ list_item = gtk_list_item_new_with_label(buf);
+ gtk_container_add(GTK_CONTAINER(hour_list), list_item);
+ gtk_widget_show(list_item);
+
+ dailylist_item = gtk_list_item_new();
+ gtk_container_add(GTK_CONTAINER(dailylist), dailylist_item);
+ gtk_signal_connect(GTK_OBJECT(dailylist_item), "selected", GTK_SIGNAL_FUNC(dailylist_item_select), list_item);
+ gtk_signal_connect_object(GTK_OBJECT(list_item), "selected", GTK_SIGNAL_FUNC(dailylist_item_select), GTK_OBJECT(dailylist_item));
+ gtk_widget_show(dailylist_item);
+ event_label = gtk_label_new("blah");
+ gtk_container_add(GTK_CONTAINER(dailylist_item), event_label);
+ gtk_widget_show(event_label);
+ }
+ gtk_widget_show(window);
+
+}
+
+
+int main(int argc, char *argv[])
+{
+
+ gnome_init(&argc, &argv);
+
+
+ show_main_window();
+
+ /* Initialse date to the current day */
+ old_day = old_month = old_year = 0;
+ get_system_date(&curr_day, &curr_month, &curr_year);
+ update_today();
+
+ gtk_main();
+
+ return 0;
+}
+