2015-08-13 15:39:24 +02:00
|
|
|
import QtQuick 2.0
|
|
|
|
|
import QtQuick.Layouts 1.1
|
|
|
|
|
import QtQuick.Controls 1.2
|
|
|
|
|
import QtQuick.Controls.Styles 1.2
|
|
|
|
|
import "../js/colors.js" as GlobalColors
|
2015-08-17 14:52:46 +02:00
|
|
|
import "styles/"
|
2015-08-13 15:39:24 +02:00
|
|
|
|
|
|
|
|
Rectangle {
|
|
|
|
|
id: selector
|
|
|
|
|
z:1000
|
|
|
|
|
visible: false
|
|
|
|
|
anchors.fill: parent
|
|
|
|
|
color: "#88000000" //dark transparent background
|
|
|
|
|
|
2015-08-17 14:52:46 +02:00
|
|
|
property string titleString: ""
|
|
|
|
|
property string prefix: ""
|
|
|
|
|
property int minValue: 0
|
|
|
|
|
property int maxValue: 0
|
|
|
|
|
property string returnValue: ""
|
|
|
|
|
property int initialTextFieldValue: 0
|
|
|
|
|
property int initialSliderValue: 0
|
2015-08-13 15:39:24 +02:00
|
|
|
|
|
|
|
|
function show(title, min, max, value, pref) {
|
|
|
|
|
titleString = title;
|
|
|
|
|
initialTextFieldValue = parseInt(value);
|
2015-08-17 14:52:46 +02:00
|
|
|
initialSliderValue = parseInt(value);
|
2015-08-13 15:39:24 +02:00
|
|
|
minValue = min;
|
|
|
|
|
maxValue = max;
|
2015-08-17 14:52:46 +02:00
|
|
|
prefix = pref;
|
|
|
|
|
returnValue = value; // <-- initial the returnValue with the preselection to prevent a NULL return when pressing Cancel
|
2015-08-13 15:39:24 +02:00
|
|
|
visible = true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function reject() {
|
|
|
|
|
visible = false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function selected(newSelection) {
|
|
|
|
|
returnValue = newSelection;
|
|
|
|
|
visible = false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
MouseArea {
|
|
|
|
|
//set empty MouseArea to prevent the background to be clicked
|
|
|
|
|
anchors.fill: parent
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Rectangle {
|
|
|
|
|
id: selectionBox
|
|
|
|
|
visible: true
|
|
|
|
|
color: "white"
|
|
|
|
|
height: Math.round(parent.height*0.9)
|
|
|
|
|
width: Math.round(parent.width*0.6)
|
|
|
|
|
x: Math.round(parent.width*0.5 - width*0.5)
|
|
|
|
|
y: Math.round(parent.height*0.5 - height*0.5)
|
|
|
|
|
radius: Math.round(parent.height*0.01)
|
|
|
|
|
|
|
|
|
|
ColumnLayout {
|
|
|
|
|
id: content
|
|
|
|
|
anchors.fill: parent
|
|
|
|
|
spacing: Math.round(selectionBox.height*0.06)
|
|
|
|
|
Text {
|
|
|
|
|
id: titleText
|
2015-08-17 14:52:46 +02:00
|
|
|
font.pixelSize: appWindow.fontSizeH1
|
2015-08-13 15:39:24 +02:00
|
|
|
font.bold: true
|
|
|
|
|
text: titleString
|
|
|
|
|
anchors.left: parent.left
|
|
|
|
|
anchors.top: parent.top
|
|
|
|
|
anchors.leftMargin: 30
|
|
|
|
|
anchors.topMargin: 10
|
|
|
|
|
Layout.preferredHeight: contentHeight
|
|
|
|
|
}
|
2015-08-17 14:52:46 +02:00
|
|
|
TextField {
|
2015-08-13 15:39:24 +02:00
|
|
|
id: textField
|
|
|
|
|
anchors.left: parent.left
|
|
|
|
|
anchors.right: parent.right
|
|
|
|
|
anchors.rightMargin: 50
|
|
|
|
|
//make space for the prefix
|
2015-08-17 14:52:46 +02:00
|
|
|
anchors.leftMargin: 50 + Math.round(appWindow.height*0.03)
|
2015-08-13 15:39:24 +02:00
|
|
|
// validator: IntValidator{bottom: minValue; top: maxValue;} TODO: test validator in later QtVersions > 5.5.0
|
|
|
|
|
text: initialTextFieldValue
|
2015-08-17 14:52:46 +02:00
|
|
|
focus: true
|
2015-08-13 15:39:24 +02:00
|
|
|
function correctValue() {
|
2015-08-17 14:52:46 +02:00
|
|
|
if(text != "") {
|
|
|
|
|
if(parseInt(text) > maxValue) text = maxValue
|
|
|
|
|
else if(parseInt(text) < minValue) text = minValue
|
|
|
|
|
else {
|
|
|
|
|
//remove leading "0000"
|
|
|
|
|
var temp = parseInt(text)
|
|
|
|
|
text = temp
|
|
|
|
|
}
|
2015-08-13 15:39:24 +02:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
onFocusChanged: correctValue()
|
|
|
|
|
onEditingFinished: correctValue()
|
|
|
|
|
|
2015-08-17 14:52:46 +02:00
|
|
|
style: MyTextFieldStyle {
|
|
|
|
|
prefix: selector.prefix
|
|
|
|
|
myTextField: textField
|
2015-08-13 15:39:24 +02:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
Slider {
|
|
|
|
|
id: slider
|
|
|
|
|
width: parent.width
|
|
|
|
|
anchors.left: parent.left
|
|
|
|
|
anchors.right: parent.right
|
|
|
|
|
anchors.rightMargin: 50
|
|
|
|
|
anchors.leftMargin: 50
|
|
|
|
|
maximumValue: maxValue
|
|
|
|
|
minimumValue: minValue
|
2015-08-17 14:52:46 +02:00
|
|
|
//don't initialize the slider value to avoid the stepSize kills the preselection Value
|
|
|
|
|
//because of the binding to the TextField value
|
2015-08-13 15:39:24 +02:00
|
|
|
stepSize: minimumValue * 10
|
|
|
|
|
on__HandlePosChanged: {
|
|
|
|
|
if (slider.value > minimumValue && slider.value < maximumValue)
|
|
|
|
|
textField.text = slider.value - minimumValue
|
|
|
|
|
else
|
|
|
|
|
textField.text = slider.value
|
|
|
|
|
}
|
|
|
|
|
style: SliderStyle {
|
|
|
|
|
handle: Rectangle {
|
|
|
|
|
width: Math.round(selectionBox.height*0.12)
|
|
|
|
|
height: width
|
|
|
|
|
radius: width
|
|
|
|
|
antialiasing: true
|
|
|
|
|
color: Qt.lighter(GlobalColors.accentColor, 1.2)
|
|
|
|
|
}
|
|
|
|
|
groove: Item {
|
|
|
|
|
implicitHeight: Math.round(selectionBox.height*0.04)
|
|
|
|
|
implicitWidth: slider.width
|
|
|
|
|
Rectangle {
|
|
|
|
|
height: Math.round(selectionBox.height*0.03)
|
|
|
|
|
width: slider.width
|
|
|
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
|
|
|
color: "#666"
|
|
|
|
|
Rectangle {
|
|
|
|
|
antialiasing: true
|
|
|
|
|
radius: 1
|
|
|
|
|
color: GlobalColors.accentColor
|
|
|
|
|
height: parent.height
|
|
|
|
|
width: parent.width * control.value / control.maximumValue
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
RowLayout { //bottom button line
|
|
|
|
|
width: parent.width
|
|
|
|
|
anchors.right: parent.right
|
|
|
|
|
anchors.bottom: parent.bottom
|
|
|
|
|
anchors.rightMargin: 30
|
|
|
|
|
anchors.bottomMargin: 20
|
|
|
|
|
spacing: okButton.contentWidth
|
|
|
|
|
Layout.preferredHeight: cancelButton.contentHeight
|
|
|
|
|
|
|
|
|
|
Text {
|
|
|
|
|
id: cancelButton
|
2015-08-17 14:52:46 +02:00
|
|
|
font.pixelSize: appWindow.selectorButtonFontSize
|
2015-08-13 15:39:24 +02:00
|
|
|
font.bold: true
|
|
|
|
|
text: qsTr("CANCEL")
|
|
|
|
|
Layout.preferredHeight: contentHeight
|
|
|
|
|
MouseArea {
|
|
|
|
|
id: cancelMouse
|
|
|
|
|
anchors.fill: parent
|
|
|
|
|
onClicked: {
|
|
|
|
|
reject()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
Text {
|
|
|
|
|
id: okButton
|
2015-08-17 14:52:46 +02:00
|
|
|
font.pixelSize: appWindow.selectorButtonFontSize
|
2015-08-13 15:39:24 +02:00
|
|
|
font.bold: true
|
|
|
|
|
color: GlobalColors.accentColor
|
|
|
|
|
text: qsTr("OK")
|
|
|
|
|
Layout.preferredHeight: contentHeight
|
|
|
|
|
MouseArea {
|
|
|
|
|
id: okMouse
|
|
|
|
|
anchors.fill: parent
|
|
|
|
|
onClicked: {
|
|
|
|
|
textField.correctValue();
|
|
|
|
|
selected(textField.text);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|