File: ItemSwitcher.qml

package info (click to toggle)
qt6-declarative 6.8.2%2Bdfsg-7
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 305,852 kB
  • sloc: cpp: 760,684; javascript: 514,174; xml: 10,618; python: 2,806; ansic: 2,253; java: 815; sh: 213; makefile: 41; php: 27
file content (57 lines) | stat: -rw-r--r-- 1,394 bytes parent folder | download | duplicates (3)
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
// Copyright (C) 2022 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause

import QtQuick

Item {
    id: rootItem

    property var sourceItems: []

    property Item fromItem
    property Item toItem

    property var effect

    property int currentIndex: 0
    property int previousIndex: 0
    property real inAnimation: 0
    readonly property real outAnimation: 1.0 - inAnimation
    // Duration of switch animation, in ms
    property int duration: 1500

    property bool _initialized: false

    onCurrentIndexChanged: {
        fromItem = sourceItems[previousIndex];
        toItem = sourceItems[currentIndex];
        if (_initialized)
            switchAnimation.restart();
        previousIndex = currentIndex;
    }

    // Initialize the items and currentIndex
    Timer {
        running: true
        interval: 0
        onTriggered: {
            fromItem = sourceItems[previousIndex];
            toItem = sourceItems[currentIndex];
            previousIndex = currentIndex;
            _initialized = true;
        }
    }

    SequentialAnimation {
        id: switchAnimation
        alwaysRunToEnd: true
        NumberAnimation {
            target: rootItem
            property: "inAnimation"
            from: 0
            to: 1
            duration: rootItem.duration
            easing.type: Easing.InOutQuad
        }
    }
}