aboutsummaryrefslogtreecommitdiffstats
path: root/examples/remoteobjects
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2019-01-17 11:08:08 +0100
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2019-01-30 09:25:10 +0000
commit0dc0b5b64a0ed9ff682737f91423c9beeb5a8646 (patch)
treee9fc307213e9e5a15e0e86894750cc0ddcdebe4a /examples/remoteobjects
parent470d7b4900af169abf1aa9306ebb30b4489f1dc3 (diff)
Add QtRemoteObjects classes
For starters, add the classes so that ready-made classes like QAbstractItemModelReplica can be used. Actually implementing repc requires another step. Task-number: PYSIDE-862 Change-Id: I28adb1d45c262f298f0ad1926198ec6a3013542f Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Diffstat (limited to 'examples/remoteobjects')
-rw-r--r--examples/remoteobjects/modelview/modelviewclient.py62
-rw-r--r--examples/remoteobjects/modelview/modelviewserver.py140
2 files changed, 202 insertions, 0 deletions
diff --git a/examples/remoteobjects/modelview/modelviewclient.py b/examples/remoteobjects/modelview/modelviewclient.py
new file mode 100644
index 000000000..319135886
--- /dev/null
+++ b/examples/remoteobjects/modelview/modelviewclient.py
@@ -0,0 +1,62 @@
+#############################################################################
+##
+## Copyright (C) 2017 Ford Motor Company
+## Copyright (C) 2019 The Qt Company Ltd.
+## Contact: http://www.qt.io/licensing/
+##
+## This file is part of the Qt for Python examples of the Qt Toolkit.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+## * Redistributions of source code must retain the above copyright
+## notice, this list of conditions and the following disclaimer.
+## * Redistributions in binary form must reproduce the above copyright
+## notice, this list of conditions and the following disclaimer in
+## the documentation and/or other materials provided with the
+## distribution.
+## * Neither the name of The Qt Company Ltd nor the names of its
+## contributors may be used to endorse or promote products derived
+## from this software without specific prior written permission.
+##
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+##
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+"""PySide2 port of the remoteobjects/modelviewclient example from Qt v5.x"""
+
+import sys
+
+from PySide2.QtCore import QUrl
+from PySide2.QtWidgets import (QApplication, QTreeView)
+from PySide2.QtRemoteObjects import (QAbstractItemModelReplica,
+ QRemoteObjectNode)
+
+if __name__ == '__main__':
+ app = QApplication(sys.argv)
+ node = QRemoteObjectNode(QUrl("local:registry"))
+ node.setHeartbeatInterval(1000)
+ view = QTreeView()
+ view.setWindowTitle("RemoteView")
+ view.resize(640,480);
+ model = node.acquireModel("RemoteModel")
+ view.setModel(model);
+ view.show();
+
+ sys.exit(app.exec_())
diff --git a/examples/remoteobjects/modelview/modelviewserver.py b/examples/remoteobjects/modelview/modelviewserver.py
new file mode 100644
index 000000000..069cc1d2c
--- /dev/null
+++ b/examples/remoteobjects/modelview/modelviewserver.py
@@ -0,0 +1,140 @@
+#############################################################################
+##
+## Copyright (C) 2017 Ford Motor Company
+## Copyright (C) 2019 The Qt Company Ltd.
+## Contact: http://www.qt.io/licensing/
+##
+## This file is part of the Qt for Python examples of the Qt Toolkit.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+## * Redistributions of source code must retain the above copyright
+## notice, this list of conditions and the following disclaimer.
+## * Redistributions in binary form must reproduce the above copyright
+## notice, this list of conditions and the following disclaimer in
+## the documentation and/or other materials provided with the
+## distribution.
+## * Neither the name of The Qt Company Ltd nor the names of its
+## contributors may be used to endorse or promote products derived
+## from this software without specific prior written permission.
+##
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+##
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+"""PySide2 port of the remoteobjects/modelviewserver example from Qt v5.x"""
+
+import sys
+
+from PySide2.QtCore import (Qt, QByteArray, QModelIndex, QObject, QTimer, QUrl)
+from PySide2.QtGui import (QColor, QStandardItemModel, QStandardItem)
+from PySide2.QtWidgets import (QApplication, QTreeView)
+from PySide2.QtRemoteObjects import (QRemoteObjectHost, QRemoteObjectNode,
+ QRemoteObjectRegistryHost)
+
+class TimerHandler(QObject):
+ def __init__(self, model):
+ super(TimerHandler, self).__init__()
+ self._model = model
+
+ def change_data(self):
+ for i in range(10, 50):
+ self._model.setData(self._model.index(i, 1),
+ QColor(Qt.blue), Qt.BackgroundRole)
+
+ def insert_data(self):
+ self._model.insertRows(2, 9);
+ for i in range(2, 11):
+ self._model.setData(self._model.index(i, 1),
+ QColor(Qt.green), Qt.BackgroundRole)
+ self._model.setData(self._model.index(i, 1),
+ "InsertedRow", Qt.DisplayRole)
+
+ def remove_data(self):
+ self._model.removeRows(2, 4)
+
+ def change_flags(self):
+ item = self._model.item(0, 0)
+ item.setEnabled(False)
+ item = item.child(0, 0)
+ item.setFlags(item.flags() & Qt.ItemIsSelectable)
+
+ def move_data(self):
+ self._model.moveRows(QModelIndex(), 2, 4, QModelIndex(), 10)
+
+
+def add_child(num_children, nesting_level):
+ result = []
+ if nesting_level == 0:
+ return result;
+ for i in range(num_children):
+ child = QStandardItem("Child num {}, nesting Level {}".format(i + 1,
+ nesting_level))
+ if i == 0:
+ child.appendRow(add_child(num_children, nesting_level -1))
+ result.append(child)
+ return result;
+
+if __name__ == '__main__':
+ app = QApplication(sys.argv)
+ model_size = 100000;
+ list = []
+ source_model = QStandardItemModel()
+ horizontal_header_list = ["First Column with spacing",
+ "Second Column with spacing"]
+ source_model.setHorizontalHeaderLabels(horizontal_header_list)
+ for i in range(model_size):
+ first_item = QStandardItem("FancyTextNumber {}".format(i))
+ if i == 0:
+ first_item.appendRow(add_child(2, 2))
+ second_item = QStandardItem("FancyRow2TextNumber {}".format(i))
+ if i % 2 == 0:
+ first_item.setBackground(Qt.red)
+ row = [first_item, second_item]
+ source_model.invisibleRootItem().appendRow(row)
+ list.append("FancyTextNumber {}".format(i))
+
+ # Needed by QMLModelViewClient
+ role_names = {
+ Qt.DisplayRole : QByteArray(b'_text'),
+ Qt.BackgroundRole : QByteArray(b'_color')
+ }
+ source_model.setItemRoleNames(role_names)
+
+ roles = [Qt.DisplayRole, Qt.BackgroundRole]
+
+ print("Creating registry host")
+ node = QRemoteObjectRegistryHost(QUrl("local:registry"))
+
+ node2 = QRemoteObjectHost(QUrl("local:replica"), QUrl("local:registry"))
+ node2.enableRemoting(source_model, "RemoteModel", roles)
+
+ view = QTreeView()
+ view.setWindowTitle("SourceView")
+ view.setModel(source_model)
+ view.show()
+ handler = TimerHandler(source_model)
+ QTimer.singleShot(5000, handler.change_data)
+ QTimer.singleShot(10000, handler.insert_data)
+ QTimer.singleShot(11000, handler.change_flags)
+ QTimer.singleShot(12000, handler.remove_data)
+ QTimer.singleShot(13000, handler.move_data)
+
+ sys.exit(app.exec_())