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

View File

@@ -47,6 +47,7 @@
EC6E3BD72C43C6A400DD20F3 /* Application.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC6E3BD62C43C6A400DD20F3 /* Application.swift */; };
EC6E3BD92C43C6C000DD20F3 /* OnDismissSearchViewModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC6E3BD82C43C6C000DD20F3 /* OnDismissSearchViewModifier.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 */; };
EC7F6BF02BE5E6E400A34A7B /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = EC7F6BEF2BE5E6E400A34A7B /* 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>"; };
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>"; };
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; };
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>"; };
@@ -519,6 +521,14 @@
path = Algorithms;
sourceTree = "<group>";
};
EC6E3BDD2C43D5A500DD20F3 /* SidebarVisibility */ = {
isa = PBXGroup;
children = (
EC6E3BDC2C43D5A500DD20F3 /* SidebarVisibility.swift */,
);
path = SidebarVisibility;
sourceTree = "<group>";
};
EC7F6BDF2BE5E6E300A34A7B = {
isa = PBXGroup;
children = (
@@ -989,6 +999,7 @@
ECF7B2E52C391DFA004D2C57 /* Utilies */ = {
isa = PBXGroup;
children = (
EC6E3BDD2C43D5A500DD20F3 /* SidebarVisibility */,
EC2002EE2C417BBF002EBD5F /* AppScene */,
ECF7B2CF2C39169C004D2C57 /* Extensions */,
ECF7B2E22C39172D004D2C57 /* Platform */,
@@ -1133,6 +1144,7 @@
ECA738DA2BE60FF100A4542E /* CacheRenderPass.swift in Sources */,
ECF7B2DA2C39169C004D2C57 /* Float++.swift in Sources */,
ECA738CD2BE60F2F00A4542E /* PointGridContext.swift in Sources */,
EC6E3BDE2C43D5A500DD20F3 /* SidebarVisibility.swift in Sources */,
ECFA15202BEF21EF00455818 /* MemoObject.swift in Sources */,
ECE883C12C00C9CB0045C53D /* StrokeStyle.swift in Sources */,
EC37FB122C1B2DD90008D976 /* ToolSelection.swift in Sources */,

View File

@@ -9,7 +9,7 @@ import Combine
import SwiftUI
final class Application: NSObject, ObservableObject {
@Published private(set) var sidebarVisibility: SidebarVisibility = .shown
}
extension Application {
@@ -23,6 +23,18 @@ extension Application {
#warning("TODO: implement for ipad")
#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)

View File

@@ -11,7 +11,7 @@ import CoreData
import Foundation
final class Tool: NSObject, ObservableObject {
private let object: ToolObject
let object: ToolObject
@Published var pens: [Pen] = []

View File

@@ -11,6 +11,7 @@ struct DashboardView: View {
@Environment(\.horizontalSizeClass) private var horizontalSizeClass
@StateObject private var memoManager: MemoManager = .shared
@EnvironmentObject private var application: Application
@State private var sidebarItem: SidebarItem? = .memos
@AppStorage("memola.app.scene.side-bar.column-visibility") private var columnVisibility: NavigationSplitViewVisibility = .all
@@ -45,6 +46,9 @@ struct DashboardView: View {
.transition(.move(edge: .bottom))
}
}
.onChange(of: columnVisibility) { oldValue, newValue in
application.changeSidebarVisibility(newValue == .all ? .shown : .hidden)
}
#else
NavigationSplitView(columnVisibility: $columnVisibility) {
Sidebar(sidebarItem: $sidebarItem, horizontalSizeClass: horizontalSizeClass)

View File

@@ -17,7 +17,7 @@ struct ViewCommands: Commands {
var body: some Commands {
CommandGroup(replacing: .toolbar) {
if appScene == .trash || appScene == .memos {
if appScene == .memos || appScene == .trash {
Button {
application.activateSearchBar()
} label: {
@@ -25,6 +25,19 @@ struct ViewCommands: Commands {
}
.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])
}
}
}
}