Skip to content
Snippets Groups Projects
DapScrollView.qml 2.73 KiB
import QtQuick 2.4

DapScrollViewForm
{
    // All the logic (including state names and vars) was taken from master branch

    // Var for current pos while scrolling (in function updateY())
    property var contentPos: 0.0

    // Connect to new ListView if changed
    onViewDataChanged:
    {
        viewData.contentYChanged.connect(updateY)
    }

    // Changes position of arrows when scroll
    function updateY()
    {
        if (viewData.atYBeginning)
        {
            scrollButton.state = "goUp"
        }
        else if (viewData.atYEnd)
        {
            scrollButton.state = "goDown"
        }
        else if (contentPos > viewData.contentItem.y)
        {
            scrollButton.state = "goUp"
        }
        else
        {
            scrollButton.state = "goDown"
        }
        contentPos = viewData.contentItem.y
    }

    onEntered:
    {
        scrollButton.visible = true;
    }

    onExited:
    {
        scrollButton.visible = false;
    }

    scrollButton.onEntered:
    {
        if (scrollButton.state === "goUp")
        {
            scrollButtonImage.source = scrollDownButtonHoveredImageSource
        }
        else if (scrollButton.state === "goDown")
        {
            scrollButtonImage.source = scrollUpButtonHoveredImageSource
        }
    }

    scrollButton.onExited:
    {
        if (scrollButton.state === "goUp")
        {
            scrollButtonImage.source = scrollDownButtonImageSource
        }
        else if (scrollButton.state === "goDown")
        {
            scrollButtonImage.source = scrollUpButtonImageSource
        }
    }

    scrollButton.onClicked:
    {
        if(scrollButton.state === "goUp")
        {
            viewData.positionViewAtEnd();
            scrollButton.state = "goDown";
        }
        else if(scrollButton.state === "goDown")
        {
            viewData.positionViewAtBeginning();
            scrollButton.state = "goUp";
        }
    }

    scrollButton.states:
    [
        State
        {
            name: "goDown"
            PropertyChanges
            {
                target: scrollButton
                onStateChanged:
                {
                    scrollButton.anchors.top = undefined
                    scrollButton.anchors.bottom = parent.bottom
                    scrollButton.exited()
                }
            }
        },

        State
        {
            name: "goUp"
            PropertyChanges
            {
                target: scrollButton
                onStateChanged:
                {
                    scrollButton.anchors.bottom = undefined
                    scrollButton.anchors.top = parent.top
                    scrollButton.exited()
                }
            }
        }

    ]

    scrollButton.state: "goUp"
}