diff options
Diffstat (limited to 'listview.c')
-rw-r--r-- | listview.c | 162 |
1 files changed, 162 insertions, 0 deletions
diff --git a/listview.c b/listview.c new file mode 100644 index 0000000..8e3d35a --- /dev/null +++ b/listview.c @@ -0,0 +1,162 @@ +/* This file is a part of WordExtract project + * + * Copyright (C) 2009 Borisov Alexandr + * + * This program 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 + * (at your option) any later version. + * + * This program 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 this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "interface.h" + +enum {WORD_ITEM = 0, N_COLUMNS}; + +static GtkWidget *word_list; +static GtkListStore *store_model; + +static GtkWidget *create_popup_menu(void); +static void init_word_list(); +static void word_list_popup(GtkWidget *widget, GdkEventButton *event); +static gboolean popup_by_click(GtkWidget *word_list, GdkEventButton *event, gpointer data); +static gboolean popup_by_keybd(GtkWidget *word_list, gpointer data); +static void show_sent_item_click(GtkWidget *widget, gpointer data); +static void add_to_dict_item_click(GtkWidget *widget, gpointer data); + +GtkWidget *create_word_list() +{ + word_list = gtk_tree_view_new(); + gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(word_list)), GTK_SELECTION_SINGLE); + gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(word_list), FALSE); + gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(word_list), TRUE); + g_signal_connect(G_OBJECT(word_list), "button-press-event", G_CALLBACK(popup_by_click), NULL); + g_signal_connect(G_OBJECT(word_list), "popup-menu", G_CALLBACK(popup_by_keybd), NULL); + init_word_list(word_list); + return word_list; +} + +static void init_word_list() +{ + GtkCellRenderer *renderer; + GtkTreeViewColumn *column; + + store_model = gtk_list_store_new(N_COLUMNS, G_TYPE_STRING); + gtk_tree_view_set_model(GTK_TREE_VIEW(word_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(word_list), column); +} + +GtkWidget *create_popup_menu(void) +{ + GtkWidget *popup_menu; + GtkWidget *show_sent_item; + GtkWidget *find_image; + GtkWidget *add_to_dict_item; + GtkWidget *add_image; + + popup_menu = gtk_menu_new(); + + show_sent_item = gtk_image_menu_item_new_with_label("Show Sentence"); + gtk_menu_shell_append(GTK_MENU_SHELL(popup_menu), show_sent_item); + gtk_widget_show(show_sent_item); + g_signal_connect(G_OBJECT(show_sent_item), "activate", G_CALLBACK(show_sent_item_click), NULL); + gtk_widget_set_tooltip_text(GTK_WIDGET(show_sent_item), "Show sentenses word appears in"); + find_image = gtk_image_new_from_stock("gtk-find", GTK_ICON_SIZE_MENU); + gtk_widget_show(find_image); + gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(show_sent_item), find_image); + + add_to_dict_item = gtk_image_menu_item_new_with_label("Add To Dictionary"); + gtk_widget_show(add_to_dict_item); + gtk_menu_shell_append(GTK_MENU_SHELL(popup_menu), add_to_dict_item); + g_signal_connect(add_to_dict_item, "activate", G_CALLBACK(add_to_dict_item_click), NULL); + gtk_widget_set_tooltip_text(GTK_WIDGET(add_to_dict_item), "Add word to my dictionary"); + add_image = gtk_image_new_from_stock("gtk-add", GTK_ICON_SIZE_MENU); + gtk_widget_show(add_image); + gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(add_to_dict_item), add_image); + + return popup_menu; +} + +void clear_word_list() +{ + gtk_list_store_clear(store_model); +} + +void add_word_to_list(char *word) +{ + GtkTreeIter iter; + + gtk_list_store_append(store_model, &iter); + gtk_list_store_set(store_model, &iter, WORD_ITEM, word, -1); +} + +static void word_list_popup(GtkWidget *widget, GdkEventButton *event) +{ + GtkWidget *popup_menu; + + popup_menu = create_popup_menu(); + gtk_widget_show(popup_menu); + gtk_menu_popup(GTK_MENU(popup_menu), NULL, NULL, NULL, NULL, + (event != NULL) ? event->button : 0, gdk_event_get_time((GdkEvent*)event)); +} + +static gboolean popup_by_click(GtkWidget *word_list, GdkEventButton *event, gpointer data) +{ + GtkTreeSelection *selection; + GtkTreePath *path; + + if (event->type == GDK_BUTTON_PRESS && event->button == 3) { + selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(word_list)); + if (gtk_tree_selection_get_selected(GTK_TREE_SELECTION(selection), NULL, NULL)) { + if (gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(word_list), (gint) event->x, + (gint) event->y, &path, NULL, NULL, NULL)) { + gtk_tree_selection_unselect_all(selection); + gtk_tree_selection_select_path(selection, path); + word_list_popup(GTK_WIDGET(word_list), event); + return TRUE; + } + } + } +return FALSE; +} + +static gboolean popup_by_keybd(GtkWidget *word_list, gpointer data) +{ + word_list_popup(word_list, NULL); + return TRUE; +} + +void show_sent_item_click(GtkWidget *widget, gpointer data) +{ + GtkTreeSelection *selection; + GtkTreeModel *model; + GtkTreeIter iter; + gchar *word; + + selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(word_list)); + if (gtk_tree_selection_get_selected(selection, &model, &iter)) { + gtk_tree_model_get(model, &iter, 0, &word, -1); + set_find_text(word); + change_search_navigation_state(TRUE); + search_sentences(word); + g_free(word); + } +} + +void add_to_dict_item_click(GtkWidget *widget, gpointer data) +{ + +} + + |