summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/opiepim/ChangeLog3
-rw-r--r--libopie2/opiepim/core/ocontactaccess.h2
-rw-r--r--libopie2/opiepim/core/opimaccesstemplate.h76
-rw-r--r--libopie2/opiepim/core/opimtemplatebase.h2
4 files changed, 74 insertions, 9 deletions
diff --git a/libopie2/opiepim/ChangeLog b/libopie2/opiepim/ChangeLog
index dd57259..564e92a 100644
--- a/libopie2/opiepim/ChangeLog
+++ b/libopie2/opiepim/ChangeLog
@@ -1,12 +1,15 @@
+2004-12-28 Stefan Eilers <stefan@eilers-online.net>
+ * Make improved query by example accessable via frontend
+ * Some API improvement
2004-11-23 Stefan Eilers <stefan@eilers-online.net>
* Implement fast and full featured version of sorted() for addressbook
* Implement generic queryByExample for all Addressboook backends. It allows incremental search.
* Update of API Documentation
2004-11-18 Holger Freyther <freyther@handhelds.org>
* Every Access can give a set of Occurrences for a period or a datetime
* QueryByExample, Find, Sort can be generically accessed by OPimBase
pointer interface
* OPimBackendOccurrence gets split up to OPimOccurrences by
OPimTemplateBase
* Add safeCast to various OPimRecords
* Kill memleak in OPimTodo
diff --git a/libopie2/opiepim/core/ocontactaccess.h b/libopie2/opiepim/core/ocontactaccess.h
index bd85b4e..5051321 100644
--- a/libopie2/opiepim/core/ocontactaccess.h
+++ b/libopie2/opiepim/core/ocontactaccess.h
@@ -111,25 +111,25 @@ class OPimContactAccess: public QObject, public OPimAccessTemplate<OPimContact>
* to react itself, it should be disabled by setting it to <b>false</b>
* @see OPimContactAccessBackend
*/
OPimContactAccess (const QString appname, const QString filename = 0l,
OPimContactAccessBackend* backend = 0l, bool handlesync = true);
~OPimContactAccess ();
/**
* Return all possible settings for queryByExample().
* @return All settings provided by the current backend
* (i.e.: WildCards & IgnoreCase)
- * @see QuerySettings in OPimBase for details of the parameter
+ * @see QuerySettings in OPimBase for details of the parameter, queryByExample()
*/
const uint querySettings();
/**
* Check whether settings are correct for queryByExample().
* @return <i>true</i> if the given settings are correct and possible.
* @see QuerySettings in OPimBase for details of the parameter
*/
bool hasQuerySettings ( int querySettings ) const;
/**
* if the resource was changed externally.
diff --git a/libopie2/opiepim/core/opimaccesstemplate.h b/libopie2/opiepim/core/opimaccesstemplate.h
index 073d5f9..3875f09 100644
--- a/libopie2/opiepim/core/opimaccesstemplate.h
+++ b/libopie2/opiepim/core/opimaccesstemplate.h
@@ -77,25 +77,65 @@ public:
bool load();
virtual bool reload();
bool save();
void clear() ;
//@}
bool wasChangedExternally()const;
//@{
virtual List allRecords()const;
virtual List matchRegexp( const QRegExp &r ) const;
- virtual List queryByExample( const T& t, int querySettings, const QDateTime& d = QDateTime() );
+
+ /**
+ * Query by example search interface.
+ * "Query by Example" provides a very powerful search engine. Use the query object
+ * (this may be a contact, a todo or databook event)
+ * as a search mask which is converted into a query regarding the querySettings. If a time period is needed
+ * (as for OpimBase::DateDiff), you have to use the date/time in the query object and the endperiod (the last parameter).
+ * @see QuerySettings in class OPimBase
+ * @param query The object which contains the query set
+ * @param querySettings This parameter defines what should be searched and how the query should be interpreted
+ * @param endperiod Defines the end of a period for some special queries.
+ */
+ virtual List queryByExample( const T& query, int querySettings, const QDateTime& endperiod = QDateTime() );
+
+ /**
+ * Generic query by example search interface. This is a special version which handles generic OPimRecord types. They are converted
+ * automatically into the right datatype.
+ * "Query by Example" provides a very powerful search engine. Use the query object (this may be a contact, a todo or databook event)
+ * as a search mask which is converted into a query regarding the querySettings. If a time period is needed
+ * (as for OpimBase::DateDiff), you have to use the date/time in the query object and the endperiod (the last parameter).
+ * @see QuerySettings in class OPimBase
+ * @param query The object which contains the query set
+ * @param querySettings This parameter defines what should be searched and how the query should be interpreted
+ * @param endperiod Defines the end of a period for some special queries.
+ */
+ virtual List queryByExample( const OPimRecord* query, int querySettings, const QDateTime& endperiod = QDateTime() );
+ /**
+ * Incremental query by example search interface. Providing incremental search, this one provides the feature
+ * to search in a list of records which may be returned by an other search.
+ * "Query by Example" provides a very powerful search engine. Use the query object (this may be a contact, a todo or databook event)
+ * as a search mask which is converted into a query regarding the querySettings. If a time period is needed
+ * (as for OpimBase::DateDiff), you have to use the date/time in the query object and the endperiod (the last parameter).
+ * @see QuerySettings in class OPimBase
+ * @param uidlist List of uid's which should be incorporated into the next search
+ * @param query The object which contains the query set
+ * @param querySettings This parameter defines what should be searched and how the query should be interpreted
+ * @param endperiod Defines the end of a period for some special queries.
+ */
+ virtual List queryByExample( const OPimAccessTemplate::List& uidlist, const T& query, int querySettings,
+ const QDateTime& endperiod = QDateTime() );
+
virtual T find( UID uid )const;
virtual T find( UID uid, const QArray<int>&,
uint current, typename OTemplateBase<T>::CacheDirection dir = OTemplateBase<T>::Forward )const;
//@}
/**
* Get sorted lists..
* @see OPimContactAccess, OPimTodoAccess and ODateBookAccess regarding more info for the following params:
* @param list of UID's received by allRecords() or others...
* @param sortOrder Setting the sort order defined by enum SortOrder
* @param ascending Sort in ascending order if true, otherwise descending
* @param sortFilter Setting the sort filter defined by enum SortFilter
@@ -260,38 +300,60 @@ typename OPimAccessTemplate<T>::List OPimAccessTemplate<T>::matchRegexp( const Q
return lis;
}
/**
* find the OPimRecord uid
*/
template <class T>
QArray<int> OPimAccessTemplate<T>::records()const {
return m_backEnd->allRecords();
}
-/**
- * queryByExample.
- * @see otodoaccess, ocontactaccess
- */
template <class T>
typename OPimAccessTemplate<T>::List
OPimAccessTemplate<T>::queryByExample( const T& t, int settings, const QDateTime& d ) {
QArray<int> ints = m_backEnd->queryByExample( t, settings, d );
- List lis(ints, this );
- return lis;
+ List list(ints, this );
+ return list;
}
template <class T>
+typename OPimAccessTemplate<T>::List
+OPimAccessTemplate<T>::queryByExample( const OPimRecord* t, int settings, const QDateTime& d ) {
+ T tempInstance;
+
+ if ( t->rtti() == tempInstance.rtti() ) {
+ QArray<int> ints = m_backEnd->queryByExample( t, settings, d );
+ List list( ints, this );
+ return list;
+ } else {
+ owarn << "Query not possible: Objecttype mismatch" << oendl;
+ }
+
+ return List();
+}
+
+template <class T>
+typename OPimAccessTemplate<T>::List
+OPimAccessTemplate<T>::queryByExample( const OPimAccessTemplate::List& uidlist, const T& t, int settings, const QDateTime& d ) {
+ QArray<int> ints = m_backEnd->queryByExample( uidlist.uids(), t, settings, d );
+
+ List list( ints, this );
+ return list;
+}
+
+
+template <class T>
T OPimAccessTemplate<T>::find( UID uid ) const{
// First search in cache..
if ( m_cache.contains( uid ) )
return m_cache.find( uid );
T t = m_backEnd->find( uid );
cache( t );
return t;
}
diff --git a/libopie2/opiepim/core/opimtemplatebase.h b/libopie2/opiepim/core/opimtemplatebase.h
index c8abab4..075e573 100644
--- a/libopie2/opiepim/core/opimtemplatebase.h
+++ b/libopie2/opiepim/core/opimtemplatebase.h
@@ -125,25 +125,25 @@ struct OPimBase {
/** make this enum 16bit large */
LastSortOrderBase = 0xffff
};
/**
* Sort a list of Items with the help of the sorted() function.
* The Item you provide in SortOrder will be used
* for sorting.
*
* @see OPimAccessTemplate<>::sorted()
*/
enum SortFilterBase {
- /** Do not filter anything. */
+ /** Do not filter anything. */
FilterOff = 0,
/** Use given Categories for filter */
FilterCategory = 1,
/** The first available custom filter defined in the specialized frontends */
FilterCustom = 1024,
LastSortFilterBase = 0xffffffff
};
virtual UIDArray matchRegexpSimple( const QRegExp& r )const = 0;
virtual UIDArray queryByExampleSimple( const OPimRecord*, int settings,
const QDateTime& d = QDateTime() )const = 0;
virtual UIDArray sortedSimple( const UIDArray& uid, bool ascending,