58 lines
1.5 KiB
Swift
58 lines
1.5 KiB
Swift
import SwiftUI
|
|
|
|
struct FolderOnDiskPropertyView: View {
|
|
|
|
let title: LocalizedStringKey
|
|
|
|
@Binding
|
|
var folder: String
|
|
|
|
let footer: LocalizedStringKey
|
|
|
|
let update: (URL) -> Void
|
|
|
|
init(title: LocalizedStringKey, folder: Binding<String>, footer: LocalizedStringKey, update: @escaping (URL) -> Void) {
|
|
self.title = title
|
|
self._folder = folder
|
|
self.footer = footer
|
|
self.update = update
|
|
}
|
|
|
|
var body: some View {
|
|
GenericPropertyView(title: title, footer: footer) {
|
|
HStack(alignment: .firstTextBaseline) {
|
|
Text(folder)
|
|
Spacer()
|
|
Button("Select") {
|
|
guard let url = openFolderSelectionPanel() else {
|
|
return
|
|
}
|
|
DispatchQueue.main.async {
|
|
update(url)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private func openFolderSelectionPanel() -> URL? {
|
|
let panel = NSOpenPanel()
|
|
// Sets up so user can only select a single directory
|
|
panel.canChooseFiles = false
|
|
panel.canChooseDirectories = true
|
|
panel.allowsMultipleSelection = false
|
|
panel.showsHiddenFiles = false
|
|
panel.title = "Select directory"
|
|
//panel.prompt = "Select Directory"
|
|
|
|
let response = panel.runModal()
|
|
guard response == .OK else {
|
|
return nil
|
|
}
|
|
guard let url = panel.url else {
|
|
return nil
|
|
}
|
|
return url
|
|
}
|
|
}
|