summaryrefslogtreecommitdiff
path: root/libopie2/opiepim/core
Side-by-side diff
Diffstat (limited to 'libopie2/opiepim/core') (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/opiepim/core/opimaccesstemplate.h82
-rw-r--r--libopie2/opiepim/core/opimrecord.cpp90
-rw-r--r--libopie2/opiepim/core/opimrecord.h117
3 files changed, 289 insertions, 0 deletions
diff --git a/libopie2/opiepim/core/opimaccesstemplate.h b/libopie2/opiepim/core/opimaccesstemplate.h
new file mode 100644
index 0000000..f2a241d
--- a/dev/null
+++ b/libopie2/opiepim/core/opimaccesstemplate.h
@@ -0,0 +1,82 @@
+#ifndef OPIE_PIM_ACCESS_TEMPLATE_H
+#define OPIE_PIM_ACCESS_TEMPLATE_H
+
+#include <qarray.h>
+
+#include <opie/opimrecord.h>
+#include <opie/opimaccessbackend.h>
+#include <opie/orecordlist.h>
+
+template <class T = OPimRecord >
+class OPimAccessTemplate {
+public:
+ typedef ORecordList<T> List;
+ typedef OPimAccessBackend<T> BackEnd;
+ OPimAccessTemplate( BackEnd* end)
+ : m_backEnd( end ) {
+ }
+ ~OPimAccessTemplate() {
+ delete m_backEnd;
+ }
+ virtual void load() {
+ m_backEnd->load();
+ }
+ virtual void reload() {
+ m_backEnd->reload();
+ }
+ virtual void save() {
+ m_backEnd->save();
+ }
+
+ /*
+ *do array to Records conversion
+ * QArray<int> ids
+ */
+ virtual List allRecords()const {
+ QArray<int> ints = m_backEnd->allRecords();
+
+ List lis( ints, this );
+ return lis;
+ }
+ virtual List queryByExample( const T& t, int sortOrder ) {
+ QArray<int> ints = m_backEnd->query( t, sortOrder );
+ List lis( ints, this );
+
+ return lis;
+ }
+ /* implement QCache here */
+ virtual T find( int uid ) {
+ T t = m_backEnd->find( uid );
+ return t;
+ }
+
+ /* invalidate cache here */
+ virtual void clear() {
+ invalidateCache();
+ m_backEnd->clear();
+ }
+ virtual bool add( const T& t ) {
+ return m_backEnd->add( t );
+ }
+
+ /* only the uid matters */
+ virtual bool remove( const T& t ) {
+ /* remove from cache */
+ return m_backEnd->remove( t.uid() );
+ }
+ virtual bool remove( int uid ) {
+ /* remove from cache */
+ return m_backEnd->remove(uid);
+ }
+ virtual bool replace( const T& t) {
+ return m_backEnd->replace( t );
+ }
+protected:
+ void invalidateCache() {
+
+ }
+ BackEnd* m_backEnd;
+
+};
+
+#endif
diff --git a/libopie2/opiepim/core/opimrecord.cpp b/libopie2/opiepim/core/opimrecord.cpp
new file mode 100644
index 0000000..95de1df
--- a/dev/null
+++ b/libopie2/opiepim/core/opimrecord.cpp
@@ -0,0 +1,90 @@
+#include "opimrecord.h"
+
+OPimRecord::OPimRecord( int uid )
+ : Qtopia::Record() {
+ setUid( uid );
+ if ( uid == 1 )
+ assignUid();
+}
+OPimRecord::~OPimRecord() {
+}
+OPimRecord::OPimRecord( OPimRecord& rec )
+ : Qtopia::Record( rec )
+{
+ (*this) = rec;
+}
+
+OPimRecord &OPimRecord::operator=( const OPimRecord& rec) {
+ /* how do I call the parent copy operator ? */
+ setUid( rec.uid() );
+ setCategories( rec.categories() );
+ return *this;
+}
+QStringList OPimRecord::categoryNames()const {
+ QStringList list;
+
+ return list;
+}
+void OPimRecord::setCategoryName( const QStringList& ) {
+
+}
+void OPimRecord::addCategoryName( const QString& ) {
+
+}
+bool OPimRecord::isEmpty()const {
+ return ( uid() == 0 );
+}
+QStringList OPimRecord::relatedApps()const{
+ QStringList list;
+ QMap<QString, QArray<int> >::ConstIterator it;
+ for ( it = m_relations.begin(); it != m_relations.end(); ++it ) {
+ list << it.key();
+ }
+ return list;
+}
+QArray<int> OPimRecord::relations(const QString& app )const {
+ QArray<int> tmp;
+ QMap<QString, QArray<int> >::ConstIterator it;
+ it = m_relations.find( app);
+ if ( it != m_relations.end() )
+ tmp = it.data();
+ return tmp;
+}
+void OPimRecord::clearRelation( const QString& app ) {
+ m_relations.remove( app );
+}
+void OPimRecord::addRelation( const QString& app, int id ) {
+
+ QMap<QString, QArray<int> >::Iterator it;
+ QArray<int> tmp;
+
+ it = m_relations.find( app );
+ if ( it == m_relations.end() ) {
+ tmp.resize(1 );
+ tmp[0] = id;
+ }else{
+ tmp = it.data();
+ tmp.resize( tmp.size() + 1 );
+ tmp[tmp.size() - 1] = id;
+ }
+ m_relations.replace( app, tmp );
+}
+void OPimRecord::setRelations( const QString& app, QArray<int> ids ) {
+
+ QMap<QString, QArray<int> >::Iterator it;
+ QArray<int> tmp;
+
+ it = m_relations.find( app);
+ if ( it == m_relations.end() ) {
+ tmp = ids;
+ }else{
+ tmp = it.data();
+ int offset = tmp.size()-1;
+ tmp.resize( tmp.size() + ids.size() );
+ for (uint i = 0; i < ids.size(); i++ ) {
+ tmp[offset+i] = ids[i];
+ }
+
+ }
+ m_relations.replace( app, tmp );
+}
diff --git a/libopie2/opiepim/core/opimrecord.h b/libopie2/opiepim/core/opimrecord.h
new file mode 100644
index 0000000..a0e0413
--- a/dev/null
+++ b/libopie2/opiepim/core/opimrecord.h
@@ -0,0 +1,117 @@
+#ifndef OPIE_PIM_RECORD_H
+#define OPIE_PIM_RECORD_H
+
+#include <qmap.h>
+#include <qstring.h>
+#include <qstringlist.h>
+
+#include <qpe/palmtoprecord.h>
+
+class OPimRecord : public Qtopia::Record {
+public:
+ /**
+ * uid of 0 isEmpty
+ * uid of 1 will be assigned a new one
+ */
+ OPimRecord(int uid = 0);
+ ~OPimRecord();
+
+ /**
+ * copy c'tor
+ */
+ OPimRecord( OPimRecord& rec );
+
+ /**
+ * copy operator
+ */
+ OPimRecord &operator=( const OPimRecord& );
+
+ /**
+ * category names resolved
+ */
+ QStringList categoryNames()const;
+
+ /**
+ * set category names they will be resolved
+ */
+ void setCategoryName( const QStringList& );
+
+ /**
+ * addCategoryName adds a name
+ * to the internal category list
+ */
+ void addCategoryName( const QString& );
+
+ /**
+ * if a Record isEmpty
+ */
+ virtual bool isEmpty()const;
+
+ /**
+ * toRichText summary
+ */
+ virtual QString toRichText()const = 0;
+
+ /**
+ * a small one line summary
+ */
+ virtual QString toShortText()const = 0;
+
+ /**
+ * the name of the Record
+ */
+ virtual QString type()const = 0;
+
+ /**
+ * converts the internal structure to a map
+ */
+ virtual QMap<int, QString> toMap()const = 0;
+
+ /**
+ * key value representation of extra items
+ */
+ virtual QMap<QString, QString> toExtraMap()const = 0;
+
+ /**
+ * the name for a recordField
+ */
+ virtual QString recordField(int)const = 0;
+
+ /**
+ * the related apps names
+ */
+ QStringList relatedApps()const;
+
+ /**
+ * the realtions between an app
+ */
+ QArray<int> relations( const QString& app )const;
+
+ /**
+ *
+ */
+ void clearRelation( const QString& app );
+
+ /**
+ *
+ */
+ void addRelation( const QString& app, int id );
+
+ /**
+ *
+ */
+ void setRelations( const QString&, QArray<int> ids );
+
+protected:
+ QString crossToString()const;
+
+private:
+ class OPimRecordPrivate;
+ OPimRecordPrivate *d;
+ QMap<QString, QArray<int> > m_relations;
+
+};
+
+
+
+#endif