summaryrefslogtreecommitdiff
authoreilers <eilers>2002-11-01 15:10:42 (UTC)
committer eilers <eilers>2002-11-01 15:10:42 (UTC)
commit28b70b2b7f8fa03ba0991fb73dccf7b46e5c3d1f (patch) (unidiff)
treed5ead4aa63aed345ce406c7857ba1ec7813272db
parenta098735b8749ead08c658792cc31f95e73045107 (diff)
downloadopie-28b70b2b7f8fa03ba0991fb73dccf7b46e5c3d1f.zip
opie-28b70b2b7f8fa03ba0991fb73dccf7b46e5c3d1f.tar.gz
opie-28b70b2b7f8fa03ba0991fb73dccf7b46e5c3d1f.tar.bz2
Added regExp-search in database for all fields in a contact.
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libopie/pim/ocontact.h4
-rw-r--r--libopie/pim/ocontactaccess.cpp8
-rw-r--r--libopie/pim/ocontactaccess.h8
-rw-r--r--libopie/pim/ocontactaccessbackend.h7
-rw-r--r--libopie/pim/ocontactaccessbackend_xml.h20
-rw-r--r--libopie2/opiepim/backend/ocontactaccessbackend.h7
-rw-r--r--libopie2/opiepim/backend/ocontactaccessbackend_xml.h20
-rw-r--r--libopie2/opiepim/core/ocontactaccess.cpp8
-rw-r--r--libopie2/opiepim/core/ocontactaccess.h8
-rw-r--r--libopie2/opiepim/ocontact.h4
10 files changed, 86 insertions, 8 deletions
diff --git a/libopie/pim/ocontact.h b/libopie/pim/ocontact.h
index 382ab94..038a59f 100644
--- a/libopie/pim/ocontact.h
+++ b/libopie/pim/ocontact.h
@@ -98,29 +98,25 @@ public:
98 // personal 98 // personal
99 void setSpouse( const QString &v ) { replace( Qtopia::Spouse, v ); } 99 void setSpouse( const QString &v ) { replace( Qtopia::Spouse, v ); }
100 void setGender( const QString &v ) { replace( Qtopia::Gender, v ); } 100 void setGender( const QString &v ) { replace( Qtopia::Gender, v ); }
101 void setBirthday( const QDate &v ); 101 void setBirthday( const QDate &v );
102 void setAnniversary( const QDate &v ); 102 void setAnniversary( const QDate &v );
103 void setNickname( const QString &v ) { replace( Qtopia::Nickname, v ); } 103 void setNickname( const QString &v ) { replace( Qtopia::Nickname, v ); }
104 void setChildren( const QString &v ); 104 void setChildren( const QString &v );
105 105
106 // other 106 // other
107 void setNotes( const QString &v ) { replace( Qtopia::Notes, v); } 107 void setNotes( const QString &v ) { replace( Qtopia::Notes, v); }
108 108
109 bool match( const QString &regexp ) const; 109 bool match( const QString &regexp ) const;
110
111// DON'T ATTEMPT TO USE THIS
112#ifdef QTOPIA_INTERNAL_CONTACT_MRE
113 bool match( const QRegExp &regexp ) const; 110 bool match( const QRegExp &regexp ) const;
114#endif
115 111
116// // custom 112// // custom
117// void setCustomField( const QString &key, const QString &v ) 113// void setCustomField( const QString &key, const QString &v )
118// { replace(Custom- + key, v ); } 114// { replace(Custom- + key, v ); }
119 115
120 // name 116 // name
121 QString fullName() const; 117 QString fullName() const;
122 QString title() const { return find( Qtopia::Title ); } 118 QString title() const { return find( Qtopia::Title ); }
123 QString firstName() const { return find( Qtopia::FirstName ); } 119 QString firstName() const { return find( Qtopia::FirstName ); }
124 QString middleName() const { return find( Qtopia::MiddleName ); } 120 QString middleName() const { return find( Qtopia::MiddleName ); }
125 QString lastName() const { return find( Qtopia::LastName ); } 121 QString lastName() const { return find( Qtopia::LastName ); }
126 QString suffix() const { return find( Qtopia::Suffix ); } 122 QString suffix() const { return find( Qtopia::Suffix ); }
diff --git a/libopie/pim/ocontactaccess.cpp b/libopie/pim/ocontactaccess.cpp
index 2ca0283..f868b53 100644
--- a/libopie/pim/ocontactaccess.cpp
+++ b/libopie/pim/ocontactaccess.cpp
@@ -12,24 +12,27 @@
12 * Info: This class could just work with a change in the header-file 12 * Info: This class could just work with a change in the header-file
13 * of the Contact class ! Therefore our libopie only compiles 13 * of the Contact class ! Therefore our libopie only compiles
14 * with our version of libqpe 14 * with our version of libqpe
15 * ===================================================================== 15 * =====================================================================
16 * ToDo: XML-Backend: Automatic reload if something was changed... 16 * ToDo: XML-Backend: Automatic reload if something was changed...
17 * 17 *
18 * 18 *
19 * ===================================================================== 19 * =====================================================================
20 * Version: $Id$ 20 * Version: $Id$
21 * ===================================================================== 21 * =====================================================================
22 * History: 22 * History:
23 * $Log$ 23 * $Log$
24 * Revision 1.6 2002/11/01 15:10:42 eilers
25 * Added regExp-search in database for all fields in a contact.
26 *
24 * Revision 1.5 2002/10/16 10:52:40 eilers 27 * Revision 1.5 2002/10/16 10:52:40 eilers
25 * Added some docu to the interface and now using the cache infrastucture by zecke.. :) 28 * Added some docu to the interface and now using the cache infrastucture by zecke.. :)
26 * 29 *
27 * Revision 1.4 2002/10/14 16:21:54 eilers 30 * Revision 1.4 2002/10/14 16:21:54 eilers
28 * Some minor interface updates 31 * Some minor interface updates
29 * 32 *
30 * Revision 1.3 2002/10/07 17:34:24 eilers 33 * Revision 1.3 2002/10/07 17:34:24 eilers
31 * added OBackendFactory for advanced backend access 34 * added OBackendFactory for advanced backend access
32 * 35 *
33 * Revision 1.2 2002/10/02 16:18:11 eilers 36 * Revision 1.2 2002/10/02 16:18:11 eilers
34 * debugged and seems to work almost perfectly .. 37 * debugged and seems to work almost perfectly ..
35 * 38 *
@@ -111,24 +114,29 @@ bool OContactAccess::save ()
111 reload(); 114 reload();
112 115
113 bool status = OPimAccessTemplate<OContact>::save(); 116 bool status = OPimAccessTemplate<OContact>::save();
114 if ( !status ) return false; 117 if ( !status ) return false;
115 118
116 /* Now tell everyone that new data is available. 119 /* Now tell everyone that new data is available.
117 */ 120 */
118 QCopEnvelope e( "QPE/PIM", "addressbookUpdated()" ); 121 QCopEnvelope e( "QPE/PIM", "addressbookUpdated()" );
119 122
120 return true; 123 return true;
121} 124}
122 125
126ORecordList<OContact> OContactAccess::matchRegexp( const QRegExp &r ) const{
127 QArray<int> matchingContacts = m_backEnd -> matchRegexp( r );
128 return ( ORecordList<OContact>(matchingContacts, this) );
129}
130
123const uint OContactAccess::querySettings() 131const uint OContactAccess::querySettings()
124{ 132{
125 return ( m_backEnd->querySettings() ); 133 return ( m_backEnd->querySettings() );
126} 134}
127 135
128bool OContactAccess::hasQuerySettings ( int querySettings ) const 136bool OContactAccess::hasQuerySettings ( int querySettings ) const
129{ 137{
130 return ( m_backEnd->hasQuerySettings ( querySettings ) ); 138 return ( m_backEnd->hasQuerySettings ( querySettings ) );
131} 139}
132 140
133 141
134bool OContactAccess::wasChangedExternally()const 142bool OContactAccess::wasChangedExternally()const
diff --git a/libopie/pim/ocontactaccess.h b/libopie/pim/ocontactaccess.h
index da9c942..b4921d5 100644
--- a/libopie/pim/ocontactaccess.h
+++ b/libopie/pim/ocontactaccess.h
@@ -8,24 +8,27 @@
8 *This program is free software; you can redistribute it and/or 8 *This program is free software; you can redistribute it and/or
9 *modify it under the terms of the GNU Library General Public 9 *modify it under the terms of the GNU Library General Public
10 * License as published by the Free Software Foundation; 10 * License as published by the Free Software Foundation;
11 * either version 2 of the License, or (at your option) any later 11 * either version 2 of the License, or (at your option) any later
12 * version. 12 * version.
13 * ===================================================================== 13 * =====================================================================
14 * ToDo: Define enum for query settings 14 * ToDo: Define enum for query settings
15 * ===================================================================== 15 * =====================================================================
16 * Version: $Id$ 16 * Version: $Id$
17 * ===================================================================== 17 * =====================================================================
18 * History: 18 * History:
19 * $Log$ 19 * $Log$
20 * Revision 1.4 2002/11/01 15:10:42 eilers
21 * Added regExp-search in database for all fields in a contact.
22 *
20 * Revision 1.3 2002/10/16 10:52:40 eilers 23 * Revision 1.3 2002/10/16 10:52:40 eilers
21 * Added some docu to the interface and now using the cache infrastucture by zecke.. :) 24 * Added some docu to the interface and now using the cache infrastucture by zecke.. :)
22 * 25 *
23 * Revision 1.2 2002/10/14 16:21:54 eilers 26 * Revision 1.2 2002/10/14 16:21:54 eilers
24 * Some minor interface updates 27 * Some minor interface updates
25 * 28 *
26 * Revision 1.1 2002/09/27 17:11:44 eilers 29 * Revision 1.1 2002/09/27 17:11:44 eilers
27 * Added API for accessing the Contact-Database ! It is compiling, but 30 * Added API for accessing the Contact-Database ! It is compiling, but
28 * please do not expect that anything is working ! 31 * please do not expect that anything is working !
29 * I will debug that stuff in the next time .. 32 * I will debug that stuff in the next time ..
30 * Please read README_COMPILE for compiling ! 33 * Please read README_COMPILE for compiling !
31 * 34 *
@@ -39,24 +42,25 @@
39#include <qpe/qcopenvelope_qws.h> 42#include <qpe/qcopenvelope_qws.h>
40 43
41#include <qvaluelist.h> 44#include <qvaluelist.h>
42#include <qfileinfo.h> 45#include <qfileinfo.h>
43 46
44#include "ocontact.h" 47#include "ocontact.h"
45#include "ocontactaccessbackend.h" 48#include "ocontactaccessbackend.h"
46#include "opimaccesstemplate.h" 49#include "opimaccesstemplate.h"
47 50
48/** Class to access the contacts database. 51/** Class to access the contacts database.
49 * This is just a frontend for the real database handling which is 52 * This is just a frontend for the real database handling which is
50 * done by the backend. 53 * done by the backend.
54 * @see OPimAccessTemplate
51 */ 55 */
52class OContactAccess: public QObject, public OPimAccessTemplate<OContact> 56class OContactAccess: public QObject, public OPimAccessTemplate<OContact>
53{ 57{
54 Q_OBJECT 58 Q_OBJECT
55 59
56 public: 60 public:
57 /** Create Database with contacts (addressbook). 61 /** Create Database with contacts (addressbook).
58 * @param appname Name of application which wants access to the database 62 * @param appname Name of application which wants access to the database
59 * (i.e. "todolist") 63 * (i.e. "todolist")
60 * @param filename The name of the database file. If not set, the default one 64 * @param filename The name of the database file. If not set, the default one
61 * is used. 65 * is used.
62 * @param backend Pointer to an alternative Backend. If not set, we will use 66 * @param backend Pointer to an alternative Backend. If not set, we will use
@@ -72,26 +76,30 @@ class OContactAccess: public QObject, public OPimAccessTemplate<OContact>
72 ~OContactAccess (); 76 ~OContactAccess ();
73 77
74 /** Constants for query. 78 /** Constants for query.
75 * Use this constants to set the query parameters. 79 * Use this constants to set the query parameters.
76 * Note: <i>query_IgnoreCase</i> just make sense with one of the other attributes ! 80 * Note: <i>query_IgnoreCase</i> just make sense with one of the other attributes !
77 * @see queryByExample() 81 * @see queryByExample()
78 */ 82 */
79 enum QuerySettings { 83 enum QuerySettings {
80 WildCards = 0x0001, 84 WildCards = 0x0001,
81 IgnoreCase = 0x0002, 85 IgnoreCase = 0x0002,
82 RegExp = 0x0004, 86 RegExp = 0x0004,
83 ExactMatch = 0x0008, 87 ExactMatch = 0x0008,
88 MatchOne = 0x0010 // Only one Entry must match
84 }; 89 };
85 90
91
92 ORecordList<OContact> matchRegexp( const QRegExp &r )const;
93
86 /** Return all possible settings. 94 /** Return all possible settings.
87 * @return All settings provided by the current backend 95 * @return All settings provided by the current backend
88 * (i.e.: query_WildCards & query_IgnoreCase) 96 * (i.e.: query_WildCards & query_IgnoreCase)
89 */ 97 */
90 const uint querySettings(); 98 const uint querySettings();
91 99
92 /** Check whether settings are correct. 100 /** Check whether settings are correct.
93 * @return <i>true</i> if the given settings are correct and possible. 101 * @return <i>true</i> if the given settings are correct and possible.
94 */ 102 */
95 bool hasQuerySettings ( int querySettings ) const; 103 bool hasQuerySettings ( int querySettings ) const;
96 104
97 /** 105 /**
diff --git a/libopie/pim/ocontactaccessbackend.h b/libopie/pim/ocontactaccessbackend.h
index a651477..c898f61 100644
--- a/libopie/pim/ocontactaccessbackend.h
+++ b/libopie/pim/ocontactaccessbackend.h
@@ -10,63 +10,70 @@
10 *This program is free software; you can redistribute it and/or 10 *This program is free software; you can redistribute it and/or
11 *modify it under the terms of the GNU Library General Public 11 *modify it under the terms of the GNU Library General Public
12 * License as published by the Free Software Foundation; 12 * License as published by the Free Software Foundation;
13 * either version 2 of the License, or (at your option) any later 13 * either version 2 of the License, or (at your option) any later
14 * version. 14 * version.
15 * ===================================================================== 15 * =====================================================================
16 * ToDo: Define enum for query settings 16 * ToDo: Define enum for query settings
17 * ===================================================================== 17 * =====================================================================
18 * Version: $Id$ 18 * Version: $Id$
19 * ===================================================================== 19 * =====================================================================
20 * History: 20 * History:
21 * $Log$ 21 * $Log$
22 * Revision 1.3 2002/11/01 15:10:42 eilers
23 * Added regExp-search in database for all fields in a contact.
24 *
22 * Revision 1.2 2002/10/07 17:34:24 eilers 25 * Revision 1.2 2002/10/07 17:34:24 eilers
23 * added OBackendFactory for advanced backend access 26 * added OBackendFactory for advanced backend access
24 * 27 *
25 * Revision 1.1 2002/09/27 17:11:44 eilers 28 * Revision 1.1 2002/09/27 17:11:44 eilers
26 * Added API for accessing the Contact-Database ! It is compiling, but 29 * Added API for accessing the Contact-Database ! It is compiling, but
27 * please do not expect that anything is working ! 30 * please do not expect that anything is working !
28 * I will debug that stuff in the next time .. 31 * I will debug that stuff in the next time ..
29 * Please read README_COMPILE for compiling ! 32 * Please read README_COMPILE for compiling !
30 * 33 *
31 * ===================================================================== 34 * =====================================================================
32 * 35 *
33 */ 36 */
34 37
35#ifndef _OCONTACTACCESSBACKEND_H_ 38#ifndef _OCONTACTACCESSBACKEND_H_
36#define _OCONTACTACCESSBACKEND_H_ 39#define _OCONTACTACCESSBACKEND_H_
37 40
38#include "ocontact.h" 41#include "ocontact.h"
39#include "opimaccessbackend.h" 42#include "opimaccessbackend.h"
40 43
44#include "qregexp.h"
45
41class OContactAccessBackend: public OPimAccessBackend<OContact> { 46class OContactAccessBackend: public OPimAccessBackend<OContact> {
42 public: 47 public:
43 OContactAccessBackend() {} 48 OContactAccessBackend() {}
44 virtual ~OContactAccessBackend() {} 49 virtual ~OContactAccessBackend() {}
45 50
46 51
47 /** Return if database was changed externally. 52 /** Return if database was changed externally.
48 * This may just make sense on file based databases like a XML-File. 53 * This may just make sense on file based databases like a XML-File.
49 * It is used to prevent to overwrite the current database content 54 * It is used to prevent to overwrite the current database content
50 * if the file was already changed by something else ! 55 * if the file was already changed by something else !
51 * If this happens, we have to reload before save our data. 56 * If this happens, we have to reload before save our data.
52 * If we use real databases, this should be handled by the database 57 * If we use real databases, this should be handled by the database
53 * management system themselve, therefore this function should always return false in 58 * management system themselve, therefore this function should always return false in
54 * this case. It is not our problem to handle this conflict ... 59 * this case. It is not our problem to handle this conflict ...
55 * @return <i>true</i> if the database was changed and if save without reload will 60 * @return <i>true</i> if the database was changed and if save without reload will
56 * be dangerous. <i>false</i> if the database was not changed or it is save to write 61 * be dangerous. <i>false</i> if the database was not changed or it is save to write
57 * in this situation. 62 * in this situation.
58 */ 63 */
59 virtual bool wasChangedExternally() = 0; 64 virtual bool wasChangedExternally() = 0;
60 65
66 virtual QArray<int> matchRegexp( const QRegExp &r ) const = 0;
67
61 /** Return all possible settings. 68 /** Return all possible settings.
62 * @return All settings provided by the current backend 69 * @return All settings provided by the current backend
63 * (i.e.: query_WildCards & query_IgnoreCase) 70 * (i.e.: query_WildCards & query_IgnoreCase)
64 */ 71 */
65 virtual const uint querySettings() = 0; 72 virtual const uint querySettings() = 0;
66 73
67 /** Check whether settings are correct. 74 /** Check whether settings are correct.
68 * @return <i>true</i> if the given settings are correct and possible. 75 * @return <i>true</i> if the given settings are correct and possible.
69 */ 76 */
70 virtual bool hasQuerySettings (uint querySettings) const = 0; 77 virtual bool hasQuerySettings (uint querySettings) const = 0;
71 78
72 79
diff --git a/libopie/pim/ocontactaccessbackend_xml.h b/libopie/pim/ocontactaccessbackend_xml.h
index 12a75ba..f7e8207 100644
--- a/libopie/pim/ocontactaccessbackend_xml.h
+++ b/libopie/pim/ocontactaccessbackend_xml.h
@@ -8,24 +8,27 @@
8 *modify it under the terms of the GNU Library General Public 8 *modify it under the terms of the GNU Library General Public
9 * License as published by the Free Software Foundation; either 9 * License as published by the Free Software Foundation; either
10 * version 2 of the License, or (at your option) any later version. 10 * version 2 of the License, or (at your option) any later version.
11 * ===================================================================== 11 * =====================================================================
12 * ToDo: XML-Backend: Automatic reload if something was changed... 12 * ToDo: XML-Backend: Automatic reload if something was changed...
13 * 13 *
14 * 14 *
15 * ===================================================================== 15 * =====================================================================
16 * Version: $Id$ 16 * Version: $Id$
17 * ===================================================================== 17 * =====================================================================
18 * History: 18 * History:
19 * $Log$ 19 * $Log$
20 * Revision 1.5 2002/11/01 15:10:42 eilers
21 * Added regExp-search in database for all fields in a contact.
22 *
20 * Revision 1.4 2002/10/16 10:52:40 eilers 23 * Revision 1.4 2002/10/16 10:52:40 eilers
21 * Added some docu to the interface and now using the cache infrastucture by zecke.. :) 24 * Added some docu to the interface and now using the cache infrastucture by zecke.. :)
22 * 25 *
23 * Revision 1.3 2002/10/14 16:21:54 eilers 26 * Revision 1.3 2002/10/14 16:21:54 eilers
24 * Some minor interface updates 27 * Some minor interface updates
25 * 28 *
26 * Revision 1.2 2002/10/07 17:34:24 eilers 29 * Revision 1.2 2002/10/07 17:34:24 eilers
27 * added OBackendFactory for advanced backend access 30 * added OBackendFactory for advanced backend access
28 * 31 *
29 * Revision 1.1 2002/09/27 17:11:44 eilers 32 * Revision 1.1 2002/09/27 17:11:44 eilers
30 * Added API for accessing the Contact-Database ! It is compiling, but 33 * Added API for accessing the Contact-Database ! It is compiling, but
31 * please do not expect that anything is working ! 34 * please do not expect that anything is working !
@@ -245,24 +248,41 @@ class OContactAccessBackend_XML : public OContactAccessBackend {
245 } 248 }
246 } 249 }
247 if ( allcorrect ){ 250 if ( allcorrect ){
248 m_currentQuery[arraycounter++] = (*it).uid(); 251 m_currentQuery[arraycounter++] = (*it).uid();
249 } 252 }
250 } 253 }
251 254
252 // Shrink to fit.. 255 // Shrink to fit..
253 m_currentQuery.resize(arraycounter); 256 m_currentQuery.resize(arraycounter);
254 257
255 return m_currentQuery; 258 return m_currentQuery;
256 } 259 }
260
261 QArray<int> matchRegexp( const QRegExp &r ) const{
262 QArray<int> m_currentQuery( m_contactList.count() );
263 QValueListConstIterator<OContact> it;
264 uint arraycounter = 0;
265
266 for( it = m_contactList.begin(); it != m_contactList.end(); ++it ){
267 if ( (*it).match( r ) ){
268 m_currentQuery[arraycounter++] = (*it).uid();
269 }
270
271 }
272 // Shrink to fit..
273 m_currentQuery.resize(arraycounter);
274
275 return m_currentQuery;
276 }
257 277
258 const uint querySettings() 278 const uint querySettings()
259 { 279 {
260 return ( OContactAccess::WildCards 280 return ( OContactAccess::WildCards
261 & OContactAccess::IgnoreCase 281 & OContactAccess::IgnoreCase
262 & OContactAccess::RegExp 282 & OContactAccess::RegExp
263 & OContactAccess::ExactMatch ); 283 & OContactAccess::ExactMatch );
264 } 284 }
265 285
266 bool hasQuerySettings (uint querySettings) const 286 bool hasQuerySettings (uint querySettings) const
267 { 287 {
268 /* OContactAccess::IgnoreCase may be added with one 288 /* OContactAccess::IgnoreCase may be added with one
diff --git a/libopie2/opiepim/backend/ocontactaccessbackend.h b/libopie2/opiepim/backend/ocontactaccessbackend.h
index a651477..c898f61 100644
--- a/libopie2/opiepim/backend/ocontactaccessbackend.h
+++ b/libopie2/opiepim/backend/ocontactaccessbackend.h
@@ -10,63 +10,70 @@
10 *This program is free software; you can redistribute it and/or 10 *This program is free software; you can redistribute it and/or
11 *modify it under the terms of the GNU Library General Public 11 *modify it under the terms of the GNU Library General Public
12 * License as published by the Free Software Foundation; 12 * License as published by the Free Software Foundation;
13 * either version 2 of the License, or (at your option) any later 13 * either version 2 of the License, or (at your option) any later
14 * version. 14 * version.
15 * ===================================================================== 15 * =====================================================================
16 * ToDo: Define enum for query settings 16 * ToDo: Define enum for query settings
17 * ===================================================================== 17 * =====================================================================
18 * Version: $Id$ 18 * Version: $Id$
19 * ===================================================================== 19 * =====================================================================
20 * History: 20 * History:
21 * $Log$ 21 * $Log$
22 * Revision 1.3 2002/11/01 15:10:42 eilers
23 * Added regExp-search in database for all fields in a contact.
24 *
22 * Revision 1.2 2002/10/07 17:34:24 eilers 25 * Revision 1.2 2002/10/07 17:34:24 eilers
23 * added OBackendFactory for advanced backend access 26 * added OBackendFactory for advanced backend access
24 * 27 *
25 * Revision 1.1 2002/09/27 17:11:44 eilers 28 * Revision 1.1 2002/09/27 17:11:44 eilers
26 * Added API for accessing the Contact-Database ! It is compiling, but 29 * Added API for accessing the Contact-Database ! It is compiling, but
27 * please do not expect that anything is working ! 30 * please do not expect that anything is working !
28 * I will debug that stuff in the next time .. 31 * I will debug that stuff in the next time ..
29 * Please read README_COMPILE for compiling ! 32 * Please read README_COMPILE for compiling !
30 * 33 *
31 * ===================================================================== 34 * =====================================================================
32 * 35 *
33 */ 36 */
34 37
35#ifndef _OCONTACTACCESSBACKEND_H_ 38#ifndef _OCONTACTACCESSBACKEND_H_
36#define _OCONTACTACCESSBACKEND_H_ 39#define _OCONTACTACCESSBACKEND_H_
37 40
38#include "ocontact.h" 41#include "ocontact.h"
39#include "opimaccessbackend.h" 42#include "opimaccessbackend.h"
40 43
44#include "qregexp.h"
45
41class OContactAccessBackend: public OPimAccessBackend<OContact> { 46class OContactAccessBackend: public OPimAccessBackend<OContact> {
42 public: 47 public:
43 OContactAccessBackend() {} 48 OContactAccessBackend() {}
44 virtual ~OContactAccessBackend() {} 49 virtual ~OContactAccessBackend() {}
45 50
46 51
47 /** Return if database was changed externally. 52 /** Return if database was changed externally.
48 * This may just make sense on file based databases like a XML-File. 53 * This may just make sense on file based databases like a XML-File.
49 * It is used to prevent to overwrite the current database content 54 * It is used to prevent to overwrite the current database content
50 * if the file was already changed by something else ! 55 * if the file was already changed by something else !
51 * If this happens, we have to reload before save our data. 56 * If this happens, we have to reload before save our data.
52 * If we use real databases, this should be handled by the database 57 * If we use real databases, this should be handled by the database
53 * management system themselve, therefore this function should always return false in 58 * management system themselve, therefore this function should always return false in
54 * this case. It is not our problem to handle this conflict ... 59 * this case. It is not our problem to handle this conflict ...
55 * @return <i>true</i> if the database was changed and if save without reload will 60 * @return <i>true</i> if the database was changed and if save without reload will
56 * be dangerous. <i>false</i> if the database was not changed or it is save to write 61 * be dangerous. <i>false</i> if the database was not changed or it is save to write
57 * in this situation. 62 * in this situation.
58 */ 63 */
59 virtual bool wasChangedExternally() = 0; 64 virtual bool wasChangedExternally() = 0;
60 65
66 virtual QArray<int> matchRegexp( const QRegExp &r ) const = 0;
67
61 /** Return all possible settings. 68 /** Return all possible settings.
62 * @return All settings provided by the current backend 69 * @return All settings provided by the current backend
63 * (i.e.: query_WildCards & query_IgnoreCase) 70 * (i.e.: query_WildCards & query_IgnoreCase)
64 */ 71 */
65 virtual const uint querySettings() = 0; 72 virtual const uint querySettings() = 0;
66 73
67 /** Check whether settings are correct. 74 /** Check whether settings are correct.
68 * @return <i>true</i> if the given settings are correct and possible. 75 * @return <i>true</i> if the given settings are correct and possible.
69 */ 76 */
70 virtual bool hasQuerySettings (uint querySettings) const = 0; 77 virtual bool hasQuerySettings (uint querySettings) const = 0;
71 78
72 79
diff --git a/libopie2/opiepim/backend/ocontactaccessbackend_xml.h b/libopie2/opiepim/backend/ocontactaccessbackend_xml.h
index 12a75ba..f7e8207 100644
--- a/libopie2/opiepim/backend/ocontactaccessbackend_xml.h
+++ b/libopie2/opiepim/backend/ocontactaccessbackend_xml.h
@@ -8,24 +8,27 @@
8 *modify it under the terms of the GNU Library General Public 8 *modify it under the terms of the GNU Library General Public
9 * License as published by the Free Software Foundation; either 9 * License as published by the Free Software Foundation; either
10 * version 2 of the License, or (at your option) any later version. 10 * version 2 of the License, or (at your option) any later version.
11 * ===================================================================== 11 * =====================================================================
12 * ToDo: XML-Backend: Automatic reload if something was changed... 12 * ToDo: XML-Backend: Automatic reload if something was changed...
13 * 13 *
14 * 14 *
15 * ===================================================================== 15 * =====================================================================
16 * Version: $Id$ 16 * Version: $Id$
17 * ===================================================================== 17 * =====================================================================
18 * History: 18 * History:
19 * $Log$ 19 * $Log$
20 * Revision 1.5 2002/11/01 15:10:42 eilers
21 * Added regExp-search in database for all fields in a contact.
22 *
20 * Revision 1.4 2002/10/16 10:52:40 eilers 23 * Revision 1.4 2002/10/16 10:52:40 eilers
21 * Added some docu to the interface and now using the cache infrastucture by zecke.. :) 24 * Added some docu to the interface and now using the cache infrastucture by zecke.. :)
22 * 25 *
23 * Revision 1.3 2002/10/14 16:21:54 eilers 26 * Revision 1.3 2002/10/14 16:21:54 eilers
24 * Some minor interface updates 27 * Some minor interface updates
25 * 28 *
26 * Revision 1.2 2002/10/07 17:34:24 eilers 29 * Revision 1.2 2002/10/07 17:34:24 eilers
27 * added OBackendFactory for advanced backend access 30 * added OBackendFactory for advanced backend access
28 * 31 *
29 * Revision 1.1 2002/09/27 17:11:44 eilers 32 * Revision 1.1 2002/09/27 17:11:44 eilers
30 * Added API for accessing the Contact-Database ! It is compiling, but 33 * Added API for accessing the Contact-Database ! It is compiling, but
31 * please do not expect that anything is working ! 34 * please do not expect that anything is working !
@@ -245,24 +248,41 @@ class OContactAccessBackend_XML : public OContactAccessBackend {
245 } 248 }
246 } 249 }
247 if ( allcorrect ){ 250 if ( allcorrect ){
248 m_currentQuery[arraycounter++] = (*it).uid(); 251 m_currentQuery[arraycounter++] = (*it).uid();
249 } 252 }
250 } 253 }
251 254
252 // Shrink to fit.. 255 // Shrink to fit..
253 m_currentQuery.resize(arraycounter); 256 m_currentQuery.resize(arraycounter);
254 257
255 return m_currentQuery; 258 return m_currentQuery;
256 } 259 }
260
261 QArray<int> matchRegexp( const QRegExp &r ) const{
262 QArray<int> m_currentQuery( m_contactList.count() );
263 QValueListConstIterator<OContact> it;
264 uint arraycounter = 0;
265
266 for( it = m_contactList.begin(); it != m_contactList.end(); ++it ){
267 if ( (*it).match( r ) ){
268 m_currentQuery[arraycounter++] = (*it).uid();
269 }
270
271 }
272 // Shrink to fit..
273 m_currentQuery.resize(arraycounter);
274
275 return m_currentQuery;
276 }
257 277
258 const uint querySettings() 278 const uint querySettings()
259 { 279 {
260 return ( OContactAccess::WildCards 280 return ( OContactAccess::WildCards
261 & OContactAccess::IgnoreCase 281 & OContactAccess::IgnoreCase
262 & OContactAccess::RegExp 282 & OContactAccess::RegExp
263 & OContactAccess::ExactMatch ); 283 & OContactAccess::ExactMatch );
264 } 284 }
265 285
266 bool hasQuerySettings (uint querySettings) const 286 bool hasQuerySettings (uint querySettings) const
267 { 287 {
268 /* OContactAccess::IgnoreCase may be added with one 288 /* OContactAccess::IgnoreCase may be added with one
diff --git a/libopie2/opiepim/core/ocontactaccess.cpp b/libopie2/opiepim/core/ocontactaccess.cpp
index 2ca0283..f868b53 100644
--- a/libopie2/opiepim/core/ocontactaccess.cpp
+++ b/libopie2/opiepim/core/ocontactaccess.cpp
@@ -12,24 +12,27 @@
12 * Info: This class could just work with a change in the header-file 12 * Info: This class could just work with a change in the header-file
13 * of the Contact class ! Therefore our libopie only compiles 13 * of the Contact class ! Therefore our libopie only compiles
14 * with our version of libqpe 14 * with our version of libqpe
15 * ===================================================================== 15 * =====================================================================
16 * ToDo: XML-Backend: Automatic reload if something was changed... 16 * ToDo: XML-Backend: Automatic reload if something was changed...
17 * 17 *
18 * 18 *
19 * ===================================================================== 19 * =====================================================================
20 * Version: $Id$ 20 * Version: $Id$
21 * ===================================================================== 21 * =====================================================================
22 * History: 22 * History:
23 * $Log$ 23 * $Log$
24 * Revision 1.6 2002/11/01 15:10:42 eilers
25 * Added regExp-search in database for all fields in a contact.
26 *
24 * Revision 1.5 2002/10/16 10:52:40 eilers 27 * Revision 1.5 2002/10/16 10:52:40 eilers
25 * Added some docu to the interface and now using the cache infrastucture by zecke.. :) 28 * Added some docu to the interface and now using the cache infrastucture by zecke.. :)
26 * 29 *
27 * Revision 1.4 2002/10/14 16:21:54 eilers 30 * Revision 1.4 2002/10/14 16:21:54 eilers
28 * Some minor interface updates 31 * Some minor interface updates
29 * 32 *
30 * Revision 1.3 2002/10/07 17:34:24 eilers 33 * Revision 1.3 2002/10/07 17:34:24 eilers
31 * added OBackendFactory for advanced backend access 34 * added OBackendFactory for advanced backend access
32 * 35 *
33 * Revision 1.2 2002/10/02 16:18:11 eilers 36 * Revision 1.2 2002/10/02 16:18:11 eilers
34 * debugged and seems to work almost perfectly .. 37 * debugged and seems to work almost perfectly ..
35 * 38 *
@@ -111,24 +114,29 @@ bool OContactAccess::save ()
111 reload(); 114 reload();
112 115
113 bool status = OPimAccessTemplate<OContact>::save(); 116 bool status = OPimAccessTemplate<OContact>::save();
114 if ( !status ) return false; 117 if ( !status ) return false;
115 118
116 /* Now tell everyone that new data is available. 119 /* Now tell everyone that new data is available.
117 */ 120 */
118 QCopEnvelope e( "QPE/PIM", "addressbookUpdated()" ); 121 QCopEnvelope e( "QPE/PIM", "addressbookUpdated()" );
119 122
120 return true; 123 return true;
121} 124}
122 125
126ORecordList<OContact> OContactAccess::matchRegexp( const QRegExp &r ) const{
127 QArray<int> matchingContacts = m_backEnd -> matchRegexp( r );
128 return ( ORecordList<OContact>(matchingContacts, this) );
129}
130
123const uint OContactAccess::querySettings() 131const uint OContactAccess::querySettings()
124{ 132{
125 return ( m_backEnd->querySettings() ); 133 return ( m_backEnd->querySettings() );
126} 134}
127 135
128bool OContactAccess::hasQuerySettings ( int querySettings ) const 136bool OContactAccess::hasQuerySettings ( int querySettings ) const
129{ 137{
130 return ( m_backEnd->hasQuerySettings ( querySettings ) ); 138 return ( m_backEnd->hasQuerySettings ( querySettings ) );
131} 139}
132 140
133 141
134bool OContactAccess::wasChangedExternally()const 142bool OContactAccess::wasChangedExternally()const
diff --git a/libopie2/opiepim/core/ocontactaccess.h b/libopie2/opiepim/core/ocontactaccess.h
index da9c942..b4921d5 100644
--- a/libopie2/opiepim/core/ocontactaccess.h
+++ b/libopie2/opiepim/core/ocontactaccess.h
@@ -8,24 +8,27 @@
8 *This program is free software; you can redistribute it and/or 8 *This program is free software; you can redistribute it and/or
9 *modify it under the terms of the GNU Library General Public 9 *modify it under the terms of the GNU Library General Public
10 * License as published by the Free Software Foundation; 10 * License as published by the Free Software Foundation;
11 * either version 2 of the License, or (at your option) any later 11 * either version 2 of the License, or (at your option) any later
12 * version. 12 * version.
13 * ===================================================================== 13 * =====================================================================
14 * ToDo: Define enum for query settings 14 * ToDo: Define enum for query settings
15 * ===================================================================== 15 * =====================================================================
16 * Version: $Id$ 16 * Version: $Id$
17 * ===================================================================== 17 * =====================================================================
18 * History: 18 * History:
19 * $Log$ 19 * $Log$
20 * Revision 1.4 2002/11/01 15:10:42 eilers
21 * Added regExp-search in database for all fields in a contact.
22 *
20 * Revision 1.3 2002/10/16 10:52:40 eilers 23 * Revision 1.3 2002/10/16 10:52:40 eilers
21 * Added some docu to the interface and now using the cache infrastucture by zecke.. :) 24 * Added some docu to the interface and now using the cache infrastucture by zecke.. :)
22 * 25 *
23 * Revision 1.2 2002/10/14 16:21:54 eilers 26 * Revision 1.2 2002/10/14 16:21:54 eilers
24 * Some minor interface updates 27 * Some minor interface updates
25 * 28 *
26 * Revision 1.1 2002/09/27 17:11:44 eilers 29 * Revision 1.1 2002/09/27 17:11:44 eilers
27 * Added API for accessing the Contact-Database ! It is compiling, but 30 * Added API for accessing the Contact-Database ! It is compiling, but
28 * please do not expect that anything is working ! 31 * please do not expect that anything is working !
29 * I will debug that stuff in the next time .. 32 * I will debug that stuff in the next time ..
30 * Please read README_COMPILE for compiling ! 33 * Please read README_COMPILE for compiling !
31 * 34 *
@@ -39,24 +42,25 @@
39#include <qpe/qcopenvelope_qws.h> 42#include <qpe/qcopenvelope_qws.h>
40 43
41#include <qvaluelist.h> 44#include <qvaluelist.h>
42#include <qfileinfo.h> 45#include <qfileinfo.h>
43 46
44#include "ocontact.h" 47#include "ocontact.h"
45#include "ocontactaccessbackend.h" 48#include "ocontactaccessbackend.h"
46#include "opimaccesstemplate.h" 49#include "opimaccesstemplate.h"
47 50
48/** Class to access the contacts database. 51/** Class to access the contacts database.
49 * This is just a frontend for the real database handling which is 52 * This is just a frontend for the real database handling which is
50 * done by the backend. 53 * done by the backend.
54 * @see OPimAccessTemplate
51 */ 55 */
52class OContactAccess: public QObject, public OPimAccessTemplate<OContact> 56class OContactAccess: public QObject, public OPimAccessTemplate<OContact>
53{ 57{
54 Q_OBJECT 58 Q_OBJECT
55 59
56 public: 60 public:
57 /** Create Database with contacts (addressbook). 61 /** Create Database with contacts (addressbook).
58 * @param appname Name of application which wants access to the database 62 * @param appname Name of application which wants access to the database
59 * (i.e. "todolist") 63 * (i.e. "todolist")
60 * @param filename The name of the database file. If not set, the default one 64 * @param filename The name of the database file. If not set, the default one
61 * is used. 65 * is used.
62 * @param backend Pointer to an alternative Backend. If not set, we will use 66 * @param backend Pointer to an alternative Backend. If not set, we will use
@@ -72,26 +76,30 @@ class OContactAccess: public QObject, public OPimAccessTemplate<OContact>
72 ~OContactAccess (); 76 ~OContactAccess ();
73 77
74 /** Constants for query. 78 /** Constants for query.
75 * Use this constants to set the query parameters. 79 * Use this constants to set the query parameters.
76 * Note: <i>query_IgnoreCase</i> just make sense with one of the other attributes ! 80 * Note: <i>query_IgnoreCase</i> just make sense with one of the other attributes !
77 * @see queryByExample() 81 * @see queryByExample()
78 */ 82 */
79 enum QuerySettings { 83 enum QuerySettings {
80 WildCards = 0x0001, 84 WildCards = 0x0001,
81 IgnoreCase = 0x0002, 85 IgnoreCase = 0x0002,
82 RegExp = 0x0004, 86 RegExp = 0x0004,
83 ExactMatch = 0x0008, 87 ExactMatch = 0x0008,
88 MatchOne = 0x0010 // Only one Entry must match
84 }; 89 };
85 90
91
92 ORecordList<OContact> matchRegexp( const QRegExp &r )const;
93
86 /** Return all possible settings. 94 /** Return all possible settings.
87 * @return All settings provided by the current backend 95 * @return All settings provided by the current backend
88 * (i.e.: query_WildCards & query_IgnoreCase) 96 * (i.e.: query_WildCards & query_IgnoreCase)
89 */ 97 */
90 const uint querySettings(); 98 const uint querySettings();
91 99
92 /** Check whether settings are correct. 100 /** Check whether settings are correct.
93 * @return <i>true</i> if the given settings are correct and possible. 101 * @return <i>true</i> if the given settings are correct and possible.
94 */ 102 */
95 bool hasQuerySettings ( int querySettings ) const; 103 bool hasQuerySettings ( int querySettings ) const;
96 104
97 /** 105 /**
diff --git a/libopie2/opiepim/ocontact.h b/libopie2/opiepim/ocontact.h
index 382ab94..038a59f 100644
--- a/libopie2/opiepim/ocontact.h
+++ b/libopie2/opiepim/ocontact.h
@@ -98,29 +98,25 @@ public:
98 // personal 98 // personal
99 void setSpouse( const QString &v ) { replace( Qtopia::Spouse, v ); } 99 void setSpouse( const QString &v ) { replace( Qtopia::Spouse, v ); }
100 void setGender( const QString &v ) { replace( Qtopia::Gender, v ); } 100 void setGender( const QString &v ) { replace( Qtopia::Gender, v ); }
101 void setBirthday( const QDate &v ); 101 void setBirthday( const QDate &v );
102 void setAnniversary( const QDate &v ); 102 void setAnniversary( const QDate &v );
103 void setNickname( const QString &v ) { replace( Qtopia::Nickname, v ); } 103 void setNickname( const QString &v ) { replace( Qtopia::Nickname, v ); }
104 void setChildren( const QString &v ); 104 void setChildren( const QString &v );
105 105
106 // other 106 // other
107 void setNotes( const QString &v ) { replace( Qtopia::Notes, v); } 107 void setNotes( const QString &v ) { replace( Qtopia::Notes, v); }
108 108
109 bool match( const QString &regexp ) const; 109 bool match( const QString &regexp ) const;
110
111// DON'T ATTEMPT TO USE THIS
112#ifdef QTOPIA_INTERNAL_CONTACT_MRE
113 bool match( const QRegExp &regexp ) const; 110 bool match( const QRegExp &regexp ) const;
114#endif
115 111
116// // custom 112// // custom
117// void setCustomField( const QString &key, const QString &v ) 113// void setCustomField( const QString &key, const QString &v )
118// { replace(Custom- + key, v ); } 114// { replace(Custom- + key, v ); }
119 115
120 // name 116 // name
121 QString fullName() const; 117 QString fullName() const;
122 QString title() const { return find( Qtopia::Title ); } 118 QString title() const { return find( Qtopia::Title ); }
123 QString firstName() const { return find( Qtopia::FirstName ); } 119 QString firstName() const { return find( Qtopia::FirstName ); }
124 QString middleName() const { return find( Qtopia::MiddleName ); } 120 QString middleName() const { return find( Qtopia::MiddleName ); }
125 QString lastName() const { return find( Qtopia::LastName ); } 121 QString lastName() const { return find( Qtopia::LastName ); }
126 QString suffix() const { return find( Qtopia::Suffix ); } 122 QString suffix() const { return find( Qtopia::Suffix ); }