added iOS source code
[wl-app.git] / iOS / WolneLektury / Screens / BookDetails / Cells / BookDetailsButtonTableViewCell.swift
diff --git a/iOS/WolneLektury/Screens/BookDetails/Cells/BookDetailsButtonTableViewCell.swift b/iOS/WolneLektury/Screens/BookDetails/Cells/BookDetailsButtonTableViewCell.swift
new file mode 100644 (file)
index 0000000..a715bc1
--- /dev/null
@@ -0,0 +1,145 @@
+//
+//  BookDetailsButtonTableViewCell.swift
+//  WolneLektury
+//
+//  Created by Pawel Dabrowski on 20/06/2018.
+//  Copyright © 2018 Fundacja Nowoczesna Polska. All rights reserved.
+//
+
+import UIKit
+
+
+
+enum BookDetailsButtonType{
+    case download_ebook
+    case download_ebook_loading
+    case download_ebook_read
+    case download_audiobook
+    case download_audiobook_listen
+    case download_audiobook_loading
+    case support_us
+    
+    var color: UIColor{
+        switch self{
+        case .download_ebook, .download_ebook_loading, .download_ebook_read:
+            return UIColor(red:0.91, green:0.31, blue:0.20, alpha:1.00)
+        case .download_audiobook, .download_audiobook_listen, .download_audiobook_loading:
+            return UIColor(red:0.00, green:0.53, blue:0.56, alpha:1.00)
+        case .support_us:
+            return UIColor(red:1.00, green:0.64, blue:0.26, alpha:1.00)
+        }
+    }
+    
+    func getTitle() -> String{
+        return "\(self)".localized.uppercased()
+    }
+    
+    var icon: UIImage{
+        switch self {
+        case .download_ebook, .download_ebook_loading, .download_ebook_read:
+            return #imageLiteral(resourceName: "icon_glasses-mid")
+        case .download_audiobook, .download_audiobook_listen, .download_audiobook_loading:
+            return #imageLiteral(resourceName: "icon_speaker-mid")
+        case .support_us:
+            return #imageLiteral(resourceName: "icon_star-mid")
+        }
+    }
+    
+    var tintColor: UIColor{
+        
+        switch self {
+        case .download_ebook_read, .download_audiobook_listen, .support_us:
+            return UIColor.white
+        default:
+            return color
+        }
+    }
+    
+    var deleteButtonHidden: Bool{
+        switch self {
+        case .download_ebook, .download_audiobook, .support_us:
+            return true
+        default:
+            return false
+        }
+    }
+}
+
+protocol BookDetailsButtonTableViewCellDelegate: class{
+    func bookDetailsButtonTableViewCellButtonTapped(buttonType: BookDetailsButtonType)
+    func bookDetailsButtonTableViewCellDeleteButtonTapped(buttonType: BookDetailsButtonType)
+}
+
+class BookDetailsButtonTableViewCell: WLTableViewCell {
+    
+    weak var delegate: BookDetailsButtonTableViewCellDelegate?
+//    @IBOutlet weak var button: UIButton!
+    @IBOutlet weak var button: ProgressLabel!
+    @IBOutlet weak var buttonIcon: UIImageView!
+    @IBOutlet weak var deleteButton: UIButton!
+    var buttonType: BookDetailsButtonType!
+
+    class func instance(delegate: BookDetailsButtonTableViewCellDelegate, bookDetailsButtonType: BookDetailsButtonType, bookDetailsModel: BookDetailsModel) -> BookDetailsButtonTableViewCell{
+        let cell = BookDetailsButtonTableViewCell.instance(type: BookDetailsButtonTableViewCell.self)
+        cell.delegate = delegate
+        cell.setup(bookDetailsButtonType: bookDetailsButtonType, progress: nil, bookDetailsModel: bookDetailsModel)
+        return cell
+    }
+    
+    override func awakeFromNib() {
+        super.awakeFromNib()
+        deleteButton.isHidden = true
+//        button.layer.cornerRadius = 10
+//        button.layer.borderWidth = 1
+        button.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(buttonAction)))
+    }
+
+    func setup(bookDetailsButtonType: BookDetailsButtonType, progress:Float?, bookDetailsModel: BookDetailsModel?){
+        self.buttonType = bookDetailsButtonType
+        let tintColor = bookDetailsButtonType.tintColor
+        button.color = bookDetailsButtonType.color
+//        button.backgroundColor = bookDetailsButtonType.bgColor
+//        button.layer.borderColor = bookDetailsButtonType.color.cgColor
+        buttonIcon.tintColor = tintColor
+        buttonIcon.image = bookDetailsButtonType.icon
+        button.fullProgress = false
+        if let progress = progress{
+            button.progress = progress * 100
+        }
+        else {
+            var customText = bookDetailsButtonType.getTitle()
+            if bookDetailsButtonType == .download_audiobook_listen {
+                button.fullProgress = true
+                if let bookDetailsModel = bookDetailsModel, bookDetailsModel.totalAudioChapters > 0 {
+                    customText += " \(bookDetailsModel.currentAudioChapter + 1)/\(bookDetailsModel.totalAudioChapters)"
+                }
+            }
+            else if bookDetailsButtonType == .download_ebook_read {
+                button.fullProgress = true
+                if let bookDetailsModel = bookDetailsModel, bookDetailsModel.totalChapters > 0 {
+                    customText += " \(bookDetailsModel.currentChapter)/\(bookDetailsModel.totalChapters)"
+                }
+            }
+
+            button.customText = customText
+        }
+        
+        deleteButton.isHidden = bookDetailsButtonType.deleteButtonHidden
+    }
+    
+    @objc func buttonAction(_ sender: Any) {
+        delegate?.bookDetailsButtonTableViewCellButtonTapped(buttonType: buttonType)
+    }
+    
+    @IBAction func deleteButtonAction(_ sender: Any) {
+        delegate?.bookDetailsButtonTableViewCellDeleteButtonTapped(buttonType: buttonType)
+    }
+    
+    override func getHeight() -> CGFloat {
+        return 55
+    }
+    
+    deinit {
+        print("deinit \(self)")
+    }
+}