feat: support clicking checkbox on the row view
This commit is contained in:
1 parent
b2a7dca18f
commit
fc69e0f30d
2 files changed
+35
-19
No files matched your search
@@ -121,20 +121,22 @@ class TableGroupView: NSStackView {
|
||||
widthAnchor.constraint(equalToConstant: self.width).isActive = true
|
||||
}
|
||||
|
||||
func addRow(_ row: Row, onMouseEntered: EventClosure? = nil, onMouseExited: EventClosure? = nil) -> RowInfo {
|
||||
return addRow(leftText: row.leftTitle, rightViews: row.rightViews, subText: row.subTitle, onMouseEntered: onMouseEntered, onMouseExited: onMouseExited)
|
||||
func addRow(_ row: Row, onClick: EventClosure? = nil, onMouseEntered: EventClosure? = nil, onMouseExited: EventClosure? = nil) -> RowInfo {
|
||||
return addRow(leftText: row.leftTitle, rightViews: row.rightViews, subText: row.subTitle, onClick: onClick, onMouseEntered: onMouseEntered, onMouseExited: onMouseExited)
|
||||
}
|
||||
|
||||
func addRow(leftText: String? = nil, rightViews: NSView, subText: String? = nil,
|
||||
onClick: EventClosure? = nil,
|
||||
onMouseEntered: EventClosure? = nil,
|
||||
onMouseExited: EventClosure? = nil) -> RowInfo {
|
||||
return addRow(leftText: leftText, rightViews: [rightViews], subText: subText, onMouseEntered: onMouseEntered, onMouseExited: onMouseExited)
|
||||
return addRow(leftText: leftText, rightViews: [rightViews], subText: subText, onClick: onClick, onMouseEntered: onMouseEntered, onMouseExited: onMouseExited)
|
||||
}
|
||||
|
||||
func addRow(leftText: String? = nil, rightViews: [NSView]? = nil, subText: String? = nil,
|
||||
onClick: EventClosure? = nil,
|
||||
onMouseEntered: EventClosure? = nil,
|
||||
onMouseExited: EventClosure? = nil) -> RowInfo {
|
||||
let rowView = MouseHoverStackView()
|
||||
let rowView = ClickHoverStackView()
|
||||
rowView.orientation = .vertical
|
||||
rowView.spacing = 2
|
||||
|
||||
@@ -231,6 +233,10 @@ class TableGroupView: NSStackView {
|
||||
rows.append(rowInfo)
|
||||
tableView.addArrangedSubview(rowView)
|
||||
|
||||
rowView.onClick = { event, view in
|
||||
onClick?(event, view)
|
||||
}
|
||||
|
||||
rowView.onMouseEntered = { (event, view) in
|
||||
if let onMouseEntered = onMouseEntered {
|
||||
if let rowInfo = self.rows.first(where: { $0.view === rowView }) {
|
||||
@@ -295,22 +301,10 @@ class TableGroupView: NSStackView {
|
||||
return ceil(boundingRect.height)
|
||||
}
|
||||
|
||||
// Helper function to get system default border color
|
||||
func systemDefaultBorderColor() -> CGColor {
|
||||
if #available(macOS 10.14, *) {
|
||||
if NSApp.effectiveAppearance.name == .darkAqua {
|
||||
return NSColor(calibratedWhite: 0.6, alpha: 1.0).cgColor // Dark mode color
|
||||
} else {
|
||||
return NSColor(calibratedWhite: 0.8, alpha: 1.0).cgColor // Light mode color
|
||||
}
|
||||
} else {
|
||||
// Fallback color for older macOS versions
|
||||
return NSColor(calibratedWhite: 0.8, alpha: 1.0).cgColor
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class MouseHoverStackView: NSStackView {
|
||||
class ClickHoverStackView: NSStackView {
|
||||
var onClick: EventClosure?
|
||||
var onMouseEntered: EventClosure?
|
||||
var onMouseExited: EventClosure?
|
||||
|
||||
@@ -321,6 +315,10 @@ class MouseHoverStackView: NSStackView {
|
||||
}
|
||||
let newTrackingArea = NSTrackingArea(rect: bounds, options: [.mouseEnteredAndExited, .activeAlways], owner: self, userInfo: nil)
|
||||
addTrackingArea(newTrackingArea)
|
||||
|
||||
let clickGesture = NSClickGestureRecognizer(target: self, action: #selector(handleClick(_:)))
|
||||
clickGesture.delaysPrimaryMouseButtonEvents = false
|
||||
addGestureRecognizer(clickGesture)
|
||||
}
|
||||
|
||||
override func mouseEntered(with event: NSEvent) {
|
||||
@@ -330,4 +328,10 @@ class MouseHoverStackView: NSStackView {
|
||||
override func mouseExited(with event: NSEvent) {
|
||||
onMouseExited?(event, self)
|
||||
}
|
||||
|
||||
@objc private func handleClick(_ sender: NSClickGestureRecognizer) {
|
||||
if let event = sender.view?.window?.currentEvent {
|
||||
onClick?(event, self)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -102,7 +102,9 @@ class ShowHideIllustratedView {
|
||||
let table = TableGroupView(width: ModelAdvancedSettingsWindow.width)
|
||||
for row in showHideRows {
|
||||
if row.supportedModels.contains(model) {
|
||||
_ = table.addRow(leftText: row.leftTitle, rightViews: row.rightViews, onMouseEntered: { event, view in
|
||||
_ = table.addRow(leftText: row.leftTitle, rightViews: row.rightViews, onClick: { event, view in
|
||||
self.clickCheckbox(rowId: row.rowId)
|
||||
}, onMouseEntered: { event, view in
|
||||
self.updateImageView(rowId: row.rowId)
|
||||
})
|
||||
}
|
||||
@@ -234,6 +236,16 @@ class ShowHideIllustratedView {
|
||||
}
|
||||
}
|
||||
|
||||
private func clickCheckbox(rowId: String) {
|
||||
let row = showHideRows.first { $0.rowId.elementsEqual(rowId) }
|
||||
row?.rightViews.forEach { view in
|
||||
if let checkbox = view as? NSButton {
|
||||
// Toggle the checkbox state
|
||||
checkbox.state = (checkbox.state == .on) ? .off : .on
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class ModelAdvancedSettingsWindow: NSWindow {
|
||||
|
||||
Reference in new issue
Block a user