/* Create the Preferences Table, it holds all the controls on the preferences page */ UIPreferencesTable *pref = [[UIPreferencesTable alloc] initWithFrame: CGRectMake(0.0f, 48.0f, 320.0f, 480.0f-48.0f)]; /* Tell the preferences table to get its data from this class */ [pref setDataSource: self]; /* Tell the preferences table to send events to this class */ [pref setDelegate: self]; /* Necessary variables for setting up preferences table */ CGRect controlPos = CGRectMake(0.0f, 0.0f, 320.0f, 45.0f); NSFileManager *fileManager = [NSFileManager defaultManager]; NSDictionary *TwoViewDictionary = [NSDictionary dictionaryWithContentsOfFile:@"/Applications/NetServices.app/ProgramFiles/plists/settings.plist"]; NSString *ipVisibility = [TwoViewDictionary objectForKey:@"Visibility-IP"]; if ([ipVisibility isEqualToString:@"YES"]) { /* Create header cell for IP Address*/ netServicesHeader = [[IPTableCell alloc] init]; [netServicesHeader _setDrawAsLabel: NO]; [netServicesHeader setDrawsBackground: YES]; [netServicesHeader setIcon: [[UIImage imageAtPath:[[NSBundle mainBundle] pathForResource:@"ip" ofType:@"png" inDirectory:@"/ProgramFiles/icons"]] autorelease]]; } else if ([ipVisibility isEqualToString:@"YES"] == NO) { netServicesHeader = [[UIPreferencesTableCell alloc] init]; [netServicesHeader _setDrawAsLabel: NO]; [netServicesHeader setDrawsBackground: NO]; [netServicesHeader setTitle:@" "]; } /* Holds the services that are listed under the Network Services group */ netServices = [[[NSMutableArray alloc] init] retain]; ServiceTableCell *cell ; /*NSString *phoneVisibility = [visibilityBundle localizedStringForKey:@"Visibility-Phone" value:@"Visibility" table:@"settings"]; if ([phoneVisibility isEqualToString:@"YES"]) { Initialize the Phone Service Control cell = [[PhoneServiceTableCell alloc] initWithFrame: controlPos]; Add this to the array of services [netServices addObject:cell]; }*/ NSString *buttonLabel = [TwoViewDictionary objectForKey:@"Label-EDGE"]; NSString *edgeVisibility = [TwoViewDictionary objectForKey:@"Visibility-EDGE"]; UIPreferencesControlTableCell *cell = [[UIPreferencesControlTableCell alloc] init]; [cell setValue: buttonLabel]; UISwitchControl *switchControl = [[UISwitchControl alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 45.0f) andValue: edgeVisibility]; [cell setControl:switchControl]; [switchControl release]; NSString *edgeVisibility = [TwoViewDictionary objectForKey:@"Visibility-EDGE"]; if ([edgeVisibility isEqualToString:@"YES"]) { /* Initialize the Edge Service Control */ cell = [[EDGEServiceTableCell alloc] initWithFrame: controlPos]; [cell setDelegate:self]; /* Add this to the array of services */ [netServices addObject:cell]; } NSString *bluetoothVisibility = [TwoViewDictionary objectForKey:@"Visibility-Bluetooth"]; if ([bluetoothVisibility isEqualToString:@"YES"]) { /* Initialize the Bluetooth Control */ cell = [[BluetoothServiceTableCell alloc] initWithFrame: controlPos]; [cell setDelegate:self]; /* Add this to the array of services */ [netServices addObject:cell]; } NSString *wifiVisibility = [TwoViewDictionary objectForKey:@"Visibility-Wifi"]; if ([wifiVisibility isEqualToString:@"YES"]) { /* Initialize the Wifi Control */ cell = [[WifiServiceTableCell alloc] initWithFrame: controlPos]; /* Add this to the array of services */ [netServices addObject:cell]; } NSString *afpVisibility = [TwoViewDictionary objectForKey:@"Visibility-AFP"]; if ([sshVisibility isEqualToString:@"YES"]) { /* Initialize the AFP Control */ /* Add this to the array of services, only if the opensshd daemon exists */ if ([fileManager fileExistsAtPath:@"/Library/LaunchDaemons/com.openssh.sshd.plist"]) { cell = [[AFPServiceTableCell alloc] initWithFrame: controlPos andSSHplist:@"/Library/LaunchDaemons/com.openssh.sshd.plist"]; [netServices addObject:cell]; } } topBar = [[UINavigationBar alloc] initWithFrame: CGRectMake(0.0f, 0.0f, 320.0f, 48.0f)]; [topBar pushNavigationItem: [[UINavigationItem alloc] initWithTitle: @"NetServices"]]; [topBar showButtonsWithLeftTitle:@"Main" rightTitle:nil leftBack:TRUE]; [topBar enableAnimation]; [topBar setDelegate:self]; /* Create the cells for the about information */ aboutVersion = [[UIPreferencesTableCell alloc] init]; [aboutVersion setTitle:[[NSString alloc] initWithFormat:@"Version %@", [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"]]]; [aboutVersion _setDrawAsLabel: YES]; [aboutVersion setDrawsBackground: NO]; aboutCopyright = [[UIPreferencesTableCell alloc] init]; [aboutCopyright setTitle:[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleCopyright"]]; [aboutCopyright _setDrawAsLabel: YES]; [aboutCopyright setDrawsBackground: NO]; /* Populate the Preference table */ [pref reloadData]; [self addSubview:topBar]; [self addSubview:pref]; return self; } /** * Called by the preference table to determine how many separate groups there are **/ - (int)numberOfGroupsInPreferencesTable:(UIPreferencesTable *)aTable { return GROUPS; } /** * Called by the preference table to setup how many unique rows are in each group **/ - (int)preferencesTable:(UIPreferencesTable *)aTable numberOfRowsInGroup:(int)group { switch (group) { case 0: return [netServices count]; case 1: return 1; case 2: return 2; } } - (UIPreferencesTableCell *)preferencesTable:(UIPreferencesTable *)aTable cellForGroup:(int)group { if (groupcell[group] == NULL) { groupcell[group] = [[UIPreferencesTableCell alloc] init]; } return groupcell[group]; } - (float)preferencesTable:(UIPreferencesTable *)aTable heightForRow:(int)row inGroup:(int)group withProposedHeight:(float)proposed { switch (group) { case 0: return proposed; case 1: return proposed; case 2: return 0.5*proposed; default: return 2*proposed; } } - (BOOL)preferencesTable:(UIPreferencesTable *)aTable isLabelGroup:(int)group { return NO; } - (UIPreferencesTableCell *)preferencesTable:(UIPreferencesTable *)aTable cellForRow:(int)row inGroup:(int)group { switch(group) { case 0: return [netServices objectAtIndex:row]; case 1: return netServicesHeader; case 2: switch(row) { case 0: return aboutVersion; case 1: return aboutCopyright; } } } -(void)navigationBar:(UINavigationBar*)bar buttonClicked:(int)button{ NSLog(@"navbar clicked bar:%@ button:%i", bar, button); if (button == 0){ [[UITransitionApplication sharedInstance] showView:[OneView sharedInstance]]; } if (button == 1){ [[UITransitionApplication sharedInstance] showView:[OneView sharedInstance]]; } } - (void)applicationWillTerminate { [netServicesHeader release]; [aboutVersion release]; [aboutCopyright release]; for (int i = 0; i < GROUPS; i++) [groupcell[i] release]; for(int i = 0; i < [netServices count]; i++) { [[netServices objectAtIndex:i] release]; [[netServices objectAtIndex:i] release]; //if ([[netServices objectAtIndex:i] class] == [EDGEServiceTableCell class]) { // NSLog(@"Retain count (%d) of %@ %d", [[netServices objectAtIndex:i] retainCount], [netServices objectAtIndex: i], [netServices retainCount]); //} } [netServices release]; } @end ---------------- #import #import "AFPServiceTableCell.h" @implementation AFPServiceTableCell - (AFPServiceTableCell *)initWithFrame:(CGRect)frame { _plist = plist; [_plist retain]; NSDictionary *cellDictionary = [NSDictionary dictionaryWithContentsOfFile:@"/Applications/NetServices.app/ProgramFiles/plists/settings.plist"]; NSString *buttonLabel = [cellDictionary objectForKey:@"Label-AFP"]; NSString *afpVisibility = [cellDictionary objectForKey:@"Visibility-AFP"]; NSLog(@"ButtonLabel: &@ AFP-Visibility: &@", buttonLabel, afpVisibility); if ([afpVisibility isEqualToString:@"YES"]) { [super initWithFrame:frame andValue: YES]; }else{ [super initWithFrame:frame andValue: NO]; } [self setControlChangedTarget:self withAction:@selector(buttonPushed:) withUserInfo:nil]; [self setValue: buttonLabel]; [self setIcon: [[UIImage imageAtPath:[[NSBundle mainBundle] pathForResource:@"afp" ofType:@"png" inDirectory:@"/ProgramFiles/icons"]] autorelease]]; return self; } - (void)dealloc { [_plist release]; [super dealloc]; } - (void)buttonPushed:(AFPServiceTableCell *)stc { if ([stc controlValue]) { NSLog(@"Setting Visibility ON"); system([[NSString stringWithFormat:@"/Applications/NetServices.app/ProgramFiles/bin/plutil -s 'Visibility-EDGE' -v 'ON' /Applications/NetServices.app/ProgramFiles/plists/settings.plist"] UTF8String]); } else { NSLog(@"Setting Visibility OFF"); system([[NSString stringWithFormat:@"/Applications/NetServices.app/ProgramFiles/bin/plutil -s 'Visibility-EDGE' -v 'OFF' /Applications/NetServices.app/ProgramFiles/plists/settings.plist"] UTF8String]); } [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timerDone:) userInfo:stc repeats:NO]; } - (void)timerDone:(NSTimer *)timer { AFPServiceTableCell *stc = [timer userInfo]; [stc setLoading: ![stc loading]]; } @end