session-ios/SignalUtilitiesKit/Shared Views/ApprovalRailCellView.swift

93 lines
3.2 KiB
Swift

//
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
//
import Foundation
import UIKit
protocol ApprovalRailCellViewDelegate: class {
func approvalRailCellView(_ approvalRailCellView: ApprovalRailCellView, didRemoveItem attachmentItem: SignalAttachmentItem)
func canRemoveApprovalRailCellView(_ approvalRailCellView: ApprovalRailCellView) -> Bool
}
// MARK: -
public class ApprovalRailCellView: GalleryRailCellView {
weak var approvalRailCellDelegate: ApprovalRailCellViewDelegate?
lazy var deleteButton: UIButton = {
let button = OWSButton { [weak self] in
guard let strongSelf = self else { return }
guard let attachmentItem = strongSelf.item as? SignalAttachmentItem else {
owsFailDebug("attachmentItem was unexpectedly nil")
return
}
strongSelf.approvalRailCellDelegate?.approvalRailCellView(strongSelf, didRemoveItem: attachmentItem)
}
button.setImage(UIImage(named: "x-24")?.withRenderingMode(.alwaysTemplate), for: .normal)
button.tintColor = .white
button.layer.shadowColor = UIColor.black.cgColor
button.layer.shadowRadius = 2
button.layer.shadowOpacity = 0.66
button.layer.shadowOffset = .zero
let kButtonWidth: CGFloat = 24
button.autoSetDimensions(to: CGSize(width: kButtonWidth, height: kButtonWidth))
return button
}()
lazy var captionIndicator: UIView = {
let image = UIImage(named: "image_editor_caption")?.withRenderingMode(.alwaysTemplate)
let imageView = UIImageView(image: image)
imageView.tintColor = .white
imageView.layer.shadowColor = UIColor.black.cgColor
imageView.layer.shadowRadius = 2
imageView.layer.shadowOpacity = 0.66
imageView.layer.shadowOffset = .zero
return imageView
}()
override func setIsSelected(_ isSelected: Bool) {
super.setIsSelected(isSelected)
if isSelected {
if let approvalRailCellDelegate = self.approvalRailCellDelegate,
approvalRailCellDelegate.canRemoveApprovalRailCellView(self) {
addSubview(deleteButton)
deleteButton.autoPinEdge(toSuperviewEdge: .top, withInset: cellBorderWidth)
deleteButton.autoPinEdge(toSuperviewEdge: .trailing, withInset: cellBorderWidth + 4)
}
} else {
deleteButton.removeFromSuperview()
}
}
override func configure(item: GalleryRailItem, delegate: GalleryRailCellViewDelegate) {
super.configure(item: item, delegate: delegate)
var hasCaption = false
if let attachmentItem = item as? SignalAttachmentItem {
if let captionText = attachmentItem.captionText {
hasCaption = captionText.count > 0
}
} else {
owsFailDebug("Invalid item.")
}
if hasCaption {
addSubview(captionIndicator)
captionIndicator.autoPinEdge(toSuperviewEdge: .top, withInset: cellBorderWidth)
captionIndicator.autoPinEdge(toSuperviewEdge: .leading, withInset: cellBorderWidth + 4)
} else {
captionIndicator.removeFromSuperview()
}
}
}