/** * Create a new GtkTreeView for search results. */ GtkWidget * search_gui_create_tree(void) { GtkTreeModel *model = create_results_model(); GtkTreeSelection *selection; GtkTreeView *tv; tv = GTK_TREE_VIEW(gtk_tree_view_new_with_model(model)); g_object_unref(model); selection = gtk_tree_view_get_selection(tv); gtk_tree_selection_set_mode(selection, GTK_SELECTION_MULTIPLE); gtk_tree_view_set_headers_clickable(tv, TRUE); gtk_tree_view_set_headers_visible(tv, TRUE); gtk_tree_view_set_enable_search(tv, TRUE); gtk_tree_view_set_search_column(tv, 0); gtk_tree_view_set_rules_hint(tv, TRUE); gtk_tree_view_set_search_equal_func(tv, search_by_regex, NULL, NULL); tree_view_set_fixed_height_mode(tv, TRUE); /* add columns to the tree view */ add_results_columns(tv); tree_view_restore_visibility(tv, PROP_SEARCH_RESULTS_COL_VISIBLE); tree_view_restore_widths(tv, PROP_SEARCH_RESULTS_COL_WIDTHS); gui_signal_connect(tv, "cursor-changed", on_tree_view_search_results_select_row, tv); gui_signal_connect(tv, "leave-notify-event", on_leave_notify, NULL); return GTK_WIDGET(tv); }
void search_gui_show_search(struct search *search) { GtkTreeView *tv; g_return_if_fail(search); tv = GTK_TREE_VIEW(search->tree); tree_view_restore_visibility(tv, PROP_SEARCH_RESULTS_COL_VISIBLE); tree_view_restore_widths(tv, PROP_SEARCH_RESULTS_COL_WIDTHS); tvm_search = tree_view_motion_set_callback(tv, search_update_tooltip, 400); if (!search->sort) { int i; /* * The signal handler for "clicked" must only be installed once, * not each time the treeview is made visible. */ search->sort = TRUE; for (i = 0; i < c_sr_num; i++) { GtkTreeViewColumn *column; column = gtk_tree_view_get_column(tv, i); gtk_tree_view_column_set_sort_column_id(column, i); gtk_tree_sortable_set_sort_func( GTK_TREE_SORTABLE(gtk_tree_view_get_model(tv)), i, search_gui_cmp, uint_to_pointer(i), NULL); column_sort_tristate_register(column, on_tree_view_search_results_click_column, search); } } }
static void treeview_download_files_init(void) { GtkTreeView *tv; unsigned i; STATIC_ASSERT(FILEINFO_VISIBLE_COLUMNS == c_fi_num); tv = GTK_TREE_VIEW(gtk_tree_view_new()); treeview_download_files = tv; for (i = 0; i < c_fi_num; i++) { add_column(tv, i, fi_gui_files_column_title(i), fi_gui_files_column_justify_right(i) ? 1.0 : 0.0, c_fi_progress == i ? gtk_cell_renderer_progress_new() : NULL, render_files); } gtk_tree_selection_set_mode(gtk_tree_view_get_selection(tv), GTK_SELECTION_MULTIPLE); gtk_tree_view_set_headers_visible(tv, TRUE); gtk_tree_view_set_headers_clickable(tv, TRUE); gtk_tree_view_set_enable_search(tv, FALSE); gtk_tree_view_set_rules_hint(tv, TRUE); tree_view_set_fixed_height_mode(tv, TRUE); gtk_tree_view_set_model(tv, GTK_TREE_MODEL(store_files)); tree_view_restore_visibility(tv, PROP_FILE_INFO_COL_VISIBLE); tree_view_restore_widths(tv, PROP_FILE_INFO_COL_WIDTHS); gui_signal_connect(tv, "cursor-changed", on_treeview_download_files_cursor_changed, NULL); }
/** * Initialize the nodes controller. Register callbacks in the backend. */ void nodes_gui_init(void) { GtkTreeView *tv; tv = GTK_TREE_VIEW(gui_main_window_lookup( "treeview_nodes")); treeview_nodes = tv; tree_view_restore_widths(tv, PROP_NODES_COL_WIDTHS); tree_view_restore_visibility(tv, PROP_NODES_COL_VISIBLE); tree_view_set_fixed_height_mode(tv, TRUE); nodes_handles = htable_create_any(nid_hash, nid_hash2, nid_equal); ht_node_info_changed = hset_create_any(nid_hash, nid_hash2, nid_equal); ht_node_flags_changed = hset_create_any(nid_hash, nid_hash2, nid_equal); ht_pending_lookups = hset_create_any(nid_hash, nid_hash2, nid_equal); guc_node_add_node_added_listener(nodes_gui_node_added); guc_node_add_node_removed_listener(nodes_gui_node_removed); guc_node_add_node_info_changed_listener(nodes_gui_node_info_changed); guc_node_add_node_flags_changed_listener(nodes_gui_node_flags_changed); widget_add_popup_menu(GTK_WIDGET(tv), nodes_gui_get_popup_menu); gui_signal_connect(tv, "cursor-changed", on_cursor_changed, tv); gui_signal_connect(tv, "leave-notify-event", on_leave_notify, tv); tvm_nodes = tree_view_motion_set_callback(tv, update_tooltip, 400); main_gui_add_timer(nodes_gui_timer); }
/** * Initialize the upload statistics GUI. * * Initialize the upload statistics GUI. Define the * GtkTreeModel used to store the information as well * as rendering and sorting functions to use on the * cells and columns. */ static void upload_stats_gui_init_intern(gboolean intern) { static const struct { const guint id; const gchar * const title; const gfloat align; const GtkTreeIterCompareFunc func; } columns[] = { { c_us_filename, N_("Filename"), 0.0, upload_stats_gui_cmp_filename }, { c_us_size, N_("Size"), 1.0, upload_stats_gui_cmp_size }, { c_us_attempts, N_("Attempts"), 1.0, upload_stats_gui_cmp_attempts }, { c_us_complete, N_("Complete"), 1.0, upload_stats_gui_cmp_complete }, { c_us_norm, N_("Normalized"), 1.0, upload_stats_gui_cmp_norm }, { c_us_rtime, N_("Last Request"), 0.0, upload_stats_gui_cmp_rtime }, { c_us_dtime, N_("Last Upload"), 0.0, upload_stats_gui_cmp_dtime }, }; static gboolean initialized = FALSE; GtkTreeModel *model; guint i; STATIC_ASSERT(G_N_ELEMENTS(columns) == UPLOAD_STATS_GUI_VISIBLE_COLUMNS); if (!initialized) { initialized = TRUE; ht_uploads = htable_create(HASH_KEY_SELF, 0); popup_upload_stats = create_popup_upload_stats(); model = GTK_TREE_MODEL(gtk_list_store_new(1, G_TYPE_POINTER)); upload_stats_treeview = GTK_TREE_VIEW( gui_main_window_lookup("treeview_ul_stats")); gtk_tree_view_set_model(upload_stats_treeview, model); g_object_unref(model); for (i = 0; i < G_N_ELEMENTS(columns); i++) { add_column(upload_stats_treeview, columns[i].id, _(columns[i].title), columns[i].align, columns[i].func, cell_renderer_func); } gui_signal_connect(upload_stats_treeview, "button_press_event", on_button_press_event, NULL); } if (!intern) { /* upload_stats_gui_init_intern() might be called internally before * settings_gui_init(). If it's called externally it's called from * main_gui_init() and the GUI properties are intialized. */ tree_view_restore_widths(upload_stats_treeview, PROP_UL_STATS_COL_WIDTHS); tree_view_restore_visibility(upload_stats_treeview, PROP_UL_STATS_COL_VISIBLE); } }