projects
/
pspp-builds.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
PsppireDictView: Change "dictionary" property to "model".
[pspp-builds.git]
/
src
/
ui
/
gui
/
find-dialog.c
diff --git
a/src/ui/gui/find-dialog.c
b/src/ui/gui/find-dialog.c
index 432afa159ab2fb695ceec59ca8fbf975ba98f379..39b12bb51c163b9e10b756eee22f64765d46b50d 100644
(file)
--- a/
src/ui/gui/find-dialog.c
+++ b/
src/ui/gui/find-dialog.c
@@
-1,5
+1,5
@@
/* PSPPIRE - a graphical user interface for PSPP.
/* PSPPIRE - a graphical user interface for PSPP.
- Copyright (C) 2007 Free Software Foundation
+ Copyright (C) 2007
, 2009
Free Software Foundation
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@
-24,9
+24,10
@@
which match particular strings */
#include "psppire-selector.h"
#include "psppire-dialog.h"
#include "helper.h"
#include "psppire-selector.h"
#include "psppire-dialog.h"
#include "helper.h"
-#include "
data-editor
.h"
+#include "
psppire-data-window
.h"
#include "dict-display.h"
#include <data/value.h>
#include "dict-display.h"
#include <data/value.h>
+#include <data/format.h>
#include <data/datasheet.h>
#include <data/data-in.h>
#include "psppire-data-store.h"
#include <data/datasheet.h>
#include <data/data-in.h>
#include "psppire-data-store.h"
@@
-36,7
+37,6
@@
which match particular strings */
#include <libpspp/message.h>
#include <gtk/gtk.h>
#include <libpspp/message.h>
#include <gtk/gtk.h>
-#include <glade/glade.h>
#include <stdlib.h>
#include "xalloc.h"
#include <stdlib.h>
#include "xalloc.h"
@@
-47,16
+47,14
@@
which match particular strings */
/* FIXME: These shouldn't be here */
/* FIXME: These shouldn't be here */
-#include <gtksheet/gtksheet.h>
#include "psppire-var-store.h"
struct find_dialog
{
#include "psppire-var-store.h"
struct find_dialog
{
- G
ladeXML
*xml;
+ G
tkBuilder
*xml;
PsppireDict *dict;
PsppireDict *dict;
- GtkSheet *data_sheet;
struct datasheet *data;
struct datasheet *data;
-
struct data_editor
*de;
+
PsppireDataWindow
*de;
GtkWidget *variable_entry;
GtkWidget *value_entry;
GtkWidget *value_labels_checkbox;
GtkWidget *variable_entry;
GtkWidget *value_entry;
GtkWidget *value_labels_checkbox;
@@
-104,22
+102,27
@@
do_find (GObject *obj, const struct find_dialog *fd)
{
casenumber x = -1;
gint column = -1;
{
casenumber x = -1;
gint column = -1;
- gint row;
- gtk_sheet_get_active_cell (fd->data_sheet, &row, NULL);
+ glong row;
+
+ g_object_get (fd->de->data_editor, "current-case", &row, NULL);
if ( row < 0 )
row = 0;
find_value (fd, row, &x, &column);
if ( row < 0 )
row = 0;
find_value (fd, row, &x, &column);
+
if ( x != -1)
{
if ( x != -1)
{
- data_editor_select_sheet (fd->de, PAGE_DATA_SHEET);
-
- gtk_sheet_moveto (fd->data_sheet, x, column, 0.5, 0.5);
+ gtk_notebook_set_current_page (GTK_NOTEBOOK (fd->de->data_editor),
+ PSPPIRE_DATA_EDITOR_DATA_VIEW);
- gtk_sheet_set_active_cell (fd->data_sheet, x, column);
+ g_object_set (fd->de->data_editor,
+ "current-case", x,
+ "current-variable", column,
+ NULL);
}
}
+
}
/* Callback on the selector.
}
/* Callback on the selector.
@@
-182,7
+185,7
@@
value_labels_toggled (GtkToggleButton *tb, gpointer data)
void
find_dialog (GObject *o, gpointer data)
{
void
find_dialog (GObject *o, gpointer data)
{
-
struct data_editor *de = data
;
+
PsppireDataWindow *de = PSPPIRE_DATA_WINDOW (data)
;
struct find_dialog fd;
struct find_dialog fd;
@@
-191,14
+194,12
@@
find_dialog (GObject *o, gpointer data)
GtkWidget *selector;
GtkWidget *find_button;
GtkWidget *selector;
GtkWidget *find_button;
- GtkSheet *var_sheet;
- GtkSheet *data_sheet ;
GtkWidget *buttonbox;
GtkWidget *buttonbox;
- PsppireVarStore *vs
;
+ PsppireVarStore *vs ;
PsppireDataStore *ds ;
PsppireDataStore *ds ;
- fd.xml =
XML_NEW ("psppire.glade
");
+ fd.xml =
builder_new ("find.ui
");
fd.de = de;
find_button = gtk_button_new_from_stock (GTK_STOCK_FIND);
fd.de = de;
find_button = gtk_button_new_from_stock (GTK_STOCK_FIND);
@@
-213,15
+214,14
@@
find_dialog (GObject *o, gpointer data)
source = get_widget_assert (fd.xml, "find-variable-treeview");
selector = get_widget_assert (fd.xml, "find-selector");
source = get_widget_assert (fd.xml, "find-variable-treeview");
selector = get_widget_assert (fd.xml, "find-selector");
- var_sheet = GTK_SHEET (get_widget_assert (de->xml, "variable_sheet"));
- data_sheet = GTK_SHEET (get_widget_assert (de->xml, "data_sheet"));
+ g_object_get (de->data_editor,
+ "var-store", &vs,
+ "data-store", &ds,
+ NULL);
- vs = PSPPIRE_VAR_STORE (gtk_sheet_get_model (var_sheet));
- ds = PSPPIRE_DATA_STORE (gtk_sheet_get_model (data_sheet));
+ g_object_get (vs, "dictionary", &fd.dict, NULL);
- fd.dict = vs->dict;
- fd.data = ds->case_file->datasheet;
- fd.data_sheet = data_sheet;
+ fd.data = ds->datasheet;
fd.variable_entry = get_widget_assert (fd.xml, "find-variable-entry");
fd.value_entry = get_widget_assert (fd.xml, "find-value-entry");
fd.variable_entry = get_widget_assert (fd.xml, "find-variable-entry");
fd.value_entry = get_widget_assert (fd.xml, "find-value-entry");
@@
-239,19
+239,17
@@
find_dialog (GObject *o, gpointer data)
- gtk_window_set_transient_for (GTK_WINDOW (dialog),
de->parent.window
);
+ gtk_window_set_transient_for (GTK_WINDOW (dialog),
GTK_WINDOW (de)
);
- attach_dictionary_to_treeview (GTK_TREE_VIEW (source),
- fd.dict,
- GTK_SELECTION_SINGLE,
- NULL);
+ g_object_set (source, "model", fd.dict,
+ "selection-mode", GTK_SELECTION_SINGLE,
+ NULL);
psppire_selector_set_subjects (PSPPIRE_SELECTOR (selector),
psppire_selector_set_subjects (PSPPIRE_SELECTOR (selector),
- source,
- fd.variable_entry,
insert_source_row_into_entry,
insert_source_row_into_entry,
- is_currently_in_entry
+ is_currently_in_entry,
+ NULL
);
g_signal_connect (dialog, "refresh", G_CALLBACK (refresh), &fd);
);
g_signal_connect (dialog, "refresh", G_CALLBACK (refresh), &fd);
@@
-286,7
+284,7
@@
forward (casenumber *i, struct datasheet *data UNUSED)
static void
forward_wrap (casenumber *i, struct datasheet *data)
{
static void
forward_wrap (casenumber *i, struct datasheet *data)
{
- if ( ++*i >= datasheet_get_
row_cnt
(data) ) *i = 0;
+ if ( ++*i >= datasheet_get_
n_rows
(data) ) *i = 0;
}
static void
}
static void
@@
-300,7
+298,7
@@
static void
backward_wrap (casenumber *i, struct datasheet *data)
{
if ( --*i < 0 )
backward_wrap (casenumber *i, struct datasheet *data)
{
if ( --*i < 0 )
- *i = datasheet_get_
row_cnt
(data) - 1;
+ *i = datasheet_get_
n_rows
(data) - 1;
}
}
@@
-345,7
+343,7
@@
cm1c (casenumber current, struct datasheet *data)
static casenumber
last (casenumber current, struct datasheet *data)
{
static casenumber
last (casenumber current, struct datasheet *data)
{
- return datasheet_get_
row_cnt
(data) ;
+ return datasheet_get_
n_rows
(data) ;
}
static casenumber
}
static casenumber
@@
-375,7
+373,7
@@
enum iteration_type{
n_iterators
};
n_iterators
};
-static struct casenum_iterator ip[n_iterators] =
+static
const
struct casenum_iterator ip[n_iterators] =
{
{cp1, last, forward},
{cp1c, cm1, forward_wrap},
{
{cp1, last, forward},
{cp1c, cm1, forward_wrap},
@@
-386,7
+384,7
@@
static struct casenum_iterator ip[n_iterators] =
\f
/* A factory returning an iterator according to the dialog box's settings */
\f
/* A factory returning an iterator according to the dialog box's settings */
-static struct casenum_iterator *
+static
const
struct casenum_iterator *
get_iteration_params (const struct find_dialog *fd)
{
gboolean wrap = gtk_toggle_button_get_active
get_iteration_params (const struct find_dialog *fd)
{
gboolean wrap = gtk_toggle_button_get_active
@@
-428,6
+426,7
@@
struct comparator
{
const struct variable *var;
enum string_cmp_flags flags;
{
const struct variable *var;
enum string_cmp_flags flags;
+ const PsppireDict *dict;
bool (*compare) (const struct comparator *,
const union value *);
bool (*compare) (const struct comparator *,
const union value *);
@@
-440,7
+439,7
@@
struct comparator
struct value_comparator
{
struct comparator parent;
struct value_comparator
{
struct comparator parent;
- union value
*
pattern;
+ union value pattern;
};
/* A comparator which matches string values or parts thereof */
};
/* A comparator which matches string values or parts thereof */
@@
-463,7
+462,7
@@
value_compare (const struct comparator *cmptr,
const union value *v)
{
const struct value_comparator *vc = (const struct value_comparator *) cmptr;
const union value *v)
{
const struct value_comparator *vc = (const struct value_comparator *) cmptr;
- return 0 ==
compare_values (v,
vc->pattern, var_get_width (cmptr->var));
+ return 0 ==
value_compare_3way (v, &
vc->pattern, var_get_width (cmptr->var));
}
}
@@
-493,20
+492,24
@@
static bool
string_value_compare (const struct comparator *cmptr,
const union value *val)
{
string_value_compare (const struct comparator *cmptr,
const union value *val)
{
+ bool found;
+ char *text;
const struct string_comparator *ssc =
(const struct string_comparator *) cmptr;
const struct string_comparator *ssc =
(const struct string_comparator *) cmptr;
- const char *text = val->s;
int width = var_get_width (cmptr->var);
int width = var_get_width (cmptr->var);
-
+ g_return_val_if_fail (width > 0, false);
assert ( ! (cmptr->flags & STR_CMP_LABELS));
assert ( ! (cmptr->flags & STR_CMP_LABELS));
-
g_return_val_if_fail (width > 0, false
);
+
text = value_to_text (*val, cmptr->dict, *var_get_write_format (cmptr->var)
);
if ( cmptr->flags & STR_CMP_SUBSTR)
if ( cmptr->flags & STR_CMP_SUBSTR)
-
return
(NULL != g_strstr_len (text, width, ssc->pattern));
+
found =
(NULL != g_strstr_len (text, width, ssc->pattern));
else
else
- return (0 == strncmp (text, ssc->pattern, width));
+ found = (0 == strncmp (text, ssc->pattern, width));
+
+ free (text);
+ return found;
}
}
@@
-527,9
+530,9
@@
regexp_value_compare (const struct comparator *cmptr,
g_return_val_if_fail (width > 0, false);
g_return_val_if_fail (width > 0, false);
+ text = value_to_text (*val, cmptr->dict, *var_get_write_format (cmptr->var));
/* We must remove trailing whitespace, otherwise $ will not match where
one would expect */
/* We must remove trailing whitespace, otherwise $ will not match where
one would expect */
- text = g_strndup (val->s, width);
g_strchomp (text);
retval = (0 == regexec (&rec->re, text, 0, 0, 0));
g_strchomp (text);
retval = (0 == regexec (&rec->re, text, 0, 0, 0));
@@
-571,46
+574,33
@@
regexp_destroy (struct comparator *cmptr)
}
static void
}
static void
-value_destroy (struct comparator *cmptr)
+
cmptr_
value_destroy (struct comparator *cmptr)
{
struct value_comparator *vc = (struct value_comparator *) cmptr;
{
struct value_comparator *vc = (struct value_comparator *) cmptr;
-
free (vc->pattern
);
+
value_destroy (&vc->pattern, var_get_width (cmptr->var)
);
}
static struct comparator *
}
static struct comparator *
-value_comparator_create (const struct variable *var, const char *target)
+value_comparator_create (const struct variable *var, const
PsppireDict *dict, const
char *target)
{
{
- const struct fmt_spec *fmt;
- int width ;
struct value_comparator *vc = xzalloc (sizeof (*vc));
struct comparator *cmptr = (struct comparator *) vc;
cmptr->flags = 0;
cmptr->var = var;
cmptr->compare = value_compare ;
struct value_comparator *vc = xzalloc (sizeof (*vc));
struct comparator *cmptr = (struct comparator *) vc;
cmptr->flags = 0;
cmptr->var = var;
cmptr->compare = value_compare ;
- cmptr->destroy = value_destroy;
-
- width = var_get_width (var);
- fmt = var_get_write_format (var);
+ cmptr->destroy = cmptr_value_destroy;
+ cmptr->dict = dict;
- vc->pattern = value_create (width);
-
- if ( ! data_in (ss_cstr (target),
- LEGACY_NATIVE,
- fmt->type,
- 0, 0,
- vc->pattern, width) )
- {
- free (vc);
- return NULL;
- }
+ text_to_value (target, dict, var, &vc->pattern);
return cmptr;
}
static struct comparator *
return cmptr;
}
static struct comparator *
-string_comparator_create (const struct variable *var, const char *target,
+string_comparator_create (const struct variable *var, const PsppireDict *dict,
+ const char *target,
enum string_cmp_flags flags)
{
struct string_comparator *ssc = xzalloc (sizeof (*ssc));
enum string_cmp_flags flags)
{
struct string_comparator *ssc = xzalloc (sizeof (*ssc));
@@
-618,6
+608,7
@@
string_comparator_create (const struct variable *var, const char *target,
cmptr->flags = flags;
cmptr->var = var;
cmptr->flags = flags;
cmptr->var = var;
+ cmptr->dict = dict;
if ( flags & STR_CMP_LABELS)
cmptr->compare = string_label_compare;
if ( flags & STR_CMP_LABELS)
cmptr->compare = string_label_compare;
@@
-631,7
+622,7
@@
string_comparator_create (const struct variable *var, const char *target,
static struct comparator *
static struct comparator *
-regexp_comparator_create (const struct variable *var, const char *target,
+regexp_comparator_create (const struct variable *var, const
PsppireDict *dict, const
char *target,
enum string_cmp_flags flags)
{
int code;
enum string_cmp_flags flags)
{
int code;
@@
-640,6
+631,7
@@
regexp_comparator_create (const struct variable *var, const char *target,
cmptr->flags = flags;
cmptr->var = var;
cmptr->flags = flags;
cmptr->var = var;
+ cmptr->dict = dict;
cmptr->compare = (flags & STR_CMP_LABELS)
? regexp_label_compare : regexp_value_compare ;
cmptr->compare = (flags & STR_CMP_LABELS)
? regexp_label_compare : regexp_value_compare ;
@@
-689,16
+681,16
@@
comparator_destroy (struct comparator *cmptr)
static struct comparator *
static struct comparator *
-comparator_factory (const struct variable *var, const char *str,
+comparator_factory (const struct variable *var, const
PsppireDict *dict, const
char *str,
enum string_cmp_flags flags)
{
if ( flags & STR_CMP_REGEXP )
enum string_cmp_flags flags)
{
if ( flags & STR_CMP_REGEXP )
- return regexp_comparator_create (var, str, flags);
+ return regexp_comparator_create (var,
dict,
str, flags);
if ( flags & (STR_CMP_SUBSTR | STR_CMP_LABELS) )
if ( flags & (STR_CMP_SUBSTR | STR_CMP_LABELS) )
- return string_comparator_create (var, str, flags);
+ return string_comparator_create (var,
dict,
str, flags);
- return value_comparator_create (var, str);
+ return value_comparator_create (var,
dict,
str);
}
}
@@
-740,12
+732,13
@@
find_value (const struct find_dialog *fd, casenumber current_row,
flags |= STR_CMP_LABELS;
{
flags |= STR_CMP_LABELS;
{
- union value
*val = value_create (width)
;
+ union value
val
;
casenumber i;
casenumber i;
- struct casenum_iterator *ip = get_iteration_params (fd);
+
const
struct casenum_iterator *ip = get_iteration_params (fd);
struct comparator *cmptr =
struct comparator *cmptr =
- comparator_factory (var, target_string, flags);
+ comparator_factory (var,
fd->dict,
target_string, flags);
+ value_init (&val, width);
if ( ! cmptr)
goto finish;
if ( ! cmptr)
goto finish;
@@
-753,10
+746,9
@@
find_value (const struct find_dialog *fd, casenumber current_row,
i != ip->end (current_row, fd->data);
ip->next (&i, fd->data))
{
i != ip->end (current_row, fd->data);
ip->next (&i, fd->data))
{
- datasheet_get_value (fd->data, i, var_get_case_index (var),
- val, width);
+ datasheet_get_value (fd->data, i, var_get_case_index (var), &val);
- if ( comparator_compare (cmptr, val))
+ if ( comparator_compare (cmptr,
&
val))
{
*row = i;
break;
{
*row = i;
break;
@@
-765,6
+757,6
@@
find_value (const struct find_dialog *fd, casenumber current_row,
finish:
comparator_destroy (cmptr);
finish:
comparator_destroy (cmptr);
-
free (val
);
+
value_destroy (&val, width
);
}
}
}
}