/* controller for performance settings selection Copyright 2013 Thincast Technologies GmbH, Author: Martin Fleisz This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #import "PerformanceEditorController.h" #import "ConnectionParams.h" #import "Utils.h" @interface PerformanceEditorController (Private) - (NSString *)keyPathForKey:(NSString *)key; @end @implementation PerformanceEditorController - (id)initWithConnectionParams:(ConnectionParams *)params { return [self initWithConnectionParams:params keyPath:nil]; } - (id)initWithConnectionParams:(ConnectionParams *)params keyPath:(NSString *)keyPath; { self = [super initWithStyle:UITableViewStyleGrouped]; if (self) { _params = [params retain]; _keyPath = (keyPath != nil ? [keyPath retain] : nil); } return self; } - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. } - (void)viewDidUnload { [super viewDidUnload]; // Release any retained subviews of the main view. } - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { return YES; } - (NSString *)keyPathForKey:(NSString *)key { if (_keyPath) return [_keyPath stringByAppendingFormat:@".%@", key]; return key; } - (void)dealloc { [super dealloc]; [_params release]; } #pragma mark - #pragma mark Table view data source - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { // Return the number of sections. return 1; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return 7; } // set section headers - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { return NSLocalizedString(@"Performance Settings", @"'Performance Settings': performance settings header"); } // Customize the appearance of table view cells. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { // get the table view cell EditFlagTableViewCell *cell = (EditFlagTableViewCell *)[self tableViewCellFromIdentifier:TableCellIdentifierYesNo]; NSAssert(cell, @"Invalid cell"); switch ([indexPath row]) { case 0: { [[cell label] setText:NSLocalizedString(@"RemoteFX", @"RemoteFX performance setting")]; [[cell toggle] setOn:[_params boolForKeyPath:[self keyPathForKey:@"perf_remotefx"]]]; break; } case 1: { [[cell label] setText:NSLocalizedString(@"GFX", @"GFX performance setting")]; [[cell toggle] setOn:[_params boolForKeyPath:[self keyPathForKey:@"perf_gfx"]]]; break; } case 2: { [[cell label] setText:NSLocalizedString(@"H264", @"H264 performance setting")]; [[cell toggle] setOn:[_params boolForKeyPath:[self keyPathForKey:@"perf_h264"]]]; break; } case 3: { [[cell label] setText:NSLocalizedString(@"Desktop Background", @"Desktop background performance setting")]; [[cell toggle] setOn:[_params boolForKeyPath:[self keyPathForKey:@"perf_show_desktop"]]]; break; } case 4: { [[cell label] setText:NSLocalizedString(@"Font Smoothing", @"Font smoothing performance setting")]; [[cell toggle] setOn:[_params boolForKeyPath:[self keyPathForKey:@"perf_font_smoothing"]]]; break; } case 5: { [[cell label] setText:NSLocalizedString(@"Desktop Composition", @"Desktop composition performance setting")]; [[cell toggle] setOn:[_params boolForKeyPath:[self keyPathForKey:@"perf_desktop_composition"]]]; break; } case 6: { [[cell label] setText:NSLocalizedString(@"Window contents while dragging", @"Window Dragging performance setting")]; [[cell toggle] setOn:[_params boolForKeyPath:[self keyPathForKey:@"perf_window_dragging"]]]; break; } case 7: { [[cell label] setText:NSLocalizedString(@"Menu Animation", @"Menu Animations performance setting")]; [[cell toggle] setOn:[_params boolForKeyPath:[self keyPathForKey:@"perf_menu_animation"]]]; break; } case 8: { [[cell label] setText:NSLocalizedString(@"Visual Styles", @"Use Themes performance setting")]; [[cell toggle] setOn:[_params boolForKeyPath:[self keyPathForKey:@"perf_windows_themes"]]]; break; } default: break; } [[cell toggle] setTag:GET_TAG_FROM_PATH(indexPath)]; [[cell toggle] addTarget:self action:@selector(togglePerformanceSetting:) forControlEvents:UIControlEventValueChanged]; return cell; } #pragma mark - #pragma mark Action Handlers - (void)togglePerformanceSetting:(id)sender { UISwitch *valueSwitch = (UISwitch *)sender; switch (valueSwitch.tag) { case GET_TAG(0, 0): [_params setBool:[valueSwitch isOn] forKeyPath:[self keyPathForKey:@"perf_remotefx"]]; break; case GET_TAG(0, 1): [_params setBool:[valueSwitch isOn] forKeyPath:[self keyPathForKey:@"perf_gfx"]]; break; case GET_TAG(0, 2): [_params setBool:[valueSwitch isOn] forKeyPath:[self keyPathForKey:@"perf_h264"]]; break; case GET_TAG(0, 3): [_params setBool:[valueSwitch isOn] forKeyPath:[self keyPathForKey:@"perf_show_desktop"]]; break; case GET_TAG(0, 4): [_params setBool:[valueSwitch isOn] forKeyPath:[self keyPathForKey:@"perf_font_smoothing"]]; break; case GET_TAG(0, 5): [_params setBool:[valueSwitch isOn] forKeyPath:[self keyPathForKey:@"perf_desktop_composition"]]; break; case GET_TAG(0, 6): [_params setBool:[valueSwitch isOn] forKeyPath:[self keyPathForKey:@"perf_window_dragging"]]; break; case GET_TAG(0, 7): [_params setBool:[valueSwitch isOn] forKeyPath:[self keyPathForKey:@"perf_menu_animation"]]; break; case GET_TAG(0, 8): [_params setBool:[valueSwitch isOn] forKeyPath:[self keyPathForKey:@"perf_windows_themes"]]; break; default: break; } } @end