a8534bd967
Need to do some basic checks like bounds checking And make the images show back up
198 lines
5.9 KiB
QML
198 lines
5.9 KiB
QML
//https://gist.github.com/elpuri/3753756
|
|
import QtQuick 2.4
|
|
|
|
Item {
|
|
id: rt
|
|
property ListElement def: ListElement {
|
|
property string cellText: "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"
|
|
|
|
\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">
|
|
<html >
|
|
|
|
<head>
|
|
<meta content=\"text/html; charset=utf-8\" http-equiv=\"Content-Type\" />
|
|
<title>Untitled 1</title>
|
|
<style type=\"text/css\">
|
|
.auto-style2 {
|
|
font-family: \"Times New Roman\", Times, serif;
|
|
font-size: small;
|
|
}
|
|
.auto-style3 {
|
|
background-color: #FFFF00;
|
|
}
|
|
</style>
|
|
</head>
|
|
|
|
<body>
|
|
<p><b>Header text</b><br/></p>
|
|
<span class=\"auto-style3\">This is paragraph text</span>
|
|
|
|
<hr />
|
|
</body>
|
|
|
|
</html>"
|
|
property int collectionIndex: 0
|
|
property string imageSource: "image://images/list:;cell:"
|
|
}
|
|
|
|
Component.onCompleted: addLst("Haha :-P")
|
|
height: ((lst.count) * 50) + (lst.subCount * 100)
|
|
|
|
anchors.right: parent.right
|
|
anchors.left: parent.left
|
|
anchors.leftMargin: 0
|
|
function remove(List, index) {
|
|
lst.subCount--
|
|
nestedModel.get(List).subItems.remove(index, 1)
|
|
}
|
|
|
|
function pop(List) {
|
|
lst.subCount--
|
|
nestedModel.get(List).subItems.remove(nestedModel.get(
|
|
List).subItems.count - 1, 1)
|
|
}
|
|
function newdef(index, txt, src) {
|
|
var item = Object.create(def)
|
|
item.collectionIndex = index
|
|
item.text = txt
|
|
item.imageSource = src
|
|
return item
|
|
}
|
|
function remLst() {
|
|
nestedModel.remove(nestedModel.count - 1, 1)
|
|
}
|
|
|
|
function apppend(List, obj) {
|
|
lst.subCount++
|
|
nestedModel.get(List).subItems.append(obj)
|
|
}
|
|
|
|
function insert(List, index, obj) {
|
|
lst.subCount++
|
|
nestedModel.get(List).subItems.insert(index, obj)
|
|
}
|
|
|
|
function get(List, index) {
|
|
return nestedModel.get(List).subItems.get(index)
|
|
}
|
|
|
|
function set(List, index, obj) {
|
|
nestedModel.get(List).subItems.set(index, obj)
|
|
}
|
|
|
|
function addLst(str) {
|
|
var newCollection
|
|
var i = 0
|
|
var temp = Qt.createComponent("Sublist.qml").createObject(rt, {
|
|
|
|
})
|
|
|
|
newCollection = temp.get(0)
|
|
newCollection.name = str
|
|
newCollection.subItems.clear()
|
|
for (i = 0; i < 1; i++) {
|
|
newCollection.subItems.append(newdef(nestedModel.count, "idiot"))
|
|
}
|
|
|
|
nestedModel.append(newCollection)
|
|
}
|
|
|
|
ListView {
|
|
id: lst
|
|
anchors.fill: parent
|
|
y: 0
|
|
height: ((lst.count) * 55) + (lst.subCount * 100)
|
|
interactive: false
|
|
property int subCount: 0
|
|
model: nestedModel
|
|
delegate: Component {
|
|
id: categoryDelegate
|
|
Column {
|
|
anchors.right: parent.right
|
|
anchors.left: parent.left
|
|
|
|
//width: 200
|
|
Rectangle {
|
|
id: categoryItem
|
|
anchors.right: parent.right
|
|
anchors.left: parent.left
|
|
border.color: "black"
|
|
border.width: 5
|
|
color: "white"
|
|
height: 50
|
|
|
|
//width: 200
|
|
Text {
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
x: 15
|
|
font.pixelSize: 24
|
|
text: name
|
|
clip: true
|
|
anchors.left: parent.left
|
|
anchors.right: parent.right
|
|
anchors.rightMargin: 15
|
|
anchors.leftMargin: 5
|
|
}
|
|
|
|
Rectangle {
|
|
color: "red"
|
|
width: 30
|
|
height: 30
|
|
anchors.right: parent.right
|
|
anchors.rightMargin: 15
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
|
|
MouseArea {
|
|
anchors.fill: parent
|
|
|
|
// Toggle the 'collapsed' property
|
|
onClicked: {
|
|
nestedModel.setProperty(index, "collapsed",
|
|
!collapsed)
|
|
if (!nestedModel.get(index).collapsed) {
|
|
lst.subCount = lst.subCount + subItemLoader.subItemModel.count
|
|
} else {
|
|
lst.subCount = lst.subCount - subItemLoader.subItemModel.count
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
Loader {
|
|
id: subItemLoader
|
|
|
|
// This is a workaround for a bug/feature in the Loader element. If sourceComponent is set to null
|
|
// the Loader element retains the same height it had when sourceComponent was set. Setting visible
|
|
// to false makes the parent Column treat it as if it's height was 0.
|
|
visible: !collapsed
|
|
property variant subItemModel: subItems
|
|
sourceComponent: subItemColumnDelegate
|
|
onStatusChanged: if (status == Loader.Ready) {
|
|
item.model = subItemModel
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
Component {
|
|
id: subItemColumnDelegate
|
|
Column {
|
|
property alias model: subItemRepeater.model
|
|
|
|
width: rt.width
|
|
Repeater {
|
|
id: subItemRepeater
|
|
objectName: "repeater"
|
|
delegate: Cell {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
ListModel {
|
|
id: nestedModel
|
|
objectName: "nestedModel"
|
|
}
|
|
}
|