📄 dict.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 + -