- if(!gtk_sheet_activate_cell(sheet, row, column)) return FALSE;
-
- if(gtk_sheet_autoscroll(sheet))
- gtk_sheet_move_query(sheet, row, column);
-
- return TRUE;
-}
-
-void
-gtk_sheet_get_active_cell (GtkSheet *sheet, gint *row, gint *column)
-{
- g_return_if_fail (sheet != NULL);
- g_return_if_fail (GTK_IS_SHEET (sheet));
-
- *row = sheet->active_cell.row;
- *column = sheet->active_cell.col;
-}
-
-static void
-gtk_sheet_entry_changed(GtkWidget *widget, gpointer data)
-{
- GtkSheet *sheet;
- gint row,col;
- const char *text;
- GtkJustification justification;
- GtkSheetCellAttr attributes;
-
- g_return_if_fail (data != NULL);
- g_return_if_fail (GTK_IS_SHEET (data));
-
- sheet=GTK_SHEET(data);
-
- if(!GTK_WIDGET_VISIBLE(widget)) return;
- if(sheet->state != GTK_STATE_NORMAL) return;
-
- row=sheet->active_cell.row;
- col=sheet->active_cell.col;
-
- if(row<0 || col<0) return;
-
- sheet->active_cell.row=-1;
- sheet->active_cell.col=-1;
-
- text = gtk_entry_get_text(GTK_ENTRY(gtk_sheet_get_entry(sheet)));
-
- GTK_SHEET_SET_FLAGS(sheet, GTK_SHEET_IS_FROZEN);
-
- if(text && strlen(text) > 0)
- {
- gtk_sheet_get_attributes(sheet, row, col, &attributes);
- justification = attributes.justification;
- gtk_sheet_set_cell(sheet, row, col, justification, text);
- }
-
- if(sheet->freeze_count == 0)
- GTK_SHEET_UNSET_FLAGS(sheet, GTK_SHEET_IS_FROZEN);
-
- sheet->active_cell.row=row;;
- sheet->active_cell.col=col;
-}
-
-
-static gboolean
-gtk_sheet_deactivate_cell(GtkSheet *sheet)
-{
- gboolean veto = TRUE;
-
- g_return_val_if_fail (sheet != NULL, FALSE);
- g_return_val_if_fail (GTK_IS_SHEET (sheet), FALSE);
-
- if(!GTK_WIDGET_REALIZED(GTK_WIDGET(sheet))) return FALSE;
- if(sheet->state != GTK_SHEET_NORMAL) return FALSE;
-
- _gtkextra_signal_emit(GTK_OBJECT(sheet),sheet_signals[DEACTIVATE],
- sheet->active_cell.row,
- sheet->active_cell.col, &veto);
-
- if(!veto) return FALSE;
-
- if ( sheet->active_cell.row == -1 || sheet->active_cell.col == -1 )
- return TRUE;
-
- gtk_signal_disconnect_by_func(GTK_OBJECT(gtk_sheet_get_entry(sheet)),
- (GtkSignalFunc) gtk_sheet_entry_changed,
- GTK_OBJECT(GTK_WIDGET(sheet)));
-
- gtk_sheet_hide_active_cell(sheet);
- sheet->active_cell.row = -1;
- sheet->active_cell.col = -1;
-
- if(GTK_SHEET_REDRAW_PENDING(sheet)){
- GTK_SHEET_UNSET_FLAGS(sheet, GTK_SHEET_REDRAW_PENDING);
- gtk_sheet_range_draw(sheet, NULL);
- }
-
- return TRUE;
-}
-
-static void
-gtk_sheet_hide_active_cell(GtkSheet *sheet)
-{
- const char *text;
- gint row,col;
- GtkJustification justification;
- GtkSheetCellAttr attributes;
-
- 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(sheet->freeze_count == 0)
- GTK_SHEET_UNSET_FLAGS(sheet, GTK_SHEET_IS_FROZEN);
-
- text=gtk_entry_get_text(GTK_ENTRY(gtk_sheet_get_entry(sheet)));
-
- gtk_sheet_get_attributes(sheet, row, col, &attributes);
- justification=attributes.justification;
-
- if(text && strlen(text) != 0)
- {
- gtk_sheet_set_cell(sheet, row, col, justification, text);
- gtk_signal_emit(GTK_OBJECT(sheet),sheet_signals[SET_CELL], row, col);
- }
- else
- {
- gtk_sheet_cell_clear(sheet, row, col);
- }
-
- row=sheet->active_cell.row;
- col=sheet->active_cell.col;
-
-#if 0
- column_button_release(sheet, col);
- row_button_release(sheet, row);
-#endif
-
- gtk_widget_hide(sheet->sheet_entry);
- gtk_widget_unmap(sheet->sheet_entry);
-
- if(row != -1 && col != -1)
- gdk_draw_pixmap(sheet->sheet_window,
- GTK_WIDGET(sheet)->style->fg_gc[GTK_STATE_NORMAL],
- sheet->pixmap,
- COLUMN_LEFT_XPIXEL(sheet,col)-1,
- ROW_TOP_YPIXEL(sheet,row)-1,
- COLUMN_LEFT_XPIXEL(sheet,col)-1,
- ROW_TOP_YPIXEL(sheet,row)-1,
- xxx_column_width(sheet, col) + 4,
- yyy_row_height(sheet, row)+4);
-
- gtk_widget_grab_focus(GTK_WIDGET(sheet));
-
- GTK_WIDGET_UNSET_FLAGS(GTK_WIDGET(sheet->sheet_entry), GTK_VISIBLE);
-
-}
-
-static gboolean
-gtk_sheet_activate_cell(GtkSheet *sheet, gint row, gint col)
-{
- gboolean veto = TRUE;
-
- g_return_val_if_fail (sheet != NULL, FALSE);
- g_return_val_if_fail (GTK_IS_SHEET (sheet), FALSE);
-
- if(row < 0 || col < 0) return FALSE;
- if(row >= yyy_row_count(sheet) || col >= xxx_column_count(sheet))
- return FALSE;
-
-/* _gtkextra_signal_emit(GTK_OBJECT(sheet),sheet_signals[ACTIVATE], row, col, &veto);
- if(!GTK_WIDGET_REALIZED(GTK_WIDGET(sheet))) return veto;
-*/
-
- if(!veto) return FALSE;
- if(sheet->state != GTK_SHEET_NORMAL){
- sheet->state=GTK_SHEET_NORMAL;
- gtk_sheet_real_unselect_range(sheet, NULL);
- }
-
- sheet->range.row0 = row;
- sheet->range.col0 = col;
- sheet->range.rowi = row;
- sheet->range.coli = col;
- sheet->active_cell.row = row;
- sheet->active_cell.col = col;
- sheet->selection_cell.row = row;
- sheet->selection_cell.col = col;
-#if 0
- row_button_set(sheet, row);
- column_button_set(sheet, col);
-#endif
-
- GTK_SHEET_UNSET_FLAGS(sheet, GTK_SHEET_IN_SELECTION);
- gtk_sheet_show_active_cell(sheet);
-
- g_signal_connect(G_OBJECT(gtk_sheet_get_entry(sheet)),
- "changed",
- G_CALLBACK(gtk_sheet_entry_changed),
- sheet);
-
- _gtkextra_signal_emit(GTK_OBJECT(sheet),sheet_signals[ACTIVATE], row, col, &veto);
-
- return TRUE;
-}
-
-static void
-gtk_sheet_show_active_cell(GtkSheet *sheet)
-{
- GtkEntry *sheet_entry;
- GtkSheetCellAttr attributes;
- gchar *text = NULL;
- const gchar *old_text;
- GtkJustification justification;
- gint row, col;
-
- g_return_if_fail (sheet != NULL);
- g_return_if_fail (GTK_IS_SHEET (sheet));
-
- row = sheet->active_cell.row;
- col = sheet->active_cell.col;
-
- /* Don't show the active cell, if there is no active cell: */
- if(!(row >= 0 && col >= 0)) /* e.g row or coll == -1. */
- return;
-
- if(!GTK_WIDGET_REALIZED(GTK_WIDGET(sheet))) return;
- if(sheet->state != GTK_SHEET_NORMAL) return;
- if(GTK_SHEET_IN_SELECTION(sheet)) return;
-
- GTK_WIDGET_SET_FLAGS(GTK_WIDGET(sheet->sheet_entry), GTK_VISIBLE);
-
- sheet_entry = GTK_ENTRY(gtk_sheet_get_entry(sheet));
-
- gtk_sheet_get_attributes(sheet, row, col, &attributes);
-
- justification = GTK_JUSTIFY_LEFT;
-
- if(gtk_sheet_justify_entry(sheet))
- justification = attributes.justification;
-
- text = gtk_sheet_cell_get_text(sheet, row, col);
- if ( ! text )
- text = g_strdup("");
-
- gtk_entry_set_visibility(GTK_ENTRY(sheet_entry), attributes.is_visible);
-
- if(gtk_sheet_locked(sheet) || !attributes.is_editable)
- gtk_entry_set_editable(GTK_ENTRY(sheet_entry), FALSE);
- else
- gtk_entry_set_editable(GTK_ENTRY(sheet_entry), TRUE);
-
-/*** Added by John Gotts. Mar 25, 2005 *********/
- old_text = gtk_entry_get_text(GTK_ENTRY(sheet_entry));
- if (strcmp(old_text, text) != 0)
-{
- if(!GTK_IS_ITEM_ENTRY(sheet_entry))
- gtk_entry_set_text(GTK_ENTRY(sheet_entry), text);
- else
- gtk_item_entry_set_text(GTK_ITEM_ENTRY(sheet_entry), text, justification);
- }
-
- gtk_sheet_entry_set_max_size(sheet);
- gtk_sheet_size_allocate_entry(sheet);
-
- gtk_widget_map(sheet->sheet_entry);
- gtk_sheet_draw_active_cell(sheet);
-
- gtk_widget_grab_focus(GTK_WIDGET(sheet_entry));
-
- dispose_string(sheet, text);
-}
-
-static void
-gtk_sheet_draw_active_cell(GtkSheet *sheet)
-{
- gint row, col;
-
- 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(!gtk_sheet_cell_isvisible(sheet, row, col)) return;
-#if 0
- row_button_set(sheet, row);
- column_button_set(sheet, col);
-#endif
- gtk_sheet_draw_backing_pixmap(sheet, sheet->range);
- gtk_sheet_draw_border(sheet, sheet->range);
-}