Warning, /maui/mauikit/src/controls.6/GridItemTemplate.qml is written in an unsupported language. File is not indexed.
0001 /* 0002 * Copyright 2018 Camilo Higuita <milo.h@aol.com> 0003 * 0004 * This program is free software; you can redistribute it and/or modify 0005 * it under the terms of the GNU Library General Public License as 0006 * published by the Free Software Foundation; either version 2, or 0007 * (at your option) any later version. 0008 * 0009 * This program is distributed in the hope that it will be useful, 0010 * but WITHOUT ANY WARRANTY; without even the implied warranty of 0011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 0012 * GNU General Public License for more details 0013 * 0014 * You should have received a copy of the GNU Library General Public 0015 * License along with this program; if not, write to the 0016 * Free Software Foundation, Inc., 0017 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 0018 */ 0019 0020 import QtQuick 0021 import QtQuick.Layouts 0022 import QtQuick.Controls 0023 0024 import org.mauikit.controls 1.3 as Maui 0025 0026 /** 0027 * @inherit QtQuick.Item 0028 * @brief A template with a icon or image and a two bottom labels. 0029 * 0030 * <a href="https://doc.qt.io/qt-6/qml-qtquick-controls-item.html">This controls inherits from QQC2 Item, to checkout its inherited properties refer to the Qt Docs.</a> 0031 * 0032 * The structure of this control is divided into a top header for the image/icon and a two labels for the title and message, at the bottom. 0033 * The top section can be modified and assigned to any custom control. 0034 * @see iconComponent 0035 * 0036 * For extra information checkout the GridBrowserDelegate documentation, since this template elementis used as its base. 0037 */ 0038 Item 0039 { 0040 id: control 0041 focus: true 0042 smooth : true 0043 0044 implicitHeight: _layout.implicitHeight 0045 0046 /** 0047 * @brief The spacing size between the image/icon header and the label title and message. 0048 * @property int GridItemTemplate::spacing 0049 */ 0050 property alias spacing: _layout.spacing 0051 0052 /** 0053 * @brief By default all children will be positioned at the bottom end of the column. 0054 * The positioning of the elements is handled by a ColumnLayout, so use the attached properties accordingly. 0055 * @property list<QtObject> GridItemTemplate::content 0056 */ 0057 default property alias content: _layout.data 0058 0059 /** 0060 * @brief The text use for the title text. 0061 * @property string GridItemTemplate::text1 0062 */ 0063 property alias text1 : _label1.text 0064 0065 /** 0066 * @brief The text use for the message text. 0067 * @property string GridItemTemplate::text2 0068 */ 0069 property alias text2 : _label2.text 0070 0071 /** 0072 * @brief An alias for the QQC2 Label handling the title text. Exposed for fine tuning the label font properties. 0073 * @note See the QQC2 Label documentation for more information. 0074 * @property Label GridItemTemplate::label1 0075 */ 0076 readonly property alias label1 : _label1 0077 0078 /** 0079 * @brief An alias for the QQC2 Label handling the message text. Exposed for fine tuning the label font properties. 0080 * @note See the QQC2 Label documentation for more information. 0081 * @property Label GridItemTemplate::label2 0082 */ 0083 readonly property alias label2 : _label2 0084 0085 /** 0086 * @brief The Item loaded as the icon header section. 0087 * The component used as the icon header is loaded with a QQC2 Loader - this property exposes that element that was loaded. 0088 * By default the loaded item will be a MauiKit IconItem, but if another component is used for `iconComponent`, that will be the resulting Item. 0089 * @see structure 0090 * @property Item GridItemTemplate::iconItem 0091 */ 0092 readonly property alias iconItem : _iconLoader.item 0093 0094 /** 0095 * @brief The container for the icon header section. This is handled by a QQC2 Loader. 0096 * By default the source component will be loaded asynchronous. 0097 * @property Loader GridItemTemplate::iconContainer 0098 */ 0099 readonly property alias iconContainer : _iconLoader 0100 0101 /** 0102 * @brief Whether the icon/image header section should be visible. 0103 * @property bool GridItemTemplate::iconVisible 0104 */ 0105 property alias iconVisible : _iconLoader.visible 0106 0107 /** 0108 * @brief A size hint for the bottom labels. The final size will depend on the available space. 0109 * @property int GridItemTemplate::iconSizeHint 0110 */ 0111 property alias labelSizeHint : _labelsContainer.labelSizeHint 0112 0113 /** 0114 * @brief A size hint for the icon to be used in the header. The final size will depend on the available space. 0115 */ 0116 property int iconSizeHint : Maui.Style.iconSizes.big 0117 0118 /** 0119 * @brief A size hint for the image to be used in the header. The final size will depend on the available space. 0120 * By default this is set to `-1` which means that the image header will take the rest of the available space. 0121 */ 0122 property int imageSizeHint : -1 0123 0124 /** 0125 * @see IconItem::imageSource 0126 */ 0127 property string imageSource 0128 0129 /** 0130 * @see IconItem::iconSource 0131 */ 0132 property string iconSource 0133 0134 /** 0135 * @brief Whether this element is currently on a selected or checked state. This is used to highlight the component accordingly. 0136 * By default this is set to `false`. 0137 */ 0138 property bool isCurrentItem: false 0139 0140 /** 0141 * @brief Whether the two bottom labels, for title and message, should be displayed. 0142 * By default this is set to `true`. 0143 */ 0144 property bool labelsVisible: true 0145 0146 /** 0147 * @see IconItem::fillMode 0148 * By default this is set to `Image.PreserveAspectCrop`. 0149 * @note For more options and information review the QQC2 Image documentation. 0150 */ 0151 property int fillMode : Image.PreserveAspectCrop 0152 0153 /** 0154 * @see IconItem::maskRadius 0155 */ 0156 property int maskRadius: 0 0157 0158 /** 0159 * @see IconItem::imageWidth 0160 */ 0161 property int imageWidth : -1 0162 0163 /** 0164 * @see IconItem::imageHeight 0165 */ 0166 property int imageHeight: -1 0167 0168 /** 0169 * @see IconItem::isMask 0170 * By default this is set to evaluate `true` for icons equal or smaller in size then 16 pixels. 0171 */ 0172 property bool isMask : iconSizeHint <= Maui.Style.iconSizes.small 0173 0174 /** 0175 * @brief Whether the control should be styled as being hovered by a cursor. 0176 * By default his is set to `false`. 0177 */ 0178 property bool hovered: false 0179 0180 /** 0181 * @brief Whether the image should be auto transformed, that means auto rotated. 0182 * @note See the QQC2 Image documentation for further information on this property. 0183 * By default this is set to `false`. 0184 */ 0185 property bool autoTransform: false 0186 0187 /** 0188 * @brief Whether the control should be styled as being highlighted by some external event. 0189 * By default this is set to `false`. 0190 */ 0191 property bool highlighted: false 0192 0193 /** 0194 * @brief The horizontal alignment of the control elements. If the text in the labels should be aligned to the left, right or be centered. This can also affect the icon. 0195 * By default this is set to `Qt.AlignHCenter`. 0196 * Possible values are: 0197 * - Qt.AlignLeft 0198 * - Qt.AlignRight 0199 * - Qt.AlignHCenter 0200 */ 0201 property int alignment: Qt.AlignHCenter 0202 0203 /** 0204 * @brief The header section can be modified by changing its component to a custom one. By default the component used for the `iconComponent` is a MauiKit IconItem element. 0205 * @note When using a custom component for the header section, pay attention that it has an `implicitHeight` and `implicitWidth` set. 0206 */ 0207 property Component iconComponent : _iconComponent 0208 0209 Component 0210 { 0211 id: _iconComponent 0212 0213 Maui.IconItem 0214 { 0215 iconSource: control.iconSource 0216 imageSource: control.imageSource 0217 0218 highlighted: control.isCurrentItem || control.highlighted 0219 hovered: control.hovered 0220 smooth: control.smooth 0221 iconSizeHint: control.iconSizeHint 0222 imageSizeHint: control.imageSizeHint 0223 0224 fillMode: control.fillMode 0225 maskRadius: control.maskRadius 0226 0227 imageWidth: control.imageWidth 0228 imageHeight: control.imageHeight 0229 0230 isMask: control.isMask 0231 image.autoTransform: control.autoTransform 0232 0233 alignment: control.alignment 0234 } 0235 } 0236 0237 ColumnLayout 0238 { 0239 id: _layout 0240 anchors.fill: parent 0241 spacing: Maui.Style.space.medium 0242 0243 Loader 0244 { 0245 id: _iconLoader 0246 0247 Layout.fillWidth: true 0248 Layout.fillHeight: true 0249 0250 asynchronous: true 0251 active: visible 0252 sourceComponent: control.iconComponent 0253 0254 Behavior on scale 0255 { 0256 NumberAnimation 0257 { 0258 duration: Maui.Style.units.longDuration 0259 easing.type: Easing.OutBack 0260 } 0261 } 0262 } 0263 0264 Item 0265 { 0266 id: _labelsContainer 0267 property int labelSizeHint: Math.min(64, _labels.implicitHeight) 0268 visible: control.labelsVisible && ( _label1.text || _label2.text) 0269 0270 Layout.preferredHeight: labelSizeHint 0271 Layout.fillWidth: true 0272 Layout.maximumHeight: control.height* 0.9 0273 Layout.minimumHeight: labelSizeHint 0274 0275 ColumnLayout 0276 { 0277 id: _labels 0278 anchors.fill: parent 0279 spacing: Maui.Style.space.tiny 0280 0281 Label 0282 { 0283 id: _label1 0284 visible: text && text.length 0285 0286 horizontalAlignment: control.alignment 0287 verticalAlignment: Qt.AlignVCenter 0288 0289 Layout.fillWidth: true 0290 Layout.fillHeight: true 0291 Layout.alignment: Qt.AlignCenter 0292 0293 elide: Qt.ElideRight 0294 wrapMode: Text.Wrap 0295 color: control.isCurrentItem || control.highlighted? control.Maui.Theme.highlightedTextColor : control.Maui.Theme.textColor 0296 } 0297 0298 Label 0299 { 0300 id: _label2 0301 visible: text.length 0302 0303 horizontalAlignment: control.alignment 0304 verticalAlignment: Qt.AlignVCenter 0305 0306 Layout.fillWidth: visible 0307 Layout.fillHeight: true 0308 Layout.alignment: Qt.AlignCenter 0309 0310 elide: Qt.ElideRight 0311 wrapMode: Text.NoWrap 0312 color: control.isCurrentItem || control.highlighted? control.Maui.Theme.highlightedTextColor : control.Maui.Theme.textColor 0313 opacity: control.isCurrentItem ? 0.8 : 0.6 0314 } 0315 } 0316 } 0317 } 0318 }