X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fhomebank;a=blobdiff_plain;f=src%2Fui-tag.c;fp=src%2Fui-tag.c;h=e4df46939bf1ebca86ed00a5c9e9b4a81ee0274d;hp=d8c9806fa36f0a570d0216b0ca370f49acfbb2fe;hb=160a363125e5d06f47eb22b333788097e4f01362;hpb=5176d625f663a51663b33dfec764563e12fe22c4 diff --git a/src/ui-tag.c b/src/ui-tag.c index d8c9806..e4df469 100644 --- a/src/ui-tag.c +++ b/src/ui-tag.c @@ -40,7 +40,7 @@ extern struct Preferences *PREFS; /* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */ - +//TODO: still used in rep_time void ui_tag_combobox_populate(GtkComboBoxText *combobox) { @@ -79,6 +79,75 @@ GtkWidget *combobox; /* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */ +static void ui_tag_popover_cb_row_activated(GtkTreeView *tree_view, GtkTreePath *path, GtkTreeViewColumn *column, gpointer user_data) +{ +GtkTreeSelection *treeselection; +GtkTreeModel *model; +GtkTreeIter iter; +GtkEntry *entry = user_data; + + if( GTK_IS_ENTRY(entry) ) + { + treeselection = gtk_tree_view_get_selection(tree_view); + if( gtk_tree_selection_get_selected(treeselection, &model, &iter) ) + { + Tag *item; + + gtk_tree_model_get(model, &iter, LST_DEFTAG_DATAS, &item, -1); + + hbtk_entry_tag_name_append(GTK_ENTRY(user_data), item->name); + } + } +} + + +GtkWidget * +ui_tag_popover_list(GtkWidget *entry) +{ +GtkWidget *box, *menubutton, *image, *scrollwin, *treeview; + + menubutton = gtk_menu_button_new (); + image = gtk_image_new_from_icon_name ("pan-down-symbolic", GTK_ICON_SIZE_BUTTON); + gtk_container_add(GTK_CONTAINER(menubutton), image); + + //gtk_menu_button_set_direction (GTK_MENU_BUTTON(menubutton), GTK_ARROW_DOWN ); + //gtk_widget_set_halign (menubutton, GTK_ALIGN_END); + gtk_widget_show_all(menubutton); + + //GtkWidget *template = ui_popover_tpl_create(data); + + box = gtk_box_new(GTK_ORIENTATION_VERTICAL, SPACING_MEDIUM); + scrollwin = gtk_scrolled_window_new(NULL,NULL); + gtk_box_pack_start(GTK_BOX(box), scrollwin, TRUE, TRUE, 0); + gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrollwin), GTK_SHADOW_ETCHED_IN); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollwin), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); + treeview = ui_tag_listview_new(FALSE); + //data.LV_tag = treeview; + gtk_container_add(GTK_CONTAINER(scrollwin), treeview); + gtk_widget_show_all(box); + + gtk_tree_view_set_hover_selection(GTK_TREE_VIEW(treeview), TRUE); + gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(treeview), FALSE); + gtk_tree_view_set_activate_on_single_click(GTK_TREE_VIEW(treeview), TRUE); + + + GtkWidget *popover = create_popover (menubutton, box, GTK_POS_BOTTOM); + gtk_widget_set_size_request (popover, HB_MINWIDTH_LIST, HB_MINHEIGHT_LIST); + + gtk_menu_button_set_popover(GTK_MENU_BUTTON(menubutton), popover); + + ui_tag_listview_populate(treeview, 0); + + g_signal_connect (treeview, "row-activated", G_CALLBACK (ui_tag_popover_cb_row_activated), entry); + g_signal_connect_swapped(treeview, "row-activated", G_CALLBACK(gtk_popover_popdown), popover); + + return menubutton; +} + + +/* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */ + + static void ui_tag_listview_toggled_cb (GtkCellRendererToggle *cell, gchar *path_str, @@ -318,6 +387,40 @@ GtkTreeViewColumn *column; /* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */ +static void ui_tag_manage_filter_text_handler (GtkEntry *entry, + const gchar *text, + gint length, + gint *position, + gpointer data) +{ +GtkEditable *editable = GTK_EDITABLE(entry); +gint i, count=0; +gchar *result = g_new0 (gchar, length+1); + + for (i=0; i < length; i++) + { + if (text[i]==' ') + continue; + result[count++] = text[i]; + } + + + if (count > 0) { + g_signal_handlers_block_by_func (G_OBJECT (editable), + G_CALLBACK (ui_tag_manage_filter_text_handler), + data); + gtk_editable_insert_text (editable, result, count, position); + g_signal_handlers_unblock_by_func (G_OBJECT (editable), + G_CALLBACK (ui_tag_manage_filter_text_handler), + data); + } + g_signal_stop_emission_by_name (G_OBJECT (editable), "insert_text"); + + g_free (result); +} + + + /** * ui_tag_manage_dialog_add: * @@ -664,7 +767,8 @@ gint w, h, row; g_object_bind_property (data.BT_add, "active", addreveal, "reveal-child", G_BINDING_BIDIRECTIONAL); g_signal_connect (G_OBJECT (data.ST_name), "activate", G_CALLBACK (ui_tag_manage_dialog_add), NULL); - + g_signal_connect(G_OBJECT(data.ST_name), "insert-text", G_CALLBACK(ui_tag_manage_filter_text_handler), NULL); + g_signal_connect (gtk_tree_view_get_selection(GTK_TREE_VIEW(data.LV_tag)), "changed", G_CALLBACK (ui_tag_manage_dialog_selection), NULL); g_signal_connect (GTK_TREE_VIEW(data.LV_tag), "row-activated", G_CALLBACK (ui_tag_manage_dialog_onRowActivated), NULL);