summaryrefslogtreecommitdiffstats
path: root/app/Dialer.qml
diff options
context:
space:
mode:
Diffstat (limited to 'app/Dialer.qml')
-rw-r--r--app/Dialer.qml176
1 files changed, 176 insertions, 0 deletions
diff --git a/app/Dialer.qml b/app/Dialer.qml
new file mode 100644
index 0000000..8937f0d
--- /dev/null
+++ b/app/Dialer.qml
@@ -0,0 +1,176 @@
+/*
+ * Copyright (C) 2016 The Qt Company Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import QtQuick 2.6
+import QtQuick.Layouts 1.1
+import QtQuick.Controls 2.0
+import QtMultimedia 5.5
+import AGL.Demo.Controls 1.0
+import 'models'
+
+Item {
+ id: root
+
+ signal showContacts
+ function call(contact) {
+ name.text = contact.name
+ number.text = contact.number
+ callButton.checked = true
+ }
+
+ ImageButton {
+ anchors.left: parent.left
+ anchors.top: parent.top
+ anchors.margins: 60
+ width: 172
+ height: 172
+ offImage: './images/HMI_Phone_Contacts-01.svg'
+ onClicked: root.showContacts()
+ }
+
+ ColumnLayout {
+ anchors.fill: parent
+ anchors.topMargin: 50
+ anchors.bottomMargin: 50
+ spacing: 20
+ ColumnLayout {
+ Layout.alignment: Qt.AlignHCenter
+ Label {
+ id: name
+ font.pixelSize: 40
+ color: '#59FF7F'
+ }
+ TextField {
+ id: number
+ readOnly: true
+
+ ImageButton {
+ anchors.right: parent.right
+ anchors.verticalCenter: parent.verticalCenter
+ offImage: './images/HMI_Phone_Back_Icon.svg'
+ onClicked: {
+ if (number.text.length > 0)
+ number.text = number.text.substring(0, number.text.length - 1)
+ }
+ }
+ }
+ }
+
+ GridLayout {
+ Layout.alignment: Qt.AlignHCenter
+ columns: 3
+ columnSpacing: 30
+ rowSpacing: 30
+ Repeater {
+ model: ListModel {
+ ListElement { value: '1'; image: '1' }
+ ListElement { value: '2'; image: '2' }
+ ListElement { value: '3'; image: '3' }
+ ListElement { value: '4'; image: '4' }
+ ListElement { value: '5'; image: '5' }
+ ListElement { value: '6'; image: '6' }
+ ListElement { value: '7'; image: '7' }
+ ListElement { value: '8'; image: '8' }
+ ListElement { value: '9'; image: '9' }
+ ListElement { value: '*'; image: 'asterisk' }
+ ListElement { value: '0'; image: '0' }
+ ListElement { value: '#'; image: 'NumberSign' }
+ }
+ ImageButton {
+ onImage: './images/HMI_Phone_Button_%1_Active-01.svg'.arg(model.image)
+ offImage: './images/HMI_Phone_Button_%1_Inactive-01.svg'.arg(model.image)
+ onClicked: {
+ number.text += model.value
+ }
+ }
+ }
+ }
+
+ ToggleButton {
+ id: callButton
+ Layout.alignment: Qt.AlignHCenter
+ onImage: './images/HMI_Phone_Hangup.svg'
+ offImage: './images/HMI_Phone_Call.svg'
+ opacity: number.text.length > 0 ? 1 : 0.25
+
+ Loader {
+ id: ringtone
+ active: false
+ sourceComponent: Component {
+ SoundEffect {
+ loops: SoundEffect.Infinite
+ source: './Phone.wav'
+ category: 'phone'
+ Component.onCompleted: play()
+ }
+ }
+ }
+
+ onCheckedChanged: {
+ if (checked) {
+ if (number.text.length === 0) {
+ callButton.checked = false
+ return
+ }
+
+ var contact = {'name': name.text, 'number': number.text}
+ if (contact.name === '')
+ contact.name = 'Unknown'
+ history.insert(0, contact)
+ ringtone.active = true
+ } else {
+ name.text = ''
+ number.text = ''
+ ringtone.active = false
+ }
+ }
+ }
+
+ ListView {
+ Layout.fillWidth: true
+ Layout.preferredHeight: 130
+ orientation: Qt.Horizontal
+ clip: true
+ model: CallHistoryModel { id: history }
+
+ delegate: MouseArea {
+ width: root.width / 2.5
+ height: ListView.view.height
+ RowLayout {
+ anchors.fill: parent
+ spacing: 20
+ Image {
+ source: './images/HMI_Phone_Contact_BlankPhoto.svg'
+ }
+ ColumnLayout {
+ Label {
+ Layout.fillWidth: true
+ color: '#59FF7F'
+ text: model.name
+ }
+
+ Label {
+ Layout.fillWidth: true
+ font.pixelSize: 30
+ text: model.number
+ }
+ }
+ }
+ onClicked: root.call(model)
+ }
+ }
+ }
+}