以下是这一段时间用 GTK2 编的程序
#include <gtk/gtk.h>
#include <stdio.h>
GtkListStore *model=NULL;
GtkWidget *treeview1=NULL,*treeview2=NULL;
GtkWidget *textview1=NULL;
FILE *file=NULL;
gchar *buf;
void file_ok_sel( GtkWidget *fs)
{
GtkTreeIter iter;
GtkTreePath *path;
gboolean valid;
gint cmp_result;
GtkWidget *message_box;
buf=(gchar*)gtk_file_selection_get_filename (GTK_FILE_SELECTION (fs));
gtk_file_selection_complete(GTK_FILE_SELECTION (fs),buf);
if(g_strrstr(buf,".dic")==NULL) return;
valid = gtk_tree_model_get_iter_first (GTK_TREE_MODEL(model), &iter);
while (valid)
{
gchar *str_data;
gtk_tree_model_get (GTK_TREE_MODEL(model), &iter, 0, &str_data, -1);
cmp_result=g_ascii_strncasecmp(buf,str_data,100);
if (cmp_result==0) break;
g_free (str_data);
valid = gtk_tree_model_iter_next (GTK_TREE_MODEL(model), &iter);
}
if (cmp_result==0)
{
buf=g_locale_to_utf8("该词库文件已经打开了!",-1,NULL,NULL,NULL);
message_box=gtk_message_dialog_new(GTK_WINDOW(fs),
GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_WARNING,
GTK_BUTTONS_OK,buf);
gtk_dialog_run(GTK_DIALOG(message_box));
gtk_widget_destroy(message_box);
}
else
{
gtk_list_store_append (model, &iter);
gtk_list_store_set (model, &iter,0,buf,-1);
path=gtk_tree_model_get_path(GTK_TREE_MODEL(model),&iter);
gtk_tree_view_set_cursor(GTK_TREE_VIEW(treeview2),
path,NULL,FALSE);
gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW(treeview2),
path,NULL,TRUE,1.0,0.0);
gtk_tree_path_free(path);
gtk_widget_hide(fs);
}
}
void on_clear_button_clicked(GtkWidget *w)
{
gtk_entry_set_text(GTK_ENTRY(w),"");
}
void on_open_button_clicked(GtkWidget *w)
{
static GtkWidget *filew=NULL;
if (filew==NULL){
buf=g_locale_to_utf8("打开或新建词库文件\n",-1,NULL,NULL,NULL);
filew = gtk_file_selection_new (buf);
g_signal_connect(G_OBJECT (filew),"delete-event",
G_CALLBACK (gtk_widget_hide),NULL);
g_signal_connect_swapped (G_OBJECT (GTK_FILE_SELECTION (filew)->ok_button),
"clicked",G_CALLBACK (file_ok_sel), filew);
g_signal_connect_swapped (G_OBJECT (GTK_FILE_SELECTION (filew)->cancel_button),
"clicked",G_CALLBACK (gtk_widget_hide), filew);
gtk_widget_show(filew);
gtk_file_selection_complete(GTK_FILE_SELECTION (filew),"*.dic");
}
else{
gtk_widget_show(filew);
gtk_file_selection_complete(GTK_FILE_SELECTION (filew),"*.dic");
}
}
void on_treeview2_cursor_changed(GtkTreeView *treeview)
{
GtkTreePath *path[1];
GtkTreeIter iter;
gchar *str_data;
gtk_tree_view_get_cursor(GTK_TREE_VIEW(treeview2),
path,
NULL);
gtk_tree_model_get_iter(GTK_TREE_MODEL(model),
&iter,
path[0]);
gtk_tree_model_get (GTK_TREE_MODEL(model), &iter, 0, &str_data, -1);
g_free(str_data);
gtk_tree_path_free(path[0]);
if (file!=NULL) fclose(file);
fopen(buf,"a+");
}
int main(int argc,char **argv)
{
GtkWidget *window;
GtkWidget *toolbar,*main_vbox,*vbox,*hbox;
GtkWidget *scrolledwindow;
GtkWidget *hpaned1;
GtkWidget *notebook1;
GtkWidget *label;
GtkWidget *entry1;
GtkWidget *clear_button,*open_button;
GtkTooltips *tooltip;
GtkCellRenderer *renderer;
GtkTreeViewColumn *column;
gtk_init(&argc,&argv);
/* 创建工具提示 */
tooltip=gtk_tooltips_new();
/* 创建主窗口 */
window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_default_size(GTK_WINDOW(window),700,500);
gtk_window_set_title(GTK_WINDOW(window),g_locale_to_utf8("通用词库编辑器",-1,NULL,NULL,NULL));
g_signal_connect(G_OBJECT(window),"destroy",gtk_main_quit,NULL);
/* 创建主纵向盒 */
main_vbox=gtk_vbox_new(FALSE,0);
gtk_widget_show(main_vbox);
gtk_container_add(GTK_CONTAINER(window),main_vbox);
/* 创建清除按钮和文本输入框,以及容纳它们的横向盒 */
hbox=gtk_hbox_new(FALSE,0);
gtk_widget_show(hbox);
gtk_box_pack_start(GTK_BOX(main_vbox),hbox,FALSE,TRUE,0);
/* 清除按钮 */
clear_button=gtk_button_new_from_stock("gtk-clear");
buf=g_locale_to_utf8("清除单词查询框中的内容",-1,NULL,NULL,NULL);
gtk_tooltips_set_tip(tooltip,clear_button,buf,NULL);
gtk_box_pack_start(GTK_BOX(hbox),clear_button,FALSE,FALSE,0);
gtk_button_set_relief (GTK_BUTTON (clear_button), GTK_RELIEF_NONE);
GTK_WIDGET_UNSET_FLAGS (clear_button, GTK_CAN_FOCUS);
gtk_widget_show(clear_button);
/* 文本输入框 */
entry1=gtk_entry_new();
gtk_widget_set_usize (entry1, -4, 28);
gtk_box_pack_start(GTK_BOX(hbox),entry1,TRUE,TRUE,3);
gtk_widget_show(entry1);
g_signal_connect_swapped(G_OBJECT(clear_button),"clicked",
G_CALLBACK(on_clear_button_clicked),entry1);
/* 创建水平分隔栏 */
hpaned1 = gtk_hpaned_new ();
gtk_widget_show (hpaned1);
gtk_paned_set_position (GTK_PANED (hpaned1), 180);
gtk_box_pack_start(GTK_BOX(main_vbox),hpaned1,TRUE,TRUE,0);
gtk_container_set_border_width(GTK_CONTAINER(hpaned1),2);
/* 创建笔记本构件 */
notebook1 = gtk_notebook_new ();
gtk_widget_show (notebook1);
gtk_paned_pack1 (GTK_PANED (hpaned1), notebook1, FALSE, TRUE);
gtk_notebook_set_tab_pos (GTK_NOTEBOOK (notebook1), GTK_POS_BOTTOM);
GTK_WIDGET_UNSET_FLAGS (notebook1, GTK_CAN_FOCUS);
/* 创建笔记本的第一个页“查看” */
scrolledwindow = gtk_scrolled_window_new (NULL, NULL);
gtk_widget_show (scrolledwindow);
gtk_container_add (GTK_CONTAINER (notebook1), scrolledwindow);
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow), GTK_SHADOW_ETCHED_IN);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
treeview1 = gtk_tree_view_new ();
gtk_widget_show (treeview1);
gtk_container_add (GTK_CONTAINER (scrolledwindow), treeview1);
buf=g_locale_to_utf8("查看(_V)",-1,NULL,NULL,NULL);
label = gtk_label_new_with_mnemonic (buf);
gtk_widget_show (label);
gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook1),
gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook1), 0), label);
gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
/* 创建笔记本的第二页“文件” */
vbox=gtk_vbox_new(FALSE,0);
gtk_widget_show(vbox);
gtk_container_add (GTK_CONTAINER (notebook1), vbox);
gtk_notebook_set_current_page(GTK_NOTEBOOK(notebook1),1);
scrolledwindow = gtk_scrolled_window_new (NULL, NULL);
gtk_widget_show (scrolledwindow);
gtk_box_pack_start(GTK_BOX(vbox),scrolledwindow,TRUE,TRUE,0);
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow), GTK_SHADOW_ETCHED_IN);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
/* 创建树视 */
model = gtk_list_store_new (1,G_TYPE_STRING);
treeview2 = gtk_tree_view_new_with_model (GTK_TREE_MODEL(model));
g_signal_connect(G_OBJECT(treeview2),"cursor-changed",
G_CALLBACK(on_treeview2_cursor_changed),
NULL);
gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (treeview2), TRUE);
/* 为 treeview2 添加列 */
renderer = gtk_cell_renderer_text_new ();
buf=g_locale_to_utf8("词库文件",-1,NULL,NULL,NULL);
column = gtk_tree_view_column_new_with_attributes (buf, renderer,
"text", 0,
NULL);
gtk_tree_view_append_column (GTK_TREE_VIEW (treeview2), column);
gtk_tree_view_column_set_sort_column_id (column, 0);
//gtk_tree_view_column_set_sort_order(column,GTK_SORT_ASCENDING);
gtk_tree_view_column_set_sort_indicator(column,TRUE);
gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(model),0,GTK_SORT_ASCENDING);
gtk_widget_show (treeview2);
gtk_container_add (GTK_CONTAINER (scrolledwindow), treeview2);
/* 标签 */
buf=g_locale_to_utf8("文件(_F)",-1,NULL,NULL,NULL);
label = gtk_label_new_with_mnemonic (buf);
gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook1),
gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook1), 1), label);
gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
hbox=gtk_hbox_new(FALSE,0);
gtk_widget_show(hbox);
gtk_box_pack_start(GTK_BOX(vbox),hbox,FALSE,TRUE,2);
/* 打开按钮 */
open_button=gtk_button_new_from_stock("gtk-open");
buf=g_locale_to_utf8("如果词库文件存在,就打开该词库文件,不存在,就创建一个新的词库文件。",-1,NULL,NULL,NULL);
gtk_tooltips_set_tip(tooltip,open_button,buf,NULL);
gtk_box_pack_start(GTK_BOX(hbox),open_button,FALSE,FALSE,0);
gtk_button_set_relief (GTK_BUTTON (open_button), GTK_RELIEF_NONE);
GTK_WIDGET_UNSET_FLAGS (open_button, GTK_CAN_FOCUS);
gtk_widget_show(open_button);
g_signal_connect(G_OBJECT(open_button),"clicked",G_CALLBACK(on_open_button_clicked),NULL);
/* 创建工具栏和文本视 */
vbox=gtk_vbox_new(FALSE,0);
gtk_widget_show(vbox);
gtk_paned_pack2 (GTK_PANED (hpaned1), vbox, TRUE, TRUE);
/* 工具栏 */
toolbar=gtk_toolbar_new();
gtk_widget_show(toolbar);
gtk_box_pack_start(GTK_BOX(vbox),toolbar,FALSE,TRUE,0);
gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),NULL,NULL,NULL,
gtk_image_new_from_stock("gtk-new",GTK_ICON_SIZE_SMALL_TOOLBAR),
NULL,NULL);
/* 创建文本视 */
scrolledwindow = gtk_scrolled_window_new (NULL, NULL);
gtk_widget_show (scrolledwindow);
gtk_box_pack_start (GTK_BOX (vbox), scrolledwindow, TRUE, TRUE,0);
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow), GTK_SHADOW_ETCHED_IN);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
textview1 = gtk_text_view_new ();
gtk_widget_show (textview1);
gtk_container_add (GTK_CONTAINER (scrolledwindow), textview1);
/* 显示主窗口 */
gtk_widget_show(window);
gtk_main();
return 0;
}
|