📄 msearch.c
字号:
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 + -