1
0
mirror of https://github.com/KDE/latte-dock.git synced 2025-01-13 05:17:48 +03:00
latte-dock/declarativeimports/components/ItemDelegate.qml
2019-03-31 14:53:12 +03:00

126 lines
4.2 KiB
QML

/*
* Copyright 2016 Marco Martin <mart@kde.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Library General Public License as
* published by the Free Software Foundation; either version 2, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Library General Public License for more details
*
* You should have received a copy of the GNU Library General Public
* License along with this program; if not, write to the
* Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import QtQuick 2.5
import QtQuick.Layouts 1.3
import QtQuick.Templates 2.2 as T
import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.latte.components 1.0 as LatteComponents
import "private" as Private
T.CheckDelegate {
id: control
implicitWidth: contentItem.implicitWidth + leftPadding + rightPadding
implicitHeight: Math.max(contentItem.implicitHeight,
indicator ? indicator.implicitHeight : 0) + topPadding + bottomPadding
hoverEnabled: true
topPadding: margin
bottomPadding: margin
leftPadding: margin
rightPadding: margin
spacing: units.smallSpacing
property bool blankSpaceForEmptyIcons: false
property string icon
property string iconToolTip
property bool iconOnlyWhenHovered
readonly property bool isHovered: hovered || iconMouseArea.containsMouse
readonly property int margin: 4
contentItem: RowLayout {
Layout.leftMargin: control.mirrored ? (control.indicator ? control.indicator.width : 0) + control.spacing : 0
Layout.rightMargin: !control.mirrored ? (control.indicator ? control.indicator.width : 0) + control.spacing : 0
spacing: units.smallSpacing
enabled: control.enabled
Rectangle {
Layout.minimumWidth: parent.height
Layout.maximumWidth: parent.height
Layout.minimumHeight: parent.height
Layout.maximumHeight: parent.height
visible: icon && (!control.iconOnlyWhenHovered || (control.iconOnlyWhenHovered && control.isHovered))
color: control.iconToolTip && iconMouseArea.containsMouse ? theme.highlightColor : "transparent"
PlasmaCore.IconItem {
id: iconElement
anchors.fill: parent
colorGroup: PlasmaCore.Theme.ButtonColorGroup
source: control.icon
}
LatteComponents.ToolTip{
parent: iconElement
text: iconToolTip
visible: iconMouseArea.containsMouse
delay: 6 * units.longDuration
}
MouseArea {
id: iconMouseArea
anchors.fill: parent
hoverEnabled: true
visible: control.iconToolTip
onClicked: control.ListView.view.iconClicked(index);
}
}
Rectangle {
//blank space when no icon is shown
Layout.minimumHeight: parent.height
Layout.minimumWidth: parent.height
visible: control.blankSpaceForEmptyIcons && (!icon || (control.iconOnlyWhenHovered && !control.isHovered) )
color: "transparent"
}
Label {
Layout.fillWidth: true
text: control.text
font: control.font
color: theme.viewTextColor
elide: Text.ElideRight
visible: control.text
horizontalAlignment: Text.AlignLeft
verticalAlignment: Text.AlignVCenter
}
}
//background: Private.DefaultListItemBackground {}
background: Rectangle {
visible: control.ListView.view ? control.ListView.view.highlight === null : true
enabled: control.enabled
opacity: {
if (control.highlighted || control.pressed) {
return 0.6;
} else if (control.isHovered && !control.pressed) {
return 0.3;
}
return 0;
}
color: theme.highlightColor
}
}