• File: C_trigger_button_01.qml
  • Full Path: /home/insbudnet/domains/insbud.net/public_html/download/software/qml/sieniczno_nowak/qml/pl/commons/C_trigger_button_01.qml
  • File size: 4.52 KB
  • MIME-type: text/plain
  • Charset: utf-8
 
Open Back
import QtQuick 2.3
import QtQuick.Layouts 1.1

Core {
    id: container

    /*
     * Kontrolka umożliwiająca zmianę parametru (wartości) ON/OFF w formie przycisku.
     */

    /*
     * Property do ustawienia przy tworzeniu
     */

    property string     prop_title: ""                          // nagłówek parametru
    property int        prop_index : -1                         // index parametru setting
    property string     prop_p_0 : "0;1"                        // parametry rozdzielone średnikiem, oznaczenie w/g kolejności jak niżej

    /*
     * Property prywatne definiowane z prop_p_0
     */

    property int        prv_value_off : 0                       // 1 - wartość off
    property int        prv_value_on : 1                        // 2 - wartośc on

    /*
     * Property prywatne pozostałe
     */

    property int        prv_value: -1                           // aktualna wyświetlana wartość (0 lub 1)
    property int        prv_setting_value: 0                    // aktualne wartość setting
    property int        prv_counter_value: 0                    // aktualne wartość counter
    property int        prv_initialized : 0                     // kontrolka została zainicjalizowana

    Layout.fillWidth: true
    Layout.minimumWidth: 150
    Layout.maximumWidth: 600

    Layout.fillHeight: true
    Layout.minimumHeight: 100
    Layout.maximumHeight: 250

    Layout.alignment: Qt.AlignHCenter

    width: 300
    height: 100

    color: "#00000000"

    property color buttonColor: "#e9e9e9"
    property color borderColor: "#b8b8b8"
    property color onHoverColor: "#989898"

    signal valueChanged(int a_index, int a_value)
    signal buttonClick()

    // sygnal od rodzica (zmieniono wartość)
    function setValue(a_index, a_setting_value, a_counter_value, a_na1, a_na2) {
        if (container != null) {
            if (a_index === prop_index) {
                prv_setting_value = a_setting_value;
                prv_counter_value = a_counter_value;
                myValueUpdated();
            }
        }
    }

    function myValueUpdated() {
        if (prv_setting_value !== 65535) {
            if (prv_setting_value == prv_value_on) {
                prv_value = 1;
            } else {
                prv_value = 0;
            }
        } else {
            if (prv_counter_value == prv_value_on) {
                prv_value = 1;
            } else {
                prv_value = 0;
            }
        }
    }

    Component.onCompleted: {
        if (!prv_initialized) {
            valueChanged.connect(updateValue);
            commitValue.connect(setValue);

            var tmp_value = prop_p_0.split(";");

            prv_value_off = tmp_value[0];
            prv_value_on = tmp_value[1];

            prv_initialized = 1;
        }
    }


    onButtonClick: {
        if (prv_value) {
            valueChanged(prop_index, prv_value_off);
            prv_value = 0;
        } else {
            valueChanged(prop_index, prv_value_on);
            prv_value = 1;
        }
    }

    Item {
        id: itm_button
        x: 10
        y: 10
        width: parent.width - 2 * x
        height: parent.height - 2 * y

        Rectangle{
            id: rec_button
            anchors.fill: parent
            radius: 10
            border.width: 2
            border.color: borderColor

            //color: "#e9e9e9"
            color: prv_value ? Qt.lighter(buttonColor, 1.5) : buttonColor
            Behavior on color { ColorAnimation{ duration: 55 } }

            scale: prv_value ? 0.9 : 1.0
            Behavior on scale { NumberAnimation{ duration: 55 } }

            Text {

                id: txt_title

                x: 20
                y: 20
                width: parent.width - 2 * x
                height: parent.height - 2 * y

                color: "#6e6e6e"
                text: prop_title
                verticalAlignment: Text.AlignVCenter
                horizontalAlignment: Text.AlignHCenter

                font.family: "Mukti Narrow"
                font.strikeout: false
                font.bold: false
                font.italic: false
                fontSizeMode : Text.Fit
                minimumPixelSize: 10
                font.pixelSize: 0.6 * parent.height

            }

        }


        MouseArea {
            id: ma_button
            anchors.fill: parent
            onClicked: buttonClick()
            hoverEnabled: true
            onEntered: rec_button.border.color = onHoverColor
            onExited:  rec_button.border.color = borderColor
        }

    }

}