From bd4b18945b23176a14fa0d4c1aaff128c6a71c11 Mon Sep 17 00:00:00 2001 From: Roscoe Rubin-Rottenberg Date: Wed, 24 Apr 2024 15:31:57 -0400 Subject: [PATCH 1/3] hide toolbar button and command --- .../CodeEditWindowController.swift | 50 +++++++++++-------- .../WindowCommands/ViewCommands.swift | 10 ++++ 2 files changed, 38 insertions(+), 22 deletions(-) diff --git a/CodeEdit/Features/Documents/Controllers/CodeEditWindowController.swift b/CodeEdit/Features/Documents/Controllers/CodeEditWindowController.swift index 73f6550f2c..ee371b6903 100644 --- a/CodeEdit/Features/Documents/Controllers/CodeEditWindowController.swift +++ b/CodeEdit/Features/Documents/Controllers/CodeEditWindowController.swift @@ -14,6 +14,7 @@ final class CodeEditWindowController: NSWindowController, NSToolbarDelegate, Obs @Published var navigatorCollapsed = false @Published var inspectorCollapsed = false + @Published var toolbarCollapsed = false var observers: [NSKeyValueObservation] = [] @@ -31,9 +32,7 @@ final class CodeEditWindowController: NSWindowController, NSToolbarDelegate, Obs init(window: NSWindow, workspace: WorkspaceDocument) { super.init(window: window) self.workspace = workspace - self.workspaceSettings = CEWorkspaceSettings( - workspaceDocument: workspace - ) + self.workspaceSettings = CEWorkspaceSettings(workspaceDocument: workspace) setupSplitView(with: workspace) let view = CodeEditSplitView(controller: splitViewController).ignoresSafeArea() @@ -55,14 +54,10 @@ final class CodeEditWindowController: NSWindowController, NSToolbarDelegate, Obs registerCommands() } - deinit { - cancellables.forEach({ $0.cancel() }) - } + deinit { cancellables.forEach({ $0.cancel() }) } @available(*, unavailable) - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } + required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } private func setupSplitView(with workspace: WorkspaceDocument) { let feedbackPerformer = NSHapticFeedbackManager.defaultPerformer @@ -126,24 +121,22 @@ final class CodeEditWindowController: NSWindowController, NSToolbarDelegate, Obs toolbar.delegate = self toolbar.displayMode = .labelOnly toolbar.showsBaselineSeparator = false - self.window?.titleVisibility = .hidden + self.window?.titleVisibility = toolbarCollapsed ? .visible : .hidden self.window?.toolbarStyle = .unifiedCompact if Settings[\.general].tabBarStyle == .native { // Set titlebar background as transparent by default in order to // style the toolbar background in native tab bar style. self.window?.titlebarSeparatorStyle = .none - } else { - // In Xcode tab bar style, we use default toolbar background with - // line separator. - self.window?.titlebarSeparatorStyle = .automatic - } + } else { self.window?.titlebarSeparatorStyle = .automatic } + // In Xcode tab bar style, we use default toolbar background with + // line separator. self.window?.toolbar = toolbar } // MARK: - Toolbar func toolbarDefaultItemIdentifiers(_ toolbar: NSToolbar) -> [NSToolbarItem.Identifier] { - [ + return [ .toggleFirstSidebarItem, .sidebarTrackingSeparator, .branchPicker, @@ -165,6 +158,22 @@ final class CodeEditWindowController: NSWindowController, NSToolbarDelegate, Obs ] } + func toggleToolbar() { + toolbarCollapsed.toggle() + updateToolbarVisibility() + } + + private func updateToolbarVisibility() { + if toolbarCollapsed { + window?.titleVisibility = .visible + window?.title = workspace?.workspaceFileManager?.folderUrl.lastPathComponent ?? "Empty" + window?.toolbar = nil + } else { + window?.titleVisibility = .hidden + setupToolbar() + } + } + func toolbar( _ toolbar: NSToolbar, itemForItemIdentifier itemIdentifier: NSToolbarItem.Identifier, @@ -172,9 +181,7 @@ final class CodeEditWindowController: NSWindowController, NSToolbarDelegate, Obs ) -> NSToolbarItem? { switch itemIdentifier { case .itemListTrackingSeparator: - guard let splitViewController else { - return nil - } + guard let splitViewController else { return nil } return NSTrackingSeparatorToolbarItem( identifier: .itemListTrackingSeparator, @@ -212,13 +219,12 @@ final class CodeEditWindowController: NSWindowController, NSToolbarDelegate, Obs case .branchPicker: let toolbarItem = NSToolbarItem(itemIdentifier: .branchPicker) let view = NSHostingView( - rootView: ToolbarBranchPicker( - workspaceFileManager: workspace?.workspaceFileManager - ) + rootView: ToolbarBranchPicker(workspaceFileManager: workspace?.workspaceFileManager) ) toolbarItem.view = view return toolbarItem + default: return NSToolbarItem(itemIdentifier: itemIdentifier) } diff --git a/CodeEdit/Features/WindowCommands/ViewCommands.swift b/CodeEdit/Features/WindowCommands/ViewCommands.swift index cd46e5e4b2..2dd9c6a477 100644 --- a/CodeEdit/Features/WindowCommands/ViewCommands.swift +++ b/CodeEdit/Features/WindowCommands/ViewCommands.swift @@ -36,6 +36,10 @@ struct ViewCommands: Commands { windowController?.navigatorCollapsed ?? false } + var toolbarCollapsed: Bool { + windowController?.toolbarCollapsed ?? false + } + var body: some Commands { CommandGroup(after: .toolbar) { Button("Show Command Palette") { @@ -108,6 +112,12 @@ struct ViewCommands: Commands { showEditorPathBar.toggle() } + Button("\(toolbarCollapsed ? "Show" : "Hide") Toolbar") { + windowController?.toggleToolbar() + print(toolbarCollapsed) + } + .keyboardShortcut("t", modifiers: [.option, .command]) + Toggle("Dim editors without focus", isOn: $dimEditorsWithoutFocus) Divider() From 608aafc98992b325fdd1ba57d82ce326ea8a3ca8 Mon Sep 17 00:00:00 2001 From: Roscoe Rubin-Rottenberg Date: Wed, 24 Apr 2024 18:40:46 -0400 Subject: [PATCH 2/3] removed debug funcs --- .../CodeEditWindowController.swift | 30 +++++++++++++------ .../WindowCommands/ViewCommands.swift | 14 +++++---- 2 files changed, 29 insertions(+), 15 deletions(-) diff --git a/CodeEdit/Features/Documents/Controllers/CodeEditWindowController.swift b/CodeEdit/Features/Documents/Controllers/CodeEditWindowController.swift index ee371b6903..477bd9d65b 100644 --- a/CodeEdit/Features/Documents/Controllers/CodeEditWindowController.swift +++ b/CodeEdit/Features/Documents/Controllers/CodeEditWindowController.swift @@ -32,7 +32,9 @@ final class CodeEditWindowController: NSWindowController, NSToolbarDelegate, Obs init(window: NSWindow, workspace: WorkspaceDocument) { super.init(window: window) self.workspace = workspace - self.workspaceSettings = CEWorkspaceSettings(workspaceDocument: workspace) + self.workspaceSettings = CEWorkspaceSettings( + workspaceDocument: workspace + ) setupSplitView(with: workspace) let view = CodeEditSplitView(controller: splitViewController).ignoresSafeArea() @@ -54,10 +56,14 @@ final class CodeEditWindowController: NSWindowController, NSToolbarDelegate, Obs registerCommands() } - deinit { cancellables.forEach({ $0.cancel() }) } + deinit { + cancellables.forEach({ $0.cancel() }) + } @available(*, unavailable) - required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } private func setupSplitView(with workspace: WorkspaceDocument) { let feedbackPerformer = NSHapticFeedbackManager.defaultPerformer @@ -127,16 +133,18 @@ final class CodeEditWindowController: NSWindowController, NSToolbarDelegate, Obs // Set titlebar background as transparent by default in order to // style the toolbar background in native tab bar style. self.window?.titlebarSeparatorStyle = .none - } else { self.window?.titlebarSeparatorStyle = .automatic } - // In Xcode tab bar style, we use default toolbar background with - // line separator. + } else { + // In Xcode tab bar style, we use default toolbar background with + // line separator. + self.window?.titlebarSeparatorStyle = .automatic + } self.window?.toolbar = toolbar } // MARK: - Toolbar func toolbarDefaultItemIdentifiers(_ toolbar: NSToolbar) -> [NSToolbarItem.Identifier] { - return [ + [ .toggleFirstSidebarItem, .sidebarTrackingSeparator, .branchPicker, @@ -181,7 +189,9 @@ final class CodeEditWindowController: NSWindowController, NSToolbarDelegate, Obs ) -> NSToolbarItem? { switch itemIdentifier { case .itemListTrackingSeparator: - guard let splitViewController else { return nil } + guard let splitViewController else { + return nil + } return NSTrackingSeparatorToolbarItem( identifier: .itemListTrackingSeparator, @@ -219,7 +229,9 @@ final class CodeEditWindowController: NSWindowController, NSToolbarDelegate, Obs case .branchPicker: let toolbarItem = NSToolbarItem(itemIdentifier: .branchPicker) let view = NSHostingView( - rootView: ToolbarBranchPicker(workspaceFileManager: workspace?.workspaceFileManager) + rootView: ToolbarBranchPicker( + workspaceFileManager: workspace?.workspaceFileManager + ) ) toolbarItem.view = view diff --git a/CodeEdit/Features/WindowCommands/ViewCommands.swift b/CodeEdit/Features/WindowCommands/ViewCommands.swift index 2dd9c6a477..1e3208291b 100644 --- a/CodeEdit/Features/WindowCommands/ViewCommands.swift +++ b/CodeEdit/Features/WindowCommands/ViewCommands.swift @@ -41,6 +41,7 @@ struct ViewCommands: Commands { } var body: some Commands { + CommandGroup(after: .toolbar) { Button("Show Command Palette") { NSApp.sendAction(#selector(CodeEditWindowController.openCommandPalette(_:)), to: nil, from: nil) @@ -94,6 +95,7 @@ struct ViewCommands: Commands { windowController = window?.windowController as? CodeEditWindowController } + Button("\(inspectorCollapsed ? "Show" : "Hide") Inspector") { windowController?.toggleLastPanel() } @@ -106,18 +108,18 @@ struct ViewCommands: Commands { .disabled(windowController == nil) .keyboardShortcut("y", modifiers: [.shift, .command]) + Button("\(navigatorCollapsed ? "Show" : "Hide") Toolbar") { + windowController?.toggleToolbar() + } + .disabled(windowController == nil) + .keyboardShortcut("t", modifiers: [.option, .command]) + Divider() Button("\(showEditorPathBar ? "Hide" : "Show") Path Bar") { showEditorPathBar.toggle() } - Button("\(toolbarCollapsed ? "Show" : "Hide") Toolbar") { - windowController?.toggleToolbar() - print(toolbarCollapsed) - } - .keyboardShortcut("t", modifiers: [.option, .command]) - Toggle("Dim editors without focus", isOn: $dimEditorsWithoutFocus) Divider() From cb02e05658286386001f3d49685cab662ae6382c Mon Sep 17 00:00:00 2001 From: Roscoe Rubin-Rottenberg Date: Wed, 24 Apr 2024 22:05:41 -0400 Subject: [PATCH 3/3] fix swiftlint violations --- .../Controllers/CodeEditWindowController.swift | 12 +++--------- CodeEdit/Features/WindowCommands/ViewCommands.swift | 1 - 2 files changed, 3 insertions(+), 10 deletions(-) diff --git a/CodeEdit/Features/Documents/Controllers/CodeEditWindowController.swift b/CodeEdit/Features/Documents/Controllers/CodeEditWindowController.swift index 477bd9d65b..26c9955440 100644 --- a/CodeEdit/Features/Documents/Controllers/CodeEditWindowController.swift +++ b/CodeEdit/Features/Documents/Controllers/CodeEditWindowController.swift @@ -32,9 +32,7 @@ final class CodeEditWindowController: NSWindowController, NSToolbarDelegate, Obs init(window: NSWindow, workspace: WorkspaceDocument) { super.init(window: window) self.workspace = workspace - self.workspaceSettings = CEWorkspaceSettings( - workspaceDocument: workspace - ) + self.workspaceSettings = CEWorkspaceSettings(workspaceDocument: workspace) setupSplitView(with: workspace) let view = CodeEditSplitView(controller: splitViewController).ignoresSafeArea() @@ -56,9 +54,7 @@ final class CodeEditWindowController: NSWindowController, NSToolbarDelegate, Obs registerCommands() } - deinit { - cancellables.forEach({ $0.cancel() }) - } + deinit { cancellables.forEach({ $0.cancel() }) } @available(*, unavailable) required init?(coder: NSCoder) { @@ -189,9 +185,7 @@ final class CodeEditWindowController: NSWindowController, NSToolbarDelegate, Obs ) -> NSToolbarItem? { switch itemIdentifier { case .itemListTrackingSeparator: - guard let splitViewController else { - return nil - } + guard let splitViewController else { return nil } return NSTrackingSeparatorToolbarItem( identifier: .itemListTrackingSeparator, diff --git a/CodeEdit/Features/WindowCommands/ViewCommands.swift b/CodeEdit/Features/WindowCommands/ViewCommands.swift index 1e3208291b..8113439f78 100644 --- a/CodeEdit/Features/WindowCommands/ViewCommands.swift +++ b/CodeEdit/Features/WindowCommands/ViewCommands.swift @@ -95,7 +95,6 @@ struct ViewCommands: Commands { windowController = window?.windowController as? CodeEditWindowController } - Button("\(inspectorCollapsed ? "Show" : "Hide") Inspector") { windowController?.toggleLastPanel() }