Skip to content

Commit e2c7e97

Browse files
committed
use controller + allow collapsing
1 parent 8165559 commit e2c7e97

File tree

1 file changed

+52
-38
lines changed

1 file changed

+52
-38
lines changed

CodeEdit/WorkspaceView.swift

Lines changed: 52 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -105,18 +105,8 @@ struct WorkspaceView: View {
105105
}
106106
}
107107

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 {
120110
let editor = EditorLayoutView(
121111
layout: editorManager.isFocusingActiveEditor
122112
? editorManager.activeEditor.getEditorLayout() ?? editorManager.editorLayout
@@ -134,35 +124,59 @@ struct WorkspaceSplitView: NSViewRepresentable {
134124
.frame(idealHeight: 260)
135125
.frame(minHeight: 100)
136126

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
159131
}
160132

161-
func updateNSView(_ nsView: NSSplitView, context: Context) {
162-
163-
}
133+
func updateNSViewController(_ nsViewController: WorkspaceViewController, context: Context) {}
164134

165-
typealias NSViewType = NSSplitView
135+
typealias NSViewControllerType = WorkspaceViewController
166136

137+
@EnvironmentObject private var workspace: WorkspaceDocument
138+
@EnvironmentObject private var editorManager: EditorManager
139+
@EnvironmentObject private var utilityAreaViewModel: UtilityAreaViewModel
140+
@FocusState var focusedEditor: Editor?
167141

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+
}
168182
}

0 commit comments

Comments
 (0)