// // KMWatermarkAligementView.swift // PDF Reader Pro // // Created by tangchao on 2023/1/17. // import Cocoa typealias KMWatermarkAligementViewItemClick = (_ index: Int)->() class KMWatermarkAligementView: NSView { var leftButton = NSButton() var centerButton = NSButton() var rightButton = NSButton() var vLine = NSView() var vLine2 = NSView() var itemClick: KMWatermarkAligementViewItemClick! private var myIsEnabled: Bool = true var isEnabled: Bool { get { return myIsEnabled } set { myIsEnabled = newValue for button in [leftButton, centerButton, rightButton] { button.isEnabled = newValue } } } override init(frame frameRect: NSRect) { super.init(frame: frameRect) initSubViews() } required init?(coder: NSCoder) { super.init(coder: coder) initSubViews() } func initSubViews() { wantsLayer = true layer?.borderWidth = 1 layer?.borderColor = NSColor.black.cgColor layer?.cornerRadius = 2 addSubview(leftButton) addSubview(centerButton) addSubview(rightButton) addSubview(vLine) addSubview(vLine2) for button in [leftButton, centerButton, rightButton] { button.isBordered = false button.wantsLayer = true button.target = self button.action = #selector(buttonAction) } leftButton.title = "" centerButton.title = "" rightButton.title = "" for line in [vLine, vLine2] { line.wantsLayer = true line.layer?.backgroundColor = NSColor.black.cgColor } buttonAction(sender: leftButton) } override func layout() { super.layout() let width: CGFloat = NSWidth(self.bounds) let height: CGFloat = NSHeight(self.bounds) let itemWidth: CGFloat = width / 3 leftButton.frame = NSMakeRect(0, 0, itemWidth, height) centerButton.frame = NSMakeRect(itemWidth, 0, itemWidth, height) rightButton.frame = NSMakeRect(2*itemWidth, 0, itemWidth, height) vLine.frame = NSMakeRect(itemWidth, 0, 1, height) vLine2.frame = NSMakeRect(2*itemWidth, 0, 1, height) } @objc func buttonAction(sender: NSButton) { dealButtonSelectedState(selectButton: sender) guard let callback = itemClick else { return } var index: Int = 0 if (sender.isEqual(to: leftButton)) { index = 0 } else if (sender.isEqual(to: centerButton)) { index = 1 } else if (sender.isEqual(to: rightButton)) { index = 2 } callback(index) } func dealButtonSelectedState(selectButton: NSButton) { for button in [leftButton, centerButton, rightButton] { if (button.isEqual(to: selectButton)) { button.wantsLayer = true button.layer?.cornerRadius = 4 button.layer?.borderWidth = 1 button.layer?.borderColor = NSColor.km_init(hex: "#CED0D4").cgColor button.layer?.backgroundColor = NSColor.km_init(hex: "#CED0D499").cgColor } else { button.wantsLayer = true button.layer?.backgroundColor = NSColor.clear.cgColor button.layer?.borderColor = NSColor.clear.cgColor } } if (selectButton.isEqual(to: self.leftButton)) { self.leftButton.image = NSImage(named: "KMImageNameEditPDFAlignLeftSelect") self.leftButton.wantsLayer = true self.leftButton.layer?.backgroundColor = NSColor.km_init(hex: "#CED0D499").cgColor self.centerButton.image = NSImage(named: "KMImageNameEditPDFAlignCenter") self.rightButton.image = NSImage(named: "KMImageNameEditPDFAlignRight") } else if (selectButton.isEqual(to: self.centerButton)) { self.centerButton.image = NSImage(named: "KMImageNameEditPDFAlignCenterSelect") self.leftButton.image = NSImage(named: "KMImageNameEditPDFAlignLeft") self.rightButton.image = NSImage(named: "KMImageNameEditPDFAlignRight") } else if (selectButton.isEqual(to: self.rightButton)) { self.rightButton.image = NSImage(named: "KMImageNameEditPDFAlignRightSelect") self.centerButton.image = NSImage(named: "KMImageNameEditPDFAlignCenter") self.leftButton.image = NSImage(named: "KMImageNameEditPDFAlignLeft") } } func selectIndex(index: Int) { if (index == 0) { dealButtonSelectedState(selectButton: leftButton) } else if (index == 1) { dealButtonSelectedState(selectButton: centerButton) } else if (index == 2) { dealButtonSelectedState(selectButton: rightButton) } } }