1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
|
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
import QtQuick
import QtQuick.Controls
import QtQuick.Controls.Material
ApplicationWindow {
id: window
width: 300
height: 400
visible: true
title: qsTr("Swipe to Remove")
ListView {
id: listView
anchors.fill: parent
delegate: SwipeDelegate {
id: delegate
text: modelData
width: listView.width
//! [delegate]
swipe.right: Rectangle {
width: parent.width
height: parent.height
clip: true
color: SwipeDelegate.pressed ? "#555" : "#666"
Label {
font.family: "Fontello"
text: delegate.swipe.complete ? "\ue805" // icon-cw-circled
: "\ue801" // icon-cancel-circled-1
padding: 20
anchors.fill: parent
horizontalAlignment: Qt.AlignRight
verticalAlignment: Qt.AlignVCenter
opacity: 2 * -delegate.swipe.position
color: Material.color(delegate.swipe.complete ? Material.Green : Material.Red, Material.Shade200)
Behavior on color { ColorAnimation { } }
}
Label {
text: qsTr("Removed")
color: "white"
padding: 20
anchors.fill: parent
horizontalAlignment: Qt.AlignLeft
verticalAlignment: Qt.AlignVCenter
opacity: delegate.swipe.complete ? 1 : 0
Behavior on opacity { NumberAnimation { } }
}
SwipeDelegate.onClicked: delegate.swipe.close()
SwipeDelegate.onPressedChanged: undoTimer.stop()
}
//! [delegate]
//! [removal]
Timer {
id: undoTimer
interval: 3600
onTriggered: listModel.remove(index)
}
swipe.onCompleted: undoTimer.start()
//! [removal]
}
model: ListModel {
id: listModel
ListElement { text: "Lorem ipsum dolor sit amet" }
ListElement { text: "Curabitur sit amet risus" }
ListElement { text: "Suspendisse vehicula nisi" }
ListElement { text: "Mauris imperdiet libero" }
ListElement { text: "Sed vitae dui aliquet augue" }
ListElement { text: "Praesent in elit eu nulla" }
ListElement { text: "Etiam vitae magna" }
ListElement { text: "Pellentesque eget elit euismod" }
ListElement { text: "Nulla at enim porta" }
ListElement { text: "Fusce tincidunt odio" }
ListElement { text: "Ut non ex a ligula molestie" }
ListElement { text: "Nam vitae justo scelerisque" }
ListElement { text: "Vestibulum pulvinar tellus" }
ListElement { text: "Quisque dignissim leo sed gravida" }
}
//! [transitions]
remove: Transition {
SequentialAnimation {
PauseAnimation { duration: 125 }
NumberAnimation { property: "height"; to: 0; easing.type: Easing.InOutQuad }
}
}
displaced: Transition {
SequentialAnimation {
PauseAnimation { duration: 125 }
NumberAnimation { property: "y"; easing.type: Easing.InOutQuad }
}
}
//! [transitions]
ScrollIndicator.vertical: ScrollIndicator { }
}
Label {
id: placeholder
text: qsTr("Swipe no more")
anchors.margins: 60
anchors.fill: parent
opacity: 0.5
visible: listView.count === 0
horizontalAlignment: Qt.AlignHCenter
verticalAlignment: Qt.AlignVCenter
wrapMode: Label.WordWrap
font.pixelSize: 18
}
}
|