void gnc_item_edit_configure (GncItemEdit *item_edit) { GnucashSheet *sheet = item_edit->sheet; GnucashCursor *cursor; gfloat xalign; cursor = GNUCASH_CURSOR(sheet->cursor); item_edit->virt_loc.vcell_loc.virt_row = cursor->row; item_edit->virt_loc.vcell_loc.virt_col = cursor->col; item_edit->style = gnucash_sheet_get_style (sheet, item_edit->virt_loc.vcell_loc); item_edit->virt_loc.phys_row_offset = cursor->cell.row; item_edit->virt_loc.phys_col_offset = cursor->cell.col; switch (gnc_table_get_align (sheet->table, item_edit->virt_loc)) { default: case CELL_ALIGN_LEFT: xalign = 0; break; case CELL_ALIGN_RIGHT: xalign = 1; break; case CELL_ALIGN_CENTER: xalign = 0.5; break; } gtk_entry_set_alignment(GTK_ENTRY(item_edit->editor), xalign); if (!gnc_table_is_popup (sheet->table, item_edit->virt_loc)) gnc_item_edit_set_popup (item_edit, NULL, NULL, NULL, NULL, NULL, NULL, NULL); g_idle_add_full (G_PRIORITY_HIGH_IDLE, (GSourceFunc) gnc_item_edit_update, item_edit, NULL); }
static void gnucash_cursor_set_block (GnucashCursor *cursor, VirtualCellLocation vcell_loc) { GnucashSheet *sheet; g_return_if_fail (cursor != NULL); g_return_if_fail (GNUCASH_IS_CURSOR (cursor)); sheet = cursor->sheet; if (vcell_loc.virt_row < 0 || vcell_loc.virt_row >= sheet->num_virt_rows || vcell_loc.virt_col < 0 || vcell_loc.virt_col >= sheet->num_virt_cols) return; cursor->style = gnucash_sheet_get_style (sheet, vcell_loc); cursor->row = vcell_loc.virt_row; cursor->col = vcell_loc.virt_col; }
void gnucash_register_goto_next_matching_row (GnucashRegister *reg, VirtualLocationMatchFunc match, gpointer user_data) { GnucashSheet *sheet; SheetBlockStyle *style; VirtualLocation virt_loc; g_return_if_fail (reg != NULL); g_return_if_fail (GNUCASH_IS_REGISTER(reg)); g_return_if_fail (match != NULL); sheet = GNUCASH_SHEET (reg->sheet); gnucash_cursor_get_virt (GNUCASH_CURSOR(sheet->cursor), &virt_loc); do { if (!gnc_table_move_vertical_position (sheet->table, &virt_loc, 1)) return; if (virt_loc.vcell_loc.virt_row >= sheet->num_virt_rows) return; style = gnucash_sheet_get_style (sheet, virt_loc.vcell_loc); if (!style || !style->cursor) return; } while (!match (virt_loc, user_data)); virt_loc.phys_row_offset = 0; virt_loc.phys_col_offset = 0; gnucash_sheet_goto_virt_loc (sheet, virt_loc); }