X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=lib%2Fgtksheet%2Fgtksheet.c;h=648126f06d64a2ac4ccfc22991c2af14ad8ce0ee;hb=5d1348cd3e1f9dbf631ce9f67f2748eaa216dc45;hp=7f5acedf4cfe3f0905cc063148fb3b048a7d0419;hpb=dcf9b154cbcaa35c3d8459a201b77eec8bcb30bd;p=pspp-builds.git diff --git a/lib/gtksheet/gtksheet.c b/lib/gtksheet/gtksheet.c index 7f5acedf..648126f0 100644 --- a/lib/gtksheet/gtksheet.c +++ b/lib/gtksheet/gtksheet.c @@ -1123,14 +1123,18 @@ gtk_sheet_init (GtkSheet *sheet) } +/* Callback which occurs whenever rows are inserted/deleted in the model */ static void -rows_deleted_callback (GSheetModel *m, gint first_row, gint n_rows, +rows_inserted_deleted_callback (GSheetModel *m, gint first_row, gint n_rows, gpointer data) { GtkSheet *sheet = GTK_SHEET(data); GtkSheetRange range; + /* Need to update all the rows starting from the first row and onwards. + * Previous rows are unchanged, so don't need to be updated. + */ range.row0 = first_row; range.col0 = 0; range.rowi = yyy_row_count(sheet) - 1; @@ -1230,8 +1234,11 @@ gtk_sheet_set_model(GtkSheet *sheet, GSheetModel *model) g_signal_connect(model, "range_changed", G_CALLBACK(range_update_callback), sheet); + g_signal_connect(model, "rows_inserted", + G_CALLBACK(rows_inserted_deleted_callback), sheet); + g_signal_connect(model, "rows_deleted", - G_CALLBACK(rows_deleted_callback), sheet); + G_CALLBACK(rows_inserted_deleted_callback), sheet); } @@ -1481,7 +1488,6 @@ gtk_sheet_autoresize_column (GtkSheet *sheet, gint column) g_return_if_fail (GTK_IS_SHEET (sheet)); if (column >= xxx_column_count(sheet) || column < 0) return; - g_print("%s:%d Iterating rows\n",__FILE__, __LINE__); for (row = 0; row < yyy_row_count(sheet); row++){ const gchar *text = gtk_sheet_cell_get_text(sheet, row, column); if (text && strlen(text) > 0){ @@ -3498,52 +3504,58 @@ gtk_sheet_set_cell(GtkSheet *sheet, gint row, gint col, GtkJustification justification, const gchar *text) { - GtkSheetRange range; - gint text_width; - GtkSheetCellAttr attributes; + GSheetModel *model ; + gboolean changed ; + const gchar *old_text ; - g_return_if_fail (sheet != NULL); - g_return_if_fail (GTK_IS_SHEET (sheet)); - if (col >= xxx_column_count(sheet) || row >= yyy_row_count(sheet)) return; - if (col < 0 || row < 0) return; + GtkSheetRange range; + gint text_width; + GtkSheetCellAttr attributes; - gtk_sheet_get_attributes(sheet, row, col, &attributes); + g_return_if_fail (sheet != NULL); + g_return_if_fail (GTK_IS_SHEET (sheet)); + if (col >= xxx_column_count(sheet) || row >= yyy_row_count(sheet)) return; + if (col < 0 || row < 0) return; - attributes.justification = justification; + gtk_sheet_get_attributes(sheet, row, col, &attributes); - GSheetModel *model = gtk_sheet_get_model(sheet); + attributes.justification = justification; - const gchar *old_text = g_sheet_model_get_string(model, row, col); + model = gtk_sheet_get_model(sheet); - gboolean changed = FALSE; + old_text = g_sheet_model_get_string(model, row, col); - if (0 != safe_strcmp(old_text, text)) - changed = g_sheet_model_set_string(model, text, row, col); + changed = FALSE; - if(changed && attributes.is_visible){ - const gchar *s = gtk_sheet_cell_get_text(sheet, row, col); - text_width = 0; - if(s && strlen(s) > 0) { - text_width = STRING_WIDTH(GTK_WIDGET(sheet), attributes.font_desc, text); - } + if (0 != safe_strcmp(old_text, text)) + changed = g_sheet_model_set_string(model, text, row, col); - range.row0 = row; - range.rowi = row; - range.col0 = sheet->view.col0; - range.coli = sheet->view.coli; + if(changed && attributes.is_visible) + { + const gchar *s = gtk_sheet_cell_get_text(sheet, row, col); + text_width = 0; + if(s && strlen(s) > 0) { + text_width = STRING_WIDTH(GTK_WIDGET(sheet), + attributes.font_desc, text); + } - if(gtk_sheet_autoresize(sheet) && - text_width > xxx_column_width(sheet, col) - 2*CELLOFFSET-attributes.border.width){ + range.row0 = row; + range.rowi = row; + range.col0 = sheet->view.col0; + range.coli = sheet->view.coli; + + if(gtk_sheet_autoresize(sheet) && + text_width > xxx_column_width(sheet, col) - 2*CELLOFFSET-attributes.border.width){ gtk_sheet_set_column_width(sheet, col, text_width+2*CELLOFFSET+attributes.border.width); GTK_SHEET_SET_FLAGS(sheet, GTK_SHEET_REDRAW_PENDING); - } - else - if(!GTK_SHEET_IS_FROZEN(sheet)) - gtk_sheet_range_draw(sheet, &range); - } + } + else + if(!GTK_SHEET_IS_FROZEN(sheet)) + gtk_sheet_range_draw(sheet, &range); + } - if ( changed ) - gtk_signal_emit(GTK_OBJECT(sheet),sheet_signals[CHANGED], row, col); + if ( changed ) + gtk_signal_emit(GTK_OBJECT(sheet),sheet_signals[CHANGED], row, col); } @@ -3595,12 +3607,10 @@ gtk_sheet_cell_delete (GtkSheet *sheet, gint row, gint column) static void gtk_sheet_real_cell_clear (GtkSheet *sheet, gint row, gint column, gboolean delete) { - const gchar *old_text; - - old_text = gtk_sheet_cell_get_text(sheet, row, column); - GSheetModel *model = gtk_sheet_get_model(sheet); + const gchar *old_text = gtk_sheet_cell_get_text(sheet, row, column); + if (old_text && strlen(old_text) > 0 ) { g_sheet_model_datum_clear(model, row, column); @@ -4094,7 +4104,6 @@ gtk_sheet_draw_active_cell(GtkSheet *sheet) #endif gtk_sheet_draw_backing_pixmap(sheet, sheet->range); gtk_sheet_draw_border(sheet, sheet->range); - } @@ -6665,7 +6674,6 @@ vadjustment_value_changed (GtkAdjustment * adjustment, { GtkSheet *sheet; gint diff, value, old_value; - gint i; gint row, new_row; gint y=0; @@ -6689,7 +6697,7 @@ vadjustment_value_changed (GtkAdjustment * adjustment, y = g_sheet_row_start_pixel(sheet->row_geometry, new_row, sheet); if (adjustment->value > sheet->old_vadjustment && sheet->old_vadjustment > 0. && - yyy_row_height(sheet, i) > sheet->vadjustment->step_increment){ + yyy_row_height(sheet, row) > sheet->vadjustment->step_increment){ /* This avoids embarrassing twitching */ if(row == new_row && row != yyy_row_count(sheet) - 1 && adjustment->value - sheet->old_vadjustment >= @@ -7111,6 +7119,11 @@ gtk_sheet_set_row_height (GtkSheet * sheet, gboolean gtk_sheet_get_attributes(GtkSheet *sheet, gint row, gint col, GtkSheetCellAttr *attributes) { + const GdkColor *fg, *bg; + const GtkJustification *j ; + const PangoFontDescription *font_desc ; + const GtkSheetCellBorder *border ; + g_return_val_if_fail (sheet != NULL, FALSE); g_return_val_if_fail (GTK_IS_SHEET (sheet), FALSE); @@ -7124,26 +7137,23 @@ gtk_sheet_get_attributes(GtkSheet *sheet, gint row, gint col, GtkSheetCellAttr * attributes->is_editable = g_sheet_model_is_editable(sheet->model, row, col); attributes->is_visible = g_sheet_model_is_visible(sheet->model, row, col); - const GdkColor *fg = g_sheet_model_get_foreground(sheet->model, row, col); + fg = g_sheet_model_get_foreground(sheet->model, row, col); if ( fg ) attributes->foreground = *fg; - const GdkColor *bg = g_sheet_model_get_background(sheet->model, row, col); + bg = g_sheet_model_get_background(sheet->model, row, col); if ( bg ) attributes->background = *bg; - const GtkJustification *j = g_sheet_model_get_justification(sheet->model, - row, col); + j = g_sheet_model_get_justification(sheet->model, row, col); if (j) attributes->justification = *j; - const PangoFontDescription *font_desc = - g_sheet_model_get_font_desc(sheet->model, row, col); + font_desc = g_sheet_model_get_font_desc(sheet->model, row, col); if ( font_desc ) attributes->font_desc = font_desc; - const GtkSheetCellBorder *border = - g_sheet_model_get_cell_border(sheet->model, row, col); + border = g_sheet_model_get_cell_border(sheet->model, row, col); - if ( border ) attributes->border = *border; + if ( border ) attributes->border = *border; return TRUE; } @@ -7344,7 +7354,7 @@ gtk_sheet_button_attach (GtkSheet *sheet, GtkWidget *widget, gint row, gint col) { - GtkSheetButton *button; + GtkSheetButton *button = 0; GtkSheetChild *child; GtkRequisition button_requisition;