/****************************************************************************
**
** Copyright (C) 2017 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Qt Graphical Effects module.
**
** $QT_BEGIN_LICENSE:GPL-EXCEPT$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
** $QT_END_LICENSE$
**
****************************************************************************/

import QtQuick 2.12

Item {
    id: rgbaSlider
    property color color: Qt.rgba(rValue, gValue, bValue, aValue)

    property alias rValue: rSlider.value
    property alias gValue: gSlider.value
    property alias bValue: bSlider.value
    property alias aValue: aSlider.value
    property bool pressed: rSlider.pressed || gSlider.pressed || bSlider.pressed || aSlider.pressed

    width: parent.width
    height: childrenRect.height

    function dec2hex(i)
    {
      if (i <= 15)
         return  "0" + i.toString(16);
      else
         return i.toString(16);
    }

    Rectangle {
        id: colorRect
        width: 50; height: 50
        anchors.left: parent.left
        anchors.leftMargin: 20
        anchors.verticalCenter: sliders.verticalCenter
        color: Qt.rgba(rgbaSlider.rValue, rgbaSlider.gValue, rgbaSlider.bValue, rgbaSlider.aValue)
    }
    Column {
        id: sliders
        anchors {left: parent.left; right: parent.right}
        Slider {
            id: aSlider
            minimum: 0
            maximum: 1
            value: 1.0
            caption: 'A'
        }
        Slider {
            id: rSlider
            minimum: 0
            maximum: 1
            value: 1.0
            caption: 'R'
        }
        Slider {
            id: gSlider
            minimum: 0
            maximum: 1
            value: 1.0
            caption: 'G'
        }
        Slider {
            id: bSlider
            minimum: 0
            maximum: 1
            value: 1.0
            caption: 'B'
        }

    }
//    Text {
//        anchors.top: colorRect.bottom
//        anchors.topMargin: 5
//        anchors.horizontalCenter: colorRect.horizontalCenter
//        horizontalAlignment: Text.AlignHCenter
//        text: "#" + dec2hex(Math.round(rgbaSlider.aValue * 255)) + dec2hex(Math.round(rgbaSlider.rValue * 255)) + dec2hex(Math.round(rgbaSlider.gValue * 255)) + dec2hex(Math.round(rgbaSlider.bValue * 255))
//        font.capitalization: Font.AllUppercase
//        color: "#999999"
//        font.pixelSize: 11
//    }
}
