/** * stf_preview_new * @data_container: a container in which to put a treeview. * * returns : a new renderdata struct **/ RenderData_t* stf_preview_new (GtkWidget *data_container, GODateConventions const *date_conv) { RenderData_t* renderdata; GnumericLazyList *ll; g_return_val_if_fail (data_container != NULL, NULL); renderdata = g_new (RenderData_t, 1); renderdata->data_container = data_container; renderdata->startrow = 1; renderdata->colformats = g_ptr_array_new (); renderdata->ignore_formats = FALSE; renderdata->lines_chunk = NULL; renderdata->lines = NULL; renderdata->date_conv = date_conv; ll = gnumeric_lazy_list_new (render_get_value, renderdata, 0, 1, G_TYPE_STRING); renderdata->tree_view = GTK_TREE_VIEW (gtk_tree_view_new_with_model (GTK_TREE_MODEL (ll))); gtk_tree_view_set_grid_lines (renderdata->tree_view, GTK_TREE_VIEW_GRID_LINES_VERTICAL); g_object_ref (renderdata->tree_view); g_object_unref (ll); renderdata->colcount = 0; { GtkWidget *w = GTK_WIDGET (renderdata->tree_view); int width, height, vertical_separator; PangoLayout *layout = gtk_widget_create_pango_layout (w, "Mg19"); gtk_widget_style_get (w, "vertical_separator", &vertical_separator, NULL); pango_layout_get_pixel_size (layout, &width, &height); /* * Make room for about 80 characters and about 7 lines of data. * (The +2 allows room for the headers and the h-scrollbar. */ gtk_widget_set_size_request (renderdata->data_container, width * 20, /* About 80 chars. */ (height + vertical_separator) * (7 + 2)); g_object_unref (layout); } gtk_container_add (GTK_CONTAINER (renderdata->data_container), GTK_WIDGET (renderdata->tree_view)); gtk_widget_show_all (GTK_WIDGET (renderdata->tree_view)); return renderdata; }
static GnumericLazyList * make_matches_model (DialogState *dd, int rows) { return gnumeric_lazy_list_new (search_get_value, dd, rows, 4, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING); }
void stf_preview_set_lines (RenderData_t *renderdata, GStringChunk *lines_chunk, GPtrArray *lines) { unsigned int i; int colcount = 1; GnumericLazyList *ll; gboolean hidden; g_return_if_fail (renderdata != NULL); /* Empty the table. */ gtk_tree_view_set_model (renderdata->tree_view, NULL); if (renderdata->lines != lines) { if (renderdata->lines) stf_parse_general_free (renderdata->lines); renderdata->lines = lines; } if (renderdata->lines_chunk != lines_chunk) { if (renderdata->lines_chunk) g_string_chunk_free (renderdata->lines_chunk); renderdata->lines_chunk = lines_chunk; } if (lines == NULL) return; for (i = 0; i < lines->len; i++) { GPtrArray *line = g_ptr_array_index (lines, i); colcount = MAX (colcount, (int)line->len); } /* * If we are making large changes we need to hide the treeview * because performance otherwise suffers a lot. */ hidden = gtk_widget_get_visible (GTK_WIDGET (renderdata->tree_view)) && (colcount < renderdata->colcount - 1 || colcount > renderdata->colcount + 10); if (hidden) gtk_widget_hide (GTK_WIDGET (renderdata->tree_view)); while (renderdata->colcount > colcount) gtk_tree_view_remove_column (renderdata->tree_view, gtk_tree_view_get_column (renderdata->tree_view, --(renderdata->colcount))); while (renderdata->colcount < colcount) { char *text = g_strdup_printf (_(COLUMN_CAPTION), renderdata->colcount + 1); GtkCellRenderer *cell = gtk_cell_renderer_text_new (); GtkTreeViewColumn *column = gtk_tree_view_column_new_with_attributes (text, cell, "text", renderdata->colcount, NULL); g_object_set (cell, "single_paragraph_mode", TRUE, NULL); gtk_tree_view_append_column (renderdata->tree_view, column); g_free (text); renderdata->colcount++; } ll = gnumeric_lazy_list_new (render_get_value, renderdata, MIN (lines->len, LINE_DISPLAY_LIMIT), 0); gnumeric_lazy_list_add_column (ll, colcount, G_TYPE_STRING); gtk_tree_view_set_model (renderdata->tree_view, GTK_TREE_MODEL (ll)); g_object_unref (ll); if (hidden) gtk_widget_show (GTK_WIDGET (renderdata->tree_view)); }