📄 function.c
字号:
#include <gtk/gtk.h>#include <string.h>
#include <time.h>
#include <stdio.h>#include "support.h"
#include "interface.h"
#include "callbacks.h"
#include "function.h"extern GtkWidget *ClockCalendarFixed;extern GdkPixmap *gdkxmp[11];
static GdkPixmap *YesOrNoPixmap[2] = {NULL, NULL};GdkPixmap *RingPixmap = NULL;
gboolean ringstate = FALSE;
//////////////////////////////////////User function define////////////////////////////////////////////////////////////////////////////////////////////flag=0 is 关闭闹钟、flag=1 is 开启闹钟且只闹一次、flag=2 is 开启闹钟且每天闹一次
void clock_read_date (int *hour, int *minute, int *flag)
{
FILE *fp;
if ((fp=fopen (FILE_NAME,OPEN_RDONLY)) == NULL)
{
printf ("Open file error!\n");
fclose (fp);
return ;
}
if (fscanf (fp, "%d\t%d\t%d", hour, minute, flag) == EOF)
{
*flag = 0;
*hour = 0;
*minute = 0;
printf ("Read file error!\n");
}
fclose (fp);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//flag=0 is 关闭闹钟、flag=1 is 开启闹钟且只闹一次、flag=2 is 开启闹钟且每天闹一次
void clock_save_data (int hour, int minute, int flag)
{
FILE *fp;
if ((fp=fopen(FILE_NAME,OPEN_WRITE)) == NULL)
{
printf ("Create file error!\n");
fclose (fp);
return ;
}
if (fprintf (fp, "%d\t%d\t%d", hour, minute, flag) == EOF)
printf ("Write file error!\n");
fclose (fp);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void widget_color_set ( GtkWidget *widget, gchar *widgetname, gchar *stylegc, GdkColor newcolor)
{
gint i;
GtkStyle *newstyle;
GtkWidget *temp; temp = lookup_widget (widget, widgetname); newstyle = gtk_style_copy (gtk_widget_get_style (temp)); if ( !strcmp ( stylegc, "fg")) for (i = 0; i < 5; i++)
newstyle->fg[i] = newcolor; else if ( !strcmp ( stylegc, "bg")) for (i = 0; i < 5; i++) newstyle->bg[i] = newcolor; else if ( !strcmp ( stylegc, "text")) for (i = 0; i < 5; i++) newstyle->text[i] = newcolor; else if ( !strcmp ( stylegc, "base")) for (i = 0; i < 5; i++) newstyle->base[i] = newcolor; gtk_widget_set_style ( temp, newstyle);
gtk_style_unref (newstyle);
}/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
GtkWidget *create_and_init_ClockSetWindow ()
{
GtkWidget *clocksetwindow;
GtkWidget *label, *butt;
GdkColor newcolor;
GtkStyle *newstyle;
GList *children;
gint i;
clocksetwindow = create_ClockSetWindow ();
newcolor.red = 1.0*0xffff;
newcolor.green = 1.0*0xffff;
newcolor.blue = 1.0*0xffff;
widget_color_set (clocksetwindow, "ClockSetFixed", "bg", newcolor);
widget_color_set (clocksetwindow, "ClockSetLabel", "fg", newcolor);
butt = lookup_widget (clocksetwindow, "OkButton");
children = gtk_container_children (GTK_CONTAINER (butt));
label = GTK_WIDGET (children->data);
newstyle = gtk_style_copy (gtk_widget_get_style (label));
for (i = 0; i < 5; i++)
newstyle->fg[i] = newcolor;
gtk_widget_set_style (label, newstyle);
gtk_widget_hide(GTK_WIDGET(butt));
gtk_widget_show(butt);
butt = lookup_widget (clocksetwindow, "CancelButton");
children = gtk_container_children (GTK_CONTAINER (butt));
label = GTK_WIDGET (children->data);
newstyle = gtk_style_copy (gtk_widget_get_style (label));
for (i = 0; i < 5; i++)
newstyle->fg[i] = newcolor;
gtk_widget_set_style (label, newstyle);
gtk_widget_hide(GTK_WIDGET(butt));
gtk_widget_show(butt);
newcolor.red = 0.0*0xffff;
newcolor.green = 0.33*0xffff;
newcolor.blue = 0.89*0xffff;
widget_color_set (clocksetwindow, "UnderFixed", "bg", newcolor);
widget_color_set (clocksetwindow, "OkButton", "bg", newcolor);
widget_color_set (clocksetwindow, "CancelButton", "bg", newcolor);
newcolor.red = 0.78*0xffff;
newcolor.green = 0.88*0xffff;
newcolor.blue = 0.97*0xffff;
widget_color_set (clocksetwindow, "HourSpinButton", "base", newcolor);
widget_color_set (clocksetwindow, "MinuteSpinButton", "base", newcolor);
widget_color_set (clocksetwindow, "HourSpinButton", "bg", newcolor);
widget_color_set (clocksetwindow, "MinuteSpinButton", "bg", newcolor);
gtk_style_unref (newstyle);
return clocksetwindow;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
GtkWidget *create_and_init_modebutton (GtkWidget *drawingarea)
{
GtkWidget *modebutton;
GtkWidget *pixmap;
modebutton = gtk_button_new ();
pixmap = create_pixmap (modebutton, "12.xpm");
gtk_widget_ref (modebutton);
gtk_object_set_data_full (GTK_OBJECT (ClockCalendarFixed), "modebutton", modebutton,
(GtkDestroyNotify) gtk_widget_unref);
gtk_container_add (GTK_CONTAINER (modebutton), pixmap);
gtk_fixed_put (GTK_FIXED (ClockCalendarFixed), modebutton, 115, 35);
gtk_widget_set_uposition (modebutton, 115, 35);
gtk_widget_set_usize (modebutton, 45, 20);
gtk_signal_connect (GTK_OBJECT (modebutton), "clicked",
GTK_SIGNAL_FUNC (on_modebutton_clicked), drawingarea);
gtk_widget_show_all (modebutton);
return modebutton;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void interface_init ( GtkWidget *widget){ GdkColor newcolor; GdkBitmap *mask;
gint flag = 0, hour, minute;
newcolor.red = 0.00*0xffff;
newcolor.green = 0.31*0xffff;
newcolor.blue = 0.88*0xffff;
widget_color_set ( widget, "DigitalModeButton", "bg", newcolor); widget_color_set ( widget, "AnalogModeButton", "bg", newcolor); widget_color_set ( widget, "widget", "bg", newcolor);
newcolor.red = 0.00*0xffff;
newcolor.green = 0.50*0xffff;
newcolor.blue = 0.35*0xffff;
widget_color_set ( widget, "ClockCalendarFixed", "bg", newcolor); newcolor.red = 1.0*0xffff;
newcolor.green = 1.0*0xffff;
newcolor.blue = 1.0*0xffff;
widget_color_set ( widget, "LCalendar", "fg", newcolor); //读闹钟设置文件:flag=0 is 关闭闹钟、flag=1 is 开启闹钟且只闹一次、flag=2 is 开启闹钟且每天闹一次 clock_read_date (&hour, &minute, &flag); if (flag == 1 || flag == 2) ringstate = TRUE; else ringstate = FALSE;
if (ringstate) RingPixmap = gdk_pixmap_colormap_create_from_xpm (NULL, gtk_widget_get_default_colormap (),
&mask, NULL, "./xpm/clockxpm/ringonclockface3.xpm");
else RingPixmap = gdk_pixmap_colormap_create_from_xpm (NULL, gtk_widget_get_default_colormap (),
&mask, NULL, "./xpm/clockxpm/ringonclockface4.xpm");
YesOrNoPixmap[0] = gdk_pixmap_colormap_create_from_xpm (NULL, gtk_widget_get_default_colormap (),
&mask, NULL, "./xpm/clockxpm/No.xpm");
YesOrNoPixmap[1] = gdk_pixmap_colormap_create_from_xpm (NULL, gtk_widget_get_default_colormap (),
&mask, NULL, "./xpm/clockxpm/Yes.xpm");
}/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void toggle_button_press_flip (GtkWidget *widget, gchar *buttonname, gint num)
{
GtkWidget *butt;
GtkWidget *child;
child = gtk_container_children (GTK_CONTAINER(widget))->data;
if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)))
{
gtk_pixmap_set (GTK_PIXMAP(child), YesOrNoPixmap[1], NULL);
butt = lookup_widget (widget, buttonname);
child = gtk_container_children (GTK_CONTAINER(butt))->data;
if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (butt)))
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (butt), FALSE);
if (num == 1)
{
if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (lookup_widget
(widget, "ClockTSCloseCheckButton"))))
{
butt = lookup_widget (widget, "ClockTSOpenCheckButton");
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(butt), TRUE);
}
}
}
else
{
gtk_pixmap_set (GTK_PIXMAP(child), YesOrNoPixmap[0], NULL);
butt = lookup_widget (widget, buttonname);
child = gtk_container_children (GTK_CONTAINER(butt))->data;
if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (butt)))
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (butt), TRUE);
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void leds_clock_create_pixmap (GtkWidget *drawingarea){ GdkBitmap *mask; GtkStyle *style; style = gtk_style_copy ( gtk_widget_get_style (drawingarea)); gdkxmp[0] = gdk_pixmap_create_from_xpm (drawingarea->window, &mask, &style->bg[GTK_STATE_NORMAL],"./xpm/clockxpm/0.xpm"); gdkxmp[1] = gdk_pixmap_create_from_xpm (drawingarea->window, &mask, &style->bg[GTK_STATE_NORMAL],"./xpm/clockxpm/1.xpm"); gdkxmp[2] = gdk_pixmap_create_from_xpm (drawingarea->window, &mask, &style->bg[GTK_STATE_NORMAL],"./xpm/clockxpm/2.xpm"); gdkxmp[3] = gdk_pixmap_create_from_xpm (drawingarea->window, &mask, &style->bg[GTK_STATE_NORMAL],"./xpm/clockxpm/3.xpm"); gdkxmp[4] = gdk_pixmap_create_from_xpm (drawingarea->window, &mask, &style->bg[GTK_STATE_NORMAL],"./xpm/clockxpm/4.xpm"); gdkxmp[5] = gdk_pixmap_create_from_xpm (drawingarea->window, &mask, &style->bg[GTK_STATE_NORMAL],"./xpm/clockxpm/5.xpm"); gdkxmp[6] = gdk_pixmap_create_from_xpm (drawingarea->window, &mask, &style->bg[GTK_STATE_NORMAL],"./xpm/clockxpm/6.xpm"); gdkxmp[7] = gdk_pixmap_create_from_xpm (drawingarea->window, &mask, &style->bg[GTK_STATE_NORMAL],"./xpm/clockxpm/7.xpm"); gdkxmp[8] = gdk_pixmap_create_from_xpm (drawingarea->window, &mask, &style->bg[GTK_STATE_NORMAL],"./xpm/clockxpm/8.xpm"); gdkxmp[9] = gdk_pixmap_create_from_xpm (drawingarea->window, &mask, &style->bg[GTK_STATE_NORMAL],"./xpm/clockxpm/9.xpm"); gdkxmp[10] = gdk_pixmap_create_from_xpm (drawingarea->window, &mask, &style->bg[GTK_STATE_NORMAL],"./xpm/clockxpm/10.xpm");
gtk_style_unref (style);
}/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void leds_clock_destroy_pixmap (){ gint i;
for (i = 0; i <= 10; i++) gdk_pixmap_unref (gdkxmp[i]);}/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void leds_clock_draw_string (GtkWidget *drawingarea, gint x, gint y){ time_t ticks; struct tm *tm; gint h; GdkColor color; GdkColormap *colormap = NULL; GdkGC *gc = NULL;
ticks = time (0); tm = localtime (&ticks); h = tm->tm_hour; if ( colormap == NULL) { colormap = gdk_colormap_get_system (); gc = gdk_gc_new (drawingarea->window); color.red = 65535; color.green = 13084; color.blue = 24563; gdk_color_alloc ( colormap, &color); gdk_gc_set_foreground (gc, &color); } if (h > 12 && h <= 19) gdk_draw_string (drawingarea->window, drawingarea->style->font, gc, x, y, _("PostMeridiem")); else if (h > 19 || h < 5)
gdk_draw_string (drawingarea->window, drawingarea->style->font, gc, x, y, _("Night"));
else gdk_draw_string (drawingarea->window, drawingarea->style->font, gc, x, y, _("AnteMeridiem"));}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -