Use representedObject to deliver fileEncoding by menuItem

This commit is contained in:
1024jp 2024-02-20 02:14:59 +09:00
parent 87050a7192
commit 5b5afcef2e
4 changed files with 5 additions and 21 deletions

View File

@ -779,7 +779,7 @@ final class Document: NSDocument, AdditionalDocumentPreparing, EncodingChanging
switch menuItem.action {
case #selector(changeEncoding(_:)):
menuItem.state = (menuItem.tag == self.fileEncoding.tag) ? .on : .off
menuItem.state = (menuItem.representedObject as? FileEncoding == self.fileEncoding) ? .on : .off
case #selector(changeLineEnding(_:)):
menuItem.state = (menuItem.tag == self.lineEnding.index) ? .on : .off
@ -952,7 +952,7 @@ final class Document: NSDocument, AdditionalDocumentPreparing, EncodingChanging
/// Changes the document text encoding with sender's tag.
@IBAction func changeEncoding(_ sender: NSMenuItem) {
let fileEncoding = FileEncoding(tag: sender.tag)
guard let fileEncoding = sender.representedObject as? FileEncoding else { return assertionFailure() }
self.askChangingEncoding(to: fileEncoding)
}

View File

@ -41,7 +41,7 @@ extension Array<FileEncoding?> {
self.map { fileEncoding in
if let fileEncoding {
let item = NSMenuItem(title: fileEncoding.localizedName, action: #selector((any EncodingChanging).changeEncoding), keyEquivalent: "")
item.tag = fileEncoding.tag
item.representedObject = fileEncoding
return item
} else {
return .separator()

View File

@ -43,19 +43,3 @@ struct FileEncoding: Equatable, Hashable {
: localizedName
}
}
extension FileEncoding {
init(tag: Int) {
self.encoding = String.Encoding(rawValue: UInt(abs(tag)))
self.withUTF8BOM = (self.encoding == .utf8) && (tag < 0)
}
var tag: Int {
(self.withUTF8BOM ? -1 : 1) * Int(self.encoding.rawValue)
}
}

View File

@ -155,7 +155,7 @@ import Combine
// observe document status change
self.document.$fileEncoding
.receive(on: DispatchQueue.main)
.sink { [weak self] in self?.encodingPopUpButton?.selectItem(withTag: $0.tag) },
.sink { [weak self] in self?.encodingPopUpButton?.selectItem(withTitle: $0.localizedName) },
self.document.$lineEnding
.receive(on: DispatchQueue.main)
.sink { [weak self] in self?.lineEndingPopUpButton?.selectItem(withTag: $0.index) },
@ -220,7 +220,7 @@ import Combine
menu.items.removeAll { !$0.isSectionHeader }
menu.items += fileEncodings.menuItems
popUpButton.selectItem(withTag: self.document.fileEncoding.tag)
popUpButton.selectItem(withTitle: self.document.fileEncoding.localizedName)
}