summaryrefslogtreecommitdiffstats
path: root/qml/Viper/Button.qml
diff options
context:
space:
mode:
Diffstat (limited to 'qml/Viper/Button.qml')
-rwxr-xr-xqml/Viper/Button.qml89
1 files changed, 89 insertions, 0 deletions
diff --git a/qml/Viper/Button.qml b/qml/Viper/Button.qml
new file mode 100755
index 00000000..7af64c5f
--- /dev/null
+++ b/qml/Viper/Button.qml
@@ -0,0 +1,89 @@
+/******************************************************************************
+ Copyright (C) 2013-2016 Wang Bin <wbsecg1@gmail.com>
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+******************************************************************************/
+
+import QtQuick 2.0
+
+Rectangle {
+ id: root
+ property string text
+ property url icon
+ property alias iconChecked: iconChecked.source
+ property bool checkable: false
+ property bool checked: false
+ property color bgColor: "#555555"
+ property color bgColorSelected: "#ee6666dd"
+ property color textColor: "white"
+ property bool hovered: false //mouseArea.containsMouse
+ readonly property alias pressed: mouseArea.pressed
+ signal clicked()
+ signal pressAndHold()
+
+ opacity: 0.7
+ color: checked ? bgColorSelected : mouseArea.pressed ? Qt.darker(bgColor) : bgColor
+ border.color: Qt.lighter(color)
+
+ Text {
+ id: text
+ anchors.fill: parent
+ text: root.text
+ font.pixelSize: 0.5 * parent.height
+ color: textColor
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ }
+ Image {
+ source: icon
+ anchors.fill: parent
+ visible: !checked
+ }
+ Image {
+ id: iconChecked
+ anchors.fill: parent
+ visible: checked
+ }
+ MouseArea {
+ id: mouseArea
+ anchors.fill: parent
+ hoverEnabled: true
+ onClicked: {
+ if (root.checkable)
+ root.checked = !root.checked
+ root.clicked()
+ }
+ onHoveredChanged: {
+ if (mouseX > 65535) //qt5.6 touch screen release finger becomes very large e.g. 0x7fffffff
+ return
+ hovered = mouseArea.containsMouse
+ }
+ onPressAndHold: root.pressAndHold()
+ }
+ states: [
+ State {
+ name: "brighter"
+ when: hovered // only the first true State is applied, so put scale and opacity together
+ PropertyChanges { target: root; opacity: 1.0; scale: mouseArea.pressed ? 1.06 : 1.0 }
+ }
+ ]
+ transitions: [
+ Transition {
+ from: "*"; to: "*"
+ PropertyAnimation {
+ properties: "opacity,scale"
+ easing.type: Easing.OutQuart
+ duration: 300
+ }
+ }
+ ]
+}