From 6c715b67a8f0e32a4edca5be91332622834c8d91 Mon Sep 17 00:00:00 2001
From: eilers <eilers>
Date: Fri, 01 Aug 2003 12:30:16 +0000
Subject: Merging changes from BRANCH_1_0 to HEAD

---
(limited to 'libopie')

diff --git a/libopie/pim/obackendfactory.h b/libopie/pim/obackendfactory.h
index ad6cf5a..f3c339d 100644
--- a/libopie/pim/obackendfactory.h
+++ b/libopie/pim/obackendfactory.h
@@ -16,6 +16,14 @@
  * =====================================================================
  * History:
  * $Log$
+ * Revision 1.7  2003/08/01 12:30:16  eilers
+ * Merging changes from BRANCH_1_0 to HEAD
+ *
+ * Revision 1.6.4.1  2003/06/30 14:34:19  eilers
+ * Patches from Zecke:
+ * Fixing and cleaning up extraMap handling
+ * Adding d_ptr for binary compatibility in the future
+ *
  * Revision 1.6  2003/04/13 18:07:10  zecke
  * More API doc
  * QString -> const QString&
@@ -68,6 +76,8 @@
 #include "otodoaccesssql.h"
 #endif
 
+class OBackendPrivate;
+
 /**
  * This class is our factory. It will give us the default implementations
  * of at least Todolist, Contacts and Datebook. In the future this class will
@@ -148,6 +158,8 @@ class OBackendFactory
 
 
 	}
+    private:
+	OBackendPrivate* d;
 };
 
 
diff --git a/libopie/pim/ocontact.cpp b/libopie/pim/ocontact.cpp
index be4ce0a..3473baa 100644
--- a/libopie/pim/ocontact.cpp
+++ b/libopie/pim/ocontact.cpp
@@ -21,10 +21,11 @@
 
 #include "ocontact.h"
 #include "opimresolver.h"
+#include "oconversion.h"
 
 #include <qpe/stringutil.h>
-#include "oconversion.h"
 #include <qpe/timestring.h>
+#include <qpe/config.h>
 
 #include <qobject.h>
 #include <qregexp.h>
@@ -438,12 +439,16 @@ QString OContact::toRichText() const
     QString str;
     bool marker = false;
 
+    Config cfg("qpe");
+    cfg.setGroup("Appearance");
+    int addressformat = cfg.readNumEntry( "AddressFormat", Zip_City_State );
+
     // name, jobtitle and company
     if ( !(value = fullName()).isEmpty() )
-	text += "<b><h3><img src=\"addressbook/AddressBook\">" + Qtopia::escapeString(value) + "</h3></b>";
-
+	text += "<b><h3><img src=\"addressbook/AddressBook\"> " + Qtopia::escapeString(value) + "</h3></b>";
+    
     if ( !(value = jobTitle()).isEmpty() )
-	text += Qtopia::escapeString(value) + "<br>";
+	text += Qtopia::escapeString(value);
 
     comp = company();
     if ( !(value = department()).isEmpty() ) {
@@ -454,77 +459,110 @@ QString OContact::toRichText() const
 	    text += "<br>";
     }
     if ( !comp.isEmpty() )
-	text += Qtopia::escapeString(comp) + "<br>";
+	text += Qtopia::escapeString(comp);
 
-    text += "<hr><br>";
+    text += "<br><hr>";
 
     // defailt email
     QString defEmail = defaultEmail();
-    if ( !defEmail.isEmpty() )
-	text += "<b><img src=\"addressbook/email\">" + QObject::tr("Default Email: ") + "</b>"
-		+ Qtopia::escapeString(defEmail) + "<br>";
-
-    text += "<br>";
+    if ( !defEmail.isEmpty() ){
+	text += "<b><img src=\"addressbook/email\"> " + QObject::tr("Default Email: ") + "</b>"
+		+ Qtopia::escapeString(defEmail);
+	marker = true;
+    }
 
     // business address
     if ( !businessStreet().isEmpty() || !businessCity().isEmpty() ||
 	 !businessZip().isEmpty() || !businessCountry().isEmpty() ) {
-	text += QObject::tr( "<b>Work Address:</b>" );
-	text +=  "<br>";
+	text += QObject::tr( "<br><br><b>Work Address:</b>" );
 	marker = true;
     }
 
-    if ( !(value = businessStreet()).isEmpty() )
-	text += Qtopia::escapeString(value) + "<br>";
-    state =  businessState();
-    if ( !(value = businessZip()).isEmpty() )
-	text += Qtopia::escapeString(value) + " ";
-    if ( !(value = businessCity()).isEmpty() ) {
-	text += Qtopia::escapeString(value);
-	if ( state )
-	    text += ", " + Qtopia::escapeString(state);
-	text += "<br>";
-    } else if ( !state.isEmpty() )
-	text += Qtopia::escapeString(state) + "<br>";
+    if ( !(value = businessStreet()).isEmpty() ){
+	    text += "<br>" + Qtopia::escapeString(value);
+	    marker = true;
+    }
+
+    switch( addressformat ){
+    case Zip_City_State:{ //  Zip_Code City, State
+	    state =  businessState();
+	    if ( !(value = businessZip()).isEmpty() ){
+		    text += "<br>" + Qtopia::escapeString(value) + " ";
+		    marker = true;
+		    
+	    } else
+		    text += "<br>";
+
+	    if ( !(value = businessCity()).isEmpty() ) {
+		    marker = true;
+		    text += Qtopia::escapeString(value);
+		    if ( state )
+			    text += ", " + Qtopia::escapeString(state);
+	    } else if ( !state.isEmpty() ){
+		    text += "<br>" + Qtopia::escapeString(state);
+		    marker = true;
+	    }
+	    break;
+    }
+    case City_State_Zip:{ // City, State Zip_Code 
+	    state =  businessState();
+	    if ( !(value = businessCity()).isEmpty() ) {
+		    marker = true;
+		    text += "<br>" + Qtopia::escapeString(value);
+		    if ( state )
+			    text += ", " + Qtopia::escapeString(state);
+	    } else if ( !state.isEmpty() ){
+		    text += "<br>" + Qtopia::escapeString(state);
+		    marker = true;
+	    }
+	    if ( !(value = businessZip()).isEmpty() ){
+		    text += " " + Qtopia::escapeString(value);
+		    marker = true;
+	    }
+	    break;
+    }
+    }
 
-    if ( !(value = businessCountry()).isEmpty() )
-	text += Qtopia::escapeString(value) + "<br>";
+    if ( !(value = businessCountry()).isEmpty() ){
+	text += "<br>" + Qtopia::escapeString(value);
+	marker = true;
+    }
 
     // rest of Business data
     str = office();
     if ( !str.isEmpty() ){
-	text += "<b>" + QObject::tr("Office: ") + "</b>"
-		+ Qtopia::escapeString(str) + "<br>";
+	text += "<br><b>" + QObject::tr("Office: ") + "</b>"
+		+ Qtopia::escapeString(str);
 	marker = true;
     }
     str = businessWebpage();
     if ( !str.isEmpty() ){
-	text += "<b><img src=\"addressbook/webpagework\">" + QObject::tr("Business Web Page: ") + "</b>"
-		+ Qtopia::escapeString(str) + "<br>";
+	text += "<br><b><img src=\"addressbook/webpagework\"> " + QObject::tr("Business Web Page: ") + "</b>"
+		+ Qtopia::escapeString(str);
 	marker = true;
     }
     str = businessPhone();
     if ( !str.isEmpty() ){
-	text += "<b><img src=\"addressbook/phonework\">" + QObject::tr("Business Phone: ") + "</b>"
-		+ Qtopia::escapeString(str) + "<br>";
+	text += "<br><b><img src=\"addressbook/phonework\"> " + QObject::tr("Business Phone: ") + "</b>"
+		+ Qtopia::escapeString(str);
 	marker = true;
     }
     str = businessFax();
     if ( !str.isEmpty() ){
-	text += "<b><img src=\"addressbook/faxwork\">" + QObject::tr("Business Fax: ") + "</b>"
-		+ Qtopia::escapeString(str) + "<br>";
+	text += "<br><b><img src=\"addressbook/faxwork\"> " + QObject::tr("Business Fax: ") + "</b>"
+		+ Qtopia::escapeString(str);
 	marker = true;
     }
     str = businessMobile();
     if ( !str.isEmpty() ){
-	text += "<b><img src=\"addressbook/mobilework\">" + QObject::tr("Business Mobile: ") + "</b>"
-		+ Qtopia::escapeString(str) + "<br>";
+	text += "<br><b><img src=\"addressbook/mobilework\"> " + QObject::tr("Business Mobile: ") + "</b>"
+		+ Qtopia::escapeString(str);
 	marker = true;
     }
     str = businessPager();
     if ( !str.isEmpty() ){
-	text += "<b>" + QObject::tr("Business Pager: ") + "</b>"
-		+ Qtopia::escapeString(str) + "<br>";
+	text += "<br><b>" + QObject::tr("Business Pager: ") + "</b>"
+		+ Qtopia::escapeString(str);
 	marker = true;
     }
 
@@ -533,107 +571,142 @@ QString OContact::toRichText() const
     // home address
     if ( !homeStreet().isEmpty() || !homeCity().isEmpty() ||
 	 !homeZip().isEmpty() || !homeCountry().isEmpty() ) {
-	text += QObject::tr( "<b>Home Address:</b>" );
-	text +=  "<br>";
+	text += QObject::tr( "<br><br><b>Home Address:</b>" );
+	marker = true;
     }
 
-    if ( !(value = homeStreet()).isEmpty() )
-	text += Qtopia::escapeString(value) + "<br>";
-    state =  homeState();
-    if ( !(value = homeZip()).isEmpty() )
-	text += Qtopia::escapeString(value) + " ";
-    if ( !(value = homeCity()).isEmpty() ) {
-	text += Qtopia::escapeString(value);
-	if ( !state.isEmpty() )
-	    text += ", " + Qtopia::escapeString(state);
-	text += "<br>";
-    } else if (!state.isEmpty())
-	text += Qtopia::escapeString(state) + "<br>";
-    if ( !(value = homeCountry()).isEmpty() )
-	text += Qtopia::escapeString(value) + "<br>";
+    if ( !(value = homeStreet()).isEmpty() ){
+	text += "<br>" + Qtopia::escapeString(value);
+	marker = true;
+    }
+
+    switch( addressformat ){
+    case Zip_City_State:{ //  Zip_Code City, State
+	    state =  homeState();
+	    if ( !(value = homeZip()).isEmpty() ){
+		    text += "<br>" + Qtopia::escapeString(value) + " ";
+		    marker = true;
+	    } else
+		    text += "<br>";
+
+	    if ( !(value = homeCity()).isEmpty() ) {
+		    marker = true;
+		    text += Qtopia::escapeString(value);
+		    if ( !state.isEmpty() )
+			    text += ", " + Qtopia::escapeString(state);
+	    } else if (!state.isEmpty()) {
+		    text += "<br>" + Qtopia::escapeString(state);
+		    marker = true;
+	    }
+	    break;
+    }
+    case City_State_Zip:{ // City, State Zip_Code 
+	    state =  homeState();
+	    if ( !(value = homeCity()).isEmpty() ) {
+		    marker = true;
+		    text += "<br>" + Qtopia::escapeString(value);
+		    if ( state )
+			    text += ", " + Qtopia::escapeString(state);
+	    } else if ( !state.isEmpty() ){
+		    text += "<br>" + Qtopia::escapeString(state);
+		    marker = true;
+	    }
+	    if ( !(value = homeZip()).isEmpty() ){
+		    text += " " + Qtopia::escapeString(value);
+		    marker = true;
+	    }
+	    break;
+    }
+    }
+	    
+    if ( !(value = homeCountry()).isEmpty() ){
+	text += "<br>" + Qtopia::escapeString(value);
+	marker = true;
+    }
 
     // rest of Home data
     str = homeWebpage();
     if ( !str.isEmpty() ){
-	text += "<b><img src=\"addressbook/webpagehome\">" + QObject::tr("Home Web Page: ") + "</b>"
-		+ Qtopia::escapeString(str) + "<br>";
+	text += "<br><b><img src=\"addressbook/webpagehome\"> " + QObject::tr("Home Web Page: ") + "</b>"
+		+ Qtopia::escapeString(str);
 	marker = true;
     }
     str = homePhone();
     if ( !str.isEmpty() ){
-	text += "<b><img src=\"addressbook/phonehome\">" + QObject::tr("Home Phone: ") + "</b>"
-		+ Qtopia::escapeString(str) + "<br>";
+	text += "<br><b><img src=\"addressbook/phonehome\"> " + QObject::tr("Home Phone: ") + "</b>"
+		+ Qtopia::escapeString(str);
 	marker = true;
     }
     str = homeFax();
     if ( !str.isEmpty() ){
-	text += "<b><img src=\"addressbook/faxhome\">" + QObject::tr("Home Fax: ") + "</b>"
-		+ Qtopia::escapeString(str) + "<br>";
+	text += "<br><b><img src=\"addressbook/faxhome\"> " + QObject::tr("Home Fax: ") + "</b>"
+		+ Qtopia::escapeString(str);
 	marker = true;
     }
     str = homeMobile();
     if ( !str.isEmpty() ){
-	text += "<b><img src=\"addressbook/mobilehome\">" + QObject::tr("Home Mobile: ") + "</b>"
-		+ Qtopia::escapeString(str) + "<br>";
+	text += "<br><b><img src=\"addressbook/mobilehome\"> " + QObject::tr("Home Mobile: ") + "</b>"
+		+ Qtopia::escapeString(str);
 	marker = true;
     }
 
     if ( marker )
-	    text += "<br><hr><br>";
-    // the others...
+	    text += "<br><hr>";
+
+    // the rest...
     str = emails();
     if ( !str.isEmpty() && ( str != defEmail ) )
-	text += "<b>" + QObject::tr("All Emails: ") + "</b>"
-		+ Qtopia::escapeString(str) + "<br>";
+	text += "<br><b>" + QObject::tr("All Emails: ") + "</b>"
+		+ Qtopia::escapeString(str);
     str = profession();
     if ( !str.isEmpty() )
-	text += "<b>" + QObject::tr("Profession: ") + "</b>"
-		+ Qtopia::escapeString(str) + "<br>";
+	text += "<br><b>" + QObject::tr("Profession: ") + "</b>"
+		+ Qtopia::escapeString(str);
     str = assistant();
     if ( !str.isEmpty() )
-	text += "<b>" + QObject::tr("Assistant: ") + "</b>"
-		+ Qtopia::escapeString(str) + "<br>";
+	text += "<br><b>" + QObject::tr("Assistant: ") + "</b>"
+		+ Qtopia::escapeString(str);
     str = manager();
     if ( !str.isEmpty() )
-	text += "<b>" + QObject::tr("Manager: ") + "</b>"
-		+ Qtopia::escapeString(str) + "<br>";
+	text += "<br><b>" + QObject::tr("Manager: ") + "</b>"
+		+ Qtopia::escapeString(str);
     str = gender();
     if ( !str.isEmpty() && str.toInt() != 0 ) {
-	if ( str.toInt() == 1 )
-	    str = QObject::tr( "Male" );
-	else if ( str.toInt() == 2 )
-	    str = QObject::tr( "Female" );
-	text += "<b>" + QObject::tr("Gender: ") + "</b>" + str + "<br>";
+	    text += "<br>";
+	    if ( str.toInt() == 1 )
+		    str = QObject::tr( "Male" );
+	    else if ( str.toInt() == 2 )
+		    str = QObject::tr( "Female" );
+	    text += "<b>" + QObject::tr("Gender: ") + "</b>" + str;
     }
     str = spouse();
     if ( !str.isEmpty() )
-	text += "<b>" + QObject::tr("Spouse: ") + "</b>"
-		+ Qtopia::escapeString(str) + "<br>";
+	text += "<br><b>" + QObject::tr("Spouse: ") + "</b>"
+		+ Qtopia::escapeString(str);
     if ( birthday().isValid() ){
 	    str = TimeString::numberDateString( birthday() );
-	    text += "<b>" + QObject::tr("Birthday: ") + "</b>"
-		    + Qtopia::escapeString(str) + "<br>";
+	    text += "<br><b>" + QObject::tr("Birthday: ") + "</b>"
+		    + Qtopia::escapeString(str);
     }
     if ( anniversary().isValid() ){
 	    str = TimeString::numberDateString( anniversary() );
-	    text += "<b>" + QObject::tr("Anniversary: ") + "</b>"
-		    + Qtopia::escapeString(str) + "<br>";
+	    text += "<br><b>" + QObject::tr("Anniversary: ") + "</b>"
+		    + Qtopia::escapeString(str);
     }
     str = children();
     if ( !str.isEmpty() )
-	text += "<b>" + QObject::tr("Children: ") + "</b>"
-		+ Qtopia::escapeString(str) + "<br>";
+	text += "<br><b>" + QObject::tr("Children: ") + "</b>"
+		+ Qtopia::escapeString(str);
 
     str = nickname();
     if ( !str.isEmpty() )
-	text += "<b>" + QObject::tr("Nickname: ") + "</b>"
-		+ Qtopia::escapeString(str) + "<br>";
+	text += "<br><b>" + QObject::tr("Nickname: ") + "</b>"
+		+ Qtopia::escapeString(str);
 
     // categories
     if ( categoryNames("Contacts").count() ){
-	    text += "<b>" + QObject::tr( "Category:") + "</b> ";
+	    text += "<br><b>" + QObject::tr( "Category:") + "</b> ";
 	    text += categoryNames("Contacts").join(", ");
-	    text += "<br>";
     }
 
     // notes last
diff --git a/libopie/pim/ocontact.h b/libopie/pim/ocontact.h
index dd2de17..9a1a8dc 100644
--- a/libopie/pim/ocontact.h
+++ b/libopie/pim/ocontact.h
@@ -32,7 +32,7 @@ QPC_TEMPLATEEXTERN template class QPC_EXPORT QMap<int, QString>;
 // MOC_SKIP_END
 #endif
 
-class ContactPrivate;
+class OContactPrivate;
 
 /**
  * OContact class represents a specialised PIM Record for contacts.
@@ -49,6 +49,11 @@ public:
     OContact( const QMap<int, QString> &fromMap );
     virtual ~OContact();
 
+    enum DateFormat{
+	    Zip_City_State = 0,
+	    City_State_Zip
+    };
+
     /*
      * do we need to inline them
      * if yes do we need to inline them this way?
@@ -233,7 +238,7 @@ private:
 			    const QString &country ) const;
 
     QMap<int, QString> mMap;
-    ContactPrivate *d;
+    OContactPrivate *d;
 };
 
 
diff --git a/libopie/pim/ocontactaccess.h b/libopie/pim/ocontactaccess.h
index e90db32..9b0a719 100644
--- a/libopie/pim/ocontactaccess.h
+++ b/libopie/pim/ocontactaccess.h
@@ -17,6 +17,14 @@
  * =====================================================================
  * History:
  * $Log$
+ * Revision 1.9  2003/08/01 12:30:16  eilers
+ * Merging changes from BRANCH_1_0 to HEAD
+ *
+ * Revision 1.8.2.1  2003/06/30 14:34:19  eilers
+ * Patches from Zecke:
+ * Fixing and cleaning up extraMap handling
+ * Adding d_ptr for binary compatibility in the future
+ *
  * Revision 1.8  2003/05/08 13:55:09  tille
  * search stuff
  * and match, toRichText & toShortText in oevent
@@ -165,6 +173,9 @@ class OContactAccess: public QObject, public OPimAccessTemplate<OContact>
  private slots:
 	void copMessage( const QCString &msg, const QByteArray &data );
 
+ private:
+        class Private;
+	Private *d;
 
 };
 #endif
diff --git a/libopie/pim/ocontactaccessbackend.h b/libopie/pim/ocontactaccessbackend.h
index ebeb42d..280e05c 100644
--- a/libopie/pim/ocontactaccessbackend.h
+++ b/libopie/pim/ocontactaccessbackend.h
@@ -19,6 +19,14 @@
  * =====================================================================
  * History:
  * $Log$
+ * Revision 1.6  2003/08/01 12:30:16  eilers
+ * Merging changes from BRANCH_1_0 to HEAD
+ *
+ * Revision 1.5.4.1  2003/06/30 14:34:19  eilers
+ * Patches from Zecke:
+ * Fixing and cleaning up extraMap handling
+ * Adding d_ptr for binary compatibility in the future
+ *
  * Revision 1.5  2003/04/13 18:07:10  zecke
  * More API doc
  * QString -> const QString&
@@ -102,6 +110,10 @@ class OContactAccessBackend: public OPimAccessBackend<OContact> {
          * Returns a sorted list of records either ascendinf or descending for a giving criteria and category
          */
         virtual QArray<int> sorted( bool ascending, int sortOrder, int sortFilter, int cat ) = 0;
-
+	
+	
+private:
+	class Private;
+	Private *d;
 };
 #endif
diff --git a/libopie/pim/ocontactaccessbackend_vcard.cpp b/libopie/pim/ocontactaccessbackend_vcard.cpp
index 270bef3..b60c5be 100644
--- a/libopie/pim/ocontactaccessbackend_vcard.cpp
+++ b/libopie/pim/ocontactaccessbackend_vcard.cpp
@@ -17,6 +17,21 @@
  * =====================================================================
  * History:
  * $Log$
+ * Revision 1.11  2003/08/01 12:30:16  eilers
+ * Merging changes from BRANCH_1_0 to HEAD
+ *
+ * Revision 1.10.4.3  2003/07/23 08:54:37  eilers
+ * Default email was added to the list of all emails, which already contains
+ * the default email..
+ * This closes bug #1045
+ *
+ * Revision 1.10.4.2  2003/07/23 08:44:45  eilers
+ * Importing of Notes in vcard files wasn't implemented.
+ * Closes bug #1044
+ *
+ * Revision 1.10.4.1  2003/06/02 13:37:49  eilers
+ * Fixing memory leak
+ *
  * Revision 1.10  2003/04/13 18:07:10  zecke
  * More API doc
  * QString -> const QString&
@@ -151,6 +166,7 @@ bool OContactAccessBackend_VCard::save()
 		cleanVObject( vo );
 	}
 	cleanStrTbl();
+	deleteVObject( obj );
 
 	m_dirty = false;
 	return true;
@@ -446,7 +462,9 @@ OContact OContactAccessBackend_VCard::parseVObject( VObject *obj )
 			c.setBirthday( convVCardDateToDate( value ) );
 
 		}
-
+		else if ( name == VCCommentProp ) {
+			c.setNotes( value );
+		}
 #if 0
 		else {
 			printf("Name: %s, value=%s\n", name.data(), vObjectStringZValue( o ) );
@@ -534,7 +552,7 @@ VObject* OContactAccessBackend_VCard::createVObject( const OContact &c )
 
 
 	QStringList emails = c.emailList();
-	emails.prepend( c.defaultEmail() );
+	// emails.prepend( c.defaultEmail() ); Fix for bugreport #1045
 	for( QStringList::Iterator it = emails.begin(); it != emails.end(); ++it ) {
 		VObject *email = safeAddPropValue( vcard, VCEmailAddressProp, *it );
 		safeAddProp( email, VCInternetProp );
diff --git a/libopie/pim/ocontactaccessbackend_xml.cpp b/libopie/pim/ocontactaccessbackend_xml.cpp
index 097142b..1c21619 100644
--- a/libopie/pim/ocontactaccessbackend_xml.cpp
+++ b/libopie/pim/ocontactaccessbackend_xml.cpp
@@ -17,6 +17,9 @@
  * =====================================================================
  * History:
  * $Log$
+ * Revision 1.7  2003/08/01 12:30:16  eilers
+ * Merging changes from BRANCH_1_0 to HEAD
+ *
  * Revision 1.6  2003/07/07 16:19:47  eilers
  * Fixing serious bug in hasQuerySettings()
  *
diff --git a/libopie/pim/oconversion.h b/libopie/pim/oconversion.h
index 13367e1..4c0a497 100644
--- a/libopie/pim/oconversion.h
+++ b/libopie/pim/oconversion.h
@@ -37,6 +37,11 @@ public:
      */
     static QString dateTimeToString( const QDateTime& );
     static QDateTime dateTimeFromString( const QString& );
+    
+private:
+    class Private;
+    Private* d;    
+    
 };
 
 #endif // __oconversion_h__
diff --git a/libopie/pim/odatebookaccessbackend.h b/libopie/pim/odatebookaccessbackend.h
index 86ff298..3c02c42 100644
--- a/libopie/pim/odatebookaccessbackend.h
+++ b/libopie/pim/odatebookaccessbackend.h
@@ -68,6 +68,10 @@ public:
      */
     virtual OEffectiveEvent::ValueList effecticeEvents( const QDateTime& start );
 
+private:
+    class Private;
+    Private *d;
+
 };
 
 #endif
diff --git a/libopie/pim/odatebookaccessbackend_xml.cpp b/libopie/pim/odatebookaccessbackend_xml.cpp
index ab2eea4..5ea945c 100644
--- a/libopie/pim/odatebookaccessbackend_xml.cpp
+++ b/libopie/pim/odatebookaccessbackend_xml.cpp
@@ -430,9 +430,9 @@ bool ODateBookAccessBackend_XML::loadFile() {
              */
             find = dict[attr.data()];
             if (!find)
-                ev.setCustomField( attr, value );
+                ev.setCustomField( attr, str );
             else {
-                setField( ev, *find, value );
+                setField( ev, *find, str );
             }
         }
         /* time to finalize */
@@ -453,7 +453,7 @@ void ODateBookAccessBackend_XML::finalizeRecord( OEvent& ev ) {
         ev.setTimeZone( "UTC"); // make sure it is really utc
     }else {
         /* to current date time */
-        qWarning(" Start is %d", start );
+        // qWarning(" Start is %d", start );
         OTimeZone zone( ev.timeZone().isEmpty() ? OTimeZone::current() : ev.timeZone() );
         QDateTime date = zone.toDateTime( start );
         qWarning(" Start is %s", date.toString().latin1() );
diff --git a/libopie/pim/opimaccessbackend.h b/libopie/pim/opimaccessbackend.h
index f4bbe35..c3d91f7 100644
--- a/libopie/pim/opimaccessbackend.h
+++ b/libopie/pim/opimaccessbackend.h
@@ -7,6 +7,7 @@
 #include <opie/opimrecord.h>
 
 
+class OPimAccessBackendPrivate;
 /**
  * OPimAccessBackend is the base class
  * for all private backends
@@ -107,8 +108,7 @@ protected:
     uint readAhead()const;
 
 private:
-    class Private;
-    Private* d;
+    OPimAccessBackendPrivate *d;
     Frontend* m_front;
     uint m_read;
     int m_acc;
diff --git a/libopie/pim/opimaccesstemplate.h b/libopie/pim/opimaccesstemplate.h
index 8ff205c..ecbeb68 100644
--- a/libopie/pim/opimaccesstemplate.h
+++ b/libopie/pim/opimaccesstemplate.h
@@ -10,6 +10,7 @@
 #include "opimcache.h"
 #include "otemplatebase.h"
 
+class OPimAccessTemplatePrivate;
 /**
  * Thats the frontend to our OPIE PIM
  * Library. Either you want to use it's
@@ -152,6 +153,9 @@ protected:
     BackEnd* m_backEnd;
     Cache m_cache;
 
+private:
+    OPimAccessTemplatePrivate *d;
+
 };
 
 template <class T>
diff --git a/libopie/pim/opimcache.h b/libopie/pim/opimcache.h
index 73414e5..7f7cff5 100644
--- a/libopie/pim/opimcache.h
+++ b/libopie/pim/opimcache.h
@@ -5,6 +5,8 @@
 
 #include "opimrecord.h"
 
+class OPimCacheItemPrivate;
+
 template <class T = OPimRecord>
 class OPimCacheItem {
 public:
@@ -18,8 +20,11 @@ public:
     void setRecord( const T& );
 private:
     T m_t;
+    OPimCacheItemPrivate *d;
 };
 
+
+class OPimCachePrivate;
 /**
  * OPimCache for caching the items
  * We support adding, removing
@@ -46,6 +51,7 @@ public:
 
 private:
     QIntCache<Item> m_cache;
+    OPimCachePrivate* d;
 };
 
 // Implementation
diff --git a/libopie/pim/opimmainwindow.cpp b/libopie/pim/opimmainwindow.cpp
index 4044bc1..2739e26 100644
--- a/libopie/pim/opimmainwindow.cpp
+++ b/libopie/pim/opimmainwindow.cpp
@@ -4,6 +4,7 @@
 
 #include <qpe/sound.h>
 #include <qpe/qcopenvelope_qws.h>
+#include <qpe/qpeapplication.h>
 
 #include "opimresolver.h"
 #include "opimmainwindow.h"
@@ -38,30 +39,37 @@ void OPimMainWindow::doSetDocument( const QString&  ) {
 
 }
 void OPimMainWindow::appMessage( const QCString& cmd, const QByteArray& array ) {
+    bool needShow = false;
     /*
      * create demands to create
      * a new record...
      */
     QDataStream stream(array, IO_ReadOnly);
     if ( cmd == "create()" ) {
+        raise();
         int uid = create();
         QCopEnvelope e(m_str, "created(int)" );
         e << uid;
+        needShow = true;
     }else if ( cmd == "remove(int)" ) {
         int uid;
         stream >> uid;
         bool rem = remove( uid );
         QCopEnvelope e(m_str, "removed(bool)" );
         e << rem;
+        needShow = true;
     }else if ( cmd == "beam(int)" ) {
         int uid;
         stream >> uid;
         beam( uid);
     }else if ( cmd == "show(int)" ) {
+        raise();
         int uid;
         stream >> uid;
         show( uid );
+        needShow = true;
     }else if ( cmd == "edit(int)" ) {
+        raise();
         int uid;
         stream >> uid;
         edit( uid );
@@ -75,6 +83,7 @@ void OPimMainWindow::appMessage( const QCString& cmd, const QByteArray& array )
         add( *m_fallBack );
         delete m_fallBack;
     }else if ( cmd == "alarm(QDateTime,int)" ) {
+        raise();
         QDateTime dt; int uid;
         stream >> dt;
         stream >> uid;
@@ -83,8 +92,11 @@ void OPimMainWindow::appMessage( const QCString& cmd, const QByteArray& array )
         if ( current.time().hour() != dt.time().hour() && current.time().minute() != dt.time().minute() )
             return;
         doAlarm( dt,  uid );
-
+        needShow = true;
     }
+
+    if (needShow )
+        QPEApplication::setKeepRunning();
 }
 /* implement the url scripting here */
 void OPimMainWindow::setDocument( const QString& str) {
diff --git a/libopie/pim/opimxrefmanager.h b/libopie/pim/opimxrefmanager.h
index 39e5eef..c485e98 100644
--- a/libopie/pim/opimxrefmanager.h
+++ b/libopie/pim/opimxrefmanager.h
@@ -36,6 +36,8 @@ public:
 
 private:
     OPimXRef::ValueList m_list;
+    class Private;
+    Private *d;
 };
 
 #endif
diff --git a/libopie/pim/orecordlist.h b/libopie/pim/orecordlist.h
index edcd729..5211f57 100644
--- a/libopie/pim/orecordlist.h
+++ b/libopie/pim/orecordlist.h
@@ -7,6 +7,7 @@
 #include "otemplatebase.h"
 #include "opimrecord.h"
 
+class ORecordListIteratorPrivate;
 /**
  * Our List Iterator
  * it behaves like STL or Qt
@@ -71,9 +72,10 @@ private:
     bool m_direction :1;
 
     /* d pointer for future versions */
-    class IteratorPrivate;
-    IteratorPrivate *d;
+    ORecordListIteratorPrivate *d;
 };
+
+class ORecordListPrivate;
 /**
  * The recordlist used as a return type
  * from OPimAccessTemplate
@@ -111,7 +113,7 @@ ORecordList( const QArray<int>& ids,
     T operator[]( uint i );
     int uidAt(uint i );
 
-   /** 
+   /**
     * Remove the contact with given uid
     */
     bool remove( int uid );
@@ -123,6 +125,7 @@ ORecordList( const QArray<int>& ids,
 private:
     QArray<int> m_ids;
     const Base* m_acc;
+    ORecordListPrivate *d;
 };
 
 /* ok now implement it  */
@@ -220,6 +223,9 @@ ORecordListIterator<T>::ORecordListIterator( const QArray<int> uids,
     : m_uids( uids ), m_current( 0 ),  m_temp( t ), m_end( false ),
       m_direction( false )
 {
+    /* if the list is empty we're already at the end of the list */
+    if (uids.count() == 0 )
+        m_end = true;
 }
 template <class T>
 uint ORecordListIterator<T>::current()const {
diff --git a/libopie/pim/otemplatebase.h b/libopie/pim/otemplatebase.h
index 29fb6ec..cadac74 100644
--- a/libopie/pim/otemplatebase.h
+++ b/libopie/pim/otemplatebase.h
@@ -14,6 +14,7 @@
  * You may not want to use that interface internaly
  * POOR mans interface
  */
+class OPimBasePrivate;
 struct OPimBase {
     /**
      * return the rtti
@@ -32,12 +33,15 @@ struct OPimBase {
      * ADD editing here?
      * -zecke
      */
+private:
+    OPimBasePrivate* d;     
 
 };
 /**
  * internal template base
  * T needs to implement the copy c'tor!!!
  */
+class OTemplateBasePrivate;
 template <class T = OPimRecord>
 class OTemplateBase : public OPimBase {
 public:
@@ -61,6 +65,9 @@ public:
     OPimRecord* record()const;
     OPimRecord* record(int uid )const;
     static T* rec();
+    
+private:
+    OTemplateBasePrivate *d;    
 };
 
 /*
diff --git a/libopie/pim/otodo.cpp b/libopie/pim/otodo.cpp
index 38b93f7..5a18c37 100644
--- a/libopie/pim/otodo.cpp
+++ b/libopie/pim/otodo.cpp
@@ -28,6 +28,11 @@ struct OTodo::OTodoData : public QShared {
         maintainer = 0;
         notifiers = 0;
     };
+    ~OTodoData() {
+        delete recur;
+        delete maintainer;
+        delete notifiers;
+    }
 
     QDate date;
     bool isCompleted:1;
@@ -274,7 +279,7 @@ QString OTodo::toRichText() const
   QStringList catlist;
 
   // summary
-  text += "<b><h3><img src=\"todo/TodoList\">";
+  text += "<b><h3><img src=\"todo/TodoList\"> ";
   if ( !summary().isEmpty() ) {
       text += Qtopia::escapeString(summary() ).replace(QRegExp( "[\n]"),  "" );
   }
@@ -282,16 +287,15 @@ QString OTodo::toRichText() const
 
   // description
   if( !description().isEmpty() ){
-    text += "<b>" + QObject::tr( "Description:" ) + "</b><br>";
-    text += Qtopia::escapeString(description() ).replace(QRegExp( "[\n]"), "<br>" ) ;
+    text += "<b>" + QObject::tr( "Notes:" ) + "</b><br>";
+    text += Qtopia::escapeString(description() ).replace(QRegExp( "[\n]"), "<br>" ) + "<br>";
   }
 
   // priority
   int priorityval = priority();
   text += "<b>" + QObject::tr( "Priority:") +" </b><img src=\"todo/priority" +
-          QString::number( priorityval ) + "\">";
-//  text += "<b>" + QObject::tr( "Priority:") +"</b><img src=\"todo/priority" +
-//          QString::number( priority() ) + "\"><br>";
+          QString::number( priorityval ) + "\"> ";
+
   switch ( priorityval )
   {
     case 1 : text += QObject::tr( "Very high" );
diff --git a/libopie/pim/otodo.h b/libopie/pim/otodo.h
index f9a345a..6df98b9 100644
--- a/libopie/pim/otodo.h
+++ b/libopie/pim/otodo.h
@@ -98,11 +98,6 @@ public:
     bool hasCompletedDate()const;
 
     /**
-     * Does this Event has an alarm time ?
-     */
-    bool hasAlarmDateTime() const;
-
-    /**
      * What is the priority?
      */
     int priority()const ;
@@ -241,10 +236,6 @@ public:
     void setCompletedDate( const QDate& date );
 
     void setRecurrence( const ORecur& );
-    /**
-     * set the alarm time
-     */
-    void setAlarmDateTime ( const QDateTime& alarm );
 
     void setDescription(const QString& );
     void setSummary(const QString& );
diff --git a/libopie/pim/otodoaccessbackend.h b/libopie/pim/otodoaccessbackend.h
index 05e8ca9..6be95bc 100644
--- a/libopie/pim/otodoaccessbackend.h
+++ b/libopie/pim/otodoaccessbackend.h
@@ -18,6 +18,10 @@ public:
                                 int cat ) = 0;
     virtual void        removeAllCompleted() = 0;
     virtual QBitArray supports()const = 0;
+    
+private:
+    class Private;
+    Private *d;
 
 };
 
diff --git a/libopie/pim/otodoaccessvcal.cpp b/libopie/pim/otodoaccessvcal.cpp
index 3577e14..6415952 100644
--- a/libopie/pim/otodoaccessvcal.cpp
+++ b/libopie/pim/otodoaccessvcal.cpp
@@ -15,12 +15,20 @@ namespace {
         // description
         if( ( ob = isAPropertyOf( obj, VCDescriptionProp )) != 0 ){
             name = vObjectStringZValue( ob );
+#if 0
             event.setDescription( name );
+#else
+            event.setSummary( name );
+#endif
         }
         // summary
         if ( ( ob = isAPropertyOf( obj,  VCSummaryProp ) ) != 0 ) {
             name = vObjectStringZValue( ob );
+#if 0
             event.setSummary( name );
+#else
+            event.setDescription( name );
+#endif
         }
         // completed
         if( ( ob = isAPropertyOf( obj, VCStatusProp )) != 0 ){
@@ -74,11 +82,27 @@ namespace {
         addPropValue( task, VCCategoriesProp,
                       event.idsToString( event.categories() ).local8Bit() );
 
+#if 0
+
+	// There seems a misrepresentation between summary in otodoevent
+	// and summary in vcard. 
+	// The same with description..
+	// Description is summary and vice versa.. Argh.. (eilers)
+
+
         addPropValue( task, VCDescriptionProp,
                       event.description().local8Bit() );
 
         addPropValue( task, VCSummaryProp,
                       event.summary().local8Bit() );
+
+#else
+        addPropValue( task, VCDescriptionProp,
+                      event.summary().local8Bit() );
+
+        addPropValue( task, VCSummaryProp,
+                      event.description().local8Bit() );
+#endif 
   return task;
 };
 }
@@ -185,7 +209,7 @@ QArray<int> OTodoAccessVCal::allRecords()const {
     }
     return ar;
 }
-QArray<int> OTodoAccessVCal::matchRegexp(const QRegExp &r)const {
+QArray<int> OTodoAccessVCal::matchRegexp(const QRegExp& /* r */)const {
     QArray<int> ar(0);
     return ar;
 }
diff --git a/libopie/pim/otodoaccessxml.cpp b/libopie/pim/otodoaccessxml.cpp
index 3d15354..f688735 100644
--- a/libopie/pim/otodoaccessxml.cpp
+++ b/libopie/pim/otodoaccessxml.cpp
@@ -87,7 +87,7 @@ bool OTodoAccessXML::load() {
     /*
      * UPDATE dict if you change anything!!!
      */
-    QAsciiDict<int> dict(21);
+    QAsciiDict<int> dict(26);
     dict.setAutoDelete( TRUE );
     dict.insert("Categories" ,     new int(OTodo::Category)         );
     dict.insert("Uid" ,            new int(OTodo::Uid)              );
@@ -836,10 +836,12 @@ QArray<int> OTodoAccessXML::sorted( bool asc,  int sortOrder,
     return array;
 };
 void OTodoAccessXML::removeAllCompleted() {
+    QMap<int, OTodo> events = m_events;
     for ( QMap<int, OTodo>::Iterator it = m_events.begin(); it != m_events.end(); ++it ) {
         if ( (*it).isCompleted() )
-            m_events.remove( it );
+            events.remove( it.key() );
     }
+    m_events = events;
 }
 QBitArray OTodoAccessXML::supports()const {
     static QBitArray ar = sup();
--
cgit v0.9.0.2