Warning, /frameworks/kirigami/src/delegates/IconTitleSubtitle.qml is written in an unsupported language. File is not indexed.
0001 /*
0002 * SPDX-FileCopyrightText: 2010 Marco Martin <notmart@gmail.com>
0003 * SPDX-FileCopyrightText: 2022 ivan tkachenko <me@ratijas.tk>
0004 * SPDX-FileCopyrightText: 2023 Arjen Hiemstra <ahiemstra@heimr.nl>
0005 *
0006 * SPDX-License-Identifier: LGPL-2.0-or-later
0007 */
0008
0009 import QtQuick
0010 import org.kde.kirigami as Kirigami
0011 import org.kde.kirigami.delegates as KD
0012 import org.kde.kirigami.templates.private as KTP
0013
0014 /**
0015 * A simple item containing an icon, title and subtitle.
0016 *
0017 * This is an extension of TitleSubtitle that adds an icon to the side.
0018 * It is intended as a contentItem for ItemDelegate and related controls.
0019 *
0020 * When using it as a contentItem, make sure to bind the appropriate properties
0021 * to those of the Control. Prefer binding to the Control's properties over
0022 * setting the properties directly, as the Control's properties may affect other
0023 * things like setting accessible names.
0024 *
0025 * This (and TitleSubtitle) can be combined with other controls in a layout to
0026 * create complex content items for controls.
0027 *
0028 * Example usage creating a CheckDelegate with an extra button on the side:
0029 *
0030 * ```qml
0031 * CheckDelegate {
0032 * id: delegate
0033 *
0034 * text: "Example"
0035 * icon.name: "document-new"
0036 *
0037 * contentItem: RowLayout {
0038 * spacing: Kirigami.Theme.smallSpacing
0039 *
0040 * Kirigami.IconTitleSubtitle {
0041 * Layout.fillWidth: true
0042 *
0043 * icon: icon.fromControlsIcon(delegate.icon)
0044 * title: delegate.text
0045 * selected: delegate.highlighted || delegate.down
0046 * font: delegate.font
0047 * }
0048 *
0049 * Button {
0050 * icon.name: "document-open"
0051 * text: "Extra Action"
0052 * }
0053 * }
0054 * }
0055 * ```
0056 *
0057 * \sa Kirigami::Delegates::TitleSubtitle
0058 * \sa Kirigami::Delegates::ItemDelegate
0059 */
0060 Item {
0061 id: root
0062
0063 /**
0064 * @copydoc Kirigami::TitleSubtitle::title
0065 */
0066 required property string title
0067 /**
0068 * @copydoc Kirigami::TitleSubtitle::subtitle
0069 */
0070 property alias subtitle: titleSubtitle.subtitle
0071 /**
0072 * @copydoc Kirigami::TitleSubtitle::color
0073 */
0074 property alias color: titleSubtitle.color
0075 /**
0076 * @copydoc Kirigami::TitleSubtitle::subtitleColor
0077 */
0078 property alias subtitleColor: titleSubtitle.subtitleColor
0079 /**
0080 * @copydoc Kirigami::TitleSubtitle::font
0081 */
0082 property alias font: titleSubtitle.font
0083 /**
0084 * @copydoc Kirigami::TitleSubtitle::subtitleFont
0085 */
0086 property alias subtitleFont: titleSubtitle.subtitleFont
0087 /**
0088 * @copydoc Kirigami::TitleSubtitle::reserveSpaceForSubtitle
0089 */
0090 property alias reserveSpaceForSubtitle: titleSubtitle.reserveSpaceForSubtitle
0091 /**
0092 * @copydoc Kirigami::TitleSubtitle::selected
0093 */
0094 property alias selected: titleSubtitle.selected
0095 /**
0096 * @copydoc Kirigami::TitleSubtitle::elide
0097 */
0098 property alias elide: titleSubtitle.elide
0099 /**
0100 * @copydoc Kirigami::TitleSubtitle::wrapMode
0101 */
0102 property alias wrapMode: titleSubtitle.wrapMode
0103 /**
0104 * @copydoc Kirigami::TitleSubtitle::truncated
0105 */
0106 property alias truncated: titleSubtitle.truncated
0107
0108 /**
0109 * Grouped property for icon properties.
0110 *
0111 * \note By default, IconTitleSubtitle will reserve the space for the icon,
0112 * even if it is not set. To remove that space, set `icon.width` to 0.
0113 */
0114 property KTP.IconPropertiesGroup icon: KTP.IconPropertiesGroup {
0115 width: titleSubtitle.subtitleVisible ? Kirigami.Units.iconSizes.medium : Kirigami.Units.iconSizes.smallMedium
0116 height: width
0117 }
0118
0119 implicitWidth: iconItem.implicitWidth + titleSubtitle.anchors.leftMargin + titleSubtitle.implicitWidth
0120 implicitHeight: Math.max(iconItem.implicitHeight, titleSubtitle.implicitHeight)
0121
0122 Kirigami.Icon {
0123 id: iconItem
0124
0125 anchors {
0126 left: parent.left
0127 top: parent.top
0128 bottom: parent.bottom
0129 }
0130
0131 source: root.icon.name.length > 0 ? root.icon.name : root.icon.source
0132 implicitWidth: root.icon.width
0133 implicitHeight: root.icon.height
0134 selected: root.selected
0135 color: root.icon.color
0136 }
0137
0138 KD.TitleSubtitle {
0139 id: titleSubtitle
0140
0141 anchors {
0142 left: iconItem.right
0143 leftMargin: root.icon.width > 0 ? Kirigami.Units.mediumSpacing : 0
0144 top: parent.top
0145 bottom: parent.bottom
0146 right: parent.right
0147 }
0148
0149 title: root.title
0150 }
0151 }