Warning, /maui/mauikit/src/controls.6/ColorsRow.qml is written in an unsupported language. File is not indexed.

0001 import QtQuick
0002 import QtQuick.Controls
0003 
0004 import org.mauikit.controls 1.3 as Maui
0005 
0006 /**
0007  * @inherit QtQuick.Flow
0008  * @brief A row of color buttons
0009  * 
0010  * @image html Misc/colorsrow.png "Demo"
0011  * 
0012  * @code
0013  * Column
0014  * {
0015  *    width: 400
0016  *    anchors.centerIn: parent
0017  *    spacing: Maui.Style.space.big
0018  * 
0019  *    Maui.ColorsRow
0020  *    {
0021  *        id: _colorsRow
0022  *        width: parent.width
0023  * 
0024  *        currentColor: "#CBFF8C"
0025  *        defaultColor : "#CBFF8C"
0026  * 
0027  *        colors: ["#E3E36A", "#CBFF8C", "#C16200", "#881600", "#6A3937", "#706563", "#748386", "#157A6E", "#77B28C", "#36311F"]
0028  * 
0029  *        onColorPicked: (color) =>
0030  *                        {
0031  *                            currentColor = color
0032  *                        }
0033  *    }
0034  * 
0035  *    Rectangle
0036  *    {
0037  *        radius: 10
0038  *        height: 400
0039  *        width: parent.width
0040  *        color: _colorsRow.currentColor
0041  *    }
0042  * }
0043  * @endcode
0044  * 
0045  * <a href="https://invent.kde.org/maui/mauikit/-/blob/qt6-2/examples/ColorsRow.qml">You can find a more complete example at this link.</a>
0046  */
0047 Flow
0048 {
0049     id: control   
0050     
0051     spacing: Maui.Style.defaultSpacing
0052     
0053     /**
0054      * @brief The list of colors to be used.
0055      */
0056     default property var colors : []
0057         
0058         /**
0059          * @brief The default color. This is used as the color when the reset/clear button is clicked. The color to reset back to.
0060          */
0061         property string defaultColor 
0062         
0063         /**
0064          * @brief The current color. This is useful to be set at startup, it is binded to the `defaultColor` as default.
0065          */
0066         property string currentColor : defaultColor
0067         
0068         /**
0069          * @brief The size of the elements in the row.
0070          */
0071         property int size : Maui.Handy.isMobile ? 26 : Maui.Style.iconSizes.medium
0072         
0073         /**
0074          * @brief Emitted when one of the color buttons has been clicked. The argument is the color picked.
0075          * @param color the color picked.
0076          * 
0077          * @code
0078          *  onColorPicked: (color) =>
0079          *                        {
0080          *                            currentColor = color
0081 }
0082 * @endcode
0083 */
0084         signal colorPicked (string color)
0085         
0086         Repeater
0087         {
0088             model: control.colors
0089             
0090             AbstractButton
0091             {
0092                 id: _button
0093                 checked : control.currentColor === modelData
0094                 implicitHeight: control.size + topPadding + bottomPadding
0095                 implicitWidth: implicitHeight + leftPadding + rightPadding
0096                 hoverEnabled: true
0097                 onClicked: control.colorPicked(modelData)
0098                 
0099                 property color color : modelData
0100                 
0101                 contentItem: Item
0102                 {                
0103                     Maui.Icon
0104                     {
0105                         visible: opacity > 0
0106                         color: Maui.ColorUtils.brightnessForColor(_button.color) === Maui.ColorUtils.Light ? "#333" : "#fff"
0107                         anchors.centerIn: parent
0108                         height: Math.round(parent.height * 0.9)
0109                         width: height
0110                         opacity: checked || hovered ? 1 : 0
0111                         isMask: true
0112                         
0113                         source: "qrc:/assets/checkmark.svg"
0114                         
0115                         Behavior on opacity
0116                         {
0117                             NumberAnimation
0118                             {
0119                                 duration: Maui.Style.units.shortDuration
0120                                 easing.type: Easing.InOutQuad
0121                             }
0122                         }
0123                     } 
0124                 }
0125                 
0126                 background: Rectangle
0127                 {
0128                     radius: Maui.Style.radiusV
0129                     color: enabled ? modelData : "transparent"                
0130                 }
0131             }
0132         }
0133         
0134         Loader
0135         {
0136             asynchronous: true
0137             active: control.defaultColor.length
0138             sourceComponent: Item
0139             {
0140                 implicitHeight: control.size
0141                 implicitWidth: implicitHeight
0142                 
0143                 ToolButton
0144                 {
0145                     flat: true
0146                     anchors.centerIn: parent
0147                     icon.name: "edit-clear"
0148                     onClicked:
0149                     {
0150                         control.colorPicked(control.defaultColor)
0151                     }
0152                 }
0153             }
0154         }   
0155 }