Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 20 additions & 8 deletions CodeEdit.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,11 @@
04540D5D27DD08C300E91B77 /* CodeEditApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = B658FB2F27DA9E0F00EA4DBD /* CodeEditApp.swift */; };
04540D5E27DD08C300E91B77 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B658FB3127DA9E0F00EA4DBD /* ContentView.swift */; };
04540D5F27DD08C300E91B77 /* EditorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 043DF9C127DD045800CA0FC3 /* EditorView.swift */; };
04540D6027DD08C300E91B77 /* Workspace.swift in Sources */ = {isa = PBXBuildFile; fileRef = 348313F927DC8B0A0016D42C /* Workspace.swift */; };
04540D6127DD08C300E91B77 /* CodeFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 348313FB27DC8C070016D42C /* CodeFile.swift */; };
04540D6227DD08C300E91B77 /* FileItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 349D101827DCE91F0009AF22 /* FileItem.swift */; };
04540D6327DD08C300E91B77 /* CodeEditorAppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0468438427DC76E200F8E88E /* CodeEditorAppDelegate.swift */; };
345F667527DF6C180069BD69 /* FileTabRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 345F667427DF6C180069BD69 /* FileTabRow.swift */; };
34EE19BE27E0469C00F152CE /* BlurView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34EE19BD27E0469C00F152CE /* BlurView.swift */; };
5C403B8F27E20F8000788241 /* WorkspaceClient in Frameworks */ = {isa = PBXBuildFile; productRef = 5C403B8E27E20F8000788241 /* WorkspaceClient */; };
B658FB3427DA9E1000EA4DBD /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = B658FB3327DA9E1000EA4DBD /* Assets.xcassets */; };
B658FB3727DA9E1000EA4DBD /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = B658FB3627DA9E1000EA4DBD /* Preview Assets.xcassets */; };
D7211D4327E066CE008F2ED7 /* Localized+Ex.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7211D4227E066CE008F2ED7 /* Localized+Ex.swift */; };
Expand Down Expand Up @@ -49,9 +48,7 @@
04F2BF0E27DBB28E0024EAB1 /* SettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsView.swift; sourceTree = "<group>"; };
04F2BF1127DBB3C10024EAB1 /* GeneralSettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GeneralSettingsView.swift; sourceTree = "<group>"; };
345F667427DF6C180069BD69 /* FileTabRow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FileTabRow.swift; sourceTree = "<group>"; };
348313F927DC8B0A0016D42C /* Workspace.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Workspace.swift; sourceTree = "<group>"; };
348313FB27DC8C070016D42C /* CodeFile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CodeFile.swift; sourceTree = "<group>"; };
349D101827DCE91F0009AF22 /* FileItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FileItem.swift; sourceTree = "<group>"; };
34EE19BD27E0469C00F152CE /* BlurView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlurView.swift; sourceTree = "<group>"; };
B658FB2C27DA9E0F00EA4DBD /* CodeEdit.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = CodeEdit.app; sourceTree = BUILT_PRODUCTS_DIR; };
B658FB2F27DA9E0F00EA4DBD /* CodeEditApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CodeEditApp.swift; sourceTree = "<group>"; };
Expand All @@ -71,6 +68,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
5C403B8F27E20F8000788241 /* WorkspaceClient in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Expand Down Expand Up @@ -120,9 +118,7 @@
348313F827DC8AF70016D42C /* Models */ = {
isa = PBXGroup;
children = (
348313F927DC8B0A0016D42C /* Workspace.swift */,
348313FB27DC8C070016D42C /* CodeFile.swift */,
349D101827DCE91F0009AF22 /* FileItem.swift */,
);
path = Models;
sourceTree = "<group>";
Expand All @@ -135,11 +131,19 @@
path = CustomViews;
sourceTree = "<group>";
};
5C403B8D27E20F8000788241 /* Frameworks */ = {
isa = PBXGroup;
children = (
);
name = Frameworks;
sourceTree = "<group>";
};
B658FB2327DA9E0F00EA4DBD = {
isa = PBXGroup;
children = (
B658FB2E27DA9E0F00EA4DBD /* CodeEdit */,
B658FB2D27DA9E0F00EA4DBD /* Products */,
5C403B8D27E20F8000788241 /* Frameworks */,
);
sourceTree = "<group>";
};
Expand Down Expand Up @@ -205,6 +209,9 @@
dependencies = (
);
name = CodeEdit;
packageProductDependencies = (
5C403B8E27E20F8000788241 /* WorkspaceClient */,
);
productName = CodeEdit;
productReference = B658FB2C27DA9E0F00EA4DBD /* CodeEdit.app */;
productType = "com.apple.product-type.application";
Expand Down Expand Up @@ -328,10 +335,8 @@
04540D5F27DD08C300E91B77 /* EditorView.swift in Sources */,
34EE19BE27E0469C00F152CE /* BlurView.swift in Sources */,
D7211D4327E066CE008F2ED7 /* Localized+Ex.swift in Sources */,
04540D6027DD08C300E91B77 /* Workspace.swift in Sources */,
04540D6127DD08C300E91B77 /* CodeFile.swift in Sources */,
345F667527DF6C180069BD69 /* FileTabRow.swift in Sources */,
04540D6227DD08C300E91B77 /* FileItem.swift in Sources */,
04540D6327DD08C300E91B77 /* CodeEditorAppDelegate.swift in Sources */,
0439FEF527DD104500528317 /* WorkspaceEditorView.swift in Sources */,
);
Expand Down Expand Up @@ -692,6 +697,13 @@
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */

/* Begin XCSwiftPackageProductDependency section */
5C403B8E27E20F8000788241 /* WorkspaceClient */ = {
isa = XCSwiftPackageProductDependency;
productName = WorkspaceClient;
};
/* End XCSwiftPackageProductDependency section */
};
rootObject = B658FB2427DA9E0F00EA4DBD /* Project object */;
}
10 changes: 10 additions & 0 deletions CodeEdit.xcworkspace/contents.xcworkspacedata

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions CodeEdit.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IDEDidComputeMac32BitWarning</key>
<true/>
</dict>
</plist>
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>PreviewsEnabled</key>
<false/>
</dict>
</plist>
45 changes: 33 additions & 12 deletions CodeEdit/ContentView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,13 @@
//

import SwiftUI
import WorkspaceClient

struct ContentView: View {
@State var workspace: Workspace?
@State private var directoryURL: URL?
@State private var workspaceClient: WorkspaceClient?
@State var selectedId: UUID?
@State var openFileItems: [FileItem] = []
@State var openFileItems: [WorkspaceClient.FileItem] = []
@State var urlInit = false

@State private var showingAlert = false
Expand All @@ -22,7 +24,11 @@ struct ContentView: View {
@EnvironmentObject var appDelegate: CodeEditorAppDelegate
@SceneStorage("ContentView.path") private var path: String = ""

func closeFileTab(item: FileItem) {
private let ignoredFilesAndDirectory = [
".DS_Store",
]

func closeFileTab(item: WorkspaceClient.FileItem) {
guard let idx = openFileItems.firstIndex(of: item) else { return }
let closedFileItem = openFileItems.remove(at: idx)
guard closedFileItem.id == selectedId else { return }
Expand All @@ -38,8 +44,8 @@ struct ContentView: View {

var body: some View {
NavigationView {
if let workspace = workspace {
sidebar
if let workspaceClient = workspaceClient, let directoryURL = directoryURL {
sidebar(workspaceClient: workspaceClient, directoryURL: directoryURL)
.frame(minWidth: 250)
.toolbar {
ToolbarItem(placement: .primaryAction) {
Expand All @@ -55,7 +61,7 @@ struct ContentView: View {
} else {
ZStack {
if let selectedId = selectedId {
if let selectedItem = workspace.getFileItem(id: selectedId) {
if let selectedItem = try? workspaceClient.getFileItem(selectedId) {
WorkspaceEditorView(item: selectedItem)
}
}
Expand Down Expand Up @@ -94,7 +100,12 @@ struct ContentView: View {
.onOpenURL { url in
urlInit = true
do {
self.workspace = try Workspace(folderURL: url)
self.workspaceClient = try .default(
fileManager: .default,
folderURL: url,
ignoredFilesAndFolders: ignoredFilesAndDirectory
)
self.directoryURL = url
} catch {
self.alertTitle = "Unable to Open Workspace"
self.alertMsg = error.localizedDescription
Expand All @@ -107,7 +118,12 @@ struct ContentView: View {
if !self.urlInit {
if let url = self.appDelegate.newProjectURL() {
do {
self.workspace = try Workspace(folderURL: url)
self.directoryURL = url
self.workspaceClient = try .default(
fileManager: .default,
folderURL: url,
ignoredFilesAndFolders: ignoredFilesAndDirectory
)
} catch {
self.alertTitle = "Unable to Open Folder"
self.alertMsg = error.localizedDescription
Expand Down Expand Up @@ -143,7 +159,9 @@ struct ContentView: View {
let isActive = selectedId == item.id

HStack(spacing: 0.0) {
Button(action: { selectedId = item.id }) {
Button {
selectedId = item.id
} label: {
FileTabRow(fileItem: item, isSelected: isActive, closeAction: {
withAnimation {
closeFileTab(item: item)
Expand Down Expand Up @@ -174,10 +192,13 @@ struct ContentView: View {
}
}

var sidebar: some View {
func sidebar(
workspaceClient: WorkspaceClient,
directoryURL: URL
) -> some View {
List {
Section(header: Text(workspace!.directoryURL.lastPathComponent)) {
OutlineGroup(workspace!.fileItems, children: \.children) { item in
Section(header: Text(directoryURL.lastPathComponent)) {
OutlineGroup(workspaceClient.getFiles(), children: \.children) { item in
if item.children == nil {
// TODO: Add selection indicator
Button(action: {
Expand Down
5 changes: 3 additions & 2 deletions CodeEdit/Editor/WorkspaceEditorView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,14 @@
//

import SwiftUI
import WorkspaceClient

struct WorkspaceEditorView: View {
@State var text: String = ""
@State var initialized = false
var item: FileItem
var item: WorkspaceClient.FileItem

func initText(item: FileItem) {
func initText(item: WorkspaceClient.FileItem) {
do {
self.text = try String(contentsOf: item.url)
self.initialized = true
Expand Down
62 changes: 0 additions & 62 deletions CodeEdit/Models/FileItem.swift

This file was deleted.

57 changes: 0 additions & 57 deletions CodeEdit/Models/Workspace.swift

This file was deleted.

5 changes: 3 additions & 2 deletions CodeEdit/Rows/FileTabRow.swift
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,12 @@
//

import SwiftUI
import WorkspaceClient

struct FileTabRow: View {
@State var mouseHovering = false

var fileItem: FileItem
var fileItem: WorkspaceClient.FileItem
var isSelected: Bool
var closeAction: () -> Void

Expand Down Expand Up @@ -44,7 +45,7 @@ struct FileTabRow: View {

struct FileTabRow_Previews: PreviewProvider {
static var previews: some View {
FileTabRow(fileItem: FileItem(url: URL(string: "Code.swift")!), isSelected: false, closeAction: {})
FileTabRow(fileItem: WorkspaceClient.FileItem(url: URL(string: "Code.swift")!), isSelected: false, closeAction: {})
.frame(width: 160.0, height: 28.0)
}
}
Loading