aboutsummaryrefslogtreecommitdiffstats
path: root/mobility
diff options
context:
space:
mode:
authorLauro Neto <lauro.neto@openbossa.org>2011-09-20 10:47:04 -0300
committerLauro Neto <lauro.neto@openbossa.org>2011-09-21 18:06:45 -0300
commitcd49020a9356bd3aeab19265a031b566daac8d0b (patch)
tree5fca120a9ced61078b520967b23105e39065ac67 /mobility
parentdb9fd3df55b85dd01e8b19a6ee5bcdf98b8f8090 (diff)
Adding qml Service browser example.
Diffstat (limited to 'mobility')
-rw-r--r--mobility/servicebrowser/qml/HoldButton.qml (renamed from mobility/servicebrowser/HoldButton.qml)0
-rw-r--r--mobility/servicebrowser/qml/ImplementationDetails.qml60
-rw-r--r--mobility/servicebrowser/qml/ServiceImplementations.qml93
-rw-r--r--mobility/servicebrowser/qml/ServicesPage.qml61
-rw-r--r--mobility/servicebrowser/qml/main.qml10
-rw-r--r--mobility/servicebrowser/qml/qmlbrowser.py134
6 files changed, 358 insertions, 0 deletions
diff --git a/mobility/servicebrowser/HoldButton.qml b/mobility/servicebrowser/qml/HoldButton.qml
index 32ce02e..32ce02e 100644
--- a/mobility/servicebrowser/HoldButton.qml
+++ b/mobility/servicebrowser/qml/HoldButton.qml
diff --git a/mobility/servicebrowser/qml/ImplementationDetails.qml b/mobility/servicebrowser/qml/ImplementationDetails.qml
new file mode 100644
index 0000000..bfbf139
--- /dev/null
+++ b/mobility/servicebrowser/qml/ImplementationDetails.qml
@@ -0,0 +1,60 @@
+
+import QtQuick 1.1
+import com.nokia.meego 1.0
+import com.nokia.extras 1.1
+
+Page {
+
+ property string implementationSpec: ""
+ property int implementationIndex: -1
+ property string serviceName: ""
+ property int serviceIndex: -1
+
+ id: implementationDetails
+ anchors.margins: UiConstants.DefaultMargin
+ //orientationLock: PageOrientation.LockPortrait
+
+ Label {
+ id: titleLabel
+ anchors.top: parent.top
+ width: parent.width
+ anchors.horizontalCenter: parent.horizontalCenter
+ text: "Implementation: " + implementationSpec
+ }
+
+ Flickable {
+ anchors.top: titleLabel.bottom
+ anchors.horizontalCenter: parent.horizontalCenter
+ width: parent.width
+ contentHeight: servicesButtons.height
+
+ ButtonColumn {
+ id: servicesButtons
+ width: parent.width
+ anchors.horizontalCenter: parent.horizontalCenter
+ Repeater {
+ model: manager.implementationDetails(implementationSpec, implementationIndex,
+ serviceName, serviceIndex);
+ Button {
+ width: parent.width
+ text: modelData
+ onClicked: {
+ console.log("Selecting service")
+ //manager.selectService(index)
+ }
+ }
+ }
+ }
+ }
+
+ tools: ToolBarLayout {
+ id: implementationPageTools
+ ToolButton {
+ text: "Back"
+ onClicked: {
+ pageStack.pop();
+ }
+ }
+ }
+
+}
diff --git a/mobility/servicebrowser/qml/ServiceImplementations.qml b/mobility/servicebrowser/qml/ServiceImplementations.qml
new file mode 100644
index 0000000..28791cc
--- /dev/null
+++ b/mobility/servicebrowser/qml/ServiceImplementations.qml
@@ -0,0 +1,93 @@
+
+import QtQuick 1.1
+import com.nokia.meego 1.0
+import com.nokia.extras 1.1
+
+Page {
+
+ property string serviceName: ""
+ property int serviceIndex: -1
+
+ id: serviceImplementations
+ anchors.margins: UiConstants.DefaultMargin
+ //orientationLock: PageOrientation.LockPortrait
+
+ Label {
+ id: titleLabel
+ anchors.top: parent.top
+ anchors.horizontalCenter: parent.horizontalCenter
+ text: "Service: " + serviceName
+ }
+
+ Flickable {
+ anchors.top: titleLabel.bottom
+ anchors.horizontalCenter: parent.horizontalCenter
+ width: parent.width
+ contentHeight: servicesButtons.height
+
+ ButtonColumn {
+ id: servicesButtons
+ width: parent.width
+ anchors.horizontalCenter: parent.horizontalCenter
+ Repeater {
+ id: buttonRepeater
+ model: manager.serviceImplementations(serviceName, serviceIndex)
+
+ HoldButton {
+ text: modelData
+ // TODO Getting some "Unable to assing undefined value" at this line when
+ // setting model to a different list (line 73), but the example is working
+ // so far.
+ width: parent.width
+
+ onHeld: {
+ setDefaultDialog.titleText = "Change default implementation";
+ setDefaultDialog.message = "Set " + modelData + " as default?";
+ setDefaultDialog.index = index;
+ setDefaultDialog.open();
+ }
+
+ onClickedWithoutHold: {
+ pageStack.push(Qt.createComponent("ImplementationDetails.qml"),
+ { implementationSpec: modelData,
+ implementationIndex: index,
+ serviceName: serviceName,
+ serviceIndex: serviceIndex
+ });
+
+ }
+ }
+ }
+ }
+ }
+
+ QueryDialog {
+ property int index: -1
+
+ id: setDefaultDialog
+ acceptButtonText: "Yes"
+ rejectButtonText: "No"
+
+ onAccepted: {
+ console.log("Accepted");
+ manager.setDefault(index);
+ buttonRepeater.model = manager.serviceImplementations(serviceName, serviceIndex)
+ }
+
+ onRejected: {
+ console.log("Rejected");
+ }
+
+ }
+
+ tools: ToolBarLayout {
+ id: implementationPageTools
+ ToolButton {
+ text: "Back"
+ onClicked: {
+ pageStack.pop();
+ }
+ }
+ }
+
+}
diff --git a/mobility/servicebrowser/qml/ServicesPage.qml b/mobility/servicebrowser/qml/ServicesPage.qml
new file mode 100644
index 0000000..4bcf85c
--- /dev/null
+++ b/mobility/servicebrowser/qml/ServicesPage.qml
@@ -0,0 +1,61 @@
+
+
+import QtQuick 1.1
+import com.nokia.meego 1.0
+import com.nokia.extras 1.1
+
+Page {
+ id: servicePage
+ anchors.margins: UiConstants.DefaultMargin
+ //orientationLock: PageOrientation.LockPortrait
+
+ Label {
+ id: titleLabel
+ anchors.top: parent.top
+ anchors.horizontalCenter: parent.horizontalCenter
+ text: "Services available"
+ }
+
+ Flickable {
+ anchors.top: titleLabel.bottom
+ anchors.horizontalCenter: parent.horizontalCenter
+ width: parent.width
+ contentHeight: servicesButtons.height
+
+ ButtonColumn {
+ id: servicesButtons
+ width: parent.width
+ anchors.horizontalCenter: parent.horizontalCenter
+ Repeater {
+ model: manager.servicesNames
+ Button {
+ text: modelData
+ onClicked: {
+ console.log("Selecting service")
+ pageStack.push(Qt.createComponent("ServiceImplementations.qml"),
+ { serviceName: modelData,
+ serviceIndex: index })
+ }
+ }
+ }
+ }
+ }
+
+ /*tools: ToolBarLayout {
+ id: mainTools
+ ToolButton {
+ text: "Add..."
+ onClicked: {
+ console.log("Add new contact")
+ pageStack.push(Qt.createComponent("ContactEdit.qml"))
+ }
+ }
+ ToolButton {
+ text: "Select backend..."
+ onClicked: {
+ pageStack.push(Qt.createComponent("SelectBackend.qml"))
+ }
+ }
+ }*/
+
+}
diff --git a/mobility/servicebrowser/qml/main.qml b/mobility/servicebrowser/qml/main.qml
new file mode 100644
index 0000000..ee8dfe8
--- /dev/null
+++ b/mobility/servicebrowser/qml/main.qml
@@ -0,0 +1,10 @@
+
+import QtQuick 1.1
+import com.nokia.meego 1.0
+
+PageStackWindow {
+
+ id: rootWindow
+ showStatusBar: false
+ initialPage: ServicesPage { }
+}
diff --git a/mobility/servicebrowser/qml/qmlbrowser.py b/mobility/servicebrowser/qml/qmlbrowser.py
new file mode 100644
index 0000000..4ac9b51
--- /dev/null
+++ b/mobility/servicebrowser/qml/qmlbrowser.py
@@ -0,0 +1,134 @@
+'''
+ Copyright (C) 2011 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.
+'''
+
+import os
+import sys
+
+from PySide.QtCore import QObject, Signal, Slot, Property, QUrl, qWarning
+from PySide.QtGui import QApplication
+from PySide.QtDeclarative import QDeclarativeView
+from QtMobility.ServiceFramework import QServiceManager
+
+
+class ServiceManager(QObject):
+
+ def __init__(self):
+ QObject.__init__(self)
+
+ self._services = []
+ self._errorMessage = ""
+ self._emailEnabled = False
+ self._addressEnabled = True
+
+ self.manager = QServiceManager(self)
+
+ self.reloadServicesList()
+
+ def reloadServicesList(self):
+ self._services = []
+ for service in self.manager.findServices():
+ self._services.append(service)
+ self.onServicesChanged.emit()
+
+ onServicesChanged = Signal()
+
+ @Property("QStringList", notify=onServicesChanged)
+ def servicesNames(self):
+ return self._services
+
+ @Slot(str, int, result="QStringList")
+ def serviceImplementations(self, serviceName, serviceIndex):
+ print "Interfaces implemented by ", serviceName
+
+ self._implementations = []
+ for descriptor in self.manager.findInterfaces(serviceName):
+ impSpec = "%s %d.%d" % (descriptor.interfaceName(),
+ descriptor.majorVersion(),
+ descriptor.minorVersion())
+
+ if not serviceName:
+ impSpec += " (" + descriptor.serviceName() + ")"
+
+ default = self.manager.interfaceDefault(descriptor.interfaceName())
+ if descriptor == default:
+ impSpec += " (default)"
+
+ self._implementations.append((impSpec, descriptor))
+ return [x[0] for x in self._implementations]
+
+ @Slot(str, int, str, int, result="QStringList")
+ def implementationDetails(self, implementationSpec, implementationIndex,
+ serviceName, serviceIndex):
+
+ selectedImplementation = self._implementations[implementationIndex][1]
+ implementationRef = self.manager.loadInterface(selectedImplementation)
+ attributes = []
+
+ if not implementationRef:
+ return ["(Error loading service plugin)"]
+
+ metaObject = implementationRef.metaObject()
+
+ for i in range(metaObject.methodCount()):
+ method = metaObject.method(i)
+ attributes.append("[METHOD] " + method.signature())
+
+ for i in range(metaObject.propertyCount()):
+ p = metaObject.property(i)
+ attributes.append("[PROPERTY] " + p.name())
+
+ return attributes if attributes else ["(no attributes found)"]
+
+ @Slot(int)
+ def setDefault(self, index):
+ descriptor = self._implementations[index][1]
+
+ if descriptor.isValid():
+ if self.manager.setInterfaceDefault(descriptor):
+ pass
+
+def main():
+ app = QApplication([])
+ view = QDeclarativeView()
+ manager = ServiceManager()
+ context = view.rootContext()
+ context.setContextProperty("manager", manager)
+
+ url = QUrl('main.qml')
+ view.setSource(url)
+ view.showFullScreen()
+
+ app.exec_()
+
+
+if __name__ == '__main__':
+ main()
+
+