summaryrefslogtreecommitdiffabout
path: root/libkabcwrap
Side-by-side diff
Diffstat (limited to 'libkabcwrap') (more/less context) (show whitespace changes)
-rw-r--r--libkabcwrap/README30
-rw-r--r--libkabcwrap/addresseedialog.cpp69
-rw-r--r--libkabcwrap/addresseedialog.h17
-rw-r--r--libkabcwrap/kabcaddressbookplugin.cpp84
-rw-r--r--libkabcwrap/kabcaddressbookplugin.h18
-rw-r--r--libkabcwrap/koaddressbookinterface.h21
-rw-r--r--libkabcwrap/koaddressbookpluginloader.h18
-rw-r--r--libkabcwrap/koaddresspluginloader.cpp56
-rw-r--r--libkabcwrap/libkabcwrapE.pro31
-rw-r--r--libkabcwrap/select_addressee_base.cpp50
-rw-r--r--libkabcwrap/select_addressee_base.h34
-rw-r--r--libkabcwrap/select_addressee_base.ui68
12 files changed, 496 insertions, 0 deletions
diff --git a/libkabcwrap/README b/libkabcwrap/README
new file mode 100644
index 0000000..366d58c
--- a/dev/null
+++ b/libkabcwrap/README
@@ -0,0 +1,30 @@
+KAddressbook-Wrapper für Opie/Qtopia
+
+Bietet eine transparente Möglichkeit, auf die bekannten
+Klassen StdAddressBook und AddresseeDialog zuzugreifen,
+während im Hintergrund entsprechende Plugins durch Ansprechen
+der Qtopia- bzw. Opie-PIM-API die Adressedaten aufbereiten
+und laden.
+
+Einbinden in KO/Pi:
+
+In korganizerE.pro:
+
+- Die Definition KORG_NOKABC entfernen.
+- In die INCLUDEPATH den Pfad zum Quellverzeichnis des Wrapper eintragen.
+- -lkabc zu den LIBS hinzufügen
+
+In den Quelldateien incomingdialog.cpp, koeventviewer.cpp und publishdialog.cpp:
+- Alle Aufrufe von addressList.size() durch addressList.count() ersetzen.
+ Beispielsweise durch
+ perl -i -p -e 's/addressList\.size/addressList.count/g'
+
+Der Pluginlader erwartet bislang zwei Plugins
+libopiekabc.so und libqtopiakabc.so
+im Verzeichnis /opt/Qtopia/plugins/korganizer.
+Erst wird versucht, libopiekabc.so, dann libqtopiakabc.so zu laden.
+
+TODOs:
+- Fixen Pfad "/opt/Qtopia" rausnehmen.
+- AddresseeDialog::getAddressees wird momentan durch <plugin>::getAddressee
+ ersetzt, weshalb nur ein Adressat auswählbar ist.
diff --git a/libkabcwrap/addresseedialog.cpp b/libkabcwrap/addresseedialog.cpp
new file mode 100644
index 0000000..e0fe354
--- a/dev/null
+++ b/libkabcwrap/addresseedialog.cpp
@@ -0,0 +1,69 @@
+#include <qlistview.h>
+#include <qmessagebox.h>
+#include <qapplication.h>
+#include "addresseedialog.h"
+#include "select_addressee_base.h"
+
+using namespace KABC;
+
+Addressee AddresseeDialog::getAddressee( QWidget *parent ) {
+
+ Addressee result;
+ if (!getInterface()) {
+ QMessageBox::warning(parent,"Plugin missing", "Plugins for Qtopia/Opie\naddressbook missing.\nPlease install\nlibqtopiakabc.so/libopiekabc.so\nunder $QPEDIR/plugins/korganizer.\nQtopia-plugin needs libqpepim.", 0L );
+ } else {
+
+ // qDebug("Start: AddresseeDialog::getAddressee");
+
+ Addressee::List list = getAddresseesFromPlugin();
+
+ SelectAddressee *selAddressee = new SelectAddressee(parent,"SelectAddressee", true);
+ QListView *contactList = selAddressee->contactList;
+ contactList->setSelectionMode(QListView::Single);
+ if (!contactList) {
+ Addressee emptyAddressee;
+ return emptyAddressee;
+ }
+
+ for (uint i=0; i < list.count(); i++) {
+ Addressee a = list[i];
+ QString fullName = a.formattedName();
+ QString defaultEmail = a.preferredEmail();
+ //qDebug("Adding " + fullName);
+ QListViewItem *item = new QListViewItem(contactList, fullName, defaultEmail);
+ }
+ if ( QApplication::desktop()->width() < 480 ) {
+ selAddressee->setMinimumWidth( 220 );
+ } else {
+ selAddressee->setMinimumWidth( 440 );
+ }
+ if (selAddressee->exec()) {
+ QListViewItem *selectedItem = contactList->selectedItem();
+ if (selectedItem) {
+ uint i=0;
+ for (i=0; i < list.count() && (list[i].formattedName() != selectedItem->text(0)); i++);
+ if (i<list.count()) {
+ result = list[i];
+ }
+ }
+ }
+ delete selAddressee;
+ //qDebug("End: AddresseeDialog::getAddressee");
+}
+ return result;
+
+}
+
+Addressee::List AddresseeDialog::getAddressees( QWidget *parent ) {
+ //qDebug("Start: AddresseeDialog::getAddressees");
+
+ KOAddressBookInterface *iface = getInterface();
+
+ Addressee::List results;
+ if (iface) {
+ Addressee a = getAddressee(parent);
+ results.append(a);
+ }
+ //qDebug("End: AddresseeDialog::getAddressees");
+ return results;
+}
diff --git a/libkabcwrap/addresseedialog.h b/libkabcwrap/addresseedialog.h
new file mode 100644
index 0000000..400214e
--- a/dev/null
+++ b/libkabcwrap/addresseedialog.h
@@ -0,0 +1,17 @@
+#ifndef ADDRESSEE_DIALOG
+#define ADDRESSEE_DIALOG
+
+#include "addressee.h"
+#include "koaddressbookpluginloader.h"
+
+namespace KABC {
+
+class AddresseeDialog : public KOAddressBookPluginLoader {
+
+ public:
+ static Addressee getAddressee( QWidget *parent );
+ static Addressee::List getAddressees( QWidget *parent );
+
+};
+}
+#endif
diff --git a/libkabcwrap/kabcaddressbookplugin.cpp b/libkabcwrap/kabcaddressbookplugin.cpp
new file mode 100644
index 0000000..25f51d3
--- a/dev/null
+++ b/libkabcwrap/kabcaddressbookplugin.cpp
@@ -0,0 +1,84 @@
+/*US
+#include <qwidget.h>
+#include <qlayout.h>
+#include <qlistbox.h>
+#include <opie/ocontact.h>
+#include <opie/orecordlist.h>
+#include "opieaddressee.h"
+*/
+#include <stdio.h>
+#include "kabcaddressbookplugin.h"
+
+KABCAddressBookPlugin::KABCAddressBookPlugin() : ref(0) {
+
+//US access = new OContactAccess("OpieAddressBookPlugin");
+
+}
+
+KABC::Addressee::List KABCAddressBookPlugin::getAddressees() {
+ KABC::Addressee::List results;
+
+
+/*US
+ OContactAccess access("OpieAddressBookPlugin");
+ OContactAccess::List::Iterator it;
+ ORecordList<OContact> accessList = access.sorted(true,0,0,0);
+ for(it = accessList.begin(); it != accessList.end(); ++it ) {
+ OpieAddressee addressee( *it );
+ results.append(addressee);
+ }
+*/
+ qDebug("KABCAddressBookPlugin::getAddressees has to be implemented");
+
+ return results;
+}
+
+QString KABCAddressBookPlugin::name() {
+ return QString::QString("KABCAddressBookPlugin");
+}
+
+
+KABC::Addressee::List KABCAddressBookPlugin::findByEmail(const QString &email) {
+
+printf("KABCAddressBookPlugin::findByEmail: email=%s\n", email.ascii());
+ KABC::Addressee::List results;
+/*US
+
+ ORecordList<OContact> accessList = access->sorted(true,0,0,0);
+ OContactAccess::List::Iterator it;
+ for(it = accessList.begin(); it != accessList.end(); ++it ) {
+ OContact contact = *it;
+ QStringList emailList = contact.emailList();
+ QStringList foundEmails = emailList.grep(email,false);
+ if (foundEmails.count() >= 1) {
+ OpieAddressee a(contact);
+ printf("Found Contact %s\n", a.formattedName().ascii());
+ results.append(a);
+ }
+ }
+*/
+ qDebug("KABCAddressBookPlugin::findByEmail has to be implemented");
+
+ return results;
+
+}
+
+QRESULT KABCAddressBookPlugin::queryInterface( const QUuid &uuid, QUnknownInterface **iface )
+{
+printf("Start: KABCAddressBookPlugin::queryInterface\n");
+ *iface = 0;
+ if ( uuid == IID_QUnknown )
+ *iface = this;
+ else if ( uuid == IID_KOAddressBookInterface )
+ *iface = this;
+ if ( *iface )
+ (*iface)->addRef();
+ return QS_OK;
+printf("End: KABCAddressBookPlugin::queryInterface\n");
+}
+
+Q_EXPORT_INTERFACE()
+{
+ Q_CREATE_INSTANCE( KABCAddressBookPlugin )
+}
+
diff --git a/libkabcwrap/kabcaddressbookplugin.h b/libkabcwrap/kabcaddressbookplugin.h
new file mode 100644
index 0000000..0f82744
--- a/dev/null
+++ b/libkabcwrap/kabcaddressbookplugin.h
@@ -0,0 +1,18 @@
+#include <qwidget.h>
+#include <koaddressbookinterface.h>
+#include <addressee.h>
+
+struct KABCAddressBookPlugin : public KOAddressBookInterface {
+
+ public:
+
+ KABCAddressBookPlugin::KABCAddressBookPlugin();
+ QString name();
+ KABC::Addressee::List getAddressees();
+ KABC::Addressee::List findByEmail(const QString &email);
+ QRESULT queryInterface( const QUuid&, QUnknownInterface** );
+ Q_REFCOUNT
+ protected:
+// OContactAccess *access;
+ ulong ref;
+};
diff --git a/libkabcwrap/koaddressbookinterface.h b/libkabcwrap/koaddressbookinterface.h
new file mode 100644
index 0000000..3889d2a
--- a/dev/null
+++ b/libkabcwrap/koaddressbookinterface.h
@@ -0,0 +1,21 @@
+#ifndef KO_ADDRESS_BOOK_INTERFACE_H
+#define KO_ADDRESS_BOOK_INTERFACE_H
+
+#include <qwidget.h>
+#include <qpe/qcom.h>
+#include "addressee.h"
+
+#ifndef QT_NO_COMPONENT
+#ifndef IID_KOAddressBookInterface
+#define IID_KOAddressBookInterface QUuid( 0x7505e192, 0x4977, 0x465a, 0xb7, 0x2f, 0x0a, 0x8d, 0xd4, 0x91, 0xcf, 0x43)
+#endif
+#endif
+
+struct KOAddressBookInterface : public QUnknownInterface {
+
+ virtual QString name() = 0;
+ virtual KABC::Addressee::List getAddressees() = 0;
+
+};
+#endif
+
diff --git a/libkabcwrap/koaddressbookpluginloader.h b/libkabcwrap/koaddressbookpluginloader.h
new file mode 100644
index 0000000..0182b29
--- a/dev/null
+++ b/libkabcwrap/koaddressbookpluginloader.h
@@ -0,0 +1,18 @@
+#ifndef KO_ADDRESS_BOOK_PLUGIN_LOADER_H
+#define KO_ADDRESS_BOOK_PLUGIN_LOADER_H
+
+#include "addressee.h"
+#include "koaddressbookinterface.h"
+
+class KOAddressBookPluginLoader {
+
+ public:
+ static KOAddressBookInterface *getInterface();
+ static KABC::Addressee::List getAddresseesFromPlugin();
+
+ private:
+ static KOAddressBookInterface *iface;
+ static KABC::Addressee::List addresseeList;
+};
+
+#endif
diff --git a/libkabcwrap/koaddresspluginloader.cpp b/libkabcwrap/koaddresspluginloader.cpp
new file mode 100644
index 0000000..d329262
--- a/dev/null
+++ b/libkabcwrap/koaddresspluginloader.cpp
@@ -0,0 +1,56 @@
+#include <stdio.h>
+#include <qtopia/qlibrary.h>
+#include <qpe/qpeapplication.h>
+#include "koaddressbookpluginloader.h"
+#include "kabcaddressbookplugin.h"
+
+KOAddressBookInterface *KOAddressBookPluginLoader::iface = 0;
+KABC::Addressee::List KOAddressBookPluginLoader::addresseeList;
+
+KOAddressBookInterface *KOAddressBookPluginLoader::getInterface() {
+
+ qDebug("Start: KOAddressBookPluginLoader::getInterface");
+
+ if (!iface) {
+
+ const QString & qpeDir = QPEApplication::qpeDir();
+ QLibrary *lib = new QLibrary( qpeDir + "/plugins/korganizer/libopiekabc.so", QLibrary::Immediately );
+ QRESULT q = lib->queryInterface( IID_QUnknown, (QUnknownInterface**)&iface );
+ if ( q != QS_OK ) {
+ lib = new QLibrary( qpeDir + "/plugins/korganizer/libqtopiakabc.so", QLibrary::Immediately );
+ QRESULT q = lib->queryInterface( IID_QUnknown, (QUnknownInterface**)&iface );
+ // we checked now for all known external interfaces. If no were found, use the default KABC interface
+ if ( q != QS_OK ) {
+ iface = new KABCAddressBookPlugin();
+ }
+ }
+ }
+
+ qDebug("End: KOAddressBookPluginLoader::getInterface");
+ return iface;
+
+}
+
+KABC::Addressee::List KOAddressBookPluginLoader::getAddresseesFromPlugin() {
+
+ qDebug("Start: KOAddressBookPluginLoader::getAddresseesFromPlugin");
+ addresseeList.clear();
+ if (!(addresseeList.count() > 0)) {
+ qDebug("KOAddressBookPluginLoader::getAddresseesFromPlugin: no addresses loaded. Loading...");
+ if (!iface) {
+ qDebug("KOAddressBookPluginLoader::getAddresseesFromPlugin: no interface loaded. Loading...");
+ iface = getInterface();
+ }
+ if (iface) {
+ qDebug("KOAddressBookPluginLoader::getAddresseesFromPlugin: interface is " + iface->name());
+ addresseeList = iface->getAddressees();
+ } else {
+ qDebug("KOAddressBookPluginLoader::getAddresseesFromPlugin: No interface found!");
+ }
+ }
+
+
+ qDebug("End: KOAddressBookPluginLoader::getAddresseesFromPlugin");
+ return addresseeList;
+
+}
diff --git a/libkabcwrap/libkabcwrapE.pro b/libkabcwrap/libkabcwrapE.pro
new file mode 100644
index 0000000..c0f1fe5
--- a/dev/null
+++ b/libkabcwrap/libkabcwrapE.pro
@@ -0,0 +1,31 @@
+TEMPLATE = lib
+CONFIG += qt warn_on release
+
+TARGET = microkabcwrap
+OBJECTS_DIR = obj/$(PLATFORM)
+MOC_DIR = moc
+DESTDIR=$(QPEDIR)/lib
+INCLUDEPATH += . $(QPEDIR)/include ../kabc ../microkde ../microkde/kdecore
+DEFINES +=
+LIBS += -lmicrokabc
+LIBS += -L$(QPEDIR)/lib
+#US LIBS += -lqpe
+#US LIBS += -lqte
+
+INTERFACES += select_addressee_base.ui
+
+HEADERS = \
+ addresseedialog.h \
+ koaddressbookinterface.h \
+ kabcaddressbookplugin.h
+
+# kabc/addressee.h \
+# kabc/addressbook.h \
+# kabc/stdaddressbook.h \
+
+SOURCES = \
+ addresseedialog.cpp \
+ koaddresspluginloader.cpp \
+ kabcaddressbookplugin.cpp
+# addressee.cpp \
+# stdaddressbook.cpp \
diff --git a/libkabcwrap/select_addressee_base.cpp b/libkabcwrap/select_addressee_base.cpp
new file mode 100644
index 0000000..1b846e2
--- a/dev/null
+++ b/libkabcwrap/select_addressee_base.cpp
@@ -0,0 +1,50 @@
+/****************************************************************************
+** Form implementation generated from reading ui file 'select_addressee_base.ui'
+**
+** Created: Fri Feb 6 04:58:15 2004
+** by: The User Interface Compiler (uic)
+**
+** WARNING! All changes made in this file will be lost!
+****************************************************************************/
+#include "select_addressee_base.h"
+
+#include <qheader.h>
+#include <qlistview.h>
+#include <qpushbutton.h>
+#include <qlayout.h>
+#include <qvariant.h>
+#include <qtooltip.h>
+#include <qwhatsthis.h>
+
+/*
+ * Constructs a SelectAddressee which is a child of 'parent', with the
+ * name 'name' and widget flags set to 'f'
+ *
+ * The dialog will by default be modeless, unless you set 'modal' to
+ * TRUE to construct a modal dialog.
+ */
+SelectAddressee::SelectAddressee( QWidget* parent, const char* name, bool modal, WFlags fl )
+ : QDialog( parent, name, modal, fl )
+{
+ if ( !name )
+ setName( "SelectAddressee" );
+ resize( 208, 267 );
+ setCaption( tr( "Select adressee" ) );
+ SelectAddresseeLayout = new QVBoxLayout( this );
+ SelectAddresseeLayout->setSpacing( 6 );
+ SelectAddresseeLayout->setMargin( 11 );
+
+ contactList = new QListView( this, "contactList" );
+ contactList->addColumn( tr( "Name" ) );
+ contactList->addColumn( tr( "Email" ) );
+ SelectAddresseeLayout->addWidget( contactList );
+}
+
+/*
+ * Destroys the object and frees any allocated resources
+ */
+SelectAddressee::~SelectAddressee()
+{
+ // no need to delete child widgets, Qt does it all for us
+}
+
diff --git a/libkabcwrap/select_addressee_base.h b/libkabcwrap/select_addressee_base.h
new file mode 100644
index 0000000..d77b44e
--- a/dev/null
+++ b/libkabcwrap/select_addressee_base.h
@@ -0,0 +1,34 @@
+/****************************************************************************
+** Form interface generated from reading ui file 'select_addressee_base.ui'
+**
+** Created: Fri Feb 6 04:58:14 2004
+** by: The User Interface Compiler (uic)
+**
+** WARNING! All changes made in this file will be lost!
+****************************************************************************/
+#ifndef SELECTADDRESSEE_H
+#define SELECTADDRESSEE_H
+
+#include <qvariant.h>
+#include <qdialog.h>
+class QVBoxLayout;
+class QHBoxLayout;
+class QGridLayout;
+class QListView;
+class QListViewItem;
+
+class SelectAddressee : public QDialog
+{
+ Q_OBJECT
+
+public:
+ SelectAddressee( QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 );
+ ~SelectAddressee();
+
+ QListView* contactList;
+
+protected:
+ QVBoxLayout* SelectAddresseeLayout;
+};
+
+#endif // SELECTADDRESSEE_H
diff --git a/libkabcwrap/select_addressee_base.ui b/libkabcwrap/select_addressee_base.ui
new file mode 100644
index 0000000..d145b0d
--- a/dev/null
+++ b/libkabcwrap/select_addressee_base.ui
@@ -0,0 +1,68 @@
+<!DOCTYPE UI><UI>
+<class>SelectAddressee</class>
+<widget>
+ <class>QDialog</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>SelectAddressee</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>208</width>
+ <height>267</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>caption</name>
+ <string>Select adressee</string>
+ </property>
+ <vbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>11</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QListView</class>
+ <column>
+ <property>
+ <name>text</name>
+ <string>Name</string>
+ </property>
+ <property>
+ <name>clickable</name>
+ <bool>true</bool>
+ </property>
+ <property>
+ <name>resizeable</name>
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property>
+ <name>text</name>
+ <string>Email</string>
+ </property>
+ <property>
+ <name>clickable</name>
+ <bool>true</bool>
+ </property>
+ <property>
+ <name>resizeable</name>
+ <bool>true</bool>
+ </property>
+ </column>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>contactList</cstring>
+ </property>
+ </widget>
+ </vbox>
+</widget>
+</UI>