@@ -12,6 +12,7 @@ struct ImageClassPicker: View {
1212 let namedNode : NamedNode
1313 @Binding private var selection : RuntimeObjectType ?
1414 @State private var searchString : String = " "
15+ @State private var loadError : Error ?
1516
1617 @EnvironmentObject private var listings : RuntimeListings
1718
@@ -32,15 +33,27 @@ struct ImageClassPicker: View {
3233
3334 var body : some View {
3435 Group {
35- if listings. isImageLoaded ( path: namedNode. path) {
36+ if let loadError {
37+ if let dlOpenError = loadError as? DlOpenError ,
38+ let errorMessage = dlOpenError. message {
39+ StatusView {
40+ Text ( errorMessage)
41+ . font ( . callout. monospaced ( ) )
42+ . padding ( . top)
43+ }
44+ } else {
45+ StatusView {
46+ Text ( " An unknown error occured trying to load ' \( namedNode. path) ' " )
47+ . padding ( . top)
48+ }
49+ }
50+ } else if listings. isImageLoaded ( path: namedNode. path) {
3651 let runtimeObjects = self . runtimeObjects
3752 if runtimeObjects. isEmpty {
38- VStack {
53+ StatusView {
3954 Text ( " \( namedNode. name) is loaded however does not appear to contain any classes " )
4055 . padding ( . top)
41- Spacer ( )
4256 }
43- . scenePadding ( )
4457 } else {
4558 ListView ( runtimeObjects, selection: $selection) { runtimeObject in
4659 RuntimeObjectRow ( type: runtimeObject)
@@ -49,20 +62,41 @@ struct ImageClassPicker: View {
4962 . searchable ( text: $searchString)
5063 }
5164 } else {
52- VStack {
65+ StatusView {
5366 Text ( " \( namedNode. name) is not yet loaded " )
5467 . padding ( . top)
5568 Button {
56- CDUtilities . loadImage ( at: namedNode. path)
69+ do {
70+ try CDUtilities . loadImage ( at: namedNode. path)
71+ } catch {
72+ loadError = error
73+ }
5774 } label: {
5875 Text ( " Load now " )
5976 }
6077 . buttonStyle ( . bordered)
61- Spacer ( )
6278 }
63- . scenePadding ( )
6479 }
6580 }
6681 . navigationTitle ( namedNode. name)
6782 }
6883}
84+
85+ private struct StatusView < T: View > : View {
86+ let contents : ( ) -> T
87+
88+ init ( @ViewBuilder contents: @escaping ( ) -> T ) {
89+ self . contents = contents
90+ }
91+
92+ var body : some View {
93+ ScrollView ( . vertical) {
94+ VStack {
95+ contents ( )
96+ Spacer ( )
97+ }
98+ }
99+ . frame ( maxHeight: . infinity, alignment: . top)
100+ . scenePadding ( )
101+ }
102+ }
0 commit comments