author | eilers <eilers> | 2004-04-28 09:22:02 (UTC) |
---|---|---|
committer | eilers <eilers> | 2004-04-28 09:22:02 (UTC) |
commit | 134b7accd6bdc8fbc160a42f7c52c585e73f4add (patch) (side-by-side diff) | |
tree | 5e221e990d0c94e38d816e147762f205733b0e72 /libopie2/opiepim/core | |
parent | 8ce67859c54234dabd88e17a0bc72369ea8301a3 (diff) | |
download | opie-134b7accd6bdc8fbc160a42f7c52c585e73f4add.zip opie-134b7accd6bdc8fbc160a42f7c52c585e73f4add.tar.gz opie-134b7accd6bdc8fbc160a42f7c52c585e73f4add.tar.bz2 |
Some modifications to alow use of generic OPimRecords without need to
cast them manually to the right type
-rw-r--r-- | libopie2/opiepim/core/ocontactaccess.cpp | 6 | ||||
-rw-r--r-- | libopie2/opiepim/core/ocontactaccess.h | 5 | ||||
-rw-r--r-- | libopie2/opiepim/core/odatebookaccess.cpp | 5 | ||||
-rw-r--r-- | libopie2/opiepim/core/odatebookaccess.h | 6 | ||||
-rw-r--r-- | libopie2/opiepim/core/opimaccesstemplate.h | 28 | ||||
-rw-r--r-- | libopie2/opiepim/core/opimtemplatebase.h | 16 | ||||
-rw-r--r-- | libopie2/opiepim/core/otodoaccess.cpp | 7 | ||||
-rw-r--r-- | libopie2/opiepim/core/otodoaccess.h | 6 |
8 files changed, 64 insertions, 15 deletions
diff --git a/libopie2/opiepim/core/ocontactaccess.cpp b/libopie2/opiepim/core/ocontactaccess.cpp index 4f9b504..67f267f 100644 --- a/libopie2/opiepim/core/ocontactaccess.cpp +++ b/libopie2/opiepim/core/ocontactaccess.cpp @@ -52,6 +52,7 @@ #include <stdlib.h> #include <opie2/ocontactaccessbackend_xml.h> +#include <opie2/opimresolver.h> namespace Opie { @@ -149,4 +150,9 @@ void OPimContactAccess::copMessage( const QCString &msg, const QByteArray & ) } } +int OPimContactAccess::rtti() const +{ + return OPimResolver::AddressBook; +} + } diff --git a/libopie2/opiepim/core/ocontactaccess.h b/libopie2/opiepim/core/ocontactaccess.h index cf5333a..4429b6f 100644 --- a/libopie2/opiepim/core/ocontactaccess.h +++ b/libopie2/opiepim/core/ocontactaccess.h @@ -127,6 +127,11 @@ class OPimContactAccess: public QObject, public OPimAccessTemplate<OPimContact> * @return true if successful */ bool save(); + + /** + * Return identification of used records + */ + int rtti() const; signals: /* Signal is emitted if the database was changed. Therefore diff --git a/libopie2/opiepim/core/odatebookaccess.cpp b/libopie2/opiepim/core/odatebookaccess.cpp index ac310c1..29298ea 100644 --- a/libopie2/opiepim/core/odatebookaccess.cpp +++ b/libopie2/opiepim/core/odatebookaccess.cpp @@ -28,6 +28,7 @@ */ #include <opie2/obackendfactory.h> #include <opie2/odatebookaccess.h> +#include <opie2/opimresolver.h> namespace Opie { /** @@ -108,5 +109,9 @@ OEffectiveEvent::ValueList ODateBookAccess::effectiveNonRepeatingEvents( const Q OEffectiveEvent::ValueList ODateBookAccess::effectiveNonRepeatingEvents( const QDateTime& start ) const { return m_backEnd->effectiveNonRepeatingEvents( start ); } +int ODateBookAccess::rtti() const +{ + return OPimResolver::DateBook; +} } diff --git a/libopie2/opiepim/core/odatebookaccess.h b/libopie2/opiepim/core/odatebookaccess.h index 6c9290f..c6c3598 100644 --- a/libopie2/opiepim/core/odatebookaccess.h +++ b/libopie2/opiepim/core/odatebookaccess.h @@ -64,6 +64,12 @@ public: OEffectiveEvent::ValueList effectiveNonRepeatingEvents( const QDate& from, const QDate& to ) const; OEffectiveEvent::ValueList effectiveNonRepeatingEvents( const QDateTime& start ) const; + /** + * Return identification of used records + */ + int rtti() const; + + private: ODateBookAccessBackend* m_backEnd; class Private; diff --git a/libopie2/opiepim/core/opimaccesstemplate.h b/libopie2/opiepim/core/opimaccesstemplate.h index f1bcc44..d4c5fbb 100644 --- a/libopie2/opiepim/core/opimaccesstemplate.h +++ b/libopie2/opiepim/core/opimaccesstemplate.h @@ -1,6 +1,7 @@ /* This file is part of the Opie Project - Copyright (C) The Main Author <main-author@whereever.org> + Copyright (C) Holger Freyther <zecke@handhelds.org> + Copyright (C) Stefan Eilers <eilers.stefan@epost.de> =. Copyright (C) The Opie Team <opie-devel@handhelds.org> .=l. .>+-= @@ -137,6 +138,13 @@ public: */ virtual bool add( const T& t ) ; bool add( const OPimRecord& ); + // Needed for real generic access (eilers) + // Info: Take this if you are working with OPimRecord, which is a generic base class, and + // you need to add it into any database, you cannot generate a reference to + // it and casting may be not approriate, too. + // But take care that the accessing database is compatible to the real type of OPimRecord !! + bool add( const OPimRecord* ); + /* only the uid matters */ /** @@ -271,15 +279,29 @@ bool OPimAccessTemplate<T>::add( const T& t ) { cache( t ); return m_backEnd->add( t ); } + template <class T> bool OPimAccessTemplate<T>::add( const OPimRecord& rec) { /* same type */ - if ( rec.rtti() == T::rtti() ) { - const T &t = static_cast<const T&>(rec); + T tempInstance; + if ( rec.rtti() == tempInstance.rtti() ) { + const T& t = static_cast<const T&>(rec); return add(t); } return false; } + +template <class T> +bool OPimAccessTemplate<T>::add( const OPimRecord* rec) { + /* same type, but pointer */ + T tempInstance; + if ( rec -> rtti() == tempInstance.rtti() ) { + const T* t = static_cast<const T*>(rec); + return add( *t ); + } + return false; +} + template <class T> bool OPimAccessTemplate<T>::remove( const T& t ) { return remove( t.uid() ); diff --git a/libopie2/opiepim/core/opimtemplatebase.h b/libopie2/opiepim/core/opimtemplatebase.h index 58cbfeb..b48dfed 100644 --- a/libopie2/opiepim/core/opimtemplatebase.h +++ b/libopie2/opiepim/core/opimtemplatebase.h @@ -1,6 +1,6 @@ /* This file is part of the Opie Project - Copyright (C) The Main Author <main-author@whereever.org> + Copyright (C) Holger Freyther <zecke@handhelds.org> =. Copyright (C) The Opie Team <opie-devel@handhelds.org> .=l. .>+-= @@ -49,10 +49,11 @@ struct OPimBase { /** * return the rtti */ - virtual int rtti()= 0; + virtual int rtti() const = 0; virtual OPimRecord* record()const = 0; virtual OPimRecord* record(int uid)const = 0; virtual bool add( const OPimRecord& ) = 0; + virtual bool add( const OPimRecord* ) = 0; virtual bool remove( int uid ) = 0; virtual bool remove( const OPimRecord& ) = 0; virtual void clear() = 0; @@ -90,8 +91,6 @@ public: virtual void cache( const T& )const = 0; virtual void setSaneCacheSize( int ) = 0; - /* reimplement of OPimBase */ - int rtti(); OPimRecord* record()const; OPimRecord* record(int uid )const; static T* rec(); @@ -100,14 +99,7 @@ private: OTemplateBasePrivate *d; }; -/* - * implementation - */ -template <class T> -int -OTemplateBase<T>::rtti() { - return T::rtti(); -} + template <class T> OPimRecord* OTemplateBase<T>::record()const { T* t = new T; diff --git a/libopie2/opiepim/core/otodoaccess.cpp b/libopie2/opiepim/core/otodoaccess.cpp index 83750d5..6fa0089 100644 --- a/libopie2/opiepim/core/otodoaccess.cpp +++ b/libopie2/opiepim/core/otodoaccess.cpp @@ -33,6 +33,7 @@ // #include "otodoaccesssql.h" #include <opie2/otodoaccess.h> #include <opie2/obackendfactory.h> +#include <opie2/opimresolver.h> namespace Opie { OPimTodoAccess::OPimTodoAccess( OPimTodoAccessBackend* end, enum Access ) @@ -90,4 +91,10 @@ bool OPimTodoAccess::backendSupports( int attr, const QString& ar) const{ return backendSupport(ar).testBit( attr ); } + +int OPimTodoAccess::rtti() const +{ + return OPimResolver::TodoList; +} + } diff --git a/libopie2/opiepim/core/otodoaccess.h b/libopie2/opiepim/core/otodoaccess.h index 51f3793..3f5af30 100644 --- a/libopie2/opiepim/core/otodoaccess.h +++ b/libopie2/opiepim/core/otodoaccess.h @@ -116,6 +116,12 @@ public: * @param backend Will be used in the future when we support multiple backends */ bool backendSupports( int attr, const QString& backend = QString::null )const; + + + /** + * Return identification of used records + */ + int rtti() const; signals: /** * if the OPimTodoAccess was changed |