summaryrefslogtreecommitdiffstats
path: root/doc/src/snippets/qtversitdocsample/qtversitdocsample.cpp
diff options
context:
space:
mode:
authorKevin Wu Won <kevin.wu-won@nokia.com>2010-02-02 15:23:18 +1000
committerKevin Wu Won <kevin.wu-won@nokia.com>2010-02-02 15:24:21 +1000
commit3fb9ecbc8da6802e671c211b3883328aaafb8400 (patch)
treedc721dcbb9b820e0829d16f399d3c76d1af05904 /doc/src/snippets/qtversitdocsample/qtversitdocsample.cpp
parent980edfba1c6e5a5b1b82c00027a1cf29a8dfbc27 (diff)
More improvements to Versit documentation.
Diffstat (limited to 'doc/src/snippets/qtversitdocsample/qtversitdocsample.cpp')
-rw-r--r--doc/src/snippets/qtversitdocsample/qtversitdocsample.cpp218
1 files changed, 218 insertions, 0 deletions
diff --git a/doc/src/snippets/qtversitdocsample/qtversitdocsample.cpp b/doc/src/snippets/qtversitdocsample/qtversitdocsample.cpp
new file mode 100644
index 0000000000..a15044204a
--- /dev/null
+++ b/doc/src/snippets/qtversitdocsample/qtversitdocsample.cpp
@@ -0,0 +1,218 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qtcontacts.h"
+#include "qversitreader.h"
+#include "qversitcontactimporter.h"
+#include "qversitwriter.h"
+#include "qversitcontactexporter.h"
+#include "qversitdocument.h"
+#include "qversitproperty.h"
+#include "qversitresourcehandler.h"
+#include <QCoreApplication>
+#include <QBuffer>
+#include <QList>
+#include <QFile>
+
+using namespace QtMobility;
+
+void completeExample();
+void exportExample();
+void importExample();
+
+//! [Detail handler]
+class MyDetailHandler : public QVersitContactExporterDetailHandler {
+public:
+ bool preProcessDetail(const QContact& contact, const QContactDetail& detail,
+ QVersitDocument* document) {
+ return false;
+ }
+ bool postProcessDetail(const QContact& contact, const QContactDetail& detail,
+ bool alreadyProcessed, QVersitDocument* document) {
+ if (!alreadyProcessed)
+ mUnknownDetails.append(detail);
+ return false;
+ }
+ QList<QContactDetail> mUnknownDetails;
+};
+//! [Detail handler]
+
+//! [Property handler]
+class MyPropertyHandler : public QVersitContactImporterPropertyHandler {
+public:
+ bool preProcessProperty(const QVersitDocument& document, const QVersitProperty& property,
+ int contactIndex, QContact* contact) {
+ return false;
+ }
+ bool postProcessProperty(const QVersitDocument& document, const QVersitProperty& property,
+ bool alreadyProcessed, int contactIndex, QContact* contact) {
+ if (!alreadyProcessed)
+ mUnknownProperties.append(property);
+ return false;
+ }
+ QList<QVersitProperty> mUnknownProperties;
+};
+//! [Property handler]
+
+//! [Resource handler]
+class MyResourceHandler : public QVersitDefaultResourceHandler {
+public:
+ bool saveResource(const QByteArray& contents, const QVersitProperty& property,
+ QString* location) {
+ *location = QString::number(qrand());
+ QFile file(*location);
+ file.open(QIODevice::WriteOnly);
+ file.write(contents); // In a real implementation, consider when this file will be deleted.
+ return true;
+ }
+ bool loadResource(const QString& location, QByteArray* contents, QString* mimeType)
+ {
+ return QVersitDefaultResourceHandler::loadResource(location, contents, mimeType);
+ }
+};
+//! [Resource handler]
+
+int main(int argc, char *argv[])
+{
+ Q_UNUSED(argc)
+ Q_UNUSED(argv)
+ completeExample();
+ exportExample();
+ importExample();
+}
+
+void completeExample()
+{
+ //! [Complete example]
+ // Create the input vCard
+ QBuffer input;
+ input.open(QBuffer::ReadWrite);
+ QByteArray inputVCard =
+ "BEGIN:VCARD\r\nVERSION:2.1\r\nFN:John Citizen\r\nN:Citizen;John;Q;;\r\nEND:VCARD\r\n";
+ input.write(inputVCard);
+ input.seek(0);
+
+ // Parse the input into QVersitDocuments
+ QVersitReader reader;
+ reader.setDevice(&input);
+ reader.startReading(); // Remember to check the return value
+ reader.waitForFinished();
+
+ // Convert the QVersitDocuments to QContacts
+ QList<QVersitDocument> inputDocuments = reader.results();
+ QVersitContactImporter importer;
+ QList<QContact> contacts = importer.importContacts(inputDocuments);
+ // Note that the QContacts are not saved yet.
+ // Use QContactManager::saveContacts() for saving if necessary
+
+ // Export the QContacts back to QVersitDocuments
+ QVersitContactExporter exporter;
+ QList<QVersitDocument> outputDocuments = exporter.exportContacts(contacts);
+
+ // Encode the QVersitDocument back to a vCard
+ QBuffer output;
+ output.open(QBuffer::ReadWrite);
+ QVersitWriter writer;
+ writer.setDevice(&output);
+ writer.startWriting(outputDocuments); // Remember to check the return value
+ writer.waitForFinished();
+
+ // Read the vCard back to a QByteArray
+ output.seek(0);
+ QByteArray outputVCard(output.readAll());
+ //! [Complete example]
+}
+
+void exportExample()
+{
+ //! [Export example]
+ QVersitContactExporter contactExporter;
+
+ MyDetailHandler detailHandler;
+ contactExporter.setDetailHandler(&detailHandler);
+
+ QContact contact;
+ // Create a name
+ QContactName name;
+ name.setFirstName(QString::fromAscii("John"));
+ contact.saveDetail(&name);
+
+ // Create an avatar type which is not supported by the exporter
+ QContactAvatar contactAvatar;
+ contactAvatar.setAvatar(QString::fromAscii("/my/image/avatar_path/texture.type"));
+ contactAvatar.setSubType(QContactAvatar::SubTypeTexturedMesh);
+ contact.saveDetail(&contactAvatar);
+
+ QList<QContact> contactList;
+ contactList.append(contact);
+ QList<QVersitDocument> versitDocuments = contactExporter.exportContacts(contactList);
+
+ // detailHandler.mUnknownDetails now contains the list of unknown details
+ //! [Export example]
+}
+
+void importExample()
+{
+ //! [Import example]
+ QVersitContactImporter importer;
+
+ MyPropertyHandler propertyHandler;
+ importer.setPropertyHandler(&propertyHandler);
+
+ QVersitDocument document;
+
+ QVersitProperty property;
+ property.setName(QString::fromAscii("N"));
+ property.setValue("Citizen;John;Q;;");
+ document.addProperty(property);
+
+ property.setName(QString::fromAscii("X-UNKNOWN-PROPERTY"));
+ property.setValue("some value");
+ document.addProperty(property);
+
+ QList<QVersitDocument> list;
+ list.append(document);
+
+ QList<QContact> contactList = importer.importContacts(list);
+ // contactList.first() now contains the "N" property as a QContactName
+ // propertyHandler.mUnknownProperties contains the list of unknown properties
+ //! [Import example]
+}