Warning, /plasma/plasma-desktop/desktoppackage/contents/configuration/ConfigurationContainmentActions.qml is written in an unsupported language. File is not indexed.
0001 /* 0002 SPDX-FileCopyrightText: 2013 Marco Martin <mart@kde.org> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 import QtQuick 0008 import QtQuick.Controls 2.3 as QQC2 0009 import QtQuick.Layouts 1.0 0010 0011 import org.kde.kirigami 2.20 as Kirigami 0012 0013 Item { 0014 id: root 0015 0016 signal configurationChanged 0017 implicitWidth: mainColumn.implicitWidth 0018 implicitHeight: mainColumn.implicitHeight 0019 0020 property var prettyStrings: { 0021 "LeftButton": i18nd("plasma_shell_org.kde.plasma.desktop", "Left-Button"), 0022 "RightButton": i18nd("plasma_shell_org.kde.plasma.desktop", "Right-Button"), 0023 "MiddleButton": i18nd("plasma_shell_org.kde.plasma.desktop", "Middle-Button"), 0024 "BackButton": i18nd("plasma_shell_org.kde.plasma.desktop", "Back-Button"), 0025 "ForwardButton": i18nd("plasma_shell_org.kde.plasma.desktop", "Forward-Button"), 0026 0027 "wheel:Vertical": i18nd("plasma_shell_org.kde.plasma.desktop", "Vertical-Scroll"), 0028 "wheel:Horizontal": i18nd("plasma_shell_org.kde.plasma.desktop", "Horizontal-Scroll"), 0029 0030 "ShiftModifier": i18nd("plasma_shell_org.kde.plasma.desktop", "Shift"), 0031 "ControlModifier": i18nd("plasma_shell_org.kde.plasma.desktop", "Ctrl"), 0032 "AltModifier": i18nd("plasma_shell_org.kde.plasma.desktop", "Alt"), 0033 "MetaModifier": i18nd("plasma_shell_org.kde.plasma.desktop", "Meta") 0034 } 0035 0036 function saveConfig() { 0037 configDialog.currentContainmentActionsModel.save(); 0038 } 0039 0040 Connections { 0041 target: configDialog.currentContainmentActionsModel 0042 function onConfigurationChanged() { 0043 root.configurationChanged() 0044 } 0045 } 0046 0047 Component { 0048 id: aboutComponent 0049 0050 Kirigami.OverlaySheet { 0051 id: internalAboutDialog 0052 0053 property alias metaData: aboutPluginPage.metaData 0054 0055 width: Math.round(root.width * 0.8) 0056 onClosed: destroy() 0057 0058 AboutPlugin { 0059 id: aboutPluginPage 0060 metaData: internalAboutDialog.metaData 0061 } 0062 0063 Component.onCompleted: open(); 0064 } 0065 } 0066 0067 GridLayout { 0068 id: mainColumn 0069 flow: GridLayout.TopToBottom 0070 y: 25 0071 width: parent.width 0072 0073 Repeater { 0074 id: actionsRepeater 0075 model: configDialog.currentContainmentActionsModel 0076 0077 MouseEventInputButton { 0078 Layout.column: 0 0079 Layout.row: index 0080 Layout.fillWidth: true 0081 Layout.minimumWidth: implicitWidth 0082 defaultText: { 0083 var splitAction = model.action.split(';'); 0084 0085 var button = splitAction[0]; 0086 var modifiers = (splitAction[1] || "").split('|').filter(function (item) { 0087 return item !== "NoModifier"; 0088 }); 0089 0090 var parts = modifiers; 0091 modifiers.push(button); 0092 0093 return parts.map(function (item) { 0094 return prettyStrings[item] || item; 0095 }).join(i18ndc("plasma_shell_org.kde.plasma.desktop", "Concatenation sign for shortcuts, e.g. Ctrl+Shift", "+")); 0096 } 0097 eventString: model.action 0098 onEventStringChanged: { 0099 configDialog.currentContainmentActionsModel.update(index, eventString, model.pluginName); 0100 } 0101 } 0102 } 0103 0104 Repeater { 0105 model: configDialog.currentContainmentActionsModel 0106 0107 QQC2.ComboBox { 0108 id: pluginsCombo 0109 // "index" argument of onActivated shadows the model index 0110 readonly property int pluginIndex: index 0111 Layout.fillWidth: true 0112 Layout.column: 1 0113 Layout.row: index 0114 // both MouseEventInputButton and this ComboBox have fillWidth for a uniform layout 0115 // however, their implicit sizes is taken into account and they compete against 0116 // each other for available space. By setting an insane preferredWidth we give 0117 // ComboBox a greater share of the available space 0118 Layout.preferredWidth: 9000 0119 model: configDialog.containmentActionConfigModel 0120 textRole: "name" 0121 property bool initialized: false 0122 Component.onCompleted: { 0123 for (var i = 0; i < configDialog.containmentActionConfigModel.count; ++i) { 0124 if (configDialog.containmentActionConfigModel.get(i).pluginName === pluginName) { 0125 pluginsCombo.currentIndex = i; 0126 break; 0127 } 0128 } 0129 pluginsCombo.initialized = true; 0130 } 0131 onActivated: { 0132 if (initialized) { 0133 var newPluginName = configDialog.containmentActionConfigModel.get(index).pluginName; 0134 if (newPluginName !== pluginName) { 0135 configDialog.currentContainmentActionsModel.update(pluginIndex, action, newPluginName); 0136 } 0137 } 0138 } 0139 } 0140 } 0141 0142 Repeater { 0143 model: configDialog.currentContainmentActionsModel 0144 0145 RowLayout { 0146 Layout.column: 2 0147 Layout.row: index 0148 0149 QQC2.Button { 0150 icon.name: "configure" 0151 width: height 0152 enabled: model.hasConfigurationInterface 0153 onClicked: { 0154 configDialog.currentContainmentActionsModel.showConfiguration(index, this); 0155 } 0156 } 0157 QQC2.Button { 0158 icon.name: "dialog-information" 0159 width: height 0160 onClicked: { 0161 const metaData = configDialog.currentContainmentActionsModel.aboutMetaData(index); 0162 if (!metaData) { 0163 return; 0164 } 0165 aboutComponent.incubateObject(root.Window.window.contentItem, { 0166 "metaData": metaData, 0167 "title": i18ndc("plasma_shell_org.kde.plasma.desktop", "@title", "About"), 0168 }, Qt.Asynchronous); 0169 } 0170 } 0171 QQC2.Button { 0172 icon.name: "list-remove" 0173 width: height 0174 onClicked: { 0175 configDialog.currentContainmentActionsModel.remove(index); 0176 } 0177 } 0178 } 0179 } 0180 0181 MouseEventInputButton { 0182 defaultText: i18nd("plasma_shell_org.kde.plasma.desktop", "Add Action"); 0183 icon.name: checked ? "input-mouse-symbolic" : "list-add" 0184 onEventStringChanged: { 0185 configDialog.currentContainmentActionsModel.append(eventString, "org.kde.contextmenu"); 0186 } 0187 } 0188 } 0189 0190 }