diff --git a/openHAB.xcodeproj/project.pbxproj b/openHAB.xcodeproj/project.pbxproj index 03c49bae9..48039090e 100644 --- a/openHAB.xcodeproj/project.pbxproj +++ b/openHAB.xcodeproj/project.pbxproj @@ -93,7 +93,6 @@ DA65871F236F83CE007E2E7F /* UserDefaultsExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA65871E236F83CD007E2E7F /* UserDefaultsExtension.swift */; }; DA7224D223828D3400712D20 /* PreviewConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA7224D123828D3300712D20 /* PreviewConstants.swift */; }; DA72E1B8236DEA0900B8EF3A /* AppMessageService.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA72E1B5236DEA0900B8EF3A /* AppMessageService.swift */; }; - DA7649DE23FC81A20085CE46 /* Unwrap.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA7649DD23FC81A20085CE46 /* Unwrap.swift */; }; DA7E1E492230227E002AEFD8 /* OpenHABTracker.swift in Sources */ = {isa = PBXBuildFile; fileRef = DFDEE4161883C6A5008B26AC /* OpenHABTracker.swift */; }; DA7E1E4B2233986E002AEFD8 /* PlayerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA7E1E47222EB00B002AEFD8 /* PlayerView.swift */; }; DA817E7A234BF39B00C91824 /* CHANGELOG.md in Resources */ = {isa = PBXBuildFile; fileRef = DA817E79234BF39B00C91824 /* CHANGELOG.md */; }; @@ -368,7 +367,6 @@ DA65871E236F83CD007E2E7F /* UserDefaultsExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserDefaultsExtension.swift; sourceTree = ""; }; DA7224D123828D3300712D20 /* PreviewConstants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PreviewConstants.swift; sourceTree = ""; }; DA72E1B5236DEA0900B8EF3A /* AppMessageService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppMessageService.swift; sourceTree = ""; }; - DA7649DD23FC81A20085CE46 /* Unwrap.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Unwrap.swift; sourceTree = ""; }; DA7E1E47222EB00B002AEFD8 /* PlayerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlayerView.swift; sourceTree = ""; }; DA817E79234BF39B00C91824 /* CHANGELOG.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = CHANGELOG.md; sourceTree = ""; }; DA88F8C522EC377100B408E5 /* ReleaseNotes.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = ReleaseNotes.md; sourceTree = ""; }; @@ -807,7 +805,6 @@ DA2E0AA323DC96E9009B0A99 /* EncircledIconWithAction.swift */, DA2E0B0D23DCC152009B0A99 /* MapView.swift */, DA0749DF23E0BF510057FA83 /* ColorSelection.swift */, - DA7649DD23FC81A20085CE46 /* Unwrap.swift */, ); path = Utils; sourceTree = ""; @@ -1403,7 +1400,6 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - DA7649DE23FC81A20085CE46 /* Unwrap.swift in Sources */, DAC9AF4724F9669F006DAE93 /* ObservableOpenHABWidgetExtension.swift in Sources */, DA2E0B0E23DCC153009B0A99 /* MapView.swift in Sources */, DA2E0B1023DCC439009B0A99 /* MapViewRow.swift in Sources */, diff --git a/openHABWatch/OpenHABWatch.swift b/openHABWatch/OpenHABWatch.swift index 02ee1d47a..6f8f005f8 100644 --- a/openHABWatch/OpenHABWatch.swift +++ b/openHABWatch/OpenHABWatch.swift @@ -14,11 +14,9 @@ import SwiftUI @main struct OpenHABWatch: App { @ObservedObject var settings = ObservableOpenHABDataObject.shared - // https://developer.apple.com/documentation/watchkit/wkapplicationdelegate @WKApplicationDelegateAdaptor(OpenHABWatchAppDelegate.self) var appDelegate @ObservedObject var userData = UserData(sitemapName: ObservableOpenHABDataObject.shared.sitemapName) - // @ObservedObject var userData = UserData(sitemapName: ObservableOpenHABDataObject.shared.sitemapName) var body: some Scene { WindowGroup { diff --git a/openHABWatch/Views/Rows/SliderRow.swift b/openHABWatch/Views/Rows/SliderRow.swift index def45ca7f..7628464bb 100644 --- a/openHABWatch/Views/Rows/SliderRow.swift +++ b/openHABWatch/Views/Rows/SliderRow.swift @@ -17,11 +17,9 @@ struct SliderRow: View { @ObservedObject var widget: ObservableOpenHABWidget @ObservedObject var settings = ObservableOpenHABDataObject.shared - var body: some View { - let valueBinding = Binding( - get: { - widget.adjustedValue - }, + var valueBinding: Binding { + .init( + get: { widget.adjustedValue }, set: { os_log("Slider new value = %g", log: .default, type: .info, $0) widget.sendCommand($0.valueText(step: widget.step)) @@ -29,28 +27,29 @@ struct SliderRow: View { // self.widget.stateEnumBinding = .slider($0) } ) + } - return - VStack(spacing: 3) { - HStack { - IconView(widget: widget, settings: settings) - TextLabelView(widget: widget) - Spacer() - DetailTextLabelView(widget: widget) - }.padding(.top, 8) + var body: some View { + VStack(spacing: 3) { + HStack { + IconView(widget: widget, settings: settings) + TextLabelView(widget: widget) + Spacer() + DetailTextLabelView(widget: widget) + }.padding(.top, 8) - Slider(value: valueBinding, in: widget.minValue ... widget.maxValue, step: widget.step) - .labelsHidden() - .focusable(true) - .digitalCrownRotation( - valueBinding, - from: widget.minValue, - through: widget.maxValue, - by: widget.step, - sensitivity: .medium, - isHapticFeedbackEnabled: true - ) - } + Slider(value: valueBinding, in: widget.minValue ... widget.maxValue, step: widget.step) + .labelsHidden() + .focusable(true) + .digitalCrownRotation( + valueBinding, + from: widget.minValue, + through: widget.maxValue, + by: widget.step, + sensitivity: .medium, + isHapticFeedbackEnabled: true + ) + } } } diff --git a/openHABWatch/Views/Rows/SwitchRow.swift b/openHABWatch/Views/Rows/SwitchRow.swift index e54c552af..03c8d4eea 100644 --- a/openHABWatch/Views/Rows/SwitchRow.swift +++ b/openHABWatch/Views/Rows/SwitchRow.swift @@ -18,12 +18,10 @@ struct SwitchRow: View { @ObservedObject var widget: ObservableOpenHABWidget @ObservedObject var settings = ObservableOpenHABDataObject.shared - var body: some View { - // https://stackoverflow.com/questions/59395501/do-something-when-toggle-state-changes - let stateBinding = Binding( - get: { - widget.stateEnumBinding.boolState - }, + // https://stackoverflow.com/questions/59395501/do-something-when-toggle-state-changes + var stateBinding: Binding { + .init( + get: { widget.stateEnumBinding.boolState }, set: { if $0 { os_log("Switch to ON", log: .viewCycle, type: .info) @@ -35,20 +33,21 @@ struct SwitchRow: View { widget.stateEnumBinding = .switcher($0) } ) + } - return - Toggle(isOn: stateBinding) { - HStack { - IconView(widget: widget, settings: settings) - VStack { - TextLabelView(widget: widget) - DetailTextLabelView(widget: widget) - } + var body: some View { + Toggle(isOn: stateBinding) { + HStack { + IconView(widget: widget, settings: settings) + VStack { + TextLabelView(widget: widget) + DetailTextLabelView(widget: widget) } } - .focusable(true) - .padding(.trailing) - .cornerRadius(5) + } + .focusable(true) + .padding(.trailing) + .cornerRadius(5) } } diff --git a/openHABWatch/Views/Utils/DetailTextLabelView.swift b/openHABWatch/Views/Utils/DetailTextLabelView.swift index bac694abd..7ab90ff89 100644 --- a/openHABWatch/Views/Utils/DetailTextLabelView.swift +++ b/openHABWatch/Views/Utils/DetailTextLabelView.swift @@ -15,8 +15,8 @@ struct DetailTextLabelView: View { @ObservedObject var widget: ObservableOpenHABWidget var body: some View { - Unwrap(widget.labelValue) { - Text($0) + if let label = widget.labelValue { + Text(label) .font(.footnote) .lineLimit(1) .foregroundColor(!widget.valuecolor.isEmpty ? Color(fromString: widget.valuecolor) : .secondary) diff --git a/openHABWatch/Views/Utils/Unwrap.swift b/openHABWatch/Views/Utils/Unwrap.swift deleted file mode 100644 index 022097a21..000000000 --- a/openHABWatch/Views/Utils/Unwrap.swift +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright (c) 2010-2023 Contributors to the openHAB project -// -// See the NOTICE file(s) distributed with this work for additional -// information. -// -// This program and the accompanying materials are made available under the -// terms of the Eclipse Public License 2.0 which is available at -// http://www.eclipse.org/legal/epl-2.0 -// -// SPDX-License-Identifier: EPL-2.0 - -import SwiftUI - -// As explained in https://www.swiftbysundell.com/tips/optional-swiftui-views/ -struct Unwrap: View { - private let value: Value? - private let contentProvider: (Value) -> Content - - var body: some View { - value.map(contentProvider) - } - - init(_ value: Value?, - @ViewBuilder content: @escaping (Value) -> Content) { - self.value = value - contentProvider = content - } -}