Warning, /plasma/latte-dock/shell/package/contents/controls/CustomIndicatorButton.qml is written in an unsupported language. File is not indexed.
0001 /* 0002 SPDX-FileCopyrightText: 2019 Michail Vourlakos <mvourlakos@gmail.com> 0003 SPDX-License-Identifier: GPL-2.0-or-later 0004 */ 0005 0006 import QtQuick 2.1 0007 0008 import org.kde.plasma.plasmoid 2.0 0009 import org.kde.plasma.core 2.0 as PlasmaCore 0010 0011 import org.kde.latte.components 1.0 as LatteComponents 0012 0013 0014 LatteComponents.ComboBoxButton{ 0015 id: custom 0016 checkable: true 0017 0018 buttonToolTip: custom.type === "install:" ? i18n("Install indicators from KDE Online Store or local files") : 0019 i18n("Use %1 style for your indicators", buttonText) 0020 0021 buttonIsTransparent: true 0022 buttonIsTriggeringMenu: custom.type === "install:" 0023 comboBoxButtonIsTransparent: true 0024 comboBoxButtonIsVisible: latteView.indicator.customPluginsCount > 0 0025 0026 comboBoxTextRole: "name" 0027 comboBoxIconRole: "icon" 0028 comboBoxIconToolTipRole: "iconToolTip" 0029 comboBoxIconOnlyWhenHoveredRole: "iconOnlyWhenHovered" 0030 comboBoxBlankSpaceForEmptyIcons: true 0031 comboBoxForcePressed: latteView.indicator.type === type 0032 comboBoxPopUpAlignRight: Qt.application.layoutDirection !== Qt.RightToLeft 0033 0034 property string type: "" 0035 0036 Component.onCompleted: { 0037 reloadModel(); 0038 updateButtonInformation(); 0039 } 0040 0041 ListModel { 0042 id: actionsModel 0043 } 0044 0045 Connections{ 0046 target: latteView.indicator 0047 onCustomPluginsCountChanged: { 0048 custom.reloadModel(); 0049 custom.updateButtonInformation(); 0050 } 0051 } 0052 0053 Connections { 0054 target: viewConfig 0055 onIsReadyChanged: { 0056 if (viewConfig.isReady) { 0057 custom.updateButtonInformation(); 0058 } 0059 } 0060 } 0061 0062 Connections{ 0063 target: custom.button 0064 onClicked: onButtonIsPressed(); 0065 } 0066 0067 Connections{ 0068 target: custom.comboBox 0069 0070 onActivated: { 0071 if (index>=0) { 0072 var item = actionsModel.get(index); 0073 if (item.pluginId === "add:") { 0074 viewConfig.indicatorUiManager.addIndicator(); 0075 } else if (item.pluginId === "download:") { 0076 viewConfig.indicatorUiManager.downloadIndicator(); 0077 } else { 0078 latteView.indicator.type = item.pluginId; 0079 } 0080 } 0081 0082 custom.updateButtonInformation(); 0083 } 0084 0085 onIconClicked: { 0086 if (index>=0) { 0087 var item = actionsModel.get(index); 0088 var pluginId = item.pluginId; 0089 if (latteView.indicator.customLocalPluginIds.indexOf(pluginId)>=0) { 0090 viewConfig.indicatorUiManager.removeIndicator(pluginId); 0091 custom.comboBox.popup.close(); 0092 } 0093 } 0094 } 0095 } 0096 0097 Connections{ 0098 target: custom.comboBox.popup 0099 onVisibleChanged: { 0100 if (visible) { 0101 custom.selectChosenType(); 0102 } 0103 } 0104 } 0105 0106 function onButtonIsPressed() { 0107 if (custom.type !== "install:") { 0108 latteView.indicator.type = custom.type; 0109 } 0110 } 0111 0112 function updateButtonInformation() { 0113 if (latteView.indicator.customPluginsCount === 0) { 0114 custom.buttonText = i18n("Install..."); 0115 custom.type = "install:"; 0116 custom.checkable = false; 0117 } else { 0118 custom.checkable = true; 0119 0120 var curCustomIndex = latteView.indicator.customPluginIds.indexOf(latteView.indicator.customType); 0121 0122 if (curCustomIndex>=0) { 0123 custom.buttonText = actionsModel.get(curCustomIndex).name; 0124 custom.type = actionsModel.get(curCustomIndex).pluginId; 0125 } else { 0126 custom.buttonText = actionsModel.get(0).name; 0127 custom.type = actionsModel.get(0).pluginId; 0128 } 0129 } 0130 } 0131 0132 function reloadModel() { 0133 actionsModel.clear(); 0134 0135 if (latteView.indicator.customPluginsCount > 0) { 0136 var pluginIds = latteView.indicator.customPluginIds; 0137 var pluginNames = latteView.indicator.customPluginNames; 0138 var localPluginIds = latteView.indicator.customLocalPluginIds; 0139 0140 for(var i=0; i<pluginIds.length; ++i) { 0141 var canBeRemoved = localPluginIds.indexOf(pluginIds[i])>=0; 0142 var iconString = canBeRemoved ? 'remove' : ''; 0143 var iconTip = canBeRemoved ? i18n("Remove indicator") : ''; 0144 var iconOnlyForHovered = canBeRemoved ? true : false; 0145 0146 var element = { 0147 pluginId: pluginIds[i], 0148 name: pluginNames[i], 0149 icon: iconString, 0150 iconToolTip: iconTip, 0151 iconOnlyWhenHovered: iconOnlyForHovered 0152 }; 0153 0154 actionsModel.append(element); 0155 } 0156 } 0157 0158 appendDefaults(); 0159 0160 comboBox.model = actionsModel; 0161 0162 if (custom.type === latteView.indicator.type) { 0163 selectChosenType(); 0164 } else { 0165 comboBox.currentIndex = -1; 0166 } 0167 } 0168 0169 function selectChosenType() { 0170 var found = false; 0171 0172 for (var i=0; i<actionsModel.count; ++i) { 0173 if (actionsModel.get(i).pluginId === custom.type) { 0174 found = true; 0175 custom.comboBox.currentIndex = i; 0176 break; 0177 } 0178 } 0179 0180 if (!found) { 0181 custom.comboBox.currentIndex = -1; 0182 } 0183 } 0184 0185 function emptyModel() { 0186 actionsModel.clear(); 0187 appendDefaults(); 0188 0189 comboBox.model = actionsModel; 0190 comboBox.currentIndex = -1; 0191 } 0192 0193 function appendDefaults() { 0194 //! add 0195 var addElement = { 0196 pluginId: 'add:', 0197 name: i18n("Add Indicator..."), 0198 icon: 'document-import', 0199 iconToolTip: '', 0200 iconOnlyWhenHovered: false 0201 }; 0202 actionsModel.append(addElement); 0203 0204 //! download 0205 var downloadElement = { 0206 pluginId: 'download:', 0207 name: i18n("Get New Indicators..."), 0208 icon: 'get-hot-new-stuff', 0209 iconToolTip: '', 0210 iconOnlyWhenHovered: false 0211 }; 0212 actionsModel.append(downloadElement); 0213 } 0214 0215 }