From a7ac743468f50d6d2e2c3bcd275adc53b7ac26b1 Mon Sep 17 00:00:00 2001 From: Scott Murray Date: Tue, 28 Mar 2017 17:48:20 -0400 Subject: Initial import from CES2017 repository Pull AGL demo custom QtQuickControls2 widgets out of CES2017 repository. Bug-AGL: SPEC-462 Change-Id: Iba4391433645941faa0d6f4b11e155c946481181 Signed-off-by: Scott Murray --- imports/agl-demo-controls/AbstractKeyboard.qml | 36 ++++++ imports/agl-demo-controls/Alphabet.qml | 140 +++++++++++++++++++++ imports/agl-demo-controls/ImageButton.qml | 46 +++++++ imports/agl-demo-controls/Key.qml | 90 +++++++++++++ imports/agl-demo-controls/Keyboard.qml | 58 +++++++++ imports/agl-demo-controls/Symbols.qml | 138 ++++++++++++++++++++ imports/agl-demo-controls/ToggleButton.qml | 31 +++++ imports/agl-demo-controls/agl-demo-controls.pro | 8 ++ .../agl-demo-controls/images/Keyboard_Arrow.svg | 65 ++++++++++ imports/agl-demo-controls/images/Keyboard_Back.svg | 57 +++++++++ .../agl-demo-controls/images/Keyboard_Shift.svg | 57 +++++++++ .../agl-demo-controls/images/Keyboard_Space.svg | 57 +++++++++ imports/agl-demo-controls/qmldir | 3 + 13 files changed, 786 insertions(+) create mode 100644 imports/agl-demo-controls/AbstractKeyboard.qml create mode 100644 imports/agl-demo-controls/Alphabet.qml create mode 100644 imports/agl-demo-controls/ImageButton.qml create mode 100644 imports/agl-demo-controls/Key.qml create mode 100644 imports/agl-demo-controls/Keyboard.qml create mode 100644 imports/agl-demo-controls/Symbols.qml create mode 100644 imports/agl-demo-controls/ToggleButton.qml create mode 100644 imports/agl-demo-controls/agl-demo-controls.pro create mode 100644 imports/agl-demo-controls/images/Keyboard_Arrow.svg create mode 100644 imports/agl-demo-controls/images/Keyboard_Back.svg create mode 100644 imports/agl-demo-controls/images/Keyboard_Shift.svg create mode 100644 imports/agl-demo-controls/images/Keyboard_Space.svg create mode 100644 imports/agl-demo-controls/qmldir (limited to 'imports/agl-demo-controls') diff --git a/imports/agl-demo-controls/AbstractKeyboard.qml b/imports/agl-demo-controls/AbstractKeyboard.qml new file mode 100644 index 0000000..94e1eeb --- /dev/null +++ b/imports/agl-demo-controls/AbstractKeyboard.qml @@ -0,0 +1,36 @@ +/* + * 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.Window 2.0 + +Item { + id: root + implicitWidth: Screen.width + implicitHeight: Screen.height / 3 + signal show() + signal hide() + signal toggleMode() + property Item target + + onTargetChanged: { + var v = target && target.activeFocus && typeof(target.inputMethodComposing) !== 'undefined' + if (v) + show() + else + hide() + } +} diff --git a/imports/agl-demo-controls/Alphabet.qml b/imports/agl-demo-controls/Alphabet.qml new file mode 100644 index 0000000..3a0fb6f --- /dev/null +++ b/imports/agl-demo-controls/Alphabet.qml @@ -0,0 +1,140 @@ +/* + * 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.Window 2.0 +import QtQuick.Layouts 1.1 + +AbstractKeyboard { + id: root + + ColumnLayout { + anchors.fill: parent + anchors.margins: root.height / 10 + RowLayout { + Layout.fillWidth: true + Layout.fillHeight: true + Repeater { + model: ['q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p'] + delegate: Key { + text: model.modelData + Layout.preferredWidth: 2 + Layout.fillWidth: true + Layout.fillHeight: true + capital: shift.checked + } + } + } + RowLayout { + Layout.fillWidth: true + Layout.fillHeight: true + Item { + Layout.preferredWidth: 1 + Layout.fillWidth: true + } + + Repeater { + model: ['a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l'] + delegate: Key { + text: model.modelData + Layout.preferredWidth: 2 + Layout.fillWidth: true + Layout.fillHeight: true + capital: shift.checked + } + } + Item { + Layout.preferredWidth: 1 + Layout.fillWidth: true + } + } + RowLayout { + Layout.fillWidth: true + Layout.fillHeight: true + Key { + id: shift + image: './images/Keyboard_Shift.svg' + checkable: true + Layout.preferredWidth: 2 + Layout.fillWidth: true + Layout.fillHeight: true + } + Repeater { + model: ['z', 'x', 'c', 'v', 'b', 'n', 'm', '@'] + delegate: Key { + text: model.modelData + Layout.preferredWidth: 2 + Layout.fillWidth: true + Layout.fillHeight: true + capital: shift.checked + } + } + Key { + image: './images/Keyboard_Back.svg' + Layout.preferredWidth: 2 + Layout.fillWidth: true + Layout.fillHeight: true + onClicked: { + if (!clearSelctedText()) { + var input = keyboard.target + if (input.cursorPosition > 0) + keyboard.target.remove(input.cursorPosition - 1, input.cursorPosition) + } + } + } + } + RowLayout { + Layout.fillWidth: true + Layout.fillHeight: true + Key { + text: '123' + Layout.preferredWidth: 2 + Layout.fillWidth: true + Layout.fillHeight: true + onClicked: root.toggleMode() + } + Key { + text: '.' + Layout.preferredWidth: 2 + Layout.fillWidth: true + Layout.fillHeight: true + } + Key { + text: ' ' + image: './images/Keyboard_Space.svg' + Layout.preferredWidth: 12 + Layout.fillWidth: true + Layout.fillHeight: true + } + Key { + text: '!?' + Layout.preferredWidth: 2 + Layout.fillWidth: true + Layout.fillHeight: true + onClicked: root.toggleMode() + } + Key { + image: './images/Keyboard_Arrow.svg' + Layout.preferredWidth: 2 + Layout.fillWidth: true + Layout.fillHeight: true + onClicked: { + root.hide() + } + } + } + } +} diff --git a/imports/agl-demo-controls/ImageButton.qml b/imports/agl-demo-controls/ImageButton.qml new file mode 100644 index 0000000..c8d05b1 --- /dev/null +++ b/imports/agl-demo-controls/ImageButton.qml @@ -0,0 +1,46 @@ +/* + * 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.Templates 2.0 as T + +T.Button { + id: control + implicitWidth: contentItem.implicitWidth + implicitHeight: contentItem.implicitHeight + + property url offImage + property url onImage: offImage + + contentItem: Image { + source: control.pressed ? control.onImage : control.offImage + transform: [ + Translate { + id: translate + } + ] + states: [ + State { + when: control.pressed + PropertyChanges { + target: translate + x: 5 + y: 5 + } + } + ] + } +} diff --git a/imports/agl-demo-controls/Key.qml b/imports/agl-demo-controls/Key.qml new file mode 100644 index 0000000..a81a126 --- /dev/null +++ b/imports/agl-demo-controls/Key.qml @@ -0,0 +1,90 @@ +/* + * 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 + +MouseArea { + id: root + implicitWidth: 50 + implicitHeight: 80 + property string text + property alias image: image.source + property bool checkable: false + property bool checked: false + property bool capital: false + + onClicked: { + if (checkable) { + checked = !checked + } else { + if (label.text.length === 1) + insert(label.text) + } + } + + function clearSelctedText() { + var input = keyboard.target + if (input.selectedText.length > 0) { + input.remove(input.selectionStart, input.selectionEnd) + return true + } + return false + } + + function insert(text) { + clearSelctedText() + var input = keyboard.target + keyboard.target.insert(input.cursorPosition, text) + } + + Rectangle { + anchors.fill: parent + border.width: 2 + border.color: 'white' + smooth: true + radius: root.height / 10 + color: 'gray' + Rectangle { + anchors.fill: parent + radius: parent.radius + opacity: root.pressed || root.checked ? 0 : 0.5 + gradient: Gradient { + GradientStop { + position: 0.0 + color: 'transparent' + } + GradientStop { + position: 1.0 + color: '#66FF99' + } + } + } + } + + Text { + id: label + anchors.centerIn: parent + color: 'white' + font.pixelSize: root.height / 2 + text: root.capital ? root.text.toUpperCase() : root.text.toLowerCase() + } + + Image { + id: image + anchors.centerIn: parent + scale: 0.8 + } +} diff --git a/imports/agl-demo-controls/Keyboard.qml b/imports/agl-demo-controls/Keyboard.qml new file mode 100644 index 0000000..f1af9d9 --- /dev/null +++ b/imports/agl-demo-controls/Keyboard.qml @@ -0,0 +1,58 @@ +/* + * 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.Window 2.0 +import QtQuick.Layouts 1.1 +import QtQuick.Controls 2.0 + +Item { + id: root + implicitWidth: Screen.width + implicitHeight: Screen.height / 2 + + property Item target + visible: false + + Rectangle { + anchors.fill: parent + color: 'black' + opacity: 0.5 + } + + property AbstractKeyboard active: alphabet + Alphabet { + id: alphabet + anchors.fill: parent + anchors.margins: parent.height / 20 + target: root.target + visible: root.active === alphabet + onShow: root.visible = true + onHide: root.visible = false + onToggleMode: root.active = symbols + } + + Symbols { + id: symbols + anchors.fill: parent + anchors.margins: parent.height / 20 + target: root.target + visible: root.active === symbols + onShow: root.visible = true + onHide: root.visible = false + onToggleMode: root.active = alphabet + } +} diff --git a/imports/agl-demo-controls/Symbols.qml b/imports/agl-demo-controls/Symbols.qml new file mode 100644 index 0000000..a47ccea --- /dev/null +++ b/imports/agl-demo-controls/Symbols.qml @@ -0,0 +1,138 @@ +/* + * 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.Window 2.0 +import QtQuick.Layouts 1.1 + +AbstractKeyboard { + id: root + + ColumnLayout { + anchors.fill: parent + anchors.margins: root.height / 10 + RowLayout { + Layout.fillWidth: true + Layout.fillHeight: true + Repeater { + model: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0'] + delegate: Key { + text: model.modelData + Layout.preferredWidth: 2 + Layout.fillWidth: true + Layout.fillHeight: true + } + } + } + RowLayout { + Layout.fillWidth: true + Layout.fillHeight: true + Item { + Layout.preferredWidth: 1 + Layout.fillWidth: true + } + + Repeater { + model: ['@', '#', '%', '&', '*', '-', '+', '(', ')'] + delegate: Key { + text: model.modelData + Layout.preferredWidth: 2 + Layout.fillWidth: true + Layout.fillHeight: true + } + } + Item { + Layout.preferredWidth: 1 + Layout.fillWidth: true + } + } + RowLayout { + Layout.fillWidth: true + Layout.fillHeight: true + Key { + id: shift + image: './images/Keyboard_Shift.svg' + checkable: true + Layout.preferredWidth: 2 + Layout.fillWidth: true + Layout.fillHeight: true + } + Repeater { + model: ['!', '"', '<', '>', '\'', ':', ';', '/'] + delegate: Key { + text: model.modelData + Layout.preferredWidth: 2 + Layout.fillWidth: true + Layout.fillHeight: true + capital: shift.checked + } + } + Key { + image: './images/Keyboard_Back.svg' + Layout.preferredWidth: 2 + Layout.fillWidth: true + Layout.fillHeight: true + onClicked: { + if (!clearSelctedText()) { + var input = keyboard.target + if (input.cursorPosition > 0) + keyboard.target.remove(input.cursorPosition - 1, input.cursorPosition) + } + } + } + } + RowLayout { + Layout.fillWidth: true + Layout.fillHeight: true + Key { + text: 'ABC' + Layout.preferredWidth: 2 + Layout.fillWidth: true + Layout.fillHeight: true + onClicked: root.toggleMode() + } + Key { + text: '.' + Layout.preferredWidth: 2 + Layout.fillWidth: true + Layout.fillHeight: true + } + Key { + text: ' ' + image: './images/Keyboard_Space.svg' + Layout.preferredWidth: 12 + Layout.fillWidth: true + Layout.fillHeight: true + } + Key { + text: '!?' + Layout.preferredWidth: 2 + Layout.fillWidth: true + Layout.fillHeight: true + onClicked: root.toggleMode() + } + Key { + image: './images/Keyboard_Arrow.svg' + Layout.preferredWidth: 2 + Layout.fillWidth: true + Layout.fillHeight: true + onClicked: { + root.hide() + } + } + } + } +} diff --git a/imports/agl-demo-controls/ToggleButton.qml b/imports/agl-demo-controls/ToggleButton.qml new file mode 100644 index 0000000..4a9fc72 --- /dev/null +++ b/imports/agl-demo-controls/ToggleButton.qml @@ -0,0 +1,31 @@ +/* + * 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.Templates 2.0 as T + +T.CheckBox { + id: control + implicitWidth: contentItem.implicitWidth + implicitHeight: contentItem.implicitHeight + + property url onImage + property url offImage + + contentItem: Image { + source: control.checked ? control.onImage : control.offImage + } +} diff --git a/imports/agl-demo-controls/agl-demo-controls.pro b/imports/agl-demo-controls/agl-demo-controls.pro new file mode 100644 index 0000000..988edd1 --- /dev/null +++ b/imports/agl-demo-controls/agl-demo-controls.pro @@ -0,0 +1,8 @@ +TEMPLATE = aux + +DISTFILES = *.qml qmldir images + +files.files = $$DISTFILES +files.path = $$[QT_INSTALL_QML]/AGL/Demo/Controls + +INSTALLS += files diff --git a/imports/agl-demo-controls/images/Keyboard_Arrow.svg b/imports/agl-demo-controls/images/Keyboard_Arrow.svg new file mode 100644 index 0000000..0b28afe --- /dev/null +++ b/imports/agl-demo-controls/images/Keyboard_Arrow.svg @@ -0,0 +1,65 @@ + + + +image/svg+xml \ No newline at end of file diff --git a/imports/agl-demo-controls/images/Keyboard_Back.svg b/imports/agl-demo-controls/images/Keyboard_Back.svg new file mode 100644 index 0000000..e28b58e --- /dev/null +++ b/imports/agl-demo-controls/images/Keyboard_Back.svg @@ -0,0 +1,57 @@ + + + +image/svg+xml \ No newline at end of file diff --git a/imports/agl-demo-controls/images/Keyboard_Shift.svg b/imports/agl-demo-controls/images/Keyboard_Shift.svg new file mode 100644 index 0000000..ff322aa --- /dev/null +++ b/imports/agl-demo-controls/images/Keyboard_Shift.svg @@ -0,0 +1,57 @@ + + + +image/svg+xml \ No newline at end of file diff --git a/imports/agl-demo-controls/images/Keyboard_Space.svg b/imports/agl-demo-controls/images/Keyboard_Space.svg new file mode 100644 index 0000000..ee22b48 --- /dev/null +++ b/imports/agl-demo-controls/images/Keyboard_Space.svg @@ -0,0 +1,57 @@ + + + +image/svg+xml \ No newline at end of file diff --git a/imports/agl-demo-controls/qmldir b/imports/agl-demo-controls/qmldir new file mode 100644 index 0000000..09e4bb7 --- /dev/null +++ b/imports/agl-demo-controls/qmldir @@ -0,0 +1,3 @@ +ToggleButton 1.0 ToggleButton.qml +ImageButton 1.0 ImageButton.qml +Keyboard 1.0 Keyboard.qml -- cgit 1.2.3-korg