Skip to content

Commit 0b5b53e

Browse files
- Removed old Welcome Window code and implemented WelcomeWindow package.
1 parent 41b590d commit 0b5b53e

File tree

17 files changed

+293
-695
lines changed

17 files changed

+293
-695
lines changed

CodeEdit.xcodeproj/project.pbxproj

Lines changed: 17 additions & 0 deletions
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+
5EACE6222DF4BF08005E08B8 /* WelcomeWindow in Frameworks */ = {isa = PBXBuildFile; productRef = 5EACE6212DF4BF08005E08B8 /* WelcomeWindow */; };
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 */; };
@@ -180,6 +181,7 @@
180181
6C73A6D32D4F1E550012D95C /* CodeEditSourceEditor in Frameworks */,
181182
2816F594280CF50500DD548B /* CodeEditSymbols in Frameworks */,
182183
30CB64942C16CA9100CC8A9E /* LanguageClient in Frameworks */,
184+
5EACE6222DF4BF08005E08B8 /* WelcomeWindow in Frameworks */,
183185
6C6BD6F829CD14D100235D17 /* CodeEditKit in Frameworks */,
184186
6C0824A12C5C0C9700A0751E /* SwiftTerm in Frameworks */,
185187
6C81916B29B41DD300B75C92 /* DequeModule in Frameworks */,
@@ -317,6 +319,7 @@
317319
6CB94D022CA1205100E8651C /* AsyncAlgorithms */,
318320
6CC00A8A2CBEF150004E8134 /* CodeEditSourceEditor */,
319321
6C73A6D22D4F1E550012D95C /* CodeEditSourceEditor */,
322+
5EACE6212DF4BF08005E08B8 /* WelcomeWindow */,
320323
);
321324
productName = CodeEdit;
322325
productReference = B658FB2C27DA9E0F00EA4DBD /* CodeEdit.app */;
@@ -420,6 +423,7 @@
420423
6C4E37FA2C73E00700AEE7B5 /* XCRemoteSwiftPackageReference "SwiftTerm" */,
421424
6CB94D012CA1205100E8651C /* XCRemoteSwiftPackageReference "swift-async-algorithms" */,
422425
6CF368562DBBD274006A77FD /* XCRemoteSwiftPackageReference "CodeEditSourceEditor" */,
426+
5EACE6202DF4BF08005E08B8 /* XCRemoteSwiftPackageReference "WelcomeWindow" */,
423427
);
424428
preferredProjectObjectVersion = 55;
425429
productRefGroup = B658FB2D27DA9E0F00EA4DBD /* Products */;
@@ -1681,6 +1685,14 @@
16811685
version = 2.3.0;
16821686
};
16831687
};
1688+
5EACE6202DF4BF08005E08B8 /* XCRemoteSwiftPackageReference "WelcomeWindow" */ = {
1689+
isa = XCRemoteSwiftPackageReference;
1690+
repositoryURL = "https://github.com/CodeEditApp/WelcomeWindow";
1691+
requirement = {
1692+
branch = main;
1693+
kind = branch;
1694+
};
1695+
};
16841696
6C0617D42BDB4432008C9C42 /* XCRemoteSwiftPackageReference "LogStream" */ = {
16851697
isa = XCRemoteSwiftPackageReference;
16861698
repositoryURL = "https://github.com/Wouter01/LogStream";
@@ -1781,6 +1793,11 @@
17811793
package = 58F2EB1C292FB954004A9BDE /* XCRemoteSwiftPackageReference "Sparkle" */;
17821794
productName = Sparkle;
17831795
};
1796+
5EACE6212DF4BF08005E08B8 /* WelcomeWindow */ = {
1797+
isa = XCSwiftPackageProductDependency;
1798+
package = 5EACE6202DF4BF08005E08B8 /* XCRemoteSwiftPackageReference "WelcomeWindow" */;
1799+
productName = WelcomeWindow;
1800+
};
17841801
6C0617D52BDB4432008C9C42 /* LogStream */ = {
17851802
isa = XCSwiftPackageProductDependency;
17861803
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/CodeEditApp.swift

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

88
import SwiftUI
9+
import WelcomeWindow
910

1011
@main
1112
struct CodeEditApp: App {
@@ -27,7 +28,17 @@ struct CodeEditApp: App {
2728

2829
var body: some Scene {
2930
Group {
30-
WelcomeWindow()
31+
WelcomeWindow(
32+
subtitleView: { WelcomeSubtitleView() },
33+
actions: { dismissWindow in
34+
NewFileButton(dismissWindow: dismissWindow)
35+
GitCloneButton(dismissWindow: dismissWindow)
36+
OpenFileOrFolderButton(dismissWindow: dismissWindow)
37+
},
38+
onDrop: { url, dismissWindow in
39+
Task { CodeEditDocumentController.shared.openDocument(at: url, onCompletion: { dismissWindow() }) }
40+
}
41+
)
3142

3243
ExtensionManagerWindow()
3344

CodeEdit/Features/Documents/Controllers/CodeEditDocumentController.swift

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

88
import Cocoa
99
import SwiftUI
10+
import WelcomeWindow
1011

1112
final class CodeEditDocumentController: NSDocumentController {
1213
@Environment(\.openWindow)
@@ -16,6 +17,26 @@ final class CodeEditDocumentController: NSDocumentController {
1617

1718
private let fileManager = FileManager.default
1819

20+
@MainActor
21+
func createAndOpenNewDocument(onCompletion: @escaping () -> Void) {
22+
guard let newDocumentUrl = self.newDocumentUrl else { return }
23+
24+
let createdFile = self.fileManager.createFile(
25+
atPath: newDocumentUrl.path,
26+
contents: nil,
27+
attributes: [FileAttributeKey.creationDate: Date()]
28+
)
29+
30+
guard createdFile else {
31+
print("Failed to create new document")
32+
return
33+
}
34+
35+
self.openDocument(withContentsOf: newDocumentUrl, display: true) { _, _, _ in
36+
onCompletion()
37+
}
38+
}
39+
1940
override func newDocument(_ sender: Any?) {
2041
guard let newDocumentUrl = self.newDocumentUrl else { return }
2142

@@ -71,7 +92,7 @@ final class CodeEditDocumentController: NSDocumentController {
7192
print("Unable to open document '\(url)': \(errorMessage)")
7293
}
7394

74-
RecentProjectsStore.shared.documentOpened(at: url)
95+
RecentsStore.documentOpened(at: url)
7596
completionHandler(document, documentWasAlreadyOpen, error)
7697
}
7798
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
//
2+
// GitCloneButton.swift
3+
// CodeEdit
4+
//
5+
// Created by Giorgi Tchelidze on 07.06.25.
6+
//
7+
8+
import SwiftUI
9+
import WelcomeWindow
10+
11+
struct GitCloneButton: View {
12+
13+
@State private var showGitClone = false
14+
@State private var showCheckoutBranchItem: URL?
15+
16+
var dismissWindow: () -> Void
17+
18+
var body: some View {
19+
WelcomeButton(
20+
iconName: "square.and.arrow.down.on.square",
21+
title: "Clone Git Repository...",
22+
action: {
23+
showGitClone = true
24+
}
25+
)
26+
.sheet(isPresented: $showGitClone) {
27+
GitCloneView(
28+
openBranchView: { url in
29+
showCheckoutBranchItem = url
30+
},
31+
openDocument: { url in
32+
CodeEditDocumentController.shared.openDocument(at: url, onCompletion: { dismissWindow() })
33+
}
34+
)
35+
}
36+
.sheet(item: $showCheckoutBranchItem) { url in
37+
GitCheckoutBranchView(
38+
repoLocalPath: url,
39+
openDocument: { url in
40+
CodeEditDocumentController.shared.openDocument(at: url, onCompletion: { dismissWindow() })
41+
}
42+
)
43+
}
44+
}
45+
}

CodeEdit/Features/Welcome/Model/RecentProjectsStore.swift

Lines changed: 0 additions & 133 deletions
This file was deleted.
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
//
2+
// NewFileButton.swift
3+
// CodeEdit
4+
//
5+
// Created by Giorgi Tchelidze on 07.06.25.
6+
//
7+
8+
import SwiftUI
9+
import WelcomeWindow
10+
11+
struct NewFileButton: View {
12+
13+
var dismissWindow: () -> Void
14+
15+
var body: some View {
16+
WelcomeButton(
17+
iconName: "plus.square",
18+
title: "Create New File...",
19+
action: {
20+
let documentController = CodeEditDocumentController()
21+
documentController.createAndOpenNewDocument(onCompletion: { dismissWindow() })
22+
}
23+
)
24+
}
25+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
//
2+
// OpenFileOrFolderButton.swift
3+
// CodeEdit
4+
//
5+
// Created by Giorgi Tchelidze on 07.06.25.
6+
//
7+
8+
import SwiftUI
9+
import WelcomeWindow
10+
11+
struct OpenFileOrFolderButton: View {
12+
13+
@Environment(\.openWindow)
14+
private var openWindow
15+
16+
var dismissWindow: () -> Void
17+
18+
var body: some View {
19+
WelcomeButton(
20+
iconName: "folder",
21+
title: "Open File or Folder...",
22+
action: {
23+
CodeEditDocumentController.shared.openDocumentWithDialog(
24+
configuration: .init(canChooseFiles: true, canChooseDirectories: true),
25+
onDialogPresented: { dismissWindow() },
26+
onCancel: { openWindow(id: DefaultSceneID.welcome) }
27+
)
28+
}
29+
)
30+
}
31+
}

0 commit comments

Comments
 (0)