@@ -105,18 +105,8 @@ struct WorkspaceView: View {
105
105
}
106
106
}
107
107
108
- struct WorkspaceSplitView : NSViewRepresentable {
109
- @EnvironmentObject private var workspace : WorkspaceDocument
110
- @EnvironmentObject private var editorManager : EditorManager
111
- @EnvironmentObject private var utilityAreaViewModel : UtilityAreaViewModel
112
- @FocusState var focusedEditor : Editor ?
113
-
114
- final class CustomSplitView : NSSplitView {
115
- override var dividerThickness : CGFloat { StatusBarView . height }
116
- override var dividerColor : NSColor { . clear }
117
- }
118
-
119
- func makeNSView( context: Context ) -> NSSplitView {
108
+ struct WorkspaceSplitView : NSViewControllerRepresentable {
109
+ func makeNSViewController( context: Context ) -> WorkspaceViewController {
120
110
let editor = EditorLayoutView (
121
111
layout: editorManager. isFocusingActiveEditor
122
112
? editorManager. activeEditor. getEditorLayout ( ) ?? editorManager. editorLayout
@@ -134,35 +124,59 @@ struct WorkspaceSplitView: NSViewRepresentable {
134
124
. frame ( idealHeight: 260 )
135
125
. frame ( minHeight: 100 )
136
126
137
- let splitView = CustomSplitView ( )
138
- splitView. arrangesAllSubviews = false
139
- let editorPane = NSHostingView ( rootView: editor)
140
- let utilityPane = NSHostingView ( rootView: utility)
141
- splitView. addArrangedSubview ( editorPane)
142
- splitView. addArrangedSubview ( utilityPane)
143
-
144
- let dividerView = NSHostingView ( rootView: StatusBarView ( ) )
145
- dividerView. translatesAutoresizingMaskIntoConstraints = false
146
- let constraints = [
147
- dividerView. topAnchor. constraint ( equalTo: splitView. subviews [ 0 ] . bottomAnchor) ,
148
- dividerView. bottomAnchor. constraint ( equalTo: splitView. subviews [ 1 ] . topAnchor) ,
149
- dividerView. leadingAnchor. constraint ( equalTo: splitView. leadingAnchor) ,
150
- dividerView. trailingAnchor. constraint ( equalTo: splitView. trailingAnchor)
151
- ]
152
- splitView. addSubview ( dividerView)
153
- NSLayoutConstraint . activate ( constraints)
154
-
155
- splitView. adjustSubviews ( )
156
-
157
-
158
- return splitView
127
+ let splitViewController = WorkspaceViewController ( )
128
+ splitViewController. addPane ( editor)
129
+ splitViewController. addPane ( utility)
130
+ return splitViewController
159
131
}
160
132
161
- func updateNSView( _ nsView: NSSplitView , context: Context ) {
162
-
163
- }
133
+ func updateNSViewController( _ nsViewController: WorkspaceViewController , context: Context ) { }
164
134
165
- typealias NSViewType = NSSplitView
135
+ typealias NSViewControllerType = WorkspaceViewController
166
136
137
+ @EnvironmentObject private var workspace : WorkspaceDocument
138
+ @EnvironmentObject private var editorManager : EditorManager
139
+ @EnvironmentObject private var utilityAreaViewModel : UtilityAreaViewModel
140
+ @FocusState var focusedEditor : Editor ?
167
141
142
+ /// Split view that customizes divider thickness to allow status bar to act as divider.
143
+ final class CustomSplitView : NSSplitView {
144
+ override var dividerThickness : CGFloat { StatusBarView . height }
145
+ override var dividerColor : NSColor { . clear }
146
+ }
147
+
148
+ final class WorkspaceViewController : NSSplitViewController {
149
+ init ( ) {
150
+ super. init ( nibName: nil , bundle: nil )
151
+ splitView = CustomSplitView ( )
152
+ splitView. arrangesAllSubviews = false
153
+ }
154
+
155
+ required init ? ( coder: NSCoder ) {
156
+ fatalError ( " init(coder:) has not been implemented " )
157
+ }
158
+
159
+ override func viewDidLoad( ) {
160
+ super. viewDidLoad ( )
161
+ let dividerView = NSHostingView ( rootView: StatusBarView ( ) )
162
+ dividerView. translatesAutoresizingMaskIntoConstraints = false
163
+ print ( splitView. subviews, splitViewItems)
164
+ let constraints = [
165
+ dividerView. topAnchor. constraint ( equalTo: splitView. subviews [ 0 ] . bottomAnchor) ,
166
+ dividerView. bottomAnchor. constraint ( equalTo: splitView. subviews [ 1 ] . topAnchor) ,
167
+ dividerView. leadingAnchor. constraint ( equalTo: splitView. leadingAnchor) ,
168
+ dividerView. trailingAnchor. constraint ( equalTo: splitView. trailingAnchor)
169
+ ]
170
+ splitView. addSubview ( dividerView)
171
+ NSLayoutConstraint . activate ( constraints)
172
+ }
173
+
174
+ func addPane( _ pane: some View ) {
175
+ let viewController = NSHostingController ( rootView: pane)
176
+ let splitViewItem = NSSplitViewItem ( viewController: viewController)
177
+ splitViewItem. canCollapse = true
178
+ print ( splitViewItems. count)
179
+ insertSplitViewItem ( splitViewItem, at: splitViewItems. count)
180
+ }
181
+ }
168
182
}
0 commit comments