Warning, /education/gcompris/src/activities/baby_keyboard/Baby_keyboard.qml is written in an unsupported language. File is not indexed.
0001 /* GCompris - baby_keyboard.qml 0002 * 0003 * SPDX-FileCopyrightText: 2020 Timothée Giet <animtim@gmail.com> 0004 * 0005 * Authors: 0006 * Timothée Giet <animtim@gmail.com> 0007 * 0008 * SPDX-License-Identifier: GPL-3.0-or-later 0009 */ 0010 import QtQuick 2.12 0011 import GCompris 1.0 0012 0013 import "../../core" 0014 import "baby_keyboard.js" as Activity 0015 0016 ActivityBase { 0017 id: activity 0018 0019 onStart: focus = true 0020 onStop: {} 0021 0022 // When opening a dialog, it steals the focus and re set it to the activity. 0023 // We need to set it back to the textinput item in order to have key events. 0024 onFocusChanged: { 0025 if(focus) { 0026 Activity.focusTextInput() 0027 } 0028 } 0029 0030 pageComponent: Image { 0031 id: background 0032 anchors.fill: parent 0033 source: "qrc:/gcompris/src/activities/menu/resource/background.svg" 0034 fillMode: Image.PreserveAspectCrop 0035 sourceSize.width: width 0036 sourceSize.height: height 0037 0038 signal start 0039 signal stop 0040 0041 property string locale: ApplicationSettings.locale 0042 0043 Component.onCompleted: { 0044 activity.start.connect(start); 0045 activity.stop.connect(stop); 0046 } 0047 0048 // Add here the QML items you need to access in javascript 0049 QtObject { 0050 id: items 0051 property GCAudio audioVoices: activity.audioVoices 0052 property GCSfx audioEffects: activity.audioEffects 0053 property alias typedText: typedText 0054 property alias textinput: textinput 0055 property alias locale: background.locale 0056 property alias fileId: fileId 0057 } 0058 0059 onStart: { 0060 Activity.start(items); 0061 keyboard.populate(); 0062 Activity.focusTextInput(); 0063 } 0064 onStop: { Activity.stop() } 0065 0066 Item { 0067 id: layoutArea 0068 anchors.top: background.top 0069 anchors.bottom: bar.top 0070 anchors.left: background.left 0071 anchors.right: background.right 0072 0073 MouseArea { 0074 anchors.fill: parent 0075 onClicked: { 0076 textinput.focus = false; 0077 textinput.focus = true; 0078 textinput.forceActiveFocus(); 0079 } 0080 } 0081 } 0082 0083 Rectangle { 0084 id: textBG 0085 visible: typedText.text != "" 0086 color: "#80ffffff" 0087 width: typedText.contentWidth * 2 0088 height: typedText.contentHeight 0089 radius: 16 0090 } 0091 0092 GCText { 0093 id: typedText 0094 anchors.centerIn: textBG 0095 text: "" 0096 fontSize: 54 0097 font.bold: true 0098 color: "#d2611d" 0099 style: Text.Outline 0100 styleColor: "white" 0101 } 0102 0103 states: [ 0104 State { 0105 name: "regularKeyboard" 0106 when: !Qt.inputMethod.visible 0107 AnchorChanges { 0108 target: textBG 0109 anchors.top: undefined 0110 anchors.horizontalCenter: layoutArea.horizontalCenter 0111 anchors.verticalCenter: layoutArea.verticalCenter 0112 } 0113 }, 0114 State { 0115 name: "mobileKeyboard" 0116 when: Qt.inputMethod.visible 0117 AnchorChanges { 0118 target: textBG 0119 anchors.top: layoutArea.top 0120 anchors.horizontalCenter: layoutArea.horizontalCenter 0121 anchors.verticalCenter: undefined 0122 } 0123 } 0124 ] 0125 0126 TextEdit { 0127 id: textinput 0128 focus: true 0129 visible: false 0130 inputMethodHints: Qt.ImhNoPredictiveText 0131 onTextChanged: { 0132 if (text != "") { 0133 Activity.processKeyPress(text); 0134 text = ""; 0135 } 0136 } 0137 } 0138 0139 Keys.onPressed: { 0140 Activity.playSound(); 0141 } 0142 0143 File { 0144 id: fileId 0145 } 0146 0147 DialogHelp { 0148 id: dialogHelp 0149 onClose: home() 0150 } 0151 0152 Bar { 0153 id: bar 0154 anchors.bottom: keyboard.top 0155 content: BarEnumContent { value: help | home } 0156 onHelpClicked: { 0157 displayDialog(dialogHelp); 0158 } 0159 onHomeClicked: activity.home(); 0160 } 0161 0162 VirtualKeyboard { 0163 id: keyboard 0164 anchors.bottom: parent.bottom 0165 anchors.horizontalCenter: parent.horizontalCenter 0166 width: parent.width 0167 visible: ApplicationSettings.isVirtualKeyboard && !ApplicationInfo.isMobile 0168 onKeypress: { 0169 if(text == backspace || text == newline) 0170 Activity.playSound(); 0171 else 0172 Activity.processKeyPress(text); 0173 } 0174 shiftKey: true 0175 onError: console.log("VirtualKeyboard error: " + msg); 0176 readonly property string newline: "\u21B2" 0177 0178 function populate() { 0179 layout = [ 0180 [ 0181 { label: "0" }, 0182 { label: "1" }, 0183 { label: "2" }, 0184 { label: "3" }, 0185 { label: "4" }, 0186 { label: "5" }, 0187 { label: "6" }, 0188 { label: "7" }, 0189 { label: "8" }, 0190 { label: "9" } 0191 ], 0192 [ 0193 { label: "A" }, 0194 { label: "B" }, 0195 { label: "C" }, 0196 { label: "D" }, 0197 { label: "E" }, 0198 { label: "F" }, 0199 { label: "G" }, 0200 { label: "H" }, 0201 { label: "I" } 0202 ], 0203 [ 0204 { label: "J" }, 0205 { label: "K" }, 0206 { label: "L" }, 0207 { label: "M" }, 0208 { label: "N" }, 0209 { label: "O" }, 0210 { label: "P" }, 0211 { label: "Q" }, 0212 { label: "R" } 0213 ], 0214 [ 0215 { label: "S" }, 0216 { label: "T" }, 0217 { label: "U" }, 0218 { label: "V" }, 0219 { label: "W" }, 0220 { label: "X" }, 0221 { label: "Y" }, 0222 { label: "Z" }, 0223 { label: " " }, 0224 { label: backspace }, 0225 { label: newline } 0226 ] 0227 ] 0228 } 0229 0230 } 0231 } 0232 0233 }