diff --git a/Memola.xcodeproj/project.pbxproj b/Memola.xcodeproj/project.pbxproj index 7f19d8e..9b61856 100644 --- a/Memola.xcodeproj/project.pbxproj +++ b/Memola.xcodeproj/project.pbxproj @@ -37,7 +37,6 @@ EC2BEBF82C0F601A005DB0AF /* Node.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC2BEBF72C0F601A005DB0AF /* Node.swift */; }; EC35655A2BF060D900A4E0BF /* Quad.metal in Sources */ = {isa = PBXBuildFile; fileRef = EC3565592BF060D900A4E0BF /* Quad.metal */; }; EC37FB122C1B2DD90008D976 /* ToolSelection.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC37FB112C1B2DD90008D976 /* ToolSelection.swift */; }; - EC3D67CC2C3AAD5E00359400 /* MemoManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC3D67CB2C3AAD5E00359400 /* MemoManager.swift */; }; EC42F7852C25267000E86E96 /* ElementGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC42F7842C25267000E86E96 /* ElementGroup.swift */; }; EC4538892BEBCAE000A86FEC /* Quad.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC4538882BEBCAE000A86FEC /* Quad.swift */; }; EC5050072BF65CED00B4D86E /* PenDropDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC5050062BF65CED00B4D86E /* PenDropDelegate.swift */; }; @@ -175,7 +174,6 @@ EC2BEBF72C0F601A005DB0AF /* Node.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Node.swift; sourceTree = ""; }; EC3565592BF060D900A4E0BF /* Quad.metal */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.metal; path = Quad.metal; sourceTree = ""; }; EC37FB112C1B2DD90008D976 /* ToolSelection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ToolSelection.swift; sourceTree = ""; }; - EC3D67CB2C3AAD5E00359400 /* MemoManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MemoManager.swift; sourceTree = ""; }; EC42F7842C25267000E86E96 /* ElementGroup.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ElementGroup.swift; sourceTree = ""; }; EC4538882BEBCAE000A86FEC /* Quad.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Quad.swift; sourceTree = ""; }; EC5050062BF65CED00B4D86E /* PenDropDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PenDropDelegate.swift; sourceTree = ""; }; @@ -309,7 +307,6 @@ EC01511C2C305C99008A115E /* Dashboard */ = { isa = PBXGroup; children = ( - EC3D67CB2C3AAD5E00359400 /* MemoManager.swift */, EC01511D2C305CA9008A115E /* DashboardView.swift */, ); path = Dashboard; @@ -1123,7 +1120,6 @@ EC01511E2C305CA9008A115E /* DashboardView.swift in Sources */, EC8F54AE2C2AF5A4001C7C74 /* LineGridVertex.swift in Sources */, EC2002F02C417BF1002EBD5F /* ActiveSceneKey.swift in Sources */, - EC3D67CC2C3AAD5E00359400 /* MemoManager.swift in Sources */, EC2002E12C416470002EBD5F /* Shortcut.swift in Sources */, EC5E83902BFDB69C00261D9C /* MovingAverage.swift in Sources */, ECFA15262BEF224900455818 /* StrokeObject.swift in Sources */, diff --git a/Memola/App/Application.swift b/Memola/App/Application.swift index acbbaf5..84a91f9 100644 --- a/Memola/App/Application.swift +++ b/Memola/App/Application.swift @@ -9,9 +9,24 @@ import Combine import SwiftUI final class Application: NSObject, ObservableObject { + @Published var memoObject: MemoObject? @Published private(set) var sidebarVisibility: SidebarVisibility = .shown } +extension Application { + func openMemo(_ memoObject: MemoObject?) { + withAnimation(.easeOut) { + self.memoObject = memoObject + } + } + + func closeMemo() { + withAnimation(.easeOut) { + self.memoObject = nil + } + } +} + extension Application { func activateSearchBar() { #if os(macOS) diff --git a/Memola/Features/Dashboard/Dashboard/DashboardView.swift b/Memola/Features/Dashboard/Dashboard/DashboardView.swift index 05a0ece..a007ab7 100644 --- a/Memola/Features/Dashboard/Dashboard/DashboardView.swift +++ b/Memola/Features/Dashboard/Dashboard/DashboardView.swift @@ -10,7 +10,6 @@ import SwiftUI 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 @@ -32,10 +31,10 @@ struct DashboardView: View { MemosView() } } - .toolbar(memoManager.memoObject == nil ? .visible : .hidden, for: .windowToolbar) - .toolbarBackground(memoManager.memoObject == nil ? .clear : Color(nsColor: .windowBackgroundColor), for: .windowToolbar) + .toolbar(application.memoObject == nil ? .visible : .hidden, for: .windowToolbar) + .toolbarBackground(application.memoObject == nil ? .clear : Color(nsColor: .windowBackgroundColor), for: .windowToolbar) .overlay { - if let memo = memoManager.memoObject { + if let memo = application.memoObject { MemoView(memo: memo) .onDisappear { withPersistence(\.viewContext) { context in @@ -62,7 +61,7 @@ struct DashboardView: View { MemosView() } } - .fullScreenCover(item: $memoManager.memoObject) { memo in + .fullScreenCover(item: $application.memoObject) { memo in MemoView(memo: memo) .onDisappear { withPersistence(\.viewContext) { context in diff --git a/Memola/Features/Dashboard/Dashboard/MemoManager.swift b/Memola/Features/Dashboard/Dashboard/MemoManager.swift deleted file mode 100644 index 4713583..0000000 --- a/Memola/Features/Dashboard/Dashboard/MemoManager.swift +++ /dev/null @@ -1,38 +0,0 @@ -// -// MemoManager.swift -// Memola -// -// Created by Dscyre Scotti on 7/7/24. -// - -import SwiftUI -import Foundation - -#warning("TODO: use environmnet instead of singleton") -class MemoManager: ObservableObject { - static let shared: MemoManager = .init() - - @Published var memoObject: MemoObject? - - private init() { } - - func openMemo(_ memoObject: MemoObject?) { - #if os(macOS) - withAnimation(.easeOut) { - self.memoObject = memoObject - } - #else - self.memoObject = memoObject - #endif - } - - func closeMemo() { - #if os(macOS) - withAnimation(.easeOut) { - self.memoObject = nil - } - #else - self.memoObject = nil - #endif - } -} diff --git a/Memola/Features/Dashboard/Details/Memos/MemosView.swift b/Memola/Features/Dashboard/Details/Memos/MemosView.swift index 78c597b..d40aa0e 100644 --- a/Memola/Features/Dashboard/Details/Memos/MemosView.swift +++ b/Memola/Features/Dashboard/Details/Memos/MemosView.swift @@ -11,6 +11,8 @@ struct MemosView: View { @Environment(\.shortcut) private var shortcut @Environment(\.horizontalSizeClass) private var horizontalSizeClass + @EnvironmentObject private var application: Application + @FetchRequest private var memoObjects: FetchedResults @State private var query: String = "" @@ -259,7 +261,7 @@ struct MemosView: View { } private func openMemo(for memo: MemoObject) { - MemoManager.shared.openMemo(memo) + application.openMemo(memo) } private func updatePredicate() { @@ -291,7 +293,7 @@ struct MemosView: View { private func handleShortcut(for shortcut: Shortcuts) { switch shortcut { case .newMemo: - if MemoManager.shared.memoObject == nil { + if application.memoObject == nil { createMemo(title: "Untitled") } default: diff --git a/Memola/Features/Dashboard/Details/Trash/TrashView.swift b/Memola/Features/Dashboard/Details/Trash/TrashView.swift index 3336c90..a3f9f8d 100644 --- a/Memola/Features/Dashboard/Details/Trash/TrashView.swift +++ b/Memola/Features/Dashboard/Details/Trash/TrashView.swift @@ -11,6 +11,8 @@ struct TrashView: View { @Environment(\.shortcut) private var shortcut @Environment(\.horizontalSizeClass) private var horizontalSizeClass + @EnvironmentObject private var application: Application + @FetchRequest private var memoObjects: FetchedResults @State private var query: String = "" @@ -152,7 +154,7 @@ struct TrashView: View { restoreMemo(for: memo) self.sidebarItem = .memos if let memo { - MemoManager.shared.openMemo(memo) + application.openMemo(memo) } } diff --git a/Memola/Features/Memo/Toolbar/Toolbar.swift b/Memola/Features/Memo/Toolbar/Toolbar.swift index fb4be13..52cf9c9 100644 --- a/Memola/Features/Memo/Toolbar/Toolbar.swift +++ b/Memola/Features/Memo/Toolbar/Toolbar.swift @@ -12,6 +12,10 @@ struct Toolbar: View { @Environment(\.dismiss) private var dismiss @Environment(\.horizontalSizeClass) private var horizontalSizeClass + #if os(macOS) + @EnvironmentObject private var application: Application + #endif + @ObservedObject private var tool: Tool @ObservedObject private var canvas: Canvas @ObservedObject private var history: History @@ -186,7 +190,7 @@ struct Toolbar: View { private func closeMemo() { canvas.save(for: memo) { #if os(macOS) - MemoManager.shared.closeMemo() + application.closeMemo() #else dismiss() #endif