From 24b8e483b98abaf43c0879fa3aa49d8d706119fc Mon Sep 17 00:00:00 2001 From: Wouter01 Date: Thu, 23 Mar 2023 15:25:41 +0100 Subject: [PATCH 1/4] Fixed inspector not toggling Signed-off-by: Wouter01 --- .../CodeEditWindowController.swift | 21 +++++++++++++--- .../WindowCommands/ViewCommands.swift | 24 +++++++++++++++++++ 2 files changed, 42 insertions(+), 3 deletions(-) diff --git a/CodeEdit/Features/Documents/Controllers/CodeEditWindowController.swift b/CodeEdit/Features/Documents/Controllers/CodeEditWindowController.swift index 0068d9d8a7..34b27c6b2c 100644 --- a/CodeEdit/Features/Documents/Controllers/CodeEditWindowController.swift +++ b/CodeEdit/Features/Documents/Controllers/CodeEditWindowController.swift @@ -8,16 +8,21 @@ import Cocoa import SwiftUI -final class CodeEditWindowController: NSWindowController, NSToolbarDelegate { +final class CodeEditWindowController: NSWindowController, NSToolbarDelegate, ObservableObject { static let minSidebarWidth: CGFloat = 242 + @Published var navigatorCollapsed = false + @Published var inspectorCollapsed = false + + var observers: [NSKeyValueObservation] = [] + private var prefs: AppPreferencesModel = .shared var workspace: WorkspaceDocument? var quickOpenPanel: OverlayPanel? var commandPalettePanel: OverlayPanel? - private var splitViewController: NSSplitViewController! + var splitViewController: NSSplitViewController! init(window: NSWindow, workspace: WorkspaceDocument) { super.init(window: window) @@ -31,6 +36,15 @@ final class CodeEditWindowController: NSWindowController, NSToolbarDelegate { // This allows us to use some SwiftUI features, like focusedSceneObject. contentViewController = NSHostingController(rootView: view) + observers = [ + splitViewController.splitViewItems.first!.observe(\.isCollapsed, changeHandler: { [weak self] item, value in + self?.navigatorCollapsed = item.isCollapsed + }), + splitViewController.splitViewItems.last!.observe(\.isCollapsed, changeHandler: { [weak self] item, value in + self?.navigatorCollapsed = item.isCollapsed + }) + ] + setupToolbar() registerCommands() } @@ -298,7 +312,8 @@ extension CodeEditWindowController { func toggleLastPanel() { guard let lastSplitView = splitViewController.splitViewItems.last else { return } - if lastSplitView.isCollapsed { + + if let toolbar = window?.toolbar, lastSplitView.isCollapsed, !toolbar.items.map(\.itemIdentifier).contains(.itemListTrackingSeparator) { window?.toolbar?.insertItem(withItemIdentifier: .itemListTrackingSeparator, at: 4) } NSAnimationContext.runAnimationGroup { _ in diff --git a/CodeEdit/Features/WindowCommands/ViewCommands.swift b/CodeEdit/Features/WindowCommands/ViewCommands.swift index 4990319ff4..242f7d6b4a 100644 --- a/CodeEdit/Features/WindowCommands/ViewCommands.swift +++ b/CodeEdit/Features/WindowCommands/ViewCommands.swift @@ -9,6 +9,15 @@ import SwiftUI struct ViewCommands: Commands { private var prefs: AppPreferencesModel = .shared + @State var windowController: CodeEditWindowController? + + var navigatorCollapsed: Bool { + windowController?.navigatorCollapsed ?? false + } + + var inspectorCollapsed: Bool { + windowController?.navigatorCollapsed ?? false + } var body: some Commands { CommandGroup(after: .toolbar) { @@ -33,6 +42,21 @@ struct ViewCommands: Commands { } .disabled(true) + + Button("\(navigatorCollapsed ? "Show" : "Hide") Navigator") { + windowController?.toggleFirstPanel() + } + .disabled(windowController == nil) + .keyboardShortcut("s", modifiers: [.control, .command]) + .onReceive(NSApp.publisher(for: \.keyWindow)) { window in + windowController = window?.windowController as? CodeEditWindowController + } + + Button("\(inspectorCollapsed ? "Show" : "Hide") Inspector") { + windowController?.toggleLastPanel() + } + .disabled(windowController == nil) + .keyboardShortcut("i", modifiers: [.control, .command]) } } } From b155c1ed84b10ce6c35d132477dce925a8e2bdb8 Mon Sep 17 00:00:00 2001 From: Wouter01 Date: Thu, 23 Mar 2023 15:28:31 +0100 Subject: [PATCH 2/4] Removed old sidebar command Signed-off-by: Wouter01 --- CodeEdit/Features/WindowCommands/CodeEditCommands.swift | 1 - CodeEdit/Features/WindowCommands/ViewCommands.swift | 2 ++ 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CodeEdit/Features/WindowCommands/CodeEditCommands.swift b/CodeEdit/Features/WindowCommands/CodeEditCommands.swift index bfa086d757..384f05a173 100644 --- a/CodeEdit/Features/WindowCommands/CodeEditCommands.swift +++ b/CodeEdit/Features/WindowCommands/CodeEditCommands.swift @@ -12,7 +12,6 @@ struct CodeEditCommands: Commands { var body: some Commands { MainCommands() FileCommands() - SidebarCommands() ViewCommands() FindCommands() NavigateCommands() diff --git a/CodeEdit/Features/WindowCommands/ViewCommands.swift b/CodeEdit/Features/WindowCommands/ViewCommands.swift index 242f7d6b4a..0a5cd954bc 100644 --- a/CodeEdit/Features/WindowCommands/ViewCommands.swift +++ b/CodeEdit/Features/WindowCommands/ViewCommands.swift @@ -43,6 +43,8 @@ struct ViewCommands: Commands { } .disabled(true) + Divider() + Button("\(navigatorCollapsed ? "Show" : "Hide") Navigator") { windowController?.toggleFirstPanel() } From ed2741f07c503403a7f766f9e052598b39e1438f Mon Sep 17 00:00:00 2001 From: Wouter01 Date: Thu, 23 Mar 2023 15:33:04 +0100 Subject: [PATCH 3/4] Fix warning Signed-off-by: Wouter01 --- .../Documents/Controllers/CodeEditWindowController.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CodeEdit/Features/Documents/Controllers/CodeEditWindowController.swift b/CodeEdit/Features/Documents/Controllers/CodeEditWindowController.swift index 34b27c6b2c..701c3e70b5 100644 --- a/CodeEdit/Features/Documents/Controllers/CodeEditWindowController.swift +++ b/CodeEdit/Features/Documents/Controllers/CodeEditWindowController.swift @@ -37,10 +37,10 @@ final class CodeEditWindowController: NSWindowController, NSToolbarDelegate, Obs contentViewController = NSHostingController(rootView: view) observers = [ - splitViewController.splitViewItems.first!.observe(\.isCollapsed, changeHandler: { [weak self] item, value in + splitViewController.splitViewItems.first!.observe(\.isCollapsed, changeHandler: { [weak self] item, _ in self?.navigatorCollapsed = item.isCollapsed }), - splitViewController.splitViewItems.last!.observe(\.isCollapsed, changeHandler: { [weak self] item, value in + splitViewController.splitViewItems.last!.observe(\.isCollapsed, changeHandler: { [weak self] item, _ in self?.navigatorCollapsed = item.isCollapsed }) ] From 352e9c324b0d7a4084cabeb2ccfdf2056698f6c5 Mon Sep 17 00:00:00 2001 From: Wouter01 Date: Thu, 23 Mar 2023 15:34:53 +0100 Subject: [PATCH 4/4] fix warning Signed-off-by: Wouter01 --- .../Documents/Controllers/CodeEditWindowController.swift | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/CodeEdit/Features/Documents/Controllers/CodeEditWindowController.swift b/CodeEdit/Features/Documents/Controllers/CodeEditWindowController.swift index 701c3e70b5..696631917d 100644 --- a/CodeEdit/Features/Documents/Controllers/CodeEditWindowController.swift +++ b/CodeEdit/Features/Documents/Controllers/CodeEditWindowController.swift @@ -312,8 +312,9 @@ extension CodeEditWindowController { func toggleLastPanel() { guard let lastSplitView = splitViewController.splitViewItems.last else { return } - - if let toolbar = window?.toolbar, lastSplitView.isCollapsed, !toolbar.items.map(\.itemIdentifier).contains(.itemListTrackingSeparator) { + if let toolbar = window?.toolbar, + lastSplitView.isCollapsed, + !toolbar.items.map(\.itemIdentifier).contains(.itemListTrackingSeparator) { window?.toolbar?.insertItem(withItemIdentifier: .itemListTrackingSeparator, at: 4) } NSAnimationContext.runAnimationGroup { _ in