X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=lib%2Fgtk-contrib%2Fpsppire-sheet.c;h=19406edc9c9418d344a343e232a64cb42c61299b;hb=9d9870db0d89e8f7f72de8ff5c9d37c8d9eb15c2;hp=89fd45d3fc491a931b9f3c72bdb46b947801c468;hpb=5219cd165cabf463d5ac356fbabc79990d590e92;p=pspp diff --git a/lib/gtk-contrib/psppire-sheet.c b/lib/gtk-contrib/psppire-sheet.c index 89fd45d3fc..19406edc9c 100644 --- a/lib/gtk-contrib/psppire-sheet.c +++ b/lib/gtk-contrib/psppire-sheet.c @@ -1,5 +1,5 @@ /* - Copyright (C) 2006, 2008, 2009 Free Software Foundation + Copyright (C) 2006, 2008, 2009, 2011, 2012 Free Software Foundation This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -444,7 +444,6 @@ rectangle_from_cell (PsppireSheet *sheet, gint row, gint col, static void psppire_sheet_class_init (PsppireSheetClass *klass); static void psppire_sheet_init (PsppireSheet *sheet); static void psppire_sheet_dispose (GObject *object); -static void psppire_sheet_finalize (GObject *object); static void psppire_sheet_style_set (GtkWidget *widget, GtkStyle *previous_style); static void psppire_sheet_realize (GtkWidget *widget); @@ -545,9 +544,6 @@ static void draw_row_title_buttons (PsppireSheet *sheet); static void size_allocate_global_button (PsppireSheet *sheet); -static void psppire_sheet_button_size_request (PsppireSheet *sheet, - const PsppireSheetButton *button, - GtkRequisition *requisition); static void psppire_sheet_real_cell_clear (PsppireSheet *sheet, gint row, @@ -1039,7 +1035,6 @@ psppire_sheet_class_init (PsppireSheetClass *klass) container_class->set_focus_child = NULL; object_class->dispose = psppire_sheet_dispose; - object_class->finalize = psppire_sheet_finalize; cell_padding_spec = g_param_spec_boxed ("cell-padding", @@ -1698,20 +1693,6 @@ psppire_sheet_set_scroll_adjustments (PsppireSheet *sheet, return TRUE; } -static void -psppire_sheet_finalize (GObject *object) -{ - PsppireSheet *sheet; - - g_return_if_fail (object != NULL); - g_return_if_fail (PSPPIRE_IS_SHEET (object)); - - sheet = PSPPIRE_SHEET (object); - - if (G_OBJECT_CLASS (parent_class)->finalize) - (*G_OBJECT_CLASS (parent_class)->finalize) (object); -} - static void psppire_sheet_dispose (GObject *object) { @@ -2724,13 +2705,17 @@ psppire_sheet_select_range (PsppireSheet *sheet, const PsppireSheetRange *range) void psppire_sheet_unselect_range (PsppireSheet *sheet) { - GdkRectangle area; sheet->select_status = PSPPIRE_SHEET_NORMAL; - rectangle_from_range (sheet, &sheet->range, &area); - area.x++; - area.y++; - gdk_window_invalidate_rect (sheet->sheet_window, &area, FALSE); + if (sheet->sheet_window != NULL) + { + GdkRectangle area; + + rectangle_from_range (sheet, &sheet->range, &area); + area.x++; + area.y++; + gdk_window_invalidate_rect (sheet->sheet_window, &area, FALSE); + } g_signal_emit (sheet, sheet_signals [SELECT_COLUMN], 0, -1); g_signal_emit (sheet, sheet_signals [SELECT_ROW], 0, -1); @@ -3022,9 +3007,7 @@ psppire_sheet_click_cell (PsppireSheet *sheet, gint row, gint column) sheet->range.row0 = 0; sheet->range.col0 = 0; sheet->range.rowi = psppire_axis_unit_count (sheet->vaxis) - 1; - sheet->range.coli = - psppire_axis_unit_count (sheet->haxis) - 1; - psppire_sheet_select_range (sheet, NULL); + sheet->range.coli = psppire_axis_unit_count (sheet->haxis) - 1; return TRUE; } @@ -3670,6 +3653,56 @@ step_sheet (PsppireSheet *sheet, GtkScrollType dir) } +/* Move to row 0 keeping the current column */ +static void +row0 (PsppireSheet *sheet) +{ + gtk_adjustment_set_value (sheet->vadjustment, + sheet->vadjustment->lower); + + change_active_cell (sheet, 0, sheet->active_cell.col); +} + +/* Move to column 0 keeping the current row */ +static void +col0 (PsppireSheet *sheet) +{ + gtk_adjustment_set_value (sheet->hadjustment, + sheet->hadjustment->lower); + + change_active_cell (sheet, sheet->active_cell.row, 0); +} + +/* Move to last column keeping the current row */ +static void +col_last (PsppireSheet *sheet) +{ + glong last_col = psppire_axis_unit_count (sheet->haxis) - 1; + + gtk_adjustment_set_value (sheet->hadjustment, + sheet->hadjustment->upper - sheet->hadjustment->page_size); + + change_active_cell (sheet, sheet->active_cell.row, + last_col); +} + + +/* Move to last row keeping the current column */ +static void +row_last (PsppireSheet *sheet) +{ + glong last_row = psppire_axis_unit_count (sheet->vaxis) - 1; + + gtk_adjustment_set_value (sheet->vadjustment, + sheet->vadjustment->upper- sheet->vadjustment->page_size); + + change_active_cell (sheet, + last_row, + sheet->active_cell.col); +} + + + static gboolean psppire_sheet_key_press (GtkWidget *widget, GdkEventKey *key) @@ -3683,21 +3716,41 @@ psppire_sheet_key_press (GtkWidget *widget, case GDK_Tab: step_sheet (sheet, GTK_SCROLL_STEP_FORWARD); break; + case GDK_Right: - step_sheet (sheet, GTK_SCROLL_STEP_RIGHT); + if (key->state & GDK_CONTROL_MASK) + col_last (sheet); + else + step_sheet (sheet, GTK_SCROLL_STEP_RIGHT); break; + case GDK_ISO_Left_Tab: step_sheet (sheet, GTK_SCROLL_STEP_BACKWARD); break; + case GDK_Left: - step_sheet (sheet, GTK_SCROLL_STEP_LEFT); + if (key->state & GDK_CONTROL_MASK) + col0 (sheet); + else + step_sheet (sheet, GTK_SCROLL_STEP_LEFT); break; + case GDK_Return: - case GDK_Down: step_sheet (sheet, GTK_SCROLL_STEP_DOWN); break; + + case GDK_Down: + if (key->state & GDK_CONTROL_MASK) + row_last (sheet); + else + step_sheet (sheet, GTK_SCROLL_STEP_DOWN); + break; + case GDK_Up: - step_sheet (sheet, GTK_SCROLL_STEP_UP); + if (key->state & GDK_CONTROL_MASK) + row0 (sheet); + else + step_sheet (sheet, GTK_SCROLL_STEP_UP); break; case GDK_Page_Down: @@ -3708,29 +3761,17 @@ psppire_sheet_key_press (GtkWidget *widget, break; case GDK_Home: - gtk_adjustment_set_value (sheet->vadjustment, - sheet->vadjustment->lower); - - change_active_cell (sheet, 0, - sheet->active_cell.col); - + col0 (sheet); break; case GDK_End: - gtk_adjustment_set_value (sheet->vadjustment, - sheet->vadjustment->upper - - sheet->vadjustment->page_size - - sheet->vadjustment->page_increment); - - /* - change_active_cellx (sheet, - psppire_axis_unit_count (sheet->vaxis) - 1, - sheet->active_cell.col); - */ + col_last (sheet); break; + case GDK_Delete: psppire_sheet_real_cell_clear (sheet, sheet->active_cell.row, sheet->active_cell.col); break; + default: return FALSE; break; @@ -4084,7 +4125,7 @@ draw_button (PsppireSheet *sheet, GdkWindow *window, GdkRectangle allocation) { GtkShadowType shadow_type; - gint text_width = 0, text_height = 0; + gint text_width = 0; PangoAlignment align = PANGO_ALIGN_LEFT; gboolean rtl ; @@ -4149,9 +4190,6 @@ draw_button (PsppireSheet *sheet, GdkWindow *window, if (button->label_visible) { - text_height = DEFAULT_ROW_HEIGHT - - 2 * COLUMN_TITLES_HEIGHT; - gdk_gc_set_clip_rectangle (GTK_WIDGET (sheet)->style->fg_gc[button->state], &allocation); gdk_gc_set_clip_rectangle (GTK_WIDGET (sheet)->style->white_gc, @@ -4680,27 +4718,6 @@ psppire_sheet_get_attributes (const PsppireSheet *sheet, gint row, gint col, return TRUE; } -static void -psppire_sheet_button_size_request (PsppireSheet *sheet, - const PsppireSheetButton *button, - GtkRequisition *button_requisition) -{ - GtkRequisition requisition; - GtkRequisition label_requisition; - - label_requisition.height = DEFAULT_ROW_HEIGHT; - label_requisition.width = COLUMN_MIN_WIDTH; - - requisition.height = DEFAULT_ROW_HEIGHT; - requisition.width = COLUMN_MIN_WIDTH; - - - *button_requisition = requisition; - button_requisition->width = MAX (requisition.width, label_requisition.width); - button_requisition->height = MAX (requisition.height, label_requisition.height); - -} - static void psppire_sheet_forall (GtkContainer *container, gboolean include_internals,