Warning, /plasma-bigscreen/calamares-bigscreen-branding/bigscreen/keyboardq.qml is written in an unsupported language. File is not indexed.
0001 /* === This file is part of Calamares - <https://calamares.io> === 0002 * 0003 * SPDX-FileCopyrightText: 2022 Aditya Mehra <aix.m@outlook.com> 0004 * SPDX-FileCopyrightText: 2020 - 2022 Anke Boersma <demm@kaosx.us> 0005 * SPDX-License-Identifier: GPL-3.0-or-later 0006 * 0007 * Calamares is Free Software: see the License-Identifier above. 0008 * 0009 */ 0010 0011 import io.calamares.core 1.0 0012 import io.calamares.ui 1.0 0013 0014 import QtQuick 2.15 0015 import QtQuick.Controls 2.15 0016 import QtQuick.Window 2.14 0017 import QtQuick.Layouts 1.3 0018 0019 import org.kde.kirigami 2.7 as Kirigami 0020 import "keyboarddata" 0021 0022 import Libfakeqevents 1.0 as LQ 0023 0024 Page { 0025 id: keyboardPage 0026 readonly property color backgroundColor: Branding.styleString(Branding.SidebarBackground) 0027 readonly property color listBackgroundColor: Branding.styleString(Branding.SidebarBackground) 0028 readonly property color textFieldColor: Branding.styleString(Branding.SidebarText) 0029 readonly property color textFieldBackgroundColor: Branding.styleString(Branding.SidebarBackground) 0030 readonly property color textColor: Branding.styleString(Branding.SidebarText) 0031 readonly property color highlightedTextColor: Branding.styleString(Branding.SidebarText) 0032 readonly property color highlightColor: Kirigami.Theme.highlightColor 0033 readonly property color accentColor: Branding.styleString(Branding.SidebarTextHighlight) 0034 0035 function onActivate(){ 0036 navigationHelper.activePage = "keyboardPage" 0037 fakeCursor.moveMouseEvent(mainContentArea.x + 10, 400) 0038 delay(1000, function() { 0039 console.log("KeyboardQ: I'm printed after 1 second!") 0040 fakeCursor.mouseClickEvent() 0041 }) 0042 } 0043 0044 // Cannot Depend onActivate as it never works for some modules 0045 0046 Connections { 0047 target: LQ.FakeEvent 0048 onCallerReceived: { 0049 if(sender == "Keyboard"){ 0050 keyboardPage.onActivate() 0051 } 0052 } 0053 } 0054 0055 // Helper Items For Fake Focus Event 0056 LQ.EmulatedMouse { 0057 id: fakeCursor 0058 } 0059 0060 Timer { 0061 id: timer 0062 } 0063 0064 function delay(delayTime, cb) { 0065 timer.interval = delayTime; 0066 timer.repeat = false; 0067 timer.triggered.connect(cb); 0068 timer.start(); 0069 } 0070 0071 // Main Contents 0072 0073 Item { 0074 id: leftSideBar 0075 width: parent.width * 0.15 0076 anchors.top: parent.top 0077 anchors.bottom: navigationBarArea.top 0078 0079 Kirigami.Separator { 0080 id: leftSideBarLine 0081 anchors.right: parent.right 0082 height: parent.height 0083 width: 1 0084 } 0085 0086 ProgressionBarVertical { 0087 id: installProgressBar 0088 anchors.left: parent.left 0089 anchors.right: leftSideBarLine.left 0090 anchors.top: parent.top 0091 anchors.bottom: parent.bottom 0092 } 0093 } 0094 0095 MouseArea { 0096 id: mainContentArea 0097 anchors.left: leftSideBar.right 0098 anchors.right: rightSideBar.left 0099 anchors.leftMargin: Kirigami.Units.smallSpacing 0100 anchors.rightMargin: Kirigami.Units.smallSpacing 0101 0102 anchors.top: parent.top 0103 anchors.bottom: navigationBarArea.top 0104 0105 onClicked: { 0106 console.log("KeyboardQ mainContentArea has been clicked") 0107 keyboardModelChooseComboBox.forceActiveFocus() 0108 } 0109 0110 ColumnLayout { 0111 id: mainContentColumnLayout 0112 width: parent.width 0113 anchors.top: parent.top 0114 anchors.bottom: keyboard.top 0115 0116 Rectangle { 0117 id: controlBarTopLabel 0118 Layout.fillWidth: true 0119 Layout.preferredHeight: Kirigami.Units.gridUnit * 3 0120 Layout.alignment: Qt.AlignTop 0121 color: "#ff212121" 0122 0123 Label { 0124 id: header 0125 anchors.fill: parent 0126 anchors.margins: Kirigami.Units.largeSpacing 0127 horizontalAlignment: Text.AlignHCenter 0128 verticalAlignment: Text.AlignVCenter 0129 text: qsTr("To activate keyboard preview, select a layout.") 0130 color: textColor 0131 font.bold: true 0132 } 0133 } 0134 0135 Rectangle { 0136 id: controlBarComboArea 0137 Layout.fillWidth: true 0138 Layout.preferredHeight: Kirigami.Units.gridUnit * 3 0139 Layout.alignment: Qt.AlignTop 0140 color: "#ff212121" 0141 border.width: keyboardModelChooseComboBox.focus ? 2 : 0 0142 border.color: keyboardModelChooseComboBox.focus ? accentColor : "transparent" 0143 0144 RowLayout { 0145 id: models 0146 anchors.fill: parent 0147 anchors.margins: Kirigami.Units.largeSpacing 0148 spacing: 10 0149 0150 Label { 0151 Layout.alignment: Qt.AlignCenter 0152 text: qsTr("Keyboard Model:") 0153 color: textColor 0154 font.bold: true 0155 } 0156 0157 ComboBox { 0158 id: keyboardModelChooseComboBox 0159 objectName: "keyboardModelChooseComboBox" 0160 0161 Keys.onUpPressed: { 0162 customNavBar.forceActiveFocus() 0163 } 0164 0165 Keys.onDownPressed: { 0166 localStackContainer.forceActiveFocus() 0167 } 0168 0169 Keys.onReturnPressed: { 0170 keyboardModelChooseComboBox.popup.open() 0171 keyboardModelChooseComboBox.popup.forceActiveFocus() 0172 } 0173 0174 delegate: ItemDelegate { 0175 background: Rectangle { 0176 anchors.fill: parent 0177 color: "transparent" 0178 } 0179 0180 contentItem: Kirigami.Heading{ 0181 level: 2 0182 text: model.label 0183 } 0184 } 0185 0186 background: Rectangle { 0187 anchors.fill: parent 0188 color: keyboardModelChooseComboBox.focus ? accentColor : "transparent" 0189 } 0190 0191 contentItem: Kirigami.Heading { 0192 level: 2 0193 text: keyboardModelChooseComboBox.displayText 0194 } 0195 0196 popup: Popup { 0197 y: keyboardModelChooseComboBox.height - 1 0198 width: keyboardModelChooseComboBox.width 0199 implicitHeight: contentItem.implicitHeight 0200 padding: 1 0201 0202 onVisibleChanged: { 0203 if(visible){ 0204 pCView.forceActiveFocus() 0205 } 0206 } 0207 0208 contentItem: ListView { 0209 id: pCView 0210 clip: true 0211 implicitHeight: contentHeight 0212 model: keyboardModelChooseComboBox.popup.visible ? keyboardModelChooseComboBox.delegateModel : null 0213 currentIndex: keyboardModelChooseComboBox.highlightedIndex 0214 keyNavigationEnabled: true 0215 highlight: Rectangle { 0216 color: accentColor 0217 radius: 4 0218 } 0219 highlightFollowsCurrentItem: true 0220 snapMode: ListView.SnapToItem 0221 0222 Keys.onReturnPressed: { 0223 console.log(currentIndex) 0224 keyboardModelChooseComboBox.currentIndex = pCView.currentIndex 0225 keyboardModelChooseComboBox.popup.close() 0226 keyboardModelChooseComboBox.forceActiveFocus() 0227 } 0228 } 0229 0230 background: Rectangle { 0231 anchors { 0232 fill: parent 0233 margins: -1 0234 } 0235 color: Kirigami.Theme.backgroundColor 0236 border.color: Kirigami.Theme.backgroundColor 0237 radius: 2 0238 } 0239 } 0240 0241 onFocusChanged: { 0242 if(focus) { 0243 navigationHelper.activeFocusedElement = keyboardModelChooseComboBox.objectName 0244 } 0245 } 0246 0247 Layout.fillWidth: true 0248 textRole: "label" 0249 model: config.keyboardModelsModel 0250 currentIndex: model.currentIndex 0251 onCurrentIndexChanged: config.keyboardModels = currentIndex 0252 } 0253 } 0254 } 0255 0256 Rectangle { 0257 id: localStackContainer 0258 objectName: "localStackContainer" 0259 Layout.fillWidth: true 0260 Layout.fillHeight: true 0261 0262 radius: 4 0263 border.width: localStackContainer.activeFocus ? 3 : 1 0264 border.color: localStackContainer.activeFocus ? accentColor : Qt.lighter(Kirigami.Theme.backgroundColor, 1.5) 0265 color: Kirigami.Theme.backgroundColor 0266 0267 KeyNavigation.up: keyboardModelChooseComboBox 0268 0269 Keys.onReturnPressed: { 0270 if(stack.currentIndex == 0){ 0271 listOneButton.forceActiveFocus() 0272 } 0273 if(stack.currentIndex == 1){ 0274 listTwoButton.forceActiveFocus() 0275 } 0276 } 0277 0278 Keys.onDownPressed: { 0279 textInputArea.forceActiveFocus() 0280 } 0281 0282 onActiveFocusChanged: { 0283 if(activeFocus) { 0284 navigationHelper.activeFocusedElement = objectName 0285 } 0286 } 0287 0288 Rectangle { 0289 id: controlBar 0290 anchors.top: parent.top 0291 anchors.left: parent.left 0292 anchors.right: parent.right 0293 anchors.margins: Kirigami.Units.smallSpacing 0294 height: Kirigami.Units.gridUnit * 3 0295 color: "#ff212121" 0296 0297 RowLayout { 0298 id: controlBarLayout 0299 anchors.fill: parent 0300 0301 Rectangle { 0302 color: listOneButton.activeFocus ? keyboardPage.accentColor : "#ff212121" 0303 Layout.fillWidth: true 0304 Layout.preferredHeight: Kirigami.Units.gridUnit * 3 0305 radius: 3 0306 border.color: Branding.styleString(Branding.SidebarText) 0307 border.width: stack.currentIndex == 0 ? 1 : 0 0308 0309 Button { 0310 id: listOneButton 0311 objectName: "listOneButton" 0312 text: "Layout Selection" 0313 anchors.fill: parent 0314 anchors.margins: 3 0315 highlighted: listOneButton.activeFocus ? 1 : 0 0316 flat: stack.currentIndex == 0 0317 0318 Kirigami.Theme.backgroundColor: Qt.rgba(Kirigami.Theme.backgroundColor.r, Kirigami.Theme.backgroundColor.g, Kirigami.Theme.backgroundColor.b, 0.4) 0319 Kirigami.Theme.textColor: Kirigami.Theme.textColor 0320 0321 KeyNavigation.right: listTwoButton 0322 KeyNavigation.down: list 0323 0324 onActiveFocusChanged: { 0325 if(activeFocus) { 0326 navigationHelper.activeFocusedElement = objectName 0327 } 0328 } 0329 0330 Keys.onBackPressed: { 0331 localStackContainer.forceActiveFocus() 0332 } 0333 0334 onClicked: { 0335 stack.currentIndex = 0 0336 } 0337 } 0338 } 0339 0340 Rectangle { 0341 color: listTwoButton.activeFocus ? keyboardPage.accentColor : "#ff212121" 0342 Layout.fillWidth: true 0343 Layout.preferredHeight: Kirigami.Units.gridUnit * 3 0344 radius: 3 0345 border.color: Branding.styleString(Branding.SidebarText) 0346 border.width: stack.currentIndex == 1 ? 1 : 0 0347 0348 Button { 0349 id: listTwoButton 0350 objectName: "listTwoButton" 0351 text: "Variant Selection" 0352 anchors.fill: parent 0353 anchors.margins: 3 0354 highlighted: listTwoButton.activeFocus ? 1 : 0 0355 flat: stack.currentIndex == 1 0356 0357 Kirigami.Theme.backgroundColor: Qt.rgba(Kirigami.Theme.backgroundColor.r, Kirigami.Theme.backgroundColor.g, Kirigami.Theme.backgroundColor.b, 0.4) 0358 Kirigami.Theme.textColor: Kirigami.Theme.textColor 0359 0360 0361 KeyNavigation.left: listOneButton 0362 KeyNavigation.down: list 0363 0364 onActiveFocusChanged: { 0365 if(activeFocus) { 0366 navigationHelper.activeFocusedElement = objectName 0367 } 0368 } 0369 0370 Keys.onBackPressed: { 0371 localStackContainer.forceActiveFocus() 0372 } 0373 0374 onClicked: { 0375 stack.currentIndex = 1 0376 } 0377 } 0378 } 0379 } 0380 } 0381 0382 StackLayout { 0383 id: stack 0384 anchors.top: controlBar.bottom 0385 anchors.left: parent.left 0386 anchors.right: parent.right 0387 anchors.bottom: parent.bottom 0388 anchors.margins: Kirigami.Units.smallSpacing 0389 clip: true 0390 currentIndex: 0 0391 0392 ColumnLayout { 0393 implicitWidth: parent.width 0394 implicitHeight: parent.height 0395 0396 Rectangle { 0397 Layout.fillWidth: true 0398 Layout.preferredHeight: Kirigami.Units.gridUnit * 2 0399 color: "#ff212121" 0400 0401 Label { 0402 id: keyboardViewOne 0403 anchors.fill: parent 0404 anchors.margins: Kirigami.Units.largeSpacing 0405 verticalAlignment: Text.AlignVCenter 0406 horizontalAlignment: Text.AlignCenter 0407 color: Branding.styleString(Branding.SidebarText) 0408 font.pixelSize: parent.height * 0.45 0409 text: qsTr("Select your preferred keyboard layout.") 0410 maximumLineCount: 1 0411 elide: Text.ElideRight 0412 } 0413 } 0414 0415 Kirigami.CardsListView { 0416 id: list 0417 objectName: "list" 0418 Layout.fillWidth: true 0419 Layout.fillHeight: true 0420 boundsBehavior: Flickable.StopAtBounds 0421 spacing: 4 0422 model: config.keyboardLayoutsModel 0423 currentIndex: model.currentIndex 0424 clip: true 0425 highlight: Rectangle { 0426 color: accentColor 0427 radius: 4 0428 } 0429 ScrollBar.vertical: ScrollBar { 0430 id: listScrollBar 0431 active: true 0432 } 0433 0434 KeyNavigation.up: listOneButton 0435 KeyNavigation.down: adjustSettingsButton 0436 0437 Keys.onBackPressed: { 0438 localStackContainer.forceActiveFocus() 0439 } 0440 0441 Keys.onRightPressed: { 0442 localStackContainer.forceActiveFocus() 0443 } 0444 0445 Keys.onLeftPressed: { 0446 localStackContainer.forceActiveFocus() 0447 } 0448 0449 onActiveFocusChanged: { 0450 if(activeFocus) { 0451 navigationHelper.activeFocusedElement = objectName 0452 } 0453 } 0454 0455 Component.onCompleted: positionViewAtIndex(model.currentIndex, ListView.Contain) 0456 0457 delegate: Kirigami.BasicListItem { 0458 width: parent.width 0459 height: 40 0460 label: model.label 0461 0462 Keys.onReturnPressed: { 0463 clicked() 0464 } 0465 0466 onClicked: { 0467 list.currentIndex = index 0468 list.model.currentIndex = index 0469 keyIndex = label1.text.substring(0,6) 0470 stack.currentIndex = 1 0471 list2.forceActiveFocus() 0472 } 0473 } 0474 } 0475 } 0476 0477 ColumnLayout { 0478 id: variantView 0479 implicitWidth: parent.width 0480 implicitHeight: parent.height 0481 0482 Rectangle { 0483 Layout.fillWidth: true 0484 Layout.preferredHeight: Kirigami.Units.gridUnit * 2 0485 color: "#ff212121" 0486 0487 Label { 0488 id: variant 0489 anchors.fill: parent 0490 anchors.margins: Kirigami.Units.largeSpacing 0491 verticalAlignment: Text.AlignVCenter 0492 horizontalAlignment: Text.AlignCenter 0493 color: Branding.styleString(Branding.SidebarText) 0494 font.pixelSize: parent.height * 0.45 0495 text: qsTr("Select your preferred keyboard layout variant.") 0496 maximumLineCount: 1 0497 elide: Text.ElideRight 0498 } 0499 } 0500 0501 Kirigami.CardsListView { 0502 id: list2 0503 objectName: "list2" 0504 Layout.fillWidth: true 0505 Layout.fillHeight: true 0506 boundsBehavior: Flickable.StopAtBounds 0507 spacing: 4 0508 model: config.keyboardVariantsModel 0509 currentIndex: model.currentIndex 0510 clip: true 0511 highlight: Rectangle { 0512 color: accentColor 0513 radius: 4 0514 } 0515 ScrollBar.vertical: ScrollBar { 0516 id: list2ScrollBar 0517 active: true 0518 } 0519 0520 KeyNavigation.up: listOneButton 0521 KeyNavigation.down: adjustSettingsButton 0522 0523 Keys.onBackPressed: { 0524 localStackContainer.forceActiveFocus() 0525 } 0526 0527 Keys.onRightPressed: { 0528 localStackContainer.forceActiveFocus() 0529 } 0530 0531 Keys.onLeftPressed: { 0532 localStackContainer.forceActiveFocus() 0533 } 0534 0535 onActiveFocusChanged: { 0536 if(activeFocus) { 0537 navigationHelper.activeFocusedElement = objectName 0538 } 0539 } 0540 0541 Component.onCompleted: positionViewAtIndex(model.currentIndex, ListView.Center) 0542 0543 delegate: Kirigami.BasicListItem { 0544 width: parent.width 0545 height: 40 0546 label: model.label 0547 0548 Keys.onReturnPressed: { 0549 clicked() 0550 } 0551 0552 onClicked: { 0553 list2.currentIndex = index 0554 list2.model.currentIndex = index 0555 list2.positionViewAtIndex(index, ListView.Contain) 0556 //adjustSettingsButton.forceActiveFocus() 0557 } 0558 } 0559 } 0560 } 0561 } 0562 } 0563 0564 Rectangle { 0565 id: textInputArea 0566 Layout.fillWidth: true 0567 Layout.preferredHeight: Kirigami.Units.gridUnit * 3 0568 color: textInputArea.focus ? accentColor : "#ff212121" 0569 objectName: "textInputArea" 0570 0571 Keys.onUpPressed: { 0572 localStackContainer.forceActiveFocus() 0573 } 0574 0575 Keys.onDownPressed: { 0576 customNavBar.forceActiveFocus() 0577 } 0578 0579 Keys.onReturnPressed: { 0580 textInput.forceActiveFocus() 0581 } 0582 0583 onActiveFocusChanged: { 0584 if(activeFocus) { 0585 navigationHelper.activeFocusedElement = objectName 0586 } 0587 } 0588 0589 TextField { 0590 id: textInput 0591 placeholderText: qsTr("Type here to test your keyboard") 0592 horizontalAlignment: TextInput.AlignHCenter 0593 anchors.fill: parent 0594 anchors.margins: 3 0595 0596 onAccepted: { 0597 textInputArea.forceActiveFocus() 0598 } 0599 0600 Keys.onUpPressed: { 0601 textInputArea.forceActiveFocus() 0602 } 0603 0604 Keys.onDownPressed: { 0605 customNavBar.forceActiveFocus() 0606 } 0607 } 0608 } 0609 } 0610 0611 Keyboard { 0612 id: keyboard 0613 anchors.left: parent.left 0614 anchors.right: parent.right 0615 anchors.bottom: parent.bottom 0616 height: parent.height * 0.25 0617 source: langXml.includes(keyIndex) ? (keyIndex + ".xml") : 0618 afganiXml.includes(keyIndex) ? "afgani.xml" : 0619 scanXml.includes(keyIndex) ? "scan.xml" : 0620 genericXml.includes(keyIndex) ? "generic.xml" : 0621 genericQzXml.includes(keyIndex) ? "generic_qz.xml" : 0622 arXml.includes(keyIndex) ? "ar.xml" : 0623 deXml.includes(keyIndex) ? "de.xml" : 0624 enXml.includes(keyIndex) ? "en.xml" : 0625 esXml.includes(keyIndex) ? "es.xml" : 0626 frXml.includes(keyIndex) ? "fr.xml" : 0627 ptXml.includes(keyIndex) ? "pt.xml" : 0628 ruXml.includes(keyIndex) ? "ru.xml" :"empty.xml" 0629 rows: 4 0630 columns: 10 0631 keyColor: "transparent" 0632 keyPressedColorOpacity: 0.2 0633 keyImageLeft: "button_bkg_left.png" 0634 keyImageRight: "button_bkg_right.png" 0635 keyImageCenter: "button_bkg_center.png" 0636 target: textInput 0637 onEnterClicked: console.log("Enter!") 0638 } 0639 } 0640 0641 Item { 0642 id: rightSideBar 0643 width: parent.width * 0.15 0644 anchors.top: parent.top 0645 anchors.bottom: navigationBarArea.top 0646 anchors.right: parent.right 0647 0648 Kirigami.Separator { 0649 id: rightSideBarLine 0650 anchors.left: parent.left 0651 height: parent.height 0652 width: 1 0653 } 0654 0655 NavigationHelper { 0656 id: navigationHelper 0657 anchors.top: parent.top 0658 anchors.bottom: parent.bottom 0659 anchors.left: rightSideBarLine.right 0660 anchors.leftMargin: 1 0661 anchors.right: parent.right 0662 } 0663 } 0664 0665 Item { 0666 id: navigationBarArea 0667 width: parent.width 0668 height: Kirigami.Units.gridUnit * 3 0669 anchors.bottom: parent.bottom 0670 0671 Kirigami.Separator { 0672 id: navigationBarAreaLine 0673 anchors.top: parent.top 0674 width: parent.width 0675 height: 1 0676 } 0677 0678 CustomNavigationBar { 0679 id: customNavBar 0680 width: parent.width 0681 anchors.top: navigationBarAreaLine.bottom 0682 anchors.bottom: parent.bottom 0683 navigationReturnComponent: textInputArea 0684 navHelper: navigationHelper 0685 } 0686 } 0687 }