Warning, /plasma/bluedevil/src/kcm/ui/General.qml is written in an unsupported language. File is not indexed.

0001 /**
0002  * SPDX-FileCopyrightText: 2020 Nicolas Fella <nicolas.fella@gmx.de>
0003  * SPDX-FileCopyrightText: 2021 Nate Graham <nate@kde.org>
0004  * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0005  */
0006 
0007 import QtQuick 2.2
0008 import QtQuick.Layouts 1.1
0009 import QtQuick.Controls 2.10 as QQC2
0010 import QtQuick.Dialogs
0011 
0012 import org.kde.kirigami 2.10 as Kirigami
0013 import org.kde.kcmutils
0014 import org.kde.bluezqt 1.0 as BluezQt
0015 import org.kde.bluedevil.kcm 1.0
0016 
0017 SimpleKCM {
0018 
0019     title: i18n("Settings")
0020 
0021     Kirigami.FormLayout {
0022         id: form
0023 
0024         property QtObject adapter: BluezQt.Manager.adapters[box.currentIndex]
0025 
0026         QQC2.ComboBox {
0027             id: box
0028             Kirigami.FormData.label: i18n("Device:")
0029             model: BluezQt.Manager.adapters
0030             textRole: "name"
0031             visible: count > 1
0032         }
0033 
0034         QQC2.TextField {
0035             text: form.adapter.name
0036             Kirigami.FormData.label: i18n("Name:")
0037             onEditingFinished: form.adapter.name = text
0038         }
0039 
0040         QQC2.Label {
0041             text: form.adapter.address
0042             Kirigami.FormData.label: i18n("Address:")
0043         }
0044 
0045         QQC2.CheckBox {
0046             Kirigami.FormData.label: i18n("Enabled:")
0047             checked: form.adapter.powered
0048             onToggled: form.adapter.powered = checked
0049         }
0050 
0051         QQC2.CheckBox {
0052             Kirigami.FormData.label: i18n("Visible:")
0053             checked: form.adapter.discoverable
0054             onToggled: form.adapter.discoverable = checked
0055         }
0056 
0057         Kirigami.Separator {
0058             Kirigami.FormData.isSection: true
0059         }
0060 
0061         QQC2.ButtonGroup {
0062             id: loginStateRadioGroup
0063         }
0064 
0065         QQC2.RadioButton {
0066             Kirigami.FormData.label: i18n("On login:")
0067             text: i18n("Enable Bluetooth")
0068             QQC2.ButtonGroup.group: loginStateRadioGroup
0069             checked: kcm.bluetoothStatusAtLogin === "enable"
0070             onToggled: {
0071                 if (enabled) {
0072                     kcm.bluetoothStatusAtLogin = "enable";
0073                 }
0074             }
0075         }
0076         QQC2.RadioButton {
0077             text: i18n("Disable Bluetooth")
0078             QQC2.ButtonGroup.group: loginStateRadioGroup
0079             checked: kcm.bluetoothStatusAtLogin === "disable"
0080             onToggled: {
0081                 if (enabled) {
0082                     kcm.bluetoothStatusAtLogin = "disable"
0083                 }
0084             }
0085         }
0086         QQC2.RadioButton {
0087             text: i18n("Restore previous status")
0088             QQC2.ButtonGroup.group: loginStateRadioGroup
0089             checked: kcm.bluetoothStatusAtLogin === "remember"
0090             onToggled: {
0091                 if (enabled) {
0092                     kcm.bluetoothStatusAtLogin = "remember"
0093                 }
0094             }
0095         }
0096 
0097         Kirigami.Separator {
0098             Kirigami.FormData.isSection: true
0099         }
0100 
0101         QQC2.ButtonGroup {
0102             id: receivingFilesRadioGroup
0103         }
0104 
0105         QQC2.RadioButton {
0106             Kirigami.FormData.label: i18n("When receiving files:")
0107             checked: FileReceiverSettings.autoAccept === 0
0108             text: i18n("Ask for confirmation")
0109             QQC2.ButtonGroup.group: receivingFilesRadioGroup
0110             onClicked: {
0111                 FileReceiverSettings.autoAccept = 0
0112                 FileReceiverSettings.save()
0113             }
0114         }
0115 
0116         QQC2.RadioButton {
0117             text: i18n("Accept for trusted devices")
0118             checked: FileReceiverSettings.autoAccept === 1
0119             QQC2.ButtonGroup.group: receivingFilesRadioGroup
0120             onClicked: {
0121                 FileReceiverSettings.autoAccept = 1
0122                 FileReceiverSettings.save()
0123             }
0124         }
0125 
0126         QQC2.RadioButton {
0127             text: i18n("Always accept")
0128             QQC2.ButtonGroup.group: receivingFilesRadioGroup
0129             checked: FileReceiverSettings.autoAccept === 2
0130             onClicked: {
0131                 FileReceiverSettings.autoAccept = 2
0132                 FileReceiverSettings.save()
0133             }
0134         }
0135 
0136         Row {
0137             Kirigami.FormData.label: i18n("Save files in:")
0138             QQC2.TextField {
0139                 function urlToPath(urlString) {
0140                     var s
0141                     if (urlString.startsWith("file:///")) {
0142                         var k = urlString.charAt(9) === ':' ? 8 : 7
0143                         s = urlString.substring(k)
0144                     } else {
0145                         s = urlString
0146                     }
0147                     return decodeURIComponent(s);
0148                 }
0149 
0150                 text: urlToPath(FileReceiverSettings.saveUrl.toString())
0151 
0152                 onEditingFinished: {
0153                     FileReceiverSettings.saveUrl = Qt.resolvedUrl(text)
0154                     FileReceiverSettings.save()
0155                 }
0156             }
0157 
0158             QQC2.Button {
0159                 icon.name: "document-open-folder-symbolic"
0160                 display: QQC2.AbstractButton.IconOnly
0161                 text: i18n("Select folder")
0162                 onClicked: folderDialogLoader.active = true
0163             }
0164 
0165             Loader {
0166                 id: folderDialogLoader
0167 
0168                 active: false
0169 
0170                 sourceComponent: FolderDialog {
0171                     id: startupFileDialog
0172                     title: i18n("Select folder")
0173 
0174                     currentFolder: FileReceiverSettings.saveUrl
0175 
0176                     onAccepted: {
0177                         FileReceiverSettings.saveUrl = selectedFolder
0178                         folderDialogLoader.active = false
0179                         FileReceiverSettings.save()
0180                     }
0181 
0182                     onRejected: folderDialogLoader.active = false
0183 
0184                     Component.onCompleted: open()
0185                 }
0186             }
0187         }
0188     }
0189 }
0190