static void draw_row_title_buttons_range (GtkSheet *sheet, gint first, gint n);
-static void gtk_sheet_set_row_height (GtkSheet *sheet,
- gint row,
- guint height);
+static void set_row_height (GtkSheet *sheet,
+ gint row,
+ guint height);
static void destroy_hover_window (GtkSheetHoverTitle *);
static GtkSheetHoverTitle *create_hover_window (void);
static inline gint
column_from_xpixel (const GtkSheet *sheet, gint pixel)
{
- return psppire_axis_get_unit_at_pixel (sheet->haxis, pixel);
+ return psppire_axis_unit_at_pixel (sheet->haxis, pixel);
}
static inline gint
row_from_ypixel (const GtkSheet *sheet, gint pixel)
{
- return psppire_axis_get_unit_at_pixel (sheet->vaxis, pixel);
+ return psppire_axis_unit_at_pixel (sheet->vaxis, pixel);
}
{
glong row = min_visible_row (sheet);
- if ( psppire_axis_pixel_start (sheet->vaxis, row) < sheet->vadjustment->value)
+ if ( psppire_axis_start_pixel (sheet->vaxis, row) < sheet->vadjustment->value)
row++;
return row;
static inline glong
max_visible_row (const GtkSheet *sheet)
{
- return row_from_ypixel (sheet,
- sheet->vadjustment->value +
- sheet->vadjustment->page_size);
+ return row_from_ypixel (sheet, sheet->vadjustment->value + sheet->vadjustment->page_size);
}
{
glong row = max_visible_row (sheet);
- if ( psppire_axis_pixel_start (sheet->vaxis, row)
+ if ( psppire_axis_start_pixel (sheet->vaxis, row)
+
psppire_axis_unit_size (sheet->vaxis, row)
> sheet->vadjustment->value)
{
glong col = min_visible_column (sheet);
- if ( psppire_axis_pixel_start (sheet->haxis, col) < sheet->hadjustment->value)
+ if ( psppire_axis_start_pixel (sheet->haxis, col) < sheet->hadjustment->value)
col++;
return col;
static inline glong
max_visible_column (const GtkSheet *sheet)
{
- return column_from_xpixel (sheet,
- sheet->hadjustment->value +
- sheet->hadjustment->page_size);
+ return column_from_xpixel (sheet, sheet->hadjustment->value + sheet->hadjustment->page_size);
}
static inline glong
{
glong col = max_visible_column (sheet);
- if ( psppire_axis_pixel_start (sheet->haxis, col)
- +
+ if ( psppire_axis_start_pixel (sheet->haxis, col)
+ +
psppire_axis_unit_size (sheet->haxis, col)
> sheet->hadjustment->value)
col--;
return FALSE;
}
+static gboolean
+on_row_boundary (const GtkSheet *sheet, gint y, gint *row)
+{
+ gint r;
+
+ y += sheet->vadjustment->value;
+
+ r = row_from_ypixel (sheet, y);
+
+ if ( row_from_ypixel (sheet, y - DRAG_WIDTH / 2) < r )
+ {
+ *row = r - 1;
+ return TRUE;
+ }
+
+ if ( row_from_ypixel (sheet, y + DRAG_WIDTH / 2) > r )
+ {
+ *row = r;
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+
static inline gboolean
POSSIBLE_DRAG (const GtkSheet *sheet, gint x, gint y,
gint *drag_row, gint *drag_column)
*drag_column = column_from_xpixel (sheet, x);
*drag_row = row_from_ypixel (sheet, y);
- if (x >= psppire_axis_pixel_start (sheet->haxis, sheet->range.col0) - DRAG_WIDTH / 2 &&
- x <= psppire_axis_pixel_start (sheet->haxis, sheet->range.coli) +
+ if (x >= psppire_axis_start_pixel (sheet->haxis, sheet->range.col0) - DRAG_WIDTH / 2 &&
+ x <= psppire_axis_start_pixel (sheet->haxis, sheet->range.coli) +
psppire_axis_unit_size (sheet->haxis, sheet->range.coli) + DRAG_WIDTH / 2)
{
- ydrag = psppire_axis_pixel_start (sheet->vaxis, sheet->range.row0);
+ ydrag = psppire_axis_start_pixel (sheet->vaxis, sheet->range.row0);
if (y >= ydrag - DRAG_WIDTH / 2 && y <= ydrag + DRAG_WIDTH / 2)
{
*drag_row = sheet->range.row0;
return TRUE;
}
- ydrag = psppire_axis_pixel_start (sheet->vaxis, sheet->range.rowi) +
+ ydrag = psppire_axis_start_pixel (sheet->vaxis, sheet->range.rowi) +
psppire_axis_unit_size (sheet->vaxis, sheet->range.rowi);
if (y >= ydrag - DRAG_WIDTH / 2 && y <= ydrag + DRAG_WIDTH / 2)
{
}
}
- if (y >= psppire_axis_pixel_start (sheet->vaxis, sheet->range.row0) - DRAG_WIDTH / 2 &&
- y <= psppire_axis_pixel_start (sheet->vaxis, sheet->range.rowi) +
+ if (y >= psppire_axis_start_pixel (sheet->vaxis, sheet->range.row0) - DRAG_WIDTH / 2 &&
+ y <= psppire_axis_start_pixel (sheet->vaxis, sheet->range.rowi) +
psppire_axis_unit_size (sheet->vaxis, sheet->range.rowi) + DRAG_WIDTH / 2)
{
- xdrag = psppire_axis_pixel_start (sheet->haxis, sheet->range.col0);
+ xdrag = psppire_axis_start_pixel (sheet->haxis, sheet->range.col0);
if (x >= xdrag - DRAG_WIDTH / 2 && x <= xdrag + DRAG_WIDTH / 2)
{
*drag_column = sheet->range.col0;
return TRUE;
}
- xdrag = psppire_axis_pixel_start (sheet->haxis, sheet->range.coli) +
+ xdrag = psppire_axis_start_pixel (sheet->haxis, sheet->range.coli) +
psppire_axis_unit_size (sheet->haxis, sheet->range.coli);
if (x >= xdrag - DRAG_WIDTH / 2 && x <= xdrag + DRAG_WIDTH / 2)
{
sheet->range.col0 < 0 || sheet->range.coli < 0 )
return FALSE;
- xdrag = psppire_axis_pixel_start (sheet->haxis, sheet->range.coli)+
+ xdrag = psppire_axis_start_pixel (sheet->haxis, sheet->range.coli)+
psppire_axis_unit_size (sheet->haxis, sheet->range.coli);
- ydrag = psppire_axis_pixel_start (sheet->vaxis, sheet->range.rowi) +
+ ydrag = psppire_axis_start_pixel (sheet->vaxis, sheet->range.rowi) +
psppire_axis_unit_size (sheet->vaxis, sheet->range.rowi);
if (sheet->state == GTK_SHEET_COLUMN_SELECTED)
- ydrag = psppire_axis_pixel_start (sheet->vaxis, min_visible_row (sheet));
+ ydrag = psppire_axis_start_pixel (sheet->vaxis, min_visible_row (sheet));
if (sheet->state == GTK_SHEET_ROW_SELECTED)
- xdrag = psppire_axis_pixel_start (sheet->haxis, min_visible_column (sheet));
+ xdrag = psppire_axis_start_pixel (sheet->haxis, min_visible_column (sheet));
*drag_column = column_from_xpixel (sheet, x);
*drag_row = row_from_ypixel (sheet, y);
{
g_return_val_if_fail (range, FALSE);
- r->x = psppire_axis_pixel_start (sheet->haxis, range->col0);
+ r->x = psppire_axis_start_pixel (sheet->haxis, range->col0);
r->x -= round (sheet->hadjustment->value);
if ( sheet->row_titles_visible)
r->x += sheet->row_title_area.width;
- r->y = psppire_axis_pixel_start (sheet->vaxis, range->row0);
+ r->y = psppire_axis_start_pixel (sheet->vaxis, range->row0);
r->y -= round (sheet->vadjustment->value);
if ( sheet->column_titles_visible)
r->y += sheet->column_title_area.height;
- r->width = psppire_axis_pixel_start (sheet->haxis, range->coli) -
- psppire_axis_pixel_start (sheet->haxis, range->col0) +
+ r->width = psppire_axis_start_pixel (sheet->haxis, range->coli) -
+ psppire_axis_start_pixel (sheet->haxis, range->col0) +
psppire_axis_unit_size (sheet->haxis, range->coli);
- r->height = psppire_axis_pixel_start (sheet->vaxis, range->rowi) -
- psppire_axis_pixel_start (sheet->vaxis, range->row0) +
+ r->height = psppire_axis_start_pixel (sheet->vaxis, range->rowi) -
+ psppire_axis_start_pixel (sheet->vaxis, range->row0) +
psppire_axis_unit_size (sheet->vaxis, range->rowi);
return TRUE;
static void gtk_sheet_hide_entry_widget (GtkSheet *sheet);
static void change_active_cell (GtkSheet *sheet,
gint row, gint col);
-static void gtk_sheet_draw_active_cell (GtkSheet *sheet);
+static gboolean gtk_sheet_draw_active_cell (GtkSheet *sheet);
static void gtk_sheet_show_entry_widget (GtkSheet *sheet);
static gboolean gtk_sheet_click_cell (GtkSheet *sheet,
gint row,
sheet->motion_timer = 0;
- sheet->columns_resizable = TRUE;
- sheet->rows_resizable = TRUE;
-
sheet->row_titles_visible = TRUE;
sheet->row_title_area.width = DEFAULT_COLUMN_WIDTH;
if ( !GTK_WIDGET_REALIZED (GTK_WIDGET (sheet)))
return;
- if ( max_visible_row (sheet) > g_sheet_model_get_row_count (sheet->model)
- ||
- max_visible_column (sheet) > g_sheet_model_get_column_count (sheet->model))
- {
- gtk_sheet_moveto (sheet, 0, 0, 0, 0);
- }
-
if ( ( row0 < 0 && col0 < 0 ) || ( rowi < 0 && coli < 0 ) )
{
gtk_sheet_range_draw (sheet, NULL);
}
static void
-gtk_sheet_set_column_width (GtkSheet *sheet,
+set_column_width (GtkSheet *sheet,
gint column,
guint width);
if (row >= 0)
{
- gint y = psppire_axis_pixel_start (sheet->vaxis, row);
+ gint y = psppire_axis_start_pixel (sheet->vaxis, row);
gtk_adjustment_set_value (sheet->vadjustment, y - height * row_align);
}
if (col >= 0)
{
- gint x = psppire_axis_pixel_start (sheet->haxis, col);
+ gint x = psppire_axis_start_pixel (sheet->haxis, col);
gtk_adjustment_set_value (sheet->hadjustment, x - width * col_align);
}
}
-static gboolean
-gtk_sheet_columns_resizable (GtkSheet *sheet)
-{
- g_return_val_if_fail (sheet != NULL, FALSE);
- g_return_val_if_fail (GTK_IS_SHEET (sheet), FALSE);
-
- return sheet->columns_resizable;
-}
-
-
-static gboolean
-gtk_sheet_rows_resizable (GtkSheet *sheet)
-{
- g_return_val_if_fail (sheet != NULL, FALSE);
- g_return_val_if_fail (GTK_IS_SHEET (sheet), FALSE);
-
- return sheet->rows_resizable;
-}
-
-
void
gtk_sheet_select_row (GtkSheet *sheet, gint row)
{
set_entry_widget_font (sheet);
}
-#define BORDER_WIDTH 2
+#define BORDER_WIDTH 3
static void
gtk_sheet_realize (GtkWidget *widget)
sheet->fg_gc = gdk_gc_new (widget->window);
sheet->bg_gc = gdk_gc_new (widget->window);
- values.foreground = widget->style->white;
- values.function = GDK_INVERT;
+ values.foreground = widget->style->black;
+ values.function = GDK_COPY;
values.subwindow_mode = GDK_INCLUDE_INFERIORS;
values.line_width = BORDER_WIDTH;
global_button_clicked (GtkWidget *widget, gpointer data)
{
gtk_sheet_click_cell (GTK_SHEET (data), -1, -1);
- gtk_widget_grab_focus (GTK_WIDGET (data));
}
g_return_if_fail (drawing_range.rowi >= drawing_range.row0);
g_return_if_fail (drawing_range.coli >= drawing_range.col0);
- gdk_draw_rectangle (sheet->sheet_window,
- GTK_WIDGET (sheet)->style->white_gc,
- TRUE,
- area.x, area.y,
- area.width, area.height);
+ gdk_window_begin_paint_rect (sheet->sheet_window, &area);
for (i = drawing_range.row0; i <= drawing_range.rowi; i++)
for (j = drawing_range.col0; j <= drawing_range.coli; j++)
sheet->active_cell.col >= drawing_range.col0 &&
sheet->active_cell.col <= drawing_range.coli)
gtk_sheet_show_entry_widget (sheet);
+
+ gdk_window_end_paint (sheet->sheet_window);
}
static void
if (row >= psppire_axis_unit_count (sheet->vaxis) || column >= psppire_axis_unit_count (sheet->haxis))
return FALSE;
- area->x = (column == -1) ? 0 : psppire_axis_pixel_start (sheet->haxis, column);
- area->y = (row == -1) ? 0 : psppire_axis_pixel_start (sheet->vaxis, row);
+ area->x = (column == -1) ? 0 : psppire_axis_start_pixel (sheet->haxis, column);
+ area->y = (row == -1) ? 0 : psppire_axis_start_pixel (sheet->vaxis, row);
area->width= (column == -1) ? sheet->row_title_area.width
: psppire_axis_unit_size (sheet->haxis, column);
row, col));
gtk_widget_map (sheet->entry_widget);
- gtk_widget_grab_focus (GTK_WIDGET (sheet_entry));
-
dispose_string (sheet, text);
}
-static void
+static gboolean
gtk_sheet_draw_active_cell (GtkSheet *sheet)
{
gint row, col;
GtkSheetRange range;
- if (!GTK_WIDGET_DRAWABLE (GTK_WIDGET (sheet))) return;
- if (!GTK_WIDGET_REALIZED (GTK_WIDGET (sheet))) return;
-
row = sheet->active_cell.row;
col = sheet->active_cell.col;
- if (row < 0 || col < 0) return;
+ if (row < 0 || col < 0) return FALSE;
if (!gtk_sheet_cell_isvisible (sheet, row, col))
- return;
+ return FALSE;
range.col0 = range.coli = col;
range.row0 = range.rowi = row;
gtk_sheet_draw_border (sheet, range);
+
+ return FALSE;
}
if (mask1 != mask2)
{
- x = psppire_axis_pixel_start (sheet->haxis, j);
- y = psppire_axis_pixel_start (sheet->vaxis, i);
- width = psppire_axis_pixel_start (sheet->haxis, j)- x+
+ x = psppire_axis_start_pixel (sheet->haxis, j);
+ y = psppire_axis_start_pixel (sheet->vaxis, i);
+ width = psppire_axis_start_pixel (sheet->haxis, j)- x+
psppire_axis_unit_size (sheet->haxis, j);
- height = psppire_axis_pixel_start (sheet->vaxis, i) - y + psppire_axis_unit_size (sheet->vaxis, i);
+ height = psppire_axis_start_pixel (sheet->vaxis, i) - y + psppire_axis_unit_size (sheet->vaxis, i);
if (i == sheet->range.row0)
{
if (i != sheet->active_cell.row || j != sheet->active_cell.col)
{
- x = psppire_axis_pixel_start (sheet->haxis, j);
- y = psppire_axis_pixel_start (sheet->vaxis, i);
- width = psppire_axis_pixel_start (sheet->haxis, j)- x+
+ x = psppire_axis_start_pixel (sheet->haxis, j);
+ y = psppire_axis_start_pixel (sheet->vaxis, i);
+ width = psppire_axis_start_pixel (sheet->haxis, j)- x+
psppire_axis_unit_size (sheet->haxis, j);
- height = psppire_axis_pixel_start (sheet->vaxis, i) - y + psppire_axis_unit_size (sheet->vaxis, i);
+ height = psppire_axis_start_pixel (sheet->vaxis, i) - y + psppire_axis_unit_size (sheet->vaxis, i);
if (i == new_range.row0)
{
if (state == GTK_STATE_SELECTED && !selected)
{
- x = psppire_axis_pixel_start (sheet->haxis, j);
- y = psppire_axis_pixel_start (sheet->vaxis, i);
- width = psppire_axis_pixel_start (sheet->haxis, j) - x + psppire_axis_unit_size (sheet->haxis, j);
- height = psppire_axis_pixel_start (sheet->vaxis, i) - y + psppire_axis_unit_size (sheet->vaxis, i);
+ x = psppire_axis_start_pixel (sheet->haxis, j);
+ y = psppire_axis_start_pixel (sheet->vaxis, i);
+ width = psppire_axis_start_pixel (sheet->haxis, j) - x + psppire_axis_unit_size (sheet->haxis, j);
+ height = psppire_axis_start_pixel (sheet->vaxis, i) - y + psppire_axis_unit_size (sheet->vaxis, i);
if (i == sheet->range.row0)
{
(i != sheet->active_cell.row || j != sheet->active_cell.col))
{
- x = psppire_axis_pixel_start (sheet->haxis, j);
- y = psppire_axis_pixel_start (sheet->vaxis, i);
- width = psppire_axis_pixel_start (sheet->haxis, j) - x + psppire_axis_unit_size (sheet->haxis, j);
- height = psppire_axis_pixel_start (sheet->vaxis, i) - y + psppire_axis_unit_size (sheet->vaxis, i);
+ x = psppire_axis_start_pixel (sheet->haxis, j);
+ y = psppire_axis_start_pixel (sheet->vaxis, i);
+ width = psppire_axis_start_pixel (sheet->haxis, j) - x + psppire_axis_unit_size (sheet->haxis, j);
+ height = psppire_axis_start_pixel (sheet->vaxis, i) - y + psppire_axis_unit_size (sheet->vaxis, i);
if (i == new_range.row0)
{
mask2 = j == new_range.coli ? mask2 + 8 : mask2;
if (mask2 != mask1 || (mask2 == mask1 && state != GTK_STATE_SELECTED))
{
- x = psppire_axis_pixel_start (sheet->haxis, j);
- y = psppire_axis_pixel_start (sheet->vaxis, i);
+ x = psppire_axis_start_pixel (sheet->haxis, j);
+ y = psppire_axis_start_pixel (sheet->vaxis, i);
width = psppire_axis_unit_size (sheet->haxis, j);
height = psppire_axis_unit_size (sheet->vaxis, i);
if (mask2 & 1)
gdk_draw_rectangle (sheet->sheet_window,
sheet->xor_gc,
FALSE,
- area.x,
- area.y,
- area.width + 1,
- area.height + 1);
+ area.x, area.y,
+ area.width, area.height);
}
}
- range.row0 =
- row_from_ypixel (sheet,
- event->area.y + sheet->vadjustment->value);
- range.row0--;
+ {
+ gint y = event->area.y + sheet->vadjustment->value;
+ gint x = event->area.x + sheet->hadjustment->value;
+
+ if ( sheet->column_titles_visible)
+ y -= sheet->column_title_area.height;
- range.rowi =
- row_from_ypixel (sheet,
- event->area.y +
- event->area.height + sheet->vadjustment->value);
- range.rowi++;
+ if ( sheet->row_titles_visible)
+ x -= sheet->row_title_area.width;
- range.col0 =
- column_from_xpixel (sheet,
- event->area.x + sheet->hadjustment->value);
- range.col0--;
+ maximize_int (&x, 0);
+ maximize_int (&y, 0);
- range.coli =
- column_from_xpixel (sheet,
- event->area.x + event->area.width +
- sheet->hadjustment->value);
- range.coli++;
+ range.row0 = row_from_ypixel (sheet, y);
+ range.rowi = row_from_ypixel (sheet, y + event->area.height);
+
+ range.col0 = column_from_xpixel (sheet, x);
+
+ range.coli = column_from_xpixel (sheet, x + event->area.width);
+ }
if (event->window == sheet->sheet_window)
{
if ((!GTK_SHEET_IN_XDRAG (sheet)) && (!GTK_SHEET_IN_YDRAG (sheet)))
{
if (sheet->state == GTK_SHEET_NORMAL)
- gtk_sheet_draw_active_cell (sheet);
+ g_idle_add (gtk_sheet_draw_active_cell, sheet);
}
}
/* press on resize windows */
- if (event->window == sheet->column_title_window &&
- gtk_sheet_columns_resizable (sheet))
+ if (event->window == sheet->column_title_window)
{
-#if 0
- gtk_widget_get_pointer (widget, &sheet->x_drag, NULL);
- if ( sheet->row_titles_visible)
- sheet->x_drag -= sheet->row_title_area.width;
-#endif
-
sheet->x_drag = event->x;
if (on_column_boundary (sheet, sheet->x_drag, &sheet->drag_cell.col))
}
}
- if (event->window == sheet->row_title_window && gtk_sheet_rows_resizable (sheet))
+ if (event->window == sheet->row_title_window)
{
- gtk_widget_get_pointer (widget, NULL, &sheet->y_drag);
+ sheet->y_drag = event->y;
-#if AXIS_TRANSITION
- if (POSSIBLE_YDRAG (sheet, sheet->y_drag, &sheet->drag_cell.row))
+ if (on_row_boundary (sheet, sheet->y_drag, &sheet->drag_cell.row))
{
guint req;
gtk_sheet_row_size_request (sheet, sheet->drag_cell.row, &req);
draw_xor_hline (sheet);
return TRUE;
}
-#endif
}
/* the sheet itself does not handle other than single click events */
NULL, NULL, event->time);
gtk_grab_add (GTK_WIDGET (sheet));
- /* This seems to be a kludge to work around a problem where the sheet
- scrolls to another position. The timeout scrolls it back to its
- original posn. JMD 3 July 2007
- */
- gtk_widget_grab_focus (GTK_WIDGET (sheet));
-
if (sheet->selection_mode != GTK_SELECTION_SINGLE &&
sheet->selection_mode != GTK_SELECTION_NONE &&
sheet->cursor_drag->type == GDK_SIZING &&
{
veto = gtk_sheet_click_cell (sheet, -1, column);
gtk_grab_add (GTK_WIDGET (sheet));
- gtk_widget_grab_focus (GTK_WIDGET (sheet));
GTK_SHEET_SET_FLAGS (sheet, GTK_SHEET_IN_SELECTION);
}
}
{
veto = gtk_sheet_click_cell (sheet, row, -1);
gtk_grab_add (GTK_WIDGET (sheet));
- gtk_widget_grab_focus (GTK_WIDGET (sheet));
GTK_SHEET_SET_FLAGS (sheet, GTK_SHEET_IN_SELECTION);
}
}
sheet->range.coli = column;
sheet->state = GTK_SHEET_NORMAL;
GTK_SHEET_SET_FLAGS (sheet, GTK_SHEET_IN_SELECTION);
+
gtk_sheet_draw_active_cell (sheet);
+
+ gtk_widget_grab_focus (GTK_WIDGET (sheet->entry_widget));
+
return TRUE;
}
gtk_sheet_button_release (GtkWidget *widget,
GdkEventButton *event)
{
- gint y;
GdkDisplay *display = gtk_widget_get_display (widget);
GtkSheet *sheet = GTK_SHEET (widget);
width = new_column_width (sheet, sheet->drag_cell.col, &xpos);
- gtk_sheet_set_column_width (sheet, sheet->drag_cell.col, width);
+ set_column_width (sheet, sheet->drag_cell.col, width);
return TRUE;
}
if (GTK_SHEET_IN_YDRAG (sheet))
{
+ gint ypos = event->y;
+ gint height;
GTK_SHEET_UNSET_FLAGS (sheet, GTK_SHEET_IN_YDRAG);
GTK_SHEET_UNSET_FLAGS (sheet, GTK_SHEET_IN_SELECTION);
- gtk_widget_get_pointer (widget, NULL, &y);
+
gdk_display_pointer_ungrab (display, event->time);
draw_xor_hline (sheet);
- gtk_sheet_set_row_height (sheet, sheet->drag_cell.row,
- new_row_height (sheet, sheet->drag_cell.row, &y));
- g_signal_emit_by_name (sheet->vadjustment, "value_changed");
+ height = new_row_height (sheet, sheet->drag_cell.row, &ypos);
+ set_row_height (sheet, sheet->drag_cell.row, height);
return TRUE;
}
-
if (GTK_SHEET_IN_DRAG (sheet))
{
GtkSheetRange old_range;
}
}
- if (event->window == sheet->column_title_window &&
- gtk_sheet_columns_resizable (sheet))
+ if (event->window == sheet->column_title_window)
{
if (!GTK_SHEET_IN_SELECTION (sheet) &&
on_column_boundary (sheet, x, &column))
if (new_cursor != sheet->cursor_drag->type)
{
gdk_cursor_unref (sheet->cursor_drag);
- sheet->cursor_drag = gdk_cursor_new_for_display (display, GDK_SB_H_DOUBLE_ARROW);
+ sheet->cursor_drag =
+ gdk_cursor_new_for_display (display, new_cursor);
+
gdk_window_set_cursor (sheet->column_title_window,
sheet->cursor_drag);
}
new_cursor != sheet->cursor_drag->type)
{
gdk_cursor_unref (sheet->cursor_drag);
- sheet->cursor_drag = gdk_cursor_new_for_display (display, GDK_TOP_LEFT_ARROW);
+ sheet->cursor_drag =
+ gdk_cursor_new_for_display (display, new_cursor);
gdk_window_set_cursor (sheet->column_title_window,
sheet->cursor_drag);
}
}
}
-
- if (event->window == sheet->row_title_window &&
- gtk_sheet_rows_resizable (sheet))
+ else if (event->window == sheet->row_title_window)
{
-#if AXIS_TRANSITION
- if (!GTK_SHEET_IN_SELECTION (sheet) && POSSIBLE_YDRAG (sheet, y, &column))
+ if (!GTK_SHEET_IN_SELECTION (sheet) &&
+ on_row_boundary (sheet, y, &row))
{
new_cursor = GDK_SB_V_DOUBLE_ARROW;
if (new_cursor != sheet->cursor_drag->type)
{
gdk_cursor_unref (sheet->cursor_drag);
- sheet->cursor_drag = gdk_cursor_new_for_display (display, GDK_SB_V_DOUBLE_ARROW);
- gdk_window_set_cursor (sheet->row_title_window, sheet->cursor_drag);
+ sheet->cursor_drag =
+ gdk_cursor_new_for_display (display, new_cursor);
+ gdk_window_set_cursor (sheet->row_title_window,
+ sheet->cursor_drag);
}
}
else
-#endif
{
new_cursor = GDK_TOP_LEFT_ARROW;
if (!GTK_SHEET_IN_YDRAG (sheet) &&
new_cursor != sheet->cursor_drag->type)
{
gdk_cursor_unref (sheet->cursor_drag);
- sheet->cursor_drag = gdk_cursor_new_for_display (display, GDK_TOP_LEFT_ARROW);
- gdk_window_set_cursor (sheet->row_title_window, sheet->cursor_drag);
+ sheet->cursor_drag =
+ gdk_cursor_new_for_display (display, new_cursor);
+ gdk_window_set_cursor (sheet->row_title_window,
+ sheet->cursor_drag);
}
}
}
GtkSheetRange aux;
gint v_h, current_col, current_row, col_threshold, row_threshold;
v_h = 1;
- if (abs (x - psppire_axis_pixel_start (sheet->haxis, sheet->drag_cell.col)) >
- abs (y - psppire_axis_pixel_start (sheet->vaxis, sheet->drag_cell.row))) v_h = 2;
+ if (abs (x - psppire_axis_start_pixel (sheet->haxis, sheet->drag_cell.col)) >
+ abs (y - psppire_axis_start_pixel (sheet->vaxis, sheet->drag_cell.row))) v_h = 2;
current_col = column_from_xpixel (sheet, x);
current_row = row_from_ypixel (sheet, y);
/*use half of column width resp. row height as threshold to
expand selection*/
- col_threshold = psppire_axis_pixel_start (sheet->haxis, current_col) +
+ col_threshold = psppire_axis_start_pixel (sheet->haxis, current_col) +
psppire_axis_unit_size (sheet->haxis, current_col) / 2;
if (column > 0)
{
if (x > col_threshold)
column +=1;
}
- row_threshold = psppire_axis_pixel_start (sheet->vaxis, current_row) +
+ row_threshold = psppire_axis_start_pixel (sheet->vaxis, current_row) +
psppire_axis_unit_size (sheet->vaxis, current_row)/2;
if (row > 0)
{
page_vertical (GtkSheet *sheet, GtkScrollType dir)
{
gint old_row = sheet->active_cell.row ;
- glong vpixel = psppire_axis_pixel_start (sheet->vaxis, old_row);
+ glong vpixel = psppire_axis_start_pixel (sheet->vaxis, old_row);
gint new_row;
- vpixel -= psppire_axis_pixel_start (sheet->vaxis,
+ vpixel -= psppire_axis_start_pixel (sheet->vaxis,
min_visible_row (sheet));
switch ( dir)
}
- vpixel += psppire_axis_pixel_start (sheet->vaxis,
+ vpixel += psppire_axis_start_pixel (sheet->vaxis,
min_visible_row (sheet));
new_row = row_from_ypixel (sheet, vpixel);
}
+ g_signal_emit (sheet, sheet_signals[TRAVERSE], 0,
+ &sheet->active_cell,
+ &new_cell,
+ &forbidden);
+
+ if (forbidden)
+ return;
+
+
maximize_int (&new_cell.row, 0);
maximize_int (&new_cell.col, 0);
minimize_int (&new_cell.col,
psppire_axis_unit_count (sheet->haxis) - 1);
- g_signal_emit (sheet, sheet_signals[TRAVERSE], 0,
- &sheet->active_cell,
- &new_cell,
- &forbidden);
-
- if (forbidden)
- return;
-
change_active_cell (sheet, new_cell.row, new_cell.col);
+
if ( new_cell.col > max_fully_visible_column (sheet))
{
glong hpos =
- psppire_axis_pixel_start (sheet->haxis,
+ psppire_axis_start_pixel (sheet->haxis,
new_cell.col + 1);
hpos -= sheet->hadjustment->page_size;
else if ( new_cell.col < min_fully_visible_column (sheet))
{
glong hpos =
- psppire_axis_pixel_start (sheet->haxis,
+ psppire_axis_start_pixel (sheet->haxis,
new_cell.col);
gtk_adjustment_set_value (sheet->hadjustment,
if ( new_cell.row > max_fully_visible_row (sheet))
{
glong vpos =
- psppire_axis_pixel_start (sheet->vaxis,
+ psppire_axis_start_pixel (sheet->vaxis,
new_cell.row + 1);
vpos -= sheet->vadjustment->page_size;
else if ( new_cell.row < min_fully_visible_row (sheet))
{
glong vpos =
- psppire_axis_pixel_start (sheet->vaxis,
+ psppire_axis_start_pixel (sheet->vaxis,
new_cell.row);
gtk_adjustment_set_value (sheet->vadjustment,
vpos);
}
+
+ gtk_widget_grab_focus (GTK_WIDGET (sheet->entry_widget));
}
rectangle_from_cell (sheet, sheet->active_cell.row,
sheet->active_cell.col, &entry_alloc);
- entry_alloc.width -= BORDER_WIDTH;
- entry_alloc.height -= BORDER_WIDTH;
- entry_alloc.x += BORDER_WIDTH / 2;
- entry_alloc.y += BORDER_WIDTH / 2;
+ entry_alloc.width -= BORDER_WIDTH ;
+ entry_alloc.height -= BORDER_WIDTH ;
+ entry_alloc.x += DIV_RND_UP (BORDER_WIDTH, 2);
+ entry_alloc.y += DIV_RND_UP (BORDER_WIDTH, 2);
gtk_widget_set_size_request (sheet->entry_widget, entry_alloc.width,
allocation.y += 2 * sheet->button->style->ythickness;
- if (button->label && strlen (button->label)>0)
+ if (button->label && strlen (button->label) > 0)
{
PangoRectangle rect;
gchar *line = button->label;
rect.y = 0;
rect.height = sheet->column_title_area.height;
- rect.x = psppire_axis_pixel_start (sheet->haxis, first) + CELL_SPACING;
- rect.width = psppire_axis_pixel_start (sheet->haxis, last) + CELL_SPACING
+ rect.x = psppire_axis_start_pixel (sheet->haxis, first) + CELL_SPACING;
+ rect.width = psppire_axis_start_pixel (sheet->haxis, last) + CELL_SPACING
+ psppire_axis_unit_size (sheet->haxis, last);
rect.x -= sheet->hadjustment->value;
GtkSheetButton *
button = g_sheet_model_get_column_button (sheet->model, col);
allocation.y = 0;
- allocation.x = psppire_axis_pixel_start (sheet->haxis, col)
+ allocation.x = psppire_axis_start_pixel (sheet->haxis, col)
+ CELL_SPACING;
allocation.x -= sheet->hadjustment->value;
rect.x = 0;
rect.width = sheet->row_title_area.width;
- rect.y = psppire_axis_pixel_start (sheet->vaxis, first) + CELL_SPACING;
- rect.height = psppire_axis_pixel_start (sheet->vaxis, last) + CELL_SPACING
+ rect.y = psppire_axis_start_pixel (sheet->vaxis, first) + CELL_SPACING;
+ rect.height = psppire_axis_start_pixel (sheet->vaxis, last) + CELL_SPACING
+ psppire_axis_unit_size (sheet->vaxis, last);
rect.y -= sheet->vadjustment->value;
GtkSheetButton *button =
g_sheet_model_get_row_button (sheet->model, row);
allocation.x = 0;
- allocation.y = psppire_axis_pixel_start (sheet->vaxis, row)
+ allocation.y = psppire_axis_start_pixel (sheet->vaxis, row)
+ CELL_SPACING;
allocation.y -= sheet->vadjustment->value;
* vadjustment_value_changed
* hadjustment_value_changed */
+
+static void
+update_adjustment (GtkAdjustment *adj, PsppireAxis *axis, gint page_size)
+{
+ double position =
+ (adj->value + adj->page_size)
+ /
+ (adj->upper - adj->lower);
+
+ const glong last_item = psppire_axis_unit_count (axis) - 1;
+
+ if (isnan (position) || position < 0)
+ position = 0;
+
+ adj->upper =
+ psppire_axis_start_pixel (axis, last_item)
+ +
+ psppire_axis_unit_size (axis, last_item)
+ ;
+
+ adj->lower = 0;
+ adj->page_size = page_size;
+
+#if 0
+ adj->value = position * (adj->upper - adj->lower) - adj->page_size;
+
+ if ( adj->value < adj->lower)
+ adj->value = adj->lower;
+#endif
+
+ gtk_adjustment_changed (adj);
+}
+
+
static void
adjust_scrollbars (GtkSheet *sheet)
{
sheet->column_title_area.height -
psppire_axis_unit_size (sheet->vaxis, last_row);
-
-
- sheet->vadjustment->upper =
- psppire_axis_pixel_start (sheet->vaxis, last_row)
- +
- psppire_axis_unit_size (sheet->vaxis, last_row)
- ;
-
- sheet->vadjustment->lower = 0;
- sheet->vadjustment->page_size = height;
-
- g_signal_emit_by_name (sheet->vadjustment, "changed");
+ update_adjustment (sheet->vadjustment, sheet->vaxis, height);
}
if (sheet->hadjustment)
{
- gint last_col;
+ gint last_col = psppire_axis_unit_count (sheet->haxis) - 1;
sheet->hadjustment->step_increment = 1;
sheet->hadjustment->page_increment = width;
- last_col = psppire_axis_unit_count (sheet->haxis) - 1;
-
sheet->hadjustment->upper =
- psppire_axis_pixel_start (sheet->haxis, last_col)
+ psppire_axis_start_pixel (sheet->haxis, last_col)
+
psppire_axis_unit_size (sheet->haxis, last_col)
;
- sheet->hadjustment->lower = 0;
- sheet->hadjustment->page_size = width;
-
- g_signal_emit_by_name (sheet->hadjustment, "changed");
+ update_adjustment (sheet->hadjustment, sheet->haxis, width);
}
}
GdkRectangle clip_area, area;
GdkGCValues values;
- area.x = psppire_axis_pixel_start (sheet->haxis, range.col0);
- area.y = psppire_axis_pixel_start (sheet->vaxis, range.row0);
- area.width = psppire_axis_pixel_start (sheet->haxis, range.coli)- area.x+
+ area.x = psppire_axis_start_pixel (sheet->haxis, range.col0);
+ area.y = psppire_axis_start_pixel (sheet->vaxis, range.row0);
+ area.width = psppire_axis_start_pixel (sheet->haxis, range.coli)- area.x+
psppire_axis_unit_size (sheet->haxis, range.coli);
- area.height = psppire_axis_pixel_start (sheet->vaxis, range.rowi)- area.y +
+ area.height = psppire_axis_start_pixel (sheet->vaxis, range.rowi)- area.y +
psppire_axis_unit_size (sheet->vaxis, range.rowi);
clip_area.x = sheet->row_title_area.width;
static guint
new_column_width (GtkSheet *sheet, gint column, gint *x)
{
- gint left_pos = psppire_axis_pixel_start (sheet->haxis, column)
+ gint left_pos = psppire_axis_start_pixel (sheet->haxis, column)
- sheet->hadjustment->value;
gint width = *x - left_pos;
min_height = sheet->row_requisition;
/* you can't shrink a row to less than its minimum height */
- if (cy < psppire_axis_pixel_start (sheet->vaxis, row) + min_height)
+ if (cy < psppire_axis_start_pixel (sheet->vaxis, row) + min_height)
{
- *y = cy = psppire_axis_pixel_start (sheet->vaxis, row) + min_height;
+ *y = cy = psppire_axis_start_pixel (sheet->vaxis, row) + min_height;
}
/* calculate new row height making sure it doesn't end up
* less than the minimum height */
- height = (cy - psppire_axis_pixel_start (sheet->vaxis, row));
+ height = (cy - psppire_axis_start_pixel (sheet->vaxis, row));
if (height < min_height)
height = min_height;
}
static void
-gtk_sheet_set_column_width (GtkSheet *sheet,
- gint column,
- guint width)
+set_column_width (GtkSheet *sheet,
+ gint column,
+ guint width)
{
guint min_width;
gtk_sheet_column_size_request (sheet, column, &min_width);
if (width < min_width) return;
-#if AXIS_TRANSITION
- g_sheet_column_set_width (sheet->column_geometry, column, width);
-#endif
+ psppire_axis_resize (sheet->haxis, column, width);
if (GTK_WIDGET_REALIZED (GTK_WIDGET (sheet)))
{
}
-
static void
-gtk_sheet_set_row_height (GtkSheet *sheet,
- gint row,
- guint height)
+set_row_height (GtkSheet *sheet,
+ gint row,
+ guint height)
{
guint min_height;
gtk_sheet_row_size_request (sheet, row, &min_height);
if (height < min_height) return;
-#if AXIS_TRANSITION
- g_sheet_row_set_height (sheet->row_geometry, row, height);
-#endif
+ psppire_axis_resize (sheet->vaxis, row, height);
if (GTK_WIDGET_REALIZED (GTK_WIDGET (sheet)) )
{
{
GdkColor *fg, *bg;
const GtkJustification *j ;
- const GtkSheetCellBorder *border ;
GdkColormap *colormap;
g_return_val_if_fail (sheet != NULL, FALSE);
if (j)
attr->justification = *j;
- border = g_sheet_model_get_cell_border (sheet->model, row, col);
-
- if ( border ) attr->border = *border;
-
return TRUE;
}