Give mixed selections something to do
A Drag of different kinds showed an empty wheel, because the catalog only answers for a single category. Filee's answer is a mixed profile, so add Zip (one archive, flat names) and Merge (non-PDFs are converted to PDF first); a multi-file drag of one kind gets Zip too.
This commit is contained in:
@@ -38,24 +38,30 @@ enum QuickMenu {
|
||||
|
||||
let category = FileKind.category(of: urls[0])
|
||||
|
||||
if ConversionCatalog.outputs(for: urls.map { FileKind.category(of: $0) }).isEmpty {
|
||||
// The convert wheel also carries the combine tools, so it is empty only
|
||||
// when there is genuinely nothing to offer.
|
||||
let conversions = WheelBuilder.items(kind: .convert, urls: urls)
|
||||
if conversions.isEmpty {
|
||||
let item = NSMenuItem(title: "No conversions for this selection", action: nil, keyEquivalent: "")
|
||||
item.isEnabled = false
|
||||
menu.addItem(item)
|
||||
} else {
|
||||
let convert = NSMenu()
|
||||
for item in WheelBuilder.items(kind: .convert, urls: urls) {
|
||||
for item in conversions {
|
||||
guard case .format(let target) = item.payload else { continue }
|
||||
let entry = NSMenuItem(title: item.title, action: #selector(Choice.fire), keyEquivalent: "")
|
||||
entry.target = makeChoice {
|
||||
JobStore.shared.submit(urls: urls, target: .format(format(from: item)))
|
||||
JobStore.shared.submit(urls: urls, target: .format(target))
|
||||
}
|
||||
entry.isEnabled = item.isEnabled
|
||||
if let reason = item.availability.reason { entry.toolTip = reason }
|
||||
convert.addItem(entry)
|
||||
}
|
||||
let submenu = NSMenuItem(title: "Convert", action: nil, keyEquivalent: "")
|
||||
submenu.submenu = convert
|
||||
menu.addItem(submenu)
|
||||
if !convert.items.isEmpty {
|
||||
let submenu = NSMenuItem(title: "Convert", action: nil, keyEquivalent: "")
|
||||
submenu.submenu = convert
|
||||
menu.addItem(submenu)
|
||||
}
|
||||
}
|
||||
|
||||
let tools = WheelBuilder.items(kind: .tools, urls: urls)
|
||||
@@ -102,9 +108,4 @@ enum QuickMenu {
|
||||
retained.append(choice)
|
||||
return choice
|
||||
}
|
||||
|
||||
private static func format(from item: WheelItem) -> Format {
|
||||
if case .format(let format) = item.payload { return format }
|
||||
return .png
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user