summaryrefslogtreecommitdiff
authorzecke <zecke>2002-11-15 15:31:47 (UTC)
committer zecke <zecke>2002-11-15 15:31:47 (UTC)
commit5a6e66edad1070f624d54320278d00372f112213 (patch) (unidiff)
treeab1028759194edace4c79cf90d18dc1362a84aa9
parent05f56fbbbe9ea5546f7503f4852fcab9c5b10a00 (diff)
downloadopie-5a6e66edad1070f624d54320278d00372f112213.zip
opie-5a6e66edad1070f624d54320278d00372f112213.tar.gz
opie-5a6e66edad1070f624d54320278d00372f112213.tar.bz2
Add the implementation for the XRef Manager
Add it to libopie.pro Adjust OPimRecord to use the new manager The backends do not support xref yet
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libopie/libopie.pro6
-rw-r--r--libopie/pim/opimrecord.cpp63
-rw-r--r--libopie/pim/opimrecord.h33
-rw-r--r--libopie/pim/opimxref.cpp47
-rw-r--r--libopie/pim/opimxref.h7
-rw-r--r--libopie/pim/opimxrefmanager.cpp69
-rw-r--r--libopie/pim/opimxrefmanager.h5
-rw-r--r--libopie/pim/opimxrefpartner.cpp43
-rw-r--r--libopie/pim/otodoaccessxml.cpp18
-rw-r--r--libopie2/opiepim/backend/otodoaccessxml.cpp18
-rw-r--r--libopie2/opiepim/core/opimrecord.cpp63
-rw-r--r--libopie2/opiepim/core/opimrecord.h33
-rw-r--r--libopie2/opiepim/core/opimxref.cpp47
-rw-r--r--libopie2/opiepim/core/opimxref.h7
-rw-r--r--libopie2/opiepim/core/opimxrefmanager.cpp69
-rw-r--r--libopie2/opiepim/core/opimxrefmanager.h5
-rw-r--r--libopie2/opiepim/core/opimxrefpartner.cpp43
17 files changed, 374 insertions, 202 deletions
diff --git a/libopie/libopie.pro b/libopie/libopie.pro
index 79d15bb..3e6156e 100644
--- a/libopie/libopie.pro
+++ b/libopie/libopie.pro
@@ -1,83 +1,89 @@
1TEMPLATE = lib 1TEMPLATE = lib
2CONFIG += qte warn_on release 2CONFIG += qte warn_on release
3HEADERS = ofontmenu.h \ 3HEADERS = ofontmenu.h \
4 ocolorbutton.h \ 4 ocolorbutton.h \
5 ofiledialog.h ofileselector.h tododb.h \ 5 ofiledialog.h ofileselector.h tododb.h \
6 ocheckitem.h todoevent.h todoresource.h \ 6 ocheckitem.h todoevent.h todoresource.h \
7 todovcalresource.h xmltree.h \ 7 todovcalresource.h xmltree.h \
8 colordialog.h colorpopupmenu.h \ 8 colordialog.h colorpopupmenu.h \
9 oclickablelabel.h oprocctrl.h \ 9 oclickablelabel.h oprocctrl.h \
10 oprocess.h odevice.h \ 10 oprocess.h odevice.h \
11 otimepicker.h otabwidget.h \ 11 otimepicker.h otabwidget.h \
12 otabbar.h otabinfo.h \ 12 otabbar.h otabinfo.h \
13 ofontselector.h \ 13 ofontselector.h \
14 pim/opimrecord.h \ 14 pim/opimrecord.h \
15 pim/otodo.h \ 15 pim/otodo.h \
16 pim/orecordlist.h \ 16 pim/orecordlist.h \
17 pim/opimaccesstemplate.h \ 17 pim/opimaccesstemplate.h \
18 pim/opimaccessbackend.h \ 18 pim/opimaccessbackend.h \
19 pim/otodoaccess.h \ 19 pim/otodoaccess.h \
20 pim/otodoaccessbackend.h \ 20 pim/otodoaccessbackend.h \
21 pim/ocontact.h \ 21 pim/ocontact.h \
22 pim/ocontactaccess.h \ 22 pim/ocontactaccess.h \
23 pim/ocontactaccessbackend.h \ 23 pim/ocontactaccessbackend.h \
24 pim/ocontactaccessbackend_xml.h \ 24 pim/ocontactaccessbackend_xml.h \
25 pim/ocontactaccessbackend_vcard.h \ 25 pim/ocontactaccessbackend_vcard.h \
26 pim/obackendfactory.h \ 26 pim/obackendfactory.h \
27 pim/opimcache.h \ 27 pim/opimcache.h \
28 pim/otodoaccessvcal.h \ 28 pim/otodoaccessvcal.h \
29 pim/orecur.h \ 29 pim/orecur.h \
30 pim/opimstate.h \ 30 pim/opimstate.h \
31 pim/opimxrefpartner.h \
32 pim/opimxref.h \
33 pim/opimxrefmanager.h \
31 orecurrancewidget.h \ 34 orecurrancewidget.h \
32 oticker.h 35 oticker.h
33# pim/otodoaccesssql.h \ 36# pim/otodoaccesssql.h \
34 37
35SOURCES = ofontmenu.cc \ 38SOURCES = ofontmenu.cc \
36 ocolorbutton.cpp \ 39 ocolorbutton.cpp \
37 xmltree.cc \ 40 xmltree.cc \
38 ofiledialog.cc ofileselector.cc \ 41 ofiledialog.cc ofileselector.cc \
39 ocheckitem.cpp tododb.cpp todoevent.cpp \ 42 ocheckitem.cpp tododb.cpp todoevent.cpp \
40 todovcalresource.cpp colordialog.cpp \ 43 todovcalresource.cpp colordialog.cpp \
41 colorpopupmenu.cpp oclickablelabel.cpp \ 44 colorpopupmenu.cpp oclickablelabel.cpp \
42 oprocctrl.cpp oprocess.cpp \ 45 oprocctrl.cpp oprocess.cpp \
43 odevice.cpp otimepicker.cpp \ 46 odevice.cpp otimepicker.cpp \
44 otabwidget.cpp otabbar.cpp \ 47 otabwidget.cpp otabbar.cpp \
45 ofontselector.cpp \ 48 ofontselector.cpp \
46 pim/otodo.cpp \ 49 pim/otodo.cpp \
47 pim/opimrecord.cpp \ 50 pim/opimrecord.cpp \
48 pim/otodoaccess.cpp \ 51 pim/otodoaccess.cpp \
49 pim/otodoaccessbackend.cpp \ 52 pim/otodoaccessbackend.cpp \
50 pim/otodoaccessxml.cpp \ 53 pim/otodoaccessxml.cpp \
51 pim/ocontact.cpp \ 54 pim/ocontact.cpp \
52 pim/ocontactaccess.cpp \ 55 pim/ocontactaccess.cpp \
53 pim/ocontactaccessbackend_vcard.cpp \ 56 pim/ocontactaccessbackend_vcard.cpp \
54 pim/otodoaccessvcal.cpp \ 57 pim/otodoaccessvcal.cpp \
55 pim/orecur.cpp \ 58 pim/orecur.cpp \
56 pim/opimstate.cpp \ 59 pim/opimstate.cpp \
60 pim/opimxrefpartner.cpp \
61 pim/opimxref.cpp \
62 pim/opimxrefmanager.cpp \
57 orecurrancewidget.cpp \ 63 orecurrancewidget.cpp \
58 oticker.cpp 64 oticker.cpp
59# pim/otodoaccesssql.cpp \ 65# pim/otodoaccesssql.cpp \
60 66
61TARGET = opie 67TARGET = opie
62INCLUDEPATH += $(OPIEDIR)/include 68INCLUDEPATH += $(OPIEDIR)/include
63DESTDIR = $(QTDIR)/lib$(PROJMAK) 69DESTDIR = $(QTDIR)/lib$(PROJMAK)
64#VERSION = 1.0.0 70#VERSION = 1.0.0
65 71
66# LIBS += -lopiesql 72# LIBS += -lopiesql
67 73
68INTERFACES = otimepickerbase.ui orecurrancebase.ui 74INTERFACES = otimepickerbase.ui orecurrancebase.ui
69 75
70TRANSLATIONS = ../i18n/de/libopie.ts \ 76TRANSLATIONS = ../i18n/de/libopie.ts \
71 ../i18n/en/libopie.ts \ 77 ../i18n/en/libopie.ts \
72 ../i18n/es/libopie.ts \ 78 ../i18n/es/libopie.ts \
73 ../i18n/fr/libopie.ts \ 79 ../i18n/fr/libopie.ts \
74 ../i18n/hu/libopie.ts \ 80 ../i18n/hu/libopie.ts \
75 ../i18n/ja/libopie.ts \ 81 ../i18n/ja/libopie.ts \
76 ../i18n/ko/libopie.ts \ 82 ../i18n/ko/libopie.ts \
77 ../i18n/no/libopie.ts \ 83 ../i18n/no/libopie.ts \
78 ../i18n/pl/libopie.ts \ 84 ../i18n/pl/libopie.ts \
79 ../i18n/pt/libopie.ts \ 85 ../i18n/pt/libopie.ts \
80 ../i18n/pt_BR/libopie.ts \ 86 ../i18n/pt_BR/libopie.ts \
81 ../i18n/sl/libopie.ts \ 87 ../i18n/sl/libopie.ts \
82 ../i18n/zh_CN/libopie.ts \ 88 ../i18n/zh_CN/libopie.ts \
83 ../i18n/zh_TW/libopie.ts 89 ../i18n/zh_TW/libopie.ts
diff --git a/libopie/pim/opimrecord.cpp b/libopie/pim/opimrecord.cpp
index 21cf131..0e3be9d 100644
--- a/libopie/pim/opimrecord.cpp
+++ b/libopie/pim/opimrecord.cpp
@@ -1,132 +1,81 @@
1#include <qpe/categories.h> 1#include <qpe/categories.h>
2#include <qpe/categoryselect.h> 2#include <qpe/categoryselect.h>
3 3
4#include "opimrecord.h" 4#include "opimrecord.h"
5 5
6Qtopia::UidGen OPimRecord::m_uidGen( Qtopia::UidGen::Qtopia ); 6Qtopia::UidGen OPimRecord::m_uidGen( Qtopia::UidGen::Qtopia );
7 7
8 8
9OPimRecord::OPimRecord( int uid ) 9OPimRecord::OPimRecord( int uid )
10 : Qtopia::Record() { 10 : Qtopia::Record() {
11 11
12 setUid( uid ); 12 setUid( uid );
13} 13}
14OPimRecord::~OPimRecord() { 14OPimRecord::~OPimRecord() {
15} 15}
16OPimRecord::OPimRecord( const OPimRecord& rec ) 16OPimRecord::OPimRecord( const OPimRecord& rec )
17 : Qtopia::Record( rec ) 17 : Qtopia::Record( rec )
18{ 18{
19 (*this) = rec; 19 (*this) = rec;
20} 20}
21 21
22OPimRecord &OPimRecord::operator=( const OPimRecord& rec) { 22OPimRecord &OPimRecord::operator=( const OPimRecord& rec) {
23 Qtopia::Record::operator=( rec ); 23 Qtopia::Record::operator=( rec );
24 m_relations = rec.m_relations; 24 m_xrefman = rec.m_xrefman;
25 25
26 return *this; 26 return *this;
27} 27}
28/* 28/*
29 * category names 29 * category names
30 */ 30 */
31QStringList OPimRecord::categoryNames()const { 31QStringList OPimRecord::categoryNames()const {
32 QStringList list; 32 QStringList list;
33 QArray<int> cats = categories(); 33 QArray<int> cats = categories();
34 Categories catDB; 34 Categories catDB;
35 catDB.load( categoryFileName() ); 35 catDB.load( categoryFileName() );
36 36
37 for (uint i = 0; i < cats.count(); i++ ) { 37 for (uint i = 0; i < cats.count(); i++ ) {
38 list << catDB.label("Todo List", cats[i] ); 38 list << catDB.label("Todo List", cats[i] );
39 } 39 }
40 40
41 return list; 41 return list;
42} 42}
43void OPimRecord::setCategoryNames( const QStringList& ) { 43void OPimRecord::setCategoryNames( const QStringList& ) {
44 44
45} 45}
46void OPimRecord::addCategoryName( const QString& ) { 46void OPimRecord::addCategoryName( const QString& ) {
47 Categories catDB; 47 Categories catDB;
48 catDB.load( categoryFileName() ); 48 catDB.load( categoryFileName() );
49 49
50 50
51} 51}
52bool OPimRecord::isEmpty()const { 52bool OPimRecord::isEmpty()const {
53 return ( uid() == 0 ); 53 return ( uid() == 0 );
54} 54}
55QStringList OPimRecord::relatedApps()const{ 55/*QString OPimRecord::crossToString()const {
56 QStringList list;
57 QMap<QString, QArray<int> >::ConstIterator it;
58 for ( it = m_relations.begin(); it != m_relations.end(); ++it ) {
59 list << it.key();
60 }
61 return list;
62}
63QArray<int> OPimRecord::relations(const QString& app )const {
64 QArray<int> tmp;
65 QMap<QString, QArray<int> >::ConstIterator it;
66 it = m_relations.find( app);
67 if ( it != m_relations.end() )
68 tmp = it.data();
69 return tmp;
70}
71void OPimRecord::clearRelation( const QString& app ) {
72 m_relations.remove( app );
73}
74void OPimRecord::addRelation( const QString& app, int id ) {
75
76 QMap<QString, QArray<int> >::Iterator it;
77 QArray<int> tmp;
78
79 it = m_relations.find( app );
80 if ( it == m_relations.end() ) {
81 tmp.resize(1 );
82 tmp[0] = id;
83 }else{
84 tmp = it.data();
85 tmp.resize( tmp.size() + 1 );
86 tmp[tmp.size() - 1] = id;
87 }
88 m_relations.replace( app, tmp );
89}
90void OPimRecord::setRelations( const QString& app, QArray<int> ids ) {
91
92 QMap<QString, QArray<int> >::Iterator it;
93 QArray<int> tmp;
94
95 it = m_relations.find( app);
96 if ( it == m_relations.end() ) {
97 tmp = ids;
98 }else{
99 tmp = it.data();
100 int offset = tmp.size()-1;
101 tmp.resize( tmp.size() + ids.size() );
102 for (uint i = 0; i < ids.size(); i++ ) {
103 tmp[offset+i] = ids[i];
104 }
105
106 }
107 m_relations.replace( app, tmp );
108}
109QString OPimRecord::crossToString()const {
110 QString str; 56 QString str;
111 QMap<QString, QArray<int> >::ConstIterator it; 57 QMap<QString, QArray<int> >::ConstIterator it;
112 for (it = m_relations.begin(); it != m_relations.end(); ++it ) { 58 for (it = m_relations.begin(); it != m_relations.end(); ++it ) {
113 QArray<int> id = it.data(); 59 QArray<int> id = it.data();
114 for ( uint i = 0; i < id.size(); ++i ) { 60 for ( uint i = 0; i < id.size(); ++i ) {
115 str += it.key() + "," + QString::number( i ) + ";"; 61 str += it.key() + "," + QString::number( i ) + ";";
116 } 62 }
117 } 63 }
118 str = str.remove( str.length()-1, 1); // strip the ; 64 str = str.remove( str.length()-1, 1); // strip the ;
119 //qWarning("IDS " + str ); 65 //qWarning("IDS " + str );
120 66
121 return str; 67 return str;
122} 68 }*/
123/* if uid = 1 assign a new one */ 69/* if uid = 1 assign a new one */
124void OPimRecord::setUid( int uid ) { 70void OPimRecord::setUid( int uid ) {
125 if ( uid == 1) 71 if ( uid == 1)
126 uid = uidGen().generate(); 72 uid = uidGen().generate();
127 73
128 Qtopia::Record::setUid( uid ); 74 Qtopia::Record::setUid( uid );
129}; 75};
130Qtopia::UidGen &OPimRecord::uidGen() { 76Qtopia::UidGen &OPimRecord::uidGen() {
131 return m_uidGen; 77 return m_uidGen;
132} 78}
79OPimXRefManager &OPimRecord::xrefmanager() {
80 return m_xrefman;
81}
diff --git a/libopie/pim/opimrecord.h b/libopie/pim/opimrecord.h
index d9ccad4..1642a5e 100644
--- a/libopie/pim/opimrecord.h
+++ b/libopie/pim/opimrecord.h
@@ -1,133 +1,116 @@
1#ifndef OPIE_PIM_RECORD_H 1#ifndef OPIE_PIM_RECORD_H
2#define OPIE_PIM_RECORD_H 2#define OPIE_PIM_RECORD_H
3 3
4#include <qmap.h> 4#include <qmap.h>
5#include <qstring.h> 5#include <qstring.h>
6#include <qstringlist.h> 6#include <qstringlist.h>
7 7
8#include <qpe/palmtoprecord.h> 8#include <qpe/palmtoprecord.h>
9 9
10#include <opie/opimxrefmanager.h>
10 11
11/** 12/**
12 * This is the base class for 13 * This is the base class for
13 * all PIM Records 14 * all PIM Records
14 * 15 *
15 */ 16 */
16class OPimRecord : public Qtopia::Record { 17class OPimRecord : public Qtopia::Record {
17public: 18public:
18 /** 19 /**
19 * c'tor 20 * c'tor
20 * uid of 0 isEmpty 21 * uid of 0 isEmpty
21 * uid of 1 will be assigned a new one 22 * uid of 1 will be assigned a new one
22 */ 23 */
23 OPimRecord(int uid = 0); 24 OPimRecord(int uid = 0);
24 ~OPimRecord(); 25 ~OPimRecord();
25 26
26 /** 27 /**
27 * copy c'tor 28 * copy c'tor
28 */ 29 */
29 OPimRecord( const OPimRecord& rec ); 30 OPimRecord( const OPimRecord& rec );
30 31
31 /** 32 /**
32 * copy operator 33 * copy operator
33 */ 34 */
34 OPimRecord &operator=( const OPimRecord& ); 35 OPimRecord &operator=( const OPimRecord& );
35 36
36 /** 37 /**
37 * category names resolved 38 * category names resolved
38 */ 39 */
39 QStringList categoryNames()const; 40 QStringList categoryNames()const;
40 41
41 /** 42 /**
42 * set category names they will be resolved 43 * set category names they will be resolved
43 */ 44 */
44 void setCategoryNames( const QStringList& ); 45 void setCategoryNames( const QStringList& );
45 46
46 /** 47 /**
47 * addCategoryName adds a name 48 * addCategoryName adds a name
48 * to the internal category list 49 * to the internal category list
49 */ 50 */
50 void addCategoryName( const QString& ); 51 void addCategoryName( const QString& );
51 52
52 /** 53 /**
53 * if a Record isEmpty 54 * if a Record isEmpty
54 * it's empty if it's 0 55 * it's empty if it's 0
55 */ 56 */
56 virtual bool isEmpty()const; 57 virtual bool isEmpty()const;
57 58
58 /** 59 /**
59 * toRichText summary 60 * toRichText summary
60 */ 61 */
61 virtual QString toRichText()const = 0; 62 virtual QString toRichText()const = 0;
62 63
63 /** 64 /**
64 * a small one line summary 65 * a small one line summary
65 */ 66 */
66 virtual QString toShortText()const = 0; 67 virtual QString toShortText()const = 0;
67 68
68 /** 69 /**
69 * the name of the Record 70 * the name of the Record
70 */ 71 */
71 virtual QString type()const = 0; 72 virtual QString type()const = 0;
72 73
73 /** 74 /**
74 * converts the internal structure to a map 75 * converts the internal structure to a map
75 */ 76 */
76 virtual QMap<int, QString> toMap()const = 0; 77 virtual QMap<int, QString> toMap()const = 0;
77 78
78 /** 79 /**
79 * key value representation of extra items 80 * key value representation of extra items
80 */ 81 */
81 virtual QMap<QString, QString> toExtraMap()const = 0; 82 virtual QMap<QString, QString> toExtraMap()const = 0;
82 83
83 /** 84 /**
84 * the name for a recordField 85 * the name for a recordField
85 */ 86 */
86 virtual QString recordField(int)const = 0; 87 virtual QString recordField(int)const = 0;
87 88
88 /** 89 /**
89 * the related apps names 90 * returns a reference of the
91 * Cross Reference Manager
92 * Partner One is THIS PIM RECORD!
93 * Two is the Partner where we link to
90 */ 94 */
91 QStringList relatedApps()const; 95 OPimXRefManager& xrefmanager();
92
93 /**
94 * the realtions between an app
95 */
96 QArray<int> relations( const QString& app )const;
97
98 /**
99 * clear the relations for all relations
100 * with app
101 */
102 void clearRelation( const QString& app );
103
104 /**
105 * add a relation
106 */
107 void addRelation( const QString& app, int id );
108
109 /**
110 * set the relations for an app
111 */
112 void setRelations( const QString&, QArray<int> ids );
113 96
114 /** 97 /**
115 * set the uid 98 * set the uid
116 */ 99 */
117 virtual void setUid( int uid ); 100 virtual void setUid( int uid );
118 101
119protected: 102protected:
120 Qtopia::UidGen &uidGen(); 103 Qtopia::UidGen &uidGen();
121 QString crossToString()const; 104// QString crossToString()const;
122 105
123private: 106private:
124 class OPimRecordPrivate; 107 class OPimRecordPrivate;
125 OPimRecordPrivate *d; 108 OPimRecordPrivate *d;
126 QMap<QString, QArray<int> > m_relations; 109 OPimXRefManager m_xrefman;
127 static Qtopia::UidGen m_uidGen; 110 static Qtopia::UidGen m_uidGen;
128 111
129}; 112};
130 113
131 114
132 115
133#endif 116#endif
diff --git a/libopie/pim/opimxref.cpp b/libopie/pim/opimxref.cpp
new file mode 100644
index 0000000..5cae871
--- a/dev/null
+++ b/libopie/pim/opimxref.cpp
@@ -0,0 +1,47 @@
1#include "opimxref.h"
2
3OPimXRef::OPimXRef( const OPimXRefPartner& one, const OPimXRefPartner& two )
4 : m_partners(2)
5{
6 m_partners[0] = one;
7 m_partners[1] = two;
8}
9OPimXRef::OPimXRef()
10 : m_partners(2)
11{
12
13}
14OPimXRef::OPimXRef( const OPimXRef& ref) {
15 *this = ref;
16}
17OPimXRef::~OPimXRef() {
18}
19OPimXRef &OPimXRef::operator=( const OPimXRef& ref) {
20 m_partners = ref.m_partners;
21 m_partners.detach();
22
23 return* this;
24}
25bool OPimXRef::operator==( const OPimXRef& oper ) {
26 if ( m_partners == oper.m_partners ) return true;
27
28 return false;
29}
30OPimXRefPartner OPimXRef::partner( enum Partners par) const{
31 return m_partners[par];
32}
33void OPimXRef::setPartner( enum Partners par, const OPimXRefPartner& part) {
34 m_partners[par] = part;
35}
36bool OPimXRef::containsString( const QString& string ) const{
37 if ( m_partners[One].appName() == string ||
38 m_partners[Two].appName() == string ) return true;
39
40 return false;
41}
42bool OPimXRef::containsUid( int uid ) const{
43 if ( m_partners[One].uid() == uid ||
44 m_partners[Two].uid() == uid ) return true;
45
46 return false;
47}
diff --git a/libopie/pim/opimxref.h b/libopie/pim/opimxref.h
index 72154ac..354739a 100644
--- a/libopie/pim/opimxref.h
+++ b/libopie/pim/opimxref.h
@@ -1,36 +1,39 @@
1#ifndef OPIM_XREF_H 1#ifndef OPIM_XREF_H
2#define OPIM_XREF_H 2#define OPIM_XREF_H
3 3
4#include <qarray.h> 4#include <qarray.h>
5#include <qvaluelist.h> 5#include <qvaluelist.h>
6 6
7#include <opie/opimxrefpartner.h> 7#include <opie/opimxrefpartner.h>
8 8
9/** 9/**
10 * this is a Cross Referecne between 10 * this is a Cross Referecne between
11 * two Cross Reference Partners 11 * two Cross Reference Partners
12 */ 12 */
13class OPimXRef { 13class OPimXRef {
14public: 14public:
15 typedef QValueList<OPimXRef> ValueList; 15 typedef QValueList<OPimXRef> ValueList;
16 enum Partners { One, Two }; 16 enum Partners { One, Two };
17 OPimXRef( const OPimXRefPartner& ONE, const OPimXRefPartner& ); 17 OPimXRef( const OPimXRefPartner& ONE, const OPimXRefPartner& );
18 OPimXRef(); 18 OPimXRef();
19 OPimXRef( const OPimXRef& ); 19 OPimXRef( const OPimXRef& );
20 ~OPimXRef(); 20 ~OPimXRef();
21 21
22 OPimXRef &operator=( const OPimXRef& ); 22 OPimXRef &operator=( const OPimXRef& );
23 bool operator==( const OPimXRef ); 23 bool operator==( const OPimXRef& );
24 24
25 OPimXRefPartner partner( enum Partners ); 25 OPimXRefPartner partner( enum Partners )const;
26 26
27 void setPartner( enum Partners, const OPimXRefPartner& ); 27 void setPartner( enum Partners, const OPimXRefPartner& );
28 28
29 bool containsString( const QString& appName)const;
30 bool containsUid( int uid )const;
31
29private: 32private:
30 QArray<OPimXRefPartner> m_partners; 33 QArray<OPimXRefPartner> m_partners;
31 34
32 class Private; 35 class Private;
33 Private *d; 36 Private *d;
34}; 37};
35 38
36#endif 39#endif
diff --git a/libopie/pim/opimxrefmanager.cpp b/libopie/pim/opimxrefmanager.cpp
new file mode 100644
index 0000000..d49f5f5
--- a/dev/null
+++ b/libopie/pim/opimxrefmanager.cpp
@@ -0,0 +1,69 @@
1#include "opimxrefmanager.h"
2
3
4OPimXRefManager::OPimXRefManager() {
5}
6OPimXRefManager::OPimXRefManager( const OPimXRefManager& ref) {
7 m_list = ref.m_list;
8}
9OPimXRefManager &OPimXRefManager::operator=( const OPimXRefManager& ref) {
10 m_list = ref.m_list;
11 return *this;
12}
13bool OPimXRefManager::operator==( const OPimXRefManager& /*ref*/) {
14 // if ( m_list == ref.m_list ) return true;
15
16 return false;
17}
18void OPimXRefManager::add( const OPimXRef& ref) {
19 m_list.append( ref );
20}
21void OPimXRefManager::remove( const OPimXRef& ref) {
22 m_list.remove( ref );
23}
24void OPimXRefManager::replace( const OPimXRef& ref) {
25 m_list.remove( ref );
26 m_list.append( ref );
27}
28void OPimXRefManager::clear() {
29 m_list.clear();
30}
31QStringList OPimXRefManager::apps()const {
32 OPimXRef::ValueList::ConstIterator it;
33 QStringList list;
34
35 QString str;
36 for ( it = m_list.begin(); it != m_list.end(); ++it ) {
37 str = (*it).partner( OPimXRef::One ).appName();
38 if ( !list.contains( str ) ) list << str;
39
40 str = (*it).partner( OPimXRef::Two ).appName();
41 if ( !list.contains( str ) ) list << str;
42 }
43 return list;
44}
45OPimXRef::ValueList OPimXRefManager::list()const {
46 return m_list;
47}
48OPimXRef::ValueList OPimXRefManager::list( const QString& appName )const{
49 OPimXRef::ValueList list;
50 OPimXRef::ValueList::ConstIterator it;
51
52 for ( it = m_list.begin(); it != m_list.end(); ++it ) {
53 if ( (*it).containsString( appName ) )
54 list.append( (*it) );
55 }
56
57 return list;
58}
59OPimXRef::ValueList OPimXRefManager::list( int uid )const {
60 OPimXRef::ValueList list;
61 OPimXRef::ValueList::ConstIterator it;
62
63 for ( it = m_list.begin(); it != m_list.end(); ++it ) {
64 if ( (*it).containsUid( uid ) )
65 list.append( (*it) );
66 }
67
68 return list;
69}
diff --git a/libopie/pim/opimxrefmanager.h b/libopie/pim/opimxrefmanager.h
index 147895d..9b003a3 100644
--- a/libopie/pim/opimxrefmanager.h
+++ b/libopie/pim/opimxrefmanager.h
@@ -1,36 +1,41 @@
1#ifndef OPIM_XREF_MANAGER_H 1#ifndef OPIM_XREF_MANAGER_H
2#define OPIM_XREF_MANAGER_H 2#define OPIM_XREF_MANAGER_H
3 3
4#include <qstringlist.h>
5
4#include <opie/opimxref.h> 6#include <opie/opimxref.h>
5 7
6/** 8/**
7 * This is a simple manager for 9 * This is a simple manager for
8 * OPimXRefs. 10 * OPimXRefs.
9 * It allows addition, removing, replacing 11 * It allows addition, removing, replacing
10 * clearing and 'querying' the XRef... 12 * clearing and 'querying' the XRef...
11 */ 13 */
12class OPimXRefManager { 14class OPimXRefManager {
13public: 15public:
14 OPimXRefManager(); 16 OPimXRefManager();
15 OPimXRefManager( const OPimXRefManager& ); 17 OPimXRefManager( const OPimXRefManager& );
16 ~OPimXRefManager(); 18 ~OPimXRefManager();
17 19
18 OPimXRefManager& operator=( const OPimXRefManager& ); 20 OPimXRefManager& operator=( const OPimXRefManager& );
19 bool operator==( const OPimXRefManager& ); 21 bool operator==( const OPimXRefManager& );
20 22
21 void add( const OPimXRef& ); 23 void add( const OPimXRef& );
22 void remove( const OPimXRef& ); 24 void remove( const OPimXRef& );
23 void replace( const OPimXRef& ); 25 void replace( const OPimXRef& );
24 26
25 void clear(); 27 void clear();
26 28
27 /** 29 /**
28 * apps participating 30 * apps participating
29 */ 31 */
30 QStringList apps()const; 32 QStringList apps()const;
31 OPimXRef::ValueList list()const; 33 OPimXRef::ValueList list()const;
32 OPimXRef::ValueList list( const QString& appName )const; 34 OPimXRef::ValueList list( const QString& appName )const;
33 OPimXRef::ValueList list( int uid )const; 35 OPimXRef::ValueList list( int uid )const;
36
37private:
38 OPimXRef::ValueList m_list;
34}; 39};
35 40
36#endif 41#endif
diff --git a/libopie/pim/opimxrefpartner.cpp b/libopie/pim/opimxrefpartner.cpp
new file mode 100644
index 0000000..028f4e6
--- a/dev/null
+++ b/libopie/pim/opimxrefpartner.cpp
@@ -0,0 +1,43 @@
1#include "opimxrefpartner.h"
2
3OPimXRefPartner::OPimXRefPartner( const QString& appName,
4 int uid, int field )
5 : m_app(appName), m_uid(uid), m_field( field ) {
6}
7OPimXRefPartner::OPimXRefPartner( const OPimXRefPartner& ref ) {
8 *this = ref;
9}
10OPimXRefPartner::~OPimXRefPartner() {
11}
12OPimXRefPartner &OPimXRefPartner::operator=( const OPimXRefPartner& par ) {
13 m_app = par.m_app;
14 m_uid = par.m_uid;
15 m_field = par.m_field;
16
17 return *this;
18}
19bool OPimXRefPartner::operator==( const OPimXRefPartner& par ) {
20 if ( m_app != par.m_app ) return false;
21 if ( m_uid != par.m_uid ) return false;
22 if ( m_field != par.m_field ) return false;
23
24 return true;
25}
26QString OPimXRefPartner::appName()const {
27 return m_app;
28}
29int OPimXRefPartner::uid()const {
30 return m_uid;
31}
32int OPimXRefPartner::field()const {
33 return m_field;
34}
35void OPimXRefPartner::setAppName( const QString& appName ) {
36 m_app = appName;
37}
38void OPimXRefPartner::setUid( int uid ) {
39 m_uid = uid;
40}
41void OPimXRefPartner::setField( int field ) {
42 m_field = field;
43}
diff --git a/libopie/pim/otodoaccessxml.cpp b/libopie/pim/otodoaccessxml.cpp
index 591e467..c1682c6 100644
--- a/libopie/pim/otodoaccessxml.cpp
+++ b/libopie/pim/otodoaccessxml.cpp
@@ -270,195 +270,179 @@ QArray<int> OTodoAccessXML::overDue() {
270 return ids; 270 return ids;
271} 271}
272 272
273 273
274/* private */ 274/* private */
275void OTodoAccessXML::todo( QAsciiDict<int>* dict, OTodo& ev, 275void OTodoAccessXML::todo( QAsciiDict<int>* dict, OTodo& ev,
276 const QCString& attr, const QString& val) { 276 const QCString& attr, const QString& val) {
277// qWarning("parse to do from XMLElement" ); 277// qWarning("parse to do from XMLElement" );
278 278
279 int *find=0; 279 int *find=0;
280 280
281 find = (*dict)[ attr.data() ]; 281 find = (*dict)[ attr.data() ];
282 if (!find ) { 282 if (!find ) {
283// qWarning("Unknown option" + it.key() ); 283// qWarning("Unknown option" + it.key() );
284 ev.setCustomField( attr, val ); 284 ev.setCustomField( attr, val );
285 return; 285 return;
286 } 286 }
287 287
288 switch( *find ) { 288 switch( *find ) {
289 case OTodo::Uid: 289 case OTodo::Uid:
290 ev.setUid( val.toInt() ); 290 ev.setUid( val.toInt() );
291 break; 291 break;
292 case OTodo::Category: 292 case OTodo::Category:
293 ev.setCategories( ev.idsFromString( val ) ); 293 ev.setCategories( ev.idsFromString( val ) );
294 break; 294 break;
295 case OTodo::HasDate: 295 case OTodo::HasDate:
296 ev.setHasDueDate( val.toInt() ); 296 ev.setHasDueDate( val.toInt() );
297 break; 297 break;
298 case OTodo::Completed: 298 case OTodo::Completed:
299 ev.setCompleted( val.toInt() ); 299 ev.setCompleted( val.toInt() );
300 break; 300 break;
301 case OTodo::Description: 301 case OTodo::Description:
302 ev.setDescription( val ); 302 ev.setDescription( val );
303 break; 303 break;
304 case OTodo::Summary: 304 case OTodo::Summary:
305 ev.setSummary( val ); 305 ev.setSummary( val );
306 break; 306 break;
307 case OTodo::Priority: 307 case OTodo::Priority:
308 ev.setPriority( val.toInt() ); 308 ev.setPriority( val.toInt() );
309 break; 309 break;
310 case OTodo::DateDay: 310 case OTodo::DateDay:
311 m_day = val.toInt(); 311 m_day = val.toInt();
312 break; 312 break;
313 case OTodo::DateMonth: 313 case OTodo::DateMonth:
314 m_month = val.toInt(); 314 m_month = val.toInt();
315 break; 315 break;
316 case OTodo::DateYear: 316 case OTodo::DateYear:
317 m_year = val.toInt(); 317 m_year = val.toInt();
318 break; 318 break;
319 case OTodo::Progress: 319 case OTodo::Progress:
320 ev.setProgress( val.toInt() ); 320 ev.setProgress( val.toInt() );
321 break; 321 break;
322 case OTodo::CrossReference: 322 case OTodo::CrossReference:
323 { 323 {
324 /* 324 /*
325 * A cross refernce looks like 325 * A cross refernce looks like
326 * appname,id;appname,id 326 * appname,id;appname,id
327 * we need to split it up 327 * we need to split it up
328 */ 328 */
329 QStringList refs = QStringList::split(';', val ); 329 QStringList refs = QStringList::split(';', val );
330 QStringList::Iterator strIt; 330 QStringList::Iterator strIt;
331 for (strIt = refs.begin(); strIt != refs.end(); ++strIt ) { 331 for (strIt = refs.begin(); strIt != refs.end(); ++strIt ) {
332 int pos = (*strIt).find(','); 332 int pos = (*strIt).find(',');
333 if ( pos > -1 ) 333 if ( pos > -1 )
334 ev.addRelation( (*strIt).left(pos), (*strIt).mid(pos+1).toInt() ); 334 ; // ev.addRelation( (*strIt).left(pos), (*strIt).mid(pos+1).toInt() );
335 335
336 } 336 }
337 break; 337 break;
338 } 338 }
339 case OTodo::HasAlarmDateTime: 339 case OTodo::HasAlarmDateTime:
340 ev.setHasAlarmDateTime( val.toInt() ); 340 ev.setHasAlarmDateTime( val.toInt() );
341 break; 341 break;
342 case OTodo::AlarmDateTime: { 342 case OTodo::AlarmDateTime: {
343 /* this sounds better ;) zecke */ 343 /* this sounds better ;) zecke */
344 ev.setAlarmDateTime( TimeConversion::fromISO8601( val.local8Bit() ) ); 344 ev.setAlarmDateTime( TimeConversion::fromISO8601( val.local8Bit() ) );
345 break; 345 break;
346 } 346 }
347 default: 347 default:
348 break; 348 break;
349 } 349 }
350} 350}
351QString OTodoAccessXML::toString( const OTodo& ev )const { 351QString OTodoAccessXML::toString( const OTodo& ev )const {
352 QString str; 352 QString str;
353 353
354 str += "Completed=\"" + QString::number( ev.isCompleted() ) + "\" "; 354 str += "Completed=\"" + QString::number( ev.isCompleted() ) + "\" ";
355 str += "HasDate=\"" + QString::number( ev.hasDueDate() ) + "\" "; 355 str += "HasDate=\"" + QString::number( ev.hasDueDate() ) + "\" ";
356 str += "Priority=\"" + QString::number( ev.priority() ) + "\" "; 356 str += "Priority=\"" + QString::number( ev.priority() ) + "\" ";
357 str += "Progress=\"" + QString::number(ev.progress() ) + "\" "; 357 str += "Progress=\"" + QString::number(ev.progress() ) + "\" ";
358 358
359 str += "Categories=\"" + toString( ev.categories() ) + "\" "; 359 str += "Categories=\"" + toString( ev.categories() ) + "\" ";
360 str += "Description=\"" + Qtopia::escapeString( ev.description() ) + "\" "; 360 str += "Description=\"" + Qtopia::escapeString( ev.description() ) + "\" ";
361 str += "Summary=\"" + Qtopia::escapeString( ev.summary() ) + "\" "; 361 str += "Summary=\"" + Qtopia::escapeString( ev.summary() ) + "\" ";
362 362
363 if ( ev.hasDueDate() ) { 363 if ( ev.hasDueDate() ) {
364 str += "DateYear=\"" + QString::number( ev.dueDate().year() ) + "\" "; 364 str += "DateYear=\"" + QString::number( ev.dueDate().year() ) + "\" ";
365 str += "DateMonth=\"" + QString::number( ev.dueDate().month() ) + "\" "; 365 str += "DateMonth=\"" + QString::number( ev.dueDate().month() ) + "\" ";
366 str += "DateDay=\"" + QString::number( ev.dueDate().day() ) + "\" "; 366 str += "DateDay=\"" + QString::number( ev.dueDate().day() ) + "\" ";
367 } 367 }
368// qWarning( "Uid %d", ev.uid() ); 368// qWarning( "Uid %d", ev.uid() );
369 str += "Uid=\"" + QString::number( ev.uid() ) + "\" "; 369 str += "Uid=\"" + QString::number( ev.uid() ) + "\" ";
370 370
371// append the extra options 371// append the extra options
372 /* FIXME Qtopia::Record this is currently not 372 /* FIXME Qtopia::Record this is currently not
373 * possible you can set custom fields 373 * possible you can set custom fields
374 * but don' iterate over the list 374 * but don' iterate over the list
375 * I may do #define private protected 375 * I may do #define private protected
376 * for this case - cough --zecke 376 * for this case - cough --zecke
377 */ 377 */
378 /* 378 /*
379 QMap<QString, QString> extras = ev.extras(); 379 QMap<QString, QString> extras = ev.extras();
380 QMap<QString, QString>::Iterator extIt; 380 QMap<QString, QString>::Iterator extIt;
381 for (extIt = extras.begin(); extIt != extras.end(); ++extIt ) 381 for (extIt = extras.begin(); extIt != extras.end(); ++extIt )
382 str += extIt.key() + "=\"" + extIt.data() + "\" "; 382 str += extIt.key() + "=\"" + extIt.data() + "\" ";
383 */ 383 */
384 // cross refernce 384 // cross refernce
385 QStringList list = ev.relatedApps();
386 QStringList::Iterator listIt;
387 QString refs;
388 str += "CrossReference=\"";
389 bool added = false;
390 for ( listIt = list.begin(); listIt != list.end(); ++listIt ) {
391 added = true;
392 QArray<int> ints = ev.relations( (*listIt) );
393 for ( uint i = 0; i< ints.count(); i++ ) {
394 str += (*listIt) + "," + QString::number( i ) + ";";
395 }
396 }
397 if ( added )
398 str = str.remove( str.length()-1, 1 );
399
400 str += "\" ";
401 385
402 str += "AlarmDateTime=\"" + TimeConversion::toISO8601( ev.alarmDateTime() ) + "\" "; 386 str += "AlarmDateTime=\"" + TimeConversion::toISO8601( ev.alarmDateTime() ) + "\" ";
403 387
404 return str; 388 return str;
405} 389}
406QString OTodoAccessXML::toString( const QArray<int>& ints ) const { 390QString OTodoAccessXML::toString( const QArray<int>& ints ) const {
407 return Qtopia::Record::idsToString( ints ); 391 return Qtopia::Record::idsToString( ints );
408} 392}
409 393
410/* internal class for sorting 394/* internal class for sorting
411 * 395 *
412 * Inspired by todoxmlio.cpp from TT 396 * Inspired by todoxmlio.cpp from TT
413 */ 397 */
414 398
415struct OTodoXMLContainer { 399struct OTodoXMLContainer {
416 OTodo todo; 400 OTodo todo;
417}; 401};
418 402
419namespace { 403namespace {
420 inline QString string( const OTodo& todo) { 404 inline QString string( const OTodo& todo) {
421 return todo.summary().isEmpty() ? 405 return todo.summary().isEmpty() ?
422 todo.description().left(20 ) : 406 todo.description().left(20 ) :
423 todo.summary(); 407 todo.summary();
424 } 408 }
425 inline int completed( const OTodo& todo1, const OTodo& todo2) { 409 inline int completed( const OTodo& todo1, const OTodo& todo2) {
426 int ret = 0; 410 int ret = 0;
427 if ( todo1.isCompleted() ) ret++; 411 if ( todo1.isCompleted() ) ret++;
428 if ( todo2.isCompleted() ) ret--; 412 if ( todo2.isCompleted() ) ret--;
429 return ret; 413 return ret;
430 } 414 }
431 inline int priority( const OTodo& t1, const OTodo& t2) { 415 inline int priority( const OTodo& t1, const OTodo& t2) {
432 return ( t1.priority() - t2.priority() ); 416 return ( t1.priority() - t2.priority() );
433 } 417 }
434 inline int description( const OTodo& t1, const OTodo& t2) { 418 inline int description( const OTodo& t1, const OTodo& t2) {
435 return QString::compare( string(t1), string(t2) ); 419 return QString::compare( string(t1), string(t2) );
436 } 420 }
437 inline int deadline( const OTodo& t1, const OTodo& t2) { 421 inline int deadline( const OTodo& t1, const OTodo& t2) {
438 int ret = 0; 422 int ret = 0;
439 if ( t1.hasDueDate() && 423 if ( t1.hasDueDate() &&
440 t2.hasDueDate() ) 424 t2.hasDueDate() )
441 ret = t2.dueDate().daysTo( t1.dueDate() ); 425 ret = t2.dueDate().daysTo( t1.dueDate() );
442 else if ( t1.hasDueDate() ) 426 else if ( t1.hasDueDate() )
443 ret = -1; 427 ret = -1;
444 else if ( t2.hasDueDate() ) 428 else if ( t2.hasDueDate() )
445 ret = 1; 429 ret = 1;
446 else 430 else
447 ret = 0; 431 ret = 0;
448 432
449 return ret; 433 return ret;
450 } 434 }
451 435
452}; 436};
453 437
454/* 438/*
455 * Returns: 439 * Returns:
456 * 0 if item1 == item2 440 * 0 if item1 == item2
457 * 441 *
458 * non-zero if item1 != item2 442 * non-zero if item1 != item2
459 * 443 *
460 * This function returns int rather than bool so that reimplementations 444 * This function returns int rather than bool so that reimplementations
461 * can return one of three values and use it to sort by: 445 * can return one of three values and use it to sort by:
462 * 446 *
463 * 0 if item1 == item2 447 * 0 if item1 == item2
464 * 448 *
diff --git a/libopie2/opiepim/backend/otodoaccessxml.cpp b/libopie2/opiepim/backend/otodoaccessxml.cpp
index 591e467..c1682c6 100644
--- a/libopie2/opiepim/backend/otodoaccessxml.cpp
+++ b/libopie2/opiepim/backend/otodoaccessxml.cpp
@@ -270,195 +270,179 @@ QArray<int> OTodoAccessXML::overDue() {
270 return ids; 270 return ids;
271} 271}
272 272
273 273
274/* private */ 274/* private */
275void OTodoAccessXML::todo( QAsciiDict<int>* dict, OTodo& ev, 275void OTodoAccessXML::todo( QAsciiDict<int>* dict, OTodo& ev,
276 const QCString& attr, const QString& val) { 276 const QCString& attr, const QString& val) {
277// qWarning("parse to do from XMLElement" ); 277// qWarning("parse to do from XMLElement" );
278 278
279 int *find=0; 279 int *find=0;
280 280
281 find = (*dict)[ attr.data() ]; 281 find = (*dict)[ attr.data() ];
282 if (!find ) { 282 if (!find ) {
283// qWarning("Unknown option" + it.key() ); 283// qWarning("Unknown option" + it.key() );
284 ev.setCustomField( attr, val ); 284 ev.setCustomField( attr, val );
285 return; 285 return;
286 } 286 }
287 287
288 switch( *find ) { 288 switch( *find ) {
289 case OTodo::Uid: 289 case OTodo::Uid:
290 ev.setUid( val.toInt() ); 290 ev.setUid( val.toInt() );
291 break; 291 break;
292 case OTodo::Category: 292 case OTodo::Category:
293 ev.setCategories( ev.idsFromString( val ) ); 293 ev.setCategories( ev.idsFromString( val ) );
294 break; 294 break;
295 case OTodo::HasDate: 295 case OTodo::HasDate:
296 ev.setHasDueDate( val.toInt() ); 296 ev.setHasDueDate( val.toInt() );
297 break; 297 break;
298 case OTodo::Completed: 298 case OTodo::Completed:
299 ev.setCompleted( val.toInt() ); 299 ev.setCompleted( val.toInt() );
300 break; 300 break;
301 case OTodo::Description: 301 case OTodo::Description:
302 ev.setDescription( val ); 302 ev.setDescription( val );
303 break; 303 break;
304 case OTodo::Summary: 304 case OTodo::Summary:
305 ev.setSummary( val ); 305 ev.setSummary( val );
306 break; 306 break;
307 case OTodo::Priority: 307 case OTodo::Priority:
308 ev.setPriority( val.toInt() ); 308 ev.setPriority( val.toInt() );
309 break; 309 break;
310 case OTodo::DateDay: 310 case OTodo::DateDay:
311 m_day = val.toInt(); 311 m_day = val.toInt();
312 break; 312 break;
313 case OTodo::DateMonth: 313 case OTodo::DateMonth:
314 m_month = val.toInt(); 314 m_month = val.toInt();
315 break; 315 break;
316 case OTodo::DateYear: 316 case OTodo::DateYear:
317 m_year = val.toInt(); 317 m_year = val.toInt();
318 break; 318 break;
319 case OTodo::Progress: 319 case OTodo::Progress:
320 ev.setProgress( val.toInt() ); 320 ev.setProgress( val.toInt() );
321 break; 321 break;
322 case OTodo::CrossReference: 322 case OTodo::CrossReference:
323 { 323 {
324 /* 324 /*
325 * A cross refernce looks like 325 * A cross refernce looks like
326 * appname,id;appname,id 326 * appname,id;appname,id
327 * we need to split it up 327 * we need to split it up
328 */ 328 */
329 QStringList refs = QStringList::split(';', val ); 329 QStringList refs = QStringList::split(';', val );
330 QStringList::Iterator strIt; 330 QStringList::Iterator strIt;
331 for (strIt = refs.begin(); strIt != refs.end(); ++strIt ) { 331 for (strIt = refs.begin(); strIt != refs.end(); ++strIt ) {
332 int pos = (*strIt).find(','); 332 int pos = (*strIt).find(',');
333 if ( pos > -1 ) 333 if ( pos > -1 )
334 ev.addRelation( (*strIt).left(pos), (*strIt).mid(pos+1).toInt() ); 334 ; // ev.addRelation( (*strIt).left(pos), (*strIt).mid(pos+1).toInt() );
335 335
336 } 336 }
337 break; 337 break;
338 } 338 }
339 case OTodo::HasAlarmDateTime: 339 case OTodo::HasAlarmDateTime:
340 ev.setHasAlarmDateTime( val.toInt() ); 340 ev.setHasAlarmDateTime( val.toInt() );
341 break; 341 break;
342 case OTodo::AlarmDateTime: { 342 case OTodo::AlarmDateTime: {
343 /* this sounds better ;) zecke */ 343 /* this sounds better ;) zecke */
344 ev.setAlarmDateTime( TimeConversion::fromISO8601( val.local8Bit() ) ); 344 ev.setAlarmDateTime( TimeConversion::fromISO8601( val.local8Bit() ) );
345 break; 345 break;
346 } 346 }
347 default: 347 default:
348 break; 348 break;
349 } 349 }
350} 350}
351QString OTodoAccessXML::toString( const OTodo& ev )const { 351QString OTodoAccessXML::toString( const OTodo& ev )const {
352 QString str; 352 QString str;
353 353
354 str += "Completed=\"" + QString::number( ev.isCompleted() ) + "\" "; 354 str += "Completed=\"" + QString::number( ev.isCompleted() ) + "\" ";
355 str += "HasDate=\"" + QString::number( ev.hasDueDate() ) + "\" "; 355 str += "HasDate=\"" + QString::number( ev.hasDueDate() ) + "\" ";
356 str += "Priority=\"" + QString::number( ev.priority() ) + "\" "; 356 str += "Priority=\"" + QString::number( ev.priority() ) + "\" ";
357 str += "Progress=\"" + QString::number(ev.progress() ) + "\" "; 357 str += "Progress=\"" + QString::number(ev.progress() ) + "\" ";
358 358
359 str += "Categories=\"" + toString( ev.categories() ) + "\" "; 359 str += "Categories=\"" + toString( ev.categories() ) + "\" ";
360 str += "Description=\"" + Qtopia::escapeString( ev.description() ) + "\" "; 360 str += "Description=\"" + Qtopia::escapeString( ev.description() ) + "\" ";
361 str += "Summary=\"" + Qtopia::escapeString( ev.summary() ) + "\" "; 361 str += "Summary=\"" + Qtopia::escapeString( ev.summary() ) + "\" ";
362 362
363 if ( ev.hasDueDate() ) { 363 if ( ev.hasDueDate() ) {
364 str += "DateYear=\"" + QString::number( ev.dueDate().year() ) + "\" "; 364 str += "DateYear=\"" + QString::number( ev.dueDate().year() ) + "\" ";
365 str += "DateMonth=\"" + QString::number( ev.dueDate().month() ) + "\" "; 365 str += "DateMonth=\"" + QString::number( ev.dueDate().month() ) + "\" ";
366 str += "DateDay=\"" + QString::number( ev.dueDate().day() ) + "\" "; 366 str += "DateDay=\"" + QString::number( ev.dueDate().day() ) + "\" ";
367 } 367 }
368// qWarning( "Uid %d", ev.uid() ); 368// qWarning( "Uid %d", ev.uid() );
369 str += "Uid=\"" + QString::number( ev.uid() ) + "\" "; 369 str += "Uid=\"" + QString::number( ev.uid() ) + "\" ";
370 370
371// append the extra options 371// append the extra options
372 /* FIXME Qtopia::Record this is currently not 372 /* FIXME Qtopia::Record this is currently not
373 * possible you can set custom fields 373 * possible you can set custom fields
374 * but don' iterate over the list 374 * but don' iterate over the list
375 * I may do #define private protected 375 * I may do #define private protected
376 * for this case - cough --zecke 376 * for this case - cough --zecke
377 */ 377 */
378 /* 378 /*
379 QMap<QString, QString> extras = ev.extras(); 379 QMap<QString, QString> extras = ev.extras();
380 QMap<QString, QString>::Iterator extIt; 380 QMap<QString, QString>::Iterator extIt;
381 for (extIt = extras.begin(); extIt != extras.end(); ++extIt ) 381 for (extIt = extras.begin(); extIt != extras.end(); ++extIt )
382 str += extIt.key() + "=\"" + extIt.data() + "\" "; 382 str += extIt.key() + "=\"" + extIt.data() + "\" ";
383 */ 383 */
384 // cross refernce 384 // cross refernce
385 QStringList list = ev.relatedApps();
386 QStringList::Iterator listIt;
387 QString refs;
388 str += "CrossReference=\"";
389 bool added = false;
390 for ( listIt = list.begin(); listIt != list.end(); ++listIt ) {
391 added = true;
392 QArray<int> ints = ev.relations( (*listIt) );
393 for ( uint i = 0; i< ints.count(); i++ ) {
394 str += (*listIt) + "," + QString::number( i ) + ";";
395 }
396 }
397 if ( added )
398 str = str.remove( str.length()-1, 1 );
399
400 str += "\" ";
401 385
402 str += "AlarmDateTime=\"" + TimeConversion::toISO8601( ev.alarmDateTime() ) + "\" "; 386 str += "AlarmDateTime=\"" + TimeConversion::toISO8601( ev.alarmDateTime() ) + "\" ";
403 387
404 return str; 388 return str;
405} 389}
406QString OTodoAccessXML::toString( const QArray<int>& ints ) const { 390QString OTodoAccessXML::toString( const QArray<int>& ints ) const {
407 return Qtopia::Record::idsToString( ints ); 391 return Qtopia::Record::idsToString( ints );
408} 392}
409 393
410/* internal class for sorting 394/* internal class for sorting
411 * 395 *
412 * Inspired by todoxmlio.cpp from TT 396 * Inspired by todoxmlio.cpp from TT
413 */ 397 */
414 398
415struct OTodoXMLContainer { 399struct OTodoXMLContainer {
416 OTodo todo; 400 OTodo todo;
417}; 401};
418 402
419namespace { 403namespace {
420 inline QString string( const OTodo& todo) { 404 inline QString string( const OTodo& todo) {
421 return todo.summary().isEmpty() ? 405 return todo.summary().isEmpty() ?
422 todo.description().left(20 ) : 406 todo.description().left(20 ) :
423 todo.summary(); 407 todo.summary();
424 } 408 }
425 inline int completed( const OTodo& todo1, const OTodo& todo2) { 409 inline int completed( const OTodo& todo1, const OTodo& todo2) {
426 int ret = 0; 410 int ret = 0;
427 if ( todo1.isCompleted() ) ret++; 411 if ( todo1.isCompleted() ) ret++;
428 if ( todo2.isCompleted() ) ret--; 412 if ( todo2.isCompleted() ) ret--;
429 return ret; 413 return ret;
430 } 414 }
431 inline int priority( const OTodo& t1, const OTodo& t2) { 415 inline int priority( const OTodo& t1, const OTodo& t2) {
432 return ( t1.priority() - t2.priority() ); 416 return ( t1.priority() - t2.priority() );
433 } 417 }
434 inline int description( const OTodo& t1, const OTodo& t2) { 418 inline int description( const OTodo& t1, const OTodo& t2) {
435 return QString::compare( string(t1), string(t2) ); 419 return QString::compare( string(t1), string(t2) );
436 } 420 }
437 inline int deadline( const OTodo& t1, const OTodo& t2) { 421 inline int deadline( const OTodo& t1, const OTodo& t2) {
438 int ret = 0; 422 int ret = 0;
439 if ( t1.hasDueDate() && 423 if ( t1.hasDueDate() &&
440 t2.hasDueDate() ) 424 t2.hasDueDate() )
441 ret = t2.dueDate().daysTo( t1.dueDate() ); 425 ret = t2.dueDate().daysTo( t1.dueDate() );
442 else if ( t1.hasDueDate() ) 426 else if ( t1.hasDueDate() )
443 ret = -1; 427 ret = -1;
444 else if ( t2.hasDueDate() ) 428 else if ( t2.hasDueDate() )
445 ret = 1; 429 ret = 1;
446 else 430 else
447 ret = 0; 431 ret = 0;
448 432
449 return ret; 433 return ret;
450 } 434 }
451 435
452}; 436};
453 437
454/* 438/*
455 * Returns: 439 * Returns:
456 * 0 if item1 == item2 440 * 0 if item1 == item2
457 * 441 *
458 * non-zero if item1 != item2 442 * non-zero if item1 != item2
459 * 443 *
460 * This function returns int rather than bool so that reimplementations 444 * This function returns int rather than bool so that reimplementations
461 * can return one of three values and use it to sort by: 445 * can return one of three values and use it to sort by:
462 * 446 *
463 * 0 if item1 == item2 447 * 0 if item1 == item2
464 * 448 *
diff --git a/libopie2/opiepim/core/opimrecord.cpp b/libopie2/opiepim/core/opimrecord.cpp
index 21cf131..0e3be9d 100644
--- a/libopie2/opiepim/core/opimrecord.cpp
+++ b/libopie2/opiepim/core/opimrecord.cpp
@@ -1,132 +1,81 @@
1#include <qpe/categories.h> 1#include <qpe/categories.h>
2#include <qpe/categoryselect.h> 2#include <qpe/categoryselect.h>
3 3
4#include "opimrecord.h" 4#include "opimrecord.h"
5 5
6Qtopia::UidGen OPimRecord::m_uidGen( Qtopia::UidGen::Qtopia ); 6Qtopia::UidGen OPimRecord::m_uidGen( Qtopia::UidGen::Qtopia );
7 7
8 8
9OPimRecord::OPimRecord( int uid ) 9OPimRecord::OPimRecord( int uid )
10 : Qtopia::Record() { 10 : Qtopia::Record() {
11 11
12 setUid( uid ); 12 setUid( uid );
13} 13}
14OPimRecord::~OPimRecord() { 14OPimRecord::~OPimRecord() {
15} 15}
16OPimRecord::OPimRecord( const OPimRecord& rec ) 16OPimRecord::OPimRecord( const OPimRecord& rec )
17 : Qtopia::Record( rec ) 17 : Qtopia::Record( rec )
18{ 18{
19 (*this) = rec; 19 (*this) = rec;
20} 20}
21 21
22OPimRecord &OPimRecord::operator=( const OPimRecord& rec) { 22OPimRecord &OPimRecord::operator=( const OPimRecord& rec) {
23 Qtopia::Record::operator=( rec ); 23 Qtopia::Record::operator=( rec );
24 m_relations = rec.m_relations; 24 m_xrefman = rec.m_xrefman;
25 25
26 return *this; 26 return *this;
27} 27}
28/* 28/*
29 * category names 29 * category names
30 */ 30 */
31QStringList OPimRecord::categoryNames()const { 31QStringList OPimRecord::categoryNames()const {
32 QStringList list; 32 QStringList list;
33 QArray<int> cats = categories(); 33 QArray<int> cats = categories();
34 Categories catDB; 34 Categories catDB;
35 catDB.load( categoryFileName() ); 35 catDB.load( categoryFileName() );
36 36
37 for (uint i = 0; i < cats.count(); i++ ) { 37 for (uint i = 0; i < cats.count(); i++ ) {
38 list << catDB.label("Todo List", cats[i] ); 38 list << catDB.label("Todo List", cats[i] );
39 } 39 }
40 40
41 return list; 41 return list;
42} 42}
43void OPimRecord::setCategoryNames( const QStringList& ) { 43void OPimRecord::setCategoryNames( const QStringList& ) {
44 44
45} 45}
46void OPimRecord::addCategoryName( const QString& ) { 46void OPimRecord::addCategoryName( const QString& ) {
47 Categories catDB; 47 Categories catDB;
48 catDB.load( categoryFileName() ); 48 catDB.load( categoryFileName() );
49 49
50 50
51} 51}
52bool OPimRecord::isEmpty()const { 52bool OPimRecord::isEmpty()const {
53 return ( uid() == 0 ); 53 return ( uid() == 0 );
54} 54}
55QStringList OPimRecord::relatedApps()const{ 55/*QString OPimRecord::crossToString()const {
56 QStringList list;
57 QMap<QString, QArray<int> >::ConstIterator it;
58 for ( it = m_relations.begin(); it != m_relations.end(); ++it ) {
59 list << it.key();
60 }
61 return list;
62}
63QArray<int> OPimRecord::relations(const QString& app )const {
64 QArray<int> tmp;
65 QMap<QString, QArray<int> >::ConstIterator it;
66 it = m_relations.find( app);
67 if ( it != m_relations.end() )
68 tmp = it.data();
69 return tmp;
70}
71void OPimRecord::clearRelation( const QString& app ) {
72 m_relations.remove( app );
73}
74void OPimRecord::addRelation( const QString& app, int id ) {
75
76 QMap<QString, QArray<int> >::Iterator it;
77 QArray<int> tmp;
78
79 it = m_relations.find( app );
80 if ( it == m_relations.end() ) {
81 tmp.resize(1 );
82 tmp[0] = id;
83 }else{
84 tmp = it.data();
85 tmp.resize( tmp.size() + 1 );
86 tmp[tmp.size() - 1] = id;
87 }
88 m_relations.replace( app, tmp );
89}
90void OPimRecord::setRelations( const QString& app, QArray<int> ids ) {
91
92 QMap<QString, QArray<int> >::Iterator it;
93 QArray<int> tmp;
94
95 it = m_relations.find( app);
96 if ( it == m_relations.end() ) {
97 tmp = ids;
98 }else{
99 tmp = it.data();
100 int offset = tmp.size()-1;
101 tmp.resize( tmp.size() + ids.size() );
102 for (uint i = 0; i < ids.size(); i++ ) {
103 tmp[offset+i] = ids[i];
104 }
105
106 }
107 m_relations.replace( app, tmp );
108}
109QString OPimRecord::crossToString()const {
110 QString str; 56 QString str;
111 QMap<QString, QArray<int> >::ConstIterator it; 57 QMap<QString, QArray<int> >::ConstIterator it;
112 for (it = m_relations.begin(); it != m_relations.end(); ++it ) { 58 for (it = m_relations.begin(); it != m_relations.end(); ++it ) {
113 QArray<int> id = it.data(); 59 QArray<int> id = it.data();
114 for ( uint i = 0; i < id.size(); ++i ) { 60 for ( uint i = 0; i < id.size(); ++i ) {
115 str += it.key() + "," + QString::number( i ) + ";"; 61 str += it.key() + "," + QString::number( i ) + ";";
116 } 62 }
117 } 63 }
118 str = str.remove( str.length()-1, 1); // strip the ; 64 str = str.remove( str.length()-1, 1); // strip the ;
119 //qWarning("IDS " + str ); 65 //qWarning("IDS " + str );
120 66
121 return str; 67 return str;
122} 68 }*/
123/* if uid = 1 assign a new one */ 69/* if uid = 1 assign a new one */
124void OPimRecord::setUid( int uid ) { 70void OPimRecord::setUid( int uid ) {
125 if ( uid == 1) 71 if ( uid == 1)
126 uid = uidGen().generate(); 72 uid = uidGen().generate();
127 73
128 Qtopia::Record::setUid( uid ); 74 Qtopia::Record::setUid( uid );
129}; 75};
130Qtopia::UidGen &OPimRecord::uidGen() { 76Qtopia::UidGen &OPimRecord::uidGen() {
131 return m_uidGen; 77 return m_uidGen;
132} 78}
79OPimXRefManager &OPimRecord::xrefmanager() {
80 return m_xrefman;
81}
diff --git a/libopie2/opiepim/core/opimrecord.h b/libopie2/opiepim/core/opimrecord.h
index d9ccad4..1642a5e 100644
--- a/libopie2/opiepim/core/opimrecord.h
+++ b/libopie2/opiepim/core/opimrecord.h
@@ -1,133 +1,116 @@
1#ifndef OPIE_PIM_RECORD_H 1#ifndef OPIE_PIM_RECORD_H
2#define OPIE_PIM_RECORD_H 2#define OPIE_PIM_RECORD_H
3 3
4#include <qmap.h> 4#include <qmap.h>
5#include <qstring.h> 5#include <qstring.h>
6#include <qstringlist.h> 6#include <qstringlist.h>
7 7
8#include <qpe/palmtoprecord.h> 8#include <qpe/palmtoprecord.h>
9 9
10#include <opie/opimxrefmanager.h>
10 11
11/** 12/**
12 * This is the base class for 13 * This is the base class for
13 * all PIM Records 14 * all PIM Records
14 * 15 *
15 */ 16 */
16class OPimRecord : public Qtopia::Record { 17class OPimRecord : public Qtopia::Record {
17public: 18public:
18 /** 19 /**
19 * c'tor 20 * c'tor
20 * uid of 0 isEmpty 21 * uid of 0 isEmpty
21 * uid of 1 will be assigned a new one 22 * uid of 1 will be assigned a new one
22 */ 23 */
23 OPimRecord(int uid = 0); 24 OPimRecord(int uid = 0);
24 ~OPimRecord(); 25 ~OPimRecord();
25 26
26 /** 27 /**
27 * copy c'tor 28 * copy c'tor
28 */ 29 */
29 OPimRecord( const OPimRecord& rec ); 30 OPimRecord( const OPimRecord& rec );
30 31
31 /** 32 /**
32 * copy operator 33 * copy operator
33 */ 34 */
34 OPimRecord &operator=( const OPimRecord& ); 35 OPimRecord &operator=( const OPimRecord& );
35 36
36 /** 37 /**
37 * category names resolved 38 * category names resolved
38 */ 39 */
39 QStringList categoryNames()const; 40 QStringList categoryNames()const;
40 41
41 /** 42 /**
42 * set category names they will be resolved 43 * set category names they will be resolved
43 */ 44 */
44 void setCategoryNames( const QStringList& ); 45 void setCategoryNames( const QStringList& );
45 46
46 /** 47 /**
47 * addCategoryName adds a name 48 * addCategoryName adds a name
48 * to the internal category list 49 * to the internal category list
49 */ 50 */
50 void addCategoryName( const QString& ); 51 void addCategoryName( const QString& );
51 52
52 /** 53 /**
53 * if a Record isEmpty 54 * if a Record isEmpty
54 * it's empty if it's 0 55 * it's empty if it's 0
55 */ 56 */
56 virtual bool isEmpty()const; 57 virtual bool isEmpty()const;
57 58
58 /** 59 /**
59 * toRichText summary 60 * toRichText summary
60 */ 61 */
61 virtual QString toRichText()const = 0; 62 virtual QString toRichText()const = 0;
62 63
63 /** 64 /**
64 * a small one line summary 65 * a small one line summary
65 */ 66 */
66 virtual QString toShortText()const = 0; 67 virtual QString toShortText()const = 0;
67 68
68 /** 69 /**
69 * the name of the Record 70 * the name of the Record
70 */ 71 */
71 virtual QString type()const = 0; 72 virtual QString type()const = 0;
72 73
73 /** 74 /**
74 * converts the internal structure to a map 75 * converts the internal structure to a map
75 */ 76 */
76 virtual QMap<int, QString> toMap()const = 0; 77 virtual QMap<int, QString> toMap()const = 0;
77 78
78 /** 79 /**
79 * key value representation of extra items 80 * key value representation of extra items
80 */ 81 */
81 virtual QMap<QString, QString> toExtraMap()const = 0; 82 virtual QMap<QString, QString> toExtraMap()const = 0;
82 83
83 /** 84 /**
84 * the name for a recordField 85 * the name for a recordField
85 */ 86 */
86 virtual QString recordField(int)const = 0; 87 virtual QString recordField(int)const = 0;
87 88
88 /** 89 /**
89 * the related apps names 90 * returns a reference of the
91 * Cross Reference Manager
92 * Partner One is THIS PIM RECORD!
93 * Two is the Partner where we link to
90 */ 94 */
91 QStringList relatedApps()const; 95 OPimXRefManager& xrefmanager();
92
93 /**
94 * the realtions between an app
95 */
96 QArray<int> relations( const QString& app )const;
97
98 /**
99 * clear the relations for all relations
100 * with app
101 */
102 void clearRelation( const QString& app );
103
104 /**
105 * add a relation
106 */
107 void addRelation( const QString& app, int id );
108
109 /**
110 * set the relations for an app
111 */
112 void setRelations( const QString&, QArray<int> ids );
113 96
114 /** 97 /**
115 * set the uid 98 * set the uid
116 */ 99 */
117 virtual void setUid( int uid ); 100 virtual void setUid( int uid );
118 101
119protected: 102protected:
120 Qtopia::UidGen &uidGen(); 103 Qtopia::UidGen &uidGen();
121 QString crossToString()const; 104// QString crossToString()const;
122 105
123private: 106private:
124 class OPimRecordPrivate; 107 class OPimRecordPrivate;
125 OPimRecordPrivate *d; 108 OPimRecordPrivate *d;
126 QMap<QString, QArray<int> > m_relations; 109 OPimXRefManager m_xrefman;
127 static Qtopia::UidGen m_uidGen; 110 static Qtopia::UidGen m_uidGen;
128 111
129}; 112};
130 113
131 114
132 115
133#endif 116#endif
diff --git a/libopie2/opiepim/core/opimxref.cpp b/libopie2/opiepim/core/opimxref.cpp
new file mode 100644
index 0000000..5cae871
--- a/dev/null
+++ b/libopie2/opiepim/core/opimxref.cpp
@@ -0,0 +1,47 @@
1#include "opimxref.h"
2
3OPimXRef::OPimXRef( const OPimXRefPartner& one, const OPimXRefPartner& two )
4 : m_partners(2)
5{
6 m_partners[0] = one;
7 m_partners[1] = two;
8}
9OPimXRef::OPimXRef()
10 : m_partners(2)
11{
12
13}
14OPimXRef::OPimXRef( const OPimXRef& ref) {
15 *this = ref;
16}
17OPimXRef::~OPimXRef() {
18}
19OPimXRef &OPimXRef::operator=( const OPimXRef& ref) {
20 m_partners = ref.m_partners;
21 m_partners.detach();
22
23 return* this;
24}
25bool OPimXRef::operator==( const OPimXRef& oper ) {
26 if ( m_partners == oper.m_partners ) return true;
27
28 return false;
29}
30OPimXRefPartner OPimXRef::partner( enum Partners par) const{
31 return m_partners[par];
32}
33void OPimXRef::setPartner( enum Partners par, const OPimXRefPartner& part) {
34 m_partners[par] = part;
35}
36bool OPimXRef::containsString( const QString& string ) const{
37 if ( m_partners[One].appName() == string ||
38 m_partners[Two].appName() == string ) return true;
39
40 return false;
41}
42bool OPimXRef::containsUid( int uid ) const{
43 if ( m_partners[One].uid() == uid ||
44 m_partners[Two].uid() == uid ) return true;
45
46 return false;
47}
diff --git a/libopie2/opiepim/core/opimxref.h b/libopie2/opiepim/core/opimxref.h
index 72154ac..354739a 100644
--- a/libopie2/opiepim/core/opimxref.h
+++ b/libopie2/opiepim/core/opimxref.h
@@ -1,36 +1,39 @@
1#ifndef OPIM_XREF_H 1#ifndef OPIM_XREF_H
2#define OPIM_XREF_H 2#define OPIM_XREF_H
3 3
4#include <qarray.h> 4#include <qarray.h>
5#include <qvaluelist.h> 5#include <qvaluelist.h>
6 6
7#include <opie/opimxrefpartner.h> 7#include <opie/opimxrefpartner.h>
8 8
9/** 9/**
10 * this is a Cross Referecne between 10 * this is a Cross Referecne between
11 * two Cross Reference Partners 11 * two Cross Reference Partners
12 */ 12 */
13class OPimXRef { 13class OPimXRef {
14public: 14public:
15 typedef QValueList<OPimXRef> ValueList; 15 typedef QValueList<OPimXRef> ValueList;
16 enum Partners { One, Two }; 16 enum Partners { One, Two };
17 OPimXRef( const OPimXRefPartner& ONE, const OPimXRefPartner& ); 17 OPimXRef( const OPimXRefPartner& ONE, const OPimXRefPartner& );
18 OPimXRef(); 18 OPimXRef();
19 OPimXRef( const OPimXRef& ); 19 OPimXRef( const OPimXRef& );
20 ~OPimXRef(); 20 ~OPimXRef();
21 21
22 OPimXRef &operator=( const OPimXRef& ); 22 OPimXRef &operator=( const OPimXRef& );
23 bool operator==( const OPimXRef ); 23 bool operator==( const OPimXRef& );
24 24
25 OPimXRefPartner partner( enum Partners ); 25 OPimXRefPartner partner( enum Partners )const;
26 26
27 void setPartner( enum Partners, const OPimXRefPartner& ); 27 void setPartner( enum Partners, const OPimXRefPartner& );
28 28
29 bool containsString( const QString& appName)const;
30 bool containsUid( int uid )const;
31
29private: 32private:
30 QArray<OPimXRefPartner> m_partners; 33 QArray<OPimXRefPartner> m_partners;
31 34
32 class Private; 35 class Private;
33 Private *d; 36 Private *d;
34}; 37};
35 38
36#endif 39#endif
diff --git a/libopie2/opiepim/core/opimxrefmanager.cpp b/libopie2/opiepim/core/opimxrefmanager.cpp
new file mode 100644
index 0000000..d49f5f5
--- a/dev/null
+++ b/libopie2/opiepim/core/opimxrefmanager.cpp
@@ -0,0 +1,69 @@
1#include "opimxrefmanager.h"
2
3
4OPimXRefManager::OPimXRefManager() {
5}
6OPimXRefManager::OPimXRefManager( const OPimXRefManager& ref) {
7 m_list = ref.m_list;
8}
9OPimXRefManager &OPimXRefManager::operator=( const OPimXRefManager& ref) {
10 m_list = ref.m_list;
11 return *this;
12}
13bool OPimXRefManager::operator==( const OPimXRefManager& /*ref*/) {
14 // if ( m_list == ref.m_list ) return true;
15
16 return false;
17}
18void OPimXRefManager::add( const OPimXRef& ref) {
19 m_list.append( ref );
20}
21void OPimXRefManager::remove( const OPimXRef& ref) {
22 m_list.remove( ref );
23}
24void OPimXRefManager::replace( const OPimXRef& ref) {
25 m_list.remove( ref );
26 m_list.append( ref );
27}
28void OPimXRefManager::clear() {
29 m_list.clear();
30}
31QStringList OPimXRefManager::apps()const {
32 OPimXRef::ValueList::ConstIterator it;
33 QStringList list;
34
35 QString str;
36 for ( it = m_list.begin(); it != m_list.end(); ++it ) {
37 str = (*it).partner( OPimXRef::One ).appName();
38 if ( !list.contains( str ) ) list << str;
39
40 str = (*it).partner( OPimXRef::Two ).appName();
41 if ( !list.contains( str ) ) list << str;
42 }
43 return list;
44}
45OPimXRef::ValueList OPimXRefManager::list()const {
46 return m_list;
47}
48OPimXRef::ValueList OPimXRefManager::list( const QString& appName )const{
49 OPimXRef::ValueList list;
50 OPimXRef::ValueList::ConstIterator it;
51
52 for ( it = m_list.begin(); it != m_list.end(); ++it ) {
53 if ( (*it).containsString( appName ) )
54 list.append( (*it) );
55 }
56
57 return list;
58}
59OPimXRef::ValueList OPimXRefManager::list( int uid )const {
60 OPimXRef::ValueList list;
61 OPimXRef::ValueList::ConstIterator it;
62
63 for ( it = m_list.begin(); it != m_list.end(); ++it ) {
64 if ( (*it).containsUid( uid ) )
65 list.append( (*it) );
66 }
67
68 return list;
69}
diff --git a/libopie2/opiepim/core/opimxrefmanager.h b/libopie2/opiepim/core/opimxrefmanager.h
index 147895d..9b003a3 100644
--- a/libopie2/opiepim/core/opimxrefmanager.h
+++ b/libopie2/opiepim/core/opimxrefmanager.h
@@ -1,36 +1,41 @@
1#ifndef OPIM_XREF_MANAGER_H 1#ifndef OPIM_XREF_MANAGER_H
2#define OPIM_XREF_MANAGER_H 2#define OPIM_XREF_MANAGER_H
3 3
4#include <qstringlist.h>
5
4#include <opie/opimxref.h> 6#include <opie/opimxref.h>
5 7
6/** 8/**
7 * This is a simple manager for 9 * This is a simple manager for
8 * OPimXRefs. 10 * OPimXRefs.
9 * It allows addition, removing, replacing 11 * It allows addition, removing, replacing
10 * clearing and 'querying' the XRef... 12 * clearing and 'querying' the XRef...
11 */ 13 */
12class OPimXRefManager { 14class OPimXRefManager {
13public: 15public:
14 OPimXRefManager(); 16 OPimXRefManager();
15 OPimXRefManager( const OPimXRefManager& ); 17 OPimXRefManager( const OPimXRefManager& );
16 ~OPimXRefManager(); 18 ~OPimXRefManager();
17 19
18 OPimXRefManager& operator=( const OPimXRefManager& ); 20 OPimXRefManager& operator=( const OPimXRefManager& );
19 bool operator==( const OPimXRefManager& ); 21 bool operator==( const OPimXRefManager& );
20 22
21 void add( const OPimXRef& ); 23 void add( const OPimXRef& );
22 void remove( const OPimXRef& ); 24 void remove( const OPimXRef& );
23 void replace( const OPimXRef& ); 25 void replace( const OPimXRef& );
24 26
25 void clear(); 27 void clear();
26 28
27 /** 29 /**
28 * apps participating 30 * apps participating
29 */ 31 */
30 QStringList apps()const; 32 QStringList apps()const;
31 OPimXRef::ValueList list()const; 33 OPimXRef::ValueList list()const;
32 OPimXRef::ValueList list( const QString& appName )const; 34 OPimXRef::ValueList list( const QString& appName )const;
33 OPimXRef::ValueList list( int uid )const; 35 OPimXRef::ValueList list( int uid )const;
36
37private:
38 OPimXRef::ValueList m_list;
34}; 39};
35 40
36#endif 41#endif
diff --git a/libopie2/opiepim/core/opimxrefpartner.cpp b/libopie2/opiepim/core/opimxrefpartner.cpp
new file mode 100644
index 0000000..028f4e6
--- a/dev/null
+++ b/libopie2/opiepim/core/opimxrefpartner.cpp
@@ -0,0 +1,43 @@
1#include "opimxrefpartner.h"
2
3OPimXRefPartner::OPimXRefPartner( const QString& appName,
4 int uid, int field )
5 : m_app(appName), m_uid(uid), m_field( field ) {
6}
7OPimXRefPartner::OPimXRefPartner( const OPimXRefPartner& ref ) {
8 *this = ref;
9}
10OPimXRefPartner::~OPimXRefPartner() {
11}
12OPimXRefPartner &OPimXRefPartner::operator=( const OPimXRefPartner& par ) {
13 m_app = par.m_app;
14 m_uid = par.m_uid;
15 m_field = par.m_field;
16
17 return *this;
18}
19bool OPimXRefPartner::operator==( const OPimXRefPartner& par ) {
20 if ( m_app != par.m_app ) return false;
21 if ( m_uid != par.m_uid ) return false;
22 if ( m_field != par.m_field ) return false;
23
24 return true;
25}
26QString OPimXRefPartner::appName()const {
27 return m_app;
28}
29int OPimXRefPartner::uid()const {
30 return m_uid;
31}
32int OPimXRefPartner::field()const {
33 return m_field;
34}
35void OPimXRefPartner::setAppName( const QString& appName ) {
36 m_app = appName;
37}
38void OPimXRefPartner::setUid( int uid ) {
39 m_uid = uid;
40}
41void OPimXRefPartner::setField( int field ) {
42 m_field = field;
43}