diff options
Diffstat (limited to 'dictwin.c')
-rw-r--r-- | dictwin.c | 174 |
1 files changed, 135 insertions, 39 deletions
@@ -1,35 +1,40 @@ -/* This file is a part of WordExtract project +/* + * This file is part of WordExtract. * * Copyright (C) 2009 Borisov Alexandr * - * This program is free software: you can redistribute it and/or modify + * 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 2 of the License, or + * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * - * This program is distributed in the hope that it will be useful, + * 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 + * 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 this program. If not, see <http://www.gnu.org/licenses/>. + * along with WordExtract. If not, see <http://www.gnu.org/licenses/>. */ #include <gtk/gtk.h> +#include <stdlib.h> #include "dictwin.h" #include "mainwin.h" #include "dict.h" -static void fill_dict(GtkTextBuffer *, Word *); +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, 500, 375); - gtk_container_set_border_width(GTK_CONTAINER(dict_win), 0); + 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); @@ -39,22 +44,109 @@ void create_dict_win() GtkWidget *vbox; vbox = gtk_vbox_new(FALSE, 2); gtk_container_add(GTK_CONTAINER(dict_win), vbox); - gtk_container_set_border_width(GTK_CONTAINER(vbox), 2); 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(vbox), dict_sc, TRUE, TRUE, 0); + 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); - GtkWidget *dict_text; - GtkTextBuffer *buffer; - dict_text = gtk_text_view_new(); - gtk_container_add(GTK_CONTAINER(dict_sc), dict_text); - buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(dict_text)); - fill_dict(buffer, dict); - gtk_widget_show(dict_text); + 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); @@ -69,38 +161,42 @@ void create_dict_win() 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 *save_btn; - save_btn = gtk_button_new_from_stock(GTK_STOCK_SAVE); - gtk_box_pack_end(GTK_BOX(btn_hbox), save_btn, TRUE, TRUE, 0); - gtk_widget_show(save_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(GtkTextBuffer *buffer, Word *dict) +static void fill_dict_words(GtkListStore *store, char **word_list) { - GtkTextIter iter; - - if (dict != NULL) { - if (dict->lsibl != NULL) - fill_dict(buffer, dict->lsibl); - if (dict->rsibl != NULL) - fill_dict(buffer, dict->rsibl); - gtk_text_buffer_get_end_iter(buffer, &iter); - gtk_text_buffer_insert(buffer, &iter, (gchar*) dict->word, -1); - gtk_text_buffer_insert(buffer, &iter, "\n", -1); + 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)); +} |