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

📄 msearch.c

📁 一个功能全面的电子邮件客户端
💻 C
📖 第 1 页 / 共 3 页
字号:
  gtk_widget_set_name (done_button, "done_button");  gtk_widget_ref (done_button);  gtk_object_set_data_full (GTK_OBJECT (msearch_window), "done_button",			    done_button, (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (done_button);  gtk_container_add (GTK_CONTAINER (hbuttonbox2), done_button);  GTK_WIDGET_SET_FLAGS (done_button, GTK_CAN_DEFAULT);  gtk_signal_connect (GTK_OBJECT (message_clist), "click_column",		      GTK_SIGNAL_FUNC (message_clist_clicked_column), NULL);  gtk_signal_connect (GTK_OBJECT (message_clist), "resize_column",		      GTK_SIGNAL_FUNC (cpos_set_msw), NULL);  gtk_signal_connect (GTK_OBJECT (msearch_window), "size_allocate",		      GTK_SIGNAL_FUNC (wsize_set_msw), NULL);  gtk_signal_connect (GTK_OBJECT (msearch_window), "delete_event",		      GTK_SIGNAL_FUNC (gtk_false), NULL);  gtk_signal_connect (GTK_OBJECT (msearch_window), "destroy",		      GTK_SIGNAL_FUNC (msearch_destroy), NULL);  gtk_signal_connect (GTK_OBJECT (search_folder), "changed",		      GTK_SIGNAL_FUNC (on_search_folder_changed), NULL);  gtk_signal_connect (GTK_OBJECT (child_button), "toggled",		      GTK_SIGNAL_FUNC (on_child_button_toggled), NULL);  gtk_signal_connect (GTK_OBJECT (case_button), "toggled",		      GTK_SIGNAL_FUNC (on_case_button_toggled), NULL);  gtk_signal_connect (GTK_OBJECT (any_button), "toggled",		      GTK_SIGNAL_FUNC (on_any_button_toggled), NULL);  gtk_signal_connect (GTK_OBJECT (all_button), "toggled",		      GTK_SIGNAL_FUNC (on_all_button_toggled), NULL);  gtk_signal_connect (GTK_OBJECT (search_button), "clicked",		      GTK_SIGNAL_FUNC (msearch_search), NULL);  gtk_signal_connect (GTK_OBJECT (cancel_button), "clicked",		      GTK_SIGNAL_FUNC (msearch_cancel), NULL);  gtk_signal_connect (GTK_OBJECT (done_button), "clicked",		      GTK_SIGNAL_FUNC (msearch_destroy), NULL);  gtk_signal_connect (GTK_OBJECT (message_clist), "button_press_event",		      GTK_SIGNAL_FUNC (on_message_clist_button_press_event),		      NULL);  gtk_widget_grab_focus (search_button);  return msearch_window;}voidmsearch_destroy (GtkObject * object, gpointer user_data){  GtkWidget *msearch_window =    lookup_widget (GTK_WIDGET (object), "msearch_window");  GtkWidget *msearch_clist = lookup_widget (msearch_window,					    "message_clist");  msearch_destroy_clist_contents (GTK_CLIST (msearch_clist));  gtk_widget_destroy (msearch_window);}voidon_child_button_toggled (GtkWidget * widget, gpointer user_data){  GtkWidget *search_english = lookup_widget (widget, "search_english");  search_english_update (search_english);}voidon_case_button_toggled (GtkWidget * widget, gpointer user_data){  GtkWidget *search_english = lookup_widget (widget, "search_english");  search_english_update (search_english);}voidon_any_button_toggled (GtkWidget * widget, gpointer user_data){  GtkWidget *search_english = lookup_widget (widget, "search_english");  search_english_update (search_english);}voidon_all_button_toggled (GtkWidget * widget, gpointer user_data){  GtkWidget *search_english = lookup_widget (widget, "search_english");  search_english_update (search_english);}voidon_search_folder_changed (GtkEditable * editable, gpointer user_data){  GtkWidget *search_english =    lookup_widget (GTK_WIDGET (editable), "search_english");  search_english_update (search_english);}voidon_search_attribute_changed (GtkEditable * editable, gpointer user_data){  GtkWidget *search_english =    lookup_widget (GTK_WIDGET (editable), "search_english");  search_english_update (search_english);}voidon_search_criteria_changed (GtkEditable * editable, gpointer user_data){  GtkWidget *search_english =    lookup_widget (GTK_WIDGET (editable), "search_english");  search_english_update (search_english);}voidon_search_text_changed (GtkEditable * editable, gpointer user_data){  GtkWidget *search_english =    lookup_widget (GTK_WIDGET (editable), "search_english");  search_english_update (search_english);}voidsearch_english_update (GtkWidget * text){  char *folder =    gtk_entry_get_text (GTK_ENTRY (lookup_widget (text, "search_folder")));  GtkWidget *include = lookup_widget (text, "child_button");  GtkWidget *ignore = lookup_widget (text, "case_button");  GtkWidget *anyall = lookup_widget (text, "all_button");  GtkWidget *tree = lookup_widget (text, "search_tree");  GList *trseek = NULL;  int count = 0;  gtk_text_set_point (GTK_TEXT (text), 0);  gtk_text_forward_delete (GTK_TEXT (text),			   gtk_text_get_length (GTK_TEXT (text)));  gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL, "Search in ", -1);  if (strcasecmp (folder, "* All Folders") == 0)    gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL, "all folders", -1);  else    gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL, folder, -1);  if (GTK_TOGGLE_BUTTON (include)->active)    gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL,		     ", including subfolders", -1);  if (GTK_TOGGLE_BUTTON (ignore)->active)    gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL,		     ", ignoring case", -1);  if (GTK_TOGGLE_BUTTON (anyall)->active)    gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL, ", for all matches",		     -1);  else    gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL, ", for any matches",		     -1);  for (trseek = GTK_TREE (tree)->children; trseek; trseek = trseek->next)    {      GtkWidget *trtarget = trseek->data;      char *where =	gtk_entry_get_text (GTK_ENTRY			    (gtk_object_get_data (GTK_OBJECT (trtarget),						  "search_attribute")));      char *is =	gtk_entry_get_text (GTK_ENTRY			    (gtk_object_get_data (GTK_OBJECT (trtarget),						  "search_criteria")));      char *to =	gtk_entry_get_text (GTK_ENTRY			    (gtk_object_get_data (GTK_OBJECT (trtarget),						  "search_text")));      if (count++)	gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL, ", and", -1);      else	gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL, ",", -1);      gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL, " where ", -1);      switch (*where)	{	case 'S':	  gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL,			   "the subject header is", -1);	  break;	case 'F':	  gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL,			   "the from header is", -1);	  break;        case 'R':          gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL,                           "the reply-to header is", -1);          break;	case 'T':	  gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL,			   "the to header is", -1);	  break;	case 'C':	  gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL,			   "the cc header is", -1);	  break;	case 'B':	  gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL,			   "the bcc header is", -1);	  break;	case 'M':	  gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL,			   "the message body is", -1);	  break;	case 'K':	  gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL,			   "the keywords are", -1);	  break;	case 'P':	  gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL,			   "the priority is", -1);	  break;	default:	  break;	}      if ((*is) == 'N')	gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL, " not exactly equal to", -1);      else if ((*is) == 'E')	gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL, " exactly equal to", -1);      else	gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL, " similar to or contains", -1);      gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL, " \"", -1);      gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL, to, -1);      gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL, "\"", -1);    }  gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL, ".", -1);}GtkWidget *on_add_button_clicked (GtkWidget * placeholder, GtkTree * tree){  GtkWidget *treeitem = NULL;  GtkWidget *hbox5;  GtkWidget *hbox3;  GtkWidget *where_label;  GtkWidget *combo2;  GList *combo2_items = NULL;  GtkWidget *search_attribute;	// selection of header targets or the message  GtkWidget *is_label;  GtkWidget *combo3;  GList *combo3_items = NULL;  GtkWidget *search_criteria;	// match if 'equal' or 'not equal' or 'similar'  GtkWidget *hbox4;  GtkWidget *to_label;  GtkWidget *search_text;	// the text we're to match is here  GtkTooltips *tooltips;  tooltips = gtk_tooltips_new();  g_return_val_if_fail (tree != NULL, NULL);  treeitem = gtk_tree_item_new ();  gtk_widget_show (treeitem);  gtk_tree_append (tree, treeitem);  gtk_tooltips_set_tip (tooltips, treeitem, _("Right click the region to the left of this text field to add or delete message search criteria"), NULL);  hbox5 = gtk_vbox_new (FALSE, 0);  gtk_widget_set_name (hbox5, "hbox5");  gtk_widget_ref (hbox5);  gtk_object_set_data_full (GTK_OBJECT (treeitem), "hbox5", hbox5,			    (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (hbox5);  gtk_container_add (GTK_CONTAINER (treeitem), hbox5);  hbox3 = gtk_hbox_new (FALSE, 0);  gtk_widget_set_name (hbox3, "hbox3");  gtk_widget_ref (hbox3);  gtk_object_set_data_full (GTK_OBJECT (treeitem), "hbox3", hbox3,			    (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (hbox3);  gtk_box_pack_start (GTK_BOX (hbox5), hbox3, TRUE, TRUE, 0);  where_label = gtk_label_new ("Where");  gtk_widget_set_name (where_label, "where_label");  gtk_widget_ref (where_label);  gtk_object_set_data_full (GTK_OBJECT (treeitem), "where_label",			    where_label, (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (where_label);  gtk_box_pack_start (GTK_BOX (hbox3), where_label, FALSE, FALSE, 0);  gtk_misc_set_padding (GTK_MISC (where_label), 3, 0);  combo2 = gtk_combo_new ();  gtk_widget_set_name (combo2, "combo2");  gtk_widget_ref (combo2);  gtk_object_set_data_full (GTK_OBJECT (treeitem), "combo2", combo2,			    (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (combo2);  gtk_box_pack_start (GTK_BOX (hbox3), combo2, TRUE, TRUE, 0);  gtk_container_set_border_width (GTK_CONTAINER (combo2), 3);  combo2_items = g_list_append (combo2_items, "Subject");  combo2_items = g_list_append (combo2_items, "From");  combo2_items = g_list_append (combo2_items, "Reply-To");  combo2_items = g_list_append (combo2_items, "To");  combo2_items = g_list_append (combo2_items, "Cc");  combo2_items = g_list_append (combo2_items, "Bcc");  combo2_items = g_list_append (combo2_items, "Message");  combo2_items = g_list_append (combo2_items, "Keyword");  combo2_items = g_list_append (combo2_items, "Priority");  gtk_combo_set_popdown_strings (GTK_COMBO (combo2), combo2_items);  g_list_free (combo2_items);  search_attribute = GTK_COMBO (combo2)->entry;  gtk_widget_set_name (search_attribute, "search_attribute");  gtk_widget_ref (search_attribute);  gtk_object_set_data_full (GTK_OBJECT (treeitem), "search_attribute",			    search_attribute,			    (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (search_attribute);  gtk_entry_set_editable (GTK_ENTRY (search_attribute), FALSE);  gtk_entry_set_text (GTK_ENTRY (search_attribute), "Message");  is_label = gtk_label_new ("is");  gtk_widget_set_name (is_label, "is_label");  gtk_widget_ref (is_label);  gtk_object_set_data_full (GTK_OBJECT (treeitem), "is_label", is_label,			    (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (is_label);  gtk_box_pack_start (GTK_BOX (hbox3), is_label, FALSE, FALSE, 0);  gtk_misc_set_padding (GTK_MISC (is_label), 3, 0);  combo3 = gtk_combo_new ();  gtk_widget_set_name (combo3, "combo3");  gtk_widget_ref (combo3);  gtk_object_set_data_full (GTK_OBJECT (treeitem), "combo3", combo3,			    (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (combo3);  gtk_box_pack_start (GTK_BOX (hbox3), combo3, TRUE, TRUE, 0);  gtk_container_set_border_width (GTK_CONTAINER (combo3), 3);  combo3_items = g_list_append (combo3_items, "Equal");  combo3_items = g_list_append (combo3_items, "Not Equal");  combo3_items = g_list_append (combo3_items, "Similar");  gtk_combo_set_popdown_strings (GTK_COMBO (combo3), combo3_items);  g_list_free (combo3_items);  search_criteria = GTK_COMBO (combo3)->entry;  gtk_widget_set_name (search_criteria, "search_criteria");  gtk_widget_ref (search_criteria);  gtk_object_set_data_full (GTK_OBJECT (treeitem), "search_criteria",			    search_criteria,			    (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (search_criteria);  gtk_entry_set_editable (GTK_ENTRY (search_criteria), FALSE);  gtk_entry_set_text (GTK_ENTRY (search_criteria), "Similar");  hbox4 = gtk_hbox_new (FALSE, 0);  gtk_widget_set_name (hbox4, "hbox4");  gtk_widget_ref (hbox4);  gtk_object_set_data_full (GTK_OBJECT (treeitem), "hbox4", hbox4,			    (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (hbox4);  gtk_box_pack_start (GTK_BOX (hbox5), hbox4, TRUE, TRUE, 0);  to_label = gtk_label_new ("to");  gtk_widget_set_name (to_label, "to_label");  gtk_widget_ref (to_label);  gtk_object_set_data_full (GTK_OBJECT (treeitem), "to_label", to_label,			    (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (to_label);  gtk_box_pack_start (GTK_BOX (hbox4), to_label, FALSE, FALSE, 0);  gtk_misc_set_padding (GTK_MISC (to_label), 3, 0);  search_text = gtk_entry_new ();  gtk_widget_set_name (search_text, "search_text");  gtk_widget_ref (search_text);  gtk_object_set_data_full (GTK_OBJECT (treeitem), "search_text",			    search_text, (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (search_text);  gtk_box_pack_start (GTK_BOX (hbox4), search_text, TRUE, TRUE, 0);  clip_handle_editable (search_text);  gtk_signal_connect (GTK_OBJECT (treeitem), "button_press_event",		      GTK_SIGNAL_FUNC (treeitem_button_event), NULL);  gtk_signal_connect (GTK_OBJECT (search_text), "activate",		      GTK_SIGNAL_FUNC (msearch_search), NULL);  gtk_signal_connect (GTK_OBJECT (search_attribute), "changed",		      GTK_SIGNAL_FUNC (on_search_attribute_changed), NULL);  gtk_signal_connect (GTK_OBJECT (search_criteria), "changed",		      GTK_SIGNAL_FUNC (on_search_criteria_changed), NULL);  gtk_signal_connect (GTK_OBJECT (search_text), "changed",		      GTK_SIGNAL_FUNC (on_search_text_changed), NULL);  gtk_object_set_data (GTK_OBJECT (treeitem), "tooltips", tooltips);  return treeitem;}voidsearch_tree_selected (GtkTree * tree, GtkWidget * child){  // we're just going to unselect the tree item, otherwise it looks funny  gtk_tree_unselect_child (tree, child);  if (GTK_IS_HBOX (GTK_BIN (child)->child))    {      GtkBoxChild *bchild =	GTK_BOX (GTK_BIN (child)->child)->children->next->next->data;      if (GTK_IS_ENTRY (bchild->widget))	{	  gtk_widget_grab_focus (bchild->widget);	}    }}GtkWidget *treeitem_popup (void){  GtkWidget *menu;  GtkWidget *title, *sep, *add, *delete;  menu = gtk_menu_new ();  gtk_widget_set_name (menu, "menu");  gtk_widget_ref (menu);  gtk_object_set_data_full (GTK_OBJECT (menu), "menu", menu,			    (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (menu);  gtk_object_set_data (GTK_OBJECT (menu), "menu", menu);  title = gtk_menu_item_new_with_label ("Search Actions");  gtk_widget_set_name (title, "title");  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);  add = gtk_menu_item_new_with_label ("Add");  gtk_widget_set_name (add, "add");  gtk_widget_ref (add);  gtk_object_set_data_full (GTK_OBJECT (menu), "add", add,			    (GtkDestroyNotify) gtk_widget_unref);  gtk_container_add (GTK_CONTAINER (menu), add);  gtk_widget_show (add);  delete = gtk_menu_item_new_with_label ("Delete");  gtk_widget_set_name (delete, "delete");  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);

⌨️ 快捷键说明

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