linphone-desktop/Linphone/view/Item/NumericPad.qml
Julien Wadel b834b7c669 Mosaic
2024-04-22 18:16:32 +02:00

176 lines
4.7 KiB
QML

import QtQuick 2.7
import QtQuick.Controls 2.2 as Control
import QtQuick.Layouts as Layout
import QtQuick.Effects
import Linphone
Control.Popup {
clip: true
id: mainItem
signal buttonPressed(string text)
signal launchCall()
signal wipe()
property bool closeButtonVisible: true
closePolicy: Control.Popup.CloseOnEscape
leftPadding: closeButton.width
rightPadding: closeButton.width
rightInset: closeButton.width
topPadding: closeButton.height
background: Item {
anchors.fill: parent
Rectangle {
id: numPadBackground
anchors.fill: parent
color: DefaultStyle.grey_100
radius: 20 * DefaultStyle.dp
}
// MultiEffect {
// id: effect
// anchors.fill: parent
// source: numPadBackground
// shadowEnabled: true
// shadowColor: DefaultStyle.grey_1000
// shadowOpacity: 0.1
// shadowVerticalOffset: -200 * DefaultStyle.dp
// shadowBlur: 1
// }
Rectangle {
width: parent.width
height: parent.height / 2
anchors.bottom: parent.bottom
color: DefaultStyle.grey_100
}
Button {
id: closeButton
visible: mainItem.closeButtonVisible
anchors.top: parent.top
anchors.right: parent.right
anchors.topMargin: 10 * DefaultStyle.dp
anchors.rightMargin: 10 * DefaultStyle.dp
background: Item {
anchors.fill: parent
visible: false
}
icon.source: AppIcons.closeX
width: 24 * DefaultStyle.dp
height: 24 * DefaultStyle.dp
icon.width: 24 * DefaultStyle.dp
icon.height: 24 * DefaultStyle.dp
onClicked: mainItem.close()
}
}
contentItem: Layout.GridLayout {
columns: 3
columnSpacing: 3
Layout.Layout.fillWidth: true
Layout.Layout.fillHeight: true
Repeater {
model: 9
Button {
id: numPadButton
Layout.Layout.alignment: Qt.AlignHCenter
required property int index
implicitWidth: 60 * DefaultStyle.dp
implicitHeight: 60 * DefaultStyle.dp
background: Rectangle {
anchors.fill: parent
color: numPadButton.down ? DefaultStyle.numericPadPressedButtonColor : DefaultStyle.grey_0
radius: 71 * DefaultStyle.dp
}
contentItem: Text {
id: innerText
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
anchors.centerIn: parent
text: index + 1
font {
pixelSize: 32 * DefaultStyle.dp
weight: 400 * DefaultStyle.dp
}
}
onClicked: {
mainItem.buttonPressed(innerText.text)
}
}
}
Repeater {
model: [
{pressText: "*"},
{pressText: "0", longPressText: "+"},
{pressText: "#"}
]
Button {
id: digitButton
Layout.Layout.alignment: Qt.AlignHCenter
shadowEnabled: true
implicitWidth: 60 * DefaultStyle.dp
implicitHeight: 60 * DefaultStyle.dp
background: Rectangle {
anchors.fill: parent
color: digitButton.down ? DefaultStyle.numericPadPressedButtonColor : DefaultStyle.grey_0
radius: 71 * DefaultStyle.dp
}
contentItem: Item {
anchors.fill: parent
Text {
id: pressText
height: contentHeight
anchors.left: parent.left
anchors.right: parent.right
horizontalAlignment: Text.AlignHCenter
Component.onCompleted: {if (modelData.longPressText === undefined) anchors.centerIn= parent}
text: modelData.pressText
font.pixelSize: 32 * DefaultStyle.dp
}
Text {
id: longPressText
height: contentHeight
anchors.left: parent.left
anchors.right: parent.right
y: digitButton.height/2
horizontalAlignment: Text.AlignHCenter
visible: modelData.longPressText ? modelData.longPressText.length > 0 : false
text: modelData.longPressText ? modelData.longPressText : ""
font.pixelSize: 22 * DefaultStyle.dp
}
}
onClicked: mainItem.buttonPressed(pressText.text)
onPressAndHold: mainItem.buttonPressed(longPressText.text)
}
}
Item {
// Invisible item to move the last two buttons to the right
}
Button {
id: launchCallButton
implicitWidth: 75 * DefaultStyle.dp
implicitHeight: 55 * DefaultStyle.dp
Layout.Layout.alignment: Qt.AlignHCenter
background: Rectangle {
anchors.fill: parent
color: DefaultStyle.success_500main
radius: 71 * DefaultStyle.dp
}
icon.source: AppIcons.phone
icon.width: 32 * DefaultStyle.dp
icon.height: 32 * DefaultStyle.dp
contentImageColor: DefaultStyle.grey_0
onClicked: mainItem.launchCall()
}
Button {
leftPadding: 5 * DefaultStyle.dp
rightPadding: 5 * DefaultStyle.dp
topPadding: 5 * DefaultStyle.dp
bottomPadding: 5 * DefaultStyle.dp
Layout.Layout.alignment: Qt.AlignHCenter
background: Item {
visible: false
}
icon.source: AppIcons.backspaceFill
icon.width: 38 * DefaultStyle.dp
icon.height: 38 * DefaultStyle.dp
onClicked: mainItem.wipe()
}
}
}