From 0a33386df368f2178f49fea002d9810f6b904430 Mon Sep 17 00:00:00 2001 From: Austin Condiff Date: Mon, 21 Mar 2022 04:53:06 -0500 Subject: [PATCH 1/6] Added inspector sidebar --- CodeEdit.xcodeproj/project.pbxproj | 55 +++++++++++------- .../InspectorSidebar/InspectorSidebar.swift | 39 +++++++++++++ .../InspectorSidebarToolbarTop.swift | 47 +++++++++++++++ .../NavigatorSidebar/NavigatorSidebar.swift | 42 ++++++++++++++ .../NavigatorSidebarItem.swift | 57 +++++++++++++++++++ .../NavigatorSidebarToolbarBottom.swift | 55 ++++++++++++++++++ .../NavigatorSidebarToolbarTop.swift | 53 +++++++++++++++++ CodeEdit/WorkspaceView.swift | 28 +++++++-- 8 files changed, 353 insertions(+), 23 deletions(-) create mode 100644 CodeEdit/Breadcrumbs/InspectorSidebar/InspectorSidebar.swift create mode 100644 CodeEdit/Breadcrumbs/InspectorSidebar/InspectorSidebarToolbarTop.swift create mode 100644 CodeEdit/NavigatorSidebar/NavigatorSidebar.swift create mode 100644 CodeEdit/NavigatorSidebar/NavigatorSidebarItem.swift create mode 100644 CodeEdit/NavigatorSidebar/NavigatorSidebarToolbarBottom.swift create mode 100644 CodeEdit/NavigatorSidebar/NavigatorSidebarToolbarTop.swift diff --git a/CodeEdit.xcodeproj/project.pbxproj b/CodeEdit.xcodeproj/project.pbxproj index c5a9464de4..b069f4146e 100644 --- a/CodeEdit.xcodeproj/project.pbxproj +++ b/CodeEdit.xcodeproj/project.pbxproj @@ -23,14 +23,14 @@ 0485EB2527E7B9C800138301 /* Overlays in Frameworks */ = {isa = PBXBuildFile; productRef = 0485EB2427E7B9C800138301 /* Overlays */; }; 286620A527E4AB6900E18C2B /* BreadcrumbsComponent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 286620A427E4AB6900E18C2B /* BreadcrumbsComponent.swift */; }; 2875A46D27E3BE5B007805F8 /* BreadcrumbsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2875A46C27E3BE5B007805F8 /* BreadcrumbsView.swift */; }; - 287776E727E3413200D46668 /* SideBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 287776E627E3413200D46668 /* SideBar.swift */; }; + 287776E727E3413200D46668 /* NavigatorSidebar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 287776E627E3413200D46668 /* NavigatorSidebar.swift */; }; 287776E927E34BC700D46668 /* TabBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 287776E827E34BC700D46668 /* TabBar.swift */; }; - 287776ED27E350D800D46668 /* SideBarItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 287776EC27E350D800D46668 /* SideBarItem.swift */; }; + 287776ED27E350D800D46668 /* NavigatorSidebarItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 287776EC27E350D800D46668 /* NavigatorSidebarItem.swift */; }; 287776EF27E3515300D46668 /* TabBarItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 287776EE27E3515300D46668 /* TabBarItem.swift */; }; 289978ED27E4E97E00BB0357 /* FileIconStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 289978EC27E4E97E00BB0357 /* FileIconStyle.swift */; }; - 28B0A19827E385C300B73177 /* SideBarToolbarTop.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28B0A19727E385C300B73177 /* SideBarToolbarTop.swift */; }; + 28B0A19827E385C300B73177 /* NavigatorSidebarToolbarTop.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28B0A19727E385C300B73177 /* NavigatorSidebarToolbarTop.swift */; }; 28CE5EA027E6493D0065D29C /* StatusBar in Frameworks */ = {isa = PBXBuildFile; productRef = 28CE5E9F27E6493D0065D29C /* StatusBar */; }; - 28FFE1BF27E3A441001939DB /* SideBarToolbarBottom.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28FFE1BE27E3A441001939DB /* SideBarToolbarBottom.swift */; }; + 28FFE1BF27E3A441001939DB /* NavigatorSidebarToolbarBottom.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28FFE1BE27E3A441001939DB /* NavigatorSidebarToolbarBottom.swift */; }; 2B7A583527E4BA0100D25D4E /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0468438427DC76E200F8E88E /* AppDelegate.swift */; }; 34EE19BE27E0469C00F152CE /* BlurView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34EE19BD27E0469C00F152CE /* BlurView.swift */; }; 5C403B8F27E20F8000788241 /* WorkspaceClient in Frameworks */ = {isa = PBXBuildFile; productRef = 5C403B8E27E20F8000788241 /* WorkspaceClient */; }; @@ -39,6 +39,8 @@ B658FB3727DA9E1000EA4DBD /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = B658FB3627DA9E1000EA4DBD /* Preview Assets.xcassets */; }; B65E614627E6765D00255275 /* Introspect in Frameworks */ = {isa = PBXBuildFile; productRef = B65E614527E6765D00255275 /* Introspect */; }; B673FDAD27E8296A00795864 /* PressActionsModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = B673FDAC27E8296A00795864 /* PressActionsModifier.swift */; }; + B673FDB427E8612700795864 /* InspectorSidebarToolbarTop.swift in Sources */ = {isa = PBXBuildFile; fileRef = B673FDAF27E8612700795864 /* InspectorSidebarToolbarTop.swift */; }; + B673FDB627E8612700795864 /* InspectorSidebar.swift in Sources */ = {isa = PBXBuildFile; fileRef = B673FDB227E8612700795864 /* InspectorSidebar.swift */; }; D70F5E2C27E4E8CF004EE4B9 /* WelcomeModule in Frameworks */ = {isa = PBXBuildFile; productRef = D70F5E2B27E4E8CF004EE4B9 /* WelcomeModule */; }; D7211D4327E066CE008F2ED7 /* Localized+Ex.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7211D4227E066CE008F2ED7 /* Localized+Ex.swift */; }; D7211D4727E06BFE008F2ED7 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = D7211D4927E06BFE008F2ED7 /* Localizable.strings */; }; @@ -86,13 +88,13 @@ 2805D9E827E5ED180032BC56 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = ""; }; 286620A427E4AB6900E18C2B /* BreadcrumbsComponent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BreadcrumbsComponent.swift; sourceTree = ""; }; 2875A46C27E3BE5B007805F8 /* BreadcrumbsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BreadcrumbsView.swift; sourceTree = ""; }; - 287776E627E3413200D46668 /* SideBar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SideBar.swift; sourceTree = ""; }; + 287776E627E3413200D46668 /* NavigatorSidebar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavigatorSidebar.swift; sourceTree = ""; }; 287776E827E34BC700D46668 /* TabBar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TabBar.swift; sourceTree = ""; }; - 287776EC27E350D800D46668 /* SideBarItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SideBarItem.swift; sourceTree = ""; }; + 287776EC27E350D800D46668 /* NavigatorSidebarItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavigatorSidebarItem.swift; sourceTree = ""; }; 287776EE27E3515300D46668 /* TabBarItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TabBarItem.swift; sourceTree = ""; }; 289978EC27E4E97E00BB0357 /* FileIconStyle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FileIconStyle.swift; sourceTree = ""; }; - 28B0A19727E385C300B73177 /* SideBarToolbarTop.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SideBarToolbarTop.swift; sourceTree = ""; }; - 28FFE1BE27E3A441001939DB /* SideBarToolbarBottom.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SideBarToolbarBottom.swift; sourceTree = ""; }; + 28B0A19727E385C300B73177 /* NavigatorSidebarToolbarTop.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavigatorSidebarToolbarTop.swift; sourceTree = ""; }; + 28FFE1BE27E3A441001939DB /* NavigatorSidebarToolbarBottom.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavigatorSidebarToolbarBottom.swift; sourceTree = ""; }; 34EE19BD27E0469C00F152CE /* BlurView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlurView.swift; sourceTree = ""; }; 5E3C6A3427E72AE000A7CA0D /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Localizable.strings; sourceTree = ""; }; 70F2E28327E848720002BA81 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.strings"; sourceTree = ""; }; @@ -104,6 +106,8 @@ B658FB3D27DA9E1000EA4DBD /* CodeEditTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CodeEditTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; B658FB4727DA9E1000EA4DBD /* CodeEditUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CodeEditUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; B673FDAC27E8296A00795864 /* PressActionsModifier.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PressActionsModifier.swift; sourceTree = ""; }; + B673FDAF27E8612700795864 /* InspectorSidebarToolbarTop.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InspectorSidebarToolbarTop.swift; sourceTree = ""; }; + B673FDB227E8612700795864 /* InspectorSidebar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InspectorSidebar.swift; sourceTree = ""; }; D7211D4227E066CE008F2ED7 /* Localized+Ex.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Localized+Ex.swift"; sourceTree = ""; }; D7211D4827E06BFE008F2ED7 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; D7211D4A27E06C01008F2ED7 /* sr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sr; path = sr.lproj/Localizable.strings; sourceTree = ""; }; @@ -193,15 +197,15 @@ path = Breadcrumbs; sourceTree = ""; }; - 287776EA27E350A100D46668 /* SideBar */ = { + 287776EA27E350A100D46668 /* NavigatorSidebar */ = { isa = PBXGroup; children = ( - 287776E627E3413200D46668 /* SideBar.swift */, - 287776EC27E350D800D46668 /* SideBarItem.swift */, - 28B0A19727E385C300B73177 /* SideBarToolbarTop.swift */, - 28FFE1BE27E3A441001939DB /* SideBarToolbarBottom.swift */, + 287776E627E3413200D46668 /* NavigatorSidebar.swift */, + 287776EC27E350D800D46668 /* NavigatorSidebarItem.swift */, + 28B0A19727E385C300B73177 /* NavigatorSidebarToolbarTop.swift */, + 28FFE1BE27E3A441001939DB /* NavigatorSidebarToolbarBottom.swift */, ); - path = SideBar; + path = NavigatorSidebar; sourceTree = ""; }; 287776EB27E350BA00D46668 /* TabBar */ = { @@ -258,7 +262,8 @@ B673FDAC27E8296A00795864 /* PressActionsModifier.swift */, B658FB3127DA9E0F00EA4DBD /* WorkspaceView.swift */, 2875A46E27E3BE63007805F8 /* Breadcrumbs */, - 287776EA27E350A100D46668 /* SideBar */, + B673FDAE27E8612700795864 /* InspectorSidebar */, + 287776EA27E350A100D46668 /* NavigatorSidebar */, 287776EB27E350BA00D46668 /* TabBar */, 04F2BF1027DBB3AF0024EAB1 /* Settings */, 34EE19BC27E0467F00F152CE /* CustomViews */, @@ -279,6 +284,16 @@ path = "Preview Content"; sourceTree = ""; }; + B673FDAE27E8612700795864 /* InspectorSidebar */ = { + isa = PBXGroup; + children = ( + B673FDB227E8612700795864 /* InspectorSidebar.swift */, + B673FDAF27E8612700795864 /* InspectorSidebarToolbarTop.swift */, + ); + name = InspectorSidebar; + path = Breadcrumbs/InspectorSidebar; + sourceTree = ""; + }; D7211D4427E066D4008F2ED7 /* Localization */ = { isa = PBXGroup; children = ( @@ -492,6 +507,7 @@ files = ( 2B7A583527E4BA0100D25D4E /* AppDelegate.swift in Sources */, 2875A46D27E3BE5B007805F8 /* BreadcrumbsView.swift in Sources */, + B673FDB627E8612700795864 /* InspectorSidebar.swift in Sources */, 0485EB1D27E7338100138301 /* QuickOpenItem.swift in Sources */, 04540D5B27DD08C300E91B77 /* SettingsView.swift in Sources */, D72E1A8927E44D7C00EB11B9 /* WelcomeWindowView.swift in Sources */, @@ -509,14 +525,15 @@ 287776EF27E3515300D46668 /* TabBarItem.swift in Sources */, D72E1A8727E4242900EB11B9 /* RecentProjectsView.swift in Sources */, 04660F6A27E51E5C00477777 /* CodeEditWindowController.swift in Sources */, - 287776E727E3413200D46668 /* SideBar.swift in Sources */, - 287776ED27E350D800D46668 /* SideBarItem.swift in Sources */, + B673FDB427E8612700795864 /* InspectorSidebarToolbarTop.swift in Sources */, + 287776E727E3413200D46668 /* NavigatorSidebar.swift in Sources */, + 287776ED27E350D800D46668 /* NavigatorSidebarItem.swift in Sources */, 289978ED27E4E97E00BB0357 /* FileIconStyle.swift in Sources */, 04660F6627E3ACEF00477777 /* ReopenBehavior.swift in Sources */, D72E1A8327E3B0D400EB11B9 /* WelcomeView.swift in Sources */, 043C321627E3201F006AE443 /* WorkspaceDocument.swift in Sources */, - 28B0A19827E385C300B73177 /* SideBarToolbarTop.swift in Sources */, - 28FFE1BF27E3A441001939DB /* SideBarToolbarBottom.swift in Sources */, + 28B0A19827E385C300B73177 /* NavigatorSidebarToolbarTop.swift in Sources */, + 28FFE1BF27E3A441001939DB /* NavigatorSidebarToolbarBottom.swift in Sources */, 0485EB2327E7791400138301 /* QuickOpenPreviewView.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/CodeEdit/Breadcrumbs/InspectorSidebar/InspectorSidebar.swift b/CodeEdit/Breadcrumbs/InspectorSidebar/InspectorSidebar.swift new file mode 100644 index 0000000000..937c36c5e4 --- /dev/null +++ b/CodeEdit/Breadcrumbs/InspectorSidebar/InspectorSidebar.swift @@ -0,0 +1,39 @@ +// +// InspectorSidebar.swift +// CodeEdit +// +// Created by Austin Condiff on 3/21/22. +// + +import SwiftUI +import WorkspaceClient + +struct InspectorSidebar: View { + @ObservedObject var workspace: WorkspaceDocument + var windowController: NSWindowController + @State private var selection: Int = 0 + + var body: some View { + VStack { + switch selection { + case 0: + Text("File Inspector") + case 1: + Text("History Inspector") + case 2: + Text("Quick Help Inspector") + default: EmptyView() + } + } + .frame( + minWidth: 250, + minHeight: 0, + maxHeight: .infinity, + alignment: .center + ) + .safeAreaInset(edge: .top) { + InspectorSidebarToolbarTop(selection: $selection) + .padding(.bottom, -8) + } + } +} diff --git a/CodeEdit/Breadcrumbs/InspectorSidebar/InspectorSidebarToolbarTop.swift b/CodeEdit/Breadcrumbs/InspectorSidebar/InspectorSidebarToolbarTop.swift new file mode 100644 index 0000000000..ac90edea1b --- /dev/null +++ b/CodeEdit/Breadcrumbs/InspectorSidebar/InspectorSidebarToolbarTop.swift @@ -0,0 +1,47 @@ +// +// InspectorSidebarToolbar.swift +// CodeEdit +// +// Created by Austin Condiff on 3/21/22. +// + +import SwiftUI + +struct InspectorSidebarToolbarTop: View { + @Binding var selection: Int + + var body: some View { + HStack(spacing: 10) { + icon(systemImage: "doc", title: "File Inspector", id: 0) + icon(systemImage: "clock", title: "History Inspector", id: 1) + icon(systemImage: "questionmark.circle", title: "Quick Help Inspector", id: 2) + } + .frame(height: 29, alignment: .center) + .frame(maxWidth: .infinity) + .overlay(alignment: .top) { + Divider() + } + .overlay(alignment: .bottom) { + Divider() + } + } + + func icon(systemImage: String, title: String, id: Int) -> some View { + Button { + selection = id + } label: { + Image(systemName: systemImage) + .help(title) + .symbolVariant(id == selection ? .fill : .none) + .foregroundColor(id == selection ? .accentColor : .secondary) + .frame(width: 16, alignment: .center) + } + .buttonStyle(.plain) + } +} + +struct InspectorSidebarToolbar_Previews: PreviewProvider { + static var previews: some View { + InspectorSidebarToolbarTop(selection: .constant(0)) + } +} diff --git a/CodeEdit/NavigatorSidebar/NavigatorSidebar.swift b/CodeEdit/NavigatorSidebar/NavigatorSidebar.swift new file mode 100644 index 0000000000..e7bc14c12c --- /dev/null +++ b/CodeEdit/NavigatorSidebar/NavigatorSidebar.swift @@ -0,0 +1,42 @@ +// +// SideBar.swift +// CodeEdit +// +// Created by Lukas Pistrol on 17.03.22. +// + +import SwiftUI +import WorkspaceClient + +struct NavigatorSidebar: View { + @ObservedObject var workspace: WorkspaceDocument + var windowController: NSWindowController + @State private var selection: Int = 0 + + var body: some View { + List { + switch selection { + case 0: + Section(header: Text(workspace.fileURL?.lastPathComponent ?? "Unknown")) { + ForEach( + workspace.fileItems.sortItems(foldersOnTop: workspace.sortFoldersOnTop) + ) { item in // Instead of OutlineGroup + NavigatorSidebarItem( + item: item, + workspace: workspace, + windowController: windowController + ) + } + } + default: EmptyView() + } + } + .safeAreaInset(edge: .top) { + NavigatorSidebarToolbarTop(selection: $selection) + .padding(.bottom, -8) + } + .safeAreaInset(edge: .bottom) { + NavigatorSidebarToolbarBottom(workspace: workspace) + } + } +} diff --git a/CodeEdit/NavigatorSidebar/NavigatorSidebarItem.swift b/CodeEdit/NavigatorSidebar/NavigatorSidebarItem.swift new file mode 100644 index 0000000000..ee638662da --- /dev/null +++ b/CodeEdit/NavigatorSidebar/NavigatorSidebarItem.swift @@ -0,0 +1,57 @@ +// +// SideBarItem.swift +// CodeEdit +// +// Created by Lukas Pistrol on 17.03.22. +// + +import SwiftUI +import WorkspaceClient +import CodeFile + +struct NavigatorSidebarItem: View { + @AppStorage(FileIconStyle.storageKey) var iconStyle: FileIconStyle = .default + + var item: WorkspaceClient.FileItem + @ObservedObject var workspace: WorkspaceDocument + var windowController: NSWindowController + @State var isExpanded: Bool = false + + var body: some View { + if item.children == nil { + sidebarFileItem(item) + .id(item.id) + } else { + sidebarFolderItem(item) + .id(item.id) + } + } + + func sidebarFileItem(_ item: WorkspaceClient.FileItem) -> some View { + NavigationLink { + WorkspaceCodeFileView(windowController: windowController, + workspace: workspace) + .onAppear { workspace.openFile(item: item) } + } label: { + Label(item.url.lastPathComponent, systemImage: item.systemImage) + .accentColor(iconStyle == .color ? item.iconColor : .secondary) + .font(.callout) + } + } + + func sidebarFolderItem(_ item: WorkspaceClient.FileItem) -> some View { + DisclosureGroup(isExpanded: $isExpanded) { + if isExpanded { // Only load when expanded -> Improves performance massively + ForEach(item.children!.sortItems(foldersOnTop: workspace.sortFoldersOnTop)) { child in + NavigatorSidebarItem(item: child, + workspace: workspace, + windowController: windowController) + } + } + } label: { + Label(item.url.lastPathComponent, systemImage: item.systemImage) + .accentColor(.secondary) + .font(.callout) + } + } +} diff --git a/CodeEdit/NavigatorSidebar/NavigatorSidebarToolbarBottom.swift b/CodeEdit/NavigatorSidebar/NavigatorSidebarToolbarBottom.swift new file mode 100644 index 0000000000..e2e77d4e07 --- /dev/null +++ b/CodeEdit/NavigatorSidebar/NavigatorSidebarToolbarBottom.swift @@ -0,0 +1,55 @@ +// +// SideBarToolbarBottom.swift +// CodeEdit +// +// Created by Lukas Pistrol on 17.03.22. +// + +import SwiftUI + +struct NavigatorSidebarToolbarBottom: View { + + @ObservedObject var workspace: WorkspaceDocument + + var body: some View { + HStack(spacing: 10) { + addNewFileButton + Spacer() + sortButton + } + .frame(height: 32, alignment: .center) + .frame(maxWidth: .infinity) + .padding(.horizontal, 4) + .overlay(alignment: .top) { + Divider() + } + } + + private var addNewFileButton: some View { + Menu { + Button("Add File") {} + .disabled(true) + Button("Not implemented yet") {} + .disabled(true) + } label: { + Image(systemName: "plus") + } + .menuStyle(.borderlessButton) + .menuIndicator(.hidden) + .frame(maxWidth: 30) + } + + private var sortButton: some View { + Menu { + Button { + workspace.sortFoldersOnTop.toggle() + } label: { + Text(workspace.sortFoldersOnTop ? "Alphabetically" : "Folders on top") + } + } label: { + Image(systemName: "line.3.horizontal.decrease.circle") + } + .menuStyle(.borderlessButton) + .frame(maxWidth: 30) + } +} diff --git a/CodeEdit/NavigatorSidebar/NavigatorSidebarToolbarTop.swift b/CodeEdit/NavigatorSidebar/NavigatorSidebarToolbarTop.swift new file mode 100644 index 0000000000..292ec41614 --- /dev/null +++ b/CodeEdit/NavigatorSidebar/NavigatorSidebarToolbarTop.swift @@ -0,0 +1,53 @@ +// +// SideBarToolbar.swift +// CodeEdit +// +// Created by Lukas Pistrol on 17.03.22. +// + +import SwiftUI + +struct NavigatorSidebarToolbarTop: View { + @Binding var selection: Int + + var body: some View { + HStack(spacing: 10) { + icon(systemImage: "folder", title: "Project", id: 0) + icon(systemImage: "globe", title: "Version Control", id: 1) + icon(systemImage: "magnifyingglass", title: "Search", id: 2) + icon(systemImage: "shippingbox", title: "...", id: 3) + icon(systemImage: "play", title: "...", id: 4) + icon(systemImage: "exclamationmark.triangle", title: "...", id: 5) + icon(systemImage: "curlybraces.square", title: "...", id: 6) + icon(systemImage: "puzzlepiece.extension", title: "...", id: 7) + icon(systemImage: "square.grid.2x2", title: "...", id: 8) + } + .frame(height: 29, alignment: .center) + .frame(maxWidth: .infinity) + .overlay(alignment: .top) { + Divider() + } + .overlay(alignment: .bottom) { + Divider() + } + } + + func icon(systemImage: String, title: String, id: Int) -> some View { + Button { + selection = id + } label: { + Image(systemName: systemImage) + .help(title) + .symbolVariant(id == selection ? .fill : .none) + .foregroundColor(id == selection ? .accentColor : .secondary) + .frame(width: 16, alignment: .center) + } + .buttonStyle(.plain) + } +} + +struct NavigatorSidebarToolbar_Previews: PreviewProvider { + static var previews: some View { + NavigatorSidebarToolbarTop(selection: .constant(0)) + } +} diff --git a/CodeEdit/WorkspaceView.swift b/CodeEdit/WorkspaceView.swift index 7c82b36e25..430f1ef07c 100644 --- a/CodeEdit/WorkspaceView.swift +++ b/CodeEdit/WorkspaceView.swift @@ -23,15 +23,23 @@ struct WorkspaceView: View { @State private var showingAlert = false @State private var alertTitle = "" @State private var alertMsg = "" + @State var showInspector = true var body: some View { NavigationView { if workspace.workspaceClient != nil { - SideBar(workspace: workspace, windowController: windowController) + NavigatorSidebar(workspace: workspace, windowController: windowController) .frame(minWidth: 250) - - WorkspaceCodeFileView(windowController: windowController, - workspace: workspace) + HSplitView { + WorkspaceCodeFileView(windowController: windowController, + workspace: workspace) + .frame(maxWidth: .infinity, maxHeight: .infinity) + InspectorSidebar(workspace: workspace, windowController: windowController) + .toolbar { + RightToolBarItems(showInspector: $showInspector) + } + .frame(minWidth: 250, maxWidth: .infinity, maxHeight: .infinity) + } } else { EmptyView() } @@ -51,6 +59,18 @@ struct WorkspaceView: View { } } +struct RightToolBarItems: ToolbarContent { + @Binding var showInspector: Bool + var body: some ToolbarContent { + ToolbarItem(content: { Spacer() } ) + ToolbarItem(placement: .primaryAction) { + Button(action: { showInspector.toggle() }) { + Label("Toggle Inspector", systemImage: "sidebar.right") + } + } + } +} + struct ContentView_Previews: PreviewProvider { static var previews: some View { WorkspaceView(windowController: NSWindowController(), workspace: .init()) From db353bfac38ec8c71898ce7af2b3fba25fe1a77f Mon Sep 17 00:00:00 2001 From: Austin Condiff Date: Mon, 21 Mar 2022 04:54:12 -0500 Subject: [PATCH 2/6] Inspector sidebar --- CodeEdit/SideBar/SideBar.swift | 42 --------------- CodeEdit/SideBar/SideBarItem.swift | 57 --------------------- CodeEdit/SideBar/SideBarToolbarBottom.swift | 55 -------------------- CodeEdit/SideBar/SideBarToolbarTop.swift | 53 ------------------- 4 files changed, 207 deletions(-) delete mode 100644 CodeEdit/SideBar/SideBar.swift delete mode 100644 CodeEdit/SideBar/SideBarItem.swift delete mode 100644 CodeEdit/SideBar/SideBarToolbarBottom.swift delete mode 100644 CodeEdit/SideBar/SideBarToolbarTop.swift diff --git a/CodeEdit/SideBar/SideBar.swift b/CodeEdit/SideBar/SideBar.swift deleted file mode 100644 index ec0ef1e1fd..0000000000 --- a/CodeEdit/SideBar/SideBar.swift +++ /dev/null @@ -1,42 +0,0 @@ -// -// SideBar.swift -// CodeEdit -// -// Created by Lukas Pistrol on 17.03.22. -// - -import SwiftUI -import WorkspaceClient - -struct SideBar: View { - @ObservedObject var workspace: WorkspaceDocument - var windowController: NSWindowController - @State private var selection: Int = 0 - - var body: some View { - List { - switch selection { - case 0: - Section(header: Text(workspace.fileURL?.lastPathComponent ?? "Unknown")) { - ForEach( - workspace.fileItems.sortItems(foldersOnTop: workspace.sortFoldersOnTop) - ) { item in // Instead of OutlineGroup - SideBarItem( - item: item, - workspace: workspace, - windowController: windowController - ) - } - } - default: EmptyView() - } - } - .safeAreaInset(edge: .top) { - SideBarToolbarTop(selection: $selection) - .padding(.bottom, -8) - } - .safeAreaInset(edge: .bottom) { - SideBarToolbarBottom(workspace: workspace) - } - } -} diff --git a/CodeEdit/SideBar/SideBarItem.swift b/CodeEdit/SideBar/SideBarItem.swift deleted file mode 100644 index 389e526bfa..0000000000 --- a/CodeEdit/SideBar/SideBarItem.swift +++ /dev/null @@ -1,57 +0,0 @@ -// -// SideBarItem.swift -// CodeEdit -// -// Created by Lukas Pistrol on 17.03.22. -// - -import SwiftUI -import WorkspaceClient -import CodeFile - -struct SideBarItem: View { - @AppStorage(FileIconStyle.storageKey) var iconStyle: FileIconStyle = .default - - var item: WorkspaceClient.FileItem - @ObservedObject var workspace: WorkspaceDocument - var windowController: NSWindowController - @State var isExpanded: Bool = false - - var body: some View { - if item.children == nil { - sidebarFileItem(item) - .id(item.id) - } else { - sidebarFolderItem(item) - .id(item.id) - } - } - - func sidebarFileItem(_ item: WorkspaceClient.FileItem) -> some View { - NavigationLink { - WorkspaceCodeFileView(windowController: windowController, - workspace: workspace) - .onAppear { workspace.openFile(item: item) } - } label: { - Label(item.url.lastPathComponent, systemImage: item.systemImage) - .accentColor(iconStyle == .color ? item.iconColor : .secondary) - .font(.callout) - } - } - - func sidebarFolderItem(_ item: WorkspaceClient.FileItem) -> some View { - DisclosureGroup(isExpanded: $isExpanded) { - if isExpanded { // Only load when expanded -> Improves performance massively - ForEach(item.children!.sortItems(foldersOnTop: workspace.sortFoldersOnTop)) { child in - SideBarItem(item: child, - workspace: workspace, - windowController: windowController) - } - } - } label: { - Label(item.url.lastPathComponent, systemImage: item.systemImage) - .accentColor(.secondary) - .font(.callout) - } - } -} diff --git a/CodeEdit/SideBar/SideBarToolbarBottom.swift b/CodeEdit/SideBar/SideBarToolbarBottom.swift deleted file mode 100644 index 4306d66741..0000000000 --- a/CodeEdit/SideBar/SideBarToolbarBottom.swift +++ /dev/null @@ -1,55 +0,0 @@ -// -// SideBarToolbarBottom.swift -// CodeEdit -// -// Created by Lukas Pistrol on 17.03.22. -// - -import SwiftUI - -struct SideBarToolbarBottom: View { - - @ObservedObject var workspace: WorkspaceDocument - - var body: some View { - HStack(spacing: 10) { - addNewFileButton - Spacer() - sortButton - } - .frame(height: 32, alignment: .center) - .frame(maxWidth: .infinity) - .padding(.horizontal, 4) - .overlay(alignment: .top) { - Divider() - } - } - - private var addNewFileButton: some View { - Menu { - Button("Add File") {} - .disabled(true) - Button("Not implemented yet") {} - .disabled(true) - } label: { - Image(systemName: "plus") - } - .menuStyle(.borderlessButton) - .menuIndicator(.hidden) - .frame(maxWidth: 30) - } - - private var sortButton: some View { - Menu { - Button { - workspace.sortFoldersOnTop.toggle() - } label: { - Text(workspace.sortFoldersOnTop ? "Alphabetically" : "Folders on top") - } - } label: { - Image(systemName: "line.3.horizontal.decrease.circle") - } - .menuStyle(.borderlessButton) - .frame(maxWidth: 30) - } -} diff --git a/CodeEdit/SideBar/SideBarToolbarTop.swift b/CodeEdit/SideBar/SideBarToolbarTop.swift deleted file mode 100644 index 4a29803554..0000000000 --- a/CodeEdit/SideBar/SideBarToolbarTop.swift +++ /dev/null @@ -1,53 +0,0 @@ -// -// SideBarToolbar.swift -// CodeEdit -// -// Created by Lukas Pistrol on 17.03.22. -// - -import SwiftUI - -struct SideBarToolbarTop: View { - @Binding var selection: Int - - var body: some View { - HStack(spacing: 10) { - icon(systemImage: "folder", title: "Project", id: 0) - icon(systemImage: "globe", title: "Version Control", id: 1) - icon(systemImage: "magnifyingglass", title: "Search", id: 2) - icon(systemImage: "shippingbox", title: "...", id: 3) - icon(systemImage: "play", title: "...", id: 4) - icon(systemImage: "exclamationmark.triangle", title: "...", id: 5) - icon(systemImage: "curlybraces.square", title: "...", id: 6) - icon(systemImage: "puzzlepiece.extension", title: "...", id: 7) - icon(systemImage: "square.grid.2x2", title: "...", id: 8) - } - .frame(height: 29, alignment: .center) - .frame(maxWidth: .infinity) - .overlay(alignment: .top) { - Divider() - } - .overlay(alignment: .bottom) { - Divider() - } - } - - func icon(systemImage: String, title: String, id: Int) -> some View { - Button { - selection = id - } label: { - Image(systemName: systemImage) - .help(title) - .symbolVariant(id == selection ? .fill : .none) - .foregroundColor(id == selection ? .accentColor : .secondary) - .frame(width: 16, alignment: .center) - } - .buttonStyle(.plain) - } -} - -struct SideBarToolbar_Previews: PreviewProvider { - static var previews: some View { - SideBarToolbarTop(selection: .constant(0)) - } -} From ab073b0686fa1169e55e4f911cbf0ae768c7525e Mon Sep 17 00:00:00 2001 From: Austin Condiff Date: Mon, 21 Mar 2022 04:58:43 -0500 Subject: [PATCH 3/6] Fixed lint errors --- .../InspectorSidebar/InspectorSidebar.swift | 6 +++--- CodeEdit/WorkspaceView.swift | 15 --------------- 2 files changed, 3 insertions(+), 18 deletions(-) diff --git a/CodeEdit/Breadcrumbs/InspectorSidebar/InspectorSidebar.swift b/CodeEdit/Breadcrumbs/InspectorSidebar/InspectorSidebar.swift index 937c36c5e4..ffc6bd79dc 100644 --- a/CodeEdit/Breadcrumbs/InspectorSidebar/InspectorSidebar.swift +++ b/CodeEdit/Breadcrumbs/InspectorSidebar/InspectorSidebar.swift @@ -17,11 +17,11 @@ struct InspectorSidebar: View { VStack { switch selection { case 0: - Text("File Inspector") + Text("File Inspector") case 1: - Text("History Inspector") + Text("History Inspector") case 2: - Text("Quick Help Inspector") + Text("Quick Help Inspector") default: EmptyView() } } diff --git a/CodeEdit/WorkspaceView.swift b/CodeEdit/WorkspaceView.swift index 430f1ef07c..c6b51d21db 100644 --- a/CodeEdit/WorkspaceView.swift +++ b/CodeEdit/WorkspaceView.swift @@ -35,9 +35,6 @@ struct WorkspaceView: View { workspace: workspace) .frame(maxWidth: .infinity, maxHeight: .infinity) InspectorSidebar(workspace: workspace, windowController: windowController) - .toolbar { - RightToolBarItems(showInspector: $showInspector) - } .frame(minWidth: 250, maxWidth: .infinity, maxHeight: .infinity) } } else { @@ -59,18 +56,6 @@ struct WorkspaceView: View { } } -struct RightToolBarItems: ToolbarContent { - @Binding var showInspector: Bool - var body: some ToolbarContent { - ToolbarItem(content: { Spacer() } ) - ToolbarItem(placement: .primaryAction) { - Button(action: { showInspector.toggle() }) { - Label("Toggle Inspector", systemImage: "sidebar.right") - } - } - } -} - struct ContentView_Previews: PreviewProvider { static var previews: some View { WorkspaceView(windowController: NSWindowController(), workspace: .init()) From 8ad41a006760526ed5b5862c58a017ef554809ec Mon Sep 17 00:00:00 2001 From: Austin Condiff Date: Mon, 21 Mar 2022 05:01:41 -0500 Subject: [PATCH 4/6] Moved files --- CodeEdit.xcodeproj/project.pbxproj | 21 ++++--------------- .../InspectorSidebar/InspectorSidebar.swift | 0 .../InspectorSidebarToolbarTop.swift | 0 3 files changed, 4 insertions(+), 17 deletions(-) rename CodeEdit/{Breadcrumbs => }/InspectorSidebar/InspectorSidebar.swift (100%) rename CodeEdit/{Breadcrumbs => }/InspectorSidebar/InspectorSidebarToolbarTop.swift (100%) diff --git a/CodeEdit.xcodeproj/project.pbxproj b/CodeEdit.xcodeproj/project.pbxproj index b069f4146e..b466aa4599 100644 --- a/CodeEdit.xcodeproj/project.pbxproj +++ b/CodeEdit.xcodeproj/project.pbxproj @@ -39,8 +39,7 @@ B658FB3727DA9E1000EA4DBD /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = B658FB3627DA9E1000EA4DBD /* Preview Assets.xcassets */; }; B65E614627E6765D00255275 /* Introspect in Frameworks */ = {isa = PBXBuildFile; productRef = B65E614527E6765D00255275 /* Introspect */; }; B673FDAD27E8296A00795864 /* PressActionsModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = B673FDAC27E8296A00795864 /* PressActionsModifier.swift */; }; - B673FDB427E8612700795864 /* InspectorSidebarToolbarTop.swift in Sources */ = {isa = PBXBuildFile; fileRef = B673FDAF27E8612700795864 /* InspectorSidebarToolbarTop.swift */; }; - B673FDB627E8612700795864 /* InspectorSidebar.swift in Sources */ = {isa = PBXBuildFile; fileRef = B673FDB227E8612700795864 /* InspectorSidebar.swift */; }; + B673FDBA27E8846700795864 /* InspectorSidebar in Resources */ = {isa = PBXBuildFile; fileRef = B673FDB927E8846700795864 /* InspectorSidebar */; }; D70F5E2C27E4E8CF004EE4B9 /* WelcomeModule in Frameworks */ = {isa = PBXBuildFile; productRef = D70F5E2B27E4E8CF004EE4B9 /* WelcomeModule */; }; D7211D4327E066CE008F2ED7 /* Localized+Ex.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7211D4227E066CE008F2ED7 /* Localized+Ex.swift */; }; D7211D4727E06BFE008F2ED7 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = D7211D4927E06BFE008F2ED7 /* Localizable.strings */; }; @@ -106,8 +105,7 @@ B658FB3D27DA9E1000EA4DBD /* CodeEditTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CodeEditTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; B658FB4727DA9E1000EA4DBD /* CodeEditUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CodeEditUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; B673FDAC27E8296A00795864 /* PressActionsModifier.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PressActionsModifier.swift; sourceTree = ""; }; - B673FDAF27E8612700795864 /* InspectorSidebarToolbarTop.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InspectorSidebarToolbarTop.swift; sourceTree = ""; }; - B673FDB227E8612700795864 /* InspectorSidebar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InspectorSidebar.swift; sourceTree = ""; }; + B673FDB927E8846700795864 /* InspectorSidebar */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = InspectorSidebar; path = CodeEdit/InspectorSidebar; sourceTree = SOURCE_ROOT; }; D7211D4227E066CE008F2ED7 /* Localized+Ex.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Localized+Ex.swift"; sourceTree = ""; }; D7211D4827E06BFE008F2ED7 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; D7211D4A27E06C01008F2ED7 /* sr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sr; path = sr.lproj/Localizable.strings; sourceTree = ""; }; @@ -262,7 +260,7 @@ B673FDAC27E8296A00795864 /* PressActionsModifier.swift */, B658FB3127DA9E0F00EA4DBD /* WorkspaceView.swift */, 2875A46E27E3BE63007805F8 /* Breadcrumbs */, - B673FDAE27E8612700795864 /* InspectorSidebar */, + B673FDB927E8846700795864 /* InspectorSidebar */, 287776EA27E350A100D46668 /* NavigatorSidebar */, 287776EB27E350BA00D46668 /* TabBar */, 04F2BF1027DBB3AF0024EAB1 /* Settings */, @@ -284,16 +282,6 @@ path = "Preview Content"; sourceTree = ""; }; - B673FDAE27E8612700795864 /* InspectorSidebar */ = { - isa = PBXGroup; - children = ( - B673FDB227E8612700795864 /* InspectorSidebar.swift */, - B673FDAF27E8612700795864 /* InspectorSidebarToolbarTop.swift */, - ); - name = InspectorSidebar; - path = Breadcrumbs/InspectorSidebar; - sourceTree = ""; - }; D7211D4427E066D4008F2ED7 /* Localization */ = { isa = PBXGroup; children = ( @@ -439,6 +427,7 @@ buildActionMask = 2147483647; files = ( B658FB3727DA9E1000EA4DBD /* Preview Assets.xcassets in Resources */, + B673FDBA27E8846700795864 /* InspectorSidebar in Resources */, D7211D4727E06BFE008F2ED7 /* Localizable.strings in Resources */, B658FB3427DA9E1000EA4DBD /* Assets.xcassets in Resources */, 043C321A27E32295006AE443 /* MainMenu.xib in Resources */, @@ -507,7 +496,6 @@ files = ( 2B7A583527E4BA0100D25D4E /* AppDelegate.swift in Sources */, 2875A46D27E3BE5B007805F8 /* BreadcrumbsView.swift in Sources */, - B673FDB627E8612700795864 /* InspectorSidebar.swift in Sources */, 0485EB1D27E7338100138301 /* QuickOpenItem.swift in Sources */, 04540D5B27DD08C300E91B77 /* SettingsView.swift in Sources */, D72E1A8927E44D7C00EB11B9 /* WelcomeWindowView.swift in Sources */, @@ -525,7 +513,6 @@ 287776EF27E3515300D46668 /* TabBarItem.swift in Sources */, D72E1A8727E4242900EB11B9 /* RecentProjectsView.swift in Sources */, 04660F6A27E51E5C00477777 /* CodeEditWindowController.swift in Sources */, - B673FDB427E8612700795864 /* InspectorSidebarToolbarTop.swift in Sources */, 287776E727E3413200D46668 /* NavigatorSidebar.swift in Sources */, 287776ED27E350D800D46668 /* NavigatorSidebarItem.swift in Sources */, 289978ED27E4E97E00BB0357 /* FileIconStyle.swift in Sources */, diff --git a/CodeEdit/Breadcrumbs/InspectorSidebar/InspectorSidebar.swift b/CodeEdit/InspectorSidebar/InspectorSidebar.swift similarity index 100% rename from CodeEdit/Breadcrumbs/InspectorSidebar/InspectorSidebar.swift rename to CodeEdit/InspectorSidebar/InspectorSidebar.swift diff --git a/CodeEdit/Breadcrumbs/InspectorSidebar/InspectorSidebarToolbarTop.swift b/CodeEdit/InspectorSidebar/InspectorSidebarToolbarTop.swift similarity index 100% rename from CodeEdit/Breadcrumbs/InspectorSidebar/InspectorSidebarToolbarTop.swift rename to CodeEdit/InspectorSidebar/InspectorSidebarToolbarTop.swift From 2a1a98262514260e099dcd912d5dc1a3c0af7059 Mon Sep 17 00:00:00 2001 From: Austin Condiff Date: Mon, 21 Mar 2022 05:17:03 -0500 Subject: [PATCH 5/6] Moved files --- CodeEdit.xcodeproj/project.pbxproj | 20 ++++++-- .../InspectorSidebar/InspectorSidebar.swift | 2 +- .../InspectorSidebarToolbar.swift | 47 +++++++++++++++++++ .../InspectorSidebarToolbarTop.swift | 47 ------------------- 4 files changed, 64 insertions(+), 52 deletions(-) create mode 100644 CodeEdit/InspectorSidebar/InspectorSidebarToolbar.swift delete mode 100644 CodeEdit/InspectorSidebar/InspectorSidebarToolbarTop.swift diff --git a/CodeEdit.xcodeproj/project.pbxproj b/CodeEdit.xcodeproj/project.pbxproj index b466aa4599..4f555be4ae 100644 --- a/CodeEdit.xcodeproj/project.pbxproj +++ b/CodeEdit.xcodeproj/project.pbxproj @@ -39,7 +39,8 @@ B658FB3727DA9E1000EA4DBD /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = B658FB3627DA9E1000EA4DBD /* Preview Assets.xcassets */; }; B65E614627E6765D00255275 /* Introspect in Frameworks */ = {isa = PBXBuildFile; productRef = B65E614527E6765D00255275 /* Introspect */; }; B673FDAD27E8296A00795864 /* PressActionsModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = B673FDAC27E8296A00795864 /* PressActionsModifier.swift */; }; - B673FDBA27E8846700795864 /* InspectorSidebar in Resources */ = {isa = PBXBuildFile; fileRef = B673FDB927E8846700795864 /* InspectorSidebar */; }; + B6EE989027E8879A00CDD8AB /* InspectorSidebar.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6EE988F27E8879A00CDD8AB /* InspectorSidebar.swift */; }; + B6EE989227E887C600CDD8AB /* InspectorSidebarToolbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6EE989127E887C600CDD8AB /* InspectorSidebarToolbar.swift */; }; D70F5E2C27E4E8CF004EE4B9 /* WelcomeModule in Frameworks */ = {isa = PBXBuildFile; productRef = D70F5E2B27E4E8CF004EE4B9 /* WelcomeModule */; }; D7211D4327E066CE008F2ED7 /* Localized+Ex.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7211D4227E066CE008F2ED7 /* Localized+Ex.swift */; }; D7211D4727E06BFE008F2ED7 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = D7211D4927E06BFE008F2ED7 /* Localizable.strings */; }; @@ -105,7 +106,8 @@ B658FB3D27DA9E1000EA4DBD /* CodeEditTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CodeEditTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; B658FB4727DA9E1000EA4DBD /* CodeEditUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CodeEditUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; B673FDAC27E8296A00795864 /* PressActionsModifier.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PressActionsModifier.swift; sourceTree = ""; }; - B673FDB927E8846700795864 /* InspectorSidebar */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = InspectorSidebar; path = CodeEdit/InspectorSidebar; sourceTree = SOURCE_ROOT; }; + B6EE988F27E8879A00CDD8AB /* InspectorSidebar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InspectorSidebar.swift; sourceTree = ""; }; + B6EE989127E887C600CDD8AB /* InspectorSidebarToolbar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InspectorSidebarToolbar.swift; sourceTree = ""; }; D7211D4227E066CE008F2ED7 /* Localized+Ex.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Localized+Ex.swift"; sourceTree = ""; }; D7211D4827E06BFE008F2ED7 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; D7211D4A27E06C01008F2ED7 /* sr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sr; path = sr.lproj/Localizable.strings; sourceTree = ""; }; @@ -252,6 +254,7 @@ B658FB2E27DA9E0F00EA4DBD /* CodeEdit */ = { isa = PBXGroup; children = ( + B6EE988E27E8877C00CDD8AB /* InspectorSidebar */, 0485EB1727E7016400138301 /* Quick Open */, 04660F6027E3A68A00477777 /* Info.plist */, D72E1A8127E3B0A300EB11B9 /* Welcome */, @@ -260,7 +263,6 @@ B673FDAC27E8296A00795864 /* PressActionsModifier.swift */, B658FB3127DA9E0F00EA4DBD /* WorkspaceView.swift */, 2875A46E27E3BE63007805F8 /* Breadcrumbs */, - B673FDB927E8846700795864 /* InspectorSidebar */, 287776EA27E350A100D46668 /* NavigatorSidebar */, 287776EB27E350BA00D46668 /* TabBar */, 04F2BF1027DBB3AF0024EAB1 /* Settings */, @@ -282,6 +284,15 @@ path = "Preview Content"; sourceTree = ""; }; + B6EE988E27E8877C00CDD8AB /* InspectorSidebar */ = { + isa = PBXGroup; + children = ( + B6EE988F27E8879A00CDD8AB /* InspectorSidebar.swift */, + B6EE989127E887C600CDD8AB /* InspectorSidebarToolbar.swift */, + ); + path = InspectorSidebar; + sourceTree = ""; + }; D7211D4427E066D4008F2ED7 /* Localization */ = { isa = PBXGroup; children = ( @@ -427,7 +438,6 @@ buildActionMask = 2147483647; files = ( B658FB3727DA9E1000EA4DBD /* Preview Assets.xcassets in Resources */, - B673FDBA27E8846700795864 /* InspectorSidebar in Resources */, D7211D4727E06BFE008F2ED7 /* Localizable.strings in Resources */, B658FB3427DA9E1000EA4DBD /* Assets.xcassets in Resources */, 043C321A27E32295006AE443 /* MainMenu.xib in Resources */, @@ -500,6 +510,7 @@ 04540D5B27DD08C300E91B77 /* SettingsView.swift in Sources */, D72E1A8927E44D7C00EB11B9 /* WelcomeWindowView.swift in Sources */, 04540D5C27DD08C300E91B77 /* GeneralSettingsView.swift in Sources */, + B6EE989227E887C600CDD8AB /* InspectorSidebarToolbar.swift in Sources */, B673FDAD27E8296A00795864 /* PressActionsModifier.swift in Sources */, 043C321427E31FF6006AE443 /* CodeEditDocumentController.swift in Sources */, 04660F6427E3ACAF00477777 /* Appearances.swift in Sources */, @@ -515,6 +526,7 @@ 04660F6A27E51E5C00477777 /* CodeEditWindowController.swift in Sources */, 287776E727E3413200D46668 /* NavigatorSidebar.swift in Sources */, 287776ED27E350D800D46668 /* NavigatorSidebarItem.swift in Sources */, + B6EE989027E8879A00CDD8AB /* InspectorSidebar.swift in Sources */, 289978ED27E4E97E00BB0357 /* FileIconStyle.swift in Sources */, 04660F6627E3ACEF00477777 /* ReopenBehavior.swift in Sources */, D72E1A8327E3B0D400EB11B9 /* WelcomeView.swift in Sources */, diff --git a/CodeEdit/InspectorSidebar/InspectorSidebar.swift b/CodeEdit/InspectorSidebar/InspectorSidebar.swift index ffc6bd79dc..065696715e 100644 --- a/CodeEdit/InspectorSidebar/InspectorSidebar.swift +++ b/CodeEdit/InspectorSidebar/InspectorSidebar.swift @@ -11,7 +11,7 @@ import WorkspaceClient struct InspectorSidebar: View { @ObservedObject var workspace: WorkspaceDocument var windowController: NSWindowController - @State private var selection: Int = 0 + @State private var selection: Int = 0 var body: some View { VStack { diff --git a/CodeEdit/InspectorSidebar/InspectorSidebarToolbar.swift b/CodeEdit/InspectorSidebar/InspectorSidebarToolbar.swift new file mode 100644 index 0000000000..1b4e9c4a7e --- /dev/null +++ b/CodeEdit/InspectorSidebar/InspectorSidebarToolbar.swift @@ -0,0 +1,47 @@ +// +// InspectorSidebarToolbar.swift +// CodeEdit +// +// Created by Austin Condiff on 3/21/22. +// + +import SwiftUI + +struct InspectorSidebarToolbarTop: View { + @Binding var selection: Int + + var body: some View { + HStack(spacing: 10) { + icon(systemImage: "doc", title: "File Inspector", id: 0) + icon(systemImage: "clock", title: "History Inspector", id: 1) + icon(systemImage: "questionmark.circle", title: "Quick Help Inspector", id: 2) + } + .frame(height: 29, alignment: .center) + .frame(maxWidth: .infinity) + .overlay(alignment: .top) { + Divider() + } + .overlay(alignment: .bottom) { + Divider() + } + } + + func icon(systemImage: String, title: String, id: Int) -> some View { + Button { + selection = id + } label: { + Image(systemName: systemImage) + .help(title) + .symbolVariant(id == selection ? .fill : .none) + .foregroundColor(id == selection ? .accentColor : .secondary) + .frame(width: 16, alignment: .center) + } + .buttonStyle(.plain) + } +} + +struct InspectorSidebarToolbar_Previews: PreviewProvider { + static var previews: some View { + InspectorSidebarToolbarTop(selection: .constant(0)) + } +} diff --git a/CodeEdit/InspectorSidebar/InspectorSidebarToolbarTop.swift b/CodeEdit/InspectorSidebar/InspectorSidebarToolbarTop.swift deleted file mode 100644 index ac90edea1b..0000000000 --- a/CodeEdit/InspectorSidebar/InspectorSidebarToolbarTop.swift +++ /dev/null @@ -1,47 +0,0 @@ -// -// InspectorSidebarToolbar.swift -// CodeEdit -// -// Created by Austin Condiff on 3/21/22. -// - -import SwiftUI - -struct InspectorSidebarToolbarTop: View { - @Binding var selection: Int - - var body: some View { - HStack(spacing: 10) { - icon(systemImage: "doc", title: "File Inspector", id: 0) - icon(systemImage: "clock", title: "History Inspector", id: 1) - icon(systemImage: "questionmark.circle", title: "Quick Help Inspector", id: 2) - } - .frame(height: 29, alignment: .center) - .frame(maxWidth: .infinity) - .overlay(alignment: .top) { - Divider() - } - .overlay(alignment: .bottom) { - Divider() - } - } - - func icon(systemImage: String, title: String, id: Int) -> some View { - Button { - selection = id - } label: { - Image(systemName: systemImage) - .help(title) - .symbolVariant(id == selection ? .fill : .none) - .foregroundColor(id == selection ? .accentColor : .secondary) - .frame(width: 16, alignment: .center) - } - .buttonStyle(.plain) - } -} - -struct InspectorSidebarToolbar_Previews: PreviewProvider { - static var previews: some View { - InspectorSidebarToolbarTop(selection: .constant(0)) - } -} From 5406931b9d2c2f7abccca10dc238803cc610540e Mon Sep 17 00:00:00 2001 From: Austin Condiff Date: Mon, 21 Mar 2022 05:20:28 -0500 Subject: [PATCH 6/6] Lint error fix --- CodeEdit/InspectorSidebar/InspectorSidebar.swift | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/CodeEdit/InspectorSidebar/InspectorSidebar.swift b/CodeEdit/InspectorSidebar/InspectorSidebar.swift index 065696715e..55a71a39ae 100644 --- a/CodeEdit/InspectorSidebar/InspectorSidebar.swift +++ b/CodeEdit/InspectorSidebar/InspectorSidebar.swift @@ -16,13 +16,13 @@ struct InspectorSidebar: View { var body: some View { VStack { switch selection { - case 0: - Text("File Inspector") - case 1: - Text("History Inspector") - case 2: - Text("Quick Help Inspector") - default: EmptyView() + case 0: + Text("File Inspector") + case 1: + Text("History Inspector") + case 2: + Text("Quick Help Inspector") + default: EmptyView() } } .frame(