/* Memory allocation routines */
static void gtk_sheet_real_range_clear (GtkSheet *sheet,
- const GtkSheetRange *range,
- gboolean delete);
+ const GtkSheetRange *range);
+
static void gtk_sheet_real_cell_clear (GtkSheet *sheet,
gint row,
- gint column,
- gboolean delete);
+ gint column);
/* Container Functions */
SELECT_COLUMN,
DOUBLE_CLICK_ROW,
DOUBLE_CLICK_COLUMN,
+ BUTTON_EVENT_ROW,
+ BUTTON_EVENT_COLUMN,
SELECT_RANGE,
CLIP_RANGE,
RESIZE_RANGE,
/**
- * GtkSheet::double - click - row
+ * GtkSheet::double-click-row
* @sheet: the sheet widget that emitted the signal
* @row: the row that was double clicked.
*
/**
- * GtkSheet::double - click - column
+ * GtkSheet::double-click-column
* @sheet: the sheet widget that emitted the signal
* @column: the column that was double clicked.
*
G_TYPE_INT);
+ /**
+ * GtkSheet::button-event-column
+ * @sheet: the sheet widget that emitted the signal
+ * @column: the column on which the event occured.
+ *
+ * A button event occured on a column title button
+ */
+ sheet_signals[BUTTON_EVENT_COLUMN] =
+ g_signal_new ("button-event-column",
+ G_TYPE_FROM_CLASS (object_class),
+ G_SIGNAL_RUN_LAST,
+ 0,
+ NULL, NULL,
+ gtkextra_VOID__INT_POINTER,
+ G_TYPE_NONE,
+ 2,
+ G_TYPE_INT,
+ G_TYPE_POINTER
+ );
+
+
+ /**
+ * GtkSheet::button-event-row
+ * @sheet: the sheet widget that emitted the signal
+ * @column: the column on which the event occured.
+ *
+ * A button event occured on a row title button
+ */
+ sheet_signals[BUTTON_EVENT_ROW] =
+ g_signal_new ("button-event-row",
+ G_TYPE_FROM_CLASS (object_class),
+ G_SIGNAL_RUN_LAST,
+ 0,
+ NULL, NULL,
+ gtkextra_VOID__INT_POINTER,
+ G_TYPE_NONE,
+ 2,
+ G_TYPE_INT,
+ G_TYPE_POINTER
+ );
+
+
sheet_signals[SELECT_RANGE] =
g_signal_new ("select-range",
G_TYPE_FROM_CLASS (object_class),
gdk_color_alloc (gdk_colormap_get_system (), &sheet->grid_color);
sheet->show_grid = TRUE;
- sheet->motion_events = 0;
+ sheet->motion_timer = 0;
}
sheet = GTK_SHEET (object);
- /* get rid of all the cells */
- gtk_sheet_range_clear (sheet, NULL);
- gtk_sheet_range_delete (sheet, NULL);
-
if (sheet->name)
{
g_free (sheet->name);
range.col0 = MIN_VISIBLE_COLUMN (sheet);
range.coli = MAX_VISIBLE_COLUMN (sheet);
- gtk_sheet_real_cell_clear (sheet, row, column, FALSE);
-
- if (!GTK_SHEET_IS_FROZEN (sheet))
- {
- gtk_sheet_range_draw (sheet, &range);
- }
-}
-
-void
-gtk_sheet_cell_delete (GtkSheet *sheet, gint row, gint column)
-{
- GtkSheetRange range;
-
- g_return_if_fail (sheet != NULL);
- g_return_if_fail (GTK_IS_SHEET (sheet));
- if (column >= xxx_column_count (sheet) || row >= yyy_row_count (sheet)) return;
- if (column < 0 || row < 0) return;
-
- range.row0 = row;
- range.rowi = row;
- range.col0 = MIN_VISIBLE_COLUMN (sheet);
- range.coli = MAX_VISIBLE_COLUMN (sheet);
-
- gtk_sheet_real_cell_clear (sheet, row, column, TRUE);
+ gtk_sheet_real_cell_clear (sheet, row, column);
if (!GTK_SHEET_IS_FROZEN (sheet))
{
}
static void
-gtk_sheet_real_cell_clear (GtkSheet *sheet, gint row, gint column, gboolean delete)
+gtk_sheet_real_cell_clear (GtkSheet *sheet, gint row, gint column)
{
GSheetModel *model = gtk_sheet_get_model (sheet);
g_return_if_fail (sheet != NULL);
g_return_if_fail (GTK_IS_SHEET (sheet));
- gtk_sheet_real_range_clear (sheet, range, FALSE);
-}
-
-void
-gtk_sheet_range_delete (GtkSheet *sheet, const GtkSheetRange *range)
-{
- g_return_if_fail (sheet != NULL);
- g_return_if_fail (GTK_IS_SHEET (sheet));
-
- gtk_sheet_real_range_clear (sheet, range, TRUE);
+ gtk_sheet_real_range_clear (sheet, range);
}
-
static void
-gtk_sheet_real_range_clear (GtkSheet *sheet, const GtkSheetRange *range,
- gboolean delete)
+gtk_sheet_real_range_clear (GtkSheet *sheet, const GtkSheetRange *range)
{
gint i, j;
GtkSheetRange clear;
for (i = clear.row0; i <= clear.rowi; i++)
for (j = clear.col0; j <= clear.coli; j++)
{
- gtk_sheet_real_cell_clear (sheet, i, j, delete);
+ gtk_sheet_real_cell_clear (sheet, i, j);
}
gtk_sheet_range_draw (sheet, NULL);
{
gtk_sheet_real_unselect_range (sheet, NULL);
sheet->state = GTK_STATE_NORMAL;
+
gtk_sheet_activate_cell (sheet,
sheet->active_cell.row, sheet->active_cell.col);
}
if (range->row0 < 0 || range->rowi < 0) return;
if (range->col0 < 0 || range->coli < 0) return;
+ g_signal_emit (G_OBJECT (sheet), sheet_signals[SELECT_COLUMN], 0, -1);
+ g_signal_emit (G_OBJECT (sheet), sheet_signals[SELECT_ROW], 0, -1);
+
if (gtk_sheet_range_isvisible (sheet, *range))
gtk_sheet_draw_backing_pixmap (sheet, *range);
sheet = GTK_SHEET (widget);
- if ( event->type == GDK_2BUTTON_PRESS)
+ /* Cancel any pending tooltips */
+ if (sheet->motion_timer)
{
- gtk_widget_get_pointer (widget, &x, &y);
- gtk_sheet_get_pixel_info (sheet, x, y, &row, &column);
+ g_source_remove (sheet->motion_timer);
+ sheet->motion_timer = 0;
+ }
+
+ gtk_widget_get_pointer (widget, &x, &y);
+ gtk_sheet_get_pixel_info (sheet, x, y, &row, &column);
+
+
+ if (event->window == sheet->column_title_window)
+ {
+ g_signal_emit (G_OBJECT (sheet),
+ sheet_signals[BUTTON_EVENT_COLUMN], 0,
+ column, event);
+
+ if ( event->type == GDK_2BUTTON_PRESS && event->button == 1)
+ g_signal_emit (G_OBJECT (sheet),
+ sheet_signals[DOUBLE_CLICK_COLUMN], 0, column);
- if (event->window == sheet->column_title_window)
- {
- g_signal_emit (G_OBJECT (sheet),
- sheet_signals[DOUBLE_CLICK_COLUMN], 0, column);
- }
- else if (event->window == sheet->row_title_window)
- {
- g_signal_emit (G_OBJECT (sheet),
- sheet_signals[DOUBLE_CLICK_ROW], 0, row);
- }
+ }
+ else if (event->window == sheet->row_title_window)
+ {
+ g_signal_emit (G_OBJECT (sheet),
+ sheet_signals[BUTTON_EVENT_ROW], 0,
+ row, event);
+
+ if ( event->type == GDK_2BUTTON_PRESS && event->button == 1)
+ g_signal_emit (G_OBJECT (sheet),
+ sheet_signals[DOUBLE_CLICK_ROW], 0, row);
}
motion_timeout_callback (gpointer data)
{
GtkSheet *sheet = GTK_SHEET (data);
- if ( --sheet->motion_events == 0 )
+ gint x, y;
+ gint row, column;
+ gtk_widget_get_pointer (GTK_WIDGET (sheet), &x, &y);
+
+ if ( gtk_sheet_get_pixel_info (sheet, x, y, &row, &column) )
{
- gint x, y;
- gint row, column;
- gtk_widget_get_pointer (GTK_WIDGET (sheet), &x, &y);
+ if ( column == -1 && row == -1 )
+ return FALSE;
- if ( gtk_sheet_get_pixel_info (sheet, x, y, &row, &column) )
+ if ( column == -1)
{
- if ( column == -1 && row == -1 )
- return FALSE;
-
- if ( column == -1)
- {
- GSheetRow *row_geo = sheet->row_geometry;
- gchar *text;
+ GSheetRow *row_geo = sheet->row_geometry;
+ gchar *text;
- text = g_sheet_row_get_subtitle (row_geo, row);
+ text = g_sheet_row_get_subtitle (row_geo, row);
- show_subtitle (sheet, row, column, text);
- g_free (text);
- }
+ show_subtitle (sheet, row, column, text);
+ g_free (text);
+ }
- if ( row == -1)
- {
- GSheetColumn *col_geo = sheet->column_geometry;
- gchar *text;
+ if ( row == -1)
+ {
+ GSheetColumn *col_geo = sheet->column_geometry;
+ gchar *text;
- text = g_sheet_column_get_subtitle (col_geo, column);
+ text = g_sheet_column_get_subtitle (col_geo, column);
- show_subtitle (sheet, row, column, text );
+ show_subtitle (sheet, row, column, text );
- g_free (text);
- }
+ g_free (text);
}
}
if (!sheet->hover_window || ! GTK_WIDGET_VISIBLE (sheet->hover_window->window))
{
- sheet->motion_events++;
- g_timeout_add (TIMEOUT_HOVER, motion_timeout_callback, sheet);
+ if ( sheet->motion_timer > 0 )
+ g_source_remove (sheet->motion_timer);
+ sheet->motion_timer = g_timeout_add (TIMEOUT_HOVER, motion_timeout_callback, sheet);
}
else
{