cleanup
[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   VARIABLES_DELETED,
61   VARIABLE_MOVED,
62   n_dict_signals
63 };
64
65
66 struct datasheet;
67 struct casereader;
68
69 struct _PsppireDataStore
70 {
71   GObject parent;
72
73   /*< private >*/
74   gboolean dispose_has_run ;
75   PsppireDict *dict;
76   struct datasheet *datasheet;
77   gint stamp;
78
79   gint dict_handler_id [n_dict_signals];
80 };
81
82 struct _PsppireDataStoreClass
83 {
84   GObjectClass parent_class;
85 };
86
87
88 GType psppire_data_store_get_type (void) G_GNUC_CONST;
89 PsppireDataStore *psppire_data_store_new     (PsppireDict *dict);
90
91
92 void psppire_data_store_set_reader (PsppireDataStore *ds,
93                                     struct casereader *reader);
94
95 void psppire_data_store_set_dictionary (PsppireDataStore *data_store,
96                                         PsppireDict *dict);
97
98 void psppire_data_store_clear (PsppireDataStore *data_store);
99
100 gboolean psppire_data_store_insert_new_case (PsppireDataStore *ds, casenumber posn);
101
102 gboolean psppire_data_store_insert_value (PsppireDataStore *ds,
103                                           gint width, gint where);
104
105 gboolean psppire_data_store_delete_cases (PsppireDataStore *ds, casenumber first, casenumber count);
106
107
108 struct casereader * psppire_data_store_get_reader (PsppireDataStore *ds);
109
110 gchar *psppire_data_store_get_string (PsppireDataStore *,
111                                       glong row, const struct variable *,
112                                       bool use_value_label);
113
114 gchar * psppire_data_store_value_to_string (gpointer unused, PsppireDataStore *store,
115                                             gint col, gint row,
116                                             const GValue *v);
117
118 gchar * psppire_data_store_value_to_string_with_labels (gpointer unused,
119                                                         PsppireDataStore *store,
120                                                         gint col, gint row,
121                                                         const GValue *v);
122
123 gboolean psppire_data_store_string_to_value (GtkTreeModel *model, gint col, gint row,
124                                              const gchar *in, GValue *out);
125
126 gboolean psppire_data_store_get_value (PsppireDataStore *store,
127                                        glong row, const struct variable *var,
128                                        union value *val);
129
130 gboolean psppire_data_store_set_value (PsppireDataStore *,
131                                        casenumber casenum,
132                                        const struct variable *,
133                                        const union value *);
134
135
136 gboolean psppire_data_store_set_string (PsppireDataStore *ds,
137                                         const gchar *text,
138                                         glong row, const struct variable *,
139                                         gboolean use_value_label);
140
141
142 gboolean psppire_data_store_filtered (PsppireDataStore *ds,
143                                       glong row);
144
145
146 casenumber psppire_data_store_get_case_count (const PsppireDataStore *ds);
147 size_t psppire_data_store_get_value_count (const PsppireDataStore *ds);
148 const struct caseproto *psppire_data_store_get_proto (const PsppireDataStore *);
149
150 \f
151
152 struct ccase *psppire_data_store_get_case (const PsppireDataStore *ds,
153                                            casenumber casenum);
154
155 G_END_DECLS
156
157 #endif /* __PSPPIRE_DATA_STORE_H__ */