summaryrefslogtreecommitdiff
path: root/dictwin.c
diff options
context:
space:
mode:
authorb0ric <b0risov.alexandr@rambler.ru>2009-08-10 01:08:31 +0300
committerb0ric <b0risov.alexandr@rambler.ru>2009-08-10 01:08:31 +0300
commitd2b347e0aa6e5fc3de95253c43900c15938dbaaf (patch)
tree8f7a3a2756e9cf5292348170a45d971dc061b871 /dictwin.c
parent343357ed1e7907cf4b488058053df280ae63c7bb (diff)
Interface modification and improvement. Lecense changed to GPLv3
Diffstat (limited to 'dictwin.c')
-rw-r--r--dictwin.c174
1 files changed, 135 insertions, 39 deletions
diff --git a/dictwin.c b/dictwin.c
index 9569a35..254da00 100644
--- a/dictwin.c
+++ b/dictwin.c
@@ -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));
+}