projects
/
pspp
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Introduce Arg class.
[pspp]
/
src
/
ui
/
gui
/
find-dialog.c
diff --git
a/src/ui/gui/find-dialog.c
b/src/ui/gui/find-dialog.c
index 2ff619a60a25c0c974dcc62092a97a7a40d9f540..16f5e365761a12ab3b13cec78ea4d91e42da3bce 100644
(file)
--- a/
src/ui/gui/find-dialog.c
+++ b/
src/ui/gui/find-dialog.c
@@
-101,15
+101,17
@@
refresh (GObject *obj, const struct find_dialog *fd)
static void
do_find (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;
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)
{
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);
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)
{
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;
}
return current - 1;
}
@@
-323,9
+325,6
@@
cm1c (casenumber current, struct datasheet *data)
{
casenumber next = current;
{
casenumber next = current;
- if (current == -1)
- return datasheet_get_n_rows (data);
-
backward_wrap (&next, data);
return next;
backward_wrap (&next, data);
return next;
@@
-341,9
+340,6
@@
last (casenumber current, struct datasheet *data)
static casenumber
minus1 (casenumber current, struct datasheet *data)
{
static casenumber
minus1 (casenumber current, struct datasheet *data)
{
- if (current == -1)
- return 0;
-
return -1;
}
return -1;
}
@@
-368,11
+364,18
@@
enum iteration_type{
n_iterators
};
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},
{cp1, last, forward},
+
+ /* Forward iterator (circular) */
{cp1c, cm1, forward_wrap},
{cp1c, cm1, forward_wrap},
+
+ /* Reverse iterator (linear) */
{cm1, minus1, backward},
{cm1, minus1, backward},
+
+ /* Reverse iterator (circular */
{cm1c, cp1, backward_wrap}
};
{cm1c, cp1, backward_wrap}
};
@@
-391,16
+394,16
@@
get_iteration_params (const struct find_dialog *fd)
if (wrap)
{
if (reverse)
if (wrap)
{
if (reverse)
- return &
ip
[REVERSE_WRAP];
+ return &
case_iterator
[REVERSE_WRAP];
else
else
- return &
ip
[FORWARD_WRAP];
+ return &
case_iterator
[FORWARD_WRAP];
}
else
{
if (reverse)
}
else
{
if (reverse)
- return &
ip
[REVERSE];
+ return &
case_iterator
[REVERSE];
else
else
- return &
ip
[FORWARD];
+ return &
case_iterator
[FORWARD];
}
}
}
}
@@
-452,6
+455,18
@@
struct regexp_comparator
regex_t re;
};
regex_t re;
};
+/* Returns 10 raised to the power of X.
+ X must be a non-negative integer. */
+static inline int
+int_pow10 (int x)
+{
+ int ret = 1;
+ assert (x >= 0);
+ while (x--)
+ ret *= 10;
+
+ return ret;
+}
static bool
value_compare (const struct comparator *cmptr,
static bool
value_compare (const struct comparator *cmptr,
@@
-460,7
+475,7
@@
value_compare (const struct comparator *cmptr,
const struct numeric_comparator *nc = (const struct numeric_comparator *) cmptr;
const struct fmt_spec *fs = var_get_print_format (cmptr->var);
const struct numeric_comparator *nc = (const struct numeric_comparator *) cmptr;
const struct fmt_spec *fs = var_get_print_format (cmptr->var);
- double c = nearbyint (v->f *
exp
10 (fs->d));
+ double c = nearbyint (v->f *
int_pow
10 (fs->d));
return c == nc->rounded_ref;
}
return c == nc->rounded_ref;
}
@@
-582,7
+597,7
@@
regexp_destroy (struct comparator *cmptr)
static struct comparator *
numeric_comparator_create (const struct variable *var, const char *target)
{
static struct comparator *
numeric_comparator_create (const struct variable *var, const char *target)
{
- struct numeric_comparator *nc =
xzalloc (sizeof (*nc)
);
+ struct numeric_comparator *nc =
XZALLOC (struct numeric_comparator
);
struct comparator *cmptr = &nc->parent;
cmptr->flags = 0;
struct comparator *cmptr = &nc->parent;
cmptr->flags = 0;
@@
-592,7
+607,7
@@
numeric_comparator_create (const struct variable *var, const char *target)
union value val;
text_to_value (target, var, &val);
union value val;
text_to_value (target, var, &val);
- nc->rounded_ref = nearbyint (val.f *
exp
10 (fs->d));
+ nc->rounded_ref = nearbyint (val.f *
int_pow
10 (fs->d));
value_destroy (&val, var_get_width (var));
return cmptr;
value_destroy (&val, var_get_width (var));
return cmptr;
@@
-602,7
+617,7
@@
static struct comparator *
string_comparator_create (const struct variable *var, const char *target,
enum string_cmp_flags flags)
{
string_comparator_create (const struct variable *var, const char *target,
enum string_cmp_flags flags)
{
- struct string_comparator *ssc =
xzalloc (sizeof (*ssc)
);
+ struct string_comparator *ssc =
XZALLOC (struct string_comparator
);
struct comparator *cmptr = &ssc->parent;
cmptr->flags = flags;
struct comparator *cmptr = &ssc->parent;
cmptr->flags = flags;
@@
-624,7
+639,7
@@
regexp_comparator_create (const struct variable *var, const char *target,
enum string_cmp_flags flags)
{
int code;
enum string_cmp_flags flags)
{
int code;
- struct regexp_comparator *rec =
xzalloc (sizeof (*rec)
);
+ struct regexp_comparator *rec =
XZALLOC (struct regexp_comparator
);
struct comparator *cmptr = &rec->parent;
cmptr->flags = flags;
struct comparator *cmptr = &rec->parent;
cmptr->flags = flags;