[gnumeric] GUI: Fix array editing.
- From: Morten Welinder <mortenw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnumeric] GUI: Fix array editing.
- Date: Sun, 6 Apr 2014 00:41:40 +0000 (UTC)
commit 7890dd3c637cfb2ff2a65e2857f49160846ec1d1
Author: Morten Welinder <terra gnome org>
Date: Sat Apr 5 12:00:41 2014 -0400
GUI: Fix array editing.
NEWS | 1 +
src/commands.c | 2 +-
src/sheet.c | 46 +++++++++++++++++++++++++++-------------------
src/sheet.h | 8 ++++++--
src/wbc-gtk-edit.c | 6 ++++--
5 files changed, 39 insertions(+), 24 deletions(-)
---
diff --git a/NEWS b/NEWS
index 2a12171..7b967f5 100644
--- a/NEWS
+++ b/NEWS
@@ -13,6 +13,7 @@ Morten:
* Let goffice handle conditional number formats.
* Attempt a workaround for Ubuntu scroll bars.
* Fix odf parse problems.
+ * Fix array editing.
--------------------------------------------------------------------------
Gnumeric 1.12.13
diff --git a/src/commands.c b/src/commands.c
index d8d1642..16a510b 100644
--- a/src/commands.c
+++ b/src/commands.c
@@ -2191,7 +2191,7 @@ cmd_sort (WorkbookControl *wbc, GnmSortData *data)
g_return_val_if_fail (data != NULL, TRUE);
desc = g_strdup_printf (_("Sorting %s"), range_as_string (data->range));
- if (sheet_range_contains_region (data->sheet, data->range, GO_CMD_CONTEXT (wbc), desc)) {
+ if (sheet_range_contains_merges_or_arrays (data->sheet, data->range, GO_CMD_CONTEXT (wbc), desc,
TRUE, TRUE)) {
gnm_sort_data_destroy (data);
g_free (desc);
return TRUE;
diff --git a/src/sheet.c b/src/sheet.c
index b592c48..edfbfc5 100644
--- a/src/sheet.c
+++ b/src/sheet.c
@@ -3625,11 +3625,13 @@ cb_cell_is_array (GnmCellIter const *iter, G_GNUC_UNUSED gpointer user)
}
/**
- * sheet_range_contains_region:
+ * sheet_range_contains_merges_or_arrays:
* @sheet: The sheet
* @r: the range to check.
* @cc: an optional place to report errors.
* @cmd:
+ * @merges: if %TRUE, check for merges.
+ * @arrays: if %TRUE, check for arrays.
*
* Check to see if the target region @sheet! r contains any merged regions or
* arrays. Report an error to the @cc if it is supplied.
@@ -3637,29 +3639,35 @@ cb_cell_is_array (GnmCellIter const *iter, G_GNUC_UNUSED gpointer user)
* arrays.
**/
gboolean
-sheet_range_contains_region (Sheet const *sheet, GnmRange const *r,
- GOCmdContext *cc, char const *cmd)
+sheet_range_contains_merges_or_arrays (Sheet const *sheet, GnmRange const *r,
+ GOCmdContext *cc, char const *cmd,
+ gboolean merges, gboolean arrays)
{
- GSList *merged;
-
g_return_val_if_fail (IS_SHEET (sheet), FALSE);
- merged = gnm_sheet_merge_get_overlap (sheet, r);
- if (merged != NULL) {
- if (cc != NULL)
- go_cmd_context_error_invalid (cc, cmd,
- _("cannot operate on merged cells"));
- g_slist_free (merged);
- return TRUE;
+ if (merges) {
+ GSList *merged = gnm_sheet_merge_get_overlap (sheet, r);
+ if (merged != NULL) {
+ if (cc != NULL)
+ go_cmd_context_error_invalid
+ (cc, cmd,
+ _("cannot operate on merged cells"));
+ g_slist_free (merged);
+ return TRUE;
+ }
}
- if (sheet_foreach_cell_in_range ((Sheet *)sheet, CELL_ITER_IGNORE_NONEXISTENT,
- r->start.col, r->start.row, r->end.col, r->end.row,
- cb_cell_is_array, NULL)) {
- if (cc != NULL)
- go_cmd_context_error_invalid (cc, cmd,
- _("cannot operate on array formul\303\246"));
- return TRUE;
+ if (arrays) {
+ if (sheet_foreach_cell_in_range (
+ (Sheet *)sheet, CELL_ITER_IGNORE_NONEXISTENT,
+ r->start.col, r->start.row, r->end.col, r->end.row,
+ cb_cell_is_array, NULL)) {
+ if (cc != NULL)
+ go_cmd_context_error_invalid
+ (cc, cmd,
+ _("cannot operate on array formul\303\246"));
+ return TRUE;
+ }
}
return FALSE;
diff --git a/src/sheet.h b/src/sheet.h
index 6d9a565..edbb6c4 100644
--- a/src/sheet.h
+++ b/src/sheet.h
@@ -270,8 +270,12 @@ gboolean sheet_range_splits_region (Sheet const *sheet,
GOCmdContext *cc, char const *cmd);
gboolean sheet_ranges_split_region (Sheet const *sheet, GSList const *ranges,
GOCmdContext *cc, char const *cmd);
-gboolean sheet_range_contains_region (Sheet const *sheet, GnmRange const *r,
- GOCmdContext *cc, char const *cmd);
+gboolean sheet_range_contains_merges_or_arrays (Sheet const *sheet,
+ GnmRange const *r,
+ GOCmdContext *cc,
+ char const *cmd,
+ gboolean merges,
+ gboolean arrays);
void sheet_range_bounding_box (Sheet const *sheet, GnmRange *r);
gboolean sheet_range_trim (Sheet const *sheet, GnmRange *r,
gboolean cols, gboolean rows);
diff --git a/src/wbc-gtk-edit.c b/src/wbc-gtk-edit.c
index 78b3ea3..9702f83 100644
--- a/src/wbc-gtk-edit.c
+++ b/src/wbc-gtk-edit.c
@@ -169,8 +169,10 @@ wbcg_edit_finish (WBCGtk *wbcg, WBCEditResult result,
}
if (result == WBC_EDIT_ACCEPT_ARRAY &&
- sheet_range_contains_region (sheet, selection->data,
- GO_CMD_CONTEXT (wbc), _("Set Text"))) {
+ sheet_range_contains_merges_or_arrays
+ (sheet, selection->data,
+ GO_CMD_CONTEXT (wbc), _("Set Text"),
+ TRUE, FALSE)) {
range_fragment_free (selection);
if (showed_dialog != NULL)
*showed_dialog = TRUE;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]