From: John Darrington Date: Thu, 13 Nov 2008 06:02:58 +0000 (+0900) Subject: Simplified the scrolling behaviour X-Git-Tag: v0.7.1~167 X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=13adf39ba39008f4c764dd14f037e01f137eca21;p=pspp-builds.git Simplified the scrolling behaviour Made all the scrolling take place via the horizontal or vertical GtkAdjustments instead of directly. Some key events have been removed. We'll add them back again as and when necessary. --- diff --git a/lib/gtksheet/gtksheet.c b/lib/gtksheet/gtksheet.c index ca316115..c134738e 100644 --- a/lib/gtksheet/gtksheet.c +++ b/lib/gtksheet/gtksheet.c @@ -114,10 +114,12 @@ dispose_string (const GtkSheet *sheet, gchar *text) g_free (text); } -static inline -guint DEFAULT_ROW_HEIGHT (GtkWidget *widget) +static guint +default_row_height (const GtkSheet *sheet) { - if (!widget->style->font_desc) return 24; + GtkWidget *widget = GTK_WIDGET (sheet); + + if (!widget->style->font_desc) return 25; else { PangoContext *context = gtk_widget_get_pango_context (widget); @@ -135,7 +137,7 @@ guint DEFAULT_ROW_HEIGHT (GtkWidget *widget) } } -static inline +static guint DEFAULT_FONT_ASCENT (GtkWidget *widget) { if (!widget->style->font_desc) return 12; @@ -152,7 +154,7 @@ guint DEFAULT_FONT_ASCENT (GtkWidget *widget) } } -static inline +static guint STRING_WIDTH (GtkWidget *widget, const PangoFontDescription *font, const gchar *text) { @@ -168,7 +170,7 @@ guint STRING_WIDTH (GtkWidget *widget, return PANGO_PIXELS (rect.width); } -static inline +static guint DEFAULT_FONT_DESCENT (GtkWidget *widget) { if (!widget->style->font_desc) return 12; @@ -201,16 +203,22 @@ yyy_row_ypixel_to_row (const GtkSheet *sheet, gint y) static inline glong min_visible_row (const GtkSheet *sheet) { - return yyy_row_ypixel_to_row (sheet, sheet->vadjustment->value); + glong row = + yyy_row_ypixel_to_row (sheet, sheet->vadjustment->value); + + return row; } static inline glong max_visible_row (const GtkSheet *sheet) { - return yyy_row_ypixel_to_row (sheet, - sheet->vadjustment->value + - sheet->vadjustment->page_size); + glong row = + yyy_row_ypixel_to_row (sheet, + sheet->vadjustment->value + + sheet->vadjustment->page_size); + + return row; } @@ -278,10 +286,10 @@ on_column_boundary (const GtkSheet *sheet, gint x, gint *column) col = column_from_xpixel (sheet, x); if ( column_from_xpixel (sheet, x - DRAG_WIDTH / 2) < col ) -{ + { *column = col - 1; return TRUE; -} + } if ( column_from_xpixel (sheet, x + DRAG_WIDTH / 2) > col ) { @@ -435,7 +443,7 @@ static gboolean gtk_sheet_crossing_notify (GtkWidget *widget, GdkEventCrossing *event); static gint gtk_sheet_entry_key_press (GtkWidget *widget, GdkEventKey *key); -static gint gtk_sheet_key_press (GtkWidget *widget, +static gboolean gtk_sheet_key_press (GtkWidget *widget, GdkEventKey *key); static void gtk_sheet_size_request (GtkWidget * widget, GtkRequisition * requisition); @@ -1055,7 +1063,7 @@ gtk_sheet_init (GtkSheet *sheet) sheet->column_title_area.x = 0; sheet->column_title_area.y = 0; sheet->column_title_area.width = 0; - sheet->column_title_area.height = DEFAULT_ROW_HEIGHT (GTK_WIDGET (sheet)); + sheet->column_title_area.height = default_row_height (sheet); sheet->row_title_window = NULL; sheet->row_title_area.x = 0; @@ -1318,14 +1326,14 @@ column_titles_changed (GtkWidget *w, gint first, gint n_columns, gpointer data) n_columns = g_sheet_column_get_column_count (sheet->column_geometry) - 1 ; } - { - gint i; - for ( i = first ; i <= first + n_columns ; ++i ) - { - gtk_sheet_column_title_button_draw (sheet, i); - g_signal_emit (sheet, sheet_signals[CHANGED], 0, -1, i); - } - } + { + gint i; + for ( i = first ; i <= first + n_columns ; ++i ) + { + gtk_sheet_column_title_button_draw (sheet, i); + g_signal_emit (sheet, sheet_signals[CHANGED], 0, -1, i); + } + } if ( extremity) gtk_sheet_column_title_button_draw (sheet, -1); @@ -1369,7 +1377,7 @@ gtk_sheet_show_grid (GtkSheet *sheet, gboolean show) sheet->show_grid = show; - gtk_sheet_range_draw (sheet, NULL); + gtk_sheet_range_draw (sheet, NULL); } gboolean @@ -1529,7 +1537,8 @@ gtk_sheet_set_row_titles_width (GtkSheet *sheet, guint width) void gtk_sheet_set_column_titles_height (GtkSheet *sheet, guint height) { - if (height < DEFAULT_ROW_HEIGHT (GTK_WIDGET (sheet))) return; + if (height < default_row_height (sheet)) + return; sheet->column_title_area.height = height; @@ -1551,14 +1560,14 @@ gtk_sheet_show_column_titles (GtkSheet *sheet) if (!GTK_WIDGET_REALIZED (GTK_WIDGET (sheet))) return; - gdk_window_show (sheet->column_title_window); - gdk_window_move_resize (sheet->column_title_window, - sheet->column_title_area.x, - sheet->column_title_area.y, - sheet->column_title_area.width, - sheet->column_title_area.height); + gdk_window_show (sheet->column_title_window); + gdk_window_move_resize (sheet->column_title_window, + sheet->column_title_area.x, + sheet->column_title_area.y, + sheet->column_title_area.width, + sheet->column_title_area.height); - adjust_scrollbars (sheet); + adjust_scrollbars (sheet); if (sheet->vadjustment) g_signal_emit_by_name (sheet->vadjustment, @@ -1906,9 +1915,9 @@ gtk_sheet_set_scroll_adjustments (GtkSheet *sheet, GtkAdjustment *vadjustment) { if ( sheet->vadjustment != vadjustment ) -{ - if (sheet->vadjustment) - g_object_unref (sheet->vadjustment); + { + if (sheet->vadjustment) + g_object_unref (sheet->vadjustment); sheet->vadjustment = vadjustment; g_object_ref (vadjustment); @@ -1918,9 +1927,9 @@ gtk_sheet_set_scroll_adjustments (GtkSheet *sheet, } if ( sheet->hadjustment != hadjustment ) -{ - if (sheet->hadjustment) - g_object_unref (sheet->hadjustment); + { + if (sheet->hadjustment) + g_object_unref (sheet->hadjustment); sheet->hadjustment = hadjustment; g_object_ref (hadjustment); @@ -2108,7 +2117,7 @@ gtk_sheet_realize (GtkWidget *widget) attributes.x = 0; attributes.y = 0; attributes.width = sheet->sheet_window_width; - attributes.height = sheet->sheet_window_height; + attributes.height = sheet->sheet_window_height; sheet->sheet_window = gdk_window_new (widget->window, &attributes, attributes_mask); @@ -2309,20 +2318,20 @@ gtk_sheet_unmap (GtkWidget * widget) if (!GTK_WIDGET_MAPPED (widget)) return; - GTK_WIDGET_UNSET_FLAGS (widget, GTK_MAPPED); + GTK_WIDGET_UNSET_FLAGS (widget, GTK_MAPPED); - gdk_window_hide (sheet->sheet_window); - if (sheet->column_titles_visible) - gdk_window_hide (sheet->column_title_window); - if (sheet->row_titles_visible) - gdk_window_hide (sheet->row_title_window); - gdk_window_hide (widget->window); + gdk_window_hide (sheet->sheet_window); + if (sheet->column_titles_visible) + gdk_window_hide (sheet->column_title_window); + if (sheet->row_titles_visible) + gdk_window_hide (sheet->row_title_window); + gdk_window_hide (widget->window); - if (GTK_WIDGET_MAPPED (sheet->entry_widget)) - gtk_widget_unmap (sheet->entry_widget); + if (GTK_WIDGET_MAPPED (sheet->entry_widget)) + gtk_widget_unmap (sheet->entry_widget); - if (GTK_WIDGET_MAPPED (sheet->button)) - gtk_widget_unmap (sheet->button); + if (GTK_WIDGET_MAPPED (sheet->button)) + gtk_widget_unmap (sheet->button); } @@ -2480,7 +2489,7 @@ gtk_sheet_cell_draw_label (GtkSheet *sheet, gint row, gint col) if (size >= text_width + COLUMN_TITLES_HEIGHT) break; size += g_sheet_column_get_width (sheet->column_geometry, i); g_sheet_column_set_right_text_column (sheet->column_geometry, i, - MAX (col, + MAX (col, g_sheet_column_get_right_text_column (sheet->column_geometry, i))); } area.width = size; @@ -2500,8 +2509,8 @@ gtk_sheet_cell_draw_label (GtkSheet *sheet, gint row, gint col) if (sizer >= text_width / 2) break; sizer += g_sheet_column_get_width (sheet->column_geometry, i); g_sheet_column_set_left_text_column (sheet->column_geometry, i, - MIN ( - col, + MIN ( + col, g_sheet_column_get_left_text_column (sheet->column_geometry, i))); } for (i = col - 1; i >= min_visible_column (sheet); i--) @@ -2510,7 +2519,7 @@ gtk_sheet_cell_draw_label (GtkSheet *sheet, gint row, gint col) if (sizel >= text_width / 2) break; sizel += g_sheet_column_get_width (sheet->column_geometry, i); g_sheet_column_set_right_text_column (sheet->column_geometry, i, - MAX (col, + MAX (col, g_sheet_column_get_right_text_column (sheet->column_geometry, i))); } size = MIN (sizel, sizer); @@ -2529,8 +2538,8 @@ gtk_sheet_cell_draw_label (GtkSheet *sheet, gint row, gint col) if (size >= text_width + COLUMN_TITLES_HEIGHT) break; size += g_sheet_column_get_width (sheet->column_geometry, i); g_sheet_column_set_left_text_column (sheet->column_geometry, i, - MIN ( - col, + MIN ( + col, g_sheet_column_get_left_text_column (sheet->column_geometry, i))); } @@ -2706,8 +2715,8 @@ gtk_sheet_draw_backing_pixmap (GtkSheet *sheet, GtkSheetRange range) gdk_drawable_get_size (sheet->pixmap, &width, &height); gdk_draw_drawable (sheet->sheet_window, - GTK_WIDGET (sheet)->style->fg_gc[GTK_STATE_NORMAL], - sheet->pixmap, + GTK_WIDGET (sheet)->style->fg_gc[GTK_STATE_NORMAL], + sheet->pixmap, 0, 0, /* src */ sheet->row_titles_visible ? sheet->row_title_area.width : 0, sheet->column_titles_visible ? sheet->column_title_area.height : 0, @@ -2788,7 +2797,7 @@ gtk_sheet_set_cell (GtkSheet *sheet, gint row, gint col, GTK_SHEET_SET_FLAGS (sheet, GTK_SHEET_REDRAW_PENDING); } else - gtk_sheet_range_draw (sheet, &range); + gtk_sheet_range_draw (sheet, &range); } if ( changed ) @@ -2816,8 +2825,8 @@ gtk_sheet_cell_clear (GtkSheet *sheet, gint row, gint column) gtk_sheet_real_cell_clear (sheet, row, column); - gtk_sheet_range_draw (sheet, &range); - } + gtk_sheet_range_draw (sheet, &range); +} static void gtk_sheet_real_cell_clear (GtkSheet *sheet, gint row, gint column) @@ -2975,20 +2984,20 @@ gtk_sheet_get_pixel_info (GtkSheet *sheet, trow = yyy_row_ypixel_to_row (sheet, y); if (trow > g_sheet_row_get_row_count (sheet->row_geometry)) - return FALSE; + return FALSE; - *row = trow; + *row = trow; if ( sheet->row_titles_visible) x -= sheet->row_title_area.width; x += sheet->hadjustment->value; - tcol = column_from_xpixel (sheet, x); + tcol = column_from_xpixel (sheet, x); if (tcol > g_sheet_column_get_column_count (sheet->column_geometry)) - return FALSE; + return FALSE; - *column = tcol; + *column = tcol; return TRUE; } @@ -3633,8 +3642,8 @@ gtk_sheet_draw_border (GtkSheet *sheet, GtkSheetRange new_range) gdk_gc_set_clip_rectangle (sheet->xor_gc, &area); - gdk_draw_rectangle (sheet->sheet_window, - sheet->xor_gc, + gdk_draw_rectangle (sheet->sheet_window, + sheet->xor_gc, FALSE, x, y, width - 2, @@ -4078,10 +4087,10 @@ gtk_sheet_click_cell (GtkSheet *sheet, gint row, gint column, gboolean *veto) { if (! g_sheet_column_get_visibility (sheet->column_geometry, column) || !g_sheet_row_get_visibility (sheet->row_geometry, row)) - { - *veto = FALSE; - return; - } + { + *veto = FALSE; + return; + } } _gtkextra_signal_emit (GTK_OBJECT (sheet), sheet_signals[TRAVERSE], @@ -4567,7 +4576,7 @@ gtk_sheet_motion (GtkWidget *widget, GdkEventMotion *event) if (GTK_SHEET_IN_XDRAG (sheet)) { - x = event->x; + x = event->x; new_column_width (sheet, sheet->drag_cell.col, &x); #if 0 @@ -4850,266 +4859,119 @@ gtk_sheet_entry_key_press (GtkWidget *widget, return focus; } -static gint -gtk_sheet_key_press (GtkWidget *widget, - GdkEventKey *key) + +/* Number of rows in a step-increment */ +#define ROWS_PER_STEP 1 + + +static void +page_vertical (GtkSheet *sheet, GtkScrollType dir) { - GtkSheet *sheet; - gint row, col; - gint state; - gboolean extend_selection = FALSE; - gboolean force_move = FALSE; - gboolean in_selection = FALSE; - gboolean veto = TRUE; - gint scroll = 1; + gint old_row = sheet->active_cell.row ; + glong vpixel = g_sheet_row_start_pixel (sheet->row_geometry, old_row); - sheet = GTK_SHEET (widget); + gint new_row; - if (key->state & GDK_CONTROL_MASK || key->keyval == GDK_Control_L || - key->keyval == GDK_Control_R) return FALSE; + vpixel -= g_sheet_row_start_pixel (sheet->row_geometry, + min_visible_row (sheet)); - extend_selection = (key->state & GDK_SHIFT_MASK) || key->keyval == GDK_Shift_L - || key->keyval == GDK_Shift_R; + switch ( dir) + { + case GTK_SCROLL_PAGE_DOWN: + gtk_adjustment_set_value (sheet->vadjustment, + sheet->vadjustment->value + + sheet->vadjustment->page_increment); + break; + case GTK_SCROLL_PAGE_UP: + gtk_adjustment_set_value (sheet->vadjustment, + sheet->vadjustment->value - + sheet->vadjustment->page_increment); + + break; + default: + g_assert_not_reached (); + break; + } + + + vpixel += g_sheet_row_start_pixel (sheet->row_geometry, + min_visible_row (sheet)); + + new_row = yyy_row_ypixel_to_row (sheet, vpixel); + + gtk_sheet_activate_cell (sheet, new_row, + sheet->active_cell.col); +} + + +static gboolean +gtk_sheet_key_press (GtkWidget *widget, + GdkEventKey *key) +{ + GtkSheet *sheet = GTK_SHEET (widget); - state = sheet->state; - in_selection = GTK_SHEET_IN_SELECTION (sheet); GTK_SHEET_UNSET_FLAGS (sheet, GTK_SHEET_IN_SELECTION); + switch (key->keyval) { - case GDK_Return: case GDK_KP_Enter: - if (sheet->state == GTK_SHEET_NORMAL && - !GTK_SHEET_IN_SELECTION (sheet)) - g_signal_stop_emission_by_name (gtk_sheet_get_entry (sheet), - "key-press-event"); - row = sheet->active_cell.row; - col = sheet->active_cell.col; - if (sheet->state == GTK_SHEET_COLUMN_SELECTED) - row = min_visible_row (sheet)- 1; - if (sheet->state == GTK_SHEET_ROW_SELECTED) - col = min_visible_column (sheet); - if (row < g_sheet_row_get_row_count (sheet->row_geometry) - 1) - { - row = row + scroll; - while (!g_sheet_row_get_visibility (sheet->row_geometry, row) && row < g_sheet_row_get_row_count (sheet->row_geometry) - 1) - row++; - } - gtk_sheet_click_cell (sheet, row, col, &veto); - extend_selection = FALSE; + case GDK_Right: + /* + gtk_adjustment_set_value (sheet->hadjustment, + sheet->hadjustment->value + + sheet->hadjustment->step_increment); + */ + + gtk_sheet_activate_cell (sheet, + sheet->active_cell.row, + sheet->active_cell.col + 1); break; - case GDK_ISO_Left_Tab: - row = sheet->active_cell.row; - col = sheet->active_cell.col; - if (sheet->state == GTK_SHEET_ROW_SELECTED) - col = min_visible_column (sheet)- 1; - if (sheet->state == GTK_SHEET_COLUMN_SELECTED) - row = min_visible_row (sheet); - if (col > 0) - { - col = col - scroll; - while (! g_sheet_column_get_visibility (sheet->column_geometry, col) && col > 0) col--; - col = MAX (0, col); - } - gtk_sheet_click_cell (sheet, row, col, &veto); - extend_selection = FALSE; + case GDK_Left: + gtk_sheet_activate_cell (sheet, + sheet->active_cell.row, + sheet->active_cell.col - 1); break; - case GDK_Tab: - row = sheet->active_cell.row; - col = sheet->active_cell.col; - if (sheet->state == GTK_SHEET_ROW_SELECTED) - col = min_visible_column (sheet)- 1; - if (sheet->state == GTK_SHEET_COLUMN_SELECTED) - row = min_visible_row (sheet); - if (col < g_sheet_column_get_column_count (sheet->column_geometry) - 1) - { - col = col + scroll; - while (! g_sheet_column_get_visibility (sheet->column_geometry, col) && - col < g_sheet_column_get_column_count (sheet->column_geometry) - 1) - col++; - } - gtk_sheet_click_cell (sheet, row, col, &veto); - extend_selection = FALSE; + + case GDK_Down: + gtk_adjustment_set_value (sheet->vadjustment, + sheet->vadjustment->value + + sheet->vadjustment->step_increment); + + gtk_sheet_activate_cell (sheet, + sheet->active_cell.row + ROWS_PER_STEP, + sheet->active_cell.col); + + break; - case GDK_Page_Up: - scroll = max_visible_row (sheet)- min_visible_row (sheet)+1; case GDK_Up: - if (extend_selection) - { - if (state == GTK_STATE_NORMAL) - { - row = sheet->active_cell.row; - col = sheet->active_cell.col; - gtk_sheet_click_cell (sheet, row, col, &veto); - if (!veto) break; - } - if (sheet->selection_cell.row > 0) - { - row = sheet->selection_cell.row - scroll; - while (!g_sheet_row_get_visibility (sheet->row_geometry, row) && row > 0) row--; - row = MAX (0, row); - gtk_sheet_extend_selection (sheet, row, sheet->selection_cell.col); - } - return TRUE; - } - col = sheet->active_cell.col; - row = sheet->active_cell.row; - if (state == GTK_SHEET_COLUMN_SELECTED) - row = min_visible_row (sheet); - if (state == GTK_SHEET_ROW_SELECTED) - col = min_visible_column (sheet); - row = row - scroll; - while (!g_sheet_row_get_visibility (sheet->row_geometry, row) && row > 0) row--; - row = MAX (0, row); - gtk_sheet_click_cell (sheet, row, col, &veto); - extend_selection = FALSE; + gtk_adjustment_set_value (sheet->vadjustment, + sheet->vadjustment->value - + sheet->vadjustment->step_increment); + + gtk_sheet_activate_cell (sheet, + sheet->active_cell.row - ROWS_PER_STEP, + sheet->active_cell.col); + break; + case GDK_Page_Down: - scroll = max_visible_row (sheet)- min_visible_row (sheet)+1; - case GDK_Down: - if (extend_selection) - { - if (state == GTK_STATE_NORMAL) - { - row = sheet->active_cell.row; - col = sheet->active_cell.col; - gtk_sheet_click_cell (sheet, row, col, &veto); - if (!veto) break; - } - if (sheet->selection_cell.row < g_sheet_row_get_row_count (sheet->row_geometry) - 1) - { - row = sheet->selection_cell.row + scroll; - while (!g_sheet_row_get_visibility (sheet->row_geometry, row) && row < g_sheet_row_get_row_count (sheet->row_geometry) - 1) row++; - row = MIN (g_sheet_row_get_row_count (sheet->row_geometry) - 1, row); - gtk_sheet_extend_selection (sheet, row, sheet->selection_cell.col); - } - return TRUE; - } - col = sheet->active_cell.col; - row = sheet->active_cell.row; - if (sheet->active_cell.row < g_sheet_row_get_row_count (sheet->row_geometry) - 1) - { - if (state == GTK_SHEET_COLUMN_SELECTED) - row = min_visible_row (sheet)- 1; - if (state == GTK_SHEET_ROW_SELECTED) - col = min_visible_column (sheet); - row = row + scroll; - while (!g_sheet_row_get_visibility (sheet->row_geometry, row) && row < g_sheet_row_get_row_count (sheet->row_geometry) - 1) row++; - row = MIN (g_sheet_row_get_row_count (sheet->row_geometry) - 1, row); - } - gtk_sheet_click_cell (sheet, row, col, &veto); - extend_selection = FALSE; + page_vertical (sheet, GTK_SCROLL_PAGE_DOWN); break; - case GDK_Right: - if (extend_selection) - { - if (state == GTK_STATE_NORMAL) - { - row = sheet->active_cell.row; - col = sheet->active_cell.col; - gtk_sheet_click_cell (sheet, row, col, &veto); - if (!veto) break; - } - if (sheet->selection_cell.col < g_sheet_column_get_column_count (sheet->column_geometry) - 1) - { - col = sheet->selection_cell.col + 1; - while (! g_sheet_column_get_visibility (sheet->column_geometry, col) && col < g_sheet_column_get_column_count (sheet->column_geometry) - 1) - col++; - gtk_sheet_extend_selection (sheet, sheet->selection_cell.row, col); - } - return TRUE; - } - col = sheet->active_cell.col; - row = sheet->active_cell.row; - if (sheet->active_cell.col < g_sheet_column_get_column_count (sheet->column_geometry) - 1) - { - col ++; - if (state == GTK_SHEET_ROW_SELECTED) - col = min_visible_column (sheet)- 1; - if (state == GTK_SHEET_COLUMN_SELECTED) - row = min_visible_row (sheet); - while (! g_sheet_column_get_visibility (sheet->column_geometry, col) && col < g_sheet_column_get_column_count (sheet->column_geometry) - 1) col++; - if (strlen (gtk_entry_get_text (GTK_ENTRY (gtk_sheet_get_entry (sheet)))) == 0 - || force_move) - { - gtk_sheet_click_cell (sheet, row, col, &veto); - } - else - return FALSE; - } - extend_selection = FALSE; - break; - case GDK_Left: - if (extend_selection) - { - if (state == GTK_STATE_NORMAL) - { - row = sheet->active_cell.row; - col = sheet->active_cell.col; - gtk_sheet_click_cell (sheet, row, col, &veto); - if (!veto) break; - } - if (sheet->selection_cell.col > 0) - { - col = sheet->selection_cell.col - 1; - while (! g_sheet_column_get_visibility (sheet->column_geometry, col) && col > 0) col--; - gtk_sheet_extend_selection (sheet, sheet->selection_cell.row, col); - } - return TRUE; - } - col = sheet->active_cell.col - 1; - row = sheet->active_cell.row; - if (state == GTK_SHEET_ROW_SELECTED) - col = min_visible_column (sheet)- 1; - if (state == GTK_SHEET_COLUMN_SELECTED) - row = min_visible_row (sheet); - while (! g_sheet_column_get_visibility (sheet->column_geometry, col) && col > 0) col--; - col = MAX (0, col); - - if (strlen (gtk_entry_get_text (GTK_ENTRY (gtk_sheet_get_entry (sheet)))) == 0 - || force_move) - { - gtk_sheet_click_cell (sheet, row, col, &veto); - } - else - return FALSE; - extend_selection = FALSE; - break; - case GDK_Home: - row = 0; - while (!g_sheet_row_get_visibility (sheet->row_geometry, row) && row < g_sheet_row_get_row_count (sheet->row_geometry) - 1) row++; - gtk_sheet_click_cell (sheet, row, sheet->active_cell.col, &veto); - extend_selection = FALSE; - break; - case GDK_End: - row = g_sheet_row_get_row_count (sheet->row_geometry) - 1; - while (!g_sheet_row_get_visibility (sheet->row_geometry, row) && row > 0) row--; - gtk_sheet_click_cell (sheet, row, sheet->active_cell.col, &veto); - extend_selection = FALSE; + case GDK_Page_Up: + page_vertical (sheet, GTK_SCROLL_PAGE_UP); break; - default: - if (in_selection) - { - GTK_SHEET_SET_FLAGS (sheet, GTK_SHEET_IN_SELECTION); - if (extend_selection) return TRUE; - } - if (state == GTK_SHEET_ROW_SELECTED) - sheet->active_cell.col = min_visible_column (sheet); - if (state == GTK_SHEET_COLUMN_SELECTED) - sheet->active_cell.row = min_visible_row (sheet); - return FALSE; - } - if (extend_selection) return TRUE; - gtk_sheet_activate_cell (sheet, sheet->active_cell.row, - sheet->active_cell.col); + default: + break; + } return TRUE; } static void -gtk_sheet_size_request (GtkWidget * widget, - GtkRequisition * requisition) +gtk_sheet_size_request (GtkWidget *widget, + GtkRequisition *requisition) { GtkSheet *sheet; @@ -5119,8 +4981,8 @@ gtk_sheet_size_request (GtkWidget * widget, sheet = GTK_SHEET (widget); - requisition->width = 3*DEFAULT_COLUMN_WIDTH; - requisition->height = 3*DEFAULT_ROW_HEIGHT (widget); + requisition->width = 3 * DEFAULT_COLUMN_WIDTH; + requisition->height = 3 * default_row_height (sheet); /* compute the size of the column title area */ if (sheet->column_titles_visible) @@ -5184,7 +5046,7 @@ gtk_sheet_size_allocate (GtkWidget * widget, if (sheet->row_titles_visible) { - sheet->column_title_area.x = sheet->row_title_area.width; + sheet->column_title_area.x = sheet->row_title_area.width; sheet->sheet_window_width -= sheet->row_title_area.width; } @@ -5207,7 +5069,7 @@ gtk_sheet_size_allocate (GtkWidget * widget, sheet->row_title_area.y = 0; if (sheet->column_titles_visible) { - sheet->row_title_area.y = sheet->column_title_area.height; + sheet->row_title_area.y = sheet->column_title_area.height; sheet->sheet_window_height -= sheet->column_title_area.height; } @@ -5668,7 +5530,7 @@ gtk_sheet_button_draw (GtkSheet *sheet, GdkWindow *window, if (button->label_visible) { - text_height = DEFAULT_ROW_HEIGHT (GTK_WIDGET (sheet)) - + text_height = default_row_height (sheet) - 2 * COLUMN_TITLES_HEIGHT; gdk_gc_set_clip_rectangle (GTK_WIDGET (sheet)->style->fg_gc[button->state], @@ -5768,7 +5630,7 @@ gtk_sheet_column_title_button_draw (GtkSheet *sheet, gint column) button = g_sheet_column_get_button (sheet->column_geometry, column); allocation.y = 0; - allocation.x = column_left_xpixel (sheet, column) + CELL_SPACING; + allocation.x = column_left_xpixel (sheet, column) + CELL_SPACING; allocation.x -= sheet->hadjustment->value; allocation.height = sheet->column_title_area.height; @@ -5777,7 +5639,7 @@ gtk_sheet_column_title_button_draw (GtkSheet *sheet, gint column) gtk_sheet_button_draw (sheet, sheet->column_title_window, button, is_sensitive, allocation); - } +} static void @@ -5817,22 +5679,40 @@ gtk_sheet_row_title_button_draw (GtkSheet *sheet, gint row) * hadjustment_value_changed */ static void -adjust_scrollbars (GtkSheet * sheet) +adjust_scrollbars (GtkSheet *sheet) { if (sheet->vadjustment) { + glong last_row = g_sheet_row_get_row_count (sheet->row_geometry) - 1; + sheet->vadjustment->step_increment = - 1 ; // DEFAULT_ROW_HEIGHT (GTK_WIDGET (sheet)); + ROWS_PER_STEP * + g_sheet_row_get_height (sheet->row_geometry, last_row); sheet->vadjustment->page_increment = - sheet->sheet_window_height - DEFAULT_ROW_HEIGHT (GTK_WIDGET (sheet)); + sheet->sheet_window_height - + sheet->column_title_area.height - + g_sheet_row_get_height (sheet->row_geometry, last_row); - sheet->vadjustment->upper = DEFAULT_ROW_HEIGHT (GTK_WIDGET (sheet)) - * g_sheet_row_get_row_count (sheet->row_geometry); + sheet->vadjustment->upper = + g_sheet_row_start_pixel (sheet->row_geometry, last_row) + + + g_sheet_row_get_height (sheet->row_geometry, last_row) + ; + sheet->vadjustment->lower = 0; sheet->vadjustment->page_size = sheet->sheet_window_height; +#if 0 + { + GtkAdjustment *adj = sheet->vadjustment; + g_print ("Lower: %g; Upper: %g\n", adj->lower, adj->upper); + g_print ("Step: %g; Page %g\n", adj->step_increment, + adj->page_increment); + g_print ("Current: %g\n", adj->value); + } +#endif g_signal_emit_by_name (sheet->vadjustment, "changed"); } @@ -5971,11 +5851,11 @@ draw_xor_rectangle (GtkSheet *sheet, GtkSheetRange range) gdk_gc_set_clip_rectangle (sheet->xor_gc, &clip_area); - gdk_draw_rectangle (sheet->sheet_window, - sheet->xor_gc, - FALSE, - area.x + i, area.y + i, - area.width - 2 * i, area.height - 2 * i); + gdk_draw_rectangle (sheet->sheet_window, + sheet->xor_gc, + FALSE, + area.x + i, area.y + i, + area.width - 2 * i, area.height - 2 * i); gdk_gc_set_clip_rectangle (sheet->xor_gc, NULL); @@ -6170,7 +6050,7 @@ label_size_request (GtkSheet *sheet, gchar *label, GtkRequisition *req) gchar *words; gchar word[1000]; gint n = 0; - gint row_height = DEFAULT_ROW_HEIGHT (GTK_WIDGET (sheet)) - 2 * COLUMN_TITLES_HEIGHT + 2; + gint row_height = default_row_height (sheet) - 2 * COLUMN_TITLES_HEIGHT + 2; req->height = 0; req->width = 0; @@ -6212,12 +6092,12 @@ gtk_sheet_button_size_request (GtkSheet *sheet, } else { - label_requisition.height = DEFAULT_ROW_HEIGHT (GTK_WIDGET (sheet)); + label_requisition.height = default_row_height (sheet); label_requisition.width = COLUMN_MIN_WIDTH; } - requisition.height = DEFAULT_ROW_HEIGHT (GTK_WIDGET (sheet)); - requisition.width = COLUMN_MIN_WIDTH; + requisition.height = default_row_height (sheet); + requisition.width = COLUMN_MIN_WIDTH; *button_requisition = requisition; diff --git a/src/ui/gui/psppire-data-editor.c b/src/ui/gui/psppire-data-editor.c index 1901f35b..7d2374e0 100644 --- a/src/ui/gui/psppire-data-editor.c +++ b/src/ui/gui/psppire-data-editor.c @@ -566,7 +566,6 @@ datum_entry_activate (GtkEntry *entry, gpointer data) psppire_data_store_set_string (de->data_store, text, row, column); } -static gboolean on_data_sheet_activate (GtkWidget *sheet, gint i, gint j, PsppireDataEditor *de); static void on_activate (PsppireDataEditor *de); static void on_deactivate (PsppireDataEditor *de); static gboolean on_switch_page (PsppireDataEditor *de, GtkNotebookPage *p, gint pagenum, gpointer data); @@ -662,8 +661,6 @@ init_data_sheet (PsppireDataEditor *de) static void psppire_data_editor_init (PsppireDataEditor *de) { - int i; - GtkWidget *hbox = gtk_hbox_new (FALSE, 0); GtkWidget *sw_vs = gtk_scrolled_window_new (NULL, NULL); @@ -728,11 +725,6 @@ psppire_data_editor_init (PsppireDataEditor *de) G_CALLBACK (on_activate), de); - for (i = 0 ; i < 4 ; ++i ) - g_signal_connect (de->data_sheet[i], "activate", - G_CALLBACK (on_data_sheet_activate), - de); - g_signal_connect_swapped (de->data_sheet[0], "deactivate", G_CALLBACK (on_deactivate), de); @@ -1133,25 +1125,6 @@ emit_selected_signal (PsppireDataEditor *de) g_signal_emit (de, data_editor_signals[DATA_SELECTION_CHANGED], 0, data_selected); } -static gboolean -on_data_sheet_activate (GtkWidget *sheet, gint row, gint col, PsppireDataEditor *de) -{ - gint i; - - for ( i = 0 ; i < 4 ; ++i ) - { - gint current_row, current_col; - if (de->data_sheet[i] == sheet) continue; - - gtk_sheet_get_active_cell (GTK_SHEET (de->data_sheet[0]), ¤t_row, ¤t_col); - - if ( row == current_row && current_col == col ) continue; - - gtk_sheet_set_active_cell (GTK_SHEET (de->data_sheet[i]), row, col); - } - - return TRUE; -} static void on_activate (PsppireDataEditor *de)