/* * 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_cols: * @wbc: The error context. * @sheet: the sheet * @start_col: first column * @end_col: end column * @row: row marking the start of the shift * @count: numbers of rows to shift. a negative numbers will * delete count rows, positive number will insert * count rows. * * Takes the cells in the region (start_col,row):(end_col,MAX_ROW) * and copies them @count units (possibly negative) downwards. */ void cmd_shift_cols (WorkbookControl *wbc, Sheet *sheet, int start_col, int end_col, int row, int count) { GnmExprRelocateInfo rinfo; char *desc; rinfo.reloc_type = GNM_EXPR_RELOCATE_MOVE_RANGE; rinfo.col_offset = 0; rinfo.row_offset = count; rinfo.origin_sheet = rinfo.target_sheet = sheet; rinfo.origin.start.col = start_col; rinfo.origin.start.row = row; rinfo.origin.end.col = end_col; rinfo.origin.end.row = gnm_sheet_get_last_row (sheet); if (count > 0) rinfo.origin.end.row -= count; desc = g_strdup_printf ((start_col != end_col) ? _("Shift columns %s") : _("Shift column %s"), cols_name (start_col, end_col)); cmd_paste_cut (wbc, &rinfo, FALSE, desc); }