📄 calendar.h
字号:
#ifndef CANLENDAR_H//如果没有定义过这个模块,那么就编译下面的代码,编译过那么就算了#define CANLENDAR_H//如果是没有编译过,那么就定义一个没有定义过的CANLENDAR_H#include <stdio.h>#include <stdlib.h>#include <string.h>#include <time.h>#include "mmlib.h"#define CNDR_DEF_PAD 10#define CNDR_DEF_PAD_SMALL 5//static inline char *_(char *c) {return(g_locale_to_utf8(c,-1,0,0,0));} static GtkWidget *spin_hour;static GtkWidget *spin_minute;static GtkWidget *spin_second;typedef struct _CalendarData { GtkWidget *flag_checkboxes[3]; gboolean settings[3]; GtkWidget *window; GtkWidget *month;} CalendarData;static int getCurrentTime(guint flag);static gboolean time_refresh(gpointer data);static void calendar_set_flags(CalendarData *calendar);static void calendar_toggle_flag( GtkWidget *toggle, CalendarData *calendar);//static void calendar_button_ok( GtkWidget *widget, gpointer callback_data);static void calendar_button_set( GtkWidget *widget, gpointer callback_data);enum { calendar_show_header, calendar_show_days,// calendar_month_change, calendar_show_week,// calendar_monday_first};/* * GtkCalendar */void create_calendar(){ GtkWidget *window; GtkWidget *vbox, *vbox2, *vbox3; GtkWidget *hbox; GtkWidget *hbbox; GtkWidget *calendar; GtkWidget *toggle; GtkWidget *button_ok, *button_cancel, *button_set; GtkWidget *frame; GtkWidget *label; GtkWidget *bbox; static CalendarData calendar_data; GtkAdjustment *adj; gint i; struct { char *label; } flags[] = { { _("显示年/月")}, { _("显示星期")}, { _("显示周数") }, }; calendar_data.window = NULL; for (i = 0; i < 3; i++) { calendar_data.settings[i] = 0; } window = gtk_window_new (GTK_WINDOW_TOPLEVEL); g_return_if_fail(GTK_IS_WINDOW(window)); isShow = TRUE; gtk_window_set_title (GTK_WINDOW (window), _("日期和时间 属性")); gtk_container_set_border_width (GTK_CONTAINER (window), 5); gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (mm_widget_destroy), window);// g_signal_connect (G_OBJECT (window), "delete_event", G_CALLBACK (mm_widget_destroy), window); gtk_window_set_resizable (GTK_WINDOW (window), FALSE); vbox = gtk_vbox_new (FALSE, CNDR_DEF_PAD); gtk_container_add (GTK_CONTAINER (window), vbox); /* * The top part of the window, Calendar, flags and fontsel. */ hbox = gtk_hbox_new (FALSE, CNDR_DEF_PAD); gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, CNDR_DEF_PAD); hbbox = gtk_hbutton_box_new (); gtk_box_pack_start (GTK_BOX (hbox), hbbox, FALSE, FALSE, CNDR_DEF_PAD); gtk_button_box_set_layout (GTK_BUTTON_BOX(hbbox), GTK_BUTTONBOX_SPREAD); gtk_box_set_spacing (GTK_BOX (hbbox), 0); /* Calendar widget */ frame = gtk_frame_new (_("日期")); gtk_box_pack_start (GTK_BOX (hbbox), frame, FALSE, TRUE,0); calendar=gtk_calendar_new (); calendar_data.window = calendar; calendar_set_flags (&calendar_data); gtk_calendar_mark_day (GTK_CALENDAR (calendar), 19); gtk_container_add( GTK_CONTAINER (frame), calendar); vbox2 = gtk_vbox_new (FALSE, CNDR_DEF_PAD); gtk_box_pack_start (GTK_BOX (hbox), vbox2, FALSE, FALSE, 0); /* Build the Right frame with the flags in */ frame = gtk_frame_new (_("选项")); gtk_box_pack_start (GTK_BOX (vbox2), frame, TRUE, TRUE, 0); vbox3 = gtk_vbox_new (TRUE, 0); gtk_container_add (GTK_CONTAINER (frame), vbox3); for (i = 0; i < 3; i++) { toggle = gtk_check_button_new_with_label (flags[i].label); g_signal_connect (G_OBJECT (toggle), "toggled", G_CALLBACK (calendar_toggle_flag), (gpointer) &calendar_data); gtk_box_pack_start (GTK_BOX (vbox3), toggle, TRUE, TRUE, 0); calendar_data.flag_checkboxes[i] = toggle; }//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> frame = gtk_frame_new ( _("时间")); gtk_box_pack_start (GTK_BOX (vbox2), frame, TRUE, TRUE, 0); vbox3 = gtk_vbox_new (FALSE, CNDR_DEF_PAD_SMALL); gtk_container_add (GTK_CONTAINER (frame), vbox3); bbox = gtk_hbox_new(FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox3), bbox, FALSE, FALSE, 0); //Hour adj = (GtkAdjustment *) gtk_adjustment_new (getCurrentTime('h'), 0.0,23.0, 1.0, 5.0, 0.0); spin_hour = gtk_spin_button_new (adj, 0, 0); gtk_spin_button_set_numeric((GtkSpinButton *)spin_hour, TRUE); gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spin_hour), TRUE); gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (spin_hour), GTK_UPDATE_IF_VALID); gtk_box_pack_start (GTK_BOX (bbox), spin_hour, TRUE, TRUE, 0); label = gtk_label_new (" : "); gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5); gtk_box_pack_start (GTK_BOX (bbox), label, FALSE, TRUE, 0);//Minute adj = (GtkAdjustment *) gtk_adjustment_new (getCurrentTime('m'), 0.0, 59.0, 1.0, 5.0, 0.0); spin_minute = gtk_spin_button_new (adj, 0, 0); gtk_spin_button_set_numeric((GtkSpinButton *)spin_minute, TRUE); gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spin_minute), TRUE); gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (spin_minute), GTK_UPDATE_IF_VALID); gtk_box_pack_start (GTK_BOX (bbox), spin_minute, TRUE, TRUE, 0); label = gtk_label_new (" : "); gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5); gtk_box_pack_start (GTK_BOX (bbox), label, FALSE, TRUE, 0); //Second adj = (GtkAdjustment *) gtk_adjustment_new (getCurrentTime('s'), 0.0, 59.0, 1.0, 5.0, 0.0); spin_second= gtk_spin_button_new (adj, 0, 0); gtk_spin_button_set_numeric((GtkSpinButton *)spin_second, TRUE); gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spin_second), TRUE); gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (spin_second), GTK_UPDATE_IF_VALID); gtk_box_pack_start (GTK_BOX (bbox), spin_second, TRUE, TRUE, 0); toutFlag = gtk_timeout_add(1000, (GtkFunction)time_refresh, NULL); bbox = gtk_hbutton_box_new (); gtk_box_set_spacing(GTK_BOX(bbox),5); gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), GTK_BUTTONBOX_END); gtk_box_pack_start (GTK_BOX (vbox), bbox, FALSE, FALSE, 0); button_set = gtk_button_new_from_stock(GTK_STOCK_OK); g_signal_connect (G_OBJECT (button_set), "clicked", G_CALLBACK (calendar_button_set), calendar); gtk_container_add (GTK_CONTAINER (bbox), button_set); button_cancel = gtk_button_new_from_stock(GTK_STOCK_CANCEL); g_signal_connect (G_OBJECT (button_cancel), "clicked", G_CALLBACK (mm_widget_destroy), window); gtk_container_add (GTK_CONTAINER (bbox), button_cancel); GTK_WIDGET_SET_FLAGS (button_cancel, GTK_CAN_DEFAULT); gtk_widget_grab_default (button_cancel); gtk_widget_show_all (window);}static int getCurrentTime(guint flag){ guint tmp; time_t ut = time(NULL); struct tm *now = localtime(&ut); switch (flag) { case 'h': tmp = now->tm_hour; break; case 'm': tmp = now->tm_min; break; case 's': tmp = now->tm_sec; break; } return tmp;}gboolean time_refresh(gpointer data){ time_t ut = time(NULL); struct tm *now = localtime(&ut); /*reccent system time*/ gtk_spin_button_set_value((GtkSpinButton*)spin_second, now->tm_sec); if (now->tm_sec == 0) { gtk_spin_button_set_value((GtkSpinButton*)spin_minute, now->tm_min); if (now->tm_min == 0) gtk_spin_button_set_value((GtkSpinButton*)spin_hour, now->tm_hour); } return TRUE;}void calendar_set_flags( CalendarData *calendar ){ gint i; gint options = 0; for (i = 0; i < 3; i++) if (calendar->settings[i]) { options=options + (1<<i); if (i == 2) options += 4; } if (calendar->window) gtk_calendar_display_options (GTK_CALENDAR (calendar->window), options);}void calendar_toggle_flag( GtkWidget *toggle,CalendarData *calendar ){ gint i; gint j; j = 0; for (i = 0; i < 3; i++) if (calendar->flag_checkboxes[i] == toggle) j = i; calendar->settings[j] = !calendar->settings[j]; calendar_set_flags (calendar); }static void calendar_button_set( GtkWidget *widget, gpointer data){ guint MM, DD, hh, mm, YY; char buffer[16]; buffer[15] = '\0'; gtk_calendar_get_date ((GtkCalendar *)data, &YY, &MM, &DD); hh = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON(spin_hour)); mm = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON(spin_minute)); sprintf (buffer, "date %.2d%.2d%.2d%.2d%.2d", MM+1, DD, hh, mm, YY); system (buffer); msg_dialog(GTK_MESSAGE_INFO, "System Time has modified.");}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -