From 5a8303a45f9ca40393f09cb6d25d2dece6370d5b Mon Sep 17 00:00:00 2001 From: ShikiSuen Date: Thu, 23 Mar 2023 12:24:07 +0800 Subject: [PATCH] CtlCandidateTDK // Add isFilterable(). --- .../Sources/CandidateWindow/CandidatePool.swift | 10 ++++++++++ .../TDKCandidates/VwrCandidateTDK_Cocoa.swift | 5 ++--- .../TDKCandidates/VwrCandidateTDK_SwiftUI.swift | 4 +--- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/Packages/vChewing_CandidateWindow/Sources/CandidateWindow/CandidatePool.swift b/Packages/vChewing_CandidateWindow/Sources/CandidateWindow/CandidatePool.swift index 57510f4e..aec467c9 100644 --- a/Packages/vChewing_CandidateWindow/Sources/CandidateWindow/CandidatePool.swift +++ b/Packages/vChewing_CandidateWindow/Sources/CandidateWindow/CandidatePool.swift @@ -232,6 +232,16 @@ public extension CandidatePool { } return (min, nil) } + + func isFilterable(target index: Int) -> Bool { + let spanLength = candidateDataAll[index].spanLength + guard spanLength == 1 else { return true } + return cellsOf(spanLength: spanLength).count > 1 + } + + func cellsOf(spanLength: Int) -> [CandidateCellData] { + candidateDataAll.filter { $0.spanLength == spanLength } + } } // MARK: - Privates. diff --git a/Packages/vChewing_CandidateWindow/Sources/CandidateWindow/TDKCandidates/VwrCandidateTDK_Cocoa.swift b/Packages/vChewing_CandidateWindow/Sources/CandidateWindow/TDKCandidates/VwrCandidateTDK_Cocoa.swift index d1e72ef6..940022ef 100644 --- a/Packages/vChewing_CandidateWindow/Sources/CandidateWindow/TDKCandidates/VwrCandidateTDK_Cocoa.swift +++ b/Packages/vChewing_CandidateWindow/Sources/CandidateWindow/TDKCandidates/VwrCandidateTDK_Cocoa.swift @@ -333,6 +333,7 @@ private extension VwrCandidateTDKCocoa { var theMenu: NSMenu? private func prepareMenu() { + guard let thePool = (target as? VwrCandidateTDKCocoa)?.thePool else { return } let newMenu = NSMenu() let boostMenuItem = NSMenuItem( title: "↑ \(cellData.displayedText)", @@ -350,9 +351,7 @@ private extension VwrCandidateTDKCocoa { nerfMenuItem.target = self newMenu.addItem(nerfMenuItem) - if let dataAll = (target as? VwrCandidateTDKCocoa)?.thePool.candidateDataAll, - dataAll.count > cellData.index, dataAll[cellData.index].spanLength > 1 - { + if thePool.isFilterable(target: cellData.index) { let filterMenuItem = NSMenuItem( title: "✖︎ \(cellData.displayedText)", action: #selector(menuActionOfFiltering(_:)), diff --git a/Packages/vChewing_CandidateWindow/Sources/CandidateWindow/TDKCandidates/VwrCandidateTDK_SwiftUI.swift b/Packages/vChewing_CandidateWindow/Sources/CandidateWindow/TDKCandidates/VwrCandidateTDK_SwiftUI.swift index de38d0b1..f1bbe16f 100644 --- a/Packages/vChewing_CandidateWindow/Sources/CandidateWindow/TDKCandidates/VwrCandidateTDK_SwiftUI.swift +++ b/Packages/vChewing_CandidateWindow/Sources/CandidateWindow/TDKCandidates/VwrCandidateTDK_SwiftUI.swift @@ -168,9 +168,7 @@ extension VwrCandidateTDK { } label: { Text("↓ " + cell.displayedText) } - if thePool.candidateDataAll.count > cell.index, - thePool.candidateDataAll[cell.index].spanLength > 1 - { + if thePool.isFilterable(target: cell.index) { Button { didRightClickCandidateAt(cell.index, action: .toFilter) } label: {