- gtk_signal_emit(GTK_OBJECT(sheet),sheet_signals[CHANGED], -1, -1);
-
- if(old_widget)
- gtk_widget_destroy (old_widget);
-*/
-}
-
-void
-gtk_sheet_freeze (GtkSheet *sheet)
-{
- g_return_if_fail (sheet != NULL);
- g_return_if_fail (GTK_IS_SHEET (sheet));
-
- sheet->freeze_count++;
- GTK_SHEET_SET_FLAGS(sheet, GTK_SHEET_IS_FROZEN);
-}
-
-void
-gtk_sheet_thaw(GtkSheet *sheet)
-{
- g_return_if_fail (sheet != NULL);
- g_return_if_fail (GTK_IS_SHEET (sheet));
-
- if(sheet->freeze_count == 0) return;
-
- sheet->freeze_count--;
- if(sheet->freeze_count > 0) return;
-
- adjust_scrollbars(sheet);
-
- GTK_SHEET_UNSET_FLAGS(sheet, GTK_SHEET_IS_FROZEN);
-
- sheet->old_vadjustment = -1.;
- sheet->old_hadjustment = -1.;
-
- if(sheet->hadjustment)
- gtk_signal_emit_by_name (GTK_OBJECT (sheet->hadjustment),
- "value_changed");
- if(sheet->vadjustment)
- gtk_signal_emit_by_name (GTK_OBJECT (sheet->vadjustment),
- "value_changed");
-
- if(sheet->state == GTK_STATE_NORMAL)
- if(sheet->sheet_entry && GTK_WIDGET_MAPPED(sheet->sheet_entry)){
- gtk_sheet_activate_cell(sheet, sheet->active_cell.row, sheet->active_cell.col);
-/*
- gtk_signal_connect(GTK_OBJECT(gtk_sheet_get_entry(sheet)),
- "changed",
- (GtkSignalFunc)gtk_sheet_entry_changed,
- GTK_OBJECT(GTK_WIDGET(sheet)));
- gtk_sheet_show_active_cell(sheet);
-*/
- }
-
-}
-
-void
-gtk_sheet_set_row_titles_width(GtkSheet *sheet, guint width)
-{
- if(width < COLUMN_MIN_WIDTH) return;
-
- sheet->row_title_area.width = width;
- sheet->view.col0 = COLUMN_FROM_XPIXEL(sheet, sheet->row_title_area.width+1);
- sheet->view.coli = COLUMN_FROM_XPIXEL(sheet, sheet->sheet_window_width);
-
-
- adjust_scrollbars(sheet);
-
- sheet->old_hadjustment = -1.;
- if(sheet->hadjustment)
- gtk_signal_emit_by_name (GTK_OBJECT (sheet->hadjustment),
- "value_changed");
- size_allocate_global_button(sheet);
-}
-
-void
-gtk_sheet_set_column_titles_height(GtkSheet *sheet, guint height)
-{
- if(height < DEFAULT_ROW_HEIGHT(GTK_WIDGET(sheet))) return;
-
- sheet->column_title_area.height = height;
- sheet->view.row0=ROW_FROM_YPIXEL(sheet, sheet->column_title_area.height+1);
- sheet->view.rowi=ROW_FROM_YPIXEL(sheet, sheet->sheet_window_height-1);
-
- adjust_scrollbars(sheet);
-
- sheet->old_vadjustment = -1.;
- if(sheet->vadjustment)
- gtk_signal_emit_by_name (GTK_OBJECT (sheet->vadjustment),
- "value_changed");
- size_allocate_global_button(sheet);
-}
-
-void
-gtk_sheet_show_column_titles(GtkSheet *sheet)
-{
- gint col;
-
- if(sheet->column_titles_visible) return;
-
- sheet->column_titles_visible = TRUE;
-
-
- if(GTK_WIDGET_REALIZED(GTK_WIDGET(sheet))){
- 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);
-
- for(col = MIN_VISIBLE_COLUMN(sheet);
- col <= MAX_VISIBLE_COLUMN(sheet);
- col++)
- {
- GtkSheetButton *button = xxx_column_button(sheet, col);
- GtkSheetChild *child = button->child;
- if(child)
- gtk_sheet_child_show(child);
- gtk_sheet_button_free(button);
- }
- adjust_scrollbars(sheet);
- }
-
- sheet->old_vadjustment = -1.;
- if(sheet->vadjustment)
- gtk_signal_emit_by_name (GTK_OBJECT (sheet->vadjustment),
- "value_changed");
- size_allocate_global_button(sheet);
-}
-
-
-void
-gtk_sheet_show_row_titles(GtkSheet *sheet)
-{
- gint row;
-
- if(sheet->row_titles_visible) return;
-
- sheet->row_titles_visible = TRUE;
-
-
- if(GTK_WIDGET_REALIZED(GTK_WIDGET(sheet))){
- gdk_window_show(sheet->row_title_window);
- gdk_window_move_resize (sheet->row_title_window,
- sheet->row_title_area.x,
- sheet->row_title_area.y,
- sheet->row_title_area.width,
- sheet->row_title_area.height);
-
- for(row = MIN_VISIBLE_ROW(sheet);
- row <= MAX_VISIBLE_ROW(sheet);
- row++)
- {
- const GtkSheetButton *button = yyy_row_button(sheet, row);
- GtkSheetChild *child = button->child;
-
- if(child){
- gtk_sheet_child_show(child);
- }
- }
- adjust_scrollbars(sheet);
- }
-
- sheet->old_hadjustment = -1.;
- if(sheet->hadjustment)
- gtk_signal_emit_by_name (GTK_OBJECT (sheet->hadjustment),
- "value_changed");
- size_allocate_global_button(sheet);
-}
-
-void
-gtk_sheet_hide_column_titles(GtkSheet *sheet)
-{
- gint col;
-
- if(!sheet->column_titles_visible) return;
-
- sheet->column_titles_visible = FALSE;
-
- if(GTK_WIDGET_REALIZED(GTK_WIDGET(sheet))){
- if(sheet->column_title_window)
- gdk_window_hide(sheet->column_title_window);
- if(GTK_WIDGET_VISIBLE(sheet->button))
- gtk_widget_hide(sheet->button);
-
- for(col = MIN_VISIBLE_COLUMN(sheet);
- col <= MAX_VISIBLE_COLUMN(sheet);
- col++)
- {
- GtkSheetButton *button = xxx_column_button(sheet, col);
- GtkSheetChild *child = button->child;
- if(child)
- gtk_sheet_child_hide(child);
- gtk_sheet_button_free(button);
- }
- adjust_scrollbars(sheet);
- }
-
- sheet->old_vadjustment = -1.;
- if(sheet->vadjustment)
- gtk_signal_emit_by_name (GTK_OBJECT (sheet->vadjustment),
- "value_changed");
-}
-
-void
-gtk_sheet_hide_row_titles(GtkSheet *sheet)
-{
- gint row;
-
- if(!sheet->row_titles_visible) return;
-
- sheet->row_titles_visible = FALSE;
-
-
- if(GTK_WIDGET_REALIZED(GTK_WIDGET(sheet))){
- if(sheet->row_title_window)
- gdk_window_hide(sheet->row_title_window);
- if(GTK_WIDGET_VISIBLE(sheet->button))
- gtk_widget_hide(sheet->button);
- for(row = MIN_VISIBLE_ROW(sheet);
- row <= MAX_VISIBLE_ROW(sheet);
- row++)
- {
- const GtkSheetButton *button = yyy_row_button(sheet, row);
- GtkSheetChild *child = button->child;
-
- if(child)
- gtk_sheet_child_hide(child);
- }
- adjust_scrollbars(sheet);
- }
-
- sheet->old_hadjustment = -1.;
- if(sheet->hadjustment)
- gtk_signal_emit_by_name (GTK_OBJECT (sheet->hadjustment),
- "value_changed");
-}
-
-gboolean
-gtk_sheet_column_titles_visible(GtkSheet *sheet)
-{
- g_return_val_if_fail (sheet != NULL, FALSE);
- g_return_val_if_fail (GTK_IS_SHEET (sheet), FALSE);
- return sheet->column_titles_visible;
-}
-
-gboolean
-gtk_sheet_row_titles_visible(GtkSheet *sheet)
-{
- g_return_val_if_fail (sheet != NULL, FALSE);
- g_return_val_if_fail (GTK_IS_SHEET (sheet), FALSE);
- return sheet->row_titles_visible;
-}
-
-
-
-void
-gtk_sheet_moveto (GtkSheet * sheet,
- gint row,
- gint column,
- gfloat row_align,
- gfloat col_align)
-{
- gint x, y;
- guint width, height;
- gint adjust;
- gint min_row, min_col;
-
- g_return_if_fail (sheet != NULL);
- g_return_if_fail (GTK_IS_SHEET (sheet));
- g_return_if_fail (sheet->hadjustment != NULL);
- g_return_if_fail (sheet->vadjustment != NULL);
-
- if (row < 0 || row >= yyy_row_count(sheet))
- return;
- if (column < 0 || column >= xxx_column_count(sheet))
- return;
-
- height = sheet->sheet_window_height;
- width = sheet->sheet_window_width;
-
- /* adjust vertical scrollbar */
-
- if (row >= 0 && row_align >=0.)
- {
-/*
- y = ROW_TOP_YPIXEL(sheet, row) - sheet->voffset -
- row_align*height-
- (1.-row_align)*yyy_row_height(sheet, row);
-*/
- y = ROW_TOP_YPIXEL (sheet, row) - sheet->voffset
- - (gint) ( row_align*height + (1. - row_align) * yyy_row_height(sheet, row));
-
- /* This forces the sheet to scroll when you don't see the entire cell */
- min_row = row;
- adjust = 0;
- if(row_align == 1.){
- while(min_row >= 0 && min_row > MIN_VISIBLE_ROW(sheet)){
- if(yyy_row_is_visible(sheet, min_row))
- adjust += yyy_row_height(sheet, min_row);
- if(adjust >= height){
- break;
- }
- min_row--;
- }
- min_row = MAX(min_row, 0);
- y = ROW_TOP_YPIXEL(sheet, min_row) - sheet->voffset +
- yyy_row_height(sheet, min_row) - 1;
- }
-
- if (y < 0)
- sheet->vadjustment->value = 0.0;
- else
- sheet->vadjustment->value = y;
-
- sheet->old_vadjustment = -1.;
- gtk_signal_emit_by_name (GTK_OBJECT (sheet->vadjustment),
- "value_changed");
-
- }
-
- /* adjust horizontal scrollbar */
- if (column >= 0 && col_align >= 0.)
- {
-/*
- x = COLUMN_LEFT_XPIXEL (sheet, column) - sheet->hoffset -
- col_align*width -
- (1.-col_align)*sheet->column[column].width;
-*/
- x = COLUMN_LEFT_XPIXEL (sheet, column) - sheet->hoffset
- - (gint) ( col_align*width + (1.-col_align)*
- xxx_column_width(sheet, column));
-
-
- /* This forces the sheet to scroll when you don't see the entire cell */
- min_col = column;
- adjust = 0;
- if(col_align == 1.){
- while(min_col >= 0 && min_col > MIN_VISIBLE_COLUMN(sheet)){
- if(xxx_column_is_visible(sheet, min_col))
- adjust += xxx_column_width(sheet, min_col);
-
- if(adjust >= width){
- break;
- }
- min_col--;
- }
- min_col = MAX(min_col, 0);
- x = COLUMN_LEFT_XPIXEL(sheet, min_col) - sheet->hoffset +
- xxx_column_width(sheet, min_col) - 1;
- }
-
- if (x < 0)
- sheet->hadjustment->value = 0.0;
- else
- sheet->hadjustment->value = x;
-
- sheet->old_vadjustment = -1.;
- gtk_signal_emit_by_name (GTK_OBJECT (sheet->hadjustment),
- "value_changed");
-
- }
-}
-
-
-void
-gtk_sheet_columns_set_resizable (GtkSheet *sheet, gboolean resizable)
-{
- g_return_if_fail (sheet != NULL);
- g_return_if_fail (GTK_IS_SHEET (sheet));
-
- sheet->columns_resizable = resizable;
-}
-
-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;
-}
-
-
-void
-gtk_sheet_rows_set_resizable (GtkSheet *sheet, gboolean resizable)
-{
- g_return_if_fail (sheet != NULL);
- g_return_if_fail (GTK_IS_SHEET (sheet));
-
- sheet->rows_resizable = resizable;
-}
-
-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)
-{
- g_return_if_fail (sheet != NULL);
- g_return_if_fail (GTK_IS_SHEET (sheet));
-
- if (row < 0 || row >= yyy_row_count(sheet))
- return;
-
- if(sheet->state != GTK_SHEET_NORMAL)
- gtk_sheet_real_unselect_range(sheet, NULL);
- else
- {
- gboolean veto = TRUE;
- veto = gtk_sheet_deactivate_cell(sheet);
- if(!veto) return;
- }
-
- sheet->state=GTK_SHEET_ROW_SELECTED;
- sheet->range.row0=row;
- sheet->range.col0=0;
- sheet->range.rowi=row;
- sheet->range.coli = xxx_column_count(sheet) - 1;
- sheet->active_cell.row=row;
- sheet->active_cell.col=0;
-
- gtk_signal_emit (GTK_OBJECT (sheet), sheet_signals[SELECT_ROW], row);
- gtk_sheet_real_select_range(sheet, NULL);
-
-}
-
-
-void
-gtk_sheet_select_column (GtkSheet * sheet,
- gint column)
-{
-
- g_return_if_fail (sheet != NULL);
- g_return_if_fail (GTK_IS_SHEET (sheet));
-
- if (column < 0 || column >= xxx_column_count(sheet))
- return;
-
- if(sheet->state != GTK_SHEET_NORMAL)
- gtk_sheet_real_unselect_range(sheet, NULL);
- else
- {
- gboolean veto = TRUE;
- veto = gtk_sheet_deactivate_cell(sheet);
- if(!veto) return;
- }
-
- sheet->state=GTK_SHEET_COLUMN_SELECTED;
- sheet->range.row0=0;
- sheet->range.col0=column;
- sheet->range.rowi= yyy_row_count(sheet) - 1;
- sheet->range.coli=column;
- sheet->active_cell.row=0;
- sheet->active_cell.col=column;
-
- gtk_signal_emit (GTK_OBJECT (sheet), sheet_signals[SELECT_COLUMN], column);
- gtk_sheet_real_select_range(sheet, NULL);
-
-}
-
-void
-gtk_sheet_clip_range (GtkSheet *sheet, const GtkSheetRange *range)
-{
-
- g_return_if_fail (sheet != NULL);
- g_return_if_fail (GTK_IS_SHEET (sheet));
-
- if(GTK_SHEET_IN_CLIP(sheet)) return;
-
- GTK_SHEET_SET_FLAGS(sheet, GTK_SHEET_IN_CLIP);
-
- if(range == NULL)
- sheet->clip_range = sheet->range;
- else
- sheet->clip_range=*range;
-
- sheet->interval=0;
- sheet->clip_timer=gtk_timeout_add(TIMEOUT_FLASH, gtk_sheet_flash, sheet);
-
- gtk_signal_emit(GTK_OBJECT(sheet), sheet_signals[CLIP_RANGE],
- &sheet->clip_range);
-
-}
-
-void
-gtk_sheet_unclip_range(GtkSheet *sheet)
-{
-
- g_return_if_fail (sheet != NULL);
- g_return_if_fail (GTK_IS_SHEET (sheet));
-
- if(!GTK_SHEET_IN_CLIP(sheet)) return;
-
- GTK_SHEET_UNSET_FLAGS(sheet, GTK_SHEET_IN_CLIP);
- gtk_timeout_remove(sheet->clip_timer);
- gtk_sheet_range_draw(sheet, &sheet->clip_range);
-
- if(gtk_sheet_range_isvisible(sheet, sheet->range))
- gtk_sheet_range_draw(sheet, &sheet->range);
-}
-
-gboolean
-gtk_sheet_in_clip (GtkSheet *sheet)
-{
- g_return_val_if_fail (sheet != NULL, FALSE);
- g_return_val_if_fail (GTK_IS_SHEET (sheet), FALSE);
-
- return GTK_SHEET_IN_CLIP(sheet);
-}
-
-static gint
-gtk_sheet_flash(gpointer data)
-{
- GtkSheet *sheet;
- gint x,y,width,height;
- GdkRectangle clip_area;
-
- sheet=GTK_SHEET(data);
-
- if(!GTK_WIDGET_REALIZED(GTK_WIDGET(sheet))) return TRUE;
- if(!GTK_WIDGET_DRAWABLE(GTK_WIDGET(sheet))) return TRUE;
- if(!gtk_sheet_range_isvisible(sheet, sheet->clip_range)) return TRUE;
- if(GTK_SHEET_IN_XDRAG(sheet)) return TRUE;
- if(GTK_SHEET_IN_YDRAG(sheet)) return TRUE;
-
- GDK_THREADS_ENTER();
-
- x=COLUMN_LEFT_XPIXEL(sheet,sheet->clip_range.col0)+1;
- y=ROW_TOP_YPIXEL(sheet,sheet->clip_range.row0)+1;
- width=COLUMN_LEFT_XPIXEL(sheet,sheet->clip_range.coli)-x+
- xxx_column_width(sheet, sheet->clip_range.coli) - 1;
- height=ROW_TOP_YPIXEL(sheet,sheet->clip_range.rowi)-y+
- yyy_row_height(sheet, sheet->clip_range.rowi)-1;
-
- clip_area.x=COLUMN_LEFT_XPIXEL(sheet, MIN_VISIBLE_COLUMN(sheet));
- clip_area.y=ROW_TOP_YPIXEL(sheet, MIN_VISIBLE_ROW(sheet));
- clip_area.width=sheet->sheet_window_width;
- clip_area.height=sheet->sheet_window_height;
-
- if(x<0) {
- width=width+x+1;
- x=-1;
- }
- if(width>clip_area.width) width=clip_area.width+10;
- if(y<0) {
- height=height+y+1;
- y=-1;
- }
- if(height>clip_area.height) height=clip_area.height+10;
-
- gdk_draw_pixmap(sheet->sheet_window,
- GTK_WIDGET(sheet)->style->fg_gc[GTK_STATE_NORMAL],
- sheet->pixmap,
- x, y,
- x, y,
- 1, height);
-
- gdk_draw_pixmap(sheet->sheet_window,
- GTK_WIDGET(sheet)->style->fg_gc[GTK_STATE_NORMAL],
- sheet->pixmap,
- x, y,
- x, y,
- width, 1);
-
- gdk_draw_pixmap(sheet->sheet_window,
- GTK_WIDGET(sheet)->style->fg_gc[GTK_STATE_NORMAL],
- sheet->pixmap,
- x, y+height,
- x, y+height,
- width, 1);
-
- gdk_draw_pixmap(sheet->sheet_window,
- GTK_WIDGET(sheet)->style->fg_gc[GTK_STATE_NORMAL],
- sheet->pixmap,
- x+width, y,
- x+width, y,
- 1, height);
-
-
- sheet->interval=sheet->interval+1;
- if(sheet->interval==TIME_INTERVAL) sheet->interval=0;
-
- gdk_gc_set_dashes(sheet->xor_gc, sheet->interval, (gint8*)"\4\4", 2);
- gtk_sheet_draw_flashing_range(sheet,sheet->clip_range);
- gdk_gc_set_dashes(sheet->xor_gc, 0, (gint8*)"\4\4", 2);
-
- GDK_THREADS_LEAVE();
-
- return TRUE;
-
-}
-
-static void
-gtk_sheet_draw_flashing_range(GtkSheet *sheet, GtkSheetRange range)
-{
- GdkRectangle clip_area;
- gint x,y,width,height;
-
- if(!gtk_sheet_range_isvisible(sheet, sheet->clip_range)) return;
-
- clip_area.x=COLUMN_LEFT_XPIXEL(sheet, MIN_VISIBLE_COLUMN(sheet));
- clip_area.y=ROW_TOP_YPIXEL(sheet, MIN_VISIBLE_ROW(sheet));
- clip_area.width=sheet->sheet_window_width;
- clip_area.height=sheet->sheet_window_height;
-
- gdk_gc_set_clip_rectangle(sheet->xor_gc, &clip_area);
-
- x=COLUMN_LEFT_XPIXEL(sheet,sheet->clip_range.col0)+1;
- y=ROW_TOP_YPIXEL(sheet,sheet->clip_range.row0)+1;
- width=COLUMN_LEFT_XPIXEL(sheet,sheet->clip_range.coli)-x+
- xxx_column_width(sheet, sheet->clip_range.coli) - 1;
- height=ROW_TOP_YPIXEL(sheet,sheet->clip_range.rowi)-y+
- yyy_row_height(sheet, sheet->clip_range.rowi)-1;
-
- if(x<0) {
- width=width+x+1;
- x=-1;
- }
- if(width>clip_area.width) width=clip_area.width+10;
- if(y<0) {
- height=height+y+1;
- y=-1;
- }
- if(height>clip_area.height) height=clip_area.height+10;
-
- gdk_gc_set_line_attributes(sheet->xor_gc, 1, 1, 0 ,0 );
-
- gdk_draw_rectangle(sheet->sheet_window, sheet->xor_gc, FALSE,
- x, y,
- width, height);
-
- gdk_gc_set_line_attributes (sheet->xor_gc, 1, 0, 0, 0);
-
- gdk_gc_set_clip_rectangle(sheet->xor_gc, NULL);
-
-}
-
-static gint
-gtk_sheet_range_isvisible (GtkSheet * sheet,
- GtkSheetRange range)
-{
- g_return_val_if_fail (sheet != NULL, FALSE);
-
- if (range.row0 < 0 || range.row0 >= yyy_row_count(sheet))