VideoOptionsControlBar.swift 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. /*****************************************************************************
  2. * VideoOptionsControlBar.swift
  3. *
  4. * Copyright © 2019 VLC authors and VideoLAN
  5. *
  6. * Authors: Robert Gordon <robwaynegordon@gmail.com>
  7. *
  8. *
  9. * Refer to the COPYING file of the official project for license.
  10. *****************************************************************************/
  11. @objc (VLCVideoOptionsControlBarDelegate)
  12. protocol VideoOptionsControlBarDelegate: class {
  13. func didToggleFullScreen(_ optionsBar: VideoOptionsControlBar)
  14. func didToggleRepeat(_ optionsBar: VideoOptionsControlBar)
  15. func didSelectSubtitle(_ optionsBar: VideoOptionsControlBar)
  16. func didSelectMoreOptions(_ optionsBar: VideoOptionsControlBar)
  17. func didToggleInterfaceLock(_ optionsBar: VideoOptionsControlBar)
  18. }
  19. @objc (VLCVideoOptionsControlBar)
  20. @objcMembers class VideoOptionsControlBar: UIStackView {
  21. // MARK: Instance variables
  22. weak var delegate: VideoOptionsControlBarDelegate?
  23. var repeatMode: VLCRepeatMode {
  24. didSet {
  25. switch repeatMode {
  26. case .repeatCurrentItem:
  27. repeatButton.setImage(UIImage(named: "repeatOne-new"), for: .normal)
  28. case .repeatAllItems:
  29. repeatButton.setImage(UIImage(named: "repeat-new"), for: .normal)
  30. case .doNotRepeat:
  31. repeatButton.setImage(UIImage(named: "no-repeat-new"), for: .normal)
  32. default:
  33. assertionFailure("unhandled repeatmode")
  34. }
  35. }
  36. }
  37. lazy var toggleFullScreenButton: UIButton = {
  38. var toggle = UIButton(type: .system)
  39. toggle.setImage(UIImage(named: "fullscreenIcon-new"), for: .normal)
  40. toggle.addTarget(self, action: #selector(toggleFullscreen), for: .touchUpInside)
  41. toggle.tintColor = .white
  42. toggle.accessibilityLabel = NSLocalizedString("VIDEO_ASPECT_RATIO_BUTTON", comment: "")
  43. toggle.accessibilityHint = NSLocalizedString("VIDEO_ASPECT_RATIO_HINT", comment: "")
  44. return toggle
  45. }()
  46. lazy var selectSubtitleButton: UIButton = {
  47. var subbutton = UIButton(type: .system)
  48. subbutton.setImage(UIImage(named: "subtitlesIcon-new"), for: .normal)
  49. subbutton.addTarget(self, action: #selector(selectSubtitle), for: .touchUpInside)
  50. subbutton.tintColor = .white
  51. subbutton.accessibilityHint = NSLocalizedString("CHOOSE_SUBTITLE_TRACK", comment: "")
  52. subbutton.accessibilityLabel = NSLocalizedString("SUBTITLES", comment: "")
  53. return subbutton
  54. }()
  55. lazy var repeatButton: UIButton = {
  56. var rptButton = UIButton(type: .system)
  57. rptButton.addTarget(self, action: #selector(toggleRepeat), for: .touchUpInside)
  58. rptButton.setImage(UIImage(named: "no-repeat-new"), for: .normal)
  59. rptButton.tintColor = .white
  60. rptButton.accessibilityHint = NSLocalizedString("REPEAT_MODE", comment: "")
  61. rptButton.accessibilityLabel = NSLocalizedString("REPEAT_MODE_HINT", comment: "")
  62. return rptButton
  63. }()
  64. lazy var interfaceLockButton: UIButton = {
  65. var interfaceLockButton = UIButton(type: .system)
  66. interfaceLockButton.setImage(UIImage(named: "lock-new"), for: .normal)
  67. interfaceLockButton.addTarget(self, action: #selector(toggleInterfaceLock), for: .touchUpInside)
  68. interfaceLockButton.tintColor = .white
  69. interfaceLockButton.accessibilityHint = NSLocalizedString("INTERFACE_LOCK_HINT", comment: "")
  70. interfaceLockButton.accessibilityLabel = NSLocalizedString("INTERFACE_LOCK_BUTTON", comment: "")
  71. return interfaceLockButton
  72. }()
  73. lazy var moreOptionsButton: UIButton = {
  74. var moreOptionsButton = UIButton(type: .system)
  75. moreOptionsButton.setImage(UIImage(named: "moreWhite-new"), for: .normal)
  76. moreOptionsButton.addTarget(self, action: #selector(selectMoreOptions), for: .touchUpInside)
  77. moreOptionsButton.tintColor = .white
  78. moreOptionsButton.accessibilityHint = NSLocalizedString("MORE_OPTIONS_HINT", comment: "")
  79. moreOptionsButton.accessibilityLabel = NSLocalizedString("MORE_OPTIONS_BUTTON", comment: "")
  80. return moreOptionsButton
  81. }()
  82. // MARK: Class Initializers
  83. required init(coder aDecoder: NSCoder) {
  84. fatalError("init(coder aDecoder: NSCoder) not implemented")
  85. }
  86. override init(frame: CGRect) {
  87. repeatMode = .doNotRepeat
  88. super.init(frame: frame)
  89. addArrangedSubview(toggleFullScreenButton)
  90. addArrangedSubview(selectSubtitleButton)
  91. addArrangedSubview(repeatButton)
  92. addArrangedSubview(interfaceLockButton)
  93. addArrangedSubview(moreOptionsButton)
  94. axis = .horizontal
  95. translatesAutoresizingMaskIntoConstraints = false
  96. }
  97. // MARK: Button Action Buttons
  98. func toggleFullscreen() {
  99. delegate?.didToggleFullScreen(self)
  100. }
  101. func selectSubtitle() {
  102. delegate?.didSelectSubtitle(self)
  103. }
  104. func selectMoreOptions() {
  105. delegate?.didSelectMoreOptions(self)
  106. }
  107. func toggleRepeat() {
  108. delegate?.didToggleRepeat(self)
  109. }
  110. func toggleInterfaceLock() {
  111. delegate?.didToggleInterfaceLock(self)
  112. }
  113. }