An amazing project that generates micro reports from tournament results
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
pa-tournament-stats/TournamentStats/UI/reports/InfographyView.swift

188 lines
6.8 KiB

//
// InfographyView.swift
// TournamentStats
//
// Created by Laurent Morvillier on 15/08/2019.
// Copyright © 2019 Stax River. All rights reserved.
//
import Foundation
import UIKit
class InfographyView: UIView {
static func generate(_ generator: ReportGenerator) {
if let infographyView = Bundle.main.loadNibNamed("InfographyView", owner: self, options: nil)?.first as? InfographyView {
infographyView.generator = generator
if let imageData = infographyView.toImage()?.pngData() {
guard let directory = try? FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false) as NSURL else {
return
}
do {
try imageData.write(to: directory.appendingPathComponent("infography.png")!)
} catch {
print(error.localizedDescription)
}
}
}
}
var generator: ReportGenerator? {
didSet {
self._fillView()
}
}
@IBOutlet weak var infographyTitle: UILabel!
@IBOutlet weak var collectionView: UICollectionView!
@IBOutlet weak var hStack1a: UIStackView!
@IBOutlet weak var label11: UILabel!
@IBOutlet weak var label12: UILabel!
@IBOutlet weak var label13: UILabel!
@IBOutlet weak var hStack1b: UIStackView!
@IBOutlet weak var tableView11: TableView!
@IBOutlet weak var tableView12: TableView!
@IBOutlet weak var tableView13: TableView!
@IBOutlet weak var mostTableView: TableView!
@IBOutlet weak var mostTableView2: TableView!
@IBOutlet weak var hStack2a: UIStackView!
@IBOutlet weak var label21: UILabel!
@IBOutlet weak var label22: UILabel!
@IBOutlet weak var label23: UILabel!
@IBOutlet weak var hStack2b: UIStackView!
@IBOutlet weak var container21: UIView!
@IBOutlet weak var container22: UIView!
@IBOutlet weak var container23: UIView!
@IBOutlet weak var hStack3a: UIStackView!
@IBOutlet weak var label31: UILabel!
@IBOutlet weak var label32: UILabel!
@IBOutlet weak var label33: UILabel!
@IBOutlet weak var hStack3b: UIStackView!
@IBOutlet weak var tableView31: TableView!
@IBOutlet weak var tableView32: TableView!
@IBOutlet weak var tableView33: TableView!
@IBOutlet weak var hStack4a: UIStackView!
@IBOutlet weak var label41: UILabel!
@IBOutlet weak var label42: UILabel!
@IBOutlet weak var hStack4b: UIStackView!
@IBOutlet weak var container41: UIView!
@IBOutlet weak var container42: UIView!
@IBOutlet weak var hStack5a: UIStackView!
@IBOutlet weak var label51: UILabel!
@IBOutlet weak var labelTableSize: Label!
@IBOutlet weak var hStack5b: UIStackView!
@IBOutlet weak var collectionView51: UICollectionView!
@IBOutlet weak var containerTableSize: UIView!
override func awakeFromNib() {
super.awakeFromNib()
self._createBackground()
}
fileprivate func _createBackground() {
let startColor = UIColor(red: 23/255, green: 72/255, blue: 61/255, alpha: 1)
self.backgroundColor = startColor
}
fileprivate func _fillView() {
guard let generator = self.generator else {
return
}
self.infographyTitle.text = "2019 World Series of Poker"
self.infographyTitle.textColor = UIColor.white
self.infographyTitle.font = Fonts.mainTitle
self.collectionView.register(UINib(nibName: "StatCollectionViewCell", bundle: Bundle.main), forCellWithReuseIdentifier: "Stat")
self.collectionView.delegate = generator.festivalStats
self.collectionView.dataSource = generator.festivalStats
/////
self.mostTableView.delegate = generator.rankings1
self.mostTableView.dataSource = generator.rankings1
self.mostTableView2.setHeader(header: "Most final tables")
self.mostTableView2.setData(data: generator.finalTables, maxRows: 10)
/////
self.tableView11.setData(data: generator.biggestWinners)
self.tableView11.setHeader(header: "Biggest winners")
self.tableView11.setFooter(footer: "* denotes a Main Event finalist")
self.tableView12.setData(data: generator.mostCashes, maxRows: 5)
self.tableView12.setHeader(header: "Most cashes")
self.tableView13.setData(data: generator.averageCash, maxRows: 5)
self.tableView13.setHeader(header: "Best average cash (8+)")
/////
self.label21.text = "Buy-in distribution"
self.label22.text = "First prizes distribution"
let pieChartFrame = CGRect(x: 0, y: 0, width: 650, height: 500)
let buyinDistribPie = PieChart(frame: pieChartFrame)
buyinDistribPie.data = generator.tournamentBuyinDistribution.pieChartData
self.container21.addSubview(buyinDistribPie)
let firstPrizeDistributionPie = PieChart(frame: pieChartFrame)
firstPrizeDistributionPie.data = generator.firstPrizeDistribution.pieChartData
self.container22.addSubview(firstPrizeDistributionPie)
/////
self.tableView31.setHeader(header: "Events by prizepool")
self.tableView31.setData(data: generator.tourniesByPrizepool, maxRows: 5)
self.tableView32.setHeader(header: "Events by entries")
self.tableView32.setData(data: generator.tourniesByEntries, maxRows: 5)
/////
self.label41.text = "USA vs. World bracelets"
self.label42.text = "Games distribution"
let USABraceletsDistribPie = PieChart(frame: pieChartFrame)
USABraceletsDistribPie.data = generator.USAvsWorldWins.pieChartData
self.container41.addSubview(USABraceletsDistribPie)
self.container41.addMaxConstraints(view: USABraceletsDistribPie)
let holdemDistributionPie = PieChart(frame: pieChartFrame)
holdemDistributionPie.data = generator.gamesDistribution.pieChartData
self.container42.addSubview(holdemDistributionPie)
self.container42.addMaxConstraints(view: holdemDistributionPie)
self.label51.text = "Average event"
let ds = generator.averageEvent.first
self.collectionView51.register(UINib(nibName: "StatCollectionViewCell", bundle: Bundle.main), forCellWithReuseIdentifier: "Stat")
self.collectionView51.dataSource = ds
self.collectionView51.delegate = ds
self.labelTableSize.text = "No-Limit Hold'em table sizes"
let tableSizeDistributionPie = PieChart(frame: pieChartFrame)
tableSizeDistributionPie.data = generator.tableSizeDistribution.pieChartData
self.containerTableSize.addSubview(tableSizeDistributionPie)
}
}