mirror of
https://github.com/XcodesOrg/XcodesApp.git
synced 2026-03-25 08:55:46 +00:00
move download settings to own PreferencePane
This commit is contained in:
parent
13e829ca88
commit
0e7deed1c6
3 changed files with 96 additions and 69 deletions
|
|
@ -4,19 +4,16 @@ import Path
|
|||
|
||||
struct AdvancedPreferencePane: View {
|
||||
@EnvironmentObject var appState: AppState
|
||||
|
||||
@AppStorage("dataSource") var dataSource: DataSource = .xcodeReleases
|
||||
@AppStorage("downloader") var downloader: Downloader = .aria2
|
||||
|
||||
var body: some View {
|
||||
VStack(alignment: .leading, spacing: 20) {
|
||||
|
||||
|
||||
GroupBox(label: Text("InstallDirectory")) {
|
||||
VStack(alignment: .leading) {
|
||||
HStack(alignment: .top, spacing: 5) {
|
||||
Text(appState.installPath).font(.footnote)
|
||||
.fixedSize(horizontal: false, vertical: true)
|
||||
.lineLimit(2)
|
||||
.fixedSize(horizontal: false, vertical: true)
|
||||
.lineLimit(2)
|
||||
Button(action: { appState.reveal(path: appState.installPath) }) {
|
||||
Image(systemName: "arrow.right.circle.fill")
|
||||
}
|
||||
|
|
@ -34,7 +31,7 @@ struct AdvancedPreferencePane: View {
|
|||
panel.directoryURL = URL(fileURLWithPath: appState.installPath)
|
||||
|
||||
if panel.runModal() == .OK {
|
||||
|
||||
|
||||
guard let pathURL = panel.url, let path = Path(url: pathURL) else { return }
|
||||
self.appState.installPath = path.string
|
||||
}
|
||||
|
|
@ -50,8 +47,8 @@ struct AdvancedPreferencePane: View {
|
|||
VStack(alignment: .leading) {
|
||||
HStack(alignment: .top, spacing: 5) {
|
||||
Text(appState.localPath).font(.footnote)
|
||||
.fixedSize(horizontal: false, vertical: true)
|
||||
.lineLimit(2)
|
||||
.fixedSize(horizontal: false, vertical: true)
|
||||
.lineLimit(2)
|
||||
Button(action: { appState.reveal(path: appState.localPath) }) {
|
||||
Image(systemName: "arrow.right.circle.fill")
|
||||
}
|
||||
|
|
@ -69,7 +66,7 @@ struct AdvancedPreferencePane: View {
|
|||
panel.directoryURL = URL(fileURLWithPath: appState.localPath)
|
||||
|
||||
if panel.runModal() == .OK {
|
||||
|
||||
|
||||
guard let pathURL = panel.url, let path = Path(url: pathURL) else { return }
|
||||
self.appState.localPath = path.string
|
||||
}
|
||||
|
|
@ -102,44 +99,13 @@ struct AdvancedPreferencePane: View {
|
|||
Toggle("AutomaticallyCreateSymbolicLink", isOn: $appState.createSymLinkOnSelect)
|
||||
.disabled(appState.createSymLinkOnSelectDisabled)
|
||||
Text("AutomaticallyCreateSymbolicLinkDescription")
|
||||
.font(.footnote)
|
||||
.fixedSize(horizontal: false, vertical: true)
|
||||
.font(.footnote)
|
||||
.fixedSize(horizontal: false, vertical: true)
|
||||
}
|
||||
.fixedSize(horizontal: false, vertical: true)
|
||||
}
|
||||
.groupBoxStyle(PreferencesGroupBoxStyle())
|
||||
|
||||
GroupBox(label: Text("DataSource")) {
|
||||
VStack(alignment: .leading) {
|
||||
Picker("DataSource", selection: $dataSource) {
|
||||
ForEach(DataSource.allCases) { dataSource in
|
||||
Text(dataSource.description)
|
||||
.tag(dataSource)
|
||||
}
|
||||
}
|
||||
.labelsHidden()
|
||||
|
||||
AttributedText(dataSourceFootnote)
|
||||
}
|
||||
|
||||
}
|
||||
.groupBoxStyle(PreferencesGroupBoxStyle())
|
||||
|
||||
GroupBox(label: Text("Downloader")) {
|
||||
VStack(alignment: .leading) {
|
||||
Picker("Downloader", selection: $downloader) {
|
||||
ForEach(Downloader.allCases) { downloader in
|
||||
Text(downloader.description)
|
||||
.tag(downloader)
|
||||
}
|
||||
}
|
||||
.labelsHidden()
|
||||
|
||||
AttributedText(downloaderFootnote)
|
||||
}
|
||||
|
||||
}
|
||||
.groupBoxStyle(PreferencesGroupBoxStyle())
|
||||
|
||||
GroupBox(label: Text("PrivilegedHelper")) {
|
||||
VStack(alignment: .leading, spacing: 8) {
|
||||
|
|
@ -168,32 +134,6 @@ struct AdvancedPreferencePane: View {
|
|||
.groupBoxStyle(PreferencesGroupBoxStyle())
|
||||
}
|
||||
}
|
||||
|
||||
private var dataSourceFootnote: NSAttributedString {
|
||||
let string = localizeString("DataSourceDescription")
|
||||
let attributedString = NSMutableAttributedString(
|
||||
string: string,
|
||||
attributes: [
|
||||
.font: NSFont.preferredFont(forTextStyle: .footnote, options: [:]),
|
||||
.foregroundColor: NSColor.labelColor
|
||||
]
|
||||
)
|
||||
attributedString.addAttribute(.link, value: URL(string: "https://xcodereleases.com")!, range: NSRange(string.range(of: "Xcode Releases")!, in: string))
|
||||
return attributedString
|
||||
}
|
||||
|
||||
private var downloaderFootnote: NSAttributedString {
|
||||
let string = localizeString("DownloaderDescription")
|
||||
let attributedString = NSMutableAttributedString(
|
||||
string: string,
|
||||
attributes: [
|
||||
.font: NSFont.preferredFont(forTextStyle: .footnote, options: [:]),
|
||||
.foregroundColor: NSColor.labelColor
|
||||
]
|
||||
)
|
||||
attributedString.addAttribute(.link, value: URL(string: "https://github.com/aria2/aria2")!, range: NSRange(string.range(of: "aria2")!, in: string))
|
||||
return attributedString
|
||||
}
|
||||
}
|
||||
|
||||
struct AdvancedPreferencePane_Previews: PreviewProvider {
|
||||
|
|
|
|||
82
Xcodes/Frontend/Preferences/DownloadPreferencePane.swift
Normal file
82
Xcodes/Frontend/Preferences/DownloadPreferencePane.swift
Normal file
|
|
@ -0,0 +1,82 @@
|
|||
import AppleAPI
|
||||
import SwiftUI
|
||||
|
||||
struct DownloadPreferencePane: View {
|
||||
@EnvironmentObject var appState: AppState
|
||||
|
||||
@AppStorage("dataSource") var dataSource: DataSource = .xcodeReleases
|
||||
@AppStorage("downloader") var downloader: Downloader = .aria2
|
||||
|
||||
var body: some View {
|
||||
VStack(alignment: .leading) {
|
||||
GroupBox(label: Text("DataSource")) {
|
||||
VStack(alignment: .leading) {
|
||||
Picker("DataSource", selection: $dataSource) {
|
||||
ForEach(DataSource.allCases) { dataSource in
|
||||
Text(dataSource.description)
|
||||
.tag(dataSource)
|
||||
}
|
||||
}
|
||||
.labelsHidden()
|
||||
|
||||
AttributedText(dataSourceFootnote)
|
||||
}
|
||||
|
||||
}
|
||||
.groupBoxStyle(PreferencesGroupBoxStyle())
|
||||
|
||||
GroupBox(label: Text("Downloader")) {
|
||||
VStack(alignment: .leading) {
|
||||
Picker("Downloader", selection: $downloader) {
|
||||
ForEach(Downloader.allCases) { downloader in
|
||||
Text(downloader.description)
|
||||
.tag(downloader)
|
||||
}
|
||||
}
|
||||
.labelsHidden()
|
||||
|
||||
AttributedText(downloaderFootnote)
|
||||
}
|
||||
|
||||
}
|
||||
.groupBoxStyle(PreferencesGroupBoxStyle())
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private var dataSourceFootnote: NSAttributedString {
|
||||
let string = localizeString("DataSourceDescription")
|
||||
let attributedString = NSMutableAttributedString(
|
||||
string: string,
|
||||
attributes: [
|
||||
.font: NSFont.preferredFont(forTextStyle: .footnote, options: [:]),
|
||||
.foregroundColor: NSColor.labelColor
|
||||
]
|
||||
)
|
||||
attributedString.addAttribute(.link, value: URL(string: "https://xcodereleases.com")!, range: NSRange(string.range(of: "Xcode Releases")!, in: string))
|
||||
return attributedString
|
||||
}
|
||||
|
||||
private var downloaderFootnote: NSAttributedString {
|
||||
let string = localizeString("DownloaderDescription")
|
||||
let attributedString = NSMutableAttributedString(
|
||||
string: string,
|
||||
attributes: [
|
||||
.font: NSFont.preferredFont(forTextStyle: .footnote, options: [:]),
|
||||
.foregroundColor: NSColor.labelColor
|
||||
]
|
||||
)
|
||||
attributedString.addAttribute(.link, value: URL(string: "https://github.com/aria2/aria2")!, range: NSRange(string.range(of: "aria2")!, in: string))
|
||||
return attributedString
|
||||
}
|
||||
}
|
||||
|
||||
struct DownloadPreferencePane_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
Group {
|
||||
GeneralPreferencePane()
|
||||
.environmentObject(AppState())
|
||||
.frame(maxWidth: 500)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -21,6 +21,11 @@ struct PreferencesView: View {
|
|||
Label("Updates", systemImage: "arrow.triangle.2.circlepath.circle")
|
||||
}
|
||||
.tag(Tabs.updates)
|
||||
DownloadPreferencePane()
|
||||
.environmentObject(appState)
|
||||
.tabItem {
|
||||
Label("Downloads", systemImage: "icloud.and.arrow.down")
|
||||
}
|
||||
AdvancedPreferencePane()
|
||||
.environmentObject(appState)
|
||||
.tabItem {
|
||||
|
|
|
|||
Loading…
Reference in a new issue