summaryrefslogtreecommitdiff
path: root/components/custom/behaviors/ButtonBehavior.qml
blob: b9ab1f350f61364076c17074434bb6ef0e47c87e (plain)
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
import QtQuick 2.0

Item {
    id: behavior

    signal clicked
    property bool pressed: false    // Can't be alias of mouseArea.pressed because the latter is read-only
    property alias containsMouse: mouseArea.containsMouse
    property bool checkable: false
    property bool checked: false
    property bool triState: false
    signal mouseMoved

    onCheckableChanged: { if(!checkable) checked = false }
    MouseArea {
        id: mouseArea
        anchors.fill: parent
        hoverEnabled: true
        onPositionChanged: behavior.mouseMoved()
        onPressed: behavior.pressed = true  // needed when hover is enabled
        onEntered: if(pressed && enabled) behavior.pressed = true
        onExited: behavior.pressed = false
        onCanceled: behavior.pressed = false    // mouse stolen e.g. by Flickable
        onReleased: {
            if(behavior.pressed && behavior.enabled) { // No click if release outside area
                behavior.pressed = false
                if(behavior.checkable)
                    behavior.checked = !behavior.checked;
                behavior.clicked()
            }
        }
    }
}