import QtQuick 2.3
import QtQuick.Layouts 1.1
Core {
id: container
/*
* Kontrolka przedstawiająca graficznie dwa statusy w jednym rzędzie
*/
/*
* Property do ustawienia przy tworzeniu
*/
property string prop_title: "" // nagłówek parametru
property int prop_index : -1 // index
property string prop_p_0 : "arrow_red.svg;arrow_blue.svg;44;64;arrow_red.svg;arrow_blue.svg;44;64" // parametry rozdzielone średnikiem, oznaczenie w/g kolejności jak niżej
/*
* Property prywatne definiowane z prop_p_0
*/
property string prv_left_symbol_on: "arrow_red.svg" // symbol po lewej stan 1
property string prv_left_symbol_off: "arrow_blue.svg" // symbol po lewej stan 0
property string prv_left_symbol_width: "44" // szerokość symbolu po lewej
property string prv_left_symbol_height: "64" // wysokość symbolu po lewej
property string prv_right_symbol_on: "arrow_red.svg" // symbol po prawej stan 1
property string prv_right_symbol_off: "arrow_blue.svg" // symbol po prawej stan 1
property string prv_right_symbol_width: "44" // szerokość symbolu po prawej
property string prv_right_symbol_height: "64" // wysokość symbolu po prawej
/*
* Property prywatne pozostałe
*/
property int prv_left_status : 0 // status po lewej
property int prv_right_status : 0 // status po prawej
property int prv_initialized : 0 // kontrolka została zainicjalizowana
property double prop_left_start_width: 44
property double prop_left_start_height: 64
property double prop_right_start_width: 44
property double prop_right_start_height: 64
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"
signal valueChanged(int a_index, int a_value)
// sygnal z rodzica (zmieniono wartosc)
function setValue(a_index, a_left_status, a_right_status, a_na1, a_na2) {
if (container != null) {
if (a_index === prop_index) {
prv_left_status = a_left_status;
prv_right_status = a_right_status;
}
}
}
Component.onCompleted: {
if (!prv_initialized) {
valueChanged.connect(updateValue);
commitValue.connect(setValue);
var tmp_value = prop_p_0.split(";");
prv_left_symbol_on = tmp_value[0];
prv_left_symbol_off = tmp_value[1];
prv_left_symbol_width = tmp_value[2];
prv_left_symbol_height = tmp_value[3];
prv_right_symbol_on = tmp_value[4];
prv_right_symbol_off = tmp_value[5];
prv_right_symbol_width = tmp_value[6];
prv_right_symbol_height = tmp_value[7];
prop_left_start_width = prv_left_symbol_width;
prop_left_start_height = prv_left_symbol_height;
prop_right_start_width = prv_right_symbol_width;
prop_right_start_height = prv_right_symbol_height;
prv_initialized = 1;
}
}
ColumnLayout {
anchors.fill: parent
spacing: 5
Item {
Layout.fillWidth: true
Layout.preferredHeight: 25
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
Text {
text: prop_title
font.pixelSize: parent.height * 0.85
anchors.fill: parent
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
clip: true
wrapMode: Text.WordWrap
elide: Text.ElideRight
}
}
RowLayout{
spacing: 0
Item {
id: itm_left_sep
Layout.preferredHeight: 70
Layout.preferredWidth: 38
}
Item {
id: itm_left_value
Layout.fillHeight: true
Layout.fillWidth: true
Rectangle{
id: rec_left_value
anchors.fill: parent
radius: 10
border.width: 2
border.color: "#b8b8b8"
color: "#e9e9e9"
}
Image {
id: img_left
anchors.centerIn: parent
sourceSize.height: height
sourceSize.width: width
width: (height * prop_left_start_width / prop_left_start_height < parent.width * 0.8) ? height * prop_left_start_width / prop_left_start_height : parent.width * 0.8
height: parent.height * 0.8
//height: (height * prop_left_start_width / prop_left_start_height < parent.width * 0.8) ? parent.height * 0.8 : width * prop_left_start_height / prop_left_start_width
source: (prv_left_status) ? ("../images/" + prv_left_symbol_on) : ("../images/" + prv_left_symbol_off)
verticalAlignment: Text.AlignVCenter
horizontalAlignment: Text.AlignHCenter
}
}
Item {
id: itm_sep_01
Layout.fillHeight: true
Layout.preferredWidth: 20
}
Item {
id: itm_right_value
Layout.fillHeight: true
Layout.fillWidth: true
Rectangle{
id: rec_right_value
anchors.fill: parent
radius: 10
border.width: 2
border.color: "#b8b8b8"
color: "#e9e9e9"
}
Image {
id: img_right
anchors.centerIn: parent
sourceSize.height: height
sourceSize.width: width
width: (height * prop_right_start_width / prop_right_start_height < parent.width * 0.8) ? height * prop_right_start_width / prop_right_start_height : parent.width * 0.8
height: parent.height * 0.8
// height: (height * prop_right_start_width / prop_right_start_height < parent.width * 0.8) ? parent.height * 0.8 : width * prop_right_start_height / prop_right_start_width
source: (prv_right_status) ? ("../images/" + prv_right_symbol_on) : ("../images/" + prv_right_symbol_off)
verticalAlignment: Text.AlignVCenter
horizontalAlignment: Text.AlignHCenter
}
}
Item {
id: itm_right_sep
Layout.preferredHeight: 70
Layout.preferredWidth: 38
}
}
}
}