Sfoglia il codice sorgente

update override interface

* Ports https://github.com/nightscout/Trio/pull/120 to TCD
  * Renames `smbIsAlwaysOff` to `smbIsScheduledOff`
  * Fixes and refactors unChanged()
  * Removes checking smbIsOff from defaultProfile
  * Adds checking for smbIsScheduledOff to allSettingsDefault
  * Removes checking isf and cr from allSettingsDefault
  * Corrects `Last Hour SMBs are Off` to `First Hour SMBs Are Resumed`
* Updates `First Hour SMBs Are Off` to `First Hour SMBs Are Disabled`
* Toggle off `Schedule When SMBs Are Disabled` when `Disable SMBs` is toggled on, and vice versa
* Updates capiltalization to title case
* Hides `SMB Minutes` and `UAM SMB Minutes` when `Disable SMBs` is on
* Corrects default end of `Schedule When SMBs Are Disabled` to `0`
Mike Plante 1 anno fa
parent
commit
705832d7f5

+ 4 - 4
FreeAPS/Sources/APS/Storage/OverrideStorage.swift

@@ -144,12 +144,12 @@ final class BaseOverrideStorage: OverrideStorage, Injectable {
                     newOverride.isfAndCr = true
                     newOverride.isfAndCr = true
                 }
                 }
 
 
-                if override.smbIsAlwaysOff {
-                    newOverride.smbIsAlwaysOff = true
+                if override.smbIsScheduledOff {
+                    newOverride.smbIsScheduledOff = true
                     newOverride.start = override.start as NSDecimalNumber
                     newOverride.start = override.start as NSDecimalNumber
                     newOverride.end = override.end as NSDecimalNumber
                     newOverride.end = override.end as NSDecimalNumber
                 } else {
                 } else {
-                    newOverride.smbIsAlwaysOff = false
+                    newOverride.smbIsScheduledOff = false
                 }
                 }
 
 
                 newOverride.smbMinutes = override.smbMinutes as NSDecimalNumber
                 newOverride.smbMinutes = override.smbMinutes as NSDecimalNumber
@@ -184,7 +184,7 @@ final class BaseOverrideStorage: OverrideStorage, Injectable {
         newOverride.isfAndCr = override.isfAndCr
         newOverride.isfAndCr = override.isfAndCr
         newOverride.isf = override.isf
         newOverride.isf = override.isf
         newOverride.cr = override.cr
         newOverride.cr = override.cr
-        newOverride.smbIsAlwaysOff = override.smbIsAlwaysOff
+        newOverride.smbIsScheduledOff = override.smbIsScheduledOff
         newOverride.start = override.start
         newOverride.start = override.start
         newOverride.end = override.end
         newOverride.end = override.end
         newOverride.smbMinutes = override.smbMinutes
         newOverride.smbMinutes = override.smbMinutes

+ 1 - 1
FreeAPS/Sources/Models/Override.swift

@@ -16,7 +16,7 @@ struct Override {
     let isfAndCr: Bool
     let isfAndCr: Bool
     let isf: Bool
     let isf: Bool
     let cr: Bool
     let cr: Bool
-    let smbIsAlwaysOff: Bool
+    let smbIsScheduledOff: Bool
     let start: Decimal
     let start: Decimal
     let end: Decimal
     let end: Decimal
     let smbMinutes: Decimal
     let smbMinutes: Decimal

+ 6 - 6
FreeAPS/Sources/Modules/OverrideConfig/OverrideStateModel.swift

@@ -23,9 +23,9 @@ extension OverrideConfig {
         @Published var isfAndCr: Bool = true
         @Published var isfAndCr: Bool = true
         @Published var isf: Bool = true
         @Published var isf: Bool = true
         @Published var cr: Bool = true
         @Published var cr: Bool = true
-        @Published var smbIsAlwaysOff: Bool = false
+        @Published var smbIsScheduledOff: Bool = false
         @Published var start: Decimal = 0
         @Published var start: Decimal = 0
-        @Published var end: Decimal = 23
+        @Published var end: Decimal = 0
         @Published var smbMinutes: Decimal = 0
         @Published var smbMinutes: Decimal = 0
         @Published var uamMinutes: Decimal = 0
         @Published var uamMinutes: Decimal = 0
         @Published var defaultSmbMinutes: Decimal = 0
         @Published var defaultSmbMinutes: Decimal = 0
@@ -233,7 +233,7 @@ extension OverrideConfig.StateModel {
             isfAndCr: isfAndCr,
             isfAndCr: isfAndCr,
             isf: isf,
             isf: isf,
             cr: cr,
             cr: cr,
-            smbIsAlwaysOff: smbIsAlwaysOff,
+            smbIsScheduledOff: smbIsScheduledOff,
             start: start,
             start: start,
             end: end,
             end: end,
             smbMinutes: smbMinutes,
             smbMinutes: smbMinutes,
@@ -272,7 +272,7 @@ extension OverrideConfig.StateModel {
             isfAndCr: isfAndCr,
             isfAndCr: isfAndCr,
             isf: isf,
             isf: isf,
             cr: cr,
             cr: cr,
-            smbIsAlwaysOff: smbIsAlwaysOff,
+            smbIsScheduledOff: smbIsScheduledOff,
             start: start,
             start: start,
             end: end,
             end: end,
             smbMinutes: smbMinutes,
             smbMinutes: smbMinutes,
@@ -419,9 +419,9 @@ extension OverrideConfig.StateModel {
         isf = true
         isf = true
         cr = true
         cr = true
         isfAndCr = true
         isfAndCr = true
-        smbIsAlwaysOff = false
+        smbIsScheduledOff = false
         start = 0
         start = 0
-        end = 23
+        end = 0
         smbMinutes = defaultSmbMinutes
         smbMinutes = defaultSmbMinutes
         uamMinutes = defaultUamMinutes
         uamMinutes = defaultUamMinutes
         target = 0
         target = 0

+ 45 - 31
FreeAPS/Sources/Modules/OverrideConfig/View/AddOverrideForm.swift

@@ -93,7 +93,7 @@ struct AddOverrideForm: View {
                 )
                 )
                 Spacer()
                 Spacer()
                 Toggle(isOn: $state.indefinite) {
                 Toggle(isOn: $state.indefinite) {
-                    Text("Enable indefinitely")
+                    Text("Enable Indefinitely")
                 }
                 }
             }
             }
             if !state.indefinite {
             if !state.indefinite {
@@ -118,28 +118,45 @@ struct AddOverrideForm: View {
             }
             }
             HStack {
             HStack {
                 Toggle(isOn: $state.advancedSettings) {
                 Toggle(isOn: $state.advancedSettings) {
-                    Text("More options")
+                    Text("More Options")
                 }
                 }
             }
             }
             if state.advancedSettings {
             if state.advancedSettings {
                 HStack {
                 HStack {
-                    Toggle(isOn: $state.smbIsOff) {
+                    Toggle(isOn: Binding(
+                        get: { state.smbIsOff },
+                        set: { newValue in
+                            state.smbIsOff = newValue
+                            if newValue {
+                                state.smbIsScheduledOff = false
+                            }
+                        }
+                    )) {
                         Text("Disable SMBs")
                         Text("Disable SMBs")
                     }
                     }
                 }
                 }
                 HStack {
                 HStack {
-                    Toggle(isOn: $state.smbIsAlwaysOff) {
-                        Text("Schedule when SMBs are Off")
-                    }.disabled(!state.smbIsOff)
+                    Toggle(isOn: Binding(
+                        get: { state.smbIsScheduledOff },
+                        set: { newValue in
+                            state.smbIsScheduledOff = newValue
+                            if newValue {
+                                state.smbIsOff = false
+                            }
+                        }
+                    )) {
+                        Text("Schedule When SMBs Are Disabled")
+                    }
                 }
                 }
-                if state.smbIsAlwaysOff {
+
+                if state.smbIsScheduledOff {
                     HStack {
                     HStack {
-                        Text("First Hour SMBs are Off (24 hours)")
+                        Text("First Hour SMBs Are Disabled (24 hours)")
                         TextFieldWithToolBar(text: $state.start, placeholder: "0", numberFormatter: formatter)
                         TextFieldWithToolBar(text: $state.start, placeholder: "0", numberFormatter: formatter)
                         Text("hour").foregroundColor(.secondary)
                         Text("hour").foregroundColor(.secondary)
                     }
                     }
                     HStack {
                     HStack {
-                        Text("Last Hour SMBs are Off (24 hours)")
+                        Text("First Hour SMBs Are Resumed (24 hours)")
                         TextFieldWithToolBar(text: $state.end, placeholder: "0", numberFormatter: formatter)
                         TextFieldWithToolBar(text: $state.end, placeholder: "0", numberFormatter: formatter)
                         Text("hour").foregroundColor(.secondary)
                         Text("hour").foregroundColor(.secondary)
                     }
                     }
@@ -161,15 +178,17 @@ struct AddOverrideForm: View {
                         }
                         }
                     }
                     }
                 }
                 }
-                HStack {
-                    Text("SMB Minutes")
-                    TextFieldWithToolBar(text: $state.smbMinutes, placeholder: "0", numberFormatter: formatter)
-                    Text("minutes").foregroundColor(.secondary)
-                }
-                HStack {
-                    Text("UAM SMB Minutes")
-                    TextFieldWithToolBar(text: $state.uamMinutes, placeholder: "0", numberFormatter: formatter)
-                    Text("minutes").foregroundColor(.secondary)
+                if !state.smbIsOff {
+                    HStack {
+                        Text("SMB Minutes")
+                        TextFieldWithToolBar(text: $state.smbMinutes, placeholder: "0", numberFormatter: formatter)
+                        Text("minutes").foregroundColor(.secondary)
+                    }
+                    HStack {
+                        Text("UAM SMB Minutes")
+                        TextFieldWithToolBar(text: $state.uamMinutes, placeholder: "0", numberFormatter: formatter)
+                        Text("minutes").foregroundColor(.secondary)
+                    }
                 }
                 }
             }
             }
 
 
@@ -178,14 +197,14 @@ struct AddOverrideForm: View {
         header: { Text("Add custom Override") }
         header: { Text("Add custom Override") }
         footer: {
         footer: {
             Text(
             Text(
-                "Your profile basal insulin will be adjusted with the override percentage and your profile ISF and CR will be inversly adjusted with the percentage."
+                "Your profile ISF and CR will be inversly adjusted with the override percentage."
             )
             )
         }.listRowBackground(Color.chart)
         }.listRowBackground(Color.chart)
     }
     }
 
 
     private var startAndSaveProfiles: some View {
     private var startAndSaveProfiles: some View {
         HStack {
         HStack {
-            Button("Start new Override") {
+            Button("Start New Override") {
                 if !state.isInputInvalid(target: state.target) {
                 if !state.isInputInvalid(target: state.target) {
                     showAlert.toggle()
                     showAlert.toggle()
 
 
@@ -271,17 +290,12 @@ struct AddOverrideForm: View {
     }
     }
 
 
     private func unChanged() -> Bool {
     private func unChanged() -> Bool {
-        let isChanged = (
-            state.overrideSliderPercentage == 100 && !state.shouldOverrideTarget && !state.smbIsOff && !state
-                .advancedSettings
-        ) ||
-            (!state.indefinite && state.overrideDuration == 0) || (state.shouldOverrideTarget && state.target == 0) ||
-            (
-                state.overrideSliderPercentage == 100 && !state.shouldOverrideTarget && !state.smbIsOff && state.isf && state
-                    .cr && state
-                    .smbMinutes == state.defaultSmbMinutes && state.uamMinutes == state.defaultUamMinutes
-            )
+        let defaultProfile = state.overrideSliderPercentage == 100 && !state.shouldOverrideTarget && !state.advancedSettings
+        let noDurationSpecified = !state.indefinite && state.overrideDuration == 0
+        let targetZeroWithOverride = state.shouldOverrideTarget && state.target == 0
+        let allSettingsDefault = state.overrideSliderPercentage == 100 && !state.shouldOverrideTarget && !state.smbIsOff && !state
+            .smbIsScheduledOff && state.smbMinutes == state.defaultSmbMinutes && state.uamMinutes == state.defaultUamMinutes
 
 
-        return isChanged
+        return defaultProfile || noDurationSpecified || targetZeroWithOverride || allSettingsDefault
     }
     }
 }
 }

+ 68 - 44
FreeAPS/Sources/Modules/OverrideConfig/View/EditOverrideForm.swift

@@ -14,7 +14,7 @@ struct EditOverrideForm: View {
     @State private var target: Decimal?
     @State private var target: Decimal?
     @State private var advancedSettings: Bool
     @State private var advancedSettings: Bool
     @State private var smbIsOff: Bool
     @State private var smbIsOff: Bool
-    @State private var smbIsAlwaysOff: Bool
+    @State private var smbIsScheduledOff: Bool
     @State private var start: Decimal?
     @State private var start: Decimal?
     @State private var end: Decimal?
     @State private var end: Decimal?
     @State private var isfAndCr: Bool
     @State private var isfAndCr: Bool
@@ -42,7 +42,7 @@ struct EditOverrideForm: View {
         _target_override = State(initialValue: overrideToEdit.target?.decimalValue != 0)
         _target_override = State(initialValue: overrideToEdit.target?.decimalValue != 0)
         _advancedSettings = State(initialValue: overrideToEdit.advancedSettings)
         _advancedSettings = State(initialValue: overrideToEdit.advancedSettings)
         _smbIsOff = State(initialValue: overrideToEdit.smbIsOff)
         _smbIsOff = State(initialValue: overrideToEdit.smbIsOff)
-        _smbIsAlwaysOff = State(initialValue: overrideToEdit.smbIsAlwaysOff)
+        _smbIsScheduledOff = State(initialValue: overrideToEdit.smbIsScheduledOff)
         _start = State(initialValue: overrideToEdit.start?.decimalValue)
         _start = State(initialValue: overrideToEdit.start?.decimalValue)
         _end = State(initialValue: overrideToEdit.end?.decimalValue)
         _end = State(initialValue: overrideToEdit.end?.decimalValue)
         _isfAndCr = State(initialValue: overrideToEdit.isfAndCr)
         _isfAndCr = State(initialValue: overrideToEdit.isfAndCr)
@@ -143,7 +143,7 @@ struct EditOverrideForm: View {
                 ).onChange(of: percentage) { _ in hasChanges = true }
                 ).onChange(of: percentage) { _ in hasChanges = true }
                 Spacer()
                 Spacer()
                 Toggle(isOn: $indefinite) {
                 Toggle(isOn: $indefinite) {
-                    Text("Enable indefinitely")
+                    Text("Enable Indefinitely")
                 }.onChange(of: indefinite) { _ in hasChanges = true }
                 }.onChange(of: indefinite) { _ in hasChanges = true }
             }
             }
             if !indefinite {
             if !indefinite {
@@ -188,21 +188,43 @@ struct EditOverrideForm: View {
             }
             }
 
 
             Toggle(isOn: $advancedSettings) {
             Toggle(isOn: $advancedSettings) {
-                Text("More options")
+                Text("More Options")
             }.onChange(of: advancedSettings) { _ in hasChanges = true }
             }.onChange(of: advancedSettings) { _ in hasChanges = true }
 
 
             if advancedSettings {
             if advancedSettings {
-                Toggle(isOn: $smbIsOff) {
+                Toggle(
+                    isOn: Binding(
+                        get: { smbIsOff },
+                        set: { newValue in
+                            smbIsOff = newValue
+                            if newValue {
+                                smbIsScheduledOff = false
+                            }
+                            hasChanges = true
+                        }
+                    )
+                ) {
                     Text("Disable SMBs")
                     Text("Disable SMBs")
-                }.onChange(of: smbIsOff) { _ in hasChanges = true }
+                }
 
 
-                Toggle(isOn: $smbIsAlwaysOff) {
-                    Text("Schedule when SMBs are Off")
-                }.onChange(of: smbIsAlwaysOff) { _ in hasChanges = true }
+                Toggle(
+                    isOn: Binding(
+                        get: { smbIsScheduledOff },
+                        set: { newValue in
+                            smbIsScheduledOff = newValue
+                            if newValue {
+                                smbIsOff = false
+                            }
+                            hasChanges = true
+                        }
+                    )
+                ) {
+                    Text("Schedule When SMBs Are Disabled")
+                }
 
 
-                if smbIsAlwaysOff {
+                if smbIsScheduledOff {
                     HStack {
                     HStack {
-                        Text("First Hour SMBs are Off (24 hours)")
+                        Text("First Hour SMBs Are Disabled (24 hours)")
                         TextFieldWithToolBar(
                         TextFieldWithToolBar(
                             text: Binding(
                             text: Binding(
                                 get: { start ?? 0 },
                                 get: { start ?? 0 },
@@ -218,10 +240,10 @@ struct EditOverrideForm: View {
                     }
                     }
 
 
                     HStack {
                     HStack {
-                        Text("Last Hour SMBs are Off (24 hours)")
+                        Text("First Hour SMBs Are Resumed (24 hours)")
                         TextFieldWithToolBar(
                         TextFieldWithToolBar(
                             text: Binding(
                             text: Binding(
-                                get: { end ?? 23 },
+                                get: { end ?? 0 },
                                 set: {
                                 set: {
                                     end = $0
                                     end = $0
                                     hasChanges = true
                                     hasChanges = true
@@ -248,36 +270,38 @@ struct EditOverrideForm: View {
                     }.onChange(of: cr) { _ in hasChanges = true }
                     }.onChange(of: cr) { _ in hasChanges = true }
                 }
                 }
 
 
-                HStack {
-                    Text("SMB Minutes")
-                    TextFieldWithToolBar(
-                        text: Binding(
-                            get: { smbMinutes ?? state.defaultSmbMinutes },
-                            set: {
-                                smbMinutes = $0
-                                hasChanges = true
-                            }
-                        ),
-                        placeholder: "0",
-                        numberFormatter: formatter
-                    )
-                    Text("minutes").foregroundColor(.secondary)
-                }
+                if !smbIsOff {
+                    HStack {
+                        Text("SMB Minutes")
+                        TextFieldWithToolBar(
+                            text: Binding(
+                                get: { smbMinutes ?? state.defaultSmbMinutes },
+                                set: {
+                                    smbMinutes = $0
+                                    hasChanges = true
+                                }
+                            ),
+                            placeholder: "0",
+                            numberFormatter: formatter
+                        )
+                        Text("minutes").foregroundColor(.secondary)
+                    }
 
 
-                HStack {
-                    Text("UAM SMB Minutes")
-                    TextFieldWithToolBar(
-                        text: Binding(
-                            get: { uamMinutes ?? state.defaultUamMinutes },
-                            set: {
-                                uamMinutes = $0
-                                hasChanges = true
-                            }
-                        ),
-                        placeholder: "0",
-                        numberFormatter: formatter
-                    )
-                    Text("minutes").foregroundColor(.secondary)
+                    HStack {
+                        Text("UAM SMB Minutes")
+                        TextFieldWithToolBar(
+                            text: Binding(
+                                get: { uamMinutes ?? state.defaultUamMinutes },
+                                set: {
+                                    uamMinutes = $0
+                                    hasChanges = true
+                                }
+                            ),
+                            placeholder: "0",
+                            numberFormatter: formatter
+                        )
+                        Text("minutes").foregroundColor(.secondary)
+                    }
                 }
                 }
             }
             }
         }.listRowBackground(Color.chart)
         }.listRowBackground(Color.chart)
@@ -341,7 +365,7 @@ struct EditOverrideForm: View {
         }
         }
         override.advancedSettings = advancedSettings
         override.advancedSettings = advancedSettings
         override.smbIsOff = smbIsOff
         override.smbIsOff = smbIsOff
-        override.smbIsAlwaysOff = smbIsAlwaysOff
+        override.smbIsScheduledOff = smbIsScheduledOff
         override.start = start.map { NSDecimalNumber(decimal: $0) }
         override.start = start.map { NSDecimalNumber(decimal: $0) }
         override.end = end.map { NSDecimalNumber(decimal: $0) }
         override.end = end.map { NSDecimalNumber(decimal: $0) }
         override.isfAndCr = isfAndCr
         override.isfAndCr = isfAndCr
@@ -360,7 +384,7 @@ struct EditOverrideForm: View {
         target = override.target?.decimalValue
         target = override.target?.decimalValue
         advancedSettings = override.advancedSettings
         advancedSettings = override.advancedSettings
         smbIsOff = override.smbIsOff
         smbIsOff = override.smbIsOff
-        smbIsAlwaysOff = override.smbIsAlwaysOff
+        smbIsScheduledOff = override.smbIsScheduledOff
         start = override.start?.decimalValue
         start = override.start?.decimalValue
         end = override.end?.decimalValue
         end = override.end?.decimalValue
         isfAndCr = override.isfAndCr
         isfAndCr = override.isfAndCr

+ 1 - 1
FreeAPS/Sources/Modules/OverrideConfig/View/OverrideRootView.swift

@@ -458,7 +458,7 @@ extension OverrideConfig {
             let percent = preset.percentage / 100
             let percent = preset.percentage / 100
             let perpetual = preset.indefinite
             let perpetual = preset.indefinite
             let durationString = perpetual ? "" : "\(formatter.string(from: duration as NSNumber)!)"
             let durationString = perpetual ? "" : "\(formatter.string(from: duration as NSNumber)!)"
-            let scheduledSMBstring = (preset.smbIsOff && preset.smbIsAlwaysOff) ? "Scheduled SMBs" : ""
+            let scheduledSMBstring = (preset.smbIsOff && preset.smbIsScheduledOff) ? "Scheduled SMBs" : ""
             let smbString = (preset.smbIsOff && scheduledSMBstring == "") ? "SMBs are off" : ""
             let smbString = (preset.smbIsOff && scheduledSMBstring == "") ? "SMBs are off" : ""
             let targetString = target != 0 ? target.description : ""
             let targetString = target != 0 ? target.description : ""
             let maxMinutesSMB = (preset.smbMinutes as Decimal?) != nil ? (preset.smbMinutes ?? 0) as Decimal : 0
             let maxMinutesSMB = (preset.smbMinutes as Decimal?) != nil ? (preset.smbMinutes ?? 0) as Decimal : 0

+ 1 - 1
Model/Classes+Properties/OverrideStored+CoreDataProperties.swift

@@ -21,7 +21,7 @@ public extension OverrideStored {
     @NSManaged var name: String?
     @NSManaged var name: String?
     @NSManaged var orderPosition: Int16
     @NSManaged var orderPosition: Int16
     @NSManaged var percentage: Double
     @NSManaged var percentage: Double
-    @NSManaged var smbIsAlwaysOff: Bool
+    @NSManaged var smbIsScheduledOff: Bool
     @NSManaged var smbIsOff: Bool
     @NSManaged var smbIsOff: Bool
     @NSManaged var smbMinutes: NSDecimalNumber?
     @NSManaged var smbMinutes: NSDecimalNumber?
     @NSManaged var start: NSDecimalNumber?
     @NSManaged var start: NSDecimalNumber?

+ 2 - 2
Model/TrioCoreDataPersistentContainer.xcdatamodeld/TrioCoreDataPersistentContainer.xcdatamodel/contents

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<model type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="22757" systemVersion="23G93" minimumToolsVersion="Automatic" sourceLanguage="Swift" usedWithSwiftData="YES" userDefinedModelVersionIdentifier="">
+<model type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="22758" systemVersion="23G93" minimumToolsVersion="Automatic" sourceLanguage="Swift" usedWithSwiftData="YES" userDefinedModelVersionIdentifier="">
     <entity name="BolusStored" representedClassName="BolusStored" syncable="YES">
     <entity name="BolusStored" representedClassName="BolusStored" syncable="YES">
         <attribute name="amount" optional="YES" attributeType="Decimal" defaultValueString="0"/>
         <attribute name="amount" optional="YES" attributeType="Decimal" defaultValueString="0"/>
         <attribute name="isExternal" optional="YES" attributeType="Boolean" defaultValueString="NO" usesScalarValueType="YES"/>
         <attribute name="isExternal" optional="YES" attributeType="Boolean" defaultValueString="NO" usesScalarValueType="YES"/>
@@ -145,8 +145,8 @@
         <attribute name="name" optional="YES" attributeType="String"/>
         <attribute name="name" optional="YES" attributeType="String"/>
         <attribute name="orderPosition" optional="YES" attributeType="Integer 16" defaultValueString="0" usesScalarValueType="YES"/>
         <attribute name="orderPosition" optional="YES" attributeType="Integer 16" defaultValueString="0" usesScalarValueType="YES"/>
         <attribute name="percentage" optional="YES" attributeType="Double" defaultValueString="100" usesScalarValueType="YES"/>
         <attribute name="percentage" optional="YES" attributeType="Double" defaultValueString="100" usesScalarValueType="YES"/>
-        <attribute name="smbIsAlwaysOff" optional="YES" attributeType="Boolean" defaultValueString="NO" usesScalarValueType="YES"/>
         <attribute name="smbIsOff" optional="YES" attributeType="Boolean" defaultValueString="NO" usesScalarValueType="YES"/>
         <attribute name="smbIsOff" optional="YES" attributeType="Boolean" defaultValueString="NO" usesScalarValueType="YES"/>
+        <attribute name="smbIsScheduledOff" optional="YES" attributeType="Boolean" defaultValueString="NO" usesScalarValueType="YES"/>
         <attribute name="smbMinutes" optional="YES" attributeType="Decimal" defaultValueString="30"/>
         <attribute name="smbMinutes" optional="YES" attributeType="Decimal" defaultValueString="30"/>
         <attribute name="start" optional="YES" attributeType="Decimal" defaultValueString="0.0"/>
         <attribute name="start" optional="YES" attributeType="Decimal" defaultValueString="0.0"/>
         <attribute name="target" optional="YES" attributeType="Decimal" defaultValueString="0"/>
         <attribute name="target" optional="YES" attributeType="Decimal" defaultValueString="0"/>