Warning, /maui/mauikit/src/controls.5/Badge.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.15
0021 import QtQuick.Controls 2.15
0022 
0023 import org.mauikit.controls 1.3 as Maui
0024 
0025 /*!
0026 \since org.mauikit.controls 1.0
0027 \inqmlmodule org.mauikit.controls
0028 \brief Badge to show a counter or an icon as a notification hint.
0029 */
0030 Rectangle
0031 {
0032     id: control
0033 
0034     Maui.Theme.inherit: false
0035     Maui.Theme.colorSet: Maui.Theme.Complementary
0036 
0037     /*!
0038       \qmlproperty bool ApplicationWindow::item
0039 
0040       The current item being used, a label or an icon
0041     */
0042     property alias item : loader.item
0043 
0044     /*!
0045       \qmlproperty bool ApplicationWindow::hovered
0046 
0047       If the badge is hovered by a cursor
0048     */
0049     readonly property alias hovered : mouseArea.containsMouse
0050 
0051     /*!
0052       \qmlproperty bool ApplicationWindow::pressed
0053 
0054       If the badge is pressed
0055     */
0056     readonly property alias pressed : mouseArea.pressed
0057 
0058     /*!
0059       \qmlproperty MouseArea ApplicationWindow::mouseArea
0060     */
0061     property alias mouseArea : mouseArea
0062 
0063     /*!
0064       Size of the badge. Can be used as width and height, unless the implicitWidth is wider.
0065     */
0066     property int size: Maui.Style.iconSizes.medium
0067 
0068     /*!
0069       Name of the icon to be used by the badge
0070     */
0071     property string iconName : ""
0072 
0073     /*!
0074       Text to be used by the badge
0075     */
0076     property string text : ""
0077 
0078     property font font
0079 
0080     font.weight: Font.Bold
0081     font.bold: true
0082     font.pointSize: Maui.Style.fontSizes.small
0083 
0084 
0085     /**
0086       * clicked :
0087       */
0088     signal clicked()
0089 
0090     /**
0091       * hovered :
0092       */
0093     signal hovered()
0094 
0095     /**
0096       * released :
0097       */
0098     signal released()
0099 
0100     implicitHeight: size
0101     implicitWidth: loader.sourceComponent == labelComponent ? Math.max(loader.implicitWidth, size) : size
0102 
0103     radius: Math.min(width, height)
0104     color: Maui.Theme.backgroundColor
0105 
0106     Behavior on color
0107     {
0108         Maui.ColorTransition{}
0109     }
0110     
0111     Loader
0112     {
0113         id: loader
0114         anchors.fill: parent
0115         asynchronous: true
0116         sourceComponent: control.text.length && !control.iconName.length ? labelComponent : (!control.text.length && control.iconName.length ? iconComponent : undefined)
0117     }
0118 
0119     Component
0120     {
0121         id: labelComponent
0122         
0123         Label
0124         {
0125             text: control.text
0126             font: control.font
0127             color: Maui.Theme.textColor
0128             verticalAlignment: Qt.AlignVCenter
0129             horizontalAlignment: Qt.AlignHCenter
0130         }
0131     }
0132 
0133     Component
0134     {
0135         id: iconComponent
0136         Maui.Icon
0137         {
0138             anchors.centerIn: parent
0139             source: control.iconName
0140             color: Maui.Theme.textColor
0141             width: control.size
0142             height: width
0143             isMask: true
0144         }
0145     }
0146 
0147     MouseArea
0148     {
0149         id: mouseArea
0150         hoverEnabled: true
0151 
0152         readonly property int targetMargin:  Maui.Handy.isTouch ? Maui.Style.space.big : 0
0153 
0154         height: parent.height + targetMargin
0155         width: parent.width + targetMargin
0156 
0157         anchors.centerIn: parent
0158         onClicked: control.clicked()
0159         onReleased: control.released()
0160     }
0161 }