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

📄 function.c

📁 一个linux下的时钟软件
💻 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 + -