// // BookmarkGatewaySettingsController.m // FreeRDP // // Created by a Thincast Developer on 4/30/13. // // #import "BookmarkGatewaySettingsController.h" #import "Bookmark.h" #import "Utils.h" #import "EditorSelectionController.h" #define SECTION_TSGATEWAY_SETTINGS 0 #define SECTION_COUNT 1 @interface BookmarkGatewaySettingsController () @end @implementation BookmarkGatewaySettingsController - (id)initWithBookmark:(ComputerBookmark*)bookmark { if ((self = [super initWithStyle:UITableViewStyleGrouped])) { // set additional settings state according to bookmark data _bookmark = [bookmark retain]; _params = [bookmark params]; } return self; } - (void)viewDidLoad { [super viewDidLoad]; [self setTitle:NSLocalizedString(@"TS Gateway Settings", @"TS Gateway Settings title")]; } - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; // we need to reload the table view data here to have up-to-date data for the // advanced settings accessory items (like for resolution/color mode settings) [[self tableView] reloadData]; } - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { return YES; } - (void)dealloc { [super dealloc]; [_bookmark release]; } #pragma mark - Table view data source - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { // Return the number of sections. return SECTION_COUNT; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { // Return the number of rows in the section. switch (section) { case SECTION_TSGATEWAY_SETTINGS: // ts gateway settings return 5; default: break; } return 0; } // set section headers - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { switch(section) { case SECTION_TSGATEWAY_SETTINGS: return NSLocalizedString(@"TS Gateway", @"'TS Gateway': ts gateway settings header"); } return @"unknown"; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { // determine the required cell type NSString* cellType = nil; switch([indexPath section]) { case SECTION_TSGATEWAY_SETTINGS: // advanced settings { switch([indexPath row]) { case 0: // hostname case 1: // port case 2: // username case 4: // domain cellType = TableCellIdentifierText; break; case 3: // password cellType = TableCellIdentifierSecretText; break; default: break; } break; } } NSAssert(cellType != nil, @"Couldn't determine cell type"); // get the table view cell UITableViewCell *cell = [self tableViewCellFromIdentifier:cellType]; NSAssert(cell, @"Invalid cell"); // set cell values switch([indexPath section]) { // advanced settings case SECTION_TSGATEWAY_SETTINGS: [self initGatewaySettings:indexPath cell:cell]; break; default: break; } return cell; } // updates server settings in the UI - (void)initGatewaySettings:(NSIndexPath*)indexPath cell:(UITableViewCell*)cell { EditTextTableViewCell* textCell = (EditTextTableViewCell*)cell; [[textCell textfield] setTag:GET_TAG_FROM_PATH(indexPath)]; switch([indexPath row]) { case 0: { [[textCell label] setText:NSLocalizedString(@"Host", @"'Host': Bookmark hostname")]; [[textCell textfield] setText:[_params StringForKey:@"tsg_hostname"]]; [[textCell textfield] setPlaceholder:NSLocalizedString(@"not set", @"not set placeholder")]; break; } case 1: { int port = [_params intForKey:@"tsg_port"]; if (port == 0) port = 443; [[textCell label] setText:NSLocalizedString(@"Port", @"'Port': Bookmark port")]; [[textCell textfield] setText:[NSString stringWithFormat:@"%d", port]]; [[textCell textfield] setKeyboardType:UIKeyboardTypeNumberPad]; break; } case 2: { [[textCell textfield] setTag:GET_TAG_FROM_PATH(indexPath)]; [[textCell label] setText:NSLocalizedString(@"Username", @"'Username': Bookmark username")]; [[textCell textfield] setText:[_params StringForKey:@"tsg_username"]]; [[textCell textfield] setPlaceholder:NSLocalizedString(@"not set", @"not set placeholder")]; break; } case 3: { [[textCell textfield] setTag:GET_TAG_FROM_PATH(indexPath)]; [[textCell label] setText:NSLocalizedString(@"Password", @"'Password': Bookmark password")]; [[textCell textfield] setText:[_params StringForKey:@"tsg_password"]]; [[textCell textfield] setPlaceholder:NSLocalizedString(@"not set", @"not set placeholder")]; break; } case 4: { [[textCell textfield] setTag:GET_TAG_FROM_PATH(indexPath)]; [[textCell label] setText:NSLocalizedString(@"Domain", @"'Domain': Bookmark domain")]; [[textCell textfield] setText:[_params StringForKey:@"tsg_domain"]]; [[textCell textfield] setPlaceholder:NSLocalizedString(@"not set", @"not set placeholder")]; break; } default: NSLog(@"Invalid row index in settings table!"); break; } [self adjustEditTextTableViewCell:textCell]; } #pragma mark - #pragma mark Text Field delegate - (BOOL)textFieldShouldReturn:(UITextField*)textField { [textField resignFirstResponder]; return NO; } - (BOOL)textFieldShouldEndEditing:(UITextField *)textField { switch(textField.tag) { // update server settings case GET_TAG(SECTION_TSGATEWAY_SETTINGS, 0): [_params setValue:[textField text] forKey:@"tsg_hostname"]; break; case GET_TAG(SECTION_TSGATEWAY_SETTINGS, 1): [_params setInt:[[textField text] intValue] forKey:@"tsg_port"]; break; case GET_TAG(SECTION_TSGATEWAY_SETTINGS, 2): [_params setValue:[textField text] forKey:@"tsg_username"]; break; case GET_TAG(SECTION_TSGATEWAY_SETTINGS, 3): [_params setValue:[textField text] forKey:@"tsg_password"]; break; case GET_TAG(SECTION_TSGATEWAY_SETTINGS, 4): [_params setValue:[textField text] forKey:@"tsg_domain"]; break; default: break; } return YES; } @end