feat: add toggle sidebar command

This commit is contained in:
dscyrescotti
2024-07-14 16:53:16 +07:00
parent 9b9ccf2a86
commit a286f7d853
5 changed files with 44 additions and 3 deletions
+12
View File
@@ -47,6 +47,7 @@
EC6E3BD72C43C6A400DD20F3 /* Application.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC6E3BD62C43C6A400DD20F3 /* Application.swift */; }; EC6E3BD72C43C6A400DD20F3 /* Application.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC6E3BD62C43C6A400DD20F3 /* Application.swift */; };
EC6E3BD92C43C6C000DD20F3 /* OnDismissSearchViewModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC6E3BD82C43C6C000DD20F3 /* OnDismissSearchViewModifier.swift */; }; EC6E3BD92C43C6C000DD20F3 /* OnDismissSearchViewModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC6E3BD82C43C6C000DD20F3 /* OnDismissSearchViewModifier.swift */; };
EC6E3BDB2C43C78700DD20F3 /* NavigationSplitViewVisibility++.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC6E3BDA2C43C78700DD20F3 /* NavigationSplitViewVisibility++.swift */; }; EC6E3BDB2C43C78700DD20F3 /* NavigationSplitViewVisibility++.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC6E3BDA2C43C78700DD20F3 /* NavigationSplitViewVisibility++.swift */; };
EC6E3BDE2C43D5A500DD20F3 /* SidebarVisibility.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC6E3BDC2C43D5A500DD20F3 /* SidebarVisibility.swift */; };
EC7F6BEC2BE5E6E300A34A7B /* MemolaApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC7F6BEB2BE5E6E300A34A7B /* MemolaApp.swift */; }; EC7F6BEC2BE5E6E300A34A7B /* MemolaApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC7F6BEB2BE5E6E300A34A7B /* MemolaApp.swift */; };
EC7F6BF02BE5E6E400A34A7B /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = EC7F6BEF2BE5E6E400A34A7B /* Assets.xcassets */; }; EC7F6BF02BE5E6E400A34A7B /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = EC7F6BEF2BE5E6E400A34A7B /* Assets.xcassets */; };
EC7F6BF32BE5E6E400A34A7B /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = EC7F6BF22BE5E6E400A34A7B /* Preview Assets.xcassets */; }; EC7F6BF32BE5E6E400A34A7B /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = EC7F6BF22BE5E6E400A34A7B /* Preview Assets.xcassets */; };
@@ -185,6 +186,7 @@
EC6E3BD62C43C6A400DD20F3 /* Application.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Application.swift; sourceTree = "<group>"; }; EC6E3BD62C43C6A400DD20F3 /* Application.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Application.swift; sourceTree = "<group>"; };
EC6E3BD82C43C6C000DD20F3 /* OnDismissSearchViewModifier.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OnDismissSearchViewModifier.swift; sourceTree = "<group>"; }; EC6E3BD82C43C6C000DD20F3 /* OnDismissSearchViewModifier.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OnDismissSearchViewModifier.swift; sourceTree = "<group>"; };
EC6E3BDA2C43C78700DD20F3 /* NavigationSplitViewVisibility++.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NavigationSplitViewVisibility++.swift"; sourceTree = "<group>"; }; EC6E3BDA2C43C78700DD20F3 /* NavigationSplitViewVisibility++.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NavigationSplitViewVisibility++.swift"; sourceTree = "<group>"; };
EC6E3BDC2C43D5A500DD20F3 /* SidebarVisibility.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SidebarVisibility.swift; sourceTree = "<group>"; };
EC7F6BE82BE5E6E300A34A7B /* Memola.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Memola.app; sourceTree = BUILT_PRODUCTS_DIR; }; EC7F6BE82BE5E6E300A34A7B /* Memola.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Memola.app; sourceTree = BUILT_PRODUCTS_DIR; };
EC7F6BEB2BE5E6E300A34A7B /* MemolaApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MemolaApp.swift; sourceTree = "<group>"; }; EC7F6BEB2BE5E6E300A34A7B /* MemolaApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MemolaApp.swift; sourceTree = "<group>"; };
EC7F6BEF2BE5E6E400A34A7B /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; }; EC7F6BEF2BE5E6E400A34A7B /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
@@ -519,6 +521,14 @@
path = Algorithms; path = Algorithms;
sourceTree = "<group>"; sourceTree = "<group>";
}; };
EC6E3BDD2C43D5A500DD20F3 /* SidebarVisibility */ = {
isa = PBXGroup;
children = (
EC6E3BDC2C43D5A500DD20F3 /* SidebarVisibility.swift */,
);
path = SidebarVisibility;
sourceTree = "<group>";
};
EC7F6BDF2BE5E6E300A34A7B = { EC7F6BDF2BE5E6E300A34A7B = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
@@ -989,6 +999,7 @@
ECF7B2E52C391DFA004D2C57 /* Utilies */ = { ECF7B2E52C391DFA004D2C57 /* Utilies */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
EC6E3BDD2C43D5A500DD20F3 /* SidebarVisibility */,
EC2002EE2C417BBF002EBD5F /* AppScene */, EC2002EE2C417BBF002EBD5F /* AppScene */,
ECF7B2CF2C39169C004D2C57 /* Extensions */, ECF7B2CF2C39169C004D2C57 /* Extensions */,
ECF7B2E22C39172D004D2C57 /* Platform */, ECF7B2E22C39172D004D2C57 /* Platform */,
@@ -1133,6 +1144,7 @@
ECA738DA2BE60FF100A4542E /* CacheRenderPass.swift in Sources */, ECA738DA2BE60FF100A4542E /* CacheRenderPass.swift in Sources */,
ECF7B2DA2C39169C004D2C57 /* Float++.swift in Sources */, ECF7B2DA2C39169C004D2C57 /* Float++.swift in Sources */,
ECA738CD2BE60F2F00A4542E /* PointGridContext.swift in Sources */, ECA738CD2BE60F2F00A4542E /* PointGridContext.swift in Sources */,
EC6E3BDE2C43D5A500DD20F3 /* SidebarVisibility.swift in Sources */,
ECFA15202BEF21EF00455818 /* MemoObject.swift in Sources */, ECFA15202BEF21EF00455818 /* MemoObject.swift in Sources */,
ECE883C12C00C9CB0045C53D /* StrokeStyle.swift in Sources */, ECE883C12C00C9CB0045C53D /* StrokeStyle.swift in Sources */,
EC37FB122C1B2DD90008D976 /* ToolSelection.swift in Sources */, EC37FB122C1B2DD90008D976 /* ToolSelection.swift in Sources */,
+13 -1
View File
@@ -9,7 +9,7 @@ import Combine
import SwiftUI import SwiftUI
final class Application: NSObject, ObservableObject { final class Application: NSObject, ObservableObject {
@Published private(set) var sidebarVisibility: SidebarVisibility = .shown
} }
extension Application { extension Application {
@@ -23,6 +23,18 @@ extension Application {
#warning("TODO: implement for ipad") #warning("TODO: implement for ipad")
#endif #endif
} }
func toggleSidebar() {
#if os(macOS)
NSApp.sendAction(#selector(NSSplitViewController.toggleSidebar(_:)), to: nil, from: nil)
#else
#warning("TODO: implement for ipad")
#endif
}
func changeSidebarVisibility(_ visibility: SidebarVisibility) {
self.sidebarVisibility = visibility
}
} }
#if os(macOS) #if os(macOS)
+1 -1
View File
@@ -11,7 +11,7 @@ import CoreData
import Foundation import Foundation
final class Tool: NSObject, ObservableObject { final class Tool: NSObject, ObservableObject {
private let object: ToolObject let object: ToolObject
@Published var pens: [Pen] = [] @Published var pens: [Pen] = []
@@ -11,6 +11,7 @@ struct DashboardView: View {
@Environment(\.horizontalSizeClass) private var horizontalSizeClass @Environment(\.horizontalSizeClass) private var horizontalSizeClass
@StateObject private var memoManager: MemoManager = .shared @StateObject private var memoManager: MemoManager = .shared
@EnvironmentObject private var application: Application
@State private var sidebarItem: SidebarItem? = .memos @State private var sidebarItem: SidebarItem? = .memos
@AppStorage("memola.app.scene.side-bar.column-visibility") private var columnVisibility: NavigationSplitViewVisibility = .all @AppStorage("memola.app.scene.side-bar.column-visibility") private var columnVisibility: NavigationSplitViewVisibility = .all
@@ -45,6 +46,9 @@ struct DashboardView: View {
.transition(.move(edge: .bottom)) .transition(.move(edge: .bottom))
} }
} }
.onChange(of: columnVisibility) { oldValue, newValue in
application.changeSidebarVisibility(newValue == .all ? .shown : .hidden)
}
#else #else
NavigationSplitView(columnVisibility: $columnVisibility) { NavigationSplitView(columnVisibility: $columnVisibility) {
Sidebar(sidebarItem: $sidebarItem, horizontalSizeClass: horizontalSizeClass) Sidebar(sidebarItem: $sidebarItem, horizontalSizeClass: horizontalSizeClass)
+14 -1
View File
@@ -17,7 +17,7 @@ struct ViewCommands: Commands {
var body: some Commands { var body: some Commands {
CommandGroup(replacing: .toolbar) { CommandGroup(replacing: .toolbar) {
if appScene == .trash || appScene == .memos { if appScene == .memos || appScene == .trash {
Button { Button {
application.activateSearchBar() application.activateSearchBar()
} label: { } label: {
@@ -25,6 +25,19 @@ struct ViewCommands: Commands {
} }
.keyboardShortcut("f", modifiers: [.command]) .keyboardShortcut("f", modifiers: [.command])
} }
if appScene == .memos || appScene == .trash {
Button {
application.toggleSidebar()
} label: {
switch application.sidebarVisibility {
case .shown:
Text("Hide Sidebar")
case .hidden:
Text("Show Sidebar")
}
}
.keyboardShortcut("o", modifiers: [.command])
}
} }
} }
} }