Warning, /plasma/latte-dock/shell/package/contents/configuration/LatteDockConfiguration.qml is written in an unsupported language. File is not indexed.

0001 /*
0002     SPDX-FileCopyrightText: 2016 Smith AR <audoban@openmailbox.org>
0003     SPDX-FileCopyrightText: 2016 Michail Vourlakos <mvourlakos@gmail.com>
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 import QtQuick 2.7
0008 import QtQuick.Controls 1.4
0009 import QtQuick.Controls 2.12 as QtQuickControls212
0010 import QtQuick.Layouts 1.3
0011 import QtGraphicalEffects 1.0
0012 import QtQuick.Window 2.2
0013 
0014 import org.kde.plasma.core 2.0 as PlasmaCore
0015 import org.kde.plasma.components 2.0 as PlasmaComponents
0016 import org.kde.plasma.components 3.0 as PlasmaComponents3
0017 import org.kde.plasma.extras 2.0 as PlasmaExtras
0018 import QtQuick.Controls.Styles.Plasma 2.0 as Styles
0019 
0020 import org.kde.kquickcontrolsaddons 2.0 as KQuickControlAddons
0021 
0022 import org.kde.latte.core 0.2 as LatteCore
0023 import org.kde.latte.components 1.0 as LatteComponents
0024 
0025 import "pages" as Pages
0026 import "../controls" as LatteExtraControls
0027 
0028 Loader {
0029     active: plasmoid && plasmoid.configuration && latteView
0030 
0031     sourceComponent: FocusScope {
0032         id: dialog
0033         width: appliedWidth
0034         height: appliedHeight
0035 
0036         readonly property bool basicLevel: !advancedLevel
0037         readonly property bool advancedLevel: universalSettings.inAdvancedModeForEditSettings
0038 
0039         readonly property bool inConfigureAppletsMode: universalSettings.inConfigureAppletsMode || !LatteCore.WindowSystem.compositingActive
0040 
0041         readonly property bool kirigamiLibraryIsFound: LatteCore.Environment.frameworksVersion >= LatteCore.Environment.makeVersion(5,69,0)
0042 
0043         //! max size based on screen resolution
0044         //!    TODO: if we can access availableScreenGeometry.height this can be improved, currently
0045         //!    we use 100px. or 50px. in order to give space for othe views to be shown and to have also
0046         //!    some space around the settings window
0047         property int maxHeight: plasmoid.formFactor === PlasmaCore.Types.Horizontal ?
0048                                     viewConfig.availableScreenGeometry.height - canvasHeadThickness - units.largeSpacing :
0049                                     viewConfig.availableScreenGeometry.height - 2 * units.largeSpacing
0050 
0051         property int maxWidth: 0.6 * latteView.screenGeometry.width
0052 
0053         property int canvasThickness: plasmoid.formFactor === PlasmaCore.Types.Vertical ? latteView.positioner.canvasGeometry.width : latteView.positioner.canvasGeometry.height
0054         property int canvasHeadThickness: {
0055             var edgeMargin = latteView.behaveAsPlasmaPanel && latteView.screenEdgeMarginEnabled ? latteView.screenEdgeMargin : 0;
0056             return Math.max(0,canvasThickness - latteView.maxNormalThickness - Math.max(0,edgeMargin))
0057         }
0058 
0059         //! propose size based on font size
0060         property int proposedWidth: 0.82 * proposedHeight + units.smallSpacing * 2
0061         property int proposedHeight: 36 * theme.mSize(theme.defaultFont).height
0062 
0063         //! chosen size to be applied, if the user has set or not a different scale for the settings window
0064         property int chosenWidth: userScaleWidth !== 1 ? userScaleWidth * proposedWidth : proposedWidth
0065         property int chosenHeight: userScaleHeight !== 1 ? userScaleHeight * heightLevel * proposedHeight : heightLevel * proposedHeight
0066 
0067         readonly property int optionsWidth: appliedWidth - units.smallSpacing * 10
0068 
0069         //! user set scales based on its preference, e.g. 96% of the proposed size
0070         property real userScaleWidth: 1
0071         property real userScaleHeight: 1
0072 
0073         readonly property real heightLevel: (dialog.advancedLevel ? 100 : 1) //in order to use all available space
0074 
0075         onHeightChanged: viewConfig.syncGeometry();
0076 
0077         //! applied size in order to not be out of boundaries
0078         //! width can be between 200px - maxWidth
0079         //! height can be between 400px - maxHeight
0080         property int appliedWidth: Math.min(maxWidth, Math.max(200, chosenWidth))
0081         property int appliedHeight: universalSettings.inAdvancedModeForEditSettings ? maxHeight : Math.min(maxHeight, Math.max(400, chosenHeight))
0082 
0083         Layout.minimumWidth: width
0084         Layout.minimumHeight: height
0085         LayoutMirroring.enabled: Qt.application.layoutDirection === Qt.RightToLeft
0086         LayoutMirroring.childrenInherit: true
0087 
0088         readonly property bool viewIsPanel: latteView.type === LatteCore.Types.PanelView
0089 
0090         property bool panelIsVertical: plasmoid.formFactor === PlasmaCore.Types.Vertical
0091         property int subGroupSpacing: units.largeSpacing + units.smallSpacing * 1.5
0092 
0093         property color bC: theme.backgroundColor
0094         property color tC: theme.textColor
0095         property color transparentBackgroundColor: Qt.rgba(bC.r, bC.g, bC.b, 0.7)
0096         property color borderColor: Qt.rgba(tC.r, tC.g, tC.b, 0.12)
0097 
0098         readonly property Item currentPage: pagesStackView.currentItem
0099 
0100         onAdvancedLevelChanged: {
0101             //! switch to appearancePage when effectsPage becomes hidden because
0102             //! advancedLevel was disabled by the user
0103             if (!advancedLevel && tabBar.currentTab === effectsTabBtn) {
0104                 tabBar.currentTab = appearanceTabBtn;
0105             }
0106         }
0107 
0108         Component.onCompleted: {
0109             updateScales();
0110         }
0111 
0112         Connections {
0113             target: latteView.positioner
0114             onCurrentScreenNameChanged: dialog.updateScales();
0115         }
0116 
0117         function updateScales() {
0118             userScaleWidth = universalSettings.screenWidthScale(latteView.positioner.currentScreenName);
0119             userScaleHeight = universalSettings.screenHeightScale(latteView.positioner.currentScreenName);
0120         }
0121 
0122         PlasmaCore.FrameSvgItem{
0123             id: backgroundFrameSvgItem
0124             anchors.fill: parent
0125             imagePath: "dialogs/background"
0126             enabledBorders: viewConfig.enabledBorders
0127 
0128             onEnabledBordersChanged: viewConfig.updateEffects()
0129             Component.onCompleted: viewConfig.updateEffects()
0130 
0131             LatteExtraControls.DragCorner {
0132                 id: dragCorner
0133             }
0134         }
0135 
0136         PlasmaComponents.Label{
0137             anchors.top: parent.top
0138             anchors.horizontalCenter: parent.horizontalCenter
0139             text: dialog.advancedLevel ?
0140                       i18nc("view settings width scale","Width %1%",userScaleWidth * 100) :
0141                       i18nc("view settings width scale","Width %1% / Height %2%", userScaleWidth * 100, userScaleHeight * 100)
0142             visible: dragCorner.isActive
0143         }
0144 
0145         ColumnLayout {
0146             id: content
0147 
0148             Layout.minimumWidth: width
0149             Layout.minimumHeight: calculatedHeight
0150             Layout.preferredWidth: width
0151             Layout.preferredHeight: calculatedHeight
0152             width: (dialog.appliedWidth - units.smallSpacing * 2)
0153 
0154             anchors.horizontalCenter: parent.horizontalCenter
0155             anchors.top: parent.top
0156             spacing: units.smallSpacing
0157 
0158             property int calculatedHeight: header.height + headerSpacer.height+ tabBar.height + pagesBackground.height + actionButtons.height + spacing * 3
0159 
0160             Keys.onPressed: {
0161                 if (event.key === Qt.Key_Escape) {
0162                     viewConfig.hideConfigWindow();
0163                 }
0164             }
0165 
0166             Component.onCompleted: forceActiveFocus();
0167 
0168             RowLayout {
0169                 id: header
0170                 Layout.fillWidth: true
0171 
0172                 spacing: 0
0173 
0174                 Item {
0175                     id: trademark
0176                     Layout.alignment: Qt.AlignLeft | Qt.AlignTop
0177                     Layout.fillWidth: false
0178                     Layout.topMargin: units.smallSpacing
0179                     Layout.preferredWidth: width
0180                     Layout.preferredHeight: height
0181 
0182                     width: latteTrademark.width + units.smallSpacing
0183                     height: trademarkHeight
0184 
0185                     readonly property int trademarkHeight: 48
0186 
0187                     PlasmaCore.SvgItem{
0188                         id: latteTrademark
0189                         width: Qt.application.layoutDirection !== Qt.RightToLeft ? Math.ceil(1.70 * height) : height
0190                         height: trademark.height
0191 
0192                         svg: PlasmaCore.Svg{
0193                             imagePath: Qt.application.layoutDirection !== Qt.RightToLeft ? universalSettings.trademarkPath() : universalSettings.trademarkIconPath()
0194                         }
0195                     }
0196                 }
0197 
0198                 Item{
0199                     id: headerSpacer
0200                     Layout.minimumHeight: advancedSettings.height + 2*units.smallSpacing
0201                 }
0202 
0203                 ColumnLayout {
0204                     PlasmaComponents3.ToolButton {
0205                         id: pinButton
0206                         Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
0207                         Layout.bottomMargin: units.smallSpacing * 1.5
0208                         Layout.topMargin: units.smallSpacing * 3
0209                         Layout.rightMargin: units.smallSpacing * 2
0210                         icon.name: "window-pin"
0211                         checkable: true
0212 
0213                         property bool inStartup: true
0214 
0215                         onClicked: {
0216                             plasmoid.configuration.configurationSticker = checked
0217                             viewConfig.setSticker(checked)
0218                         }
0219 
0220                         Component.onCompleted: {
0221                             checked = plasmoid.configuration.configurationSticker
0222                             viewConfig.setSticker(plasmoid.configuration.configurationSticker)
0223                         }
0224                     }
0225 
0226                     RowLayout {
0227                         id: advancedSettings
0228                         Layout.fillWidth: true
0229                         Layout.rightMargin: units.smallSpacing * 2
0230                         Layout.alignment: Qt.AlignRight | Qt.AlignTop
0231 
0232                         PlasmaComponents.Label {
0233                             Layout.fillWidth: true
0234                             Layout.alignment: Qt.AlignRight
0235                         }
0236 
0237                         PlasmaComponents.Label {
0238                             id: advancedLbl
0239                             Layout.alignment: Qt.AlignRight
0240                             //  opacity: dialog.basicLevel ? basicOpacity : 1
0241 
0242                             //! TODO: the term here is not accurate because the expert settings mode
0243                             //! is used currently. In the future this term will be rethought if
0244                             //! it must remain or be changed
0245                             text: i18nc("advanced settings", "Advanced")
0246 
0247                             readonly property real textColorBrightness: colorBrightness(theme.textColor)
0248                             readonly property real basicOpacity: textColorBrightness > 127 ? 0.7 : 0.3
0249 
0250                             color: {
0251                                 if (dialog.basicLevel) {
0252                                     return textColorBrightness > 127 ? Qt.darker(theme.textColor, 1.4) : Qt.lighter(theme.textColor, 2.8);
0253                                 }
0254 
0255                                 return theme.textColor;
0256                             }
0257 
0258                             function colorBrightness(color) {
0259                                 return colorBrightnessFromRGB(color.r * 255, color.g * 255, color.b * 255);
0260                             }
0261 
0262                             // formula for brightness according to:
0263                             // https://www.w3.org/TR/AERT/#color-contrast
0264                             function colorBrightnessFromRGB(r, g, b) {
0265                                 return (r * 299 + g * 587 + b * 114) / 1000
0266                             }
0267 
0268                             MouseArea {
0269                                 id: advancedMouseArea
0270                                 anchors.fill: parent
0271                                 hoverEnabled: true
0272                                 onClicked: {
0273                                     advancedSwitch.checked = !advancedSwitch.checked;
0274                                 }
0275                             }
0276                         }
0277 
0278                         LatteComponents.Switch {
0279                             id: advancedSwitch
0280                             checked: universalSettings.inAdvancedModeForEditSettings && viewConfig.isReady
0281 
0282                             onCheckedChanged: {
0283                                 if (viewConfig.isReady) {
0284                                     universalSettings.inAdvancedModeForEditSettings = checked;
0285                                 }
0286                             }
0287                         }
0288                     }
0289                 }
0290             }
0291 
0292             PlasmaComponents.TabBar {
0293                 id: tabBar
0294                 Layout.fillWidth: true
0295                 Layout.maximumWidth: (dialog.appliedWidth - units.smallSpacing * 2)
0296 
0297                 readonly property int visibleStaticPages: dialog.advancedLevel ? 3 : 2
0298 
0299                 PlasmaComponents.TabButton {
0300                     id: behaviorTabBtn
0301                     text: i18n("Behavior")
0302                     onCheckedChanged: {
0303                         if (checked && pagesStackView.currentItem !== behaviorPage) {
0304                             pagesStackView.forwardSliding = true;
0305                             pagesStackView.replace(pagesStackView.currentItem, behaviorPage);
0306                         }
0307                     }
0308 
0309                     Connections {
0310                         target: viewConfig
0311                         onIsReadyChanged: {
0312                             if (viewConfig.isReady) {
0313                                 tabBar.currentTab = behaviorTabBtn;
0314                             }
0315                         }
0316                     }
0317                 }
0318 
0319                 PlasmaComponents.TabButton {
0320                     id: appearanceTabBtn
0321                     text: i18n("Appearance")
0322                     onCheckedChanged: {
0323                         if (checked && pagesStackView.currentItem !== appearancePage) {
0324                             pagesStackView.forwardSliding = (pagesStackView.currentItem.pageIndex > 1);
0325                             pagesStackView.replace(pagesStackView.currentItem, appearancePage);
0326                         }
0327                     }
0328                 }
0329                 PlasmaComponents.TabButton {
0330                     id: effectsTabBtn
0331                     text: i18n("Effects")
0332                     visible: dialog.advancedLevel
0333 
0334                     onCheckedChanged: {
0335                         if (checked && pagesStackView.currentItem !== effectsPage) {
0336                             pagesStackView.forwardSliding = (pagesStackView.currentItem.pageIndex > 2);
0337                             pagesStackView.replace(pagesStackView.currentItem, effectsPage);
0338                         }
0339                     }
0340                 }
0341 
0342                 Repeater {
0343                     id: tasksTabButtonRepeater
0344                     model: latteView.extendedInterface.latteTasksModel
0345 
0346                     PlasmaComponents.TabButton {
0347                         text: index >= 1 ? i18nc("tasks header and index","Tasks <%1>", index+1) : i18n("Tasks")
0348                         onCheckedChanged: {
0349                             if (checked && pagesStackView.currentItem !== tasksRepeater.itemAt(index)) {
0350                                 pagesStackView.forwardSliding = (pagesStackView.currentItem.pageIndex > (tabBar.visibleStaticPages + index));
0351                                 pagesStackView.replace(pagesStackView.currentItem, tasksRepeater.itemAt(index));
0352                             }
0353                         }
0354                     }
0355                 }
0356             }
0357 
0358             Item {
0359                 id: pagesBackground
0360                 Layout.fillWidth: true
0361                 Layout.fillHeight: false
0362                 Layout.minimumWidth: dialog.appliedWidth - units.smallSpacing * 4
0363                 Layout.minimumHeight: height
0364                 Layout.maximumHeight: height
0365 
0366                 width: dialog.appliedWidth - units.smallSpacing * 3
0367                 height: availableFreeHeight + units.smallSpacing * 4
0368 
0369                 //fix the height binding loop when showing the configuration window
0370                 property int availableFreeHeight: dialog.appliedHeight - header.height - headerSpacer.height - tabBar.height - actionButtons.height - 2 * units.smallSpacing
0371 
0372                 // Header
0373                 Rectangle {
0374                     anchors.top: parent.top
0375                     anchors.left: parent.left
0376                     anchors.right: parent.right
0377                     anchors.topMargin: -units.smallSpacing + 2
0378                     anchors.leftMargin: -2*units.smallSpacing
0379                     anchors.rightMargin: -2*units.smallSpacing
0380 
0381                     height: parent.height // dialog.height - (header.height + tabBar.height + units.smallSpacing * 1.5) + 2
0382                     color: theme.backgroundColor
0383                     border.width: 1
0384                     border.color: dialog.borderColor
0385                 }
0386 
0387                 PlasmaExtras.ScrollArea {
0388                     id: scrollArea
0389 
0390                     anchors.fill: parent
0391                     verticalScrollBarPolicy: Qt.ScrollBarAsNeeded
0392                     horizontalScrollBarPolicy: Qt.ScrollBarAlwaysOff
0393 
0394                     flickableItem.flickableDirection: Flickable.VerticalFlick
0395 
0396                     QtQuickControls212.StackView {
0397                         id: pagesStackView
0398                         width: currentItem.width
0399                         height: currentItem.height
0400 
0401                         property bool forwardSliding: true
0402 
0403                         replaceEnter: Transition {
0404                             ParallelAnimation {
0405                                 PropertyAnimation {
0406                                     property: "x"
0407                                     from: pagesStackView.forwardSliding ? -pagesBackground.width : pagesBackground.width
0408                                     to: 0
0409                                     duration: 350
0410                                 }
0411 
0412                                 PropertyAnimation {
0413                                     property: "opacity"
0414                                     from: 0
0415                                     to: 1
0416                                     duration: 350
0417                                 }
0418                             }
0419                         }
0420 
0421                         replaceExit: Transition {
0422                             ParallelAnimation {
0423                                 PropertyAnimation {
0424                                     property: "x"
0425                                     from: 0
0426                                     to: pagesStackView.forwardSliding ? pagesBackground.width : -pagesBackground.width
0427                                     duration: 350
0428                                 }
0429 
0430                                 PropertyAnimation {
0431                                     property: "opacity"
0432                                     from: 1
0433                                     to: 0
0434                                     duration: 350
0435                                 }
0436                             }
0437                         }
0438 
0439                         onDepthChanged:  {
0440                             if (depth === 0) {
0441                                 pagesStackView.forwardSliding = true;
0442                                 push(behaviorPage);
0443                             }
0444                         }
0445                     }
0446                 }
0447 
0448                 Item {
0449                     id:hiddenPages
0450                     anchors.fill: parent
0451                     visible: false
0452 
0453                     Pages.BehaviorConfig {
0454                         id: behaviorPage
0455                         readonly property int pageIndex:0
0456 
0457                         Component.onCompleted: {
0458                             pagesStackView.push(behaviorPage);
0459                         }
0460                     }
0461 
0462                     Pages.AppearanceConfig {
0463                         id: appearancePage
0464                         readonly property int pageIndex:1
0465                     }
0466 
0467                     Pages.EffectsConfig {
0468                         id: effectsPage
0469                         readonly property int pageIndex:2
0470                     }
0471 
0472                     Repeater {
0473                         id: tasksRepeater
0474                         model: plasmoid && plasmoid.configuration && latteView ? latteView.extendedInterface.latteTasksModel : 0
0475 
0476                         Pages.TasksConfig {
0477                             readonly property int pageIndex: tabBar.visibleStaticPages+index
0478                         }
0479                     }
0480                 }
0481             }
0482 
0483             RowLayout {
0484                 id: actionButtons
0485                 Layout.fillWidth: true
0486                 Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
0487 
0488                 spacing: units.largeSpacing
0489 
0490                 LatteComponents.ComboBoxButton {
0491                     id: actionsComboBtn
0492                     Layout.fillWidth: true
0493                     implicitWidth: removeView.implicitWidth
0494                     implicitHeight: removeView.implicitHeight
0495 
0496                     buttonEnabled: true
0497                     buttonIsTriggeringMenu: true
0498                     buttonText: i18n("Add...")
0499                     buttonIconSource: "list-add"
0500                     buttonToolTip: i18n("Add new docks and panels from various templates")
0501 
0502                     comboBoxEnabled: true
0503                     comboBoxBlankSpaceForEmptyIcons: true
0504                     comboBoxPopUpAlignRight: Qt.application.layoutDirection === Qt.RightToLeft
0505                     comboBoxEnabledRole: "enabled"
0506                     comboBoxTextRole: "name"
0507                     comboBoxIconRole: "icon"
0508                     comboBoxIsSeparatorRole: "isSeparator"
0509                     comboBoxMinimumPopUpWidth: actionsModel.count > 1 ? dialog.width / 2 : 150
0510 
0511                     property var centralLayoutsNames: []
0512 
0513                     Component.onCompleted: {
0514                         comboBox.model = actionsModel;
0515                     }
0516 
0517                     ListModel {
0518                         id: actionsModel
0519                     }
0520 
0521                     Connections{
0522                         target: actionsComboBtn.comboBox
0523 
0524                         Component.onCompleted:actionsComboBtn.updateModel();
0525 
0526                         onActivated: {
0527                             var item = actionsModel.get(index);
0528 
0529                             if (item && item.actionId === "add:") {
0530                                 latteView.newView(item.templateId);
0531                             } else if (item && item.actionId === "duplicate:") {
0532                                 latteView.duplicateView();
0533                             }
0534 
0535                             actionsComboBtn.comboBox.currentIndex = -1;
0536                         }
0537 
0538                         onEnabledChanged: {
0539                             if (enabled) {
0540                                 actionsComboBtn.updateModel();
0541                             } else {
0542                                 actionsComboBtn.emptyModel();
0543                             }
0544                         }
0545                     }
0546 
0547                     Connections{
0548                         target: viewConfig
0549                         onIsReadyChanged: {
0550                             if (viewConfig.isReady) {
0551                                 actionsComboBtn.updateModel();
0552                             }
0553                         }
0554                     }
0555 
0556                     Connections{
0557                         target: latteView
0558                         onTypeChanged: actionsComboBtn.updateDuplicateText();
0559                     }
0560 
0561                     Connections {
0562                         target: layoutsManager
0563                         onViewTemplatesChanged: actionsComboBtn.updateModel();
0564                     }
0565 
0566                     function updateModel() {
0567                         actionsModel.clear();
0568 
0569                         var duplicate = {actionId: 'duplicate:', enabled: true, name: '', icon: 'edit-copy'};
0570                         actionsModel.append(duplicate);
0571                         updateDuplicateText();
0572 
0573                         var separator = {isSeparator: true};
0574                         actionsModel.append(separator);
0575 
0576                         var viewTemplateIds = layoutsManager.viewTemplateIds();
0577                         var viewTemplateNames = layoutsManager.viewTemplateNames();
0578 
0579                         for(var i=viewTemplateIds.length-1; i>=0; --i) {
0580                             //! add view templates on reverse
0581                             var viewtemplate = {
0582                                 actionId: 'add:',
0583                                 enabled: true,
0584                                 templateId: viewTemplateIds[i],
0585                                 name: viewTemplateNames[i],
0586                                 icon: 'list-add'
0587                             };
0588                             actionsModel.append(viewtemplate);
0589                         }
0590 
0591                         actionsComboBtn.comboBox.currentIndex = -1;
0592                     }
0593 
0594                     function emptyModel() {
0595                         actionsModel.clear();
0596                         actionsComboBtn.comboBox.currentIndex = -1;
0597                     }
0598 
0599                     function updateDuplicateText() {
0600                         for (var i=0; i<actionsModel.count; ++i) {
0601                             var item = actionsModel.get(i);
0602                             if (item.actionId === "duplicate:") {
0603                                 var duplicateText = latteView.type === LatteCore.Types.DockView ? i18n("Duplicate Dock") : i18n("Duplicate Panel")
0604                                 item.name = duplicateText;
0605                                 break;
0606                             }
0607                         }
0608                     }
0609 
0610                 }
0611 
0612                 PlasmaComponents.Button {
0613                     id: removeView
0614                     Layout.fillWidth: true
0615                     enabled: dialog.advancedLevel
0616                     text: i18n("Remove")
0617                     iconSource: "delete"
0618                     opacity: enabled ? 1 : 0
0619                     tooltip: i18n("Remove current dock")
0620 
0621                     onClicked: latteView.removeView()
0622                 }
0623 
0624                 PlasmaComponents.Button {
0625                     id: closeButton
0626                     Layout.fillWidth: true
0627 
0628                     text: i18n("Close")
0629                     iconSource: "dialog-close"
0630                     tooltip: i18n("Close settings window")
0631 
0632                     onClicked: viewConfig.hideConfigWindow();
0633                 }
0634             }
0635         }
0636 
0637         /*PlasmaExtras.PlasmoidHeading {
0638             id: plasmoidFooter
0639             location: PlasmaExtras.PlasmoidHeading.Location.Footer
0640             anchors {
0641                 bottom: parent.bottom
0642                 left: parent.left
0643                 right: parent.right
0644             }
0645             height: actionButtons.height + units.smallSpacing * 2.5
0646             // So that it doesn't appear over the content view, which results in
0647             // the footer controls being inaccessible
0648             z: -9999
0649         }*/
0650     }
0651 }