void gnucash_register_refresh_from_prefs (GnucashRegister *reg) { GnucashSheet *sheet; g_return_if_fail(reg != NULL); g_return_if_fail(GNUCASH_IS_REGISTER(reg)); sheet = GNUCASH_SHEET(reg->sheet); gnucash_sheet_refresh_from_prefs(sheet); gnc_header_request_redraw (GNC_HEADER(sheet->header_item)); }
static void gnc_header_resize_column (GncHeader *header, gint col, gint width) { GnucashSheet *sheet = header->sheet; gnucash_sheet_set_col_width (sheet, col, width); gnucash_cursor_configure (GNUCASH_CURSOR(sheet->cursor)); gnc_item_edit_configure (GNC_ITEM_EDIT(sheet->item_editor)); gnc_header_reconfigure (header); gnucash_sheet_set_scroll_region (sheet); gnucash_sheet_update_adjustments (sheet); gnc_header_request_redraw (header); gnucash_sheet_redraw_all (sheet); }
void gnc_header_reconfigure (GncHeader *header) { GnomeCanvas *canvas; GtkWidget *widget; GnucashSheet *sheet; SheetBlockStyle *old_style; int w, h; g_return_if_fail (header != NULL); g_return_if_fail (GNC_IS_HEADER (header)); canvas = GNOME_CANVAS_ITEM(header)->canvas; widget = GTK_WIDGET (header->sheet); sheet = GNUCASH_SHEET(header->sheet); old_style = header->style; header->style = gnucash_sheet_get_style_from_cursor (sheet, header->cursor_name); if (header->style == NULL) return; sheet->width = header->style->dimensions->width; w = header->style->dimensions->width; h = header->style->dimensions->height; h *= header->num_phys_rows; h /= header->style->nrows; h += 2; if (header->height != h || header->width != w || header->style != old_style) { header->height = h; header->width = w; gnome_canvas_set_scroll_region (GNOME_CANVAS(canvas), 0, 0, w, h); gtk_widget_set_size_request (GTK_WIDGET(canvas), -1, h); gnc_header_request_redraw (header); } }
void gnc_header_reconfigure (GncHeader *header) { GnucashSheet *sheet; SheetBlockStyle *old_style; int w, h; g_return_if_fail (header != NULL); g_return_if_fail (GNC_IS_HEADER (header)); sheet = GNUCASH_SHEET(header->sheet); old_style = header->style; header->style = gnucash_sheet_get_style_from_cursor (sheet, header->cursor_name); if (header->style == NULL) return; sheet->width = header->style->dimensions->width; w = header->style->dimensions->width; h = header->style->dimensions->height; h *= header->num_phys_rows; h /= header->style->nrows; h += 2; if (header->height != h || header->width != w || header->style != old_style) { header->height = h; header->width = w; gtk_layout_set_size(GTK_LAYOUT(header), w, h); gtk_widget_set_size_request(GTK_WIDGET(header), -1, h); gnc_header_request_redraw (header); } }
static gint gnc_header_event (GnomeCanvasItem *item, GdkEvent *event) { GncHeader *header = GNC_HEADER(item); GnomeCanvas *canvas = item->canvas; int x, y; int col; switch (event->type) { case GDK_MOTION_NOTIFY: gnome_canvas_w2c (canvas, event->motion.x, event->motion.y, &x, &y); if (header->in_resize) { int change = x - header->resize_x; int new_width; if (!header->needs_ungrab) { gnome_canvas_item_grab (item, GDK_POINTER_MOTION_MASK | GDK_BUTTON_RELEASE_MASK, header->resize_cursor, event->button.time); header->needs_ungrab = TRUE; } new_width = header->resize_col_width + change; if (new_width >= 0) { header->resize_x = x; header->resize_col_width = new_width; gnc_header_request_redraw (header); } break; } if (pointer_on_resize_line(header, x, y, &col) && gnucash_style_col_is_resizable (header->style, col)) gdk_window_set_cursor (GTK_WIDGET(canvas)->window, header->resize_cursor); else gdk_window_set_cursor (GTK_WIDGET(canvas)->window, header->normal_cursor); break; case GDK_BUTTON_PRESS: { int col; if (event->button.button != 1) break; gnome_canvas_w2c (canvas, event->button.x, event->button.y, &x, &y); if (pointer_on_resize_line (header, x, y, &col)) col = find_resize_col (header, col); else col = -1; if (col > -1) { CellDimensions *cd; cd = gnucash_style_get_cell_dimensions (header->style, 0, col); header->in_resize = TRUE; header->resize_col = col; header->resize_col_width = cd->pixel_width; header->resize_x = x; } break; } case GDK_BUTTON_RELEASE: { if (event->button.button != 1) break; gnome_canvas_w2c (canvas, event->button.x, event->button.y, &x, &y); if (header->in_resize) { if (header->needs_ungrab) { gnome_canvas_item_ungrab (item, event->button.time); header->needs_ungrab = FALSE; gnc_header_resize_column (header, header->resize_col, header->resize_col_width); } header->in_resize = FALSE; header->resize_col = -1; } break; } case GDK_2BUTTON_PRESS: { gboolean on_line; int ptr_col; int resize_col; if (event->button.button != 1) break; gnome_canvas_w2c (canvas, event->button.x, event->button.y, &x, &y); on_line = pointer_on_resize_line (header, x, y, &ptr_col); /* If we're on a resize line and the column to the right is zero width, resize that one. */ if (on_line) resize_col = find_resize_col (header, ptr_col); else resize_col = ptr_col; if (resize_col > -1) { header->in_resize = FALSE; header->resize_col = -1; if (header->needs_ungrab) { gnome_canvas_item_ungrab (item, event->button.time); header->needs_ungrab = FALSE; } gnc_header_auto_resize_column (header, resize_col); } } break; default: break; } return TRUE; }
static gint gnc_header_event (GtkWidget *widget, GdkEvent *event) { GncHeader *header = GNC_HEADER(widget); int x, y; int col; switch (event->type) { case GDK_MOTION_NOTIFY: x = event->motion.x; y = event->motion.y; if (header->in_resize) { int change = x - header->resize_x; int new_width = header->resize_col_width + change; if (new_width >= 0) { header->resize_x = x; header->resize_col_width = new_width; gnc_header_request_redraw (header); } break; } if (pointer_on_resize_line(header, x, y, &col) && gnucash_style_col_is_resizable (header->style, col)) gdk_window_set_cursor (gtk_widget_get_window (widget), header->resize_cursor); else gdk_window_set_cursor (gtk_widget_get_window (widget), header->normal_cursor); break; case GDK_BUTTON_PRESS: { int col; if (event->button.button != 1) break; x = event->button.x; y = event->button.y; if (pointer_on_resize_line (header, x, y, &col)) col = find_resize_col (header, col); else col = -1; if (col > -1) { CellDimensions *cd; cd = gnucash_style_get_cell_dimensions (header->style, 0, col); header->in_resize = TRUE; header->resize_col = col; header->resize_col_width = cd->pixel_width; header->resize_x = x; } break; } case GDK_BUTTON_RELEASE: { if (event->button.button != 1) break; x = event->button.x; y = event->button.y; if (header->in_resize) { gnc_header_resize_column (header, header->resize_col, header->resize_col_width); header->in_resize = FALSE; header->resize_col = -1; gnc_header_request_redraw (header); } break; } case GDK_2BUTTON_PRESS: { gboolean on_line; int ptr_col; int resize_col; if (event->button.button != 1) break; x = event->button.x; y = event->button.y; on_line = pointer_on_resize_line (header, x, y, &ptr_col); /* If we're on a resize line and the column to the right is zero width, resize that one. */ if (on_line) resize_col = find_resize_col (header, ptr_col); else resize_col = ptr_col; if (resize_col > -1) { header->in_resize = FALSE; header->resize_col = -1; gnc_header_auto_resize_column (header, resize_col); } } break; default: break; } return FALSE; }