diff options
author | J-P Nurmi <jpnurmi@qt.io> | 2016-11-18 19:33:21 +0100 |
---|---|---|
committer | J-P Nurmi <jpnurmi@qt.io> | 2016-12-20 12:53:21 +0000 |
commit | 2071c1b059ae19e560c6568e522a155c78d76a5e (patch) | |
tree | 13fde8819a03040074e0652a4c102bd8e4f6bc8f /examples/quickcontrols2/swipetoremove/swipetoremove.qml | |
parent | 0a15e7f7bc160e4c25ee594fbe04d6d5d1e26be9 (diff) |
Add "Swipe to Remove" example
Change-Id: Ibab960ddd073ddcdfbf2b6e4492882662c7021b5
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Diffstat (limited to 'examples/quickcontrols2/swipetoremove/swipetoremove.qml')
-rw-r--r-- | examples/quickcontrols2/swipetoremove/swipetoremove.qml | 167 |
1 files changed, 167 insertions, 0 deletions
diff --git a/examples/quickcontrols2/swipetoremove/swipetoremove.qml b/examples/quickcontrols2/swipetoremove/swipetoremove.qml new file mode 100644 index 00000000..5806423d --- /dev/null +++ b/examples/quickcontrols2/swipetoremove/swipetoremove.qml @@ -0,0 +1,167 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the 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$ +** +****************************************************************************/ + +import QtQuick 2.8 +import QtQuick.Controls 2.2 +import QtQuick.Controls.Material 2.2 + +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: parent.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 + } +} |