Blame client/iOS/Controllers/AdvancedBookmarkEditorController.m

Packit Service fa4841
/*
Packit Service fa4841
 Controller to edit advanced bookmark settings
Packit Service b1ea74
Packit Service fa4841
 Copyright 2013 Thincast Technologies GmbH, Author: Martin Fleisz
Packit Service b1ea74
Packit Service b1ea74
 This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
Packit Service b1ea74
 If a copy of the MPL was not distributed with this file, You can obtain one at
Packit Service b1ea74
 http://mozilla.org/MPL/2.0/.
Packit Service fa4841
 */
Packit Service fa4841
Packit Service fa4841
#import "AdvancedBookmarkEditorController.h"
Packit Service fa4841
#import "Bookmark.h"
Packit Service fa4841
#import "Utils.h"
Packit Service fa4841
#import "EditorSelectionController.h"
Packit Service fa4841
#import "ScreenSelectionController.h"
Packit Service fa4841
#import "PerformanceEditorController.h"
Packit Service fa4841
#import "BookmarkGatewaySettingsController.h"
Packit Service fa4841
Packit Service fa4841
@interface AdvancedBookmarkEditorController ()
Packit Service fa4841
Packit Service fa4841
@end
Packit Service fa4841
Packit Service fa4841
#define SECTION_ADVANCED_SETTINGS 0
Packit Service fa4841
#define SECTION_COUNT 1
Packit Service fa4841
Packit Service fa4841
@implementation AdvancedBookmarkEditorController
Packit Service fa4841
Packit Service b1ea74
- (id)initWithBookmark:(ComputerBookmark *)bookmark
Packit Service fa4841
{
Packit Service b1ea74
	if ((self = [super initWithStyle:UITableViewStyleGrouped]))
Packit Service fa4841
	{
Packit Service fa4841
		// set additional settings state according to bookmark data
Packit Service fa4841
		_bookmark = [bookmark retain];
Packit Service b1ea74
		_params = [bookmark params];
Packit Service b1ea74
	}
Packit Service b1ea74
	return self;
Packit Service fa4841
}
Packit Service fa4841
Packit Service fa4841
- (void)viewDidLoad
Packit Service fa4841
{
Packit Service b1ea74
	[super viewDidLoad];
Packit Service b1ea74
	[self setTitle:NSLocalizedString(@"Advanced Settings", @"Advanced Settings title")];
Packit Service fa4841
}
Packit Service fa4841
Packit Service fa4841
- (void)viewWillAppear:(BOOL)animated
Packit Service fa4841
{
Packit Service b1ea74
	[super viewWillAppear:animated];
Packit Service b1ea74
Packit Service b1ea74
	// we need to reload the table view data here to have up-to-date data for the
Packit Service b1ea74
	// advanced settings accessory items (like for resolution/color mode settings)
Packit Service b1ea74
	[[self tableView] reloadData];
Packit Service fa4841
}
Packit Service fa4841
Packit Service fa4841
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
Packit Service fa4841
{
Packit Service b1ea74
	return YES;
Packit Service fa4841
}
Packit Service fa4841
Packit Service fa4841
#pragma mark -
Packit Service fa4841
#pragma mark Table view data source
Packit Service fa4841
Packit Service b1ea74
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
Packit Service b1ea74
{
Packit Service b1ea74
	// Return the number of sections.
Packit Service b1ea74
	return SECTION_COUNT;
Packit Service fa4841
}
Packit Service fa4841
Packit Service b1ea74
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
Packit Service b1ea74
{
Packit Service b1ea74
	// Return the number of rows in the section.
Packit Service fa4841
	switch (section)
Packit Service fa4841
	{
Packit Service fa4841
		case SECTION_ADVANCED_SETTINGS: // advanced settings
Packit Service fa4841
			return 9;
Packit Service fa4841
		default:
Packit Service fa4841
			break;
Packit Service fa4841
	}
Packit Service fa4841
Packit Service b1ea74
	return 0;
Packit Service b1ea74
}
Packit Service bb5c11
Packit Service fa4841
// set section headers
Packit Service fa4841
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
Packit Service fa4841
{
Packit Service b1ea74
	switch (section)
Packit Service fa4841
	{
Packit Service fa4841
		case SECTION_ADVANCED_SETTINGS:
Packit Service fa4841
			return NSLocalizedString(@"Advanced", @"'Advanced': advanced settings header");
Packit Service fa4841
	}
Packit Service fa4841
	return @"unknown";
Packit Service fa4841
}
Packit Service fa4841
Packit Service bb5c11
// Customize the appearance of table view cells.
Packit Service b1ea74
- (UITableViewCell *)tableView:(UITableView *)tableView
Packit Service b1ea74
         cellForRowAtIndexPath:(NSIndexPath *)indexPath
Packit Service b1ea74
{
Packit Service b1ea74
Packit Service fa4841
	// determine the required cell type
Packit Service b1ea74
	NSString *cellType = nil;
Packit Service b1ea74
	switch ([indexPath section])
Packit Service fa4841
	{
Packit Service b1ea74
		case SECTION_ADVANCED_SETTINGS: // advanced settings
Packit Service b1ea74
		{
Packit Service b1ea74
			switch ([indexPath row])
Packit Service b1ea74
			{
Packit Service b1ea74
				case 0: // Enable/Disable TSG Settings
Packit Service b1ea74
					cellType = TableCellIdentifierYesNo;
Packit Service b1ea74
					break;
Packit Service b1ea74
				case 1: // TS Gateway Settings
Packit Service b1ea74
					cellType = TableCellIdentifierSubEditor;
Packit Service b1ea74
					break;
Packit Service b1ea74
				case 2: // 3G Settings
Packit Service b1ea74
					cellType = TableCellIdentifierYesNo;
Packit Service b1ea74
					break;
Packit Service b1ea74
				case 3: // 3G screen/color depth
Packit Service b1ea74
					cellType = TableCellIdentifierSelection;
Packit Service b1ea74
					break;
Packit Service b1ea74
				case 4: // 3G performance settings
Packit Service b1ea74
					cellType = TableCellIdentifierSubEditor;
Packit Service b1ea74
					break;
Packit Service b1ea74
				case 5: // security mode
Packit Service b1ea74
					cellType = TableCellIdentifierSelection;
Packit Service b1ea74
					break;
Packit Service b1ea74
				case 6: // remote program
Packit Service b1ea74
				case 7: // work dir
Packit Service b1ea74
					cellType = TableCellIdentifierText;
Packit Service b1ea74
					break;
Packit Service b1ea74
				case 8: // console mode
Packit Service b1ea74
					cellType = TableCellIdentifierYesNo;
Packit Service b1ea74
					break;
Packit Service b1ea74
				default:
Packit Service b1ea74
					break;
Packit Service b1ea74
			}
Packit Service fa4841
			break;
Packit Service b1ea74
		}
Packit Service b1ea74
	}
Packit Service b1ea74
	NSAssert(cellType != nil, @"Couldn't determine cell type");
Packit Service b1ea74
Packit Service fa4841
	// get the table view cell
Packit Service fa4841
	UITableViewCell *cell = [self tableViewCellFromIdentifier:cellType];
Packit Service b1ea74
	NSAssert(cell, @"Invalid cell");
Packit Service b1ea74
Packit Service fa4841
	// set cell values
Packit Service b1ea74
	switch ([indexPath section])
Packit Service fa4841
	{
Packit Service b1ea74
			// advanced settings
Packit Service fa4841
		case SECTION_ADVANCED_SETTINGS:
Packit Service fa4841
			[self initAdvancedSettings:indexPath cell:cell];
Packit Service fa4841
			break;
Packit Service b1ea74
Packit Service fa4841
		default:
Packit Service fa4841
			break;
Packit Service b1ea74
	}
Packit Service b1ea74
Packit Service b1ea74
	return cell;
Packit Service fa4841
}
Packit Service fa4841
Packit Service fa4841
// updates advanced settings in the UI
Packit Service b1ea74
- (void)initAdvancedSettings:(NSIndexPath *)indexPath cell:(UITableViewCell *)cell
Packit Service fa4841
{
Packit Service b1ea74
	BOOL enable_3G_settings = [_params boolForKey:@"enable_3g_settings"];
Packit Service b1ea74
	switch (indexPath.row)
Packit Service fa4841
	{
Packit Service fa4841
		case 0:
Packit Service b1ea74
		{
Packit Service b1ea74
			EditFlagTableViewCell *flagCell = (EditFlagTableViewCell *)cell;
Packit Service b1ea74
			[[flagCell label]
Packit Service b1ea74
			    setText:NSLocalizedString(@"Enable TS Gateway",
Packit Service b1ea74
			                              @"'Enable TS Gateway': Bookmark enable TSG settings")];
Packit Service b1ea74
			[[flagCell toggle] setTag:GET_TAG_FROM_PATH(indexPath)];
Packit Service b1ea74
			[[flagCell toggle] setOn:[_params boolForKey:@"enable_tsg_settings"]];
Packit Service b1ea74
			[[flagCell toggle] addTarget:self
Packit Service b1ea74
			                      action:@selector(toggleSettingValue:)
Packit Service b1ea74
			            forControlEvents:UIControlEventValueChanged];
Packit Service b1ea74
			break;
Packit Service b1ea74
		}
Packit Service b1ea74
		case 1:
Packit Service b1ea74
		{
Packit Service b1ea74
			BOOL enable_tsg_settings = [_params boolForKey:@"enable_tsg_settings"];
Packit Service b1ea74
			EditSubEditTableViewCell *editCell = (EditSubEditTableViewCell *)cell;
Packit Service b1ea74
			[[editCell label]
Packit Service b1ea74
			    setText:NSLocalizedString(@"TS Gateway Settings",
Packit Service b1ea74
			                              @"'TS Gateway Settings': Bookmark TS Gateway Settings")];
Packit Service b1ea74
			[[editCell label] setEnabled:enable_tsg_settings];
Packit Service b1ea74
			[editCell setSelectionStyle:enable_tsg_settings ? UITableViewCellSelectionStyleBlue
Packit Service b1ea74
			                                                : UITableViewCellSelectionStyleNone];
Packit Service b1ea74
			break;
Packit Service b1ea74
		}
Packit Service fa4841
		case 2:
Packit Service b1ea74
		{
Packit Service b1ea74
			EditFlagTableViewCell *flagCell = (EditFlagTableViewCell *)cell;
Packit Service b1ea74
			[[flagCell label]
Packit Service b1ea74
			    setText:NSLocalizedString(@"3G Settings",
Packit Service b1ea74
			                              @"'3G Settings': Bookmark enable 3G settings")];
Packit Service b1ea74
			[[flagCell toggle] setTag:GET_TAG_FROM_PATH(indexPath)];
Packit Service b1ea74
			[[flagCell toggle] setOn:[_params boolForKey:@"enable_3g_settings"]];
Packit Service b1ea74
			[[flagCell toggle] addTarget:self
Packit Service b1ea74
			                      action:@selector(toggleSettingValue:)
Packit Service b1ea74
			            forControlEvents:UIControlEventValueChanged];
Packit Service b1ea74
			break;
Packit Service b1ea74
		}
Packit Service fa4841
		case 3:
Packit Service b1ea74
		{
Packit Service b1ea74
			EditSelectionTableViewCell *selCell = (EditSelectionTableViewCell *)cell;
Packit Service b1ea74
			[[selCell label]
Packit Service b1ea74
			    setText:NSLocalizedString(@"3G Screen",
Packit Service b1ea74
			                              @"'3G Screen': Bookmark 3G Screen settings")];
Packit Service b1ea74
			NSString *resolution = ScreenResolutionDescription(
Packit Service b1ea74
			    [_params intForKeyPath:@"settings_3g.screen_resolution_type"],
Packit Service b1ea74
			    [_params intForKeyPath:@"settings_3g.width"],
Packit Service b1ea74
			    [_params intForKeyPath:@"settings_3g.height"]);
Packit Service b1ea74
			int colorBits = [_params intForKeyPath:@"settings_3g.colors"];
Packit Service b1ea74
			[[selCell selection]
Packit Service b1ea74
			    setText:[NSString stringWithFormat:@"%@@%d", resolution, colorBits]];
Packit Service b1ea74
			[[selCell label] setEnabled:enable_3G_settings];
Packit Service b1ea74
			[[selCell selection] setEnabled:enable_3G_settings];
Packit Service b1ea74
			[selCell setSelectionStyle:enable_3G_settings ? UITableViewCellSelectionStyleBlue
Packit Service b1ea74
			                                              : UITableViewCellSelectionStyleNone];
Packit Service b1ea74
			break;
Packit Service b1ea74
		}
Packit Service fa4841
		case 4:
Packit Service b1ea74
		{
Packit Service b1ea74
			EditSubEditTableViewCell *editCell = (EditSubEditTableViewCell *)cell;
Packit Service b1ea74
			[[editCell label]
Packit Service b1ea74
			    setText:NSLocalizedString(@"3G Performance",
Packit Service b1ea74
			                              @"'3G Performance': Bookmark 3G Performance Settings")];
Packit Service b1ea74
			[[editCell label] setEnabled:enable_3G_settings];
Packit Service b1ea74
			[editCell setSelectionStyle:enable_3G_settings ? UITableViewCellSelectionStyleBlue
Packit Service b1ea74
			                                               : UITableViewCellSelectionStyleNone];
Packit Service b1ea74
			break;
Packit Service b1ea74
		}
Packit Service fa4841
		case 5:
Packit Service b1ea74
		{
Packit Service b1ea74
			EditSelectionTableViewCell *selCell = (EditSelectionTableViewCell *)cell;
Packit Service b1ea74
			[[selCell label]
Packit Service b1ea74
			    setText:NSLocalizedString(@"Security",
Packit Service b1ea74
			                              @"'Security': Bookmark protocl security settings")];
Packit Service b1ea74
			[[selCell selection]
Packit Service b1ea74
			    setText:ProtocolSecurityDescription([_params intForKey:@"security"])];
Packit Service b1ea74
			break;
Packit Service b1ea74
		}
Packit Service fa4841
		case 6:
Packit Service b1ea74
		{
Packit Service b1ea74
			EditTextTableViewCell *textCell = (EditTextTableViewCell *)cell;
Packit Service b1ea74
			[[textCell label]
Packit Service b1ea74
			    setText:NSLocalizedString(@"Remote Program",
Packit Service b1ea74
			                              @"'Remote Program': Bookmark remote program settings")];
Packit Service b1ea74
			[[textCell textfield] setText:[_params StringForKey:@"remote_program"]];
Packit Service b1ea74
			[[textCell textfield] setTag:GET_TAG_FROM_PATH(indexPath)];
Packit Service b1ea74
			[[textCell textfield]
Packit Service b1ea74
			    setPlaceholder:NSLocalizedString(@"not set", @"not set placeholder")];
Packit Service b1ea74
			[self adjustEditTextTableViewCell:textCell];
Packit Service b1ea74
			break;
Packit Service b1ea74
		}
Packit Service fa4841
		case 7:
Packit Service b1ea74
		{
Packit Service b1ea74
			EditTextTableViewCell *textCell = (EditTextTableViewCell *)cell;
Packit Service b1ea74
			[[textCell label]
Packit Service b1ea74
			    setText:NSLocalizedString(
Packit Service b1ea74
			                @"Working Directory",
Packit Service b1ea74
			                @"'Working Directory': Bookmark working directory settings")];
Packit Service b1ea74
			[[textCell textfield] setText:[_params StringForKey:@"working_dir"]];
Packit Service b1ea74
			[[textCell textfield] setTag:GET_TAG_FROM_PATH(indexPath)];
Packit Service b1ea74
			[[textCell textfield]
Packit Service b1ea74
			    setPlaceholder:NSLocalizedString(@"not set", @"not set placeholder")];
Packit Service b1ea74
			[self adjustEditTextTableViewCell:textCell];
Packit Service b1ea74
			break;
Packit Service b1ea74
		}
Packit Service fa4841
		case 8:
Packit Service b1ea74
		{
Packit Service b1ea74
			EditFlagTableViewCell *flagCell = (EditFlagTableViewCell *)cell;
Packit Service b1ea74
			[[flagCell label]
Packit Service b1ea74
			    setText:NSLocalizedString(@"Console Mode",
Packit Service b1ea74
			                              @"'Console Mode': Bookmark console mode settings")];
Packit Service b1ea74
			[[flagCell toggle] setTag:GET_TAG_FROM_PATH(indexPath)];
Packit Service b1ea74
			[[flagCell toggle] setOn:[_params boolForKey:@"console"]];
Packit Service b1ea74
			[[flagCell toggle] addTarget:self
Packit Service b1ea74
			                      action:@selector(toggleSettingValue:)
Packit Service b1ea74
			            forControlEvents:UIControlEventValueChanged];
Packit Service b1ea74
			break;
Packit Service b1ea74
		}
Packit Service fa4841
		default:
Packit Service fa4841
			NSLog(@"Invalid row index in settings table!");
Packit Service fa4841
			break;
Packit Service b1ea74
	}
Packit Service fa4841
}
Packit Service fa4841
Packit Service fa4841
#pragma mark -
Packit Service fa4841
#pragma mark Table view delegate
Packit Service fa4841
Packit Service b1ea74
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
Packit Service b1ea74
{
Packit Service b1ea74
	UIViewController *viewCtrl = nil;
Packit Service b1ea74
Packit Service b1ea74
	// determine view
Packit Service b1ea74
	switch ([indexPath row])
Packit Service b1ea74
	{
Packit Service b1ea74
		case 1:
Packit Service b1ea74
			if ([_params boolForKey:@"enable_tsg_settings"])
Packit Service b1ea74
				viewCtrl = [[[BookmarkGatewaySettingsController alloc] initWithBookmark:_bookmark]
Packit Service b1ea74
				    autorelease];
Packit Service b1ea74
			break;
Packit Service b1ea74
		case 3:
Packit Service b1ea74
			if ([_params boolForKey:@"enable_3g_settings"])
Packit Service b1ea74
				viewCtrl = [[[ScreenSelectionController alloc]
Packit Service b1ea74
				    initWithConnectionParams:_params
Packit Service b1ea74
				                     keyPath:@"settings_3g"] autorelease];
Packit Service b1ea74
			break;
Packit Service b1ea74
		case 4:
Packit Service b1ea74
			if ([_params boolForKey:@"enable_3g_settings"])
Packit Service b1ea74
				viewCtrl = [[[PerformanceEditorController alloc]
Packit Service b1ea74
				    initWithConnectionParams:_params
Packit Service b1ea74
				                     keyPath:@"settings_3g"] autorelease];
Packit Service b1ea74
			break;
Packit Service b1ea74
		case 5:
Packit Service b1ea74
			viewCtrl = [[[EditorSelectionController alloc]
Packit Service b1ea74
			    initWithConnectionParams:_params
Packit Service b1ea74
			                     entries:[NSArray arrayWithObject:@"security"]
Packit Service b1ea74
			                  selections:[NSArray arrayWithObject:SelectionForSecuritySetting()]]
Packit Service b1ea74
			    autorelease];
Packit Service b1ea74
			break;
Packit Service b1ea74
		default:
Packit Service b1ea74
			break;
Packit Service b1ea74
	}
Packit Service fa4841
Packit Service b1ea74
	// display view
Packit Service b1ea74
	if (viewCtrl)
Packit Service b1ea74
		[[self navigationController] pushViewController:viewCtrl animated:YES];
Packit Service b1ea74
}
Packit Service bb5c11
Packit Service fa4841
#pragma mark -
Packit Service fa4841
#pragma mark Text Field delegate
Packit Service fa4841
Packit Service b1ea74
- (BOOL)textFieldShouldReturn:(UITextField *)textField
Packit Service fa4841
{
Packit Service fa4841
	[textField resignFirstResponder];
Packit Service fa4841
	return NO;
Packit Service fa4841
}
Packit Service fa4841
Packit Service fa4841
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField
Packit Service fa4841
{
Packit Service b1ea74
	switch (textField.tag)
Packit Service fa4841
	{
Packit Service b1ea74
		// update remote program/work dir settings
Packit Service b1ea74
		case GET_TAG(SECTION_ADVANCED_SETTINGS, 6):
Packit Service b1ea74
		{
Packit Service b1ea74
			[_params setValue:[textField text] forKey:@"remote_program"];
Packit Service b1ea74
			break;
Packit Service b1ea74
		}
Packit Service b1ea74
Packit Service b1ea74
		case GET_TAG(SECTION_ADVANCED_SETTINGS, 7):
Packit Service b1ea74
		{
Packit Service b1ea74
			[_params setValue:[textField text] forKey:@"working_dir"];
Packit Service b1ea74
			break;
Packit Service b1ea74
		}
Packit Service b1ea74
Packit Service fa4841
		default:
Packit Service fa4841
			break;
Packit Service fa4841
	}
Packit Service fa4841
	return YES;
Packit Service fa4841
}
Packit Service fa4841
Packit Service fa4841
#pragma mark - Action handlers
Packit Service fa4841
Packit Service fa4841
- (void)toggleSettingValue:(id)sender
Packit Service fa4841
{
Packit Service b1ea74
	UISwitch *valueSwitch = (UISwitch *)sender;
Packit Service b1ea74
	switch (valueSwitch.tag)
Packit Service b1ea74
	{
Packit Service b1ea74
		case GET_TAG(SECTION_ADVANCED_SETTINGS, 0):
Packit Service b1ea74
		{
Packit Service b1ea74
			[_params setBool:[valueSwitch isOn] forKey:@"enable_tsg_settings"];
Packit Service b1ea74
			NSArray *indexPaths =
Packit Service b1ea74
			    [NSArray arrayWithObjects:[NSIndexPath indexPathForRow:1
Packit Service b1ea74
			                                                 inSection:SECTION_ADVANCED_SETTINGS],
Packit Service b1ea74
			                              [NSIndexPath indexPathForRow:2
Packit Service b1ea74
			                                                 inSection:SECTION_ADVANCED_SETTINGS],
Packit Service b1ea74
			                              nil];
Packit Service b1ea74
			[[self tableView] reloadRowsAtIndexPaths:indexPaths
Packit Service b1ea74
			                        withRowAnimation:UITableViewRowAnimationNone];
Packit Service b1ea74
			break;
Packit Service b1ea74
		}
Packit Service b1ea74
Packit Service b1ea74
		case GET_TAG(SECTION_ADVANCED_SETTINGS, 2):
Packit Service b1ea74
		{
Packit Service b1ea74
			[_params setBool:[valueSwitch isOn] forKey:@"enable_3g_settings"];
Packit Service b1ea74
			NSArray *indexPaths =
Packit Service b1ea74
			    [NSArray arrayWithObjects:[NSIndexPath indexPathForRow:3
Packit Service b1ea74
			                                                 inSection:SECTION_ADVANCED_SETTINGS],
Packit Service b1ea74
			                              [NSIndexPath indexPathForRow:2
Packit Service b1ea74
			                                                 inSection:SECTION_ADVANCED_SETTINGS],
Packit Service b1ea74
			                              nil];
Packit Service b1ea74
			[[self tableView] reloadRowsAtIndexPaths:indexPaths
Packit Service b1ea74
			                        withRowAnimation:UITableViewRowAnimationNone];
Packit Service b1ea74
			break;
Packit Service b1ea74
		}
Packit Service b1ea74
Packit Service b1ea74
		case GET_TAG(SECTION_ADVANCED_SETTINGS, 8):
Packit Service b1ea74
			[_params setBool:[valueSwitch isOn] forKey:@"console"];
Packit Service b1ea74
			break;
Packit Service b1ea74
Packit Service b1ea74
		default:
Packit Service b1ea74
			break;
Packit Service b1ea74
	}
Packit Service fa4841
}
Packit Service fa4841
Packit Service fa4841
@end