X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fgui%2Fpsppire-data-editor.c;h=33c4440d1336a87573f6f0f1654f14fc8c98eb20;hb=46b17a75377b7541db5149c561d8569b5472d3fe;hp=d0a6b8088b67c6d17f0cce4fd479e0379889c6bd;hpb=f3fb5df541147f31335d86850d5f4dd2568c5c72;p=pspp diff --git a/src/ui/gui/psppire-data-editor.c b/src/ui/gui/psppire-data-editor.c index d0a6b8088b..33c4440d13 100644 --- a/src/ui/gui/psppire-data-editor.c +++ b/src/ui/gui/psppire-data-editor.c @@ -203,7 +203,6 @@ enum }; -#define WIDTH_OF_M 10 #define DEFAULT_ROW_HEIGHT 25 static void @@ -252,12 +251,31 @@ new_variables_callback (PsppireDict *dict, gpointer data) } } +/* Return the width (in pixels) of an upper case M when rendered in the + current font of W +*/ +static gint +width_of_m (GtkWidget *w) +{ + PangoRectangle rect; + PangoLayout *layout = gtk_widget_create_pango_layout (w, "M"); + + pango_layout_get_pixel_extents (layout, NULL, &rect); + + g_object_unref (layout); + + return rect.width; +} + static void insert_variable_callback (PsppireDict *dict, gint x, gpointer data) { gint i; + PsppireDataEditor *de = PSPPIRE_DATA_EDITOR (data); + gint m_width = width_of_m (GTK_WIDGET (de)); + PsppireAxisHetero *var_vaxis; g_object_get (de->var_sheet, "vertical-axis", &var_vaxis, NULL); @@ -269,7 +287,7 @@ insert_variable_callback (PsppireDict *dict, gint x, gpointer data) PsppireAxisHetero *haxis; g_object_get (de->data_sheet[i], "horizontal-axis", &haxis, NULL); - psppire_axis_hetero_insert (haxis, WIDTH_OF_M * var_get_display_width (var), x); + psppire_axis_hetero_insert (haxis, m_width * var_get_display_width (var), x); } } @@ -301,6 +319,7 @@ rewidth_variable_callback (PsppireDict *dict, gint posn, gpointer data) { gint i; PsppireDataEditor *de = PSPPIRE_DATA_EDITOR (data); + gint m_width = width_of_m (GTK_WIDGET (de)); for (i = 0 ; i < 4 ; ++i) { @@ -309,7 +328,7 @@ rewidth_variable_callback (PsppireDict *dict, gint posn, gpointer data) g_object_get (de->data_sheet[i], "horizontal-axis", &haxis, NULL); psppire_axis_hetero_resize_unit (haxis, - WIDTH_OF_M * + m_width * var_get_display_width (var), posn); } } @@ -1175,14 +1194,26 @@ psppire_data_editor_sort_descending (PsppireDataEditor *de) void psppire_data_editor_insert_variable (PsppireDataEditor *de) { - glong posn = -1; - - if ( de->data_sheet[0]->state == GTK_SHEET_COLUMN_SELECTED ) - posn = GTK_SHEET (de->data_sheet[0])->range.col0; - else - posn = GTK_SHEET (de->data_sheet[0])->active_cell.col; + glong posn = 0; - if ( posn == -1 ) posn = 0; + switch (gtk_notebook_get_current_page (GTK_NOTEBOOK (de))) + { + case PSPPIRE_DATA_EDITOR_DATA_VIEW: + if ( de->data_sheet[0]->state == GTK_SHEET_COLUMN_SELECTED ) + posn = GTK_SHEET (de->data_sheet[0])->range.col0; + else + posn = GTK_SHEET (de->data_sheet[0])->active_cell.col; + break; + case PSPPIRE_DATA_EDITOR_VARIABLE_VIEW: + if ( de->var_sheet->state == GTK_SHEET_ROW_SELECTED ) + posn = GTK_SHEET (de->var_sheet)->range.row0; + else + posn = GTK_SHEET (de->var_sheet)->active_cell.row; + break; + default: + g_assert_not_reached (); + break; + }; psppire_dict_insert_variable (de->data_store->dict, posn, NULL); } @@ -1251,11 +1282,27 @@ psppire_data_editor_show_grid (PsppireDataEditor *de, gboolean grid_visible) gtk_sheet_show_grid (GTK_SHEET (de->data_sheet[0]), grid_visible); } + +static void +set_font (GtkWidget *w, gpointer data) +{ + PangoFontDescription *font_desc = data; + GtkRcStyle *style = gtk_widget_get_modifier_style (w); + + pango_font_description_free (style->font_desc); + style->font_desc = pango_font_description_copy (font_desc); + + gtk_widget_modify_style (w, style); + + if ( GTK_IS_CONTAINER (w)) + gtk_container_foreach (GTK_CONTAINER (w), set_font, font_desc); +} + void psppire_data_editor_set_font (PsppireDataEditor *de, PangoFontDescription *font_desc) { - psppire_data_store_set_font (de->data_store, font_desc); - psppire_var_store_set_font (de->var_store, font_desc); + set_font (GTK_WIDGET (de), font_desc); + gtk_container_foreach (GTK_CONTAINER (de), set_font, font_desc); }