X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fgui%2Fpsppire-output-view.c;h=3f254d7b63fb3e4b4b84496d604cd6df2dbc54fc;hb=18f9e37c8bc5f8ea21c9f3b3b6b3d0dee0b572cb;hp=b8202074639d524064185ad9dc4870bbdeb9f374;hpb=df2f1ae30c2835a39f4bc6b0c14f10a2090d9401;p=pspp diff --git a/src/ui/gui/psppire-output-view.c b/src/ui/gui/psppire-output-view.c index b820207463..3f254d7b63 100644 --- a/src/ui/gui/psppire-output-view.c +++ b/src/ui/gui/psppire-output-view.c @@ -76,9 +76,9 @@ struct psppire_output_view enum { - COL_TITLE, /* Table title. */ + COL_NAME, /* Table name. */ COL_ADDR, /* Pointer to the table */ - COL_Y, /* Y position of top of title. */ + COL_Y, /* Y position of top of name. */ N_COLS }; @@ -194,7 +194,7 @@ rerender (struct psppire_output_view *view) struct output_view_item *item; cairo_t *cr; - if (!view->n_items) + if (!view->n_items || !GTK_WIDGET (view->output)->window) return; string_map_clear (&view->render_opts); @@ -209,6 +209,7 @@ rerender (struct psppire_output_view *view) { struct xr_rendering *r; int tw, th; + bool new; if (view->y > 0) view->y += view->font_height / 2; @@ -221,10 +222,18 @@ rerender (struct psppire_output_view *view) } xr_rendering_measure (r, &tw, &th); + + new = !item->drawing_area; + if (new) + item->drawing_area = gtk_drawing_area_new (); g_object_set_data_full (G_OBJECT (item->drawing_area), "rendering", r, free_rendering); + gtk_widget_set_size_request (item->drawing_area, tw, th); - gtk_layout_move (view->output, item->drawing_area, 0, view->y); + if (new) + gtk_layout_put (view->output, item->drawing_area, 0, view->y); + else + gtk_layout_move (view->output, item->drawing_area, 0, view->y); if (view->max_width < tw) view->max_width = tw; @@ -239,13 +248,14 @@ void psppire_output_view_put (struct psppire_output_view *view, const struct output_item *item) { + struct output_view_item *view_item; GtkWidget *drawing_area; struct xr_rendering *r; - struct string title; + struct string name; GtkTreeStore *store; + cairo_t *cr = NULL; GtkTreePath *path; GtkTreeIter iter; - cairo_t *cr; int tw, th; if (is_text_item (item)) @@ -266,33 +276,38 @@ psppire_output_view_put (struct psppire_output_view *view, if (view->n_items >= view->allocated_items) view->items = x2nrealloc (view->items, &view->allocated_items, sizeof *view->items); - view->items[view->n_items].item = output_item_ref (item); - view->items[view->n_items].drawing_area = drawing_area = gtk_drawing_area_new (); - view->n_items++; + view_item = &view->items[view->n_items++]; + view_item->item = output_item_ref (item); + view_item->drawing_area = NULL; - cr = gdk_cairo_create (GTK_WIDGET (view->output)->window); - if (view->xr == NULL) - create_xr (view); + if (GTK_WIDGET (view->output)->window) + { + view_item->drawing_area = drawing_area = gtk_drawing_area_new (); - if (view->y > 0) - view->y += view->font_height / 2; + cr = gdk_cairo_create (GTK_WIDGET (view->output)->window); + if (view->xr == NULL) + create_xr (view); - r = xr_rendering_create (view->xr, item, cr); - if (r == NULL) - goto done; + if (view->y > 0) + view->y += view->font_height / 2; + + r = xr_rendering_create (view->xr, item, cr); + if (r == NULL) + goto done; - xr_rendering_measure (r, &tw, &th); + xr_rendering_measure (r, &tw, &th); - g_object_set_data_full (G_OBJECT (drawing_area), "rendering", r, free_rendering); - g_signal_connect (drawing_area, "realize", - G_CALLBACK (on_dwgarea_realize), view); - g_signal_connect (drawing_area, "expose_event", - G_CALLBACK (expose_event_callback), view); + g_object_set_data_full (G_OBJECT (drawing_area), "rendering", r, free_rendering); + g_signal_connect (drawing_area, "realize", + G_CALLBACK (on_dwgarea_realize), view); + g_signal_connect (drawing_area, "expose_event", + G_CALLBACK (expose_event_callback), view); - gtk_widget_set_size_request (drawing_area, tw, th); - gtk_layout_put (view->output, drawing_area, 0, view->y); + gtk_widget_set_size_request (drawing_area, tw, th); + gtk_layout_put (view->output, drawing_area, 0, view->y); - gtk_widget_show (drawing_area); + gtk_widget_show (drawing_area); + } if (view->overview && (!is_text_item (item) @@ -301,7 +316,7 @@ psppire_output_view_put (struct psppire_output_view *view, { store = GTK_TREE_STORE (gtk_tree_view_get_model (view->overview)); - ds_init_empty (&title); + ds_init_empty (&name); if (is_text_item (item) && text_item_get_type (to_text_item (item)) == TEXT_ITEM_COMMAND_OPEN) { @@ -315,38 +330,38 @@ psppire_output_view_put (struct psppire_output_view *view, gtk_tree_store_append (store, &iter, p); } - ds_clear (&title); + ds_clear (&name); if (is_text_item (item)) - ds_put_cstr (&title, text_item_get_text (to_text_item (item))); + ds_put_cstr (&name, text_item_get_text (to_text_item (item))); else if (is_message_item (item)) { const struct message_item *msg_item = to_message_item (item); const struct msg *msg = message_item_get_msg (msg_item); - ds_put_format (&title, "%s: %s", _("Message"), + ds_put_format (&name, "%s: %s", _("Message"), msg_severity_to_string (msg->severity)); } else if (is_table_item (item)) { - const char *caption = table_item_get_caption (to_table_item (item)); - if (caption != NULL) - ds_put_format (&title, "Table: %s", caption); + const char *title = table_item_get_title (to_table_item (item)); + if (title != NULL) + ds_put_format (&name, "Table: %s", title); else - ds_put_cstr (&title, "Table"); + ds_put_cstr (&name, "Table"); } else if (is_chart_item (item)) { const char *s = chart_item_get_title (to_chart_item (item)); if (s != NULL) - ds_put_format (&title, "Chart: %s", s); + ds_put_format (&name, "Chart: %s", s); else - ds_put_cstr (&title, "Chart"); + ds_put_cstr (&name, "Chart"); } gtk_tree_store_set (store, &iter, - COL_TITLE, ds_cstr (&title), + COL_NAME, ds_cstr (&name), COL_ADDR, item, COL_Y, view->y, -1); - ds_destroy (&title); + ds_destroy (&name); path = gtk_tree_model_get_path (GTK_TREE_MODEL (store), &iter); gtk_tree_view_expand_row (view->overview, path, TRUE); @@ -643,7 +658,7 @@ psppire_output_view_new (GtkLayout *output, GtkTreeView *overview, { model = GTK_TREE_MODEL (gtk_tree_store_new ( N_COLS, - G_TYPE_STRING, /* COL_TITLE */ + G_TYPE_STRING, /* COL_NAME */ G_TYPE_POINTER, /* COL_ADDR */ G_TYPE_LONG)); /* COL_Y */ gtk_tree_view_set_model (overview, model); @@ -658,7 +673,7 @@ psppire_output_view_new (GtkLayout *output, GtkTreeView *overview, gtk_tree_view_append_column (GTK_TREE_VIEW (overview), column); renderer = gtk_cell_renderer_text_new (); gtk_tree_view_column_pack_start (column, renderer, TRUE); - gtk_tree_view_column_add_attribute (column, renderer, "text", COL_TITLE); + gtk_tree_view_column_add_attribute (column, renderer, "text", COL_NAME); g_signal_connect (GTK_TREE_VIEW (overview), "row-activated", G_CALLBACK (on_row_activate), view);