Warning, /plasma-mobile/qmlkonsole/src/contents/ui/SettingsComponent.qml is written in an unsupported language. File is not indexed.

0001 // SPDX-FileCopyrightText: 2019-2020 Jonah BrĂ¼chert <jbb@kaidan.im>
0002 // SPDX-FileCopyrightText: 2022 Devin Lin <devin@kde.org>
0003 //
0004 // SPDX-License-Identifier: GPL-2.0-or-later
0005 
0006 import QtQuick
0007 import QtQuick.Controls as Controls
0008 import QtQuick.Layouts
0009 
0010 import org.kde.kirigami as Kirigami
0011 import org.kde.konsoleqml
0012 
0013 import org.kde.qmlkonsole
0014 import org.kde.kirigamiaddons.formcard as MobileForm
0015 
0016 ColumnLayout {
0017     id: root
0018     property TerminalEmulator terminal
0019     property var dialog: null // dialog component if this is within a dialog
0020 
0021     spacing: 0
0022 
0023     // HACK: dialog switching requires some time between closing and opening
0024     Timer {
0025         id: dialogTimer
0026         interval: 1
0027         property var dialog
0028         onTriggered: {
0029             root.dialog.close();
0030             dialog.open();
0031         }
0032     }
0033 
0034     MobileForm.FormHeader {
0035         title: i18n("General")
0036     }
0037 
0038     MobileForm.FormCard {
0039         Layout.alignment: Qt.AlignTop
0040         Layout.fillWidth: true
0041 
0042         MobileForm.FormButtonDelegate {
0043             id: aboutDelegate
0044             text: i18n("About")
0045             onClicked: {
0046                 if (root.dialog) {
0047                     root.dialog.close();
0048                 }
0049                 applicationWindow().pageStack.push("qrc:/AboutPage.qml")
0050             }
0051         }
0052     }
0053 
0054     MobileForm.FormHeader {
0055         title: i18n("Appearance")
0056     }
0057 
0058     MobileForm.FormCard {
0059         Layout.alignment: Qt.AlignTop
0060         Layout.fillWidth: true
0061 
0062         MobileForm.FormComboBoxDelegate {
0063             id: colorSchemeDropdown
0064             text: i18n("Color scheme")
0065             displayMode: MobileForm.FormComboBoxDelegate.Dialog
0066             Component.onCompleted: currentIndex = indexOfValue(TerminalSettings.colorScheme)
0067             model: terminal.availableColorSchemes
0068 
0069             onClicked: {
0070                 if (root.dialog && displayMode === MobileForm.FormComboBoxDelegate.Dialog) {
0071                     dialogTimer.dialog = colorSchemeDropdown.dialog;
0072                     dialogTimer.restart();
0073                 }
0074             }
0075 
0076             Connections {
0077                 target: colorSchemeDropdown.dialog
0078                 function onClosed() {
0079                     if (root.dialog) {
0080                         root.dialog.open();
0081                     }
0082                 }
0083             }
0084 
0085             onCurrentValueChanged: {
0086                 TerminalSettings.colorScheme = currentValue;
0087                 TerminalSettings.save();
0088             }
0089         }
0090 
0091         MobileForm.FormDelegateSeparator { above: colorSchemeDropdown; below: fontFamilyDelegate }
0092 
0093         MobileForm.AbstractFormDelegate {
0094             id: fontFamilyDelegate
0095             Layout.fillWidth: true
0096             text: i18n("Font Family")
0097 
0098             onClicked: {
0099                 if (fontFamilyPickerLoader.active) {
0100                     fontFamilyPickerLoader.item.open();
0101                 } else {
0102                     fontFamilyPickerLoader.active = true;
0103                     fontFamilyPickerLoader.requestOpen = true;
0104                 }
0105             }
0106 
0107             contentItem: RowLayout {
0108                 Controls.Label {
0109                     Layout.fillWidth: true
0110                     text: i18n("Font Family")
0111                     elide: Text.ElideRight
0112                 }
0113 
0114                 Controls.Label {
0115                     Layout.alignment: Qt.AlignRight
0116                     Layout.rightMargin: Kirigami.Units.smallSpacing
0117                     color: Kirigami.Theme.disabledTextColor
0118                     text: TerminalSettings.fontFamily
0119                     font.family: TerminalSettings.fontFamily
0120                 }
0121 
0122                 MobileForm.FormArrow {
0123                     Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
0124                     direction: Qt.DownArrow
0125                 }
0126             }
0127 
0128             Loader {
0129                 id: fontFamilyPickerLoader
0130                 active: false
0131                 asynchronous: true
0132 
0133                 property bool requestOpen: false
0134                 onLoaded: {
0135                     if (requestOpen) {
0136                         item.open();
0137                         requestOpen = false;
0138                     }
0139                 }
0140 
0141                 sourceComponent: Kirigami.Dialog {
0142                     id: fontFamilyPicker
0143                     title: i18nc("@title:window", "Pick font")
0144 
0145                     onClosed: {
0146                         if (root.dialog) {
0147                             root.dialog.open();
0148                         }
0149                     }
0150 
0151                     onOpened: {
0152                         if (root.dialog) {
0153                             root.dialog.close();
0154                         }
0155                     }
0156 
0157                     ListView {
0158                         implicitWidth: Kirigami.Units.gridUnit * 18
0159                         implicitHeight: Kirigami.Units.gridUnit * 24
0160 
0161                         reuseItems: true
0162                         model: FontListSearchModel
0163                         currentIndex: -1
0164                         clip: true
0165 
0166                         header: Controls.Control {
0167                             topPadding: Kirigami.Units.smallSpacing
0168                             bottomPadding: Kirigami.Units.smallSpacing
0169                             rightPadding: Kirigami.Units.smallSpacing
0170                             leftPadding: Kirigami.Units.smallSpacing
0171                             width: fontFamilyPicker.width
0172 
0173                             contentItem: Kirigami.SearchField {
0174                                 id: searchField
0175                                 onTextChanged: {
0176                                     FontListSearchModel.setFilterFixedString(text)
0177                                     searchField.forceActiveFocus()
0178                                 }
0179                             }
0180                         }
0181 
0182                         delegate: Controls.ItemDelegate {
0183                             text: model.name
0184                             width: ListView.view.width
0185                             onClicked: {
0186                                 TerminalSettings.fontFamily = model.name;
0187                                 TerminalSettings.save();
0188                                 fontFamilyPicker.close();
0189                             }
0190                         }
0191                     }
0192                 }
0193             }
0194         }
0195 
0196         MobileForm.FormDelegateSeparator { above: fontFamilyDelegate }
0197 
0198         MobileForm.AbstractFormDelegate {
0199             id: fontSizeDelegate
0200             Layout.fillWidth: true
0201             background: Item {}
0202 
0203             contentItem: RowLayout {
0204                 width: fontSizeDelegate.width
0205                 Controls.Label {
0206                     Layout.fillWidth: true
0207                     text: i18n("Font Size")
0208                 }
0209 
0210                 Controls.SpinBox {
0211                     value: TerminalSettings.fontSize
0212                     onValueChanged: {
0213                         TerminalSettings.fontSize = value;
0214                         TerminalSettings.save();
0215                     }
0216                     from: 5
0217                     to: 100
0218                 }
0219             }
0220         }
0221 
0222         MobileForm.FormDelegateSeparator {}
0223 
0224         MobileForm.AbstractFormDelegate {
0225             id: opacityDelegate
0226             Layout.fillWidth: true
0227 
0228             background: Item {}
0229 
0230             contentItem: ColumnLayout {
0231                 Controls.Label {
0232                     text: i18n("Window Transparency")
0233                 }
0234 
0235                 RowLayout {
0236                     spacing: Kirigami.Units.gridUnit
0237                     Kirigami.Icon {
0238                         implicitWidth: Kirigami.Units.iconSizes.smallMedium
0239                         implicitHeight: Kirigami.Units.iconSizes.smallMedium
0240                         source: "brightness-low"
0241                     }
0242 
0243                     Controls.Slider {
0244                         Layout.fillWidth: true
0245                         from: 0
0246                         to: 100
0247                         value: (1 - TerminalSettings.windowOpacity) * 100
0248                         stepSize: 5
0249                         snapMode: Controls.Slider.SnapAlways
0250 
0251                         onMoved: {
0252                             TerminalSettings.windowOpacity = 1 - (value / 100);
0253                             TerminalSettings.save();
0254                         }
0255                     }
0256 
0257                     Kirigami.Icon {
0258                         implicitWidth: Kirigami.Units.iconSizes.smallMedium
0259                         implicitHeight: Kirigami.Units.iconSizes.smallMedium
0260                         source: "brightness-high"
0261                     }
0262                 }
0263             }
0264         }
0265 
0266         MobileForm.FormDelegateSeparator { below: blurDelegate }
0267 
0268         MobileForm.FormSwitchDelegate {
0269             id: blurDelegate
0270             text: i18n("Blur Background")
0271             checked: TerminalSettings.blurWindow
0272 
0273             onCheckedChanged: {
0274                 TerminalSettings.blurWindow = checked;
0275                 TerminalSettings.save();
0276                 Util.setBlur(applicationWindow().pageStack, TerminalSettings.blurWindow);
0277             }
0278         }
0279     }
0280 
0281     Item { Layout.fillHeight: true }
0282 }