Skip to content

Commit b1fbbe5

Browse files
committed
Added initial hide interface button
- Hide interface and shortcut will store the interface state and hide it - Show interface will restore the interface state
1 parent dabc17b commit b1fbbe5

2 files changed

Lines changed: 50 additions & 0 deletions

File tree

CodeEdit/Features/Documents/Controllers/CodeEditWindowController.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,12 @@ final class CodeEditWindowController: NSWindowController, NSToolbarDelegate, Obs
1414
@Published var inspectorCollapsed = false
1515
@Published var toolbarCollapsed = false
1616

17+
// These variables store the state of the windows when using "Hide interface"
18+
@Published var prevNavigatorCollapsed: Bool?
19+
@Published var prevInspectorCollapsed: Bool?
20+
@Published var prevUtilityAreaCollapsed: Bool?
21+
@Published var prevToolbarCollapsed: Bool?
22+
1723
private var panelOpen = false
1824

1925
var observers: [NSKeyValueObservation] = []

CodeEdit/Features/WindowCommands/ViewCommands.swift

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,44 @@ extension ViewCommands {
111111
windowController?.toolbarCollapsed ?? true
112112
}
113113

114+
var isAnythingVisible: Bool {
115+
!navigatorCollapsed || !inspectorCollapsed || !utilityAreaCollapsed || !toolbarCollapsed
116+
}
117+
118+
func toggleInterface(shouldHide: Bool) {
119+
// When hiding, store how the interface looks now
120+
if shouldHide {
121+
storeInterfaceVisibilityState()
122+
}
123+
124+
// Check what each elemtent state should be
125+
let navigatorTargetState = shouldHide ? true : (windowController?.prevNavigatorCollapsed ?? false)
126+
let inspectorTargetState = shouldHide ? true : (windowController?.prevInspectorCollapsed ?? false)
127+
let utilityAreaTargetState = shouldHide ? true : (windowController?.prevUtilityAreaCollapsed ?? false)
128+
let toolbarTargetState = shouldHide ? true : (windowController?.prevToolbarCollapsed ?? true)
129+
130+
// Toggle only the parts that need to change
131+
if navigatorCollapsed != navigatorTargetState {
132+
windowController?.toggleFirstPanel()
133+
}
134+
if inspectorCollapsed != inspectorTargetState {
135+
windowController?.toggleLastPanel()
136+
}
137+
if utilityAreaCollapsed != utilityAreaTargetState {
138+
CommandManager.shared.executeCommand("open.drawer")
139+
}
140+
if toolbarCollapsed != toolbarTargetState {
141+
windowController?.toggleToolbar()
142+
}
143+
}
144+
145+
func storeInterfaceVisibilityState() {
146+
windowController?.prevNavigatorCollapsed = navigatorCollapsed
147+
windowController?.prevInspectorCollapsed = inspectorCollapsed
148+
windowController?.prevUtilityAreaCollapsed = utilityAreaCollapsed
149+
windowController?.prevToolbarCollapsed = toolbarCollapsed
150+
}
151+
114152
var body: some View {
115153
Button("\(navigatorCollapsed ? "Show" : "Hide") Navigator") {
116154
windowController?.toggleFirstPanel()
@@ -135,6 +173,12 @@ extension ViewCommands {
135173
}
136174
.disabled(windowController == nil)
137175
.keyboardShortcut("t", modifiers: [.option, .command])
176+
177+
Button("\(isAnythingVisible ? "Hide" : "Show") Interface") {
178+
toggleInterface(shouldHide: isAnythingVisible)
179+
}
180+
.disabled(windowController == nil)
181+
.keyboardShortcut("i", modifiers: [.option, .command])
138182
}
139183
}
140184
}

0 commit comments

Comments
 (0)