Skip to content

Commit 149f97b

Browse files
AboutWindow Package Implementation (#2060)
### Description - Removed old about window code and implemented AboutWindow Package - Modified ContributorsView and AcknowledgementsView's to follow the new package patterns. - Created AboutFooterView and AboutSubtitleView's. - Implemented changes proposed by Khan in PR #2056 - ### Related Issues None. ### Checklist <!--- Add things that are not yet implemented above --> - [x] I read and understood the [contributing guide](https://github.com/CodeEditApp/CodeEdit/blob/main/CONTRIBUTING.md) as well as the [code of conduct](https://github.com/CodeEditApp/CodeEdit/blob/main/CODE_OF_CONDUCT.md) - [x] The issues this PR addresses are related to each other - [x] My changes generate no new warnings - [x] My code builds and runs on my machine - [x] My changes are all related to the related issue above - [x] I documented my code ### Screenshots None.
1 parent a51be20 commit 149f97b

File tree

17 files changed

+155
-431
lines changed

17 files changed

+155
-431
lines changed

CodeEdit.xcodeproj/project.pbxproj

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
583E529C29361BAB001AB554 /* SnapshotTesting in Frameworks */ = {isa = PBXBuildFile; productRef = 583E529B29361BAB001AB554 /* SnapshotTesting */; };
1717
58F2EB03292FB2B0004A9BDE /* Documentation.docc in Sources */ = {isa = PBXBuildFile; fileRef = 58F2EACE292FB2B0004A9BDE /* Documentation.docc */; };
1818
58F2EB1E292FB954004A9BDE /* Sparkle in Frameworks */ = {isa = PBXBuildFile; productRef = 58F2EB1D292FB954004A9BDE /* Sparkle */; };
19+
5E4485612DF600D9008BBE69 /* AboutWindow in Frameworks */ = {isa = PBXBuildFile; productRef = 5E4485602DF600D9008BBE69 /* AboutWindow */; };
1920
6C0617D62BDB4432008C9C42 /* LogStream in Frameworks */ = {isa = PBXBuildFile; productRef = 6C0617D52BDB4432008C9C42 /* LogStream */; };
2021
6C0824A12C5C0C9700A0751E /* SwiftTerm in Frameworks */ = {isa = PBXBuildFile; productRef = 6C0824A02C5C0C9700A0751E /* SwiftTerm */; };
2122
6C147C4529A329350089B630 /* OrderedCollections in Frameworks */ = {isa = PBXBuildFile; productRef = 6C147C4429A329350089B630 /* OrderedCollections */; };
@@ -173,6 +174,7 @@
173174
6C0617D62BDB4432008C9C42 /* LogStream in Frameworks */,
174175
6CC17B4F2C432AE000834E2C /* CodeEditSourceEditor in Frameworks */,
175176
30CB64912C16CA8100CC8A9E /* LanguageServerProtocol in Frameworks */,
177+
5E4485612DF600D9008BBE69 /* AboutWindow in Frameworks */,
176178
6C4E37FC2C73E00700AEE7B5 /* SwiftTerm in Frameworks */,
177179
6C6BD6F429CD142C00235D17 /* CollectionConcurrencyKit in Frameworks */,
178180
6C85BB442C210EFD00EB5DEF /* SwiftUIIntrospect in Frameworks */,
@@ -317,6 +319,7 @@
317319
6CB94D022CA1205100E8651C /* AsyncAlgorithms */,
318320
6CC00A8A2CBEF150004E8134 /* CodeEditSourceEditor */,
319321
6C73A6D22D4F1E550012D95C /* CodeEditSourceEditor */,
322+
5E4485602DF600D9008BBE69 /* AboutWindow */,
320323
);
321324
productName = CodeEdit;
322325
productReference = B658FB2C27DA9E0F00EA4DBD /* CodeEdit.app */;
@@ -377,7 +380,7 @@
377380
attributes = {
378381
BuildIndependentTargetsInParallel = 1;
379382
LastSwiftUpdateCheck = 1330;
380-
LastUpgradeCheck = 1620;
383+
LastUpgradeCheck = 1640;
381384
TargetAttributes = {
382385
2BE487EB28245162003F3F64 = {
383386
CreatedOnToolsVersion = 13.3.1;
@@ -420,6 +423,7 @@
420423
6C4E37FA2C73E00700AEE7B5 /* XCRemoteSwiftPackageReference "SwiftTerm" */,
421424
6CB94D012CA1205100E8651C /* XCRemoteSwiftPackageReference "swift-async-algorithms" */,
422425
6CF368562DBBD274006A77FD /* XCRemoteSwiftPackageReference "CodeEditSourceEditor" */,
426+
5E44855F2DF600D9008BBE69 /* XCRemoteSwiftPackageReference "AboutWindow" */,
423427
);
424428
preferredProjectObjectVersion = 55;
425429
productRefGroup = B658FB2D27DA9E0F00EA4DBD /* Products */;
@@ -666,6 +670,7 @@
666670
PRODUCT_BUNDLE_IDENTIFIER = app.codeedit.CodeEdit;
667671
PRODUCT_NAME = "$(TARGET_NAME)";
668672
PROVISIONING_PROFILE_SPECIFIER = "";
673+
REGISTER_APP_GROUPS = YES;
669674
RUN_DOCUMENTATION_COMPILER = NO;
670675
SWIFT_EMIT_LOC_STRINGS = YES;
671676
SWIFT_OBJC_BRIDGING_HEADER = "";
@@ -757,6 +762,7 @@
757762
MARKETING_VERSION = 1.0;
758763
PRODUCT_BUNDLE_IDENTIFIER = app.codeedit.CodeEdit.OpenWithCodeEdit;
759764
PRODUCT_NAME = "$(TARGET_NAME)";
765+
REGISTER_APP_GROUPS = YES;
760766
SKIP_INSTALL = YES;
761767
SWIFT_EMIT_LOC_STRINGS = YES;
762768
SWIFT_VERSION = 5.0;
@@ -861,6 +867,7 @@
861867
PRODUCT_BUNDLE_IDENTIFIER = app.codeedit.CodeEdit;
862868
PRODUCT_NAME = "$(TARGET_NAME)";
863869
PROVISIONING_PROFILE_SPECIFIER = "";
870+
REGISTER_APP_GROUPS = YES;
864871
RUN_DOCUMENTATION_COMPILER = NO;
865872
SWIFT_EMIT_LOC_STRINGS = YES;
866873
SWIFT_OBJC_BRIDGING_HEADER = "";
@@ -952,6 +959,7 @@
952959
MARKETING_VERSION = 1.0;
953960
PRODUCT_BUNDLE_IDENTIFIER = app.codeedit.CodeEdit.OpenWithCodeEdit;
954961
PRODUCT_NAME = "$(TARGET_NAME)";
962+
REGISTER_APP_GROUPS = YES;
955963
SKIP_INSTALL = YES;
956964
SWIFT_EMIT_LOC_STRINGS = YES;
957965
SWIFT_VERSION = 5.0;
@@ -986,6 +994,7 @@
986994
MARKETING_VERSION = 1.0;
987995
PRODUCT_BUNDLE_IDENTIFIER = app.codeedit.CodeEdit.OpenWithCodeEdit;
988996
PRODUCT_NAME = "$(TARGET_NAME)";
997+
REGISTER_APP_GROUPS = YES;
989998
SKIP_INSTALL = YES;
990999
SWIFT_EMIT_LOC_STRINGS = YES;
9911000
SWIFT_VERSION = 5.0;
@@ -1020,6 +1029,7 @@
10201029
MARKETING_VERSION = 1.0;
10211030
PRODUCT_BUNDLE_IDENTIFIER = app.codeedit.CodeEdit.OpenWithCodeEdit;
10221031
PRODUCT_NAME = "$(TARGET_NAME)";
1032+
REGISTER_APP_GROUPS = YES;
10231033
SKIP_INSTALL = YES;
10241034
SWIFT_EMIT_LOC_STRINGS = YES;
10251035
SWIFT_VERSION = 5.0;
@@ -1126,6 +1136,7 @@
11261136
PRODUCT_BUNDLE_IDENTIFIER = app.codeedit.CodeEdit;
11271137
PRODUCT_NAME = "$(TARGET_NAME)";
11281138
PROVISIONING_PROFILE_SPECIFIER = "";
1139+
REGISTER_APP_GROUPS = YES;
11291140
RUN_DOCUMENTATION_COMPILER = NO;
11301141
SWIFT_EMIT_LOC_STRINGS = YES;
11311142
SWIFT_OBJC_BRIDGING_HEADER = "";
@@ -1217,6 +1228,7 @@
12171228
MARKETING_VERSION = 1.0;
12181229
PRODUCT_BUNDLE_IDENTIFIER = app.codeedit.CodeEdit.OpenWithCodeEdit;
12191230
PRODUCT_NAME = "$(TARGET_NAME)";
1231+
REGISTER_APP_GROUPS = YES;
12201232
SKIP_INSTALL = YES;
12211233
SWIFT_EMIT_LOC_STRINGS = YES;
12221234
SWIFT_VERSION = 5.0;
@@ -1392,6 +1404,7 @@
13921404
PRODUCT_BUNDLE_IDENTIFIER = app.codeedit.CodeEdit;
13931405
PRODUCT_NAME = "$(TARGET_NAME)";
13941406
PROVISIONING_PROFILE_SPECIFIER = "";
1407+
REGISTER_APP_GROUPS = YES;
13951408
RUN_DOCUMENTATION_COMPILER = NO;
13961409
SWIFT_EMIT_LOC_STRINGS = YES;
13971410
SWIFT_OBJC_BRIDGING_HEADER = "";
@@ -1432,6 +1445,7 @@
14321445
PRODUCT_BUNDLE_IDENTIFIER = app.codeedit.CodeEdit;
14331446
PRODUCT_NAME = "$(TARGET_NAME)";
14341447
PROVISIONING_PROFILE_SPECIFIER = "";
1448+
REGISTER_APP_GROUPS = YES;
14351449
RUN_DOCUMENTATION_COMPILER = NO;
14361450
SWIFT_EMIT_LOC_STRINGS = YES;
14371451
SWIFT_OBJC_BRIDGING_HEADER = "";
@@ -1681,6 +1695,14 @@
16811695
version = 2.3.0;
16821696
};
16831697
};
1698+
5E44855F2DF600D9008BBE69 /* XCRemoteSwiftPackageReference "AboutWindow" */ = {
1699+
isa = XCRemoteSwiftPackageReference;
1700+
repositoryURL = "https://github.com/CodeEditApp/AboutWindow";
1701+
requirement = {
1702+
branch = main;
1703+
kind = branch;
1704+
};
1705+
};
16841706
6C0617D42BDB4432008C9C42 /* XCRemoteSwiftPackageReference "LogStream" */ = {
16851707
isa = XCRemoteSwiftPackageReference;
16861708
repositoryURL = "https://github.com/Wouter01/LogStream";
@@ -1781,6 +1803,11 @@
17811803
package = 58F2EB1C292FB954004A9BDE /* XCRemoteSwiftPackageReference "Sparkle" */;
17821804
productName = Sparkle;
17831805
};
1806+
5E4485602DF600D9008BBE69 /* AboutWindow */ = {
1807+
isa = XCSwiftPackageProductDependency;
1808+
package = 5E44855F2DF600D9008BBE69 /* XCRemoteSwiftPackageReference "AboutWindow" */;
1809+
productName = AboutWindow;
1810+
};
17841811
6C0617D52BDB4432008C9C42 /* LogStream */ = {
17851812
isa = XCSwiftPackageProductDependency;
17861813
package = 6C0617D42BDB4432008C9C42 /* XCRemoteSwiftPackageReference "LogStream" */;

CodeEdit.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved

Lines changed: 10 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

CodeEdit.xcodeproj/xcshareddata/xcschemes/CodeEdit.xcscheme

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<Scheme
3-
LastUpgradeVersion = "1620"
3+
LastUpgradeVersion = "1640"
44
version = "1.7">
55
<BuildAction
66
parallelizeBuildables = "YES"

CodeEdit.xcodeproj/xcshareddata/xcschemes/OpenWithCodeEdit.xcscheme

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<Scheme
3-
LastUpgradeVersion = "1620"
3+
LastUpgradeVersion = "1640"
44
wasCreatedForAppExtension = "YES"
55
version = "2.0">
66
<BuildAction

CodeEdit/CodeEditApp.swift

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
//
77

88
import SwiftUI
9+
import AboutWindow
910

1011
@main
1112
struct CodeEditApp: App {
@@ -31,7 +32,18 @@ struct CodeEditApp: App {
3132

3233
ExtensionManagerWindow()
3334

34-
AboutWindow()
35+
AboutWindow(
36+
subtitleView: { AboutSubtitleView() },
37+
actions: {
38+
AboutButton(title: "Contributors", destination: {
39+
ContributorsView()
40+
})
41+
AboutButton(title: "Acknowledgements", destination: {
42+
AcknowledgementsView()
43+
})
44+
},
45+
footer: { AboutFooterView() }
46+
)
3547

3648
SettingsWindow()
3749
.commands {
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
//
2+
// AboutFooterView.swift
3+
// CodeEdit
4+
//
5+
// Created by Giorgi Tchelidze on 08.06.25.
6+
//
7+
8+
import SwiftUI
9+
import AboutWindow
10+
11+
struct AboutFooterView: View {
12+
var body: some View {
13+
FooterView(
14+
primaryView: {
15+
Link(destination: URL(string: "https://github.com/CodeEditApp/CodeEdit/blob/main/LICENSE.md")!) {
16+
Text("MIT License")
17+
.underline()
18+
}
19+
},
20+
secondaryView: {
21+
Text(Bundle.copyrightString ?? "")
22+
}
23+
)
24+
}
25+
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
//
2+
// AboutSubtitleView.swift
3+
// CodeEdit
4+
//
5+
// Created by Giorgi Tchelidze on 08.06.25.
6+
//
7+
8+
import SwiftUI
9+
10+
struct AboutSubtitleView: View {
11+
12+
@State private var didCopyVersion = false
13+
@State private var isHoveringVersion = false
14+
15+
private var appVersion: String { Bundle.versionString ?? "No Version" }
16+
private var appBuild: String { Bundle.buildString ?? "No Build" }
17+
private var appVersionPostfix: String { Bundle.versionPostfix ?? "" }
18+
19+
var body: some View {
20+
Text("Version \(appVersion)\(appVersionPostfix) (\(appBuild))")
21+
.textSelection(.disabled)
22+
.onTapGesture {
23+
// Create a string suitable for pasting into a bug report
24+
let macOSVersion = ProcessInfo.processInfo.operatingSystemVersion.semverString
25+
NSPasteboard.general.clearContents()
26+
NSPasteboard.general.setString(
27+
"CodeEdit: \(appVersion) (\(appBuild))\nmacOS: \(macOSVersion)",
28+
forType: .string
29+
)
30+
didCopyVersion.toggle()
31+
}
32+
.background(alignment: .leading) {
33+
if isHoveringVersion {
34+
if #available(macOS 14.0, *) {
35+
Image(systemName: "document.on.document.fill")
36+
.font(.caption)
37+
.offset(x: -16, y: 0)
38+
.transition(.opacity)
39+
.symbolEffect(
40+
.bounce.down.wholeSymbol,
41+
options: .nonRepeating.speed(1.8),
42+
value: didCopyVersion
43+
)
44+
} else {
45+
Image(systemName: "document.on.document.fill")
46+
.font(.caption)
47+
.offset(x: -16, y: 0)
48+
.transition(.opacity)
49+
}
50+
}
51+
}
52+
.onHover { hovering in
53+
withAnimation(.easeInOut(duration: 0.1)) {
54+
isHoveringVersion = hovering
55+
}
56+
}
57+
}
58+
}

CodeEdit/Features/About/Acknowledgements/Views/AcknowledgementsView.swift

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,13 @@
66
//
77

88
import SwiftUI
9+
import AboutWindow
910

1011
struct AcknowledgementsView: View {
1112
@StateObject var model = AcknowledgementsViewModel()
12-
@Binding var aboutMode: AboutMode
13-
var namespace: Namespace.ID
1413

1514
var body: some View {
16-
AboutDetailView(title: "Acknowledgements", aboutMode: $aboutMode, namespace: namespace) {
15+
AboutDetailView(title: "Acknowledgements") {
1716
LazyVStack(spacing: 0) {
1817
ForEach(
1918
model.indexedAcknowledgements,

CodeEdit/Features/About/Acknowledgements/Views/AcknowledgementsWindowController.swift

Lines changed: 0 additions & 56 deletions
This file was deleted.
File renamed without changes.

0 commit comments

Comments
 (0)