Swiftgram/submodules/ContactListUI/Sources/ContactListNameIndexHeader.swift
2021-07-22 19:56:00 +02:00

74 lines
2.3 KiB
Swift

import Foundation
import Display
import UIKit
import TelegramPresentationData
import ListSectionHeaderNode
final class ContactListNameIndexHeader: Equatable, ListViewItemHeader {
let id: ListViewItemNode.HeaderId
let theme: PresentationTheme
let letter: unichar
let stickDirection: ListViewItemHeaderStickDirection = .top
public let stickOverInsets: Bool = true
let height: CGFloat = 29.0
init(theme: PresentationTheme, letter: unichar) {
self.theme = theme
self.letter = letter
self.id = ListViewItemNode.HeaderId(space: 0, id: Int64(letter))
}
func combinesWith(other: ListViewItemHeader) -> Bool {
if let other = other as? ContactListNameIndexHeader, self.id == other.id {
return true
} else {
return false
}
}
func node(synchronousLoad: Bool) -> ListViewItemHeaderNode {
return ContactListNameIndexHeaderNode(theme: self.theme, letter: self.letter)
}
func updateNode(_ node: ListViewItemHeaderNode, previous: ListViewItemHeader?, next: ListViewItemHeader?) {
}
static func ==(lhs: ContactListNameIndexHeader, rhs: ContactListNameIndexHeader) -> Bool {
return lhs.id == rhs.id
}
}
final class ContactListNameIndexHeaderNode: ListViewItemHeaderNode {
private var theme: PresentationTheme
private let letter: unichar
private let sectionHeaderNode: ListSectionHeaderNode
init(theme: PresentationTheme, letter: unichar) {
self.theme = theme
self.letter = letter
self.sectionHeaderNode = ListSectionHeaderNode(theme: theme)
super.init()
if let scalar = UnicodeScalar(letter) {
self.sectionHeaderNode.title = "\(Character(scalar))"
}
self.addSubnode(self.sectionHeaderNode)
}
func updateTheme(theme: PresentationTheme) {
self.theme = theme
self.sectionHeaderNode.updateTheme(theme: theme)
}
override func updateLayout(size: CGSize, leftInset: CGFloat, rightInset: CGFloat) {
self.sectionHeaderNode.frame = CGRect(origin: CGPoint(), size: size)
self.sectionHeaderNode.updateLayout(size: size, leftInset: leftInset, rightInset: rightInset)
}
}