📄 calender-opts.c
字号:
/* TradeClient <http://tradeclient.sourceforge.net> * $Id: calender-opts.c,v 1.12 2001/03/20 22:19:33 ttabner Exp $ * * Copyright (C) 1999-2000 Bynari Inc. * Copyright (C) 2001 Project TradeClient * * LGPL * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU Library General Public License as published by * the Free Software Foundation; either version 2 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library * General Public License for more details. * * You should have received a copy of the GNU Library General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */#include "puma.h"#include <time.h>#include "tcal.h"GList *event_store=NULL;Llist *event_list=NULL;GList *event_store_get () { return event_store;}void event_store_destroy_all () { GList *gseek; for (gseek=event_store;gseek;gseek=gseek->next) { GtkTCalEvent *event=gseek->data; free (event); } g_list_free (event_store); event_store=NULL;}void event_store_rehash () { Llist *lseek; GList *gseek; GtkTCalEvent *event;#if 1 for (gseek=event_store_get();gseek;gseek=gseek->next) { event=gseek->data; free (event); } g_list_free (event_store_get()); event_store=NULL;#else event_store_destroy_all ();#endif for (lseek=event_list;lseek;lseek=lseek->next) { CalendarEvent *event=lseek->data; GtkTCalEvent *tce=(GtkTCalEvent *)calloc (1, sizeof (GtkTCalEvent));#if 1 tce->summary=event->information; tce->subject=event->subject; tce->year=event->start->year; tce->month=event->start->month; tce->date=event->start->date; tce->user_data=event; event_store=g_list_append (event_store, tce);#else event_store_add (event);#endif }}void event_store_add (CalendarEvent *event) { GtkTCalEvent *tce=(GtkTCalEvent *)calloc (1, sizeof (GtkTCalEvent)); tce->summary=strdup (event->information); tce->subject=strdup (event->subject); tce->year=event->start->year; tce->month=event->start->month; tce->date=event->start->date; tce->user_data=event; event_store=g_list_append (event_store, tce); }void event_store_delete (CalendarEvent *evnt) { GList *seek; for (seek=event_store;seek;seek=seek->next) { GtkTCalEvent *event=seek->data; if (event->user_data==evnt) { event_store=g_list_remove (event_store, event); free (event); return; } }}void event_get_today (guint *year, guint *month, guint *day) { time_t t=time (NULL); struct tm *tm_time=localtime (&t); *year=tm_time->tm_year+1900; *month=tm_time->tm_mon; *day=tm_time->tm_mday;}Llist *event_first () { calendar_dump (); return event_list;}CalendarEvent *event_new () { CalendarEvent *retevent=(CalendarEvent *)calloc (1, sizeof (CalendarEvent)); if (event_list) { event_list = llist_append (event_list, retevent); } else { event_list = llist_append (NULL, retevent); } return retevent;}void event_add (CalendarEvent *event) { g_return_if_fail (event != NULL); g_return_if_fail (event->start != NULL); g_return_if_fail (event->stop != NULL); if (event_list) { event_list = llist_append (event_list, event); } else { event_list = llist_append (NULL, event); }}void event_destroy (CalendarEvent *event) { if (llist_seek (event_list, event)) { event_list=llist_detach (event_list, event); }}void calendar_rehash_daily () {}void calendar_rehash_weekly () {}void event_time_destroy (EventTime *time) { if (!time) return; free (time);}time_t event_time_to_time_t (EventTime *time) { struct tm *thetime=(struct tm *)calloc (1, sizeof (struct tm)); time_t newtime; if (!time) return (time_t)0; thetime->tm_min=time->minute; thetime->tm_hour=time->hour; thetime->tm_mon=time->month; thetime->tm_mday=time->date; thetime->tm_year=time->year-1900; thetime->tm_isdst=-1; newtime=mktime (thetime); free (thetime); return newtime;}EventTime *time_t_to_event_time (time_t time) { struct tm *thetime=localtime (&time); EventTime *ev_time=(EventTime *)calloc (1, sizeof (EventTime)); ev_time->year=thetime->tm_year+1900; ev_time->month=thetime->tm_mon; ev_time->date=thetime->tm_mday; ev_time->hour=thetime->tm_hour; ev_time->minute=thetime->tm_min; ev_time->time=time; return ev_time;}EventTime *gtk_to_event_time (GtkEntry *yeare, GtkEntry *monthe, GtkEntry *datee, GtkEntry *timee) { char *year=(gtk_entry_get_text (yeare)); char *month=(gtk_entry_get_text (monthe)); char *date= (gtk_entry_get_text (datee)); char *time= (gtk_entry_get_text (timee)); char *tmp; EventTime *etime=(EventTime *)calloc (1, sizeof (EventTime)); etime->year=atoi (year); etime->date=atoi (date); etime->month=month_string_to_int (month); tmp=(char *)calloc (25, sizeof (char)); if (sscanf (time, "%d:%d %s", &etime->hour, &etime->minute, tmp)<2) { free (tmp); free (etime); return NULL; } if (etime->hour<=12) { if (tmp) if (strcasecmp (tmp, "pm")==0 && etime->hour!=12) { etime->hour+=12; } if (strcasecmp (tmp, "am")==0 && etime->hour==12) { etime->hour=0; } } if (etime->hour>23) { insert_message (_("Invalid Time: hour greater than 23\n")); free (etime); free (tmp); return NULL; } if (etime->minute>59) { insert_message (_("Invalid Time: minute greater than 59\n")); free (etime); free (tmp); return NULL; } free (tmp); return etime;}CalendarEvent *event_find_conflict (time_t start, time_t end) { Llist *seek=event_list; CalendarEvent *event; while (seek) { event=(CalendarEvent *)seek->data; if (event) { if (event->start && event->stop) { if (start > event->start->time && start < event->stop->time) return event; if (end > event->start->time && end < event->stop->time) return event; if (event->start->time > start && event->start->time < end) return event; if (event->stop->time > start && event->stop->time < end) return event; if (event->stop->time == start && event->start->time == end) return event; } } seek=seek->next; } return NULL;}void event_display (CalendarEvent *event) { GtkWidget *cal=calendar_get_widget (); guint year, month, day; GtkCalendar *daily=GTK_CALENDAR (lookup_widget (cal, "daily_calendar")); gtk_calendar_freeze (daily); gtk_calendar_get_date (daily, &year, &month, &day); gtk_calendar_select_month (daily, event->start->month, event->start->year); gtk_calendar_mark_day (daily, event->start->date); gtk_calendar_select_month (daily, month, year); gtk_calendar_select_day (daily, day); gtk_calendar_thaw (daily);}char *event_int_to_month (gint month) { switch (month) { case 0: return strdup ("January"); case 1: return strdup ("February"); case 2: return strdup ("March"); case 3: return strdup ("April"); case 4: return strdup ("May"); case 5: return strdup ("June"); case 6: return strdup ("July"); case 7: return strdup ("August"); case 8: return strdup ("September"); case 9: return strdup ("October"); case 10: return strdup ("November"); case 11: return strdup ("December"); } return NULL;}char *event_int_to_year (int year) { static char tmp[7]; snprintf (tmp, 5, "%d", year); return tmp;}char *event_int_to_day (int day) { static char tmp[7]; snprintf (tmp, 5, "%d", day); return tmp;}char *event_time_to_char (int hour, int min) { struct tm time;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -