Warning, /maui/mauikit/src/controls.5/IconItem.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 2.14
0021 import QtQuick.Controls 2.14
0022 import QtGraphicalEffects 1.0
0023
0024 import org.mauikit.controls 1.3 as Maui
0025
0026 /*!
0027 \since org.mauikit.controls.labs 1.0
0028 \inqmlmodule org.mauikit.controls.labs
0029 */
0030 Item
0031 {
0032 id: control
0033
0034 // color: "transparent"
0035 implicitHeight: Math.max(iconSizeHint, imageSizeHint)
0036 implicitWidth: Math.max(iconSizeHint, imageSizeHint)
0037
0038 /**
0039 * iconSizeHint : int
0040 */
0041 property bool highlighted: false
0042
0043 /**
0044 * iconSizeHint : int
0045 */
0046 property bool hovered: false
0047
0048 /**
0049 * iconSizeHint : int
0050 */
0051 property int iconSizeHint : Maui.Style.iconSizes.big
0052
0053 /**
0054 * iconSizeHint : int
0055 */
0056 property int imageSizeHint : -1
0057
0058
0059 /**
0060 * imageSource : string
0061 */
0062 property string imageSource
0063
0064 /**
0065 * iconSource : string
0066 */
0067 property string iconSource
0068
0069 /**
0070 * fillMode : Image.fillMode
0071 */
0072 property int fillMode : Image.PreserveAspectFit
0073 /**
0074 * maskRadius : int
0075 */
0076 property int maskRadius: 0
0077
0078 property int imageWidth : -1
0079 property int imageHeight : -1
0080
0081 property bool smooth: false
0082
0083 property alias isMask : icon.isMask
0084 property alias image : img
0085 property alias icon: icon
0086
0087 property int alignment: Qt.AlignHCenter
0088
0089 Maui.Icon
0090 {
0091 id: icon
0092 visible: img.status === Image.Null || img.status !== Image.Ready || img.status === Image.Error
0093 smooth: control.smooth
0094 anchors.centerIn: parent
0095 //anchors.verticalCenter: parent.verticalCenter
0096
0097 // x: switch(control.alignment)
0098 // {
0099 // case Qt.AlignLeft: return 0
0100 // case Qt.AlignHCenter: return control.width/2 - width/2
0101 // case Qt.AlignRight: return control.width - width
0102 // }
0103 source: control.iconSource || "folder-images"
0104 height: Math.floor(Math.min(parent.height, control.iconSizeHint))
0105 width: height
0106 color: isMask ? (control.highlighted ? Maui.Theme.highlightedTextColor : Maui.Theme.textColor) : "transparent"
0107 isMask: (height <= Maui.Style.iconSizes.small) || control.isMask
0108 // selected: control.highlighted
0109 }
0110
0111 Image
0112 {
0113 id: img
0114
0115 width: Math.min(imageSizeHint >=0 ? imageSizeHint : parent.width, parent.width)
0116 height: Math.min(imageSizeHint >= 0 ? imageSizeHint : parent.height, parent.height)
0117
0118 // anchors.fill: parent
0119 anchors.verticalCenter: parent.verticalCenter
0120 x: switch(control.alignment)
0121 {
0122 case Qt.AlignLeft: return 0
0123 case Qt.AlignHCenter: return control.width/2 - width/2
0124 case Qt.AlignRight: return control.width - width
0125 }
0126
0127 sourceSize.width: (control.imageWidth > -1 ? control.imageWidth : width)
0128 sourceSize.height: (control.imageHeight > -1 ? control.imageHeight : height)
0129
0130 horizontalAlignment: Qt.AlignHCenter
0131 verticalAlignment: Qt.AlignVCenter
0132
0133 fillMode: control.fillMode
0134
0135 source: control.imageSource
0136
0137 cache: true
0138 asynchronous: true
0139 smooth: control.smooth
0140 mipmap: false
0141
0142 layer.enabled: control.maskRadius
0143 layer.effect: OpacityMask
0144 {
0145 maskSource: Item
0146 {
0147 width: img.width
0148 height: img.height
0149
0150 Rectangle
0151 {
0152 anchors.centerIn: parent
0153 width: Math.min(parent.width, img.paintedWidth)
0154 height: Math.min(parent.height, img.paintedHeight)
0155 radius: control.maskRadius
0156 }
0157 }
0158 }
0159 }
0160 }