/*
* 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));
}