summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--installerbuilder/libinstaller/libinstaller.pro6
-rw-r--r--installerbuilder/libinstaller/qsettingswrapper.cpp406
-rw-r--r--installerbuilder/libinstaller/qsettingswrapper.h100
3 files changed, 510 insertions, 2 deletions
diff --git a/installerbuilder/libinstaller/libinstaller.pro b/installerbuilder/libinstaller/libinstaller.pro
index a8b458cc5..8920fc1dd 100644
--- a/installerbuilder/libinstaller/libinstaller.pro
+++ b/installerbuilder/libinstaller/libinstaller.pro
@@ -95,7 +95,8 @@ HEADERS += $$PWD/qinstaller.h \
qtcreatorpersistentsettings.h \
registerdefaultdebuggeroperation.h \
updatecreatorsettingsfrom21to22operation.h \
- qprocesswrapper.h
+ qprocesswrapper.h \
+ qsettingswrapper.h
SOURCES += $$PWD/qinstaller.cpp \
$$PWD/qinstaller_p.cpp \
@@ -158,7 +159,8 @@ SOURCES += $$PWD/qinstaller.cpp \
registerdefaultdebuggeroperation.cpp \
updatecreatorsettingsfrom21to22operation.cpp \
qprocesswrapper.cpp \
- templates.cpp
+ templates.cpp \
+ qsettingswrapper.cpp
macx {
HEADERS += macrelocateqt.h \
diff --git a/installerbuilder/libinstaller/qsettingswrapper.cpp b/installerbuilder/libinstaller/qsettingswrapper.cpp
new file mode 100644
index 000000000..cb0763526
--- /dev/null
+++ b/installerbuilder/libinstaller/qsettingswrapper.cpp
@@ -0,0 +1,406 @@
+/**************************************************************************
+**
+** This file is part of Qt SDK**
+**
+** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).*
+**
+** Contact: Nokia Corporation qt-info@nokia.com**
+**
+** 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
+**
+** 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 are unsure which license is appropriate for your use, please contact
+** (qt-info@nokia.com).
+**
+**************************************************************************/
+#include "qsettingswrapper.h"
+
+#include "fsengineclient.h"
+#include "templates.cpp"
+
+#include <QtCore/QSettings>
+#include <QtCore/QThread>
+
+#include <QtNetwork/QLocalSocket>
+#include <QtNetwork/QTcpSocket>
+
+
+// -- QSettingsWrapper::Private
+
+class QSettingsWrapper::Private
+{
+public:
+ Private(const QString &organization, const QString &application)
+ : native(true),
+ settings(organization, application),
+ socket(0)
+ {
+ }
+
+ Private(QSettings::Scope scope, const QString &organization, const QString &application)
+ : native(true),
+ settings(scope, organization, application),
+ socket(0)
+ {
+ }
+
+ Private(QSettings::Format format, QSettings::Scope scope, const QString &organization,
+ const QString &application)
+ : native(format == QSettings::NativeFormat),
+ settings(format, scope, organization, application),
+ socket(0)
+ {
+ }
+
+ Private(const QString &fileName, QSettings::Format format)
+ : native(format == QSettings::NativeFormat),
+ fileName(fileName),
+ settings(fileName, format),
+ socket(0)
+ {
+ }
+
+ Private()
+ : native(true),
+ socket(0)
+ {
+ }
+
+ bool createSocket()
+ {
+ if (!native || !FSEngineClientHandler::instance()->isActive())
+ return false;
+
+ if (socket != 0 && socket->state() == static_cast<int>(QLocalSocket::ConnectedState))
+ return true;
+
+ if (socket != 0)
+ delete socket;
+#ifdef FSENGINE_TCP
+ socket = new QTcpSocket;
+#else
+ socket = new QLocalSocket;
+#endif
+ if (!FSEngineClientHandler::instance()->connect(socket))
+ return false;
+
+ stream.setDevice(socket);
+ stream.setVersion(QDataStream::Qt_4_2);
+
+ stream << QString::fromLatin1("createQSettings");
+ stream << this->fileName;
+ socket->flush();
+ stream.device()->waitForReadyRead(-1);
+ quint32 test;
+ stream >> test;
+ stream.device()->readAll();
+ return true;
+ }
+
+ const bool native;
+ const QString fileName;
+ QSettings settings;
+#ifdef FSENGINE_TCP
+ mutable QTcpSocket* socket;
+#else
+ mutable QLocalSocket* socket;
+#endif
+ mutable QDataStream stream;
+};
+
+
+// -- QSettingsWrapper
+
+QSettingsWrapper::QSettingsWrapper(const QString &organization, const QString &application, QObject *parent)
+ : QObject(parent)
+ , d(new Private(organization, application))
+{
+ qDebug() << Q_FUNC_INFO;
+}
+
+QSettingsWrapper::QSettingsWrapper(QSettingsWrapper::Scope scope, const QString &organization,
+ const QString &application, QObject *parent)
+ : QObject(parent)
+ , d(new Private(static_cast<QSettings::Scope> (scope), organization, application))
+{
+ qDebug() << Q_FUNC_INFO;
+}
+
+QSettingsWrapper::QSettingsWrapper(QSettingsWrapper::Format format, QSettingsWrapper::Scope scope,
+ const QString &organization, const QString &application, QObject *parent)
+ : QObject(parent)
+ , d(new Private(static_cast<QSettings::Format> (format), static_cast<QSettings::Scope> (scope),
+ organization, application))
+{
+ qDebug() << Q_FUNC_INFO;
+}
+
+QSettingsWrapper::QSettingsWrapper(const QString &fileName, QSettingsWrapper::Format format, QObject *parent)
+ : QObject(parent)
+ , d(new Private(fileName, static_cast<QSettings::Format> (format)))
+{
+ qDebug() << Q_FUNC_INFO;
+}
+
+QSettingsWrapper::QSettingsWrapper(QObject *parent)
+ : QObject(parent)
+ , d(new Private)
+{
+ qDebug() << Q_FUNC_INFO;
+}
+
+QSettingsWrapper::~QSettingsWrapper()
+{
+ qDebug() << Q_FUNC_INFO;
+ if (d->socket != 0) {
+ d->stream << QString::fromLatin1("destroyQSettings");
+ d->socket->flush();
+ quint32 result;
+ d->stream >> result;
+
+ if (QThread::currentThread() == d->socket->thread()) {
+ d->socket->close();
+ delete d->socket;
+ } else {
+ d->socket->deleteLater();
+ }
+ }
+ delete d;
+}
+
+QStringList QSettingsWrapper::allKeys() const
+{
+ qDebug() << Q_FUNC_INFO;
+ if (d->createSocket())
+ return callRemoteMethod<QStringList>(d->stream, QLatin1String("QSettings::allKeys"));
+ return static_cast<QStringList>(d->settings.allKeys());
+}
+
+QString QSettingsWrapper::applicationName() const
+{
+ qDebug() << Q_FUNC_INFO;
+ if (d->createSocket())
+ return callRemoteMethod<QString>(d->stream, QLatin1String("QSettings::applicationName"));
+ return static_cast<QString>(d->settings.applicationName());
+}
+
+void QSettingsWrapper::beginGroup(const QString& param1)
+{
+ qDebug() << Q_FUNC_INFO;
+ if (d->createSocket())
+ callRemoteVoidMethod(d->stream, QLatin1String("QSettings::beginGroup"), param1);
+ else
+ d->settings.beginGroup(param1);
+}
+
+int QSettingsWrapper::beginReadArray(const QString& param1)
+{
+ qDebug() << Q_FUNC_INFO;
+ if (d->createSocket())
+ return callRemoteMethod<int>(d->stream, QLatin1String("QSettings::beginReadArray"), param1);
+ return d->settings.beginReadArray(param1);
+}
+
+void QSettingsWrapper::beginWriteArray(const QString& param1, int param2)
+{
+ qDebug() << Q_FUNC_INFO;
+ if (d->createSocket())
+ callRemoteVoidMethod(d->stream, QLatin1String("QSettings::beginWriteArray"), param1, param2);
+ else
+ d->settings.beginWriteArray(param1, param2);
+}
+
+QStringList QSettingsWrapper::childGroups() const
+{
+ qDebug() << Q_FUNC_INFO;
+ if (d->createSocket())
+ return callRemoteMethod<QStringList>(d->stream, QLatin1String("QSettings::childGroups"));
+ return static_cast<QStringList>(d->settings.childGroups());
+}
+
+QStringList QSettingsWrapper::childKeys() const
+{
+ qDebug() << Q_FUNC_INFO;
+ if (d->createSocket())
+ return callRemoteMethod<QStringList>(d->stream, QLatin1String("QSettings::childKeys"));
+ return static_cast<QStringList>(d->settings.childKeys());
+}
+
+void QSettingsWrapper::clear()
+{
+ qDebug() << Q_FUNC_INFO;
+ if (d->createSocket())
+ callRemoteVoidMethod<void>(d->stream, QLatin1String("QSettings::clear"));
+ else d->settings.clear();
+}
+
+bool QSettingsWrapper::contains(const QString& param1) const
+{
+ qDebug() << Q_FUNC_INFO;
+ if (d->createSocket())
+ return callRemoteMethod<bool>(d->stream, QLatin1String("QSettings::contains"), param1);
+ return d->settings.contains(param1);
+}
+
+void QSettingsWrapper::endArray()
+{
+ qDebug() << Q_FUNC_INFO;
+ if (d->createSocket())
+ callRemoteVoidMethod<void>(d->stream, QLatin1String("QSettings::endArray"));
+ else
+ d->settings.endArray();
+}
+
+void QSettingsWrapper::endGroup()
+{
+ qDebug() << Q_FUNC_INFO;
+ if (d->createSocket())
+ callRemoteVoidMethod<void>(d->stream, QLatin1String("QSettings::endGroup"));
+ else
+ d->settings.endGroup();
+}
+
+bool QSettingsWrapper::fallbacksEnabled() const
+{
+ qDebug() << Q_FUNC_INFO;
+ if (d->createSocket())
+ return callRemoteMethod<bool>(d->stream, QLatin1String("QSettings::fallbacksEnabled"));
+ return static_cast<bool>(d->settings.fallbacksEnabled());
+}
+
+QString QSettingsWrapper::fileName() const
+{
+ qDebug() << Q_FUNC_INFO;
+ if (d->createSocket())
+ return callRemoteMethod<QString>(d->stream, QLatin1String("QSettings::fileName"));
+ return static_cast<QString>(d->settings.fileName());
+}
+
+QSettingsWrapper::Format QSettingsWrapper::format() const
+{
+ qDebug() << Q_FUNC_INFO;
+ return static_cast<QSettingsWrapper::Format>(d->settings.format());
+}
+
+QString QSettingsWrapper::group() const
+{
+ qDebug() << Q_FUNC_INFO;
+ if (d->createSocket())
+ return callRemoteMethod<QString>(d->stream, QLatin1String("QSettings::group"));
+ return static_cast<QString>(d->settings.group());
+}
+
+QTextCodec* QSettingsWrapper::iniCodec() const
+{
+ qDebug() << Q_FUNC_INFO;
+ return d->settings.iniCodec();
+}
+
+bool QSettingsWrapper::isWritable() const
+{
+ qDebug() << Q_FUNC_INFO;
+ if (d->createSocket())
+ return callRemoteMethod<bool>(d->stream, QLatin1String("QSettings::isWritable"));
+ return static_cast<bool>(d->settings.isWritable());
+}
+
+QString QSettingsWrapper::organizationName() const
+{
+ qDebug() << Q_FUNC_INFO;
+ if (d->createSocket())
+ return callRemoteMethod<QString>(d->stream, QLatin1String("QSettings::organizationName"));
+ return static_cast<QString>(d->settings.organizationName());
+}
+
+void QSettingsWrapper::remove(const QString& param1)
+{
+ qDebug() << Q_FUNC_INFO;
+ if (d->createSocket())
+ callRemoteVoidMethod(d->stream, QLatin1String("QSettings::remove"), param1);
+ else d->settings.remove(param1);
+}
+
+QSettingsWrapper::Scope QSettingsWrapper::scope() const
+{
+ qDebug() << Q_FUNC_INFO;
+ return static_cast<QSettingsWrapper::Scope>(d->settings.scope());
+}
+
+void QSettingsWrapper::setArrayIndex(int param1)
+{
+ qDebug() << Q_FUNC_INFO;
+ if (d->createSocket())
+ callRemoteVoidMethod(d->stream, QLatin1String("QSettings::setArrayIndex"), param1);
+ else d->settings.setArrayIndex(param1);
+}
+
+void QSettingsWrapper::setFallbacksEnabled(bool param1)
+{
+ qDebug() << Q_FUNC_INFO;
+ if (d->createSocket())
+ callRemoteVoidMethod(d->stream, QLatin1String("QSettings::setFallbacksEnabled"), param1);
+ else d->settings.setFallbacksEnabled(param1);
+}
+
+void QSettingsWrapper::setIniCodec(QTextCodec* codec)
+{
+ qDebug() << Q_FUNC_INFO;
+ d->settings.setIniCodec(codec);
+}
+
+void QSettingsWrapper::setIniCodec(const char* codecName)
+{
+ qDebug() << Q_FUNC_INFO;
+ d->settings.setIniCodec(codecName);
+}
+
+void QSettingsWrapper::setValue(const QString& param1, const QVariant& param2)
+{
+ qDebug() << Q_FUNC_INFO;
+ if (d->createSocket())
+ callRemoteVoidMethod(d->stream, QLatin1String("QSettings::setValue"), param1, param2);
+ else
+ d->settings.setValue(param1, param2);
+}
+
+QSettingsWrapper::Status QSettingsWrapper::status() const
+{
+ qDebug() << Q_FUNC_INFO;
+ if (d->createSocket())
+ return callRemoteMethod<QSettingsWrapper::Status>(d->stream, QLatin1String("QSettings::status"));
+ return static_cast<QSettingsWrapper::Status>(d->settings.status());
+};
+
+void QSettingsWrapper::sync()
+{
+ qDebug() << Q_FUNC_INFO;
+ if (d->createSocket())
+ callRemoteVoidMethod<void>(d->stream, QLatin1String("QSettings::sync"));
+ else
+ d->settings.sync();
+}
+
+QVariant QSettingsWrapper::value(const QString& param1, const QVariant& param2) const
+{
+ qDebug() << Q_FUNC_INFO;
+ if (d->createSocket())
+ return callRemoteMethod<QVariant>(d->stream, QLatin1String("QSettings::value"), param1, param2);
+ return d->settings.value(param1, param2);
+}
diff --git a/installerbuilder/libinstaller/qsettingswrapper.h b/installerbuilder/libinstaller/qsettingswrapper.h
new file mode 100644
index 000000000..c807e62c8
--- /dev/null
+++ b/installerbuilder/libinstaller/qsettingswrapper.h
@@ -0,0 +1,100 @@
+/**************************************************************************
+**
+** This file is part of Qt SDK**
+**
+** Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).*
+**
+** Contact: Nokia Corporation qt-info@nokia.com**
+**
+** GNU Lesser General Public License Usage
+**
+** 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 are unsure which license is appropriate for your use, please contact
+** (qt-info@nokia.com).
+**
+**************************************************************************/
+#ifndef QSETTINGSWRAPPER_H
+#define QSETTINGSWRAPPER_H
+
+#include <installer_global.h>
+
+#include<QtCore/QObject>
+#include<QtCore/QVariant>
+
+class INSTALLER_EXPORT QSettingsWrapper : public QObject
+{
+ Q_OBJECT
+
+public:
+ enum Format {
+ NativeFormat,
+ IniFormat,
+ InvalidFormat
+ };
+
+ enum Status {
+ NoError,
+ AccessError,
+ FormatError
+ };
+
+ enum Scope {
+ UserScope,
+ SystemScope
+ };
+
+ explicit QSettingsWrapper(QObject *parent = 0);
+ explicit QSettingsWrapper(const QString &organization, const QString &application = QString(),
+ QObject *parent = 0);
+ QSettingsWrapper(const QString &fileName, QSettingsWrapper::Format format, QObject *parent = 0);
+ QSettingsWrapper(QSettingsWrapper::Scope scope, const QString &organization,
+ const QString &application = QString(), QObject *parent = 0);
+ QSettingsWrapper(QSettingsWrapper::Format format, QSettingsWrapper::Scope scope,
+ const QString &organization, const QString &application = QString(), QObject *parent = 0);
+ ~QSettingsWrapper();
+
+ QStringList allKeys() const;
+ QString applicationName() const;
+ void beginGroup(const QString &prefix);
+ int beginReadArray(const QString &prefix);
+ void beginWriteArray(const QString &prefix, int size = -1);
+ QStringList childGroups() const;
+ QStringList childKeys() const;
+ void clear();
+ bool contains(const QString &key) const;
+ void endArray();
+ void endGroup();
+ bool fallbacksEnabled() const;
+ QString fileName() const;
+ QSettingsWrapper::Format format() const;
+ QString group() const;
+ QTextCodec* iniCodec() const;
+ bool isWritable() const;
+ QString organizationName() const;
+ void remove(const QString &key);
+ QSettingsWrapper::Scope scope() const;
+ void setArrayIndex(int i);
+ void setFallbacksEnabled(bool b);
+ void setIniCodec(QTextCodec *codec);
+ void setIniCodec(const char *codecName);
+ void setValue(const QString &key, const QVariant &value);
+ QSettingsWrapper::Status status() const;
+ void sync();
+ QVariant value(const QString &key, const QVariant &defaultValue = QVariant()) const;
+
+private:
+ class Private;
+ Private *d;
+};
+
+#endif // QSETTINGSWRAPPER_H