static void psppire_sheet_size_allocate (GtkWidget *widget,
GtkAllocation *allocation);
+static gboolean psppire_sheet_focus_in (GtkWidget *widget,
+ GdkEventFocus *event);
+
/* Sheet queries */
static gboolean psppire_sheet_range_isvisible (const PsppireSheet *sheet,
container_class->add = NULL;
container_class->remove = NULL;
container_class->forall = psppire_sheet_forall;
+ container_class->set_focus_child = NULL;
object_class->dispose = psppire_sheet_dispose;
object_class->finalize = psppire_sheet_finalize;
widget_class->expose_event = psppire_sheet_expose;
widget_class->size_request = psppire_sheet_size_request;
widget_class->size_allocate = psppire_sheet_size_allocate;
- widget_class->focus_in_event = NULL;
+ widget_class->focus_in_event = psppire_sheet_focus_in;
widget_class->focus_out_event = NULL;
klass->set_scroll_adjustments = psppire_sheet_set_scroll_adjustments;
gtk_widget_unmap (sheet->button);
}
+/* get cell attributes of the given cell */
+/* TRUE means that the cell is currently allocated */
+static gboolean psppire_sheet_get_attributes (const PsppireSheet *sheet,
+ gint row, gint col,
+ PsppireSheetCellAttr *attributes);
+
+
static void
psppire_sheet_cell_draw (PsppireSheet *sheet, gint row, gint col)
return TRUE;
}
+
+static gboolean
+psppire_sheet_focus_in (GtkWidget *w,
+ GdkEventFocus *event)
+{
+ PsppireSheet *sheet = PSPPIRE_SHEET (w);
+
+ gtk_widget_grab_focus (sheet->entry_widget);
+
+ return TRUE;
+}
+
+
static void
psppire_sheet_extend_selection (PsppireSheet *sheet, gint row, gint column)
{
case GTK_SCROLL_STEP_LEFT:
new_cell.col--;
break;
+ case GTK_SCROLL_STEP_FORWARD:
+ new_cell.col++;
+ if (new_cell.col >=
+ psppire_sheet_model_get_column_count (sheet->model))
+ {
+ new_cell.col = 0;
+ new_cell.row++;
+ }
+ break;
+ case GTK_SCROLL_STEP_BACKWARD:
+ new_cell.col--;
+ if (new_cell.col < 0)
+ {
+ new_cell.col =
+ psppire_sheet_model_get_column_count (sheet->model) - 1;
+ new_cell.row--;
+ }
+ break;
default:
g_assert_not_reached ();
break;
}
-
g_signal_emit (sheet, sheet_signals[TRAVERSE], 0,
&sheet->active_cell,
&new_cell,
switch (key->keyval)
{
case GDK_Tab:
+ step_sheet (sheet, GTK_SCROLL_STEP_FORWARD);
+ break;
case GDK_Right:
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);
break;
gtk_widget_modify_style (sheet->entry_widget, style);
}
-
-
static void
create_sheet_entry (PsppireSheet *sheet)
{
allocation.x, allocation.y,
allocation.width, allocation.height);
+ if ( button->overstruck)
+ {
+ GdkPoint points[2] = {
+ {allocation.x, allocation.y},
+ {allocation.x + allocation.width,
+ allocation.y + allocation.height}
+ };
+
+ gtk_paint_polygon (sheet->button->style,
+ window,
+ button->state,
+ shadow_type,
+ NULL,
+ GTK_WIDGET (sheet),
+ "button",
+ points,
+ 2,
+ TRUE);
+ }
+
if (button->label_visible)
{
text_height = DEFAULT_ROW_HEIGHT -
}
}
-gboolean
+static gboolean
psppire_sheet_get_attributes (const PsppireSheet *sheet, gint row, gint col,
PsppireSheetCellAttr *attr)
{
attr->border.mask = 0;
attr->border.color = GTK_WIDGET (sheet)->style->black;
- attr->is_editable = psppire_sheet_model_is_editable (sheet->model, row, col);
-
colormap = gtk_widget_get_colormap (GTK_WIDGET (sheet));
fg = psppire_sheet_model_get_foreground (sheet->model, row, col);
if ( fg )
button->label = NULL;
button->label_visible = TRUE;
button->justification = GTK_JUSTIFY_FILL;
+ button->overstruck = FALSE;
return button;
}