summaryrefslogtreecommitdiff
path: root/noncore/apps/tableviewer/db/common.h
Unidiff
Diffstat (limited to 'noncore/apps/tableviewer/db/common.h') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/apps/tableviewer/db/common.h285
1 files changed, 285 insertions, 0 deletions
diff --git a/noncore/apps/tableviewer/db/common.h b/noncore/apps/tableviewer/db/common.h
new file mode 100644
index 0000000..bb0a953
--- a/dev/null
+++ b/noncore/apps/tableviewer/db/common.h
@@ -0,0 +1,285 @@
1/**********************************************************************
2** Copyright (C) 2000 Trolltech AS. All rights reserved.
3**
4** This file is part of Qtopia Environment.
5**
6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file.
10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15**
16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you.
18**
19**********************************************************************/
20
21
22/* This file represents shared data structures that will be passed
23 * around often.
24 */
25#ifndef __SHAREDDATA_H__
26#define __SHAREDDATA_H__
27
28// TODO rename this to a sensable class name
29
30#include <qvector.h>
31#include <qstring.h>
32#include <qdatetime.h>
33#include <qcstring.h>
34#include <qdatastream.h>
35#include <qintdict.h>
36
37class DBStore;
38
39/* helper classes to common classes */
40class QStringVector : public QVector<QString>
41{
42public:
43 int compareItems(Item a, Item b);
44};
45
46/* in QT 2.3, dates and times not supported int QVariant. So.....
47 * for now use my special Variant type which is basically identical
48 * except that does it for my types. TODO replace with QVariant when
49 * qvariant supports all the types we require */
50
51class TVVariantPrivate;
52
53class TVVariant
54{
55public:
56 enum KeyType {
57 Invalid = 0,
58 Int,
59 String,
60 Date,
61 Time,
62 };
63
64 TVVariant();
65 ~TVVariant();
66
67 TVVariant(const TVVariant&);
68 TVVariant(QDataStream&);
69
70 TVVariant(const QString &);
71 TVVariant(const int);
72 TVVariant(const QDate &);
73 TVVariant(const QTime &);
74
75 TVVariant& operator=(const TVVariant& );
76 bool operator==(const TVVariant&) const;
77 bool operator!=(const TVVariant&) const;
78 bool operator<(const TVVariant&) const;
79 bool operator>(const TVVariant&) const;
80
81 bool closer(TVVariant, TVVariant);
82 bool close(TVVariant);
83
84 KeyType type() const;
85 const QString typeName() const;
86 int numTypes() const;
87
88 const QString typeName(KeyType) const;
89 bool canCast(KeyType) const;
90 bool isValid() const;
91 void clear();
92
93 const QString toString() const;
94 const QDate toDate() const;
95 const QTime toTime() const;
96 int toInt() const;
97
98 QString& asString();
99 QDate& asDate();
100 QTime& asTime();
101 int& asInt();
102
103 void load(QDataStream&);
104 void save(QDataStream&) const;
105
106 static const QString typeToName(KeyType typ);
107 static KeyType nameToType(const QString &);
108private:
109 void detach();
110
111 TVVariantPrivate *d;
112};
113
114class TVVariantPrivate : public QShared
115{
116 public:
117 TVVariantPrivate();
118 TVVariantPrivate(TVVariantPrivate *);
119
120 ~TVVariantPrivate();
121
122 void clear();
123
124 TVVariant::KeyType typ;
125
126 union {
127 int i;
128 void *ptr;
129 } value;
130};
131
132inline TVVariant::KeyType TVVariant::type() const
133{
134 return d->typ;
135}
136
137inline bool TVVariant::isValid() const
138{
139 return (d->typ != Invalid);
140}
141
142inline int TVVariant::numTypes() const
143{
144 return 4;
145}
146
147class Key {
148public:
149 Key();
150 Key(QString name, TVVariant example, int flags = 0);
151 Key(const Key &);
152 Key& operator=(const Key& );
153
154 QString name() const;
155 TVVariant example() const;
156 TVVariant::KeyType type() const;
157 int flags() const;
158
159 void setName(const QString &);
160 void setExample(const TVVariant &);
161 void setFlags(int);
162
163 bool delFlag() const;
164 bool newFlag() const;
165
166 void setDelFlag(bool);
167 void setNewFlag(bool);
168
169private:
170 QString kname;
171 TVVariant kexample;
172 int kflags;
173};
174
175class KeyList : public QIntDict<Key> {
176public:
177 KeyList();
178 KeyList(const KeyList&);
179
180 ~KeyList();
181
182 bool operator!=(const KeyList &);
183
184 int getNumFields() const;
185
186 int addKey(QString KeyName, TVVariant example);
187 int addKey(QString KeyName, TVVariant::KeyType type);
188
189 TVVariant getKeyExample(int ) const;
190 void setKeyExample(int, TVVariant e);
191
192 QString getKeyName(int i) const;
193 void setKeyName(int i, const QString &n);
194
195 TVVariant::KeyType getKeyType(int i) const;
196 void setKeyType(int i, TVVariant::KeyType);
197
198 int getKeyIndex(QString q) const;
199
200 int getKeyFlags(int i) const;
201 void setKeyFlags(int i, int flag);
202
203 /* Below should be abstracted a bit more */
204 bool checkNewFlag(int i) const;
205 void setNewFlag(int i, bool f);
206 bool checkDeleteFlag(int i) const;
207 void setDeleteFlag(int i, bool f);
208
209 bool validIndex(int) const;
210};
211
212class KeyListIterator : public QIntDictIterator<Key>
213{
214public:
215 KeyListIterator(const KeyList &k) : QIntDictIterator<Key>(k) {};
216};
217
218/* TODO start using this */
219class DataElem {
220public:
221 DataElem(DBStore *container);
222 ~DataElem();
223
224 int getNumFields() const;
225 KeyList getKeys() const;
226
227 bool hasValidValue(int) const;
228 bool hasValidValue(QString) const;
229 TVVariant::KeyType getFieldType(int) const;
230 TVVariant::KeyType getFieldType(QString) const;
231 TVVariant getField(int) const;
232 TVVariant getField(QString) const;
233
234 void setField(int, QString);
235 void setField(int, TVVariant);
236 void setField(QString, QString);
237 void setField(QString, TVVariant);
238 void unsetField(int);
239 void unsetField(QString);
240
241 QString toQString() const;
242 QString toQString(int i) const;
243 QString toSortableQString(int i) const;
244
245 /* compare functions */
246 bool lessThan(int i, TVVariant) const;
247 bool moreThan(int i, TVVariant) const;
248 bool equalTo(int i, TVVariant) const;
249 bool contains(int i, TVVariant) const;
250 bool startsWith(int i, TVVariant) const;
251 bool endsWith(int i, TVVariant) const;
252
253 /* class functions... Compare is based of the primary key, which
254 is determined by the containing DBStores of each element. */
255 static int compare(const TVVariant, const TVVariant, int i);
256
257 /* False, second element's primary key is closer to target.
258 * True, first element's primary key is a closer match to target */
259 static bool closer(DataElem*, DataElem *, TVVariant, int column);
260private:
261 QIntDict<TVVariant> values;
262 DBStore *contained;
263};
264
265typedef struct _TableState {
266 int current_column;
267 KeyList *kRep;
268 DataElem *current_elem;
269} TableState;
270
271/* Stream functions */
272#ifndef QT_NO_DATASTREAM
273Q_EXPORT QDataStream &operator<<( QDataStream &, const KeyList & );
274Q_EXPORT QDataStream &operator<<( QDataStream &, const DataElem & );
275Q_EXPORT QDataStream &operator>>( QDataStream &, KeyList & );
276Q_EXPORT QDataStream &operator>>( QDataStream &, DataElem & );
277
278
279Q_EXPORT QDataStream &operator>>( QDataStream &, TVVariant & );
280Q_EXPORT QDataStream &operator<<( QDataStream &, const TVVariant & );
281Q_EXPORT QDataStream &operator>>( QDataStream &, TVVariant::KeyType& );
282Q_EXPORT QDataStream &operator<<( QDataStream &, const TVVariant::KeyType& );
283#endif
284
285#endif