UTM/ConfigurationViews/VMConfigDisplayViewControll...

162 lines
6.0 KiB
Objective-C

//
// Copyright © 2019 Halts. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
#import "VMConfigDisplayViewController.h"
#import "UTMConfiguration.h"
@interface VMConfigDisplayViewController ()
@end
@implementation VMConfigDisplayViewController
@synthesize configuration;
- (void)viewDidLoad {
[super viewDidLoad];
}
- (void)refreshViewFromConfiguration {
[super refreshViewFromConfiguration];
self.consoleOnly = self.configuration.displayConsoleOnly;
self.maxResolutionPickerActive = NO;
self.maxResolutionLabel.text = self.maxResolution;
self.resolutionFixedSwitch.on = self.configuration.displayFixedResolution;
self.zoomScaleFitSwitch.on = self.configuration.displayZoomScale;
self.zoomLetterboxSwitch.on = self.configuration.displayZoomLetterBox;
}
#pragma mark - Properties
- (void)setMaxResolutionPickerActive:(BOOL)maxResolutionPickerActive {
_maxResolutionPickerActive = maxResolutionPickerActive;
if (maxResolutionPickerActive) {
NSUInteger index = [[UTMConfiguration supportedResolutions] indexOfObject:self.maxResolution];
if (index != NSNotFound) {
[self.maxResolutionPicker selectRow:index inComponent:0 animated:NO];
}
}
[self pickerCell:self.maxResolutionPickerCell setActive:maxResolutionPickerActive];
}
- (void)setConsoleOnly:(BOOL)consoleOnly {
_consoleOnly = consoleOnly;
self.configuration.displayConsoleOnly = consoleOnly;
if (consoleOnly) {
[self cells:self.displayTypeCells setHidden:YES];
[self reloadDataAnimated:self.doneLoadingConfiguration];
[self cells:self.consoleTypeCells setHidden:NO];
[self reloadDataAnimated:self.doneLoadingConfiguration];
[self.graphicsTypeFullCell setAccessoryType:UITableViewCellAccessoryNone];
[self.graphicsTypeConsoleCell setAccessoryType:UITableViewCellAccessoryCheckmark];
} else {
[self cells:self.consoleTypeCells setHidden:YES];
[self reloadDataAnimated:self.doneLoadingConfiguration];
[self cells:self.displayTypeCellsWithoutPicker setHidden:NO];
[self reloadDataAnimated:self.doneLoadingConfiguration];
_maxResolutionPickerActive = NO; // reset picker
[self.graphicsTypeFullCell setAccessoryType:UITableViewCellAccessoryCheckmark];
[self.graphicsTypeConsoleCell setAccessoryType:UITableViewCellAccessoryNone];
}
}
- (void)setMaxResolution:(NSString *)maxResolution {
NSArray<NSString *> *parts = [maxResolution componentsSeparatedByString:@"x"];
self.configuration.displayFixedResolutionWidth = [NSNumber numberWithLong:[parts[0] integerValue]];
self.configuration.displayFixedResolutionHeight = [NSNumber numberWithLong:[parts[1] integerValue]];
}
- (NSString *)maxResolution {
return [NSString stringWithFormat:@"%@x%@", self.configuration.displayFixedResolutionWidth, self.configuration.displayFixedResolutionHeight];
}
#pragma mark - Table delegate
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if ([tableView cellForRowAtIndexPath:indexPath] == self.graphicsTypeFullCell) {
self.consoleOnly = NO;
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
if ([tableView cellForRowAtIndexPath:indexPath] == self.graphicsTypeConsoleCell) {
self.consoleOnly = YES;
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
if ([tableView cellForRowAtIndexPath:indexPath] == self.maxResolutionCell) {
self.maxResolutionPickerActive = !self.maxResolutionPickerActive;
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
}
#pragma mark - Picker delegate
- (NSInteger)numberOfComponentsInPickerView:(nonnull UIPickerView *)pickerView {
if (pickerView == self.maxResolutionPicker) {
return 1;
} else {
NSAssert(0, @"Invalid picker");
}
return 0;
}
- (NSInteger)pickerView:(nonnull UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
NSAssert(component == 0, @"Invalid component");
if (pickerView == self.maxResolutionPicker) {
return [UTMConfiguration supportedResolutions].count;
} else {
NSAssert(0, @"Invalid picker");
}
return 0;
}
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
NSAssert(component == 0, @"Invalid component");
if (pickerView == self.maxResolutionPicker) {
return [UTMConfiguration supportedResolutions][row];
} else {
NSAssert(0, @"Invalid picker");
}
return nil;
}
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
NSAssert(component == 0, @"Invalid component");
if (pickerView == self.maxResolutionPicker) {
self.maxResolutionLabel.text = [UTMConfiguration supportedResolutions][row];
self.maxResolution = self.maxResolutionLabel.text;
} else {
NSAssert(0, @"Invalid picker");
}
}
#pragma mark - Event handlers
- (IBAction)resolutionFixedSwitchChanged:(UISwitch *)sender {
NSAssert(sender == self.resolutionFixedSwitch, @"Invalid sender");
self.configuration.displayFixedResolution = sender.on;
}
- (IBAction)zoomScaleFitSwitchChanged:(UISwitch *)sender {
NSAssert(sender == self.zoomScaleFitSwitch, @"Invalid sender");
self.configuration.displayZoomScale = sender.on;
}
- (IBAction)zoomLetterboxSwitchChanged:(UISwitch *)sender {
NSAssert(sender == self.zoomLetterboxSwitch, @"Invalid sender");
self.configuration.displayZoomLetterBox = sender.on;
}
@end