diff options
| -rw-r--r-- | src/qml/pages/QuantityPage.qml | 41 | ||||
| -rw-r--r-- | src/qml/pages/TemperatureModel.qml | 43 | ||||
| -rw-r--r-- | src/qml/pages/UnitElement.qml | 8 |
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 +} |
