Warning, /plasma/kwin/src/kcms/desktop/ui/main.qml is written in an unsupported language. File is not indexed.
0001 /*
0002 SPDX-FileCopyrightText: 2018 Eike Hein <hein@kde.org>
0003
0004 SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006
0007 import QtQuick
0008 import QtQuick.Controls as QQC2
0009 import QtQuick.Layouts
0010
0011 import org.kde.kcmutils as KCM
0012 import org.kde.kirigami 2.20 as Kirigami
0013
0014 KCM.ScrollViewKCM {
0015 id: root
0016
0017 Connections {
0018 target: kcm.desktopsModel
0019
0020 function onReadyChanged() {
0021 rowsSpinBox.value = kcm.desktopsModel.rows;
0022 }
0023
0024 function onRowsChanged() {
0025 rowsSpinBox.value = kcm.desktopsModel.rows;
0026 }
0027 }
0028 implicitWidth: Kirigami.Units.gridUnit * 35
0029 implicitHeight: Kirigami.Units.gridUnit * 30
0030
0031 Component {
0032 id: desktopsListItemComponent
0033
0034 QQC2.ItemDelegate {
0035 width: ListView.view.width
0036 down: false // Disable press effect
0037 hoverEnabled: false
0038
0039 contentItem: RowLayout {
0040 QQC2.TextField {
0041 id: nameField
0042
0043 background: null
0044 leftPadding: Kirigami.Units.largeSpacing
0045 topPadding: 0
0046 bottomPadding: 0
0047
0048 Layout.fillWidth: true
0049 Layout.fillHeight: true
0050
0051 text: model ? model.display : ""
0052 verticalAlignment: Text.AlignVCenter
0053
0054 readOnly: true
0055
0056 onTextEdited: {
0057 Qt.callLater(kcm.desktopsModel.setDesktopName, model.Id, text);
0058 }
0059
0060 onEditingFinished: {
0061 readOnly = true;
0062 }
0063
0064 MouseArea {
0065 anchors.fill: parent
0066 enabled: nameField.readOnly
0067
0068 onDoubleClicked: {
0069 renameAction.clicked();
0070 }
0071 }
0072 }
0073
0074 Rectangle {
0075 id: defaultIndicator
0076 radius: width * 0.5
0077 implicitWidth: Kirigami.Units.largeSpacing
0078 implicitHeight: Kirigami.Units.largeSpacing
0079 visible: kcm.defaultsIndicatorsVisible
0080 opacity: model ? !model.IsDefault : 0.0
0081 color: Kirigami.Theme.neutralTextColor
0082 }
0083
0084 DelegateButton {
0085 id: renameAction
0086 enabled: model && !model.IsMissing
0087 visible: !applyAction.visible
0088 icon.name: "edit-rename"
0089 text: i18nc("@info:tooltip", "Rename")
0090 onClicked: {
0091 nameField.readOnly = false;
0092 nameField.selectAll();
0093 nameField.forceActiveFocus();
0094 }
0095 }
0096
0097 DelegateButton {
0098 id: applyAction
0099 visible: !nameField.readOnly
0100 icon.name: "dialog-ok-apply"
0101 text: i18nc("@info:tooltip", "Confirm new name")
0102 onClicked: {
0103 nameField.readOnly = true;
0104 }
0105 }
0106
0107 DelegateButton {
0108 enabled: model && !model.IsMissing && desktopsList.count !== 1
0109 icon.name: "edit-delete"
0110 text: i18nc("@info:tooltip", "Remove")
0111 onClicked: kcm.desktopsModel.removeDesktop(model.Id)
0112 }
0113 }
0114 }
0115 }
0116
0117 component DelegateButton: QQC2.ToolButton {
0118 display: QQC2.AbstractButton.IconOnly
0119 QQC2.ToolTip.text: text
0120 QQC2.ToolTip.visible: hovered
0121 }
0122
0123 header: ColumnLayout {
0124 id: messagesLayout
0125
0126 spacing: Kirigami.Units.largeSpacing
0127
0128 Kirigami.InlineMessage {
0129 Layout.fillWidth: true
0130
0131 type: Kirigami.MessageType.Error
0132
0133 text: kcm.desktopsModel.error
0134
0135 visible: kcm.desktopsModel.error !== ""
0136 }
0137
0138 Kirigami.InlineMessage {
0139 Layout.fillWidth: true
0140
0141 type: Kirigami.MessageType.Information
0142
0143 text: i18n("Virtual desktops have been changed outside this settings application. Saving now will overwrite the changes.")
0144
0145 visible: kcm.desktopsModel.serverModified
0146 }
0147 }
0148
0149 view: ListView {
0150 id: desktopsList
0151
0152 clip: true
0153
0154 model: kcm.desktopsModel.ready ? kcm.desktopsModel : null
0155
0156 section.property: "DesktopRow"
0157 section.delegate: Kirigami.ListSectionHeader {
0158 width: desktopsList.width
0159 label: i18n("Row %1", section)
0160 }
0161
0162 delegate: desktopsListItemComponent
0163 reuseItems: true
0164 }
0165
0166 footer: ColumnLayout {
0167 RowLayout {
0168 QQC2.Button {
0169 text: i18nc("@action:button", "Add")
0170 icon.name: "list-add"
0171
0172 onClicked: kcm.desktopsModel.createDesktop()
0173 }
0174
0175 Item { // Spacer
0176 Layout.fillWidth: true
0177 }
0178
0179 QQC2.SpinBox {
0180 id: rowsSpinBox
0181
0182 from: 1
0183 to: 20
0184 editable: true
0185 value: kcm.desktopsModel.rows
0186
0187 textFromValue: (value, locale) => i18np("1 Row", "%1 Rows", value)
0188 valueFromText: (text, locale) => parseInt(text, 10)
0189
0190 onValueModified: kcm.desktopsModel.rows = value
0191
0192 KCM.SettingHighlighter {
0193 highlight: kcm.desktopsModel.rows !== 2
0194 }
0195 }
0196 }
0197
0198 Kirigami.FormLayout {
0199
0200 QQC2.CheckBox {
0201 id: navWraps
0202
0203 Kirigami.FormData.label: i18n("Options:")
0204
0205 text: i18n("Navigation wraps around")
0206 enabled: !kcm.virtualDesktopsSettings.isImmutable("rollOverDesktops")
0207 checked: kcm.virtualDesktopsSettings.rollOverDesktops
0208 onToggled: kcm.virtualDesktopsSettings.rollOverDesktops = checked
0209
0210 KCM.SettingStateBinding {
0211 configObject: kcm.virtualDesktopsSettings
0212 settingName: "rollOverDesktops"
0213 }
0214 }
0215
0216 RowLayout {
0217 Layout.fillWidth: true
0218
0219 QQC2.CheckBox {
0220 id: animationEnabled
0221 Layout.fillWidth: true
0222
0223 text: i18n("Show animation when switching:")
0224
0225 checked: kcm.animationsModel.animationEnabled
0226
0227 onToggled: kcm.animationsModel.animationEnabled = checked
0228
0229 KCM.SettingHighlighter {
0230 highlight: kcm.animationsModel.animationEnabled !== kcm.animationsModel.defaultAnimationEnabled
0231 }
0232 }
0233
0234 QQC2.ComboBox {
0235 enabled: animationEnabled.checked
0236
0237 model: kcm.animationsModel
0238 textRole: "NameRole"
0239 currentIndex: kcm.animationsModel.animationIndex
0240 onActivated: kcm.animationsModel.animationIndex = currentIndex
0241
0242 KCM.SettingHighlighter {
0243 highlight: kcm.animationsModel.animationIndex !== kcm.animationsModel.defaultAnimationIndex
0244 }
0245 }
0246
0247 QQC2.Button {
0248 enabled: animationEnabled.checked && kcm.animationsModel.currentConfigurable
0249
0250 icon.name: "configure"
0251
0252 onClicked: kcm.configureAnimation()
0253 }
0254
0255 QQC2.Button {
0256 enabled: animationEnabled.checked
0257
0258 icon.name: "dialog-information"
0259
0260 onClicked: kcm.showAboutAnimation()
0261 }
0262
0263 Item {
0264 Layout.fillWidth: true
0265 }
0266 }
0267
0268 RowLayout {
0269 Layout.fillWidth: true
0270
0271 QQC2.CheckBox {
0272 id: osdEnabled
0273
0274 text: i18n("Show on-screen display when switching:")
0275
0276 checked: kcm.virtualDesktopsSettings.desktopChangeOsdEnabled
0277
0278 onToggled: kcm.virtualDesktopsSettings.desktopChangeOsdEnabled = checked
0279
0280 KCM.SettingStateBinding {
0281 configObject: kcm.virtualDesktopsSettings
0282 settingName: "desktopChangeOsdEnabled"
0283 }
0284 }
0285
0286 QQC2.SpinBox {
0287 id: osdDuration
0288
0289 from: 0
0290 to: 10000
0291 stepSize: 100
0292
0293 textFromValue: (value, locale) => i18n("%1 ms", value)
0294 valueFromText: (text, locale) => Number.fromLocaleString(locale, text.split(" ")[0])
0295
0296 value: kcm.virtualDesktopsSettings.popupHideDelay
0297
0298 onValueModified: kcm.virtualDesktopsSettings.popupHideDelay = value
0299
0300 KCM.SettingStateBinding {
0301 configObject: kcm.virtualDesktopsSettings
0302 settingName: "popupHideDelay"
0303 extraEnabledConditions: osdEnabled.checked
0304 }
0305 }
0306 }
0307
0308 RowLayout {
0309 Layout.fillWidth: true
0310
0311 Item {
0312 Layout.preferredWidth: Kirigami.Units.gridUnit
0313 }
0314
0315 QQC2.CheckBox {
0316 id: osdTextOnly
0317 text: i18n("Show desktop layout indicators")
0318 checked: !kcm.virtualDesktopsSettings.textOnly
0319 onToggled: kcm.virtualDesktopsSettings.textOnly = !checked
0320
0321 KCM.SettingStateBinding {
0322 configObject: kcm.virtualDesktopsSettings
0323 settingName: "textOnly"
0324 extraEnabledConditions: osdEnabled.checked
0325 }
0326 }
0327 }
0328 }
0329 }
0330 }
0331