mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
104 lines
4.3 KiB
Swift
104 lines
4.3 KiB
Swift
import Foundation
|
|
import UIKit
|
|
import Display
|
|
import AsyncDisplayKit
|
|
import TelegramPresentationData
|
|
import AppBundle
|
|
|
|
final class BrowserToolbarNavigationContentNode: ASDisplayNode, BrowserToolbarContentNode {
|
|
private var theme: BrowserToolbarTheme
|
|
private var state: BrowserState
|
|
private var interaction: BrowserInteraction?
|
|
|
|
private let backButton: HighlightableButtonNode
|
|
private let forwardButton: HighlightableButtonNode
|
|
private let shareButton: HighlightableButtonNode
|
|
private let minimizeButton: HighlightableButtonNode
|
|
|
|
private var validLayout: CGSize?
|
|
|
|
init(theme: BrowserToolbarTheme, strings: PresentationStrings, state: BrowserState, interaction: BrowserInteraction?) {
|
|
self.theme = theme
|
|
self.state = state
|
|
self.interaction = interaction
|
|
|
|
self.backButton = HighlightableButtonNode()
|
|
self.backButton.setImage(generateTintedImage(image: UIImage(bundleImageName: "Instant View/Back"), color: theme.buttonColor), for: [])
|
|
self.backButton.setImage(generateTintedImage(image: UIImage(bundleImageName: "Instant View/Back"), color: theme.disabledButtonColor), for: [.disabled])
|
|
self.forwardButton = HighlightableButtonNode()
|
|
self.forwardButton.setImage(generateTintedImage(image: UIImage(bundleImageName: "Instant View/Forward"), color: theme.buttonColor), for: [])
|
|
self.forwardButton.setImage(generateTintedImage(image: UIImage(bundleImageName: "Instant View/Forward"), color: theme.disabledButtonColor), for: [.disabled])
|
|
self.shareButton = HighlightableButtonNode()
|
|
self.shareButton.setImage(generateTintedImage(image: UIImage(bundleImageName: "Chat List/NavigationShare"), color: theme.buttonColor), for: [])
|
|
self.minimizeButton = HighlightableButtonNode()
|
|
self.minimizeButton.setImage(generateTintedImage(image: UIImage(bundleImageName: "Instant View/Minimize"), color: theme.buttonColor), for: [])
|
|
|
|
super.init()
|
|
|
|
self.addSubnode(self.backButton)
|
|
self.addSubnode(self.forwardButton)
|
|
self.addSubnode(self.shareButton)
|
|
self.addSubnode(self.minimizeButton)
|
|
|
|
self.backButton.isEnabled = false
|
|
self.forwardButton.isEnabled = false
|
|
|
|
self.backButton.addTarget(self, action: #selector(self.backPressed), forControlEvents: .touchUpInside)
|
|
self.forwardButton.addTarget(self, action: #selector(self.forwardPressed), forControlEvents: .touchUpInside)
|
|
self.shareButton.addTarget(self, action: #selector(self.sharePressed), forControlEvents: .touchUpInside)
|
|
self.minimizeButton.addTarget(self, action: #selector(self.minimizePressed), forControlEvents: .touchUpInside)
|
|
}
|
|
|
|
func updateState(_ state: BrowserState) {
|
|
self.state = state
|
|
|
|
self.backButton.isEnabled = state.content?.canGoBack ?? false
|
|
self.forwardButton.isEnabled = state.content?.canGoForward ?? false
|
|
}
|
|
|
|
func updateTheme(_ theme: BrowserToolbarTheme) {
|
|
guard self.theme !== theme else {
|
|
return
|
|
}
|
|
self.theme = theme
|
|
}
|
|
|
|
func updateLayout(size: CGSize, transition: ContainedViewLayoutTransition) {
|
|
let isFirstLayout = self.validLayout == nil
|
|
self.validLayout = size
|
|
|
|
var transition = transition
|
|
if isFirstLayout {
|
|
transition = .immediate
|
|
}
|
|
|
|
let buttons = [self.backButton, self.forwardButton, self.shareButton, self.minimizeButton]
|
|
let sideInset: CGFloat = 5.0
|
|
let buttonSize = CGSize(width: 50.0, height: size.height)
|
|
|
|
let spacing: CGFloat = (size.width - buttonSize.width * CGFloat(buttons.count) - sideInset * 2.0) / CGFloat(buttons.count - 1)
|
|
var offset: CGFloat = sideInset
|
|
for button in buttons {
|
|
transition.updateFrame(node: button, frame: CGRect(origin: CGPoint(x: offset, y: 0.0), size: buttonSize))
|
|
offset += buttonSize.width + spacing
|
|
}
|
|
}
|
|
|
|
@objc private func backPressed() {
|
|
self.interaction?.navigateBack()
|
|
}
|
|
|
|
@objc private func forwardPressed() {
|
|
self.interaction?.navigateForward()
|
|
}
|
|
|
|
@objc private func sharePressed() {
|
|
self.interaction?.share()
|
|
}
|
|
|
|
@objc private func minimizePressed() {
|
|
self.interaction?.minimize()
|
|
}
|
|
}
|
|
|