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

📄 dict.c

📁 LINUX下的DICT.CN的客户端,C语言实现.
💻 C
字号:
/* dict.c * Vincent.Silent * vincent.silent@gmail.com * 2008-04 */#include "dict.h"#include "lookup.h"#include <libgnome/libgnome.h>gint dict_win_init(DictWindow * dw){	if(!dw)	  goto error;	/* create a new window */	dw->m_Win = gtk_window_new(GTK_WINDOW_TOPLEVEL);	/* set window title */	gtk_window_set_title(GTK_WINDOW(dw->m_Win), DICT_WIN_TITLE);	gchar path[256];	extern gchar app_path[256];	strcpy(path, app_path);	strcat(path, DICT_ICON_PATH);	/* set window icon */	gtk_window_set_icon_from_file(GTK_WINDOW(dw->m_Win), path, NULL);	/* set window size */	gtk_widget_set_size_request(dw->m_Win, 460, 340);	/* set window position */	gtk_window_set_position(GTK_WINDOW(dw->m_Win), GTK_WIN_POS_CENTER);	/* connect signal delete event */	g_signal_connect(dw->m_Win, "delete-event",					G_CALLBACK(dict_win_on_delete_event), NULL);	/* create a vbox and add in window */	GtkWidget * vbox0 = gtk_vbox_new(FALSE, 0);	gtk_container_add(GTK_CONTAINER(dw->m_Win), vbox0);	/* create a menubar and pack in vbox0 */	GtkWidget * menubar = gtk_menu_bar_new();	gtk_box_pack_start(GTK_BOX(vbox0), menubar, FALSE, TRUE, 0);	/* create two menuitems and insert in menubar */	GtkWidget * menuitem0 = gtk_menu_item_new_with_label(FILE_MENU_BAR);	GtkWidget * menuitem1 = gtk_menu_item_new_with_label(HELP_MENU_BAR);	gtk_menu_shell_insert(GTK_MENU_SHELL(menubar), menuitem0, 0);	gtk_menu_shell_insert(GTK_MENU_SHELL(menubar), menuitem1, 1);	/* create two menus */	GtkWidget * menu0 = gtk_menu_new();	GtkWidget * menu1 = gtk_menu_new();	gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem0), menu0);	gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem1), menu1);	/* create two imagemenuitems */	GtkWidget * imagemenuitem0 = gtk_image_menu_item_new_with_label(QUIT_MENU_ITEM);	GtkWidget * imagemenuitem1 = gtk_image_menu_item_new_with_label(ABOUT_MENU_ITEM);	gtk_menu_shell_insert(GTK_MENU_SHELL(menu0), imagemenuitem0, 0);	gtk_menu_shell_insert(GTK_MENU_SHELL(menu1), imagemenuitem1, 0);		/* connect signal activate */	g_signal_connect(imagemenuitem0, "activate", G_CALLBACK(dict_menu_item_on_activate), (gpointer)(0));	g_signal_connect(imagemenuitem1, "activate", G_CALLBACK(dict_menu_item_on_activate), (gpointer)(1));	/* create two images */	GtkWidget * image0 = gtk_image_new_from_stock(GTK_STOCK_QUIT, GTK_ICON_SIZE_MENU);	GtkWidget * image1 = gtk_image_new_from_stock(GTK_STOCK_ABOUT, GTK_ICON_SIZE_MENU);	gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(imagemenuitem0), image0);	gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(imagemenuitem1), image1);	/* create a hbox */	GtkWidget * hbox = gtk_hbox_new(FALSE, 0);	gtk_container_set_border_width(GTK_CONTAINER(hbox), 2);	gtk_box_pack_start(GTK_BOX(vbox0), hbox, FALSE, TRUE, 1);	/* create a entry and a button */	GtkWidget * entry = gtk_entry_new_with_max_length(1024);	dw->m_Entry = entry;	GtkWidget * button = gtk_button_new_with_label(LOOK_UP_BUTTON);	gtk_widget_set_size_request(button, 100, -1);	gtk_box_pack_start(GTK_BOX(hbox), entry, TRUE, TRUE, 0);	gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, TRUE, 1);	/* connect signal key-press-event */	g_signal_connect(entry, "key-press-event",					G_CALLBACK(entry_on_enter), button);	/* connect signal enter notify event */	g_signal_connect(entry, "enter-notify-event",					G_CALLBACK(entry_on_enter_notify_event), NULL);	/* connect siganl clicked */	g_signal_connect(button, "clicked", G_CALLBACK(look_up_button_on_clicked), dw);	/* create a scrolled window */	GtkWidget * scrolledwindow = gtk_scrolled_window_new(NULL, NULL);	gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwindow), GTK_POLICY_AUTOMATIC,									GTK_POLICY_AUTOMATIC);	gtk_container_set_border_width(GTK_CONTAINER(scrolledwindow), 2);	gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolledwindow), GTK_SHADOW_OUT);	gtk_box_pack_start(GTK_BOX(vbox0), scrolledwindow, TRUE, TRUE, 2);	/* create a text view */	GtkWidget * textview = gtk_text_view_new();	dw->m_TextView = textview;	gtk_text_view_set_editable(GTK_TEXT_VIEW(textview), FALSE);	gtk_container_add(GTK_CONTAINER(scrolledwindow), textview);	/* connect signal */	g_signal_connect(textview, "key-press-event", G_CALLBACK(text_view_on_key_press_event), entry);		/* create tags */	gtk_text_buffer_create_tag (gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview)), "bold",			      "weight", PANGO_WEIGHT_BOLD, NULL);		gtk_widget_show_all(dw->m_Win);	return 0;error:	return -1;}void dict_win_quit(){	gtk_main_quit();}/* signal functions */gboolean dict_win_on_delete_event(GtkWidget * widget, GdkEvent * event,										gpointer data){	gtk_widget_hide(widget);	return TRUE;}void dict_menu_item_on_activate(GtkMenuItem * menuitem, gpointer data){	if(data == 0)	  dict_win_quit();	else	  gnome_url_show(ABOUT_URL, NULL);}void look_up_button_on_clicked(GtkButton * button, gpointer data){	DictWindow * dw = (DictWindow*)(data);	Lookup lookup;	if(look_up_init(&lookup, dw->m_TextView, dw->m_Entry, dw->m_Win))	// init lookup failed!	{		GtkWidget * msg_dialog = gtk_message_dialog_new(GTK_WINDOW(dw->m_Win),								GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE,								INIT_LOOK_UP_FAILED);		gtk_dialog_run(GTK_DIALOG(msg_dialog));		gtk_widget_destroy(msg_dialog);		return;	}	look_up(&lookup);}gboolean entry_on_enter(GtkWidget * widget, GdkEventKey * event, gpointer data){	GtkButton * button = (GtkButton*)(data);	if(event->keyval == 65293) /* Enter key */	  gtk_button_clicked(button);	return FALSE;}gboolean entry_on_enter_notify_event(GtkWidget * widget, GdkEventCrossing * event, gpointer data){	gtk_widget_grab_focus(widget);	gtk_entry_select_region(GTK_ENTRY(widget), 0, -1);	return FALSE;}gboolean text_view_on_key_press_event(GtkWidget * widget, GdkEventKey * event, gpointer data){	GtkWidget * w = (GtkWidget*)(data);	gtk_widget_grab_focus(w);	gtk_entry_set_position(GTK_ENTRY(w), -1);	return FALSE;}

⌨️ 快捷键说明

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