import Foundation import UIKit import AsyncDisplayKit import Display import TelegramCore import TelegramPresentationData import SegmentedControlNode final class PeerMediaCollectionSectionsNode: ASDisplayNode { private var theme: PresentationTheme private var strings: PresentationStrings private let segmentedControlNode: SegmentedControlNode private let separatorNode: ASDisplayNode var indexUpdated: ((Int) -> Void)? init(theme: PresentationTheme, strings: PresentationStrings) { self.theme = theme self.strings = strings let items = [ strings.SharedMedia_CategoryMedia, strings.SharedMedia_CategoryDocs, strings.SharedMedia_CategoryLinks, strings.SharedMedia_CategoryOther ] self.segmentedControlNode = SegmentedControlNode(theme: SegmentedControlTheme(theme: theme), items: items.map { SegmentedControlItem(title: $0) }, selectedIndex: 0) self.separatorNode = ASDisplayNode() self.separatorNode.isLayerBacked = true self.separatorNode.displaysAsynchronously = false self.separatorNode.backgroundColor = self.theme.rootController.navigationBar.separatorColor super.init() self.backgroundColor = self.theme.rootController.navigationBar.opaqueBackgroundColor self.segmentedControlNode.selectedIndexChanged = { [weak self] index in self?.indexUpdated?(index) } self.addSubnode(self.separatorNode) self.addSubnode(self.segmentedControlNode) } func updateLayout(width: CGFloat, leftInset: CGFloat, rightInset: CGFloat, additionalInset: CGFloat, transition: ContainedViewLayoutTransition, interfaceState: PeerMediaCollectionInterfaceState) -> CGFloat { let panelHeight: CGFloat = 39.0 + additionalInset let sideInset: CGFloat = 8.0 let controlSize = self.segmentedControlNode.updateLayout(.stretchToFill(width: width - sideInset * 2.0 - leftInset - rightInset), transition: transition) transition.updateFrame(node: self.segmentedControlNode, frame: CGRect(origin: CGPoint(x: sideInset + leftInset, y: panelHeight - 8.0 - controlSize.height), size: controlSize)) transition.updateFrame(node: self.separatorNode, frame: CGRect(origin: CGPoint(x: 0.0, y: panelHeight - UIScreenPixel), size: CGSize(width: width, height: UIScreenPixel))) if interfaceState.theme !== self.theme { self.theme = interfaceState.theme self.separatorNode.backgroundColor = self.theme.rootController.navigationBar.separatorColor self.backgroundColor = self.theme.rootController.navigationBar.opaqueBackgroundColor self.segmentedControlNode.updateTheme(SegmentedControlTheme(theme: self.theme)) } return panelHeight } }