123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167 |
- //
- // KMPreferenceSegementControl.swift
- // PDF Reader Pro
- //
- // Created by tangchao on 2023/2/3.
- //
- import Cocoa
- typealias KMPreferenceSegementItemClick = (_ index: Int) -> ()
- class KMPreferenceSegementItem: NSView {
- var imageView = NSImageView()
- var label = NSTextField(labelWithString: "")
-
- var itemID: Int = 0
-
- var itemClick: KMPreferenceSegementItemClick?
-
- var selectedImage: NSImage?
- var unSelectedImage: NSImage?
- var selectedTextColor: NSColor?
- var unSelectedTextColor: NSColor?
-
- private var mySelected: Bool = false
- var isSelected: Bool {
- get {
- return self.mySelected
- }
- set {
- self.mySelected = newValue
-
- if (newValue) {
- self.layer?.backgroundColor = NSColor(white: 0, alpha: 0.05).cgColor
-
- self.imageView.image = self.selectedImage
- self.label.textColor = self.selectedTextColor
- } else {
- self.layer?.backgroundColor = NSColor.clear.cgColor
-
- self.imageView.image = self.unSelectedImage
- self.label.textColor = self.unSelectedTextColor
- }
- }
- }
-
- override init(frame frameRect: NSRect) {
- super.init(frame: frameRect)
-
- initSubViews()
- }
-
- required init?(coder: NSCoder) {
- super.init(coder: coder)
-
- initSubViews()
- }
-
- override var isFlipped: Bool {
- return true
- }
-
- public func initSubViews() {
- self.addSubview(self.imageView)
- self.addSubview(self.label)
- self.label.alignment = .center
-
- self.wantsLayer = true
- self.layer?.cornerRadius = 7
-
- /// 新增点击手势
- let gesture = NSClickGestureRecognizer(target: self, action: #selector(gestureAction))
- self.addGestureRecognizer(gesture)
- }
-
- override func layout() {
- super.layout()
-
- let width: CGFloat = NSWidth(self.bounds)
-
- let size: CGFloat = 17
- self.imageView.frame = NSMakeRect((width-size)*0.5, 6, size, size)
-
- self.label.frame = NSMakeRect(0, self.imageView.frame.maxY+5, width, 14)
- }
-
- @objc private func gestureAction() {
- guard let callback = self.itemClick else {
- return
- }
-
- callback(self.itemID)
- }
- }
- class KMPreferenceSegementControl: NSControl {
-
- var items: Array<KMPreferenceSegementItem> = []
- var selectedIndex: Int = 0
- var selectedItem: KMPreferenceSegementItem?
-
- override init(frame frameRect: NSRect) {
- super.init(frame: frameRect)
-
- initSubViews()
- }
-
- required init?(coder: NSCoder) {
- super.init(coder: coder)
-
- initSubViews()
- }
-
- override var isFlipped: Bool {
- return true
- }
-
- func initSubViews() {
- for item in self.items {
- item.removeFromSuperview()
- }
- self.items.removeAll()
-
- for i in 0 ... 2 {
- let item = KMPreferenceSegementItem()
- item.itemID = i + 1
- self.addSubview(item)
- self.items.append(item)
-
- item.itemClick = { [weak self] index in
- self?.selectItem(index)
-
- let _ = self?.target?.perform(self?.action, with: self)
- }
- }
- }
-
- override func layout() {
- super.layout()
-
- let width: CGFloat = NSWidth(self.bounds)
-
- let itemSize: NSSize = NSSize(width: 75, height: 45)
- let leftMargin: CGFloat = (width-CGFloat(self.items.count)*itemSize.width)*0.5
- let topMargin: CGFloat = 8
- var preItem: KMPreferenceSegementItem?
- for item in self.items {
- if (preItem != nil) {
- item.frame = NSMakeRect((preItem?.frame.maxX)!, topMargin, itemSize.width, itemSize.height)
- } else {
- item.frame = NSMakeRect(leftMargin, topMargin, itemSize.width, itemSize.height)
- }
- preItem = item
- }
- }
-
- public func selectItem(_ index: Int) {
- self.selectedIndex = index
- for item in items {
- if (item.itemID == index) {
- item.isSelected = true
- self.selectedItem = item
- } else {
- item.isSelected = false
- }
- }
- }
- }
|