@@ -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