diff --git a/MacNearFuture/AboutView.swift b/MacNearFuture/AboutView.swift new file mode 100644 index 0000000..1b3fc9f --- /dev/null +++ b/MacNearFuture/AboutView.swift @@ -0,0 +1,40 @@ +// +// AboutView.swift +// MacNearFuture +// +// Created by neon443 on 28/05/2025. +// + +import SwiftUI + +struct AboutView: View { + var body: some View { + VStack(alignment: .center) { + Image(nsImage: #imageLiteral(resourceName: "NearFutureIcon.png")) + .resizable() + .scaledToFit() + .frame(width: 100) + .clipShape(RoundedRectangle(cornerRadius: 25)) + Text("Near Future") + .bold() + .monospaced() + .font(.title) + Text("Version " + getVersion() + " (\(getBuildID()))") + .padding(.bottom) + Text("© 2024-2025 neon443, Inc") + .padding(.bottom) + Link("Developer Website", destination: URL(string: "https://neon443.xyz")!) + } + .padding() + .padding() + .containerBackground(.ultraThinMaterial, for: .window) + .toolbar(removing: .title) + .toolbarBackground(.hidden, for: .windowToolbar) + .windowMinimizeBehavior(.disabled) + .windowFullScreenBehavior(.disabled) + } +} + +#Preview { + AboutView() +} diff --git a/MacNearFuture/MacNearFutureApp.swift b/MacNearFuture/MacNearFutureApp.swift index 4094aa6..8e38e6a 100644 --- a/MacNearFuture/MacNearFutureApp.swift +++ b/MacNearFuture/MacNearFutureApp.swift @@ -10,6 +10,7 @@ import SwiftUI @main struct NearFutureApp: App { + @Environment(\.openWindow) var openWindow @StateObject var viewModel: EventViewModel = EventViewModel() @StateObject var settingsModel: SettingsViewModel = SettingsViewModel() @@ -22,13 +23,41 @@ struct NearFutureApp: App { } .defaultSize(width: 550, height: 650) .commands { + CommandGroup(replacing: CommandGroupPlacement.appInfo) { + Button("about nf") { + openWindow(id: "about") + } + } NearFutureCommands() } - Window("About Near Future", id: "about") { - + WindowGroup("edit Event", for: Event.ID.self) { $eventID in + EditEventView( + viewModel: viewModel, + event: Binding( + get: { + viewModel.events.first(where: {$0.id == eventID})! + }, + set: { newValue in + if let eventIndex = viewModel.events.firstIndex(where: { + $0.id == eventID + }) { + viewModel.events[eventIndex] = newValue + } + viewModel.saveEvents() + } + ) + ) } + Window("About Near Future", id: "about") { + AboutView() + } + .windowBackgroundDragBehavior(.enabled) + .windowResizability(.contentSize) + .restorationBehavior(.disabled) + .defaultPosition(UnitPoint.center) + Settings { Text("wip") } diff --git a/MacNearFuture/NFCommands.swift b/MacNearFuture/NFCommands.swift index b54851b..bc58a7e 100644 --- a/MacNearFuture/NFCommands.swift +++ b/MacNearFuture/NFCommands.swift @@ -10,6 +10,8 @@ import SwiftUI struct NearFutureCommands: Commands { var body: some Commands { - + CommandGroup(after: CommandGroupPlacement.appInfo) { + Text("hi") + } } } diff --git a/MacNearFuture/Views/EventListViewMac.swift b/MacNearFuture/Views/EventListViewMac.swift index 2398089..a8ac999 100644 --- a/MacNearFuture/Views/EventListViewMac.swift +++ b/MacNearFuture/Views/EventListViewMac.swift @@ -14,6 +14,8 @@ struct EventListView: View { @State var largeTick: Bool = false @State var hovering: Bool = false + @Environment(\.openWindow) var openWindow + var body: some View { ZStack { Color.black.opacity(hovering ? 0.5 : 0.0) @@ -130,6 +132,9 @@ struct EventListView: View { hovering.toggle() } } + .onTapGesture { + openWindow(value: event.id) + } .contextMenu() { Button(role: .destructive) { let eventToModify = viewModel.events.firstIndex() { currEvent in diff --git a/MacNearFuture/Views/Modification/EditEventViewMac.swift b/MacNearFuture/Views/Modification/EditEventViewMac.swift index 2348336..269194b 100644 --- a/MacNearFuture/Views/Modification/EditEventViewMac.swift +++ b/MacNearFuture/Views/Modification/EditEventViewMac.swift @@ -12,19 +12,6 @@ struct EditEventView: View { @ObservedObject var viewModel: EventViewModel @Binding var event: Event - fileprivate func saveEdits() { - //if there is an event in vM.events with the id of the event we r editing, - //firstindex - loops through the arr and finds first element where that events id matches editing event's id - if let index = viewModel.events.firstIndex(where: { xEvent in - xEvent.id == event.id - }) { - viewModel.events[index] = event - } - viewModel.saveEvents() - - dismiss() - } - var body: some View { AddEventView( viewModel: viewModel, @@ -42,7 +29,7 @@ struct EditEventView: View { .toolbar { ToolbarItem(placement: .primaryAction) { Button() { - saveEdits() + dismiss() } label: { Text("Done") .bold() diff --git a/NearFuture.xcodeproj/project.pbxproj b/NearFuture.xcodeproj/project.pbxproj index 11704b4..cc5191b 100644 --- a/NearFuture.xcodeproj/project.pbxproj +++ b/NearFuture.xcodeproj/project.pbxproj @@ -54,6 +54,8 @@ A98C20CC2DE730740008D61C /* EditEventViewMac.swift in Sources */ = {isa = PBXBuildFile; fileRef = A98C20C92DE730740008D61C /* EditEventViewMac.swift */; }; A98C20CE2DE7308E0008D61C /* ArchiveView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A98C20CD2DE7308E0008D61C /* ArchiveView.swift */; }; A98C20D02DE731BD0008D61C /* HomeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A98C20CF2DE731BD0008D61C /* HomeView.swift */; }; + A98C20D42DE7339E0008D61C /* AboutView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A98C20D32DE7339E0008D61C /* AboutView.swift */; }; + A98C20D52DE7339E0008D61C /* AboutView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A98C20D32DE7339E0008D61C /* AboutView.swift */; }; A9FC7EEA2D2823920020D75B /* NearFutureWidgets.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9FC7EE92D28238A0020D75B /* NearFutureWidgets.swift */; }; /* End PBXBuildFile section */ @@ -65,6 +67,13 @@ remoteGlobalIDString = A979F6012D270AF00094C0B3; remoteInfo = NearFutureWidgetsExtension; }; + A98C20D12DE732B10008D61C /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = A920C27C2D24011300E4F9B1 /* Project object */; + proxyType = 1; + remoteGlobalIDString = A979F6012D270AF00094C0B3; + remoteInfo = NearFutureWidgetsExtension; + }; /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -125,6 +134,7 @@ A98C20CA2DE730740008D61C /* EventListViewMac.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EventListViewMac.swift; sourceTree = ""; }; A98C20CD2DE7308E0008D61C /* ArchiveView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ArchiveView.swift; sourceTree = ""; }; A98C20CF2DE731BD0008D61C /* HomeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeView.swift; sourceTree = ""; }; + A98C20D32DE7339E0008D61C /* AboutView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AboutView.swift; sourceTree = ""; }; A9FC7EE92D28238A0020D75B /* NearFutureWidgets.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NearFutureWidgets.swift; sourceTree = ""; }; /* End PBXFileReference section */ @@ -168,6 +178,7 @@ isa = PBXGroup; children = ( A90D495A2DDE2EDB00781124 /* MacNearFutureApp.swift */, + A98C20D32DE7339E0008D61C /* AboutView.swift */, A90D495D2DDE3C7400781124 /* NFCommands.swift */, A90D493F2DDE10EC00781124 /* Views */, A90D49342DDE0FAF00781124 /* MacNearFuture.entitlements */, @@ -363,6 +374,7 @@ buildRules = ( ); dependencies = ( + A98C20D22DE732B10008D61C /* PBXTargetDependency */, A90D494D2DDE2C6000781124 /* PBXTargetDependency */, ); name = MacNearFuture; @@ -498,6 +510,7 @@ A98C20CC2DE730740008D61C /* EditEventViewMac.swift in Sources */, A90D494B2DDE2C2900781124 /* AddEventView.swift in Sources */, A90D495E2DDE3C7400781124 /* NFCommands.swift in Sources */, + A98C20D42DE7339E0008D61C /* AboutView.swift in Sources */, A98C20CE2DE7308E0008D61C /* ArchiveView.swift in Sources */, A98C20D02DE731BD0008D61C /* HomeView.swift in Sources */, A90D495B2DDE2EDB00781124 /* MacNearFutureApp.swift in Sources */, @@ -513,6 +526,7 @@ buildActionMask = 2147483647; files = ( A920C28C2D24011400E4F9B1 /* Events.swift in Sources */, + A98C20D52DE7339E0008D61C /* AboutView.swift in Sources */, A949F84B2DCAABE00064DCA0 /* ArchiveView.swift in Sources */, A914FA4F2DD276D200856265 /* AboutView.swift in Sources */, A949F84C2DCAABE00064DCA0 /* AddEventView.swift in Sources */, @@ -560,6 +574,11 @@ target = A979F6012D270AF00094C0B3 /* NearFutureWidgetsExtension */; targetProxy = A979F6122D270AF90094C0B3 /* PBXContainerItemProxy */; }; + A98C20D22DE732B10008D61C /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = A979F6012D270AF00094C0B3 /* NearFutureWidgetsExtension */; + targetProxy = A98C20D12DE732B10008D61C /* PBXContainerItemProxy */; + }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ @@ -583,7 +602,7 @@ "$(inherited)", "@executable_path/../Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 15.5; + MACOSX_DEPLOYMENT_TARGET = 15; MARKETING_VERSION = "$(VERSION)"; PRODUCT_BUNDLE_IDENTIFIER = com.neon443.NearFuture; PRODUCT_NAME = "Near Future"; @@ -614,7 +633,7 @@ "$(inherited)", "@executable_path/../Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 15.5; + MACOSX_DEPLOYMENT_TARGET = 15; MARKETING_VERSION = "$(VERSION)"; PRODUCT_BUNDLE_IDENTIFIER = com.neon443.NearFuture; PRODUCT_NAME = "Near Future"; @@ -888,8 +907,9 @@ REGISTER_APP_GROUPS = YES; SDKROOT = iphoneos; SKIP_INSTALL = YES; - SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; - SUPPORTS_MACCATALYST = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx"; + SUPPORTS_MACCATALYST = NO; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; @@ -925,8 +945,9 @@ REGISTER_APP_GROUPS = YES; SDKROOT = iphoneos; SKIP_INSTALL = YES; - SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; - SUPPORTS_MACCATALYST = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx"; + SUPPORTS_MACCATALYST = NO; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; diff --git a/NearFuture.xcodeproj/xcshareddata/xcschemes/MacNearFuture.xcscheme b/NearFuture.xcodeproj/xcshareddata/xcschemes/MacNearFuture.xcscheme new file mode 100644 index 0000000..d4dc62b --- /dev/null +++ b/NearFuture.xcodeproj/xcshareddata/xcschemes/MacNearFuture.xcscheme @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/NearFuture.xcodeproj/xcuserdata/neon443.xcuserdatad/xcschemes/xcschememanagement.plist b/NearFuture.xcodeproj/xcuserdata/neon443.xcuserdatad/xcschemes/xcschememanagement.plist index 816c0e1..87d566a 100644 --- a/NearFuture.xcodeproj/xcuserdata/neon443.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/NearFuture.xcodeproj/xcuserdata/neon443.xcuserdatad/xcschemes/xcschememanagement.plist @@ -7,7 +7,7 @@ MacNearFuture.xcscheme_^#shared#^_ orderHint - 2 + 1 NearFuture.xcscheme_^#shared#^_ @@ -17,11 +17,16 @@ NearFutureWidgetsExtension.xcscheme_^#shared#^_ orderHint - 1 + 2 SuppressBuildableAutocreation + A90D49252DDE0FA400781124 + + primary + + A920C2832D24011300E4F9B1 primary diff --git a/NearFuture/Views/ContentView.swift b/NearFuture/Views/ContentView.swift index c9a0e03..04adc0f 100644 --- a/NearFuture/Views/ContentView.swift +++ b/NearFuture/Views/ContentView.swift @@ -25,9 +25,6 @@ struct ContentView: View { @State var selection: Tab = .home var body: some View { - if #available(iOS 17.5, *) { - YouAsked() - } TabView(selection: $selection) { HomeView(viewModel: viewModel, settingsModel: settingsModel) .tabItem {