diff options
Diffstat (limited to 'examples/declarative/editingmodel')
-rw-r--r-- | examples/declarative/editingmodel/MovingRectangle.qml | 78 | ||||
-rw-r--r-- | examples/declarative/editingmodel/doc/editingmodel.rst | 14 | ||||
-rw-r--r-- | examples/declarative/editingmodel/doc/qabstractlistmodelqml.png | bin | 45810 -> 0 bytes | |||
-rw-r--r-- | examples/declarative/editingmodel/main.py | 21 | ||||
-rw-r--r-- | examples/declarative/editingmodel/main.pyproject | 3 | ||||
-rw-r--r-- | examples/declarative/editingmodel/main.qml | 106 | ||||
-rw-r--r-- | examples/declarative/editingmodel/model.py | 157 |
7 files changed, 0 insertions, 379 deletions
diff --git a/examples/declarative/editingmodel/MovingRectangle.qml b/examples/declarative/editingmodel/MovingRectangle.qml deleted file mode 100644 index b99a5f4dc..000000000 --- a/examples/declarative/editingmodel/MovingRectangle.qml +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause - - -import QtQuick -import QtQuick.Controls - -Rectangle { - id: root - property int modelIndex - property Item dragParent - property Item sizeParent - property alias text: zone.text - property alias bgColor: root.color - - anchors { - horizontalCenter: parent.horizontalCenter - verticalCenter: parent.verticalCenter - } - color: backgroundColor - anchors.fill: sizeParent - border.color: "yellow" - border.width: 0 - TextArea { - id: zone - anchors.centerIn: parent - text: display - onTextChanged: model.edit = text - } - - MouseArea { - id: zoneMouseArea - anchors.fill: parent - - acceptedButtons: Qt.MiddleButton - onClicked: function(mouse) { - if (mouse.button == Qt.MiddleButton) - lv.model.remove(index) - else - mouse.accepted = false - } - } - DragHandler { - id: dragHandler - xAxis { - - enabled: true - minimum: 0 - maximum: lv.width - droparea.width - } - yAxis.enabled: false - acceptedButtons: Qt.LeftButton - } - Drag.active: dragHandler.active - Drag.source: root - Drag.hotSpot.x: width / 2 - - states: [ - State { - when: dragHandler.active - ParentChange { - target: root - parent: root.dragParent - } - - AnchorChanges { - target: root - anchors.horizontalCenter: undefined - anchors.verticalCenter: undefined - } - PropertyChanges { - target: root - opacity: 0.6 - border.width: 3 - } - } - ] -} diff --git a/examples/declarative/editingmodel/doc/editingmodel.rst b/examples/declarative/editingmodel/doc/editingmodel.rst deleted file mode 100644 index d76bebc22..000000000 --- a/examples/declarative/editingmodel/doc/editingmodel.rst +++ /dev/null @@ -1,14 +0,0 @@ -QAbstractListModel in QML -========================= - -This example shows how to add, remove and move items inside a QML -ListView, but showing and editing the data via roles using a -QAbstractListModel from Python. - -You can add new elements and reset the view using the two top buttons, -remove elements by 'middle click' the element, and move the elements -with a 'left click' plus dragging the item around. - -.. image:: qabstractlistmodelqml.png - :width: 400 - :alt: QAbstractListModel/ListView Screenshot diff --git a/examples/declarative/editingmodel/doc/qabstractlistmodelqml.png b/examples/declarative/editingmodel/doc/qabstractlistmodelqml.png Binary files differdeleted file mode 100644 index 6e181fba1..000000000 --- a/examples/declarative/editingmodel/doc/qabstractlistmodelqml.png +++ /dev/null diff --git a/examples/declarative/editingmodel/main.py b/examples/declarative/editingmodel/main.py deleted file mode 100644 index 00b3ae2b1..000000000 --- a/examples/declarative/editingmodel/main.py +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (C) 2022 The Qt Company Ltd. -# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause - -import sys -from pathlib import Path - -from PySide6.QtCore import QUrl -from PySide6.QtGui import QGuiApplication -from PySide6.QtQml import QQmlApplicationEngine - -from model import BaseModel - -if __name__ == "__main__": - app = QGuiApplication(sys.argv) - engine = QQmlApplicationEngine() - qml_file = Path(__file__).parent / "main.qml" - engine.load(QUrl.fromLocalFile(qml_file)) - - if not engine.rootObjects(): - sys.exit(-1) - sys.exit(app.exec()) diff --git a/examples/declarative/editingmodel/main.pyproject b/examples/declarative/editingmodel/main.pyproject deleted file mode 100644 index 71272a973..000000000 --- a/examples/declarative/editingmodel/main.pyproject +++ /dev/null @@ -1,3 +0,0 @@ -{ - "files": ["model.py","main.qml","main.py","MovingRectangle.qml"] -} diff --git a/examples/declarative/editingmodel/main.qml b/examples/declarative/editingmodel/main.qml deleted file mode 100644 index 2318ae8b3..000000000 --- a/examples/declarative/editingmodel/main.qml +++ /dev/null @@ -1,106 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause - -import QtQuick -import QtQuick.Controls -import QtQuick.Window -import BaseModel - -Window { - title: "Moving Rectangle" - width: 800 - height: 480 - visible: true - id: mainWindow - - Column { - spacing: 20 - anchors.fill: parent - id: mainColumn - Text { - padding: 20 - font.pointSize: 10 - width: 600 - wrapMode: Text.Wrap - text: "This example shows how to add, remove and move items inside a QML ListView.\n -It shows and edits data via roles using QAbstractListModel on the Python side.\n -Use the 'Middle click' on top of a rectangle to remove an item.\n -'Left click' and drag to move the items." - } - - Button { - anchors { - left: mainColumn.left - right: mainColumn.right - margins: 30 - } - text: "Reset view" - onClicked: lv.model.reset() - } - - Button { - anchors { - left: mainColumn.left - right: mainColumn.right - margins: 30 - } - text: "Add element" - onClicked: lv.model.append() - } - - ListView { - id: lv - anchors { - left: mainColumn.left - right: mainColumn.right - margins: 30 - } - - height: 200 - model: BaseModel {} - orientation: ListView.Horizontal - displaced: Transition { - NumberAnimation { - properties: "x,y" - easing.type: Easing.OutQuad - } - } - delegate: DropArea { - id: droparea - width: ratio * lv.width - height: lv.height - - onEntered: function (drag) { - let dragindex = drag.source.modelIndex - if (index === dragindex) - return - lv.model.move(dragindex, index) - } - - MovingRectangle { - modelIndex: index - dragParent: lv - sizeParent: droparea - } - } - - MouseArea { - id: lvMousearea - anchors.fill: lv - z: -1 - } - Rectangle { - id: lvBackground - anchors.fill: lv - anchors.margins: -border.width - color: "white" - border.color: "black" - border.width: 5 - z: -1 - } - Component.onCompleted: { - lv.model.reset() - } - } - } -} diff --git a/examples/declarative/editingmodel/model.py b/examples/declarative/editingmodel/model.py deleted file mode 100644 index 591497872..000000000 --- a/examples/declarative/editingmodel/model.py +++ /dev/null @@ -1,157 +0,0 @@ -# Copyright (C) 2022 The Qt Company Ltd. -# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause - - -from PySide6.QtCore import (QAbstractListModel, QByteArray, QModelIndex, Qt, - Slot) -from PySide6.QtGui import QColor -from PySide6.QtQml import QmlElement - -# To be used on the @QmlElement decorator -# (QML_IMPORT_MINOR_VERSION is optional) -QML_IMPORT_NAME = "BaseModel" -QML_IMPORT_MAJOR_VERSION = 1 - - -@QmlElement -class BaseModel(QAbstractListModel): - - RatioRole = Qt.UserRole + 1 - - def __init__(self, parent=None): - super().__init__(parent=parent) - self.db = [] - - def rowCount(self, parent=QModelIndex()): - return len(self.db) - - def roleNames(self): - default = super().roleNames() - default[self.RatioRole] = QByteArray(b"ratio") - default[Qt.BackgroundRole] = QByteArray(b"backgroundColor") - return default - - def data(self, index, role: int): - if not self.db: - ret = None - elif not index.isValid(): - ret = None - elif role == Qt.DisplayRole: - ret = self.db[index.row()]["text"] - elif role == Qt.BackgroundRole: - ret = self.db[index.row()]["bgColor"] - elif role == self.RatioRole: - ret = self.db[index.row()]["ratio"] - else: - ret = None - return ret - - def setData(self, index, value, role): - if not index.isValid(): - return False - if role == Qt.EditRole: - self.db[index.row()]["text"] = value - return True - - @Slot(result=bool) - def append(self): - """Slot to append a row at the end""" - return self.insertRow(self.rowCount()) - - def insertRow(self, row): - """Insert a single row at row""" - return self.insertRows(row, 0) - - def insertRows(self, row: int, count, index=QModelIndex()): - """Insert n rows (n = 1 + count) at row""" - - self.beginInsertRows(QModelIndex(), row, row + count) - - # start database work - if len(self.db): - newid = max(x["id"] for x in self.db) + 1 - else: - newid = 1 - for i in range(count + 1): # at least one row - self.db.insert( - row, {"id": newid, "text": "new", "bgColor": QColor("purple"), "ratio": 0.2} - ) - # end database work - self.endInsertRows() - return True - - @Slot(int, int, result=bool) - def move(self, source: int, target: int): - """Slot to move a single row from source to target""" - return self.moveRow(QModelIndex(), source, QModelIndex(), target) - - def moveRow(self, sourceParent, sourceRow, dstParent, dstChild): - """Move a single row""" - return self.moveRows(sourceParent, sourceRow, 0, dstParent, dstChild) - - def moveRows(self, sourceParent, sourceRow, count, dstParent, dstChild): - """Move n rows (n=1+ count) from sourceRow to dstChild""" - - if sourceRow == dstChild: - return False - - elif sourceRow > dstChild: - end = dstChild - - else: - end = dstChild + 1 - - self.beginMoveRows(QModelIndex(), sourceRow, sourceRow + count, QModelIndex(), end) - - # start database work - pops = self.db[sourceRow : sourceRow + count + 1] - if sourceRow > dstChild: - self.db = ( - self.db[:dstChild] - + pops - + self.db[dstChild:sourceRow] - + self.db[sourceRow + count + 1 :] - ) - else: - start = self.db[:sourceRow] - middle = self.db[dstChild : dstChild + 1] - endlist = self.db[dstChild + count + 1 :] - self.db = start + middle + pops + endlist - # end database work - - self.endMoveRows() - return True - - @Slot(int, result=bool) - def remove(self, row: int): - """Slot to remove one row""" - return self.removeRow(row) - - def removeRow(self, row, parent=QModelIndex()): - """Remove one row at index row""" - return self.removeRows(row, 0, parent) - - def removeRows(self, row: int, count: int, parent=QModelIndex()): - """Remove n rows (n=1+count) starting at row""" - self.beginRemoveRows(QModelIndex(), row, row + count) - - # start database work - self.db = self.db[:row] + self.db[row + count + 1 :] - # end database work - - self.endRemoveRows() - return True - - @Slot(result=bool) - def reset(self): - self.beginResetModel() - self.resetInternalData() # should work without calling it ? - self.endResetModel() - return True - - def resetInternalData(self): - self.db = [ - {"id": 3, "bgColor": QColor("red"), "ratio": 0.15, "text": "first"}, - {"id": 1, "bgColor": QColor("blue"), "ratio": 0.1, "text": "second"}, - {"id": 2, "bgColor": QColor("green"), "ratio": 0.2, "text": "third"}, - ] |