From 46d4e7bdb360343719130b557cc9bbd78835dc56 Mon Sep 17 00:00:00 2001 From: ShikiSuen Date: Thu, 29 Feb 2024 11:45:51 +0800 Subject: [PATCH] MainAssembly // Refactor wherever using UniformTypeIdentifiers. --- .../CocoaExtension/CocoaExtension_Misc.swift | 10 ++++++ .../CocoaExtension_NSView.swift | 33 +++++++++++++++---- .../ClientListMgr/VwrClientListMgr.swift | 5 ++- .../VwrSettingsPaneDictionary.swift | 1 - 4 files changed, 39 insertions(+), 10 deletions(-) diff --git a/Packages/vChewing_CocoaExtension/Sources/CocoaExtension/CocoaExtension_Misc.swift b/Packages/vChewing_CocoaExtension/Sources/CocoaExtension/CocoaExtension_Misc.swift index 987f5858..b7054a87 100644 --- a/Packages/vChewing_CocoaExtension/Sources/CocoaExtension/CocoaExtension_Misc.swift +++ b/Packages/vChewing_CocoaExtension/Sources/CocoaExtension/CocoaExtension_Misc.swift @@ -338,3 +338,13 @@ public extension NSApplication { UserDefaults.standard.object(forKey: "AppleAccentColor") != nil } } + +// MARK: - Pasteboard Type Extension. + +public extension NSPasteboard.PasteboardType { + static let kUTTypeFileURL = Self(rawValue: "public.file-url") // import UniformTypeIdentifiers + static let kUTTypeData = Self(rawValue: "public.data") // import UniformTypeIdentifiers + static let kUTTypeAppBundle = Self(rawValue: "com.apple.application-bundle") // import UniformTypeIdentifiers + static let kUTTypeUTF8PlainText = Self(rawValue: "public.utf8-plain-text") + static let kNSFilenamesPboardType = Self(rawValue: "NSFilenamesPboardType") +} diff --git a/Packages/vChewing_CocoaExtension/Sources/CocoaExtension/CocoaExtension_NSView.swift b/Packages/vChewing_CocoaExtension/Sources/CocoaExtension/CocoaExtension_NSView.swift index 225421ea..b7a53311 100644 --- a/Packages/vChewing_CocoaExtension/Sources/CocoaExtension/CocoaExtension_NSView.swift +++ b/Packages/vChewing_CocoaExtension/Sources/CocoaExtension/CocoaExtension_NSView.swift @@ -460,12 +460,33 @@ public extension NSMenuItem { var allowedTypes: [String] = ["txt"] - public init() { + public convenience init( + _ givenTitle: String? = nil, + target: AnyObject? = nil, + action: Selector? = nil, + postDrag: ((URL) -> Void)? = nil + ) { + self.init( + verbatim: givenTitle?.localized, + target: target, + action: action, + postDrag: postDrag + ) + } + + public init( + verbatim givenTitle: String? = nil, + target: AnyObject? = nil, + action: Selector? = nil, + postDrag: ((URL) -> Void)? = nil + ) { super.init(frame: .zero) bezelStyle = .rounded - title = "DRAG FILE TO HERE" - registerForDraggedTypes([.init(rawValue: kUTTypeFileURL as String)]) - target = self + title = givenTitle ?? "DRAG FILE TO HERE" + registerForDraggedTypes([.kUTTypeFileURL]) + self.target = target ?? self + self.action = action + postDragHandler = postDrag ?? postDragHandler } required init?(coder: NSCoder) { @@ -478,7 +499,7 @@ public extension NSMenuItem { fileprivate func checkExtension(_ drag: NSDraggingInfo) -> Bool { guard let pasteboard = drag.draggingPasteboard.propertyList( - forType: NSPasteboard.PasteboardType(rawValue: "NSFilenamesPboardType") + forType: NSPasteboard.PasteboardType.kNSFilenamesPboardType ) as? [String], let path = pasteboard.first else { return false } @@ -494,7 +515,7 @@ public extension NSMenuItem { override public func performDragOperation(_ sender: NSDraggingInfo) -> Bool { guard let pasteboard = sender.draggingPasteboard.propertyList( - forType: NSPasteboard.PasteboardType(rawValue: "NSFilenamesPboardType") + forType: NSPasteboard.PasteboardType.kNSFilenamesPboardType ) as? [String], let path = pasteboard.first else { print("failure") return false diff --git a/Packages/vChewing_MainAssembly/Sources/MainAssembly/ClientListMgr/VwrClientListMgr.swift b/Packages/vChewing_MainAssembly/Sources/MainAssembly/ClientListMgr/VwrClientListMgr.swift index 0379c8e2..c3674f12 100644 --- a/Packages/vChewing_MainAssembly/Sources/MainAssembly/ClientListMgr/VwrClientListMgr.swift +++ b/Packages/vChewing_MainAssembly/Sources/MainAssembly/ClientListMgr/VwrClientListMgr.swift @@ -9,7 +9,6 @@ import AppKit import Foundation import Shared -import UniformTypeIdentifiers public class VwrClientListMgr: NSViewController { let windowWidth: CGFloat = 770 @@ -80,7 +79,7 @@ public class VwrClientListMgr: NSViewController { tblClients.intercellSpacing = CGSize(width: 17, height: 0) tblClients.rowHeight = 24 tblClients.setContentHuggingPriority(.defaultHigh, for: .vertical) - tblClients.registerForDraggedTypes([.init(rawValue: kUTTypeFileURL as String)]) + tblClients.registerForDraggedTypes([.kUTTypeFileURL]) tblClients.dataSource = self tblClients.action = #selector(onItemClicked(_:)) tblClients.target = self @@ -153,7 +152,7 @@ extension VwrClientListMgr { neta info: NSDraggingInfo, onError: @escaping () -> Void?, handler: (([URL]) -> Void)? = nil ) { let board = info.draggingPasteboard - let type = NSPasteboard.PasteboardType(rawValue: kUTTypeApplicationBundle as String) + let type = NSPasteboard.PasteboardType.kUTTypeAppBundle let options: [NSPasteboard.ReadingOptionKey: Any] = [ .urlReadingFileURLsOnly: true, .urlReadingContentsConformToTypes: [type], diff --git a/Packages/vChewing_MainAssembly/Sources/MainAssembly/Settings/SettingsUI/VwrSettingsPaneDictionary.swift b/Packages/vChewing_MainAssembly/Sources/MainAssembly/Settings/SettingsUI/VwrSettingsPaneDictionary.swift index 679879ec..70d3a438 100644 --- a/Packages/vChewing_MainAssembly/Sources/MainAssembly/Settings/SettingsUI/VwrSettingsPaneDictionary.swift +++ b/Packages/vChewing_MainAssembly/Sources/MainAssembly/Settings/SettingsUI/VwrSettingsPaneDictionary.swift @@ -11,7 +11,6 @@ import CocoaExtension import Shared import SwiftExtension import SwiftUI -import UniformTypeIdentifiers @available(macOS 13, *) public struct VwrSettingsPaneDictionary: View {