173 lines
5.5 KiB
Swift
173 lines
5.5 KiB
Swift
//
|
|
// HorizontalTableView.swift
|
|
// TGUIKit
|
|
//
|
|
// Created by keepcoder on 17/10/2016.
|
|
// Copyright © 2016 Telegram. All rights reserved.
|
|
//
|
|
|
|
import Cocoa
|
|
|
|
public class HorizontalTableView: TableView {
|
|
|
|
public override init(frame frameRect: NSRect, isFlipped: Bool = true, bottomInset:CGFloat = 0, drawBorder: Bool = false) {
|
|
super.init(frame: frameRect, isFlipped: isFlipped, bottomInset: bottomInset, drawBorder: drawBorder)
|
|
// [[self.scrollView verticalScroller] setControlSize:NSSmallControlSize];
|
|
//self.verticalScroller?.controlSize = NSControlSize.small
|
|
self.rotate(byDegrees: 270)
|
|
|
|
self.clipView.border = []
|
|
self.tableView.border = []
|
|
|
|
}
|
|
|
|
public override func updateAfterInitialize(isFlipped: Bool = true, bottomInset: CGFloat = 0, drawBorder: Bool = false) {
|
|
super.updateAfterInitialize(isFlipped: isFlipped, bottomInset: bottomInset, drawBorder: drawBorder)
|
|
|
|
self.hasHorizontalScroller = false
|
|
self.horizontalScrollElasticity = .none
|
|
}
|
|
|
|
|
|
|
|
override open func scrollWheel(with event: NSEvent) {
|
|
|
|
if let applyExternalScroll = self.applyExternalScroll, applyExternalScroll(event) {
|
|
return
|
|
}
|
|
|
|
var scrollPoint = contentView.bounds.origin
|
|
let isInverted: Bool = System.isScrollInverted
|
|
if event.scrollingDeltaY != 0 {
|
|
if isInverted {
|
|
scrollPoint.y += -event.scrollingDeltaY
|
|
} else {
|
|
scrollPoint.y -= event.scrollingDeltaY
|
|
}
|
|
scrollPoint.y = max(0, min(scrollPoint.y, listHeight - clipView.bounds.height))
|
|
clipView.scroll(to: scrollPoint)
|
|
window?.scrollWheel(with: event)
|
|
return
|
|
}
|
|
if event.scrollingDeltaY != 0 || event.scrollingDeltaX != 0 {
|
|
super.scrollWheel(with: event)
|
|
}
|
|
|
|
}
|
|
|
|
|
|
open override var hasVerticalScroller: Bool {
|
|
get {
|
|
return false
|
|
}
|
|
set {
|
|
super.hasVerticalScroller = newValue
|
|
}
|
|
}
|
|
|
|
required public init?(coder: NSCoder) {
|
|
fatalError("init(coder:) has not been implemented")
|
|
}
|
|
|
|
override func rowView(item:TableRowItem) -> TableRowView {
|
|
let identifier:String = item.identifier
|
|
|
|
if let resortView = self.resortController?.resortView {
|
|
if resortView.item?.stableId == item.stableId {
|
|
return resortView
|
|
}
|
|
}
|
|
var view: NSView? = item.isUniqueView ? nil : self.tableView.makeView(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: identifier), owner: self.tableView)
|
|
|
|
if(view == nil) {
|
|
let vz = item.viewClass() as! TableRowView.Type
|
|
|
|
view = vz.init(frame:NSMakeRect(0, 0, item.height, frame.height))
|
|
|
|
view?.identifier = NSUserInterfaceItemIdentifier(rawValue: identifier)
|
|
|
|
}
|
|
|
|
return view as! TableRowView;
|
|
}
|
|
|
|
public override func viewNecessary(at row:Int, makeIfNecessary: Bool = false) -> TableRowView? {
|
|
if row < 0 || row >= count {
|
|
return nil
|
|
}
|
|
if let resortView = self.resortController?.resortView {
|
|
if resortView.item?.stableId == self.item(at: row).stableId {
|
|
return resortView
|
|
}
|
|
}
|
|
return self.tableView.rowView(atRow: row, makeIfNecessary: makeIfNecessary) as? TableRowView
|
|
}
|
|
|
|
}
|
|
|
|
|
|
open class HorizontalScrollView : ScrollView {
|
|
|
|
|
|
|
|
public override init(frame frameRect: NSRect) {
|
|
super.init(frame: frameRect)
|
|
self.hasVerticalScroller = false
|
|
self.verticalScrollElasticity = .none
|
|
}
|
|
|
|
required public init?(coder: NSCoder) {
|
|
fatalError("init(coder:) has not been implemented")
|
|
}
|
|
|
|
|
|
override open func scrollWheel(with event: NSEvent) {
|
|
|
|
if let applyExternalScroll = self.applyExternalScroll, applyExternalScroll(event) {
|
|
return
|
|
}
|
|
|
|
var scrollPoint = contentView.bounds.origin
|
|
let isInverted: Bool = System.isScrollInverted
|
|
if event.scrollingDeltaY != 0 {
|
|
if isInverted {
|
|
scrollPoint.x += -event.scrollingDeltaY
|
|
} else {
|
|
scrollPoint.x -= event.scrollingDeltaY
|
|
}
|
|
scrollPoint.x = min(max(0, floorToScreenPixels(backingScaleFactor, scrollPoint.x)), documentView!.frame.width - frame.width)
|
|
clipView.scroll(to: scrollPoint)
|
|
window?.scrollWheel(with: event)
|
|
return
|
|
}
|
|
|
|
if documentView!.frame.width > frame.width {
|
|
if event.scrollingDeltaY != 0 || event.scrollingDeltaX != 0 {
|
|
super.scrollWheel(with: event)
|
|
}
|
|
} else {
|
|
superview?.scrollWheel(with: event)
|
|
}
|
|
}
|
|
|
|
public func makeScrollPoint(_ event: NSEvent) -> NSPoint {
|
|
var scrollPoint = contentView.bounds.origin
|
|
let isInverted: Bool = System.isScrollInverted
|
|
if event.scrollingDeltaY != 0 {
|
|
if isInverted {
|
|
scrollPoint.x += -event.scrollingDeltaY
|
|
} else {
|
|
scrollPoint.x -= event.scrollingDeltaY
|
|
}
|
|
}
|
|
if event.scrollingDeltaX != 0 {
|
|
if !isInverted {
|
|
scrollPoint.x += -event.scrollingDeltaX
|
|
} else {
|
|
scrollPoint.x -= event.scrollingDeltaX
|
|
}
|
|
}
|
|
return scrollPoint
|
|
}
|
|
}
|