/* * colrow_index_list_to_string: Convert an index list into a string. * The result must be freed by the caller. * It will be something like : A-B, F-G * * @list: The list * @is_cols: Column index list or row index list? * @is_single: If non-null this will be set to TRUE if there's only a single col/row involved. */ GString * colrow_index_list_to_string (ColRowIndexList *list, gboolean is_cols, gboolean *is_single) { ColRowIndexList *ptr; GString *result; gboolean single = TRUE; g_return_val_if_fail (list != NULL, NULL); result = g_string_new (NULL); for (ptr = list; ptr != NULL; ptr = ptr->next) { ColRowIndex *index = ptr->data; if (is_cols) g_string_append (result, cols_name (index->first, index->last)); else g_string_append (result, rows_name (index->first, index->last)); if (index->last != index->first) single = FALSE; if (ptr->next) { g_string_append (result, ", "); single = FALSE; } } if (is_single) *is_single = single; return result; }
/** * cmd_shift_rows: * @wbc : The error context. * @sheet the sheet * @col column marking the start of the shift * @start_row first row * @end_row end row * @count numbers of columns to shift. negative numbers will * delete count columns, positive number will insert * count columns. * * Takes the cells in the region (col,start_row):(MAX_COL,end_row) * and copies them @count units (possibly negative) to the right. **/ void cmd_shift_rows (WorkbookControl *wbc, Sheet *sheet, int col, int start_row, int end_row, int count) { GnmExprRelocateInfo rinfo; char *desc; rinfo.reloc_type = GNM_EXPR_RELOCATE_MOVE_RANGE; rinfo.col_offset = count; rinfo.row_offset = 0; rinfo.origin_sheet = rinfo.target_sheet = sheet; rinfo.origin.start.row = start_row; rinfo.origin.start.col = col; rinfo.origin.end.row = end_row; rinfo.origin.end.col = gnm_sheet_get_last_col (sheet); if (count > 0) rinfo.origin.end.col -= count; desc = g_strdup_printf ((start_row != end_row) ? _("Shift rows %s") : _("Shift row %s"), rows_name (start_row, end_row)); cmd_paste_cut (wbc, &rinfo, FALSE, desc); }