VLCEditToolbar.swift 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. /*****************************************************************************
  2. * VLCEditToolbar.swift
  3. *
  4. * Copyright © 2018 VLC authors and VideoLAN
  5. * Copyright © 2018 Videolabs
  6. *
  7. * Authors: Soomin Lee <bubu@mikan.io>
  8. *
  9. * Refer to the COPYING file of the official project for license.
  10. *****************************************************************************/
  11. protocol VLCEditToolbarDelegate: class {
  12. func editToolbarDidDelete(_ editToolbar: VLCEditToolbar)
  13. func editToolbarDidAddToPlaylist(_ editToolbar: VLCEditToolbar)
  14. func editToolbarDidRename(_ editToolbar: VLCEditToolbar)
  15. func editToolbarDidShare(_ editToolbar: VLCEditToolbar, presentFrom button: UIButton)
  16. }
  17. class VLCEditToolbar: UIView {
  18. weak var delegate: VLCEditToolbarDelegate?
  19. private var category: MediaLibraryBaseModel
  20. private var stackView = UIStackView()
  21. private var shareButton: UIButton = {
  22. let shareButton = UIButton(type: .system)
  23. shareButton.addTarget(self, action: #selector(share), for: .touchUpInside)
  24. shareButton.setImage(UIImage(named: "share"), for: .normal)
  25. shareButton.tintColor = .orange
  26. shareButton.widthAnchor.constraint(equalToConstant: 44).isActive = true
  27. return shareButton
  28. }()
  29. private var renameButton: UIButton = {
  30. let renameButton = UIButton(type: .system)
  31. renameButton.addTarget(self, action: #selector(rename), for: .touchUpInside)
  32. renameButton.setImage(UIImage(named: "rename"), for: .normal)
  33. renameButton.tintColor = .orange
  34. renameButton.widthAnchor.constraint(equalToConstant: 44).isActive = true
  35. return renameButton
  36. }()
  37. private var deleteButton: UIButton = {
  38. let deleteButton = UIButton(type: .system)
  39. deleteButton.addTarget(self, action: #selector(deleteSelection), for: .touchUpInside)
  40. deleteButton.setImage(UIImage(named: "delete"), for: .normal)
  41. deleteButton.tintColor = .orange
  42. deleteButton.widthAnchor.constraint(equalToConstant: 44).isActive = true
  43. return deleteButton
  44. }()
  45. private var addToPlaylistButton: UIButton = {
  46. let addToPlaylistButton = UIButton(type: .system)
  47. addToPlaylistButton.setTitle(NSLocalizedString("ADD_TO_PLAYLIST", comment: ""), for: .normal)
  48. addToPlaylistButton.titleLabel?.font = UIFont.systemFont(ofSize: 17)
  49. addToPlaylistButton.contentHorizontalAlignment = .left
  50. addToPlaylistButton.addTarget(self, action: #selector(addToPlaylist), for: .touchUpInside)
  51. addToPlaylistButton.tintColor = .orange
  52. return addToPlaylistButton
  53. }()
  54. @objc func addToPlaylist() {
  55. delegate?.editToolbarDidAddToPlaylist(self)
  56. }
  57. @objc func deleteSelection() {
  58. delegate?.editToolbarDidDelete(self)
  59. }
  60. @objc func rename() {
  61. delegate?.editToolbarDidRename(self)
  62. }
  63. @objc func share() {
  64. delegate?.editToolbarDidShare(self, presentFrom: shareButton)
  65. }
  66. private func setupStackView() {
  67. let stackView = UIStackView(arrangedSubviews: [addToPlaylistButton, deleteButton, shareButton])
  68. let file = category.anyfiles.first
  69. if !(file is VLCMLAlbum) && !(file is VLCMLArtist) && !(file is VLCMLGenre) {
  70. stackView.addArrangedSubview(renameButton)
  71. }
  72. stackView.translatesAutoresizingMaskIntoConstraints = false
  73. addSubview(stackView)
  74. NSLayoutConstraint.activate([
  75. stackView.topAnchor.constraint(equalTo: topAnchor),
  76. stackView.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 20),
  77. stackView.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -20),
  78. stackView.bottomAnchor.constraint(equalTo: bottomAnchor)
  79. ])
  80. }
  81. private func setupView() {
  82. layer.shadowOpacity = 0.1
  83. layer.shadowOffset = CGSize(width: 0, height: -1)
  84. backgroundColor = PresentationTheme.current.colors.background
  85. }
  86. init(category: MediaLibraryBaseModel) {
  87. self.category = category
  88. super.init(frame: .zero)
  89. setupView()
  90. setupStackView()
  91. }
  92. required init(coder: NSCoder) {
  93. fatalError("init(coder:) has not been implemented")
  94. }
  95. }