case: Introduce new functions for numbers and substrings in cases.
[pspp] / src / ui / gui / find-dialog.c
index e617280739153a28c7445bf7b96568b2ac2c8f65..18f933decc5c5200921678a38075a2e29ce1f771 100644 (file)
@@ -101,15 +101,17 @@ refresh (GObject *obj, const struct find_dialog *fd)
 static void
 do_find (GObject *obj, const struct find_dialog *fd)
 {
+  SswSheet *sheet = SSW_SHEET (fd->de->data_editor->data_sheet);
   casenumber x = -1;
   gint column = -1;
-  glong row = -1;
+  gint unused;
+  gint row = 0;
+  ssw_sheet_get_active_cell (sheet, &unused, &row);
 
   find_value (fd, row, &x, &column);
 
   if (x != -1)
     {
-      SswSheet *sheet = SSW_SHEET (fd->de->data_editor->data_sheet);
       gtk_notebook_set_current_page (GTK_NOTEBOOK (fd->de->data_editor),
                                     PSPPIRE_DATA_EDITOR_DATA_VIEW);
 
@@ -311,8 +313,8 @@ cp1c (casenumber current, struct datasheet *data)
 static casenumber
 cm1 (casenumber current, struct datasheet *data)
 {
-  if (current == -1)
-    return datasheet_get_n_rows (data);
+  if (current == 0)
+    return datasheet_get_n_rows (data) - 1;
 
   return current - 1;
 }
@@ -323,9 +325,6 @@ cm1c (casenumber current, struct datasheet *data)
 {
   casenumber next = current;
 
-  if (current == -1)
-    return datasheet_get_n_rows (data);
-
   backward_wrap (&next, data);
 
   return next;
@@ -341,9 +340,6 @@ last (casenumber current, struct datasheet *data)
 static casenumber
 minus1 (casenumber current, struct datasheet *data)
 {
-  if (current == -1)
-    return 0;
-
   return -1;
 }
 
@@ -368,11 +364,18 @@ enum iteration_type{
   n_iterators
 };
 
-static const struct casenum_iterator ip[n_iterators] =
+static const struct casenum_iterator case_iterator[n_iterators] =
   {
+   /* Forward iterator (linear) */
     {cp1, last, forward},
+
+    /* Forward iterator (circular) */
     {cp1c, cm1, forward_wrap},
+
+    /* Reverse iterator (linear) */
     {cm1, minus1, backward},
+
+    /* Reverse iterator (circular */
     {cm1c, cp1, backward_wrap}
   };
 
@@ -391,16 +394,16 @@ get_iteration_params (const struct find_dialog *fd)
   if (wrap)
     {
       if (reverse)
-       return &ip[REVERSE_WRAP];
+       return &case_iterator[REVERSE_WRAP];
       else
-       return &ip[FORWARD_WRAP];
+       return &case_iterator[FORWARD_WRAP];
     }
   else
     {
       if (reverse)
-       return &ip[REVERSE];
+       return &case_iterator[REVERSE];
       else
-       return &ip[FORWARD];
+       return &case_iterator[FORWARD];
     }
 }