aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/qml/pages/QuantityPage.qml41
-rw-r--r--src/qml/pages/TemperatureModel.qml43
-rw-r--r--src/qml/pages/UnitElement.qml8
3 files changed, 61 insertions, 31 deletions
diff --git a/src/qml/pages/QuantityPage.qml b/src/qml/pages/QuantityPage.qml
index 0d5c4de..c292330 100644
--- a/src/qml/pages/QuantityPage.qml
+++ b/src/qml/pages/QuantityPage.qml
@@ -22,15 +22,27 @@ Page {
if (fromCombo.value.length === 0 || toCombo.value.length === 0)
return;
- var model = modelLoader.item;
+ var model = modelLoader.item.unitModel;
- var fromUnit = model.get(fromCombo.currentIndex).title;
- var toUnit = model.get(toCombo.currentIndex).title;
+ var fromUnit = model[fromCombo.currentIndex].name;
+ var toUnit = model[toCombo.currentIndex].name;
- var result = model.from(fromUnit, f);
- result = model.to(toUnit, result);
+ var result = modelLoader.item.from(fromUnit, f);
+ result = modelLoader.item.to(toUnit, result);
resultLabel.text = formatText(result, toUnit);
+
+ var min = model[fromCombo.currentIndex].min;
+ var max = model[fromCombo.currentIndex].max;
+
+ if (f < min) {
+ fromField.label = "minimum value %1".arg(min);
+ } else if (f > max) {
+ fromField.label = "maximum value %1".arg(max);
+ } else
+ {
+ fromField.label = "";
+ }
}
function pluralize(s, n) {
@@ -63,8 +75,8 @@ Page {
Loader {
id: modelLoader
onLoaded: {
- fromRepeater.model = modelLoader.item;
- toRepeater.model = modelLoader.item;
+ fromRepeater.model = modelLoader.item.unitModel;
+ toRepeater.model = modelLoader.item.unitModel;
}
}
@@ -85,18 +97,25 @@ Page {
Repeater {
id: fromRepeater
delegate: MenuItem {
- text: makeTitle(title, abbr)
+ text: makeTitle(model.modelData.name, model.modelData.abbr)
}
}
}
- onValueChanged: updateResult()
+ onValueChanged: {
+ fromFieldValidator.bottom = modelLoader.item.unitModel[fromCombo.currentIndex].min;
+ fromFieldValidator.top = modelLoader.item.unitModel[fromCombo.currentIndex].max;
+ updateResult()
+ }
}
TextField {
id: fromField
width: parent.width
- placeholderText: "enter " + pluralize(fromRepeater.model.get(fromCombo.currentIndex).title, 0)
+ placeholderText: "enter " + pluralize(fromRepeater.model[fromCombo.currentIndex].name, 0)
inputMethodHints: Qt.ImhFormattedNumbersOnly
+ validator: DoubleValidator {
+ id: fromFieldValidator
+ }
EnterKey.onClicked: {
parent.focus = true;
updateResult();
@@ -114,7 +133,7 @@ Page {
Repeater {
id: toRepeater
delegate: MenuItem {
- text: makeTitle(title, abbr)
+ text: makeTitle(model.modelData.name, model.modelData.abbr)
}
}
}
diff --git a/src/qml/pages/TemperatureModel.qml b/src/qml/pages/TemperatureModel.qml
index 74fc7d2..9c4294b 100644
--- a/src/qml/pages/TemperatureModel.qml
+++ b/src/qml/pages/TemperatureModel.qml
@@ -1,6 +1,6 @@
import QtQuick 2.0
-ListModel {
+QtObject {
function from(title, value) {
var functions = {
"kelvin": function () { return value; },
@@ -21,23 +21,26 @@ ListModel {
return functions[title]();
}
- ListElement {
- title: "kelvin"
- abbr: "K"
- }
-
- ListElement {
- title: "celcius"
- abbr: "°C"
- }
-
- ListElement {
- title: "fahrenheit"
- abbr: "F"
- }
-
- ListElement {
- title: "rankine"
- abbr: "°R"
- }
+ property list<UnitElement> unitModel: [
+ UnitElement {
+ name: "kelvin"
+ abbr: "K"
+ min: 0
+ },
+ UnitElement {
+ name: "celcius"
+ abbr: "°C"
+ min: -273.15
+ },
+ UnitElement {
+ name: "fahrenheit"
+ abbr: "F"
+ min: -459.67
+ },
+ UnitElement {
+ name: "rankine"
+ abbr: "°R"
+ min: 0
+ }
+ ]
}
diff --git a/src/qml/pages/UnitElement.qml b/src/qml/pages/UnitElement.qml
new file mode 100644
index 0000000..b21a2b8
--- /dev/null
+++ b/src/qml/pages/UnitElement.qml
@@ -0,0 +1,8 @@
+import QtQuick 2.0
+
+QtObject {
+ property string name
+ property string abbr
+ property double min: Number.NEGATIVE_INFINITY
+ property double max: Number.POSITIVE_INFINITY
+}