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

📄 calender-callbacks.c

📁 一个功能全面的电子邮件客户端
💻 C
📖 第 1 页 / 共 4 页
字号:
			}		}		gtk_clist_sort (clist);		gtk_clist_thaw (clist);	}}static char *clist2_names[7]={NULL, "monday_clist1", "tuesday_clist1",                              "wednesday_clist1", "thursday_clist1", "friday_clist1", NULL };void calendar_workweekly_populate (EventTime *time) {	GtkCList *clist;	int day;	time_t t=event_time_to_time_t (time);	struct tm *t2=localtime (&t);	event_time_dump (time);	t-=(t2->tm_wday-1) * 24 * 60 * 60;		time=time_t_to_event_time (t);	event_time_dump (time);	for (day=1;day<6;day++) {		CalendarEvent *event;		char *cl_data[1];		Llist *seek;		int row;		clist=GTK_CLIST (lw (calendar_window, clist2_names[day]));		gtk_clist_set_compare_func (clist, (GtkCListCompareFunc)calendar_week_custom_sorter);		gtk_clist_freeze (clist);		gtk_clist_clear (clist);				for (seek=event_first();seek;seek=seek->next) {				event=seek->data;			if (event->start->month==time->month &&			    event->start->year==time->year &&					event->start->date==time->date) {				cl_data[0]=event->subject;				row=gtk_clist_append (clist, cl_data);				gtk_clist_set_row_data (clist, row, (gpointer)event);			}		}		gtk_clist_sort (clist);		gtk_clist_thaw (clist);		time->date++;	}}void calendar_weekcal_day_selected (GtkCalendar *cal) {	EventTime time;	memset (&time, 0, sizeof (EventTime));	time.year=cal->year;	time.month=cal->month;	time.date=cal->selected_day;	calendar_weekly_populate (&time);}void calendar_workweekcal_day_selected (GtkCalendar *cal) {	EventTime time;	memset (&time, 0, sizeof (EventTime));	time.year=cal->year;	time.month=cal->month;	time.date=cal->selected_day;	calendar_workweekly_populate (&time);}void calendar_weekly_event_selected (GtkCList *clist, gint row, gint column, GdkEventButton *event, gpointer data) {	CalendarEvent *cevent=gtk_clist_get_row_data (clist, row);	cur_event=cevent;	calendar_display_event (cevent);}void calendar_monthly_changed (GtkEditable *editable, gpointer data) {	char *month=gtk_entry_get_text (GTK_ENTRY (editable));	int mon=month_string_to_int (month);	gtk_tcal_set (GTK_TCAL (lw (GTK_WIDGET (editable), "monthly")), 	              gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (								   lw (GTK_WIDGET (editable), "monthly_year"))), mon);}void calendar_monthly_year_changed (GtkEditable *spin, gpointer data) {	char *month=gtk_entry_get_text (GTK_ENTRY (lw (GTK_WIDGET (spin), "monthly_month")));	int mon=month_string_to_int (month);	int year=gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin));	gtk_tcal_set (GTK_TCAL (lw (GTK_WIDGET (spin), "monthly")), 	              year, mon);}void calendar_yearly_year_changed (GtkEditable *spin, gpointer data) {	int year=gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin));	gtk_tcal_set (GTK_TCAL (lw (GTK_WIDGET (spin), "yearly")), 	              year, -1);}void calendar_yearly_event_selected (GtkTCal *tcal, CalendarEvent *event) {	if (event) {		calendar_display_event (event);	}}GtkWidget *todo_child=NULL;void calendar_todo_rehash () {		GtkTree *tree=GTK_TREE (lw (calendar_window, "todo_tree"));	GList *seek;	gtk_tree_clear_items (tree, 0, g_list_length (tree->children));	for (seek=todo_first ();seek;seek=seek->next) {		Todo *todo=seek->data;		todo->treeitem=calendar_todo_add (tree, todo->text, todo->due, todo->complete);	}}void calendar_todo_activated (GtkEntry *entry) {	char *text=gtk_entry_get_text (entry);	char *due=gtk_entry_get_text (GTK_ENTRY (lw (calendar_window, "todo_due")));	GtkWidget *widget=calendar_todo_add (GTK_TREE (lw (calendar_window, "todo_tree")), text, due, FALSE);	Todo *todo=todo_new ();	todo->text=strdup (text);	todo->due=strdup (due);	todo->treeitem=widget;	gtk_entry_set_text (entry, "");	gtk_entry_set_text (GTK_ENTRY (lw (calendar_window, "todo_due")), "");}void calendar_todo_activated2 (GtkEntry *entry) {        char *text=gtk_entry_get_text (GTK_ENTRY (lw (calendar_window, "todo_entry")));        char *due=gtk_entry_get_text (GTK_ENTRY (lw (calendar_window, "todo_due")));        GtkWidget *widget=calendar_todo_add (GTK_TREE (lw (calendar_window, "todo_tree")), text, due, FALSE);        Todo *todo=todo_new ();        todo->text=strdup (text);        todo->due=strdup (due);        todo->treeitem=widget;        gtk_entry_set_text (entry, "");        gtk_entry_set_text (GTK_ENTRY (lw (calendar_window, "todo_due")), "");}void calendar_todo_changed (GtkEditable *editable) {	GtkWidget *widget=GTK_WIDGET (editable);	char *text=gtk_entry_get_text (GTK_ENTRY (editable));	widget=widget->parent->parent; 	if (GTK_IS_TREE_ITEM (widget)) {		Todo *todo=todo_find_from_tree (widget);		if (todo) {			if (todo->text) free (todo->text);			todo->text=strdup (text);		}	}}void calendar_todo_due_changed (GtkEditable *editable) {	GtkWidget *widget=GTK_WIDGET (editable);	char *text=gtk_entry_get_text (GTK_ENTRY (editable));	widget=widget->parent->parent->parent; 	if (GTK_IS_TREE_ITEM (widget)) {		Todo *todo=todo_find_from_tree (widget);		if (todo) {			if (todo->due) free (todo->due);			todo->due=strdup (text);		}	}}void calendar_todo_delete (GtkWidget *widget, gpointer data) {	Todo *todo=data;	todo_delete (todo);	calendar_todo_rehash();	todo_child=NULL;}void calendar_todo_select (GtkWidget *widget, gpointer data) {	GtkWidget *window = lookup_widget (widget, "main_calendar");	create_calendar (3, window);}void calendar_todo_child_selected (GtkTree *tree, GtkWidget *child) {	todo_child=child;	gtk_tree_unselect_child (tree, child);}void calendar_todo_completion_toggled (GtkToggleButton *toggle, GtkTree *tree) {	GtkWidget *widget=GTK_WIDGET (toggle);	GtkBox *hbox=GTK_BOX (widget->parent);		GtkBoxChild *child=hbox->children->next->data;	GtkWidget *entry=child->widget;	GtkWidget *combo;	GtkWidget *treeitem=GTK_WIDGET (hbox)->parent;	Todo *todo=todo_find_from_tree (treeitem);	child=hbox->children->data;	toggle=GTK_TOGGLE_BUTTON (child->widget);	child=hbox->children->next->next->data;	combo=child->widget;	if (toggle->active) {		todo->complete=TRUE;		gtk_widget_set_sensitive (GTK_WIDGET (entry), FALSE);		gtk_widget_set_sensitive (combo, FALSE);	} else {		todo->complete=FALSE;		gtk_widget_set_sensitive (GTK_WIDGET (entry), TRUE);		gtk_widget_set_sensitive (combo, TRUE);	}}void calendar_switch_page (GtkNotebook *notebook, GtkNotebookPage *page,                           guint page_num) {  /* Force an update, just in case */  calendar_update_all_uis() ;  switch (page_num)    {    case 0:      current_view=CALENDAR_VIEW_TODO;      break;    case 1:        current_view=CALENDAR_VIEW_DAILY;      break;    case 2:      current_view=CALENDAR_VIEW_WORK;      break;    case 3:      current_view=CALENDAR_VIEW_WEEK;      break;    case 4:      current_view=CALENDAR_VIEW_MONTH;      break;    case 5:       current_view=CALENDAR_VIEW_YEAR;      break;    }					  /*	if (page_num == 1) 		current_view=CALENDAR_VIEW_DAILY;		if (page_num == 2) 		current_view=CALENDAR_VIEW_WORK;	if (page_num == 3) 		current_view=CALENDAR_VIEW_WEEK;	 Function has been deprecated due to fix supplied by George Mason for	 * tcal redraw problem.  Thanks George!	 */  if (page_num==1) {#if 0    GtkWidget *daily=lw (calendar_window, "schedule");    GdkRectangle rect;    if (!daily)      return;    rect.height=SCHEDULE (daily)->height;    rect.width=SCHEDULE (daily)->width;    rect.x=0;    rect.y=0;    schedule_paint (daily, &rect);#endif  }  if (page_num==4) {    GtkWidget *monthly=lw (calendar_window, "monthly");    if (!monthly)      return;    gtk_tcal_paint (monthly, NULL);  }  if (page_num==5) {    GtkWidget *yearly=lw (calendar_window, "yearly");    if (!yearly)      return;    gtk_tcal_paint (yearly, NULL);  }}void calendar_update_all_uis () {	if (!calendar_window)		return;	event_store_updated ();	calendar_daycal_day_selected (GTK_CALENDAR (lw (calendar_window, "daily_calendar")));	calendar_weekcal_day_selected (GTK_CALENDAR (lw (calendar_window, "weekly_calendar")));	calendar_workweekcal_day_selected (GTK_CALENDAR (lw (calendar_window, "calendar2")));	calendar_daycal_month_changed (GTK_CALENDAR (lw (calendar_window, "daily_calendar")));		return ;}void mail_todo_callback (GtkWidget *widget, gpointer userdata){	Todo *todo = userdata;	char *subject_line;	GtkWidget *window = make_new_message_window (NULL, NULL);	GtkWidget *subject = lookup_widget (window, "subject_entry");	GtkWidget *body = lookup_widget (window, "body_textbox");	subject_line = (char *)calloc (strlen (todo->due) + 7, sizeof (char));	sprintf (subject_line, "TODO: %s", todo->due);	gtk_entry_set_text (GTK_ENTRY (subject), subject_line);	gtk_text_insert (GTK_TEXT (body), NULL, NULL, NULL, todo->text, -1);	if (subject_line) free (subject_line);}GtkWidget *todo_popup (){	GtkWidget *menu;	GtkWidget *title, *sep, *mail, *delete;	menu = gtk_menu_new();	gtk_object_set_data (GTK_OBJECT (menu), "menu", menu);	title= gtk_menu_item_new_with_label ("Todo Actions");        gtk_widget_ref (title);        gtk_object_set_data_full (GTK_OBJECT (menu), "title", title,                                        (GtkDestroyNotify) gtk_widget_unref);	gtk_widget_show(title);        gtk_container_add (GTK_CONTAINER (menu), title);	sep = gtk_menu_item_new();	gtk_widget_show(sep);	gtk_container_add (GTK_CONTAINER (menu), sep);	mail = gtk_menu_item_new_with_label ("Mail Item");	gtk_widget_ref (mail);	gtk_object_set_data_full (GTK_OBJECT (menu), "mail", mail,					(GtkDestroyNotify) gtk_widget_unref);	gtk_container_add (GTK_CONTAINER (menu), mail);	gtk_widget_show(mail);        delete = gtk_menu_item_new_with_label ("Delete Item");        gtk_widget_ref (delete);        gtk_object_set_data_full (GTK_OBJECT (menu), "delete", delete,                                        (GtkDestroyNotify) gtk_widget_unref);        gtk_container_add (GTK_CONTAINER (menu), delete);        gtk_widget_show(delete);	return menu;}void todo_button_press_event (GtkWidget *widget, GdkEventButton *event, gpointer userdata){	Todo *todo = todo_find_from_tree (widget);	GtkWidget *menu = todo_popup();        gtk_signal_connect (GTK_OBJECT (lookup_widget (menu,"mail")),		"activate", GTK_SIGNAL_FUNC (mail_todo_callback), todo);        gtk_signal_connect (GTK_OBJECT (lookup_widget (menu,"delete")),		"activate", GTK_SIGNAL_FUNC (calendar_todo_delete), todo);	if (event->button == 3)		gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL, 1, 0);}/* * Warning, this function is directly accessing some GTK * attributes.  This may break in future releases of GTK. * On the other hand, there isn't a way to otherwise do this * because GTK, being lame, doesn't properly expose an interface * to common sense attributes. */voidnew_event_subject_changed( GtkWidget *widget, gpointer data ){  GtkWidget *window ;  char *text ;  char *newText ;  char *subject ;  int length ;  char compText[] = ": " ;  window = lookup_widget (widget, "event_editor" ) ;  text = gtk_entry_get_text (GTK_ENTRY (widget));  if ( (text) && (length = strlen( text )) )    {      subject = GTK_WINDOW(window) -> title ;      length = strlen( subject ) + strlen( compText ) + strlen( text ) ;      subject = strstr( GTK_WINDOW(window) -> title, compText ) ;      if( subject ) *subject = (char)0x00 ;      subject = GTK_WINDOW(window) -> title ;      newText = (char *)calloc( length+10, sizeof (char) ) ;      sprintf( newText, "%s%s%s", subject, compText, text ) ;      gtk_window_set_title (GTK_WINDOW (window), newText);      free( newText ) ;    }  else    {      text = strstr( GTK_WINDOW(window) -> title, compText ) ;      if( text )	{	  *text = (char)0x00 ;	  newText = strdup( GTK_WINDOW(window) -> title ) ;	  gtk_window_set_title (GTK_WINDOW (window), newText ) ;	  free( newText ) ;	}    }  return ;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -