find-dialog.c: Replace exp10 with our own integer version
[pspp] / src / ui / gui / psppire-data-store.h
1 /* PSPPIRE - a graphical user interface for PSPP.
2    Copyright (C) 2006, 2009, 2011, 2012  Free Software Foundation
3
4    This program is free software: you can redistribute it and/or modify
5    it under the terms of the GNU General Public License as published by
6    the Free Software Foundation, either version 3 of the License, or
7    (at your option) any later version.
8
9    This program is distributed in the hope that it will be useful,
10    but WITHOUT ANY WARRANTY; without even the implied warranty of
11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12    GNU General Public License for more details.
13
14    You should have received a copy of the GNU General Public License
15    along with this program.  If not, see <http://www.gnu.org/licenses/>. */
16
17 #ifndef __PSPPIRE_DATA_STORE_H__
18 #define __PSPPIRE_DATA_STORE_H__
19
20 #include <gtk/gtk.h>
21 #include "psppire-dict.h"
22
23 #define FIRST_CASE_NUMBER 1
24
25
26 G_BEGIN_DECLS
27
28 #define PSPPIRE_TYPE_DATA_STORE        (psppire_data_store_get_type ())
29
30 #define PSPPIRE_DATA_STORE(obj) \
31   (G_TYPE_CHECK_INSTANCE_CAST ((obj),                                   \
32                                PSPPIRE_TYPE_DATA_STORE, PsppireDataStore))
33
34 #define PSPPIRE_DATA_STORE_CLASS(klass) \
35   (G_TYPE_CHECK_CLASS_CAST ((klass),                                    \
36                             PSPPIRE_TYPE_DATA_STORE,                    \
37                             PsppireDataStoreClass))
38
39
40 #define PSPPIRE_IS_DATA_STORE(obj) \
41   (G_TYPE_CHECK_INSTANCE_TYPE ((obj), PSPPIRE_TYPE_DATA_STORE))
42
43 #define PSPPIRE_IS_DATA_STORE_CLASS(klass) \
44   (G_TYPE_CHECK_CLASS_TYPE ((klass), PSPPIRE_TYPE_DATA_STORE))
45
46 #define PSPPIRE_DATA_STORE_GET_CLASS(obj) \
47   (G_TYPE_INSTANCE_GET_CLASS ((obj),                                    \
48                               PSPPIRE_TYPE_DATA_STORE,                  \
49                               PsppireDataStoreClass))
50
51 typedef struct _PsppireDataStore       PsppireDataStore;
52 typedef struct _PsppireDataStoreClass  PsppireDataStoreClass;
53
54 struct dictionary;
55
56
57 enum dict_signal_handler {
58   VARIABLE_INSERTED,
59   VARIABLE_CHANGED,
60   VARIABLE_DELETED,
61   n_dict_signals
62 };
63
64
65 struct datasheet;
66 struct casereader;
67
68 struct _PsppireDataStore
69 {
70   GObject parent;
71
72   /*< private >*/
73   gboolean dispose_has_run ;
74   PsppireDict *dict;
75   struct datasheet *datasheet;
76   gint stamp;
77
78   gint dict_handler_id [n_dict_signals];
79 };
80
81 struct _PsppireDataStoreClass
82 {
83   GObjectClass parent_class;
84 };
85
86
87 GType psppire_data_store_get_type (void) G_GNUC_CONST;
88 PsppireDataStore *psppire_data_store_new     (PsppireDict *dict);
89
90
91 void psppire_data_store_set_reader (PsppireDataStore *ds,
92                                     struct casereader *reader);
93
94 void psppire_data_store_set_dictionary (PsppireDataStore *data_store,
95                                         PsppireDict *dict);
96
97 void psppire_data_store_clear (PsppireDataStore *data_store);
98
99 gboolean psppire_data_store_insert_new_case (PsppireDataStore *ds, casenumber posn);
100
101 gboolean psppire_data_store_insert_value (PsppireDataStore *ds,
102                                           gint width, gint where);
103
104 gboolean psppire_data_store_delete_cases (PsppireDataStore *ds, casenumber first, casenumber count);
105
106
107 struct casereader * psppire_data_store_get_reader (PsppireDataStore *ds);
108
109 gchar *psppire_data_store_get_string (PsppireDataStore *,
110                                       glong row, const struct variable *,
111                                       bool use_value_label);
112
113 gchar * psppire_data_store_value_to_string (gpointer unused, PsppireDataStore *store,
114                                             gint col, gint row,
115                                             const GValue *v);
116
117 gchar * psppire_data_store_value_to_string_with_labels (gpointer unused,
118                                                         PsppireDataStore *store,
119                                                         gint col, gint row,
120                                                         const GValue *v);
121
122 gboolean psppire_data_store_string_to_value (GtkTreeModel *model, gint col, gint row,
123                                              const gchar *in, GValue *out);
124
125 gboolean psppire_data_store_get_value (PsppireDataStore *store,
126                                        glong row, const struct variable *var,
127                                        union value *val);
128
129 gboolean psppire_data_store_set_value (PsppireDataStore *,
130                                        casenumber casenum,
131                                        const struct variable *,
132                                        const union value *);
133
134
135 gboolean psppire_data_store_set_string (PsppireDataStore *ds,
136                                         const gchar *text,
137                                         glong row, const struct variable *,
138                                         gboolean use_value_label);
139
140
141 gboolean psppire_data_store_filtered (PsppireDataStore *ds,
142                                       glong row);
143
144
145 casenumber psppire_data_store_get_case_count (const PsppireDataStore *ds);
146 size_t psppire_data_store_get_value_count (const PsppireDataStore *ds);
147 const struct caseproto *psppire_data_store_get_proto (const PsppireDataStore *);
148
149 \f
150
151 struct ccase *psppire_data_store_get_case (const PsppireDataStore *ds,
152                                            casenumber casenum);
153
154 G_END_DECLS
155
156 #endif /* __PSPPIRE_DATA_STORE_H__ */