mirror of
https://github.com/moonlight-stream/moonlight-ios.git
synced 2025-07-27 14:45:34 +00:00
176 lines
5.7 KiB
Objective-C
176 lines
5.7 KiB
Objective-C
//
|
|
// UIComputerView.m
|
|
// Limelight
|
|
//
|
|
// Created by Diego Waxemberg on 10/22/14.
|
|
// Copyright (c) 2014 Limelight Stream. All rights reserved.
|
|
//
|
|
|
|
#import "UIComputerView.h"
|
|
|
|
@implementation UIComputerView {
|
|
Host* _host;
|
|
UIButton* _hostButton;
|
|
UILabel* _hostLabel;
|
|
UILabel* _hostStatus;
|
|
UILabel* _hostPairState;
|
|
id<HostCallback> _callback;
|
|
CGSize _labelSize;
|
|
}
|
|
static const float REFRESH_CYCLE = 2.0f;
|
|
static const int LABEL_DY = 20;
|
|
|
|
- (id) init {
|
|
self = [super init];
|
|
_hostButton = [UIButton buttonWithType:UIButtonTypeCustom];
|
|
[_hostButton setContentEdgeInsets:UIEdgeInsetsMake(0, 4, 0, 4)];
|
|
[_hostButton setBackgroundImage:[UIImage imageNamed:@"Computer"] forState:UIControlStateNormal];
|
|
[_hostButton sizeToFit];
|
|
|
|
_hostButton.layer.shadowColor = [[UIColor blackColor] CGColor];
|
|
_hostButton.layer.shadowOffset = CGSizeMake(5,8);
|
|
_hostButton.layer.shadowOpacity = 0.7;
|
|
|
|
_hostLabel = [[UILabel alloc] init];
|
|
_hostStatus = [[UILabel alloc] init];
|
|
_hostPairState = [[UILabel alloc] init];
|
|
[_hostLabel setFont:[UIFont fontWithName:@"Roboto-Regular" size:[UIFont systemFontSize]]];
|
|
[_hostStatus setFont:[UIFont fontWithName:@"Roboto-Regular" size:[UIFont systemFontSize]]];
|
|
[_hostPairState setFont:[UIFont fontWithName:@"Roboto-Regular" size:[UIFont systemFontSize]]];
|
|
return self;
|
|
}
|
|
|
|
- (id) initWithComputer:(Host*)host andCallback:(id<HostCallback>)callback {
|
|
self = [self init];
|
|
_host = host;
|
|
_callback = callback;
|
|
|
|
UILongPressGestureRecognizer* longPressRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(hostLongClicked)];
|
|
[_hostButton addGestureRecognizer:longPressRecognizer];
|
|
[_hostButton addTarget:self action:@selector(hostClicked) forControlEvents:UIControlEventTouchUpInside];
|
|
|
|
[self updateContentsForHost:host];
|
|
[self updateBounds];
|
|
[self addSubview:_hostButton];
|
|
[self addSubview:_hostLabel];
|
|
[self addSubview:_hostStatus];
|
|
[self addSubview:_hostPairState];
|
|
[self startUpdateLoop];
|
|
return self;
|
|
}
|
|
|
|
- (void) updateBounds {
|
|
float x = FLT_MAX;
|
|
float y = FLT_MAX;
|
|
float width = 0;
|
|
float height;
|
|
|
|
x = MIN(x, _hostButton.frame.origin.x);
|
|
x = MIN(x, _hostLabel.frame.origin.x);
|
|
x = MIN(x, _hostStatus.frame.origin.x);
|
|
x = MIN(x, _hostPairState.frame.origin.x);
|
|
|
|
y = MIN(y, _hostButton.frame.origin.y);
|
|
y = MIN(y, _hostLabel.frame.origin.y);
|
|
y = MIN(y, _hostStatus.frame.origin.y);
|
|
y = MIN(y, _hostPairState.frame.origin.y);
|
|
|
|
width = MAX(width, _hostButton.frame.size.width);
|
|
width = MAX(width, _hostLabel.frame.size.width);
|
|
width = MAX(width, _hostStatus.frame.size.width);
|
|
width = MAX(width, _hostPairState.frame.size.width);
|
|
|
|
height = _hostButton.frame.size.height +
|
|
_hostLabel.frame.size.height +
|
|
_hostStatus.frame.size.height +
|
|
_hostPairState.frame.size.height +
|
|
LABEL_DY / 2;
|
|
|
|
self.bounds = CGRectMake(x, y, width, height);
|
|
self.frame = CGRectMake(x, y, width, height);
|
|
}
|
|
|
|
- (void) updateContentsForHost:(Host*)host {
|
|
_hostLabel.text = _host.name;
|
|
_hostLabel.textColor = [UIColor whiteColor];
|
|
[_hostLabel sizeToFit];
|
|
|
|
switch (host.pairState) {
|
|
case PairStateUnknown:
|
|
_hostPairState.text = @"Pair State Unknown";
|
|
break;
|
|
case PairStateUnpaired:
|
|
_hostPairState.text = @"Not Paired";
|
|
break;
|
|
case PairStatePaired:
|
|
_hostPairState.text = @"Paired";
|
|
break;
|
|
}
|
|
_hostPairState.textColor = [UIColor whiteColor];
|
|
[_hostPairState sizeToFit];
|
|
|
|
if (host.online) {
|
|
_hostStatus.text = @"Online";
|
|
_hostStatus.textColor = [UIColor greenColor];
|
|
} else {
|
|
_hostStatus.text = @"Offline";
|
|
_hostStatus.textColor = [UIColor grayColor];
|
|
}
|
|
[_hostStatus sizeToFit];
|
|
|
|
|
|
_hostLabel.center = CGPointMake(_hostButton.frame.origin.x + (_hostButton.frame.size.width / 2), _hostButton.frame.origin.y + _hostButton.frame.size.height + LABEL_DY);
|
|
_hostPairState.center = CGPointMake(_hostLabel.center.x, _hostLabel.center.y + LABEL_DY);
|
|
_hostStatus.center = CGPointMake(_hostPairState.center.x, _hostPairState.center.y + LABEL_DY);
|
|
}
|
|
|
|
- (void) startUpdateLoop {
|
|
[self performSelector:@selector(updateLoop) withObject:self afterDelay:REFRESH_CYCLE];
|
|
}
|
|
|
|
- (void) updateLoop {
|
|
[self updateContentsForHost:_host];
|
|
[self performSelector:@selector(updateLoop) withObject:self afterDelay:REFRESH_CYCLE];
|
|
}
|
|
|
|
- (id) initForAddWithCallback:(id<HostCallback>)callback {
|
|
self = [self init];
|
|
_callback = callback;
|
|
|
|
[_hostButton setBackgroundImage:[UIImage imageNamed:@"Computer"] forState:UIControlStateNormal];
|
|
[_hostButton sizeToFit];
|
|
[_hostButton addTarget:self action:@selector(addClicked) forControlEvents:UIControlEventTouchUpInside];
|
|
|
|
[_hostLabel setText:@"Add Host"];
|
|
[_hostLabel sizeToFit];
|
|
_hostLabel.textColor = [UIColor whiteColor];
|
|
_hostLabel.center = CGPointMake(_hostButton.frame.origin.x + (_hostButton.frame.size.width / 2), _hostButton.frame.origin.y + _hostButton.frame.size.height + LABEL_DY);
|
|
|
|
UIImageView* addIcon = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"AddComputerIcon"]];
|
|
[addIcon sizeToFit];
|
|
addIcon.center = CGPointMake(_hostButton.frame.origin.x + _hostButton.frame.size.width, _hostButton.frame.origin.y);
|
|
|
|
[self updateBounds];
|
|
[self addSubview:_hostButton];
|
|
[self addSubview:_hostLabel];
|
|
[self addSubview:addIcon];
|
|
|
|
return self;
|
|
}
|
|
|
|
|
|
|
|
- (void) hostLongClicked {
|
|
[_callback hostLongClicked:_host view:self];
|
|
}
|
|
|
|
- (void) hostClicked {
|
|
[_callback hostClicked:_host];
|
|
}
|
|
|
|
- (void) addClicked {
|
|
[_callback addHostClicked];
|
|
}
|
|
|
|
@end
|