Files
Xaibatsu-Control-Panel/XIONControlPanel/Views/ConnectionStatusView.swift

120 lines
3.8 KiB
Swift
Raw Normal View History

2015-12-31 10:55:54 -08:00
//
// ConnectionStatusView.swift
// XIONControlPanel
//
// Created by Charles Magahern on 12/31/15.
// Copyright © 2015 XION. All rights reserved.
//
import UIKit
2016-07-24 00:14:04 -07:00
class ConnectionStatusView: UIView
{
2017-05-13 00:40:03 -07:00
fileprivate var _connectivityStatus: ConnectionStatus = .disconnected
fileprivate var _japaneseLabel: UILabel = UILabel()
fileprivate var _englishLabel: UILabel = UILabel()
2015-12-31 10:55:54 -08:00
2017-05-13 00:40:03 -07:00
static fileprivate let labelsVMargin: CGFloat = 5.0
2015-12-31 10:55:54 -08:00
override init(frame: CGRect)
{
super.init(frame: frame)
_japaneseLabel.font = UIFont(name: "Orbitron-Medium", size: 24.0)
2017-05-13 00:40:03 -07:00
_japaneseLabel.textColor = UIColor.white
2015-12-31 10:55:54 -08:00
self.addSubview(_japaneseLabel)
_englishLabel.font = UIFont(name: "Orbitron-Medium", size: 16.0)
2017-05-13 00:40:03 -07:00
_englishLabel.textColor = UIColor.white
2015-12-31 10:55:54 -08:00
self.addSubview(_englishLabel)
2017-05-13 00:40:03 -07:00
self.connectivityStatus = .disconnected
2015-12-31 10:55:54 -08:00
}
required init?(coder aDecoder: NSCoder)
{
fatalError("unsupported")
}
// MARK: Overrides
2017-05-13 00:40:03 -07:00
override func sizeThatFits(_ size: CGSize) -> CGSize
2015-12-31 10:55:54 -08:00
{
let labelsVMargin = ConnectionStatusView.labelsVMargin
let jpLabelSize = _japaneseLabel.sizeThatFits(size)
let enLabelSize = _englishLabel.sizeThatFits(size)
let totalLabelsHeight = jpLabelSize.height + labelsVMargin + enLabelSize.height
let maxLabelsWidth = max(jpLabelSize.width, enLabelSize.width)
return CGSize(width: maxLabelsWidth, height: totalLabelsHeight)
}
override func layoutSubviews()
{
super.layoutSubviews()
let bounds = self.bounds
let labelsVMargin = ConnectionStatusView.labelsVMargin
let jpLabelSize = _japaneseLabel.sizeThatFits(bounds.size)
let enLabelSize = _englishLabel.sizeThatFits(bounds.size)
let totalLabelsHeight = jpLabelSize.height + labelsVMargin + enLabelSize.height
_japaneseLabel.frame = CGRect(
x: rint(bounds.size.width / 2.0 - jpLabelSize.width / 2.0),
y: rint(bounds.size.height / 2.0 - totalLabelsHeight / 2.0),
width: jpLabelSize.width,
height: jpLabelSize.height
)
_englishLabel.frame = CGRect(
x: rint(bounds.size.width / 2.0 - enLabelSize.width / 2.0),
2017-05-13 00:40:03 -07:00
y: _japaneseLabel.frame.maxY + labelsVMargin,
2015-12-31 10:55:54 -08:00
width: enLabelSize.width,
height: enLabelSize.height
)
}
// MARK: API
var connectivityStatus: ConnectionStatus
{
2015-12-31 10:55:54 -08:00
get
{
return _connectivityStatus
}
set(newStatus)
{
_connectivityStatus = newStatus
switch (_connectivityStatus) {
2017-05-13 00:40:03 -07:00
case .disconnected:
_japaneseLabel.text = "非直結"
2017-05-13 00:40:03 -07:00
_japaneseLabel.textColor = UIColor.red
_englishLabel.text = "offline"
2017-05-13 00:40:03 -07:00
_englishLabel.textColor = UIColor.red
case .connecting:
_japaneseLabel.text = "接続中"
2017-05-13 00:40:03 -07:00
_japaneseLabel.textColor = UIColor.yellow
_englishLabel.text = "connecting..."
2017-05-13 00:40:03 -07:00
_englishLabel.textColor = UIColor.yellow
case .connected:
2015-12-31 10:55:54 -08:00
_japaneseLabel.text = "直結"
2017-05-13 00:40:03 -07:00
_japaneseLabel.textColor = UIColor.green
2015-12-31 10:55:54 -08:00
_englishLabel.text = "online"
2017-05-13 00:40:03 -07:00
_englishLabel.textColor = UIColor.green
case .error:
_japaneseLabel.text = "過失"
2017-05-13 00:40:03 -07:00
_japaneseLabel.textColor = UIColor.red
2015-12-31 10:55:54 -08:00
_englishLabel.text = "error"
2017-05-13 00:40:03 -07:00
_englishLabel.textColor = UIColor.red
2015-12-31 10:55:54 -08:00
}
self.setNeedsLayout()
}
}
}