Visualization reaction to devices activating
This commit is contained in:
@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
class MainViewController: UIViewController {
|
class MainViewController: UIViewController, SwitchesViewControllerDelegate {
|
||||||
private var _visualizationController: VisualizationViewController = VisualizationViewController()
|
private var _visualizationController: VisualizationViewController = VisualizationViewController()
|
||||||
private var _switchesController: SwitchesViewController = SwitchesViewController()
|
private var _switchesController: SwitchesViewController = SwitchesViewController()
|
||||||
private var _headerView: HeaderView = HeaderView()
|
private var _headerView: HeaderView = HeaderView()
|
||||||
@@ -24,10 +24,18 @@ class MainViewController: UIViewController {
|
|||||||
self.addChildViewController(_visualizationController)
|
self.addChildViewController(_visualizationController)
|
||||||
self.view.addSubview(_visualizationController.view)
|
self.view.addSubview(_visualizationController.view)
|
||||||
|
|
||||||
|
_switchesController.delegate = self
|
||||||
self.addChildViewController(_switchesController)
|
self.addChildViewController(_switchesController)
|
||||||
self.view.addSubview(_switchesController.view)
|
self.view.addSubview(_switchesController.view)
|
||||||
|
|
||||||
self.view.addSubview(_headerView)
|
self.view.addSubview(_headerView)
|
||||||
|
|
||||||
|
// DEBUG
|
||||||
|
for _ in 0 ..< 10 {
|
||||||
|
let device = WemoDevice()
|
||||||
|
device.name = "beatmania IIDX"
|
||||||
|
self.devices.append(device)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override func viewDidLayoutSubviews()
|
override func viewDidLayoutSubviews()
|
||||||
@@ -81,4 +89,37 @@ class MainViewController: UIViewController {
|
|||||||
{
|
{
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MARK: API
|
||||||
|
|
||||||
|
var devices: [WemoDevice] = []
|
||||||
|
{
|
||||||
|
didSet
|
||||||
|
{
|
||||||
|
_switchesController.devices = devices
|
||||||
|
_updateVisualization(false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: SwitchesViewControllerDelegate
|
||||||
|
|
||||||
|
func switchesViewControllerDidToggleDevice(controller: SwitchesViewController, device: WemoDevice)
|
||||||
|
{
|
||||||
|
_updateVisualization(true)
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: Internal
|
||||||
|
|
||||||
|
internal func _updateVisualization(animated: Bool)
|
||||||
|
{
|
||||||
|
var activatedDevicesCount = 0
|
||||||
|
for device in self.devices {
|
||||||
|
if (device.state == .On) {
|
||||||
|
++activatedDevicesCount
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let percentageActivated = Float(activatedDevicesCount) / Float(self.devices.count)
|
||||||
|
_visualizationController.setPercentActivated(percentageActivated, animated: animated)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,12 +10,23 @@ import Darwin
|
|||||||
import Foundation
|
import Foundation
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
|
protocol SwitchesViewControllerDelegate: class {
|
||||||
|
func switchesViewControllerDidToggleDevice(controller: SwitchesViewController, device: WemoDevice)
|
||||||
|
}
|
||||||
|
|
||||||
|
extension SwitchesViewControllerDelegate {
|
||||||
|
func switchesViewControllerDidToggleDevice(controller: SwitchesViewController, device: WemoDevice) {}
|
||||||
|
}
|
||||||
|
|
||||||
class SwitchesViewController: UIViewController,
|
class SwitchesViewController: UIViewController,
|
||||||
UICollectionViewDataSource,
|
UICollectionViewDataSource,
|
||||||
UICollectionViewDelegateFlowLayout
|
UICollectionViewDelegateFlowLayout
|
||||||
{
|
{
|
||||||
private var _collectionView: UICollectionView = UICollectionView(frame: CGRectZero,
|
weak var delegate: SwitchesViewControllerDelegate?
|
||||||
collectionViewLayout: UICollectionViewFlowLayout())
|
|
||||||
|
private var _collectionView: UICollectionView = UICollectionView(frame: CGRectZero,
|
||||||
|
collectionViewLayout: UICollectionViewFlowLayout())
|
||||||
|
private var _currentDevicesHash: UInt = 0
|
||||||
|
|
||||||
static private let collectionViewCellReuseIdentifier = "SwitchesCollectionViewReuseID"
|
static private let collectionViewCellReuseIdentifier = "SwitchesCollectionViewReuseID"
|
||||||
static private let collectionViewCellsSpacing: CGFloat = 5.0
|
static private let collectionViewCellsSpacing: CGFloat = 5.0
|
||||||
@@ -46,11 +57,29 @@ class SwitchesViewController: UIViewController,
|
|||||||
_collectionView.frame = bounds
|
_collectionView.frame = bounds
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MARK: API
|
||||||
|
|
||||||
|
var devices: [WemoDevice] = []
|
||||||
|
{
|
||||||
|
didSet
|
||||||
|
{
|
||||||
|
var devicesHash: UInt = 0
|
||||||
|
for device in devices {
|
||||||
|
devicesHash += UInt(device.serial.hash)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_currentDevicesHash != devicesHash) {
|
||||||
|
_collectionView.reloadData()
|
||||||
|
_currentDevicesHash = devicesHash
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// MARK: UICollectionView
|
// MARK: UICollectionView
|
||||||
|
|
||||||
func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int
|
func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int
|
||||||
{
|
{
|
||||||
return 10
|
return self.devices.count
|
||||||
}
|
}
|
||||||
|
|
||||||
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell
|
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell
|
||||||
@@ -58,10 +87,8 @@ class SwitchesViewController: UIViewController,
|
|||||||
let reuseID = SwitchesViewController.collectionViewCellReuseIdentifier
|
let reuseID = SwitchesViewController.collectionViewCellReuseIdentifier
|
||||||
let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseID, forIndexPath: indexPath) as! WemoDeviceCellView
|
let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseID, forIndexPath: indexPath) as! WemoDeviceCellView
|
||||||
|
|
||||||
var device = WemoDevice()
|
let device = self.devices[indexPath.row]
|
||||||
device.name = "beatmania IIDX"
|
|
||||||
cell.device = device
|
cell.device = device
|
||||||
|
|
||||||
cell.ordinal = indexPath.row + 1
|
cell.ordinal = indexPath.row + 1
|
||||||
|
|
||||||
return cell
|
return cell
|
||||||
@@ -81,5 +108,10 @@ class SwitchesViewController: UIViewController,
|
|||||||
{
|
{
|
||||||
let cell = collectionView.cellForItemAtIndexPath(indexPath) as! WemoDeviceCellView
|
let cell = collectionView.cellForItemAtIndexPath(indexPath) as! WemoDeviceCellView
|
||||||
cell.toggled = !cell.toggled
|
cell.toggled = !cell.toggled
|
||||||
|
|
||||||
|
let device = self.devices[indexPath.row]
|
||||||
|
device.state = (cell.toggled ? .On : .Off)
|
||||||
|
|
||||||
|
self.delegate?.switchesViewControllerDidToggleDevice(self, device: device)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
struct WemoDevice {
|
class WemoDevice {
|
||||||
enum State {
|
enum State {
|
||||||
case Off
|
case Off
|
||||||
case On
|
case On
|
||||||
|
|||||||
@@ -74,7 +74,8 @@ class ConnectionStatusView: UIView {
|
|||||||
|
|
||||||
// MARK: API
|
// MARK: API
|
||||||
|
|
||||||
var connectivityStatus: Bool {
|
var connectivityStatus: Bool
|
||||||
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
return _connectivityStatus
|
return _connectivityStatus
|
||||||
|
|||||||
@@ -74,7 +74,8 @@ class SwitchIndicatorView: UIView {
|
|||||||
|
|
||||||
// MARK: API
|
// MARK: API
|
||||||
|
|
||||||
var status: Bool {
|
var status: Bool
|
||||||
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
return _status
|
return _status
|
||||||
@@ -88,7 +89,8 @@ class SwitchIndicatorView: UIView {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var foregroundColor: UIColor {
|
var foregroundColor: UIColor
|
||||||
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
return _foregroundColor
|
return _foregroundColor
|
||||||
|
|||||||
@@ -99,7 +99,8 @@ class WemoDeviceCellView: UICollectionViewCell {
|
|||||||
|
|
||||||
// MARK: API
|
// MARK: API
|
||||||
|
|
||||||
var device: WemoDevice? {
|
var device: WemoDevice?
|
||||||
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
return _device
|
return _device
|
||||||
@@ -112,7 +113,8 @@ class WemoDeviceCellView: UICollectionViewCell {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var ordinal: Int {
|
var ordinal: Int
|
||||||
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
return _ordinal
|
return _ordinal
|
||||||
@@ -125,7 +127,8 @@ class WemoDeviceCellView: UICollectionViewCell {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var toggled: Bool {
|
var toggled: Bool
|
||||||
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
return (_device?.state == .On)
|
return (_device?.state == .On)
|
||||||
|
|||||||
Reference in New Issue
Block a user