Warning, /libraries/kirigami-addons/src/delegates/IndicatorItemDelegate.qml is written in an unsupported language. File is not indexed.

0001 // SPDX-FileCopyrightText: 2023 Carl Schwan <carl@carlschwan.eu>
0002 // SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0003 
0004 import QtQuick 2.15
0005 import QtQuick.Layouts 1.15
0006 import org.kde.kirigami 2.20 as Kirigami
0007 import QtQuick.Controls 2.15 as QQC2
0008 
0009 /**
0010  * @warning This component is expected to be used as a ListView.delegate.
0011  * If this is not the case, make sure to set index and listView
0012  */
0013 QQC2.ItemDelegate {
0014     id: root
0015 
0016     required property int index
0017     required property bool unread
0018 
0019     readonly property bool showSeparator: root.index !== ListView.view.count
0020 
0021     width: ListView.view ? ListView.view.width : implicitWidth
0022     highlighted: ListView.isCurrentItem
0023 
0024     padding: Kirigami.Units.largeSpacing
0025 
0026     horizontalPadding: padding
0027     leftPadding: horizontalPadding
0028     rightPadding: horizontalPadding
0029 
0030     verticalPadding: padding
0031     topPadding: verticalPadding
0032     bottomPadding: verticalPadding
0033 
0034     hoverEnabled: true
0035 
0036     icon {
0037         width: if (contentItem instanceof SubtitleContentItem) {
0038             Kirigami.Units.iconSizes.large
0039         } else {
0040             Kirigami.Units.iconSizes.medium
0041         }
0042 
0043         height: if (contentItem instanceof SubtitleContentItem) {
0044             Kirigami.Units.iconSizes.large
0045         } else {
0046             Kirigami.Units.iconSizes.medium
0047         }
0048     }
0049 
0050     Accessible.description: if (contentItem instanceof SubtitleContentItem) {
0051         contentItem.subtitle
0052     } else {
0053         ""
0054     }
0055 
0056     background: Rectangle {
0057         color: if (root.highlighted || root.checked || (root.down && !root.checked) || root.visualFocus) {
0058             const highlight = Kirigami.ColorUtils.tintWithAlpha(Kirigami.Theme.backgroundColor, Kirigami.Theme.highlightColor, 0.3);
0059             if (root.hovered) {
0060                 Kirigami.ColorUtils.tintWithAlpha(highlight, Kirigami.Theme.textColor, 0.10)
0061             } else {
0062                 highlight
0063             }
0064         } else if (root.hovered) {
0065             Kirigami.ColorUtils.tintWithAlpha(Kirigami.Theme.backgroundColor, Kirigami.Theme.textColor, 0.10)
0066         } else {
0067             Kirigami.Theme.backgroundColor
0068         }
0069 
0070         // indicator rectangle
0071         Rectangle {
0072             anchors {
0073                 left: parent.left
0074                 top: parent.top
0075                 topMargin: 1
0076                 bottom: parent.bottom
0077                 bottomMargin: 1
0078             }
0079 
0080             width: 4
0081             visible: root.unread
0082             color: Kirigami.Theme.highlightColor
0083         }
0084 
0085         Kirigami.Separator {
0086             anchors {
0087                 bottom: parent.bottom
0088                 left: parent.left
0089                 right: parent.right
0090                 leftMargin: root.leftPadding
0091                 rightMargin: root.rightPadding
0092             }
0093             visible: root.showSeparator && !root.hovered && (root.index === 0 || !root.ListView.view.itemAtIndex(root.index - 1))
0094             opacity: 0.5
0095         }
0096     }
0097 
0098     contentItem: DefaultContentItem {
0099         itemDelegate: root
0100     }
0101 }