Warning, /plasma/kwin/src/kcms/effects/ui/main.qml is written in an unsupported language. File is not indexed.

0001 /*
0002     SPDX-FileCopyrightText: 2013 Antonis Tsiapaliokas <kok3rs@gmail.com>
0003     SPDX-FileCopyrightText: 2019 Vlad Zahorodnii <vlad.zahorodnii@kde.org>
0004     SPDX-FileCopyrightText: 2023 ivan tkachenko <me@ratijas.tk>
0005 
0006     SPDX-License-Identifier: GPL-2.0-or-later
0007 */
0008 
0009 import QtQuick
0010 import QtQuick.Controls as QQC2
0011 import QtQuick.Layouts
0012 
0013 import org.kde.kcmutils
0014 import org.kde.config
0015 import org.kde.kirigami 2 as Kirigami
0016 import org.kde.newstuff as NewStuff
0017 
0018 import org.kde.private.kcms.kwin.effects as Private
0019 
0020 ScrollViewKCM {
0021     implicitHeight: Kirigami.Units.gridUnit * 30
0022     implicitWidth: Kirigami.Units.gridUnit * 40
0023 
0024     actions: NewStuff.Action {
0025         text: i18nc("@action:button get new KWin effects", "Get New…")
0026         visible: KAuthorized.authorize(KAuthorized.GHNS)
0027         configFile: "kwineffect.knsrc"
0028         onEntryEvent: (entry, event) => {
0029             if (event === NewStuff.Engine.StatusChangedEvent) {
0030                 kcm.onGHNSEntriesChanged()
0031             }
0032         }
0033     }
0034 
0035     header: ColumnLayout {
0036         spacing: Kirigami.Units.smallSpacing
0037 
0038         QQC2.Label {
0039             Layout.fillWidth: true
0040             Layout.leftMargin: Kirigami.Units.smallSpacing
0041             Layout.rightMargin: Kirigami.Units.smallSpacing
0042 
0043             wrapMode: Text.WordWrap
0044             text: i18n("Hint: To find out or configure how to activate an effect, look at the effect's settings.")
0045         }
0046 
0047         RowLayout {
0048             spacing: Kirigami.Units.smallSpacing
0049 
0050             Kirigami.SearchField {
0051                 id: searchField
0052 
0053                 Layout.fillWidth: true
0054             }
0055 
0056             QQC2.ToolButton {
0057                 id: filterButton
0058 
0059                 icon.name: "view-filter"
0060 
0061                 checkable: true
0062                 checked: menu.opened
0063                 onClicked: menu.popup(filterButton, filterButton.width - menu.width, filterButton.height)
0064 
0065                 QQC2.ToolTip {
0066                     text: i18n("Configure Filter")
0067                 }
0068             }
0069 
0070             QQC2.Menu {
0071                 id: menu
0072 
0073                 modal: true
0074 
0075                 QQC2.MenuItem {
0076                     checkable: true
0077                     checked: searchModel.excludeUnsupported
0078                     text: i18n("Exclude unsupported effects")
0079 
0080                     onToggled: searchModel.excludeUnsupported = checked
0081                 }
0082 
0083                 QQC2.MenuItem {
0084                     checkable: true
0085                     checked: searchModel.excludeInternal
0086                     text: i18n("Exclude internal effects")
0087 
0088                     onToggled: searchModel.excludeInternal = checked
0089                 }
0090             }
0091         }
0092     }
0093 
0094     view: ListView {
0095         id: effectsList
0096 
0097         // { string name: QQC2.ButtonGroup group }
0098         property var _buttonGroups: new Map()
0099 
0100         clip: true
0101 
0102         model: Private.EffectsFilterProxyModel {
0103             id: searchModel
0104 
0105             query: searchField.text
0106             sourceModel: kcm.effectsModel
0107         }
0108 
0109         delegate: Effect {
0110             width: ListView.view.width - ListView.view.leftMargin - ListView.view.rightMargin
0111         }
0112 
0113         section.property: "CategoryRole"
0114         section.delegate: Kirigami.ListSectionHeader {
0115             width: ListView.view.width - ListView.view.leftMargin - ListView.view.rightMargin
0116             text: section
0117         }
0118 
0119         Component {
0120             id: buttonGroupComponent
0121 
0122             QQC2.ButtonGroup {}
0123         }
0124 
0125         function findButtonGroup(name: string): QQC2.ButtonGroup {
0126             let group = _buttonGroups.get(name);
0127             if (group === undefined) {
0128                 group = buttonGroupComponent.createObject(this);
0129                 _buttonGroups.set(name, group);
0130             }
0131             return group;
0132         }
0133     }
0134 }