Explorar el Código

made qml part a little more robust

--global hace 9 años
padre
commit
f9c3e1f703

+ 47 - 32
package/contents/ui/PwmFan.qml

@@ -44,14 +44,6 @@ Rectangle {
     radius: 10
     clip: false
 
-    function update() {
-        if (fan) {
-            hasTempCheckBox.checked = Qt.binding(function() { return fan.hasTemp; })
-            fanOffCheckBox.checked = Qt.binding(function() { return (fan.minPwm == 0); })
-        }
-    }
-
-    onFanChanged: update();
     onMinTempChanged: if (fan) meshCanvas.requestPaint()
     onMaxTempChanged: if (fan) meshCanvas.requestPaint()
     onUnitChanged: if (fan) meshCanvas.requestRepaint()
@@ -76,8 +68,7 @@ Rectangle {
             topMargin: margin
         }
         visible: root.height >= height + margin*2
-        text: fan.name
-        onTextChanged: fan.name = text
+        text: !!fan ? fan.name : ""
         color: palette.text
         horizontalAlignment: TextEdit.AlignLeft
         wrapMode: TextEdit.Wrap
@@ -85,6 +76,12 @@ Rectangle {
         font.pointSize: 14
         selectByMouse: true
 
+        onTextChanged: {
+            if (!!fan) {
+                fan.name = text;
+            }
+        }
+
         MouseArea {
             anchors.fill: parent
             cursorShape: Qt.IBeamCursor
@@ -96,7 +93,7 @@ Rectangle {
         id: graph
 
         property int fontSize: MoreMath.bound(8, height / 20 + 1, 16)
-        property QtObject pal: fan.hasTemp ? palette : disabledPalette
+        property QtObject pal: !!fan ? fan.hasTemp ? palette : disabledPalette : disabledPalette
         property string suffix: (root.unit == 0) ? "°C" : (root.unit == 1) ? "K" : "°F"
         property int verticalScalaCount: 6
         property var horIntervals: MoreMath.intervals(root.convertedMinTemp, root.convertedMaxTemp, 10)
@@ -279,22 +276,22 @@ Rectangle {
             StatusPoint {
                 id: currentPwm
                 size: graph.fontSize
-                visible: background.contains(center) && fan.hasTemp
+                visible: background.contains(center) && !!fan && fan.hasTemp
                 fan: root.fan
                 unit: root.unit
             }
             PwmPoint {
                 id: stopPoint
-                color: fan.hasTemp ? "blue" : Qt.tint(graph.pal.light, Qt.rgba(0, 0, 1, 0.5))
+                color: !!fan ? fan.hasTemp ? "blue" : Qt.tint(graph.pal.light, Qt.rgba(0, 0, 1, 0.5)) : "transparent"
                 size: graph.fontSize
                 unit: root.unit
-                enabled: fan.hasTemp
+                enabled: !!fan ? fan.hasTemp : false
                 drag.maximumX: Math.min(background.scaleX(background.scaleTemp(maxPoint.x)-1), maxPoint.x-1)
                 drag.minimumY: Math.max(background.scaleY(background.scalePwm(maxPoint.y)-1), maxPoint.y+1)
-                x: fan.hasTemp ? background.scaleX(MoreMath.bound(minTemp, fan.minTemp, maxTemp)) - width/2 : -width/2
-                y: fan.hasTemp ? background.scaleY(fan.minStop) - height/2 : -height/2
+                x: !!fan && fan.hasTemp ? background.scaleX(MoreMath.bound(minTemp, fan.minTemp, maxTemp)) - width/2 : -width/2
+                y: !!fan && fan.hasTemp ? background.scaleY(fan.minStop) - height/2 : -height/2
                 drag.onActiveChanged: {
-                    if (!drag.active) {
+                    if (!drag.active && !!fan) {
                         fan.minStop = Math.round(background.scalePwm(centerY));
                         fan.minTemp = Math.round(background.scaleTemp(centerX));
                         if (!fanOffCheckBox.checked) fan.minPwm = fan.minStop;
@@ -309,14 +306,14 @@ Rectangle {
             }
             PwmPoint {
                 id: maxPoint
-                color: fan.hasTemp ? "red" : Qt.tint(graph.pal.light, Qt.rgba(1, 0, 0, 0.5))
+                color: !!fan ? fan.hasTemp ? "red" : Qt.tint(graph.pal.light, Qt.rgba(1, 0, 0, 0.5)) : "transparent"
                 size: graph.fontSize
                 unit: root.unit
-                enabled: fan.hasTemp
+                enabled: !!fan ? fan.hasTemp : false
                 drag.minimumX: Math.max(background.scaleX(background.scaleTemp(stopPoint.x)+1), stopPoint.x+1)
                 drag.maximumY: Math.min(background.scaleY(background.scalePwm(stopPoint.y)+1), stopPoint.y-1)
-                x: fan.hasTemp ? background.scaleX(MoreMath.bound(minTemp, fan.maxTemp, maxTemp)) - width/2 : background.width - width/2
-                y: fan.hasTemp ? background.scaleY(fan.maxPwm) - height/2 : -height/2
+                x: !!fan && fan.hasTemp ? background.scaleX(MoreMath.bound(minTemp, fan.maxTemp, maxTemp)) - width/2 : background.width - width/2
+                y: !!fan && fan.hasTemp ? background.scaleY(fan.maxPwm) - height/2 : -height/2
                 drag.onActiveChanged: {
                     if (!drag.active) {
                         fan.maxPwm = Math.round(background.scalePwm(centerY));
@@ -352,14 +349,21 @@ Rectangle {
             CheckBox {
                 id: hasTempCheckBox
                 text: i18n("Controlled by:")
-                checked: fan.hasTemp
+                checked: !!fan ? fan.hasTemp : false
                 Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter
                 onCheckedChanged: {
-                    fan.hasTemp = checked;
-                    if (checked) {
-                        fan.temp = tempModel.temps[tempBox.currentIndex];
+                    if (!!fan) {
+                        fan.hasTemp = checked;
+                        if (checked && !!tempModel.temps[tempBox.currentIndex]) {
+                            fan.temp = tempModel.temps[tempBox.currentIndex];
+                        }
+                        bgCanvas.requestPaint();
                     }
-                    bgCanvas.requestPaint();
+                }
+
+                Connections {
+                    target: fan
+                    onHasTempChanged: hasTempCheckBox.checked = fan.hasTemp;
                 }
             }
             RowLayout {
@@ -381,10 +385,17 @@ Rectangle {
             id: fanOffCheckBox
             text: i18n("Turn Fan off if temp < MINTEMP")
             enabled: hasTempCheckBox.checked
-            checked: fan.minPwm == 0
+            checked: !!fan ? fan.minPwm == 0 : false
             onCheckedChanged: {
-                fan.minPwm = checked ? 0 : fan.minStop;
-                bgCanvas.requestPaint();
+                if (!!fan) {
+                    fan.minPwm = checked ? 0 : fan.minStop;
+                    bgCanvas.markDirty(Qt.rect(0, 0, stopPoint.x, stopPoint.y));
+                }
+            }
+
+            Connections {
+                target: fan
+                onMinPwmChanged: fanOffCheckBox.checked = fan.minPwm == 0;
             }
         }
 
@@ -402,9 +413,13 @@ Rectangle {
                 minimumValue: 1
                 maximumValue: 100
                 decimals: 1
-                value: Math.round(fan.minStart / 2.55)
+                value: !!fan ? Math.round(fan.minStart / 2.55) : 0
                 suffix: i18n("%")
-                onValueChanged: fan.minStart = Math.round(value * 2.55)
+                onValueChanged: {
+                    if (!!fan) {
+                        fan.minStart = Math.round(value * 2.55)
+                    }
+                }
             }
         }
 
@@ -418,7 +433,7 @@ Rectangle {
                 property bool reactivateAfterTesting
 
                 id: testButton
-                text: fan.testing ? i18n("Abort test") : i18n("Test start and stop values")
+                text: !!fan ? fan.testing ? i18n("Abort test") : i18n("Test start and stop values") : ""
                 iconName: "dialog-password"
                 anchors.right: parent.right
                 onClicked: {

+ 5 - 5
package/contents/ui/PwmFansTab.qml

@@ -63,12 +63,12 @@ ColumnLayout {
         active: !!loader && !!systemdCom && !!pwmFans[fanComboBox.currentIndex]
 
         sourceComponent: PwmFan {
-            unit: baseObject.unit
-            fan: pwmFans[fanComboBox.currentIndex]
+            unit: !!baseObject ? baseObject.unit : 0
+            fan: !!pwmFans ? pwmFans[fanComboBox.currentIndex] : null
             tempModel: root.tempModel
             systemdCom: root.systemdCom
-            minTemp: baseObject.minTemp
-            maxTemp: baseObject.maxTemp
+            minTemp: !!baseObject ? baseObject.minTemp : 30
+            maxTemp: !!baseObject ? baseObject.maxTemp : 100
         }
     }
 
@@ -76,7 +76,7 @@ ColumnLayout {
         id: noFansInfo
         anchors.centerIn: parent
         spacing: 20
-        visible: pwmFanModel.count == 0
+        visible: !!pwmFanModel ? pwmFanModel.count == 0 : false
 
         Label {
             Layout.alignment: Qt.AlignCenter

+ 32 - 15
package/contents/ui/SettingsTab.qml

@@ -27,9 +27,10 @@ import "../scripts/units.js" as Units
 
 Item {
     property QtObject gui
-    property QtObject systemdCom: gui && gui.hasSystemdCommunicator() ? gui.systemdCom : null
-    property QtObject loader : gui ? gui.loader : null
+    property QtObject systemdCom: !!gui && gui.hasSystemdCommunicator() ? gui.systemdCom : null
+    property QtObject loader : !!gui ? gui.loader : null
     property int padding: 10
+    property int unit: !!gui ? gui.unit : 0
     property real textWidth: 0
     property var locale: Qt.locale()
 
@@ -56,7 +57,7 @@ Item {
             SpinBox {
                 Layout.minimumWidth: implicitWidth
                 Layout.fillWidth: true
-                value: gui.loader ? gui.loader.interval : 1
+                value: !!loader ? loader.interval : 1
                 suffix: " " + (value > 1 ? i18n("seconds") : i18n("second"))
                 minimumValue: 1.0
                 onValueChanged: gui.loader.interval = value
@@ -78,10 +79,14 @@ Item {
                 Layout.fillWidth: true
                 decimals: 2
                 maximumValue: maxTempBox.value
-                minimumValue: Units.fromKelvin(0, gui.unit)
-                value: Units.fromCelsius(gui.minTemp, gui.unit)
-                suffix: gui.unit == 0 ? i18n("°C") : gui.unit == 1 ? i18n("K") : i18n("°F")
-                onValueChanged: gui.minTemp = value
+                minimumValue: Units.fromKelvin(0, unit)
+                value: !!gui ? Units.fromCelsius(gui.minTemp, unit) : 0
+                suffix: unit == 0 ? i18n("°C") : unit == 1 ? i18n("K") : i18n("°F")
+                onValueChanged: {
+                    if (!!gui) {
+                        gui.minTemp = value;
+                    }
+                }
             }
         }
         RowLayout {
@@ -101,9 +106,13 @@ Item {
                 decimals: 2
                 maximumValue: Number.POSITIVE_INFINITY
                 minimumValue: minTempBox.value
-                value: Units.fromCelsius(gui.maxTemp, gui.unit)
-                suffix: gui.unit == 0 ? i18n("°C") : gui.unit == 1 ? i18n("K") : i18n("°F")
-                onValueChanged: gui.maxTemp = value
+                value: !!gui ? Units.fromCelsius(gui.maxTemp, unit) : 0
+                suffix: unit == 0 ? i18n("°C") : unit == 1 ? i18n("K") : i18n("°F")
+                onValueChanged: {
+                    if (!!gui) {
+                        gui.maxTemp = value;
+                    }
+                }
             }
         }
         Loader {
@@ -121,9 +130,13 @@ Item {
                 OptionInput {
                     Layout.minimumWidth: implicitWidth
                     Layout.fillWidth: true
-                    color: systemdCom.serviceExists ? "green" : "red"
-                    value: gui.serviceName
-                    onTextChanged: gui.serviceName = text
+                    color: !!systemdCom && systemdCom.serviceExists ? "green" : "red"
+                    value: !!gui ? gui.serviceName : ""
+                    onTextChanged: {
+                        if (!!gui) {
+                            gui.serviceName = text;
+                        }
+                    }
                 }
             }
         }
@@ -143,8 +156,12 @@ Item {
                     id: autostartBox
                     Layout.minimumWidth: implicitWidth
                     Layout.fillWidth: true
-                    checked: systemdCom.serviceEnabled
-                    onCheckedChanged: systemdCom.serviceEnabled = checked
+                    checked: !!systemdCom ? systemdCom.serviceEnabled : false
+                    onCheckedChanged: {
+                        if (!!systemdCom) {
+                            systemdCom.serviceEnabled = checked;
+                        }
+                    }
                 }
             }
         }

+ 4 - 4
package/contents/ui/StatusPoint.qml

@@ -29,8 +29,8 @@ Rectangle {
 
     property QtObject fan
     property Item background: parent
-    property real unscaledTemp: fan.temp ? fan.temp.value : minTemp
-    property real unscaledPwm: fan.pwm
+    property real unscaledTemp: !!fan && fan.hasTemp ? fan.temp.value : 0
+    property real unscaledPwm: !!fan ? fan.pwm : 0
     property var locale: Qt.locale()
     readonly property real centerX: x + width / 2
     readonly property real centerY: y + height / 2
@@ -82,7 +82,7 @@ Rectangle {
 
                 id: temp
                 font.pixelSize: root.height * 1.5
-                text: (fan.hasTemp ? Math.round(Units.fromCelsius(root.unscaledTemp, unit)) : "0") + suffix
+                text: (!!fan && fan.hasTemp ? Math.round(Units.fromCelsius(root.unscaledTemp, unit)) : "0") + suffix
 
             }
             Label {
@@ -93,7 +93,7 @@ Rectangle {
             Label {
                 id: rpm
                 font.pixelSize: root.height * 1.5
-                text: fan.rpm + i18n("rpm")
+                text: (!!fan ? fan.rpm : "0") + i18n("rpm")
             }
         }
     }