[gnumeric] GUI: Fix array editing.



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]