/* * gnlp.c: LPQ/LPR stuff */ #include #include #include #include #include #include #include #include #include #include #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 ", "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; }