/* * This file is part of WordExtract. * * Copyright (C) 2009 Borisov Alexandr * * WordExtract is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * WordExtract is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with WordExtract. If not, see . */ #include #include #include "dictwin.h" #include "mainwin.h" #include "dict.h" enum {WORD_ITEM = 0, N_COLUMNS}; static void fill_dict_words(GtkListStore *, char **); static void cancel_btn_click(GtkWidget *, gpointer); static void ok_btn_click(GtkWidget *, gpointer); void create_dict_win() { GtkWidget *dict_win; dict_win = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_widget_set_size_request(dict_win, 550, 410); gtk_window_set_title(GTK_WINDOW(dict_win), "My Dictionary"); gtk_window_set_transient_for(GTK_WINDOW(dict_win), GTK_WINDOW(main_window)); gtk_window_set_position(GTK_WINDOW(dict_win), GTK_WIN_POS_CENTER_ON_PARENT); gtk_window_set_modal(GTK_WINDOW(dict_win), TRUE); gtk_window_set_skip_taskbar_hint(GTK_WINDOW(dict_win), TRUE); GtkWidget *vbox; vbox = gtk_vbox_new(FALSE, 2); gtk_container_add(GTK_CONTAINER(dict_win), vbox); gtk_widget_show(vbox); GtkWidget *dict_hbox; dict_hbox = gtk_hbox_new(TRUE, 2); gtk_box_pack_start(GTK_BOX(vbox), dict_hbox, TRUE, TRUE, 2); gtk_widget_show(dict_hbox); /*dictionary panel*/ GtkWidget *dict_vbox; dict_vbox = gtk_vbox_new(FALSE, 2); gtk_box_pack_start(GTK_BOX(dict_hbox), dict_vbox, TRUE, TRUE, 0); gtk_widget_show(dict_vbox); GtkWidget *dict_label; dict_label = gtk_label_new("Words in your dictionary: "); gtk_box_pack_start(GTK_BOX(dict_vbox), dict_label, FALSE, FALSE, 0); gtk_widget_show(dict_label); GtkWidget *dict_sc; dict_sc = gtk_scrolled_window_new(NULL, NULL); gtk_box_pack_start(GTK_BOX(dict_vbox), dict_sc, TRUE, TRUE, 0); gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(dict_sc), GTK_SHADOW_IN); gtk_widget_show(dict_sc); char **dict_words; GtkWidget *dict_words_list; GtkListStore *store_model; GtkCellRenderer *renderer; GtkTreeViewColumn *column; dict_words_list = gtk_tree_view_new(); gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(dict_words_list)), GTK_SELECTION_SINGLE); gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(dict_words_list), FALSE); gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(dict_words_list), TRUE); gtk_container_add(GTK_CONTAINER(dict_sc), dict_words_list); store_model = gtk_list_store_new(N_COLUMNS, G_TYPE_STRING); gtk_tree_view_set_model(GTK_TREE_VIEW(dict_words_list), GTK_TREE_MODEL(store_model)); renderer = gtk_cell_renderer_text_new(); g_object_set(renderer, "editable", TRUE, NULL); column = gtk_tree_view_column_new_with_attributes("List Items", renderer, "text", WORD_ITEM, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(dict_words_list), column); dict_words = get_sorted(dict); fill_dict_words(store_model, dict_words); free(dict_words); gtk_widget_show(dict_words_list); /*user text panel*/ GtkWidget *user_vbox; user_vbox = gtk_vbox_new(FALSE, 2); gtk_box_pack_start(GTK_BOX(dict_hbox), user_vbox, TRUE, TRUE, 0); gtk_widget_show(user_vbox); GtkWidget *user_label; user_label = gtk_label_new("Changes to your dictionary: "); gtk_box_pack_start(GTK_BOX(user_vbox), user_label, FALSE, FALSE, 0); gtk_widget_show(user_label); GtkWidget *user_sc; user_sc = gtk_scrolled_window_new(NULL, NULL); gtk_box_pack_start(GTK_BOX(user_vbox), user_sc, TRUE, TRUE, 0); gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(user_sc), GTK_SHADOW_IN); gtk_widget_show(user_sc); GtkWidget *user_words; GtkListStore *user_store_model; GtkCellRenderer *user_renderer; GtkTreeViewColumn *user_column; user_words = gtk_tree_view_new(); gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(user_words)), GTK_SELECTION_SINGLE); gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(user_words), FALSE); gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(user_words), TRUE); gtk_container_add(GTK_CONTAINER(user_sc), user_words); user_store_model = gtk_list_store_new(N_COLUMNS, G_TYPE_STRING); gtk_tree_view_set_model(GTK_TREE_VIEW(user_words), GTK_TREE_MODEL(user_store_model)); user_renderer = gtk_cell_renderer_text_new(); g_object_set(user_renderer, "editable", TRUE, NULL); user_column = gtk_tree_view_column_new_with_attributes("List Items", user_renderer, "text", WORD_ITEM, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(user_words), user_column); gtk_widget_show(user_words); GtkWidget *entry_hbox; entry_hbox = gtk_hbox_new(FALSE, 2); gtk_box_pack_start(GTK_BOX(user_vbox), entry_hbox, FALSE, FALSE, 0); gtk_widget_show(entry_hbox); GtkWidget *add_label; add_label = gtk_label_new("Add word: "); gtk_box_pack_start(GTK_BOX(entry_hbox), add_label, FALSE, FALSE, 0); gtk_widget_show(add_label); GtkWidget *add_entry; add_entry = gtk_entry_new_with_max_length(WORDLENGTH); gtk_box_pack_start(GTK_BOX(entry_hbox), add_entry, FALSE, FALSE, 0); gtk_widget_show(add_entry); GtkWidget *add_btn; GtkWidget *image; add_btn = gtk_button_new(); image = gtk_image_new_from_stock(GTK_STOCK_ADD, GTK_ICON_SIZE_BUTTON); gtk_container_add(GTK_CONTAINER(add_btn), image); gtk_widget_show(image); gtk_box_pack_start(GTK_BOX(entry_hbox), add_btn, FALSE, FALSE, 0); gtk_widget_set_tooltip_text(GTK_WIDGET(add_btn), "Add word to the dictionary"); gtk_widget_show(add_btn); GtkWidget *hbox; hbox = gtk_hbox_new(FALSE, 2); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); gtk_widget_show(hbox); GtkWidget *btn_hbox; btn_hbox = gtk_hbox_new(TRUE, 2); gtk_box_pack_end(GTK_BOX(hbox), btn_hbox, FALSE, FALSE, 0); gtk_widget_show(btn_hbox); GtkWidget *cancel_btn; cancel_btn = gtk_button_new_from_stock(GTK_STOCK_CANCEL); gtk_box_pack_end(GTK_BOX(btn_hbox), cancel_btn, TRUE, TRUE, 0); gtk_widget_set_tooltip_text(GTK_WIDGET(cancel_btn), "Discard changes and close the window"); g_signal_connect(G_OBJECT(cancel_btn), "clicked", G_CALLBACK(cancel_btn_click), (gpointer) dict_win); gtk_widget_show(cancel_btn); GtkWidget *ok_btn; ok_btn = gtk_button_new_from_stock(GTK_STOCK_OK); gtk_box_pack_end(GTK_BOX(btn_hbox), ok_btn, TRUE, TRUE, 0); gtk_widget_set_tooltip_text(GTK_WIDGET(ok_btn), "Apply changes and close the window"); g_signal_connect(G_OBJECT(ok_btn), "clicked", G_CALLBACK(ok_btn_click), (gpointer) dict_win); gtk_widget_show(ok_btn); gtk_widget_show(dict_win); } static void fill_dict_words(GtkListStore *store, char **word_list) { GtkTreeIter iter; int cnt, i; cnt = get_words_count(dict); for (i = 0; i < cnt; i++) { gtk_list_store_append(store, &iter); gtk_list_store_set(store, &iter, WORD_ITEM, *word_list, -1); word_list++; } } static void cancel_btn_click(GtkWidget *widget, gpointer dict_win) { gtk_widget_destroy(GTK_WIDGET(dict_win)); } static void ok_btn_click(GtkWidget *widget, gpointer dict_win) { gtk_widget_destroy(GTK_WIDGET(dict_win)); }