⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 calendar.h

📁 LINUX 2.4下面使用GTK书写的一个系统控制面板
💻 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 + -