Commit 784de957 authored by Felix Paul Kühne's avatar Felix Paul Kühne

Re-wrote menu to get rid of the buttons, most of the xib and further cluttery

parent c01f604f
......@@ -19,6 +19,7 @@
#import "PAPasscodeViewController.h"
#import "UINavigationController+Theme.h"
#import "VLCHTTPUploaderController.h"
#import "VLCMenuTableViewController.h"
@interface VLCAppDelegate () <PAPasscodeViewControllerDelegate, VLCMediaFileDiscovererDelegate> {
PAPasscodeViewController *_passcodeLockController;
......@@ -63,7 +64,7 @@
[navCon loadTheme];
_revealController = [[GHRevealViewController alloc] initWithNibName:nil bundle:nil];
_revealController.sidebarViewController = [[VLCMenuViewController alloc] initWithNibName:nil bundle:nil];
_revealController.sidebarViewController = [[VLCMenuTableViewController alloc] initWithNibName:nil bundle:nil];
_revealController.contentViewController = navCon;
self.window.rootViewController = self.revealController;
......
//
// VLCMenuTableViewController.h
// VLC for iOS
//
// Created by Felix Paul Kühne on 10.08.13.
// Copyright (c) 2013 VideoLAN. All rights reserved.
//
// Refer to the COPYING file of the official project for license.
//
#import <UIKit/UIKit.h>
@class VLCSettingsController;
@class IASKAppSettingsViewController;
@interface VLCMenuTableViewController : UIViewController
@property (strong, nonatomic) IASKAppSettingsViewController *settingsViewController;
@property (strong, nonatomic) VLCSettingsController *settingsController;
@property (nonatomic, strong) UITableView *tableView;
@end
//
// VLCMenuTableViewController.m
// VLC for iOS
//
// Created by Felix Paul Kühne on 10.08.13.
// Copyright (c) 2013 VideoLAN. All rights reserved.
//
// Refer to the COPYING file of the official project for license.
//
#import "VLCMenuTableViewController.h"
#import "GHRevealViewController.h"
#import "GHMenuCell.h"
#import "Reachability.h"
#import <QuartzCore/QuartzCore.h>
#import "VLCWiFiUploadTableViewCell.h"
#import "VLCHTTPUploaderController.h"
#import "VLCAppDelegate.h"
#import "HTTPServer.h"
#import "IASKAppSettingsViewController.h"
#import "GHRevealViewController.h"
#import "VLCLocalServerListViewController.h"
#import "VLCOpenNetworkStreamViewController.h"
#import "VLCHTTPDownloadViewController.h"
#import "VLCSettingsController.h"
#import "UINavigationController+Theme.h"
#import "UIBarButtonItem+Theme.h"
#import "VLCAboutViewController.h"
#import "VLCPlaylistViewController.h"
#import "VLCBugreporter.h"
@interface VLCMenuTableViewController () <UITableViewDataSource, UITableViewDelegate>
{
NSArray *_sectionHeaderTexts;
NSArray *_menuItemsSectionOne;
NSArray *_menuItemsSectionTwo;
NSArray *_menuItemsSectionThree;
UILabel *_uploadLocationLabel;
UISwitch *_uploadSwitch;
Reachability *_reachability;
}
@property (nonatomic) VLCHTTPUploaderController *uploadController;
@property (nonatomic) VLCAppDelegate *appDelegate;
@property (nonatomic) GHRevealViewController *revealController;
@end
@implementation VLCMenuTableViewController
- (void)dealloc
{
[_reachability stopNotifier];
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
- (void)viewDidLoad
{
[super viewDidLoad];
self.view.frame = CGRectMake(0.0f, 0.0f, kGHRevealSidebarWidth, CGRectGetHeight(self.view.bounds));
self.view.autoresizingMask = UIViewAutoresizingFlexibleHeight;
_sectionHeaderTexts = @[@"Media Library", @"Network", @"Settings"];
_menuItemsSectionOne = @[@"All Files"];
_menuItemsSectionTwo = @[@"Local Network", @"OPEN_NETWORK", @"DOWNLOAD_FROM_HTTP", @"WiFi Upload", @"Dropbox"];
_menuItemsSectionThree = @[@"Settings", @"ABOUT_APP"];
_tableView = [[UITableView alloc] initWithFrame:CGRectMake(0.0f, 44.0f, kGHRevealSidebarWidth, CGRectGetHeight(self.view.bounds) - 44.0f)
style:UITableViewStylePlain];
_tableView.delegate = self;
_tableView.dataSource = self;
_tableView.autoresizingMask = UIViewAutoresizingFlexibleHeight;
_tableView.backgroundColor = [UIColor clearColor];
_tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
_tableView.rowHeight = [VLCWiFiUploadTableViewCell heightOfCell];
self.view = _tableView;
[self.tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] animated:NO scrollPosition:UITableViewScrollPositionTop];
_reachability = [Reachability reachabilityForLocalWiFi];
[_reachability startNotifier];
[self netReachabilityChanged:nil];
self.appDelegate = [[UIApplication sharedApplication] delegate];
self.uploadController = self.appDelegate.uploadController;
self.revealController = self.appDelegate.revealController;
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(netReachabilityChanged:) name:kReachabilityChangedNotification object:nil];
}
- (void)viewWillAppear:(BOOL)animated {
self.view.frame = CGRectMake(0.0f, 0.0f,kGHRevealSidebarWidth, CGRectGetHeight(self.view.bounds));
}
- (void)netReachabilityChanged:(NSNotification *)notification
{
if (_reachability.currentReachabilityStatus == ReachableViaWiFi) {
_uploadSwitch.enabled = YES;
_uploadLocationLabel.text = NSLocalizedString(@"HTTP_UPLOAD_SERVER_OFF", @"");
} else {
_uploadSwitch.enabled = NO;
_uploadSwitch.on = NO;
_uploadLocationLabel.text = NSLocalizedString(@"HTTP_UPLOAD_NO_CONNECTIVITY", @"");
}
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)orientation {
return (orientation == UIInterfaceOrientationPortraitUpsideDown)
? (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
: YES;
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 3;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
if (section == 0) // media
return 1;
else if (section == 1) // network
return 5;
else if (section == 2) // settings & co
return 2;
else
return 0;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"VLCMenuCell";
static NSString *WiFiCellIdentifier = @"VLCMenuWiFiCell";
NSString *title;
if (indexPath.section == 0)
title = NSLocalizedString(_menuItemsSectionOne[indexPath.row], @"");
else if(indexPath.section == 1)
title = NSLocalizedString(_menuItemsSectionTwo[indexPath.row], @"");
else if(indexPath.section == 2)
title = NSLocalizedString(_menuItemsSectionThree[indexPath.row], @"");
UITableViewCell *cell;
if ([title isEqualToString:@"WiFi Upload"]) {
cell = (VLCWiFiUploadTableViewCell *)[tableView dequeueReusableCellWithIdentifier:WiFiCellIdentifier];
if (cell == nil)
cell = [VLCWiFiUploadTableViewCell cellWithReuseIdentifier:WiFiCellIdentifier];
} else {
cell = (GHMenuCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
cell = [[GHMenuCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
if ([title isEqualToString:@"Dropbox"]) {
[[(GHMenuCell*)cell titleImageView] setImage: [UIImage imageNamed:@"dropboxLabel"]];
cell.textLabel.text = @"";
} else if ([title isEqualToString:@"WiFi Upload"]) {
_uploadLocationLabel = [(VLCWiFiUploadTableViewCell*)cell uploadAddressLabel];
_uploadSwitch = [(VLCWiFiUploadTableViewCell*)cell serverOnSwitch];
[_uploadSwitch addTarget:self action:@selector(toggleHTTPServer:) forControlEvents:UIControlEventTouchUpInside];
BOOL isHTTPServerOn = [[NSUserDefaults standardUserDefaults] boolForKey:kVLCSettingSaveHTTPUploadServerStatus];
[_uploadSwitch setOn:isHTTPServerOn];
[self updateHTTPServerAddress];
} else
cell.textLabel.text = title;
return cell;
}
#pragma mark - tv delegate
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
if (section < 3)
return 21.f;
return 0.;
}
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
NSObject *headerText = NSLocalizedString(_sectionHeaderTexts[section], @"");
UIView *headerView = nil;
if (headerText != [NSNull null]) {
headerView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, [UIScreen mainScreen].bounds.size.height, 21.0f)];
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = headerView.bounds;
gradient.colors = @[
(id)[UIColor colorWithRed:(67.0f/255.0f) green:(74.0f/255.0f) blue:(94.0f/255.0f) alpha:1.0f].CGColor,
(id)[UIColor colorWithRed:(57.0f/255.0f) green:(64.0f/255.0f) blue:(82.0f/255.0f) alpha:1.0f].CGColor,
];
[headerView.layer insertSublayer:gradient atIndex:0];
UILabel *textLabel = [[UILabel alloc] initWithFrame:CGRectInset(headerView.bounds, 12.0f, 5.0f)];
textLabel.text = (NSString *) headerText;
textLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:([UIFont systemFontSize] * 0.8f)];
textLabel.shadowOffset = CGSizeMake(0.0f, 1.0f);
textLabel.shadowColor = [UIColor colorWithWhite:0.0f alpha:0.25f];
textLabel.textColor = [UIColor colorWithRed:(125.0f/255.0f) green:(129.0f/255.0f) blue:(146.0f/255.0f) alpha:1.0f];
textLabel.backgroundColor = [UIColor clearColor];
[headerView addSubview:textLabel];
UIView *topLine = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, [UIScreen mainScreen].bounds.size.height, 1.0f)];
topLine.backgroundColor = [UIColor colorWithRed:(78.0f/255.0f) green:(86.0f/255.0f) blue:(103.0f/255.0f) alpha:1.0f];
[headerView addSubview:topLine];
UIView *bottomLine = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 21.0f, [UIScreen mainScreen].bounds.size.height, 1.0f)];
bottomLine.backgroundColor = [UIColor colorWithRed:(36.0f/255.0f) green:(42.0f/255.0f) blue:(5.0f/255.0f) alpha:1.0f];
[headerView addSubview:bottomLine];
}
return headerView;
}
#pragma mark - menu implementation
- (void)updateHTTPServerAddress
{
HTTPServer *server = self.uploadController.httpServer;
if (server.isRunning)
_uploadLocationLabel.text = [NSString stringWithFormat:@"http://%@:%i", [self.uploadController currentIPAddress], server.listeningPort];
else
_uploadLocationLabel.text = NSLocalizedString(@"HTTP_UPLOAD_SERVER_OFF", @"");
}
- (IBAction)toggleHTTPServer:(UISwitch *)sender
{
[[NSUserDefaults standardUserDefaults] setBool:sender.on forKey:kVLCSettingSaveHTTPUploadServerStatus];
[self.uploadController changeHTTPServerState:sender.on];
[self updateHTTPServerAddress];
[[NSUserDefaults standardUserDefaults] synchronize];
}
- (void)_revealItem:(NSUInteger)itemIndex inSection:(NSUInteger)sectionNumber
{
UIViewController *viewController;
if (sectionNumber == 1) {
if (itemIndex == 0)
viewController = [[VLCLocalServerListViewController alloc] init];
else if (itemIndex == 1)
viewController = [[VLCOpenNetworkStreamViewController alloc] init];
else if (itemIndex == 2)
viewController = [[VLCHTTPDownloadViewController alloc] init];
else if (itemIndex == 4)
viewController = self.appDelegate.dropboxTableViewController;
} else if (sectionNumber == 2) {
if (itemIndex == 0) {
if (!self.settingsController)
self.settingsController = [[VLCSettingsController alloc] init];
if (!self.settingsViewController) {
self.settingsViewController = [[IASKAppSettingsViewController alloc] initWithStyle:UITableViewStyleGrouped];
self.settingsController.viewController = self.settingsViewController;
self.settingsViewController.navigationItem.leftBarButtonItem = [UIBarButtonItem themedRevealMenuButtonWithTarget:self.settingsController andSelector:@selector(dismiss:)];
}
self.settingsViewController.modalPresentationStyle = UIModalPresentationFormSheet;
self.settingsViewController.delegate = self.settingsController;
self.settingsViewController.showDoneButton = NO;
self.settingsViewController.showCreditsFooter = NO;
viewController = self.settingsController.viewController;
} else if (itemIndex == 1)
viewController = [[VLCAboutViewController alloc] init];
} else
viewController = self.appDelegate.playlistViewController;
if (!viewController)
return;
UINavigationController *navCon = [[UINavigationController alloc] initWithRootViewController:viewController];
[navCon loadTheme];
_revealController.contentViewController = navCon;
[_revealController toggleSidebar:NO duration:kGHRevealSidebarDefaultAnimationDuration];
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[self _revealItem:indexPath.row inSection:indexPath.section];
}
#pragma mark Public Methods
- (void)selectRowAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated scrollPosition:(UITableViewScrollPosition)scrollPosition {
[self.tableView selectRowAtIndexPath:indexPath animated:animated scrollPosition:scrollPosition];
if (scrollPosition == UITableViewScrollPositionNone)
[self.tableView scrollToRowAtIndexPath:indexPath atScrollPosition:scrollPosition animated:animated];
[self _revealItem:indexPath.row inSection:indexPath.section];
}
#pragma mark - shake to support
- (BOOL)canBecomeFirstResponder {
return YES;
}
- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event {
if (motion == UIEventSubtypeMotionShake)
[[VLCBugreporter sharedInstance] handleBugreportRequest];
}
@end
//
// VLCWiFiUploadTableViewCell.h
// VLC for iOS
//
// Created by Felix Paul Kühne on 10.08.13.
// Copyright (c) 2013 VideoLAN. All rights reserved.
//
// Refer to the COPYING file of the official project for license.
//
#import <UIKit/UIKit.h>
@interface VLCWiFiUploadTableViewCell : UITableViewCell
@property (nonatomic, strong) IBOutlet UILabel *titleLabel;
@property (nonatomic, strong) IBOutlet UILabel *uploadAddressLabel;
@property (nonatomic, strong) IBOutlet UISwitch *serverOnSwitch;
+ (VLCWiFiUploadTableViewCell *)cellWithReuseIdentifier:(NSString *)ident;
+ (CGFloat)heightOfCell;
@end
//
// VLCWiFiUploadTableViewCell.m
// VLC for iOS
//
// Created by Felix Paul Kühne on 10.08.13.
// Copyright (c) 2013 VideoLAN. All rights reserved.
//
// Refer to the COPYING file of the official project for license.
//
#import "VLCWiFiUploadTableViewCell.h"
@implementation VLCWiFiUploadTableViewCell
+ (VLCWiFiUploadTableViewCell *)cellWithReuseIdentifier:(NSString *)ident
{
NSArray *nibContentArray = [[NSBundle mainBundle] loadNibNamed:@"VLCWiFiUploadTableViewCell" owner:nil options:nil];
NSAssert([nibContentArray count] == 1, @"meh");
NSAssert([[nibContentArray lastObject] isKindOfClass:[VLCWiFiUploadTableViewCell class]], @"meh meh");
VLCWiFiUploadTableViewCell *cell = (VLCWiFiUploadTableViewCell *)[nibContentArray lastObject];
return cell;
}
- (void)awakeFromNib
{
self.titleLabel.text = NSLocalizedString(@"HTTP_UPLOAD", @"");
UIView *topLine = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, [UIScreen mainScreen].bounds.size.height, 1.0f)];
topLine.backgroundColor = [UIColor colorWithRed:(54.0f/255.0f) green:(61.0f/255.0f) blue:(76.0f/255.0f) alpha:1.0f];
[self.titleLabel.superview addSubview:topLine];
UIView *topLine2 = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 1.0f, [UIScreen mainScreen].bounds.size.height, 1.0f)];
topLine2.backgroundColor = [UIColor colorWithRed:(54.0f/255.0f) green:(61.0f/255.0f) blue:(77.0f/255.0f) alpha:1.0f];
[self.titleLabel.superview addSubview:topLine2];
UIView *bottomLine = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 50.0f, [UIScreen mainScreen].bounds.size.height, 1.0f)];
bottomLine.backgroundColor = [UIColor colorWithRed:(40.0f/255.0f) green:(47.0f/255.0f) blue:(61.0f/255.0f) alpha:1.0f];
[self.titleLabel.superview addSubview:bottomLine];
}
+ (CGFloat)heightOfCell
{
return 50.;
}
@end
......@@ -5,7 +5,7 @@
* Improved Subtitles support with options to choose font, size, and color
* Add UPNP discovery and streaming (#8880)
* Add Bonjour announcement for the WiFi Uploader's website (#8741)
* Redesigned menu and application flow (#9045)
* Newly implemented menu and application flow (#9045)
* Add Deinterlace option (off by default, #8813)
* Device no longer goes to sleep during media downloads (#9062)
* Improved video output on external screens (#9079)
......
<?xml version="1.0" encoding="UTF-8"?>
<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="8.00">
<data>
<int key="IBDocument.SystemTarget">1296</int>
<string key="IBDocument.SystemVersion">12F33</string>
<string key="IBDocument.InterfaceBuilderVersion">3084</string>
<string key="IBDocument.AppKitVersion">1187.39</string>
<string key="IBDocument.HIToolboxVersion">626.00</string>
<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
<string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string key="NS.object.0">2083</string>
</object>
<array key="IBDocument.IntegratedClassDependencies">
<string>IBProxyObject</string>
<string>IBUILabel</string>
<string>IBUISwitch</string>
<string>IBUITableViewCell</string>
</array>
<array key="IBDocument.PluginDependencies">
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
</array>
<object class="NSMutableDictionary" key="IBDocument.Metadata">
<string key="NS.key.0">PluginDependencyRecalculationVersion</string>
<integer value="1" key="NS.object.0"/>
</object>
<array class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
<object class="IBProxyObject" id="372490531">
<string key="IBProxiedObjectIdentifier">IBFilesOwner</string>
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
</object>
<object class="IBProxyObject" id="975951072">
<string key="IBProxiedObjectIdentifier">IBFirstResponder</string>
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
</object>
<object class="IBUITableViewCell" id="962619467">
<reference key="NSNextResponder"/>
<int key="NSvFlags">292</int>
<array class="NSMutableArray" key="NSSubviews">
<object class="IBUIView" id="162418872">
<reference key="NSNextResponder" ref="962619467"/>
<int key="NSvFlags">256</int>
<array class="NSMutableArray" key="NSSubviews">
<object class="IBUILabel" id="76807315">
<reference key="NSNextResponder" ref="162418872"/>
<int key="NSvFlags">290</int>
<string key="NSFrame">{{4, 6}, {164, 21}}</string>
<reference key="NSSuperview" ref="162418872"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="69574698"/>
<string key="NSReuseIdentifierKey">_NS:9</string>
<bool key="IBUIOpaque">NO</bool>
<bool key="IBUIClipsSubviews">YES</bool>
<int key="IBUIContentMode">7</int>
<bool key="IBUIUserInteractionEnabled">NO</bool>
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
<string key="IBUIText">HTTP Upload</string>
<object class="NSColor" key="IBUITextColor" id="991848793">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
</object>
<nil key="IBUIHighlightedColor"/>
<int key="IBUIBaselineAdjustment">0</int>
<int key="IBUITextAlignment">1</int>
<object class="IBUIFontDescription" key="IBUIFontDescription">
<int key="type">2</int>
<double key="pointSize">15</double>
</object>
<object class="NSFont" key="IBUIFont">
<string key="NSName">Helvetica-Bold</string>
<double key="NSSize">15</double>
<int key="NSfFlags">16</int>
</object>
<bool key="IBUIAdjustsFontSizeToFit">NO</bool>
</object>
<object class="IBUISwitch" id="69574698">
<reference key="NSNextResponder" ref="162418872"/>
<int key="NSvFlags">289</int>
<string key="NSFrame">{{161, 3}, {94, 27}}</string>
<reference key="NSSuperview" ref="162418872"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="782250670"/>
<string key="NSReuseIdentifierKey">_NS:9</string>
<bool key="IBUIOpaque">NO</bool>
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
<int key="IBUIContentHorizontalAlignment">0</int>
<int key="IBUIContentVerticalAlignment">0</int>
<object class="NSColor" key="IBUIOnTintColor">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MCAwLjYxAA</bytes>
<object class="NSColorSpace" key="NSCustomColorSpace">
<int key="NSID">2</int>
</object>
</object>
</object>
<object class="IBUILabel" id="782250670">
<reference key="NSNextResponder" ref="162418872"/>
<int key="NSvFlags">290</int>
<string key="NSFrame">{{4, 28}, {249, 21}}</string>
<reference key="NSSuperview" ref="162418872"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView"/>
<string key="NSReuseIdentifierKey">_NS:9</string>
<bool key="IBUIOpaque">NO</bool>
<bool key="IBUIClipsSubviews">YES</bool>
<int key="IBUIContentMode">7</int>
<bool key="IBUIUserInteractionEnabled">NO</bool>
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
<string key="IBUIText">Inactive Server</string>
<reference key="IBUITextColor" ref="991848793"/>
<nil key="IBUIHighlightedColor"/>
<int key="IBUIBaselineAdjustment">0</int>
<int key="IBUITextAlignment">1</int>
<object class="IBUIFontDescription" key="IBUIFontDescription">
<int key="type">1</int>
<double key="pointSize">14</double>
</object>
<object class="NSFont" key="IBUIFont">
<string key="NSName">Helvetica</string>
<double key="NSSize">14</double>
<int key="NSfFlags">16</int>
</object>
<bool key="IBUIAdjustsFontSizeToFit">NO</bool>
</object>
</array>
<string key="NSFrameSize">{260, 49}</string>
<reference key="NSSuperview" ref="962619467"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="76807315"/>
<string key="NSReuseIdentifierKey">_NS:11</string>
<object class="NSColor" key="IBUIBackgroundColor">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MCAwAA</bytes>
</object>
<bool key="IBUIOpaque">NO</bool>
<bool key="IBUIClipsSubviews">YES</bool>
<int key="IBUIContentMode">4</int>
<bool key="IBUIMultipleTouchEnabled">YES</bool>
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
</object>
</array>
<string key="NSFrameSize">{260, 50}</string>
<reference key="NSSuperview"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="162418872"/>
<string key="NSReuseIdentifierKey">_NS:9</string>
<object class="NSColor" key="IBUIBackgroundColor">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MAA</bytes>
</object>
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
<int key="IBUISelectionStyle">0</int>
<reference key="IBUIContentView" ref="162418872"/>
<string key="IBUIReuseIdentifier">WiFiMenuCell</string>
<real value="46" key="IBUIRowHeight"/>
</object>
</array>
<object class="IBObjectContainer" key="IBDocument.Objects">
<array class="NSMutableArray" key="connectionRecords">
<object class="IBConnectionRecord">
<object class="IBCocoaTouchOutletConnection" key="connection">
<string key="label">serverOnSwitch</string>
<reference key="source" ref="962619467"/>
<reference key="destination" ref="69574698"/>
</object>