Warning, /frameworks/knewstuff/src/qtquick/qml/private/GridTileDelegate.qml is written in an unsupported language. File is not indexed.

0001 /*
0002     SPDX-FileCopyrightText: 2015 Marco Martin <mart@kde.org>
0003     SPDX-FileCopyrightText: 2019 Dan Leinir Turthra Jensen <admin@leinir.dk>
0004 
0005     SPDX-License-Identifier: LGPL-2.0-or-later
0006 */
0007 
0008 import QtQuick 2.11
0009 import QtQuick.Controls 2.11 as Controls
0010 import QtQuick.Templates 2.11 as T2
0011 import QtQuick.Layouts 1.11
0012 import Qt5Compat.GraphicalEffects 6.0
0013 
0014 import org.kde.kirigami 2.12 as Kirigami
0015 
0016 /**
0017  * Base delegate for KControlmodules based on Grid views of thumbnails
0018  * Use the onClicked signal handler for managing the main action when
0019  * the user clicks on the tile, modified from the original GridDelegate
0020  * from the KCM module
0021  * @inherits QtQuick.Templates.ItemDelegate
0022  */
0023 T2.ItemDelegate {
0024     id: delegate
0025 
0026     /**
0027      * toolTip: string
0028      * string for a tooltip for the whole delegate
0029      */
0030     property string toolTip
0031 
0032     /**
0033      * tile: Item
0034      * the item actually implementing the tile: the visualization is up to the implementation
0035      */
0036     property alias tile: contentArea.data
0037 
0038     /**
0039      * thumbnailAvailable: bool
0040      * Set it to true when a tile is actually available: when false,
0041      * a default icon will be shown instead of the actual tile.
0042      */
0043     property bool thumbnailAvailable: false
0044 
0045     /**
0046      * actions: list<Action>
0047      * A list of extra actions for the thumbnails. They will be shown as
0048      * icons on the bottom-right corner of the tile on mouse over
0049      */
0050     property list<QtObject> actions
0051 
0052     /**
0053      * actionsAnchors: anchors
0054      * The anchors of the actions listing
0055      */
0056     property alias actionsAnchors: actionsScope.anchors
0057 
0058     /**
0059      * thumbnailArea: Item
0060      * The item that will contain the thumbnail within the delegate
0061      */
0062     property Item thumbnailArea : contentArea
0063 
0064     width: GridView.view.cellWidth
0065     height: GridView.view.cellHeight
0066     hoverEnabled: true
0067 
0068     Kirigami.ShadowedRectangle {
0069         id: tile
0070         anchors.centerIn: parent
0071         width: Kirigami.Settings.isMobile ? delegate.width - Kirigami.Units.gridUnit : Math.min(delegate.GridView.view.implicitCellWidth, delegate.width - Kirigami.Units.gridUnit)
0072         height: Math.min(delegate.GridView.view.implicitCellHeight, delegate.height - Kirigami.Units.gridUnit)
0073         radius: Kirigami.Units.smallSpacing
0074         Kirigami.Theme.inherit: false
0075         Kirigami.Theme.colorSet: Kirigami.Theme.View
0076 
0077         shadow.xOffset: 0
0078         shadow.yOffset: 2
0079         shadow.size: 10
0080         shadow.color: Qt.rgba(0, 0, 0, 0.3)
0081 
0082         color: {
0083             // Otherwise the first item is focused, BUG: 417843
0084             // We should rethink this when fixing the keyboard navigation
0085             /*if (delegate.GridView.isCurrentItem) {
0086                 return Kirigami.Theme.highlightColor;
0087             } else */ if (parent.hovered) {
0088                 // Match appearance of hovered list items
0089                 return Qt.rgba(Kirigami.Theme.highlightColor.r,
0090                                Kirigami.Theme.highlightColor.g,
0091                                Kirigami.Theme.highlightColor.b,
0092                                0.5);
0093 
0094             } else {
0095                 return Kirigami.Theme.backgroundColor;
0096             }
0097         }
0098         Behavior on color {
0099             ColorAnimation {
0100                 duration: Kirigami.Units.longDuration
0101                 easing.type: Easing.OutQuad
0102             }
0103         }
0104 
0105         Rectangle {
0106             id: contentArea
0107             radius: Kirigami.Units.smallSpacing/2
0108             anchors {
0109                 fill: parent
0110                 margins: Kirigami.Units.smallSpacing
0111             }
0112 
0113             color: Kirigami.Theme.backgroundColor
0114         }
0115 
0116         Kirigami.Icon {
0117             parent: thumbnailArea
0118             visible: !delegate.thumbnailAvailable
0119             anchors.centerIn: parent
0120             width: Kirigami.Units.iconSizes.large
0121             height: width
0122             source: delegate.text === i18nd("knewstuff6", "None") ? "edit-none" : "view-preview"
0123         }
0124 
0125         Rectangle {
0126             anchors.fill: contentArea
0127             visible: actionsColumn.children.length > 0
0128             opacity: Kirigami.Settings.isMobile || delegate.hovered || (actionsScope.focus) ? 1 : 0
0129             radius: Kirigami.Units.smallSpacing
0130             color: Kirigami.Settings.isMobile ? "transparent" : Qt.rgba(1, 1, 1, 0.2)
0131 
0132             Behavior on opacity {
0133                 NumberAnimation {
0134                     duration: Kirigami.Units.longDuration
0135                     easing.type: Easing.OutQuad
0136                 }
0137             }
0138 
0139             FocusScope {
0140                 id: actionsScope
0141 
0142                 anchors {
0143                     right: parent.right
0144                     rightMargin: Kirigami.Units.smallSpacing
0145                     top: parent.top
0146                     topMargin: Kirigami.Units.smallSpacing
0147                 }
0148                 width: actionsColumn.width
0149                 height: actionsColumn.height
0150 
0151                 ColumnLayout {
0152                     id: actionsColumn
0153 
0154                     Repeater {
0155                         model: delegate.actions
0156                         delegate: Controls.Button {
0157                             icon.name: modelData.iconName
0158                             text: modelData.text
0159                             activeFocusOnTab: focus || delegate.focus
0160                             onClicked: modelData.trigger()
0161                             enabled: modelData.enabled
0162                             visible: modelData.visible
0163                             //NOTE: there aren't any global settings where to take "official" tooltip timeouts
0164                             Controls.ToolTip.delay: 1000
0165                             Controls.ToolTip.timeout: 5000
0166                             Controls.ToolTip.visible: (Kirigami.Settings.isMobile ? pressed : hovered) && modelData.tooltip.length > 0
0167                             Controls.ToolTip.text: modelData.tooltip
0168                         }
0169                     }
0170                 }
0171             }
0172         }
0173     }
0174 
0175     Controls.ToolTip.delay: 1000
0176     Controls.ToolTip.timeout: 5000
0177     Controls.ToolTip.visible: hovered && delegate.toolTip.length > 0
0178     Controls.ToolTip.text: toolTip
0179 }