Change InAppSettings place

All settings with Linphone Colors
This commit is contained in:
Yann Diorcet 2012-07-27 11:20:09 +02:00
parent de9ebfb8b0
commit ee358816b7
42 changed files with 1191 additions and 150 deletions

View file

@ -17,12 +17,19 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifndef UILINPHONE_H
#define UILINPHONE_H
#import <UIKit/UIColor.h>
#define LINPHONE_MAIN_COLOR [UIColor colorWithRed:207.0f/255.0f green:76.0f/255.0f blue:41.0f/255.0f alpha:1.0f]
#define LINPHONE_TABLE_CELL_BACKGROUND_COLOR [UIColor colorWithRed:207.0f/255.0f green:76.0f/255.0f blue:41.0f/255.0f alpha:1.0f]
@interface UIColor (LightAndDark)
#endif
- (UIColor *)adjustHue:(float)hm saturation:(float)sm brightness:(float)bm alpha:(float)am;
- (UIColor *)multColor:(float)mult;
- (UIColor *)lighterColor;
- (UIColor *)darkerColor;
@end

View file

@ -0,0 +1,52 @@
/* UILinphone.m
*
* Copyright (C) 2012 Belledonne Comunications, Grenoble, France
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Library General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#import "UILinphone.h"
@implementation UIColor (LightAndDark)
- (UIColor *)multColor:(float)mult {
float h, s, b, a;
if ([self getHue:&h saturation:&s brightness:&b alpha:&a])
return [UIColor colorWithHue:h
saturation:s
brightness:MIN(MAX(b * mult, 0.0), 1.0)
alpha:a];
return nil;
}
- (UIColor *)adjustHue:(float)hm saturation:(float)sm brightness:(float)bm alpha:(float)am {
float h, s, b, a;
if ([self getHue:&h saturation:&s brightness:&b alpha:&a])
return [UIColor colorWithHue:MIN(MAX(h + hm, 0.0), 1.0)
saturation:MIN(MAX(s + sm, 0.0), 1.0)
brightness:MIN(MAX(b + bm, 0.0), 1.0)
alpha:MIN(MAX(a + am, 0.0), 1.0)];
return nil;
}
- (UIColor *)lighterColor {
return [self multColor:1.3];
}
- (UIColor *)darkerColor {
return [self multColor:0.75];
}
@end

View file

@ -20,16 +20,134 @@
#import "SettingsViewController.h"
#import "LinphoneManager.h"
#import "UILinphone.h"
#import "UACellBackgroundView.h"
static void removeTableBackground(UIView* view) {
if([view isKindOfClass:[UITableView class]]) {
[view setBackgroundColor:[UIColor clearColor]];
}
for(UIView *subview in [view subviews]) {
removeTableBackground(subview);
}
#import "DCRoundSwitch.h"
#import "IASKSpecifierValuesViewController.h"
#import "IASKPSTextFieldSpecifierViewCell.h"
#import "IASKSpecifier.h"
#import "IASKTextField.h"
#pragma mark - IASKSwitchEx Class
@interface IASKSwitchEx : DCRoundSwitch {
NSString *_key;
}
@property (nonatomic, retain) NSString *key;
@end
@implementation IASKSwitchEx
@synthesize key=_key;
- (void)dealloc {
[_key release], _key = nil;
[super dealloc];
}
@end
#pragma mark - IASKSpecifierValuesViewControllerEx Class
// Patch IASKSpecifierValuesViewController
@interface IASKSpecifierValuesViewControllerEx: IASKSpecifierValuesViewController
@end
@implementation IASKSpecifierValuesViewControllerEx
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell * cell = [super tableView:tableView cellForRowAtIndexPath:indexPath];
// Background View
UACellBackgroundView *selectedBackgroundView = [[[UACellBackgroundView alloc] initWithFrame:CGRectZero] autorelease];
cell.selectedBackgroundView = selectedBackgroundView;
[selectedBackgroundView setBackgroundColor:LINPHONE_TABLE_CELL_BACKGROUND_COLOR];
return cell;
}
@end
#pragma mark - IASKAppSettingsViewControllerEx Class
@interface IASKAppSettingsViewController(PrivateInterface)
- (UITableViewCell*)newCellForIdentifier:(NSString*)identifier;
@end;
@interface IASKAppSettingsViewControllerEx : IASKAppSettingsViewController
@end
@implementation IASKAppSettingsViewControllerEx
- (UITableViewCell*)newCellForIdentifier:(NSString*)identifier {
UITableViewCell *cell = nil;
if ([identifier isEqualToString:kIASKPSToggleSwitchSpecifier]) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:kIASKPSToggleSwitchSpecifier];
cell.accessoryView = [[[IASKSwitchEx alloc] initWithFrame:CGRectMake(0, 0, 79, 27)] autorelease];
[((IASKSwitchEx*)cell.accessoryView) addTarget:self action:@selector(toggledValue:) forControlEvents:UIControlEventValueChanged];
[((IASKSwitchEx*)cell.accessoryView) setOnTintColor:LINPHONE_MAIN_COLOR];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
} else {
cell = [super newCellForIdentifier:identifier];
}
return cell;
}
- (void)initIASKAppSettingsViewControllerEx {
// Force kIASKSpecifierValuesViewControllerIndex
static int kIASKSpecifierValuesViewControllerIndex = 0;
_viewList = [[NSMutableArray alloc] init];
[_viewList addObject:[NSDictionary dictionaryWithObjectsAndKeys:@"IASKSpecifierValuesView", @"ViewName",nil]];
[_viewList addObject:[NSDictionary dictionaryWithObjectsAndKeys:@"IASKAppSettingsView", @"ViewName",nil]];
NSMutableDictionary *newItemDict = [NSMutableDictionary dictionaryWithCapacity:3];
[newItemDict addEntriesFromDictionary: [_viewList objectAtIndex:kIASKSpecifierValuesViewControllerIndex]]; // copy the title and explain strings
IASKSpecifierValuesViewController *targetViewController = [[IASKSpecifierValuesViewControllerEx alloc] init];
// add the new view controller to the dictionary and then to the 'viewList' array
[newItemDict setObject:targetViewController forKey:@"viewController"];
[_viewList replaceObjectAtIndex:kIASKSpecifierValuesViewControllerIndex withObject:newItemDict];
[targetViewController release];
}
- (id)initWithStyle:(UITableViewStyle)style {
self = [super initWithStyle:style];
if(self != nil) {
[self initIASKAppSettingsViewControllerEx];
}
return self;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell * cell = [super tableView:tableView cellForRowAtIndexPath:indexPath];
if([cell isKindOfClass:[IASKPSTextFieldSpecifierViewCell class]]) {
UITextField *field = ((IASKPSTextFieldSpecifierViewCell*)cell).textField;
[field setTextColor:LINPHONE_MAIN_COLOR];
}
cell.detailTextLabel.textColor = LINPHONE_MAIN_COLOR;
// Background View
UACellBackgroundView *selectedBackgroundView = [[[UACellBackgroundView alloc] initWithFrame:CGRectZero] autorelease];
cell.selectedBackgroundView = selectedBackgroundView;
[selectedBackgroundView setBackgroundColor:LINPHONE_TABLE_CELL_BACKGROUND_COLOR];
return cell;
}
@end
#pragma mark - UINavigationBarEx Class
@interface UINavigationBarEx: UINavigationBar {
}
@ -41,7 +159,7 @@ static void removeTableBackground(UIView* view) {
#pragma mark - Lifecycle Functions
- (void)initUINavigationBarEx {
[self setTintColor:LINPHONE_MAIN_COLOR];
[self setTintColor:[LINPHONE_MAIN_COLOR adjustHue:5.0f/180.0f saturation:0.0f brightness:0.0f alpha:0.0f]];
}
- (id)init {
@ -75,20 +193,33 @@ static void removeTableBackground(UIView* view) {
@end
#pragma mark - UINavigationControllerEx Class
@interface UINavigationControllerEx : UINavigationController
@end
@implementation UINavigationControllerEx
+ (void)removeTableBackground:(UIView*)view {
if([view isKindOfClass:[UITableView class]]) {
[view setBackgroundColor:[UIColor clearColor]];
}
for(UIView *subview in [view subviews]) {
[UINavigationControllerEx removeTableBackground:subview];
}
}
- (id)initWithRootViewController:(UIViewController *)rootViewController {
removeTableBackground(rootViewController.view);
[UINavigationControllerEx removeTableBackground:rootViewController.view];
return [super initWithRootViewController:rootViewController];
}
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated {
removeTableBackground(viewController.view);
[UINavigationControllerEx removeTableBackground:viewController.view];
[viewController viewWillAppear:FALSE]; // Force load: Load Title
UILabel *labelTitleView = [[UILabel alloc] init];
labelTitleView.backgroundColor = [UIColor clearColor];
labelTitleView.textColor = [UIColor colorWithRed:0x41/255.0f green:0x48/255.0f blue:0x4f/255.0f alpha:1.0];
@ -96,7 +227,7 @@ static void removeTableBackground(UIView* view) {
labelTitleView.font = [UIFont boldSystemFontOfSize:20];
labelTitleView.shadowOffset = CGSizeMake(0,1);
labelTitleView.textAlignment = UITextAlignmentCenter;
labelTitleView.text = viewController.navigationItem.title;
labelTitleView.text = viewController.title;
[labelTitleView sizeToFit];
viewController.navigationItem.titleView = labelTitleView;
@ -105,20 +236,21 @@ static void removeTableBackground(UIView* view) {
- (void)setViewControllers:(NSArray *)viewControllers {
for(UIViewController *controller in viewControllers) {
removeTableBackground(controller.view);
[UINavigationControllerEx removeTableBackground:controller.view];
}
[super setViewControllers:viewControllers];
}
- (void)setViewControllers:(NSArray *)viewControllers animated:(BOOL)animated {
for(UIViewController *controller in viewControllers) {
removeTableBackground(controller.view);
[UINavigationControllerEx removeTableBackground:controller.view];
}
[super setViewControllers:viewControllers animated:animated];
}
@end
@implementation SettingsViewController
@synthesize settingsController;
@ -170,7 +302,6 @@ static UICompositeViewDescription *compositeDescription = nil;
settingsController.settingsStore = [[LinphoneManager instance] settingsStore];
navigationController.view.frame = self.view.frame;
removeTableBackground(navigationController.view);
[navigationController pushViewController:settingsController animated:FALSE];
[self.view addSubview: navigationController.view];
}

View file

@ -51,7 +51,7 @@
<object class="IBUIViewController" id="73380722">
<bool key="IBUIAutoresizesArchivedViewToFullSize">NO</bool>
<object class="IBUINavigationItem" key="IBUINavigationItem" id="1014852814">
<string key="IBUITitle">Settings</string>
<string key="IBUITitle"/>
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
</object>
<object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics"/>
@ -81,7 +81,7 @@
<bool key="IBUIMultipleTouchEnabled">YES</bool>
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
</object>
<array key="IBUIViewControllers" id="0"/>
<array class="NSMutableArray" key="IBUIViewControllers"/>
</object>
</array>
<object class="IBObjectContainer" key="IBDocument.Objects">
@ -115,7 +115,7 @@
<array key="orderedObjects">
<object class="IBObjectRecord">
<int key="objectID">0</int>
<reference key="object" ref="0"/>
<array key="object" id="0"/>
<reference key="children" ref="1000"/>
<nil key="parent"/>
</object>
@ -179,7 +179,7 @@
<string key="11.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string key="14.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string key="4.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string key="6.CustomClassName">IASKAppSettingsViewController</string>
<string key="6.CustomClassName">IASKAppSettingsViewControllerEx</string>
<string key="6.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
</dictionary>
<dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
@ -209,6 +209,14 @@
<string key="minorKey">./Classes/IASKAppSettingsViewController.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">IASKAppSettingsViewControllerEx</string>
<string key="superclassName">IASKAppSettingsViewController</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">./Classes/IASKAppSettingsViewControllerEx.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">SettingsViewController</string>
<string key="superclassName">UIViewController</string>

View file

@ -0,0 +1,33 @@
//
// DCRoundSwitch.h
//
// Created by Patrick Richards on 28/06/11.
// MIT License.
//
// http://twitter.com/patr
// http://domesticcat.com.au/projects
// http://github.com/domesticcatsoftware/DCRoundSwitch
//
#import <UIKit/UIKit.h>
#import <QuartzCore/QuartzCore.h>
@class DCRoundSwitchToggleLayer;
@class DCRoundSwitchOutlineLayer;
@class DCRoundSwitchKnobLayer;
@interface DCRoundSwitch : UIControl
@property (nonatomic, retain) UIColor *onTintColor; // default: blue (matches normal UISwitch)
@property (nonatomic, getter=isOn) BOOL on; // default: NO
@property (nonatomic, copy) NSString *onText; // default: 'ON' - automatically localized
@property (nonatomic, copy) NSString *offText; // default: 'OFF' - automatically localized
+ (Class)knobLayerClass;
+ (Class)outlineLayerClass;
+ (Class)toggleLayerClass;
- (void)setOn:(BOOL)newOn animated:(BOOL)animated;
- (void)setOn:(BOOL)newOn animated:(BOOL)animated ignoreControlEvents:(BOOL)ignoreControlEvents;
@end

View file

@ -0,0 +1,468 @@
//
// DCRoundSwitch.m
//
// Created by Patrick Richards on 28/06/11.
// MIT License.
//
// http://twitter.com/patr
// http://domesticcat.com.au/projects
// http://github.com/domesticcatsoftware/DCRoundSwitch
//
#import "DCRoundSwitch.h"
#import "DCRoundSwitchToggleLayer.h"
#import "DCRoundSwitchOutlineLayer.h"
#import "DCRoundSwitchKnobLayer.h"
@interface DCRoundSwitch () <UIGestureRecognizerDelegate>
@property (nonatomic, retain) DCRoundSwitchOutlineLayer *outlineLayer;
@property (nonatomic, retain) DCRoundSwitchToggleLayer *toggleLayer;
@property (nonatomic, retain) DCRoundSwitchKnobLayer *knobLayer;
@property (nonatomic, retain) CAShapeLayer *clipLayer;
@property (nonatomic, assign) BOOL ignoreTap;
- (void)setup;
- (void)useLayerMasking;
- (void)removeLayerMask;
- (void)positionLayersAndMask;
@end
@implementation DCRoundSwitch
@synthesize outlineLayer, toggleLayer, knobLayer, clipLayer, ignoreTap;
@synthesize on, onText, offText;
@synthesize onTintColor;
#pragma mark -
#pragma mark Init & Memory Managment
- (void)dealloc
{
[outlineLayer release];
[toggleLayer release];
[knobLayer release];
[clipLayer release];
[onTintColor release];
[onText release];
[offText release];
[super dealloc];
}
- (id)init
{
if ((self = [super init]))
{
self.frame = CGRectMake(0, 0, 77, 27);
[self setup];
}
return self;
}
- (id)initWithCoder:(NSCoder *)aDecoder
{
if ((self = [super initWithCoder:aDecoder]))
{
[self setup];
}
return self;
}
- (id)initWithFrame:(CGRect)frame
{
if ((self = [super initWithFrame:frame]))
{
[self setup];
}
return self;
}
+ (Class)knobLayerClass {
return [DCRoundSwitchKnobLayer class];
}
+ (Class)outlineLayerClass {
return [DCRoundSwitchOutlineLayer class];
}
+ (Class)toggleLayerClass {
return [DCRoundSwitchToggleLayer class];
}
- (void)setup
{
// this way you can set the background color to black or something similar so it can be seen in IB
self.backgroundColor = [UIColor clearColor];
// remove the flexible width/height autoresizing masks if they have been set
UIViewAutoresizing mask = (int)self.autoresizingMask;
if (mask & UIViewAutoresizingFlexibleHeight)
self.autoresizingMask ^= UIViewAutoresizingFlexibleHeight;
if (mask & UIViewAutoresizingFlexibleWidth)
self.autoresizingMask ^= UIViewAutoresizingFlexibleWidth;
// setup default texts
NSBundle *uiKitBundle = [NSBundle bundleWithIdentifier:@"com.apple.UIKit"];
self.onText = uiKitBundle ? [uiKitBundle localizedStringForKey:@"ON" value:nil table:nil] : @"ON";
self.offText = uiKitBundle ? [uiKitBundle localizedStringForKey:@"OFF" value:nil table:nil] : @"OFF";
// the switch has three layers, (ordered from bottom to top):
//
// * toggleLayer * (bottom of the layer stack)
// this layer contains the onTintColor (blue by default), the text, and the shadown for the knob. the knob shadow is
// on this layer because it needs to go under the outlineLayer so it doesn't bleed out over the edge of the control.
// this layer moves when the switch moves
// * outlineLayer * (middle of the layer stack)
// this is the outline of the control, it's inner shadow, and the inner gloss. the inner shadow is on this layer
// because it must stay still while the switch animates. the inner gloss is also here because it doesn't move, and also
// because it needs to go uner the knobLayer.
// this layer appears to always stay in the same spot.
// * knobLayer * (top of the layer stack)
// this is the knob, and sits on top of the layer stack. note that the knob shadow is NOT drawn here, it is drawn on the
// toggleLayer so it doesn't bleed out over the outlineLayer.
self.toggleLayer = [[[[[self class] toggleLayerClass] alloc] initWithOnString:self.onText offString:self.offText onTintColor:[UIColor colorWithRed:0.000 green:0.478 blue:0.882 alpha:1.0]] autorelease];
self.toggleLayer.drawOnTint = NO;
self.toggleLayer.clip = YES;
[self.layer addSublayer:self.toggleLayer];
[self.toggleLayer setNeedsDisplay];
self.outlineLayer = [[[self class] outlineLayerClass] layer];
[self.toggleLayer addSublayer:self.outlineLayer];
[self.outlineLayer setNeedsDisplay];
self.knobLayer = [[[self class] knobLayerClass] layer];
[self.layer addSublayer:self.knobLayer];
[self.knobLayer setNeedsDisplay];
self.toggleLayer.contentsScale = self.outlineLayer.contentsScale = self.knobLayer.contentsScale = [[UIScreen mainScreen] scale];
// tap gesture for toggling the switch
UITapGestureRecognizer *tapGestureRecognizer = [[[UITapGestureRecognizer alloc] initWithTarget:self
action:@selector(tapped:)] autorelease];
[tapGestureRecognizer setDelegate:self];
[self addGestureRecognizer:tapGestureRecognizer];
// pan gesture for moving the switch knob manually
UIPanGestureRecognizer *panGestureRecognizer = [[[UIPanGestureRecognizer alloc] initWithTarget:self
action:@selector(toggleDragged:)] autorelease];
[panGestureRecognizer setDelegate:self];
[self addGestureRecognizer:panGestureRecognizer];
[self setNeedsLayout];
// setup the layer positions
[self positionLayersAndMask];
}
#pragma mark -
#pragma mark Setup Frame/Layout
- (void)sizeToFit
{
[super sizeToFit];
NSString *onString = self.toggleLayer.onString;
NSString *offString = self.toggleLayer.offString;
CGFloat width = [onString sizeWithFont:self.toggleLayer.labelFont].width;
CGFloat offWidth = [offString sizeWithFont:self.toggleLayer.labelFont].width;
if(offWidth > width)
width = offWidth;
width += self.toggleLayer.bounds.size.width * 2.;//add 2x the knob for padding
CGRect newFrame = self.frame;
CGFloat currentWidth = newFrame.size.width;
newFrame.size.width = width;
newFrame.origin.x += currentWidth - width;
self.frame = newFrame;
//old values for sizeToFit; keep these around for reference
// newFrame.size.width = 77.0;
// newFrame.size.height = 27.0;
}
- (void)useLayerMasking
{
// turn of the manual clipping (done in toggleLayer's drawInContext:)
self.toggleLayer.clip = NO;
self.toggleLayer.drawOnTint = YES;
[self.toggleLayer setNeedsDisplay];
// create the layer mask and add that to the toggleLayer
self.clipLayer = [CAShapeLayer layer];
UIBezierPath *clipPath = [UIBezierPath bezierPathWithRoundedRect:self.bounds
cornerRadius:self.bounds.size.height / 2.0];
self.clipLayer.path = clipPath.CGPath;
self.toggleLayer.mask = self.clipLayer;
}
- (void)removeLayerMask
{
// turn off the animations so the user doesn't see the changing of mask/clipping
[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];
// remove the layer mask (put on in useLayerMasking)
self.toggleLayer.mask = nil;
// renable manual clipping (done in toggleLayer's drawInContext:)
self.toggleLayer.clip = YES;
self.toggleLayer.drawOnTint = self.on;
[self.toggleLayer setNeedsDisplay];
}
- (void)positionLayersAndMask
{
// repositions the underlying toggle and the layer mask, plus the knob
self.toggleLayer.mask.position = CGPointMake(-self.toggleLayer.frame.origin.x, 0.0);
self.outlineLayer.frame = CGRectMake(-self.toggleLayer.frame.origin.x, 0, self.bounds.size.width, self.bounds.size.height);
self.knobLayer.frame = CGRectMake(self.toggleLayer.frame.origin.x + self.toggleLayer.frame.size.width / 2.0 - self.knobLayer.frame.size.width / 2.0,
-1,
self.knobLayer.frame.size.width,
self.knobLayer.frame.size.height);
}
#pragma mark -
#pragma mark Interaction
- (void)tapped:(UITapGestureRecognizer *)gesture
{
if (self.ignoreTap) return;
if (gesture.state == UIGestureRecognizerStateEnded)
[self setOn:!self.on animated:YES];
}
- (void)toggleDragged:(UIPanGestureRecognizer *)gesture
{
CGFloat minToggleX = -self.toggleLayer.frame.size.width / 2.0 + self.toggleLayer.frame.size.height / 2.0;
CGFloat maxToggleX = -1;
if (gesture.state == UIGestureRecognizerStateBegan)
{
// setup by turning off the manual clipping of the toggleLayer and setting up a layer mask.
[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];
[self useLayerMasking];
[self positionLayersAndMask];
self.knobLayer.gripped = YES;
}
else if (gesture.state == UIGestureRecognizerStateChanged)
{
CGPoint translation = [gesture translationInView:self];
// disable the animations before moving the layers
[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];
// darken the knob
if (!self.knobLayer.gripped)
self.knobLayer.gripped = YES;
// move the toggleLayer using the translation of the gesture, keeping it inside the outline.
CGFloat newX = self.toggleLayer.frame.origin.x + translation.x;
if (newX < minToggleX) newX = minToggleX;
if (newX > maxToggleX) newX = maxToggleX;
self.toggleLayer.frame = CGRectMake(newX,
self.toggleLayer.frame.origin.y,
self.toggleLayer.frame.size.width,
self.toggleLayer.frame.size.height);
// this will re-position the layer mask and knob
[self positionLayersAndMask];
[gesture setTranslation:CGPointZero inView:self];
}
else if (gesture.state == UIGestureRecognizerStateEnded)
{
// flip the switch to on or off depending on which half it ends at
CGFloat toggleCenter = CGRectGetMidX(self.toggleLayer.frame);
[self setOn:(toggleCenter > CGRectGetMidX(self.bounds)) animated:YES];
}
// send off the appropriate actions (not fully tested yet)
CGPoint locationOfTouch = [gesture locationInView:self];
if (CGRectContainsPoint(self.bounds, locationOfTouch))
[self sendActionsForControlEvents:UIControlEventTouchDragInside];
else
[self sendActionsForControlEvents:UIControlEventTouchDragOutside];
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
if (self.ignoreTap) return;
[super touchesBegan:touches withEvent:event];
self.knobLayer.gripped = YES;
[self sendActionsForControlEvents:UIControlEventTouchDown];
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
[super touchesEnded:touches withEvent:event];
[self sendActionsForControlEvents:UIControlEventTouchUpInside];
}
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
{
[super touchesCancelled:touches withEvent:event];
[self sendActionsForControlEvents:UIControlEventTouchUpOutside];
}
#pragma mark UIGestureRecognizerDelegate
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer;
{
return !self.ignoreTap;
}
#pragma mark Setters/Getters
- (void)setOn:(BOOL)newOn
{
[self setOn:newOn animated:NO];
}
- (void)setOn:(BOOL)newOn animated:(BOOL)animated
{
[self setOn:newOn animated:animated ignoreControlEvents:NO];
}
- (void)setOn:(BOOL)newOn animated:(BOOL)animated ignoreControlEvents:(BOOL)ignoreControlEvents
{
BOOL previousOn = self.on;
on = newOn;
self.ignoreTap = YES;
[CATransaction setAnimationDuration:0.014];
self.knobLayer.gripped = YES;
// setup by turning off the manual clipping of the toggleLayer and setting up a layer mask.
[self useLayerMasking];
[self positionLayersAndMask];
// retain all our targets so they don't disappear before the actions get sent at the end of the animation
[[self allTargets] makeObjectsPerformSelector:@selector(retain)];
[CATransaction setCompletionBlock:^{
[CATransaction begin];
if (!animated)
[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];
else
[CATransaction setValue:(id)kCFBooleanFalse forKey:kCATransactionDisableActions];
CGFloat minToggleX = -self.toggleLayer.frame.size.width / 2.0 + self.toggleLayer.frame.size.height / 2.0;
CGFloat maxToggleX = -1;
if (self.on)
{
self.toggleLayer.frame = CGRectMake(maxToggleX,
self.toggleLayer.frame.origin.y,
self.toggleLayer.frame.size.width,
self.toggleLayer.frame.size.height);
}
else
{
self.toggleLayer.frame = CGRectMake(minToggleX,
self.toggleLayer.frame.origin.y,
self.toggleLayer.frame.size.width,
self.toggleLayer.frame.size.height);
}
if (!self.toggleLayer.mask)
{
[self useLayerMasking];
[self.toggleLayer setNeedsDisplay];
}
[self positionLayersAndMask];
self.knobLayer.gripped = NO;
[CATransaction setCompletionBlock:^{
[self removeLayerMask];
self.ignoreTap = NO;
// send the action here so it get's sent at the end of the animations
if (previousOn != on && !ignoreControlEvents)
[self sendActionsForControlEvents:UIControlEventValueChanged];
[[self allTargets] makeObjectsPerformSelector:@selector(release)];
}];
[CATransaction commit];
}];
}
- (void)setOnTintColor:(UIColor *)anOnTintColor
{
if (anOnTintColor != onTintColor)
{
[onTintColor release];
onTintColor = [anOnTintColor retain];
self.toggleLayer.onTintColor = anOnTintColor;
[self.toggleLayer setNeedsDisplay];
}
}
- (void)layoutSubviews;
{
CGFloat knobRadius = self.bounds.size.height + 2.0;
self.knobLayer.frame = CGRectMake(0, 0, knobRadius, knobRadius);
CGSize toggleSize = CGSizeMake(self.bounds.size.width * 2 - (knobRadius - 4), self.bounds.size.height);
CGFloat minToggleX = -toggleSize.width / 2.0 + knobRadius / 2.0 - 1;
CGFloat maxToggleX = -1;
if (self.on)
{
self.toggleLayer.frame = CGRectMake(maxToggleX,
self.toggleLayer.frame.origin.y,
toggleSize.width,
toggleSize.height);
}
else
{
self.toggleLayer.frame = CGRectMake(minToggleX,
self.toggleLayer.frame.origin.y,
toggleSize.width,
toggleSize.height);
}
[self positionLayersAndMask];
}
- (void)setOnText:(NSString *)newOnText
{
if (newOnText != onText)
{
[onText release];
onText = [newOnText copy];
self.toggleLayer.onString = onText;
[self.toggleLayer setNeedsDisplay];
}
}
- (void)setOffText:(NSString *)newOffText
{
if (newOffText != offText)
{
[offText release];
offText = [newOffText copy];
self.toggleLayer.offString = offText;
[self.toggleLayer setNeedsDisplay];
}
}
@end

View file

@ -0,0 +1,18 @@
//
// DCRoundSwitchKnobLayer.h
//
// Created by Patrick Richards on 29/06/11.
// MIT License.
//
// http://twitter.com/patr
// http://domesticcat.com.au/projects
// http://github.com/domesticcatsoftware/DCRoundSwitch
//
#import <QuartzCore/QuartzCore.h>
@interface DCRoundSwitchKnobLayer : CALayer
@property (nonatomic) BOOL gripped;
@end

View file

@ -0,0 +1,69 @@
//
// DCRoundSwitchKnobLayer.m
//
// Created by Patrick Richards on 29/06/11.
// MIT License.
//
// http://twitter.com/patr
// http://domesticcat.com.au/projects
// http://github.com/domesticcatsoftware/DCRoundSwitch
//
#import "DCRoundSwitchKnobLayer.h"
CGGradientRef CreateGradientRefWithColors(CGColorSpaceRef colorSpace, CGColorRef startColor, CGColorRef endColor);
@implementation DCRoundSwitchKnobLayer
@synthesize gripped;
- (void)drawInContext:(CGContextRef)context
{
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();
CGRect knobRect = CGRectInset(self.bounds, 2, 2);
CGFloat knobRadius = self.bounds.size.height - 2;
// knob outline (shadow is drawn in the toggle layer)
CGContextSetStrokeColorWithColor(context, [UIColor colorWithWhite:0.62 alpha:1.0].CGColor);
CGContextSetLineWidth(context, 1.5);
CGContextStrokeEllipseInRect(context, knobRect);
CGContextSetShadowWithColor(context, CGSizeMake(0, 0), 0, NULL);
// knob inner gradient
CGContextAddEllipseInRect(context, knobRect);
CGContextClip(context);
CGColorRef knobStartColor = [UIColor colorWithWhite:0.82 alpha:1.0].CGColor;
CGColorRef knobEndColor = (self.gripped) ? [UIColor colorWithWhite:0.894 alpha:1.0].CGColor : [UIColor colorWithWhite:0.996 alpha:1.0].CGColor;
CGPoint topPoint = CGPointMake(0, 0);
CGPoint bottomPoint = CGPointMake(0, knobRadius + 2);
CGGradientRef knobGradient = CreateGradientRefWithColors(colorSpace, knobStartColor, knobEndColor);
CGContextDrawLinearGradient(context, knobGradient, topPoint, bottomPoint, 0);
CGGradientRelease(knobGradient);
// knob inner highlight
CGContextAddEllipseInRect(context, CGRectInset(knobRect, 0.5, 0.5));
CGContextAddEllipseInRect(context, CGRectInset(knobRect, 1.5, 1.5));
CGContextEOClip(context);
CGGradientRef knobHighlightGradient = CreateGradientRefWithColors(colorSpace, [UIColor whiteColor].CGColor, [UIColor colorWithWhite:1.0 alpha:0.5].CGColor);
CGContextDrawLinearGradient(context, knobHighlightGradient, topPoint, bottomPoint, 0);
CGGradientRelease(knobHighlightGradient);
CGColorSpaceRelease(colorSpace);
}
CGGradientRef CreateGradientRefWithColors(CGColorSpaceRef colorSpace, CGColorRef startColor, CGColorRef endColor)
{
CGFloat colorStops[2] = {0.0, 1.0};
CGColorRef colors[] = {startColor, endColor};
CFArrayRef colorsArray = CFArrayCreate(NULL, (const void**)colors, sizeof(colors) / sizeof(CGColorRef), &kCFTypeArrayCallBacks);
CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, colorsArray, colorStops);
CFRelease(colorsArray);
return gradient;
}
- (void)setGripped:(BOOL)newGripped
{
gripped = newGripped;
[self setNeedsDisplay];
}
@end

View file

@ -0,0 +1,16 @@
//
// DCRoundSwitchOutlineLayer.h
//
// Created by Patrick Richards on 29/06/11.
// MIT License.
//
// http://twitter.com/patr
// http://domesticcat.com.au/projects
// http://github.com/domesticcatsoftware/DCRoundSwitch
//
#import <QuartzCore/QuartzCore.h>
@interface DCRoundSwitchOutlineLayer : CALayer
@end

View file

@ -0,0 +1,66 @@
//
// DCRoundSwitchOutlineLayer.m
//
// Created by Patrick Richards on 29/06/11.
// MIT License.
//
// http://twitter.com/patr
// http://domesticcat.com.au/projects
// http://github.com/domesticcatsoftware/DCRoundSwitch
//
#import "DCRoundSwitchOutlineLayer.h"
@implementation DCRoundSwitchOutlineLayer
- (void)drawInContext:(CGContextRef)context
{
// calculate the outline clip
CGContextSaveGState(context);
UIBezierPath *switchOutline = [UIBezierPath bezierPathWithRoundedRect:self.bounds cornerRadius:self.bounds.size.height / 2.0];
CGContextAddPath(context, switchOutline.CGPath);
CGContextClip(context);
// inner gloss
CGContextSaveGState(context);
CGRect innerGlossPathRect = CGRectMake(self.frame.size.width * 0.05,
self.frame.size.height / 2.0,
self.bounds.size.width - (self.frame.size.width * 0.1),
self.bounds.size.height / 2.0);
UIBezierPath *innerGlossPath = [UIBezierPath bezierPathWithRoundedRect:innerGlossPathRect
byRoundingCorners:UIRectCornerTopLeft | UIRectCornerTopRight
cornerRadii:CGSizeMake(self.bounds.size.height * 0.3, self.bounds.size.height * 0.3)];
CGContextAddPath(context, innerGlossPath.CGPath);
CGContextClip(context);
CGFloat colorStops[2] = {0.0, 1.0};
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGFloat innerGlossStartColorComponents[] = {1.0, 1.0, 1.0, 0.14};
CGFloat innerGlossEndColorComponents[] = {1.0, 1.0, 1.0, 0.50};
CGColorRef topColor = CGColorCreate(colorSpace, innerGlossStartColorComponents);
CGColorRef bottomColor = CGColorCreate(colorSpace, innerGlossEndColorComponents);
CGColorRef colors[] = { topColor, bottomColor };
CFArrayRef colorsArray = CFArrayCreate(NULL, (const void**)colors, sizeof(colors) / sizeof(CGColorRef), &kCFTypeArrayCallBacks);
CGGradientRef innerGlossGradient = CGGradientCreateWithColors(colorSpace, colorsArray, colorStops);
CFRelease(colorsArray);
CGContextDrawLinearGradient(context, innerGlossGradient, CGPointMake(0, CGRectGetMinY(innerGlossPathRect)), CGPointMake(0, CGRectGetMaxY(innerGlossPathRect)), 0);
CGContextRestoreGState(context);
CGColorSpaceRelease(colorSpace);
CGColorRelease(topColor);
CGColorRelease(bottomColor);
CGGradientRelease(innerGlossGradient);
// outline and inner shadow
CGContextSetShadowWithColor(context, CGSizeMake(0.0, 1), 2.0, [UIColor colorWithRed:0.1 green:0.1 blue:0.1 alpha:1.0].CGColor);
CGContextSetLineWidth(context, 0.5);
UIBezierPath *outlinePath = [UIBezierPath bezierPathWithRoundedRect:CGRectOffset(self.bounds, -0.5, 0.0) cornerRadius:self.bounds.size.height / 2.0];
CGContextAddPath(context, outlinePath.CGPath);
CGContextSetStrokeColorWithColor(context, [UIColor colorWithWhite:0.60 alpha:1.0].CGColor);
CGContextStrokePath(context);
CGContextAddPath(context, outlinePath.CGPath);
CGContextStrokePath(context);
}
@end

View file

@ -0,0 +1,26 @@
//
// DCRoundSwitchToggleLayer.h
//
// Created by Patrick Richards on 29/06/11.
// MIT License.
//
// http://twitter.com/patr
// http://domesticcat.com.au/projects
// http://github.com/domesticcatsoftware/DCRoundSwitch
//
#import <Foundation/Foundation.h>
#import <QuartzCore/QuartzCore.h>
@interface DCRoundSwitchToggleLayer : CALayer
@property (nonatomic, retain) UIColor *onTintColor;
@property (nonatomic, retain) NSString *onString;
@property (nonatomic, retain) NSString *offString;
@property (nonatomic, readonly) UIFont *labelFont;
@property (nonatomic) BOOL drawOnTint;
@property (nonatomic) BOOL clip;
- (id)initWithOnString:(NSString *)anOnString offString:(NSString *)anOffString onTintColor:(UIColor *)anOnTintColor;
@end

View file

@ -0,0 +1,102 @@
//
// DCRoundSwitchToggleLayer.m
//
// Created by Patrick Richards on 29/06/11.
// MIT License.
//
// http://twitter.com/patr
// http://domesticcat.com.au/projects
// http://github.com/domesticcatsoftware/DCRoundSwitch
//
#import "DCRoundSwitchToggleLayer.h"
@implementation DCRoundSwitchToggleLayer
@synthesize onString, offString, onTintColor;
@synthesize drawOnTint;
@synthesize clip;
@synthesize labelFont;
- (void)dealloc
{
[onString release];
[offString release];
[onTintColor release];
[super dealloc];
}
- (id)initWithOnString:(NSString *)anOnString offString:(NSString *)anOffString onTintColor:(UIColor *)anOnTintColor
{
if ((self = [super init]))
{
self.onString = anOnString;
self.offString = anOffString;
self.onTintColor = anOnTintColor;
}
return self;
}
- (UIFont *)labelFont
{
return [UIFont boldSystemFontOfSize:ceilf(self.bounds.size.height * .6)];
}
- (void)drawInContext:(CGContextRef)context
{
CGFloat knobRadius = self.bounds.size.height - 2.0;
CGFloat knobCenter = self.bounds.size.width / 2.0;
CGRect knobRect = CGRectMake(knobCenter - knobRadius / 2.0, 1.0, knobRadius, knobRadius);
if (self.clip)
{
UIBezierPath *bezierPath = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(-self.frame.origin.x + 0.5, 0, self.bounds.size.width / 2.0 + self.bounds.size.height / 2.0 - 1.5, self.bounds.size.height) cornerRadius:self.bounds.size.height / 2.0];
CGContextAddPath(context, bezierPath.CGPath);
CGContextClip(context);
}
// on tint color
if (self.drawOnTint)
{
CGContextSetFillColorWithColor(context, self.onTintColor.CGColor);
CGContextFillRect(context, CGRectMake(0, 0, knobCenter, self.bounds.size.height));
}
// off tint color (white)
CGContextSetFillColorWithColor(context, [UIColor colorWithWhite:0.963 alpha:1.0].CGColor);
CGContextFillRect(context, CGRectMake(knobCenter, 0, self.bounds.size.width - knobCenter, self.bounds.size.height));
// knob shadow
CGContextSetShadowWithColor(context, CGSizeMake(0, 0), 1.5, [UIColor colorWithWhite:0.2 alpha:1.0].CGColor);
CGContextSetStrokeColorWithColor(context, [UIColor colorWithWhite:0.42 alpha:1.0].CGColor);
CGContextSetLineWidth(context, 1.0);
CGContextStrokeEllipseInRect(context, knobRect);
CGContextSetShadowWithColor(context, CGSizeMake(0, 0), 0, NULL);
// strings
CGFloat textSpaceWidth = (self.bounds.size.width / 2) - (knobRadius / 2);
UIGraphicsPushContext(context);
// 'ON' state label (self.onString)
CGSize onTextSize = [self.onString sizeWithFont:self.labelFont];
CGPoint onTextPoint = CGPointMake((textSpaceWidth - onTextSize.width) / 2.0 + knobRadius * .15, floorf((self.bounds.size.height - onTextSize.height) / 2.0) + 1.0);
[[UIColor colorWithWhite:0.45 alpha:1.0] set]; // .2 & .4
[self.onString drawAtPoint:CGPointMake(onTextPoint.x, onTextPoint.y - 1.0) withFont:self.labelFont];
[[UIColor whiteColor] set];
[self.onString drawAtPoint:onTextPoint withFont:self.labelFont];
// 'OFF' state label (self.offString)
CGSize offTextSize = [self.offString sizeWithFont:self.labelFont];
CGPoint offTextPoint = CGPointMake(textSpaceWidth + (textSpaceWidth - offTextSize.width) / 2.0 + knobRadius * .86, floorf((self.bounds.size.height - offTextSize.height) / 2.0) + 1.0);
[[UIColor whiteColor] set];
[self.offString drawAtPoint:CGPointMake(offTextPoint.x, offTextPoint.y + 1.0) withFont:self.labelFont];
[[UIColor colorWithWhite:0.52 alpha:1.0] set];
[self.offString drawAtPoint:offTextPoint withFont:self.labelFont];
UIGraphicsPopContext();
}
@end

View file

@ -604,36 +604,46 @@
D37C639C15AADEF6009D0BAC /* ContactDetailsTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D37C639A15AADEF5009D0BAC /* ContactDetailsTableViewController.m */; };
D37DC6C11594AE1800B2A5EB /* LinphoneCoreSettingsStore.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6C01594AE1800B2A5EB /* LinphoneCoreSettingsStore.m */; };
D37DC6C21594AE1800B2A5EB /* LinphoneCoreSettingsStore.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6C01594AE1800B2A5EB /* LinphoneCoreSettingsStore.m */; };
D37DC6ED1594AE6F00B2A5EB /* IASKAppSettingsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6C61594AE6F00B2A5EB /* IASKAppSettingsViewController.m */; };
D37DC6EE1594AE6F00B2A5EB /* IASKAppSettingsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6C61594AE6F00B2A5EB /* IASKAppSettingsViewController.m */; };
D37DC6EF1594AE6F00B2A5EB /* IASKAppSettingsWebViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6C81594AE6F00B2A5EB /* IASKAppSettingsWebViewController.m */; };
D37DC6F01594AE6F00B2A5EB /* IASKAppSettingsWebViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6C81594AE6F00B2A5EB /* IASKAppSettingsWebViewController.m */; };
D37DC6F11594AE6F00B2A5EB /* IASKSpecifierValuesViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6CA1594AE6F00B2A5EB /* IASKSpecifierValuesViewController.m */; };
D37DC6F21594AE6F00B2A5EB /* IASKSpecifierValuesViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6CA1594AE6F00B2A5EB /* IASKSpecifierValuesViewController.m */; };
D37DC6F31594AE6F00B2A5EB /* IASKSettingsReader.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6CE1594AE6F00B2A5EB /* IASKSettingsReader.m */; };
D37DC6F41594AE6F00B2A5EB /* IASKSettingsReader.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6CE1594AE6F00B2A5EB /* IASKSettingsReader.m */; };
D37DC6F51594AE6F00B2A5EB /* IASKSettingsStore.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6D01594AE6F00B2A5EB /* IASKSettingsStore.m */; };
D37DC6F61594AE6F00B2A5EB /* IASKSettingsStore.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6D01594AE6F00B2A5EB /* IASKSettingsStore.m */; };
D37DC6F71594AE6F00B2A5EB /* IASKSettingsStoreFile.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6D21594AE6F00B2A5EB /* IASKSettingsStoreFile.m */; };
D37DC6F81594AE6F00B2A5EB /* IASKSettingsStoreFile.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6D21594AE6F00B2A5EB /* IASKSettingsStoreFile.m */; };
D37DC6F91594AE6F00B2A5EB /* IASKSettingsStoreUserDefaults.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6D41594AE6F00B2A5EB /* IASKSettingsStoreUserDefaults.m */; };
D37DC6FA1594AE6F00B2A5EB /* IASKSettingsStoreUserDefaults.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6D41594AE6F00B2A5EB /* IASKSettingsStoreUserDefaults.m */; };
D37DC6FB1594AE6F00B2A5EB /* IASKSpecifier.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6D61594AE6F00B2A5EB /* IASKSpecifier.m */; };
D37DC6FC1594AE6F00B2A5EB /* IASKSpecifier.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6D61594AE6F00B2A5EB /* IASKSpecifier.m */; };
D37DC6FD1594AE6F00B2A5EB /* IASKPSSliderSpecifierViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6D91594AE6F00B2A5EB /* IASKPSSliderSpecifierViewCell.m */; };
D37DC6FE1594AE6F00B2A5EB /* IASKPSSliderSpecifierViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6D91594AE6F00B2A5EB /* IASKPSSliderSpecifierViewCell.m */; };
D37DC6FF1594AE6F00B2A5EB /* IASKPSTextFieldSpecifierViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6DB1594AE6F00B2A5EB /* IASKPSTextFieldSpecifierViewCell.m */; };
D37DC7001594AE6F00B2A5EB /* IASKPSTextFieldSpecifierViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6DB1594AE6F00B2A5EB /* IASKPSTextFieldSpecifierViewCell.m */; };
D37DC7011594AE6F00B2A5EB /* IASKPSTitleValueSpecifierViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6DD1594AE6F00B2A5EB /* IASKPSTitleValueSpecifierViewCell.m */; };
D37DC7021594AE6F00B2A5EB /* IASKPSTitleValueSpecifierViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6DD1594AE6F00B2A5EB /* IASKPSTitleValueSpecifierViewCell.m */; };
D37DC7051594AE6F00B2A5EB /* IASKSlider.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6E11594AE6F00B2A5EB /* IASKSlider.m */; };
D37DC7061594AE6F00B2A5EB /* IASKSlider.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6E11594AE6F00B2A5EB /* IASKSlider.m */; };
D37DC7071594AE6F00B2A5EB /* IASKSwitch.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6E31594AE6F00B2A5EB /* IASKSwitch.m */; };
D37DC7081594AE6F00B2A5EB /* IASKSwitch.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6E31594AE6F00B2A5EB /* IASKSwitch.m */; };
D37DC7091594AE6F00B2A5EB /* IASKTextField.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6E51594AE6F00B2A5EB /* IASKTextField.m */; };
D37DC70A1594AE6F00B2A5EB /* IASKTextField.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6E51594AE6F00B2A5EB /* IASKTextField.m */; };
D37DC7181594AF3400B2A5EB /* MessageUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D37DC7171594AF3400B2A5EB /* MessageUI.framework */; };
D37DC7191594AF3F00B2A5EB /* MessageUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D37DC7171594AF3400B2A5EB /* MessageUI.framework */; };
D3807FBF15C28940005BE9BC /* DCRoundSwitch.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FB815C28940005BE9BC /* DCRoundSwitch.m */; };
D3807FC015C28940005BE9BC /* DCRoundSwitch.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FB815C28940005BE9BC /* DCRoundSwitch.m */; };
D3807FC115C28940005BE9BC /* DCRoundSwitchKnobLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FBA15C28940005BE9BC /* DCRoundSwitchKnobLayer.m */; };
D3807FC215C28940005BE9BC /* DCRoundSwitchKnobLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FBA15C28940005BE9BC /* DCRoundSwitchKnobLayer.m */; };
D3807FC315C28940005BE9BC /* DCRoundSwitchOutlineLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FBC15C28940005BE9BC /* DCRoundSwitchOutlineLayer.m */; };
D3807FC415C28940005BE9BC /* DCRoundSwitchOutlineLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FBC15C28940005BE9BC /* DCRoundSwitchOutlineLayer.m */; };
D3807FC515C28940005BE9BC /* DCRoundSwitchToggleLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FBE15C28940005BE9BC /* DCRoundSwitchToggleLayer.m */; };
D3807FC615C28940005BE9BC /* DCRoundSwitchToggleLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FBE15C28940005BE9BC /* DCRoundSwitchToggleLayer.m */; };
D3807FE815C2894A005BE9BC /* IASKAppSettingsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FCA15C2894A005BE9BC /* IASKAppSettingsViewController.m */; };
D3807FE915C2894A005BE9BC /* IASKAppSettingsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FCA15C2894A005BE9BC /* IASKAppSettingsViewController.m */; };
D3807FEA15C2894A005BE9BC /* IASKAppSettingsWebViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FCC15C2894A005BE9BC /* IASKAppSettingsWebViewController.m */; };
D3807FEB15C2894A005BE9BC /* IASKAppSettingsWebViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FCC15C2894A005BE9BC /* IASKAppSettingsWebViewController.m */; };
D3807FEC15C2894A005BE9BC /* IASKSpecifierValuesViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FCE15C2894A005BE9BC /* IASKSpecifierValuesViewController.m */; };
D3807FED15C2894A005BE9BC /* IASKSpecifierValuesViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FCE15C2894A005BE9BC /* IASKSpecifierValuesViewController.m */; };
D3807FEE15C2894A005BE9BC /* IASKSettingsReader.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FD215C2894A005BE9BC /* IASKSettingsReader.m */; };
D3807FEF15C2894A005BE9BC /* IASKSettingsReader.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FD215C2894A005BE9BC /* IASKSettingsReader.m */; };
D3807FF015C2894A005BE9BC /* IASKSettingsStore.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FD415C2894A005BE9BC /* IASKSettingsStore.m */; };
D3807FF115C2894A005BE9BC /* IASKSettingsStore.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FD415C2894A005BE9BC /* IASKSettingsStore.m */; };
D3807FF215C2894A005BE9BC /* IASKSettingsStoreFile.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FD615C2894A005BE9BC /* IASKSettingsStoreFile.m */; };
D3807FF315C2894A005BE9BC /* IASKSettingsStoreFile.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FD615C2894A005BE9BC /* IASKSettingsStoreFile.m */; };
D3807FF415C2894A005BE9BC /* IASKSettingsStoreUserDefaults.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FD815C2894A005BE9BC /* IASKSettingsStoreUserDefaults.m */; };
D3807FF515C2894A005BE9BC /* IASKSettingsStoreUserDefaults.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FD815C2894A005BE9BC /* IASKSettingsStoreUserDefaults.m */; };
D3807FF615C2894A005BE9BC /* IASKSpecifier.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FDA15C2894A005BE9BC /* IASKSpecifier.m */; };
D3807FF715C2894A005BE9BC /* IASKSpecifier.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FDA15C2894A005BE9BC /* IASKSpecifier.m */; };
D3807FF815C2894A005BE9BC /* IASKPSSliderSpecifierViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FDD15C2894A005BE9BC /* IASKPSSliderSpecifierViewCell.m */; };
D3807FF915C2894A005BE9BC /* IASKPSSliderSpecifierViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FDD15C2894A005BE9BC /* IASKPSSliderSpecifierViewCell.m */; };
D3807FFA15C2894A005BE9BC /* IASKPSTextFieldSpecifierViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FDF15C2894A005BE9BC /* IASKPSTextFieldSpecifierViewCell.m */; };
D3807FFB15C2894A005BE9BC /* IASKPSTextFieldSpecifierViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FDF15C2894A005BE9BC /* IASKPSTextFieldSpecifierViewCell.m */; };
D3807FFC15C2894A005BE9BC /* IASKPSTitleValueSpecifierViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FE115C2894A005BE9BC /* IASKPSTitleValueSpecifierViewCell.m */; };
D3807FFD15C2894A005BE9BC /* IASKPSTitleValueSpecifierViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FE115C2894A005BE9BC /* IASKPSTitleValueSpecifierViewCell.m */; };
D3807FFE15C2894A005BE9BC /* IASKSlider.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FE315C2894A005BE9BC /* IASKSlider.m */; };
D3807FFF15C2894A005BE9BC /* IASKSlider.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FE315C2894A005BE9BC /* IASKSlider.m */; };
D380800015C2894A005BE9BC /* IASKSwitch.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FE515C2894A005BE9BC /* IASKSwitch.m */; };
D380800115C2894A005BE9BC /* IASKSwitch.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FE515C2894A005BE9BC /* IASKSwitch.m */; };
D380800215C2894A005BE9BC /* IASKTextField.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FE715C2894A005BE9BC /* IASKTextField.m */; };
D380800315C2894A005BE9BC /* IASKTextField.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FE715C2894A005BE9BC /* IASKTextField.m */; };
D380800515C28A7A005BE9BC /* UILinphone.m in Sources */ = {isa = PBXBuildFile; fileRef = D380800415C28A7A005BE9BC /* UILinphone.m */; };
D380800615C28A7A005BE9BC /* UILinphone.m in Sources */ = {isa = PBXBuildFile; fileRef = D380800415C28A7A005BE9BC /* UILinphone.m */; };
D38327F31580FE3A00FA0D23 /* contacts_default.png in Resources */ = {isa = PBXBuildFile; fileRef = D38327EB1580FE3A00FA0D23 /* contacts_default.png */; };
D38327F41580FE3A00FA0D23 /* contacts_selected.png in Resources */ = {isa = PBXBuildFile; fileRef = D38327EC1580FE3A00FA0D23 /* contacts_selected.png */; };
D38327F51580FE3A00FA0D23 /* dialer_default.png in Resources */ = {isa = PBXBuildFile; fileRef = D38327ED1580FE3A00FA0D23 /* dialer_default.png */; };
@ -1354,36 +1364,45 @@
D37C639A15AADEF5009D0BAC /* ContactDetailsTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ContactDetailsTableViewController.m; sourceTree = "<group>"; };
D37DC6BF1594AE1800B2A5EB /* LinphoneCoreSettingsStore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LinphoneCoreSettingsStore.h; sourceTree = "<group>"; };
D37DC6C01594AE1800B2A5EB /* LinphoneCoreSettingsStore.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LinphoneCoreSettingsStore.m; sourceTree = "<group>"; };
D37DC6C51594AE6F00B2A5EB /* IASKAppSettingsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKAppSettingsViewController.h; sourceTree = "<group>"; };
D37DC6C61594AE6F00B2A5EB /* IASKAppSettingsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = IASKAppSettingsViewController.m; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objc; };
D37DC6C71594AE6F00B2A5EB /* IASKAppSettingsWebViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKAppSettingsWebViewController.h; sourceTree = "<group>"; };
D37DC6C81594AE6F00B2A5EB /* IASKAppSettingsWebViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = IASKAppSettingsWebViewController.m; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objc; };
D37DC6C91594AE6F00B2A5EB /* IASKSpecifierValuesViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKSpecifierValuesViewController.h; sourceTree = "<group>"; };
D37DC6CA1594AE6F00B2A5EB /* IASKSpecifierValuesViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKSpecifierValuesViewController.m; sourceTree = "<group>"; };
D37DC6CB1594AE6F00B2A5EB /* IASKViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKViewController.h; sourceTree = "<group>"; };
D37DC6CD1594AE6F00B2A5EB /* IASKSettingsReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKSettingsReader.h; sourceTree = "<group>"; };
D37DC6CE1594AE6F00B2A5EB /* IASKSettingsReader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = IASKSettingsReader.m; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objc; };
D37DC6CF1594AE6F00B2A5EB /* IASKSettingsStore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKSettingsStore.h; sourceTree = "<group>"; };
D37DC6D01594AE6F00B2A5EB /* IASKSettingsStore.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKSettingsStore.m; sourceTree = "<group>"; };
D37DC6D11594AE6F00B2A5EB /* IASKSettingsStoreFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKSettingsStoreFile.h; sourceTree = "<group>"; };
D37DC6D21594AE6F00B2A5EB /* IASKSettingsStoreFile.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = IASKSettingsStoreFile.m; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objc; };
D37DC6D31594AE6F00B2A5EB /* IASKSettingsStoreUserDefaults.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKSettingsStoreUserDefaults.h; sourceTree = "<group>"; };
D37DC6D41594AE6F00B2A5EB /* IASKSettingsStoreUserDefaults.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKSettingsStoreUserDefaults.m; sourceTree = "<group>"; };
D37DC6D51594AE6F00B2A5EB /* IASKSpecifier.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKSpecifier.h; sourceTree = "<group>"; };
D37DC6D61594AE6F00B2A5EB /* IASKSpecifier.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKSpecifier.m; sourceTree = "<group>"; };
D37DC6D81594AE6F00B2A5EB /* IASKPSSliderSpecifierViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKPSSliderSpecifierViewCell.h; sourceTree = "<group>"; };
D37DC6D91594AE6F00B2A5EB /* IASKPSSliderSpecifierViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKPSSliderSpecifierViewCell.m; sourceTree = "<group>"; };
D37DC6DA1594AE6F00B2A5EB /* IASKPSTextFieldSpecifierViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKPSTextFieldSpecifierViewCell.h; sourceTree = "<group>"; };
D37DC6DB1594AE6F00B2A5EB /* IASKPSTextFieldSpecifierViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKPSTextFieldSpecifierViewCell.m; sourceTree = "<group>"; };
D37DC6DC1594AE6F00B2A5EB /* IASKPSTitleValueSpecifierViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKPSTitleValueSpecifierViewCell.h; sourceTree = "<group>"; };
D37DC6DD1594AE6F00B2A5EB /* IASKPSTitleValueSpecifierViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKPSTitleValueSpecifierViewCell.m; sourceTree = "<group>"; };
D37DC6E01594AE6F00B2A5EB /* IASKSlider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKSlider.h; sourceTree = "<group>"; };
D37DC6E11594AE6F00B2A5EB /* IASKSlider.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKSlider.m; sourceTree = "<group>"; };
D37DC6E21594AE6F00B2A5EB /* IASKSwitch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKSwitch.h; sourceTree = "<group>"; };
D37DC6E31594AE6F00B2A5EB /* IASKSwitch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKSwitch.m; sourceTree = "<group>"; };
D37DC6E41594AE6F00B2A5EB /* IASKTextField.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKTextField.h; sourceTree = "<group>"; };
D37DC6E51594AE6F00B2A5EB /* IASKTextField.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKTextField.m; sourceTree = "<group>"; };
D37DC7171594AF3400B2A5EB /* MessageUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MessageUI.framework; path = System/Library/Frameworks/MessageUI.framework; sourceTree = SDKROOT; };
D3807FB715C28940005BE9BC /* DCRoundSwitch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DCRoundSwitch.h; sourceTree = "<group>"; };
D3807FB815C28940005BE9BC /* DCRoundSwitch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DCRoundSwitch.m; sourceTree = "<group>"; };
D3807FB915C28940005BE9BC /* DCRoundSwitchKnobLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DCRoundSwitchKnobLayer.h; sourceTree = "<group>"; };
D3807FBA15C28940005BE9BC /* DCRoundSwitchKnobLayer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DCRoundSwitchKnobLayer.m; sourceTree = "<group>"; };
D3807FBB15C28940005BE9BC /* DCRoundSwitchOutlineLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DCRoundSwitchOutlineLayer.h; sourceTree = "<group>"; };
D3807FBC15C28940005BE9BC /* DCRoundSwitchOutlineLayer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DCRoundSwitchOutlineLayer.m; sourceTree = "<group>"; };
D3807FBD15C28940005BE9BC /* DCRoundSwitchToggleLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DCRoundSwitchToggleLayer.h; sourceTree = "<group>"; };
D3807FBE15C28940005BE9BC /* DCRoundSwitchToggleLayer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DCRoundSwitchToggleLayer.m; sourceTree = "<group>"; };
D3807FC915C2894A005BE9BC /* IASKAppSettingsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKAppSettingsViewController.h; sourceTree = "<group>"; };
D3807FCA15C2894A005BE9BC /* IASKAppSettingsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKAppSettingsViewController.m; sourceTree = "<group>"; };
D3807FCB15C2894A005BE9BC /* IASKAppSettingsWebViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKAppSettingsWebViewController.h; sourceTree = "<group>"; };
D3807FCC15C2894A005BE9BC /* IASKAppSettingsWebViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKAppSettingsWebViewController.m; sourceTree = "<group>"; };
D3807FCD15C2894A005BE9BC /* IASKSpecifierValuesViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKSpecifierValuesViewController.h; sourceTree = "<group>"; };
D3807FCE15C2894A005BE9BC /* IASKSpecifierValuesViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKSpecifierValuesViewController.m; sourceTree = "<group>"; };
D3807FCF15C2894A005BE9BC /* IASKViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKViewController.h; sourceTree = "<group>"; };
D3807FD115C2894A005BE9BC /* IASKSettingsReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKSettingsReader.h; sourceTree = "<group>"; };
D3807FD215C2894A005BE9BC /* IASKSettingsReader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKSettingsReader.m; sourceTree = "<group>"; };
D3807FD315C2894A005BE9BC /* IASKSettingsStore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKSettingsStore.h; sourceTree = "<group>"; };
D3807FD415C2894A005BE9BC /* IASKSettingsStore.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKSettingsStore.m; sourceTree = "<group>"; };
D3807FD515C2894A005BE9BC /* IASKSettingsStoreFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKSettingsStoreFile.h; sourceTree = "<group>"; };
D3807FD615C2894A005BE9BC /* IASKSettingsStoreFile.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKSettingsStoreFile.m; sourceTree = "<group>"; };
D3807FD715C2894A005BE9BC /* IASKSettingsStoreUserDefaults.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKSettingsStoreUserDefaults.h; sourceTree = "<group>"; };
D3807FD815C2894A005BE9BC /* IASKSettingsStoreUserDefaults.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKSettingsStoreUserDefaults.m; sourceTree = "<group>"; };
D3807FD915C2894A005BE9BC /* IASKSpecifier.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKSpecifier.h; sourceTree = "<group>"; };
D3807FDA15C2894A005BE9BC /* IASKSpecifier.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKSpecifier.m; sourceTree = "<group>"; };
D3807FDC15C2894A005BE9BC /* IASKPSSliderSpecifierViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKPSSliderSpecifierViewCell.h; sourceTree = "<group>"; };
D3807FDD15C2894A005BE9BC /* IASKPSSliderSpecifierViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKPSSliderSpecifierViewCell.m; sourceTree = "<group>"; };
D3807FDE15C2894A005BE9BC /* IASKPSTextFieldSpecifierViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKPSTextFieldSpecifierViewCell.h; sourceTree = "<group>"; };
D3807FDF15C2894A005BE9BC /* IASKPSTextFieldSpecifierViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKPSTextFieldSpecifierViewCell.m; sourceTree = "<group>"; };
D3807FE015C2894A005BE9BC /* IASKPSTitleValueSpecifierViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKPSTitleValueSpecifierViewCell.h; sourceTree = "<group>"; };
D3807FE115C2894A005BE9BC /* IASKPSTitleValueSpecifierViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKPSTitleValueSpecifierViewCell.m; sourceTree = "<group>"; };
D3807FE215C2894A005BE9BC /* IASKSlider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKSlider.h; sourceTree = "<group>"; };
D3807FE315C2894A005BE9BC /* IASKSlider.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKSlider.m; sourceTree = "<group>"; };
D3807FE415C2894A005BE9BC /* IASKSwitch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKSwitch.h; sourceTree = "<group>"; };
D3807FE515C2894A005BE9BC /* IASKSwitch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKSwitch.m; sourceTree = "<group>"; };
D3807FE615C2894A005BE9BC /* IASKTextField.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKTextField.h; sourceTree = "<group>"; };
D3807FE715C2894A005BE9BC /* IASKTextField.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKTextField.m; sourceTree = "<group>"; };
D380800415C28A7A005BE9BC /* UILinphone.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UILinphone.m; sourceTree = "<group>"; };
D38327EB1580FE3A00FA0D23 /* contacts_default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = contacts_default.png; path = Resources/contacts_default.png; sourceTree = "<group>"; };
D38327EC1580FE3A00FA0D23 /* contacts_selected.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = contacts_selected.png; path = Resources/contacts_selected.png; sourceTree = "<group>"; };
D38327ED1580FE3A00FA0D23 /* dialer_default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = dialer_default.png; path = Resources/dialer_default.png; sourceTree = "<group>"; };
@ -2040,6 +2059,7 @@
D31C9C97158A1CDE00756B45 /* UIHistoryCell.m */,
D31AC4AF158A29C600C2638B /* UIHistoryCell.xib */,
D3E84F3C15B018A600420DAC /* UILinphone.h */,
D380800415C28A7A005BE9BC /* UILinphone.m */,
D32409C1158B49A600C8C119 /* UILongTouchButton.h */,
D32409C2158B49A600C8C119 /* UILongTouchButton.m */,
D3ED3E841586291B006C0DE4 /* UIMainBar.h */,
@ -2203,7 +2223,6 @@
D389362A15A6D3C500A3A3AA /* NinePatch.xcodeproj */,
080E96DDFE201D6D7F000001 /* Classes */,
29B97323FDCFA39411CA2CEA /* Frameworks */,
D37DC6C31594AE5600B2A5EB /* InAppSettingsKit */,
220FAC77107654FC0068D98F /* include */,
2214783B1386A2030020F8B8 /* Localizable.strings */,
29B97315FDCFA39411CA2CEA /* Other Sources */,
@ -2511,8 +2530,10 @@
isa = PBXGroup;
children = (
D38935F715A6D06800A3A3AA /* CPAnimation */,
D3807FB615C28940005BE9BC /* DCRoundSwitch */,
D32B9DFA15A2F131000B6DEC /* FastAddressBook.h */,
D32B9DFB15A2F131000B6DEC /* FastAddressBook.m */,
D3807FC715C2894A005BE9BC /* InAppSettingsKit */,
D326483615887D5200930C67 /* OrderedDictionary.h */,
D326483715887D5200930C67 /* OrderedDictionary.m */,
D3F9A9DD15AF0FFE0045320F /* TPKeyboardAvoiding */,
@ -2533,67 +2554,81 @@
name = Model;
sourceTree = "<group>";
};
D37DC6C31594AE5600B2A5EB /* InAppSettingsKit */ = {
D3807FB615C28940005BE9BC /* DCRoundSwitch */ = {
isa = PBXGroup;
children = (
D37DC6C41594AE6F00B2A5EB /* Controllers */,
D37DC6CC1594AE6F00B2A5EB /* Models */,
D37DC6D71594AE6F00B2A5EB /* Views */,
D3807FB715C28940005BE9BC /* DCRoundSwitch.h */,
D3807FB815C28940005BE9BC /* DCRoundSwitch.m */,
D3807FB915C28940005BE9BC /* DCRoundSwitchKnobLayer.h */,
D3807FBA15C28940005BE9BC /* DCRoundSwitchKnobLayer.m */,
D3807FBB15C28940005BE9BC /* DCRoundSwitchOutlineLayer.h */,
D3807FBC15C28940005BE9BC /* DCRoundSwitchOutlineLayer.m */,
D3807FBD15C28940005BE9BC /* DCRoundSwitchToggleLayer.h */,
D3807FBE15C28940005BE9BC /* DCRoundSwitchToggleLayer.m */,
);
name = DCRoundSwitch;
path = Utils/DCRoundSwitch;
sourceTree = "<group>";
};
D3807FC715C2894A005BE9BC /* InAppSettingsKit */ = {
isa = PBXGroup;
children = (
D3807FC815C2894A005BE9BC /* Controllers */,
D3807FD015C2894A005BE9BC /* Models */,
D3807FDB15C2894A005BE9BC /* Views */,
);
name = InAppSettingsKit;
path = Utils/InAppSettingsKit;
sourceTree = "<group>";
};
D37DC6C41594AE6F00B2A5EB /* Controllers */ = {
D3807FC815C2894A005BE9BC /* Controllers */ = {
isa = PBXGroup;
children = (
D37DC6C51594AE6F00B2A5EB /* IASKAppSettingsViewController.h */,
D37DC6C61594AE6F00B2A5EB /* IASKAppSettingsViewController.m */,
D37DC6C71594AE6F00B2A5EB /* IASKAppSettingsWebViewController.h */,
D37DC6C81594AE6F00B2A5EB /* IASKAppSettingsWebViewController.m */,
D37DC6C91594AE6F00B2A5EB /* IASKSpecifierValuesViewController.h */,
D37DC6CA1594AE6F00B2A5EB /* IASKSpecifierValuesViewController.m */,
D37DC6CB1594AE6F00B2A5EB /* IASKViewController.h */,
D3807FC915C2894A005BE9BC /* IASKAppSettingsViewController.h */,
D3807FCA15C2894A005BE9BC /* IASKAppSettingsViewController.m */,
D3807FCB15C2894A005BE9BC /* IASKAppSettingsWebViewController.h */,
D3807FCC15C2894A005BE9BC /* IASKAppSettingsWebViewController.m */,
D3807FCD15C2894A005BE9BC /* IASKSpecifierValuesViewController.h */,
D3807FCE15C2894A005BE9BC /* IASKSpecifierValuesViewController.m */,
D3807FCF15C2894A005BE9BC /* IASKViewController.h */,
);
name = Controllers;
path = InAppSettingsKit/Controllers;
path = Controllers;
sourceTree = "<group>";
};
D37DC6CC1594AE6F00B2A5EB /* Models */ = {
D3807FD015C2894A005BE9BC /* Models */ = {
isa = PBXGroup;
children = (
D37DC6CD1594AE6F00B2A5EB /* IASKSettingsReader.h */,
D37DC6CE1594AE6F00B2A5EB /* IASKSettingsReader.m */,
D37DC6CF1594AE6F00B2A5EB /* IASKSettingsStore.h */,
D37DC6D01594AE6F00B2A5EB /* IASKSettingsStore.m */,
D37DC6D11594AE6F00B2A5EB /* IASKSettingsStoreFile.h */,
D37DC6D21594AE6F00B2A5EB /* IASKSettingsStoreFile.m */,
D37DC6D31594AE6F00B2A5EB /* IASKSettingsStoreUserDefaults.h */,
D37DC6D41594AE6F00B2A5EB /* IASKSettingsStoreUserDefaults.m */,
D37DC6D51594AE6F00B2A5EB /* IASKSpecifier.h */,
D37DC6D61594AE6F00B2A5EB /* IASKSpecifier.m */,
D3807FD115C2894A005BE9BC /* IASKSettingsReader.h */,
D3807FD215C2894A005BE9BC /* IASKSettingsReader.m */,
D3807FD315C2894A005BE9BC /* IASKSettingsStore.h */,
D3807FD415C2894A005BE9BC /* IASKSettingsStore.m */,
D3807FD515C2894A005BE9BC /* IASKSettingsStoreFile.h */,
D3807FD615C2894A005BE9BC /* IASKSettingsStoreFile.m */,
D3807FD715C2894A005BE9BC /* IASKSettingsStoreUserDefaults.h */,
D3807FD815C2894A005BE9BC /* IASKSettingsStoreUserDefaults.m */,
D3807FD915C2894A005BE9BC /* IASKSpecifier.h */,
D3807FDA15C2894A005BE9BC /* IASKSpecifier.m */,
);
name = Models;
path = InAppSettingsKit/Models;
path = Models;
sourceTree = "<group>";
};
D37DC6D71594AE6F00B2A5EB /* Views */ = {
D3807FDB15C2894A005BE9BC /* Views */ = {
isa = PBXGroup;
children = (
D37DC6D81594AE6F00B2A5EB /* IASKPSSliderSpecifierViewCell.h */,
D37DC6D91594AE6F00B2A5EB /* IASKPSSliderSpecifierViewCell.m */,
D37DC6DA1594AE6F00B2A5EB /* IASKPSTextFieldSpecifierViewCell.h */,
D37DC6DB1594AE6F00B2A5EB /* IASKPSTextFieldSpecifierViewCell.m */,
D37DC6DC1594AE6F00B2A5EB /* IASKPSTitleValueSpecifierViewCell.h */,
D37DC6DD1594AE6F00B2A5EB /* IASKPSTitleValueSpecifierViewCell.m */,
D37DC6E01594AE6F00B2A5EB /* IASKSlider.h */,
D37DC6E11594AE6F00B2A5EB /* IASKSlider.m */,
D37DC6E21594AE6F00B2A5EB /* IASKSwitch.h */,
D37DC6E31594AE6F00B2A5EB /* IASKSwitch.m */,
D37DC6E41594AE6F00B2A5EB /* IASKTextField.h */,
D37DC6E51594AE6F00B2A5EB /* IASKTextField.m */,
D3807FDC15C2894A005BE9BC /* IASKPSSliderSpecifierViewCell.h */,
D3807FDD15C2894A005BE9BC /* IASKPSSliderSpecifierViewCell.m */,
D3807FDE15C2894A005BE9BC /* IASKPSTextFieldSpecifierViewCell.h */,
D3807FDF15C2894A005BE9BC /* IASKPSTextFieldSpecifierViewCell.m */,
D3807FE015C2894A005BE9BC /* IASKPSTitleValueSpecifierViewCell.h */,
D3807FE115C2894A005BE9BC /* IASKPSTitleValueSpecifierViewCell.m */,
D3807FE215C2894A005BE9BC /* IASKSlider.h */,
D3807FE315C2894A005BE9BC /* IASKSlider.m */,
D3807FE415C2894A005BE9BC /* IASKSwitch.h */,
D3807FE515C2894A005BE9BC /* IASKSwitch.m */,
D3807FE615C2894A005BE9BC /* IASKTextField.h */,
D3807FE715C2894A005BE9BC /* IASKTextField.m */,
);
name = Views;
path = InAppSettingsKit/Views;
path = Views;
sourceTree = "<group>";
};
D38935F715A6D06800A3A3AA /* CPAnimation */ = {
@ -3395,20 +3430,6 @@
D35E7597159460580066B1C1 /* ChatViewController.m in Sources */,
D35E759F159460B70066B1C1 /* SettingsViewController.m in Sources */,
D37DC6C11594AE1800B2A5EB /* LinphoneCoreSettingsStore.m in Sources */,
D37DC6ED1594AE6F00B2A5EB /* IASKAppSettingsViewController.m in Sources */,
D37DC6EF1594AE6F00B2A5EB /* IASKAppSettingsWebViewController.m in Sources */,
D37DC6F11594AE6F00B2A5EB /* IASKSpecifierValuesViewController.m in Sources */,
D37DC6F31594AE6F00B2A5EB /* IASKSettingsReader.m in Sources */,
D37DC6F51594AE6F00B2A5EB /* IASKSettingsStore.m in Sources */,
D37DC6F71594AE6F00B2A5EB /* IASKSettingsStoreFile.m in Sources */,
D37DC6F91594AE6F00B2A5EB /* IASKSettingsStoreUserDefaults.m in Sources */,
D37DC6FB1594AE6F00B2A5EB /* IASKSpecifier.m in Sources */,
D37DC6FD1594AE6F00B2A5EB /* IASKPSSliderSpecifierViewCell.m in Sources */,
D37DC6FF1594AE6F00B2A5EB /* IASKPSTextFieldSpecifierViewCell.m in Sources */,
D37DC7011594AE6F00B2A5EB /* IASKPSTitleValueSpecifierViewCell.m in Sources */,
D37DC7051594AE6F00B2A5EB /* IASKSlider.m in Sources */,
D37DC7071594AE6F00B2A5EB /* IASKSwitch.m in Sources */,
D37DC7091594AE6F00B2A5EB /* IASKTextField.m in Sources */,
D3EA53FD159850E80037DC6B /* LinphoneManager.m in Sources */,
D3EA540D1598528B0037DC6B /* ChatTableViewController.m in Sources */,
D3EA5411159853750037DC6B /* UIChatCell.m in Sources */,
@ -3440,6 +3461,25 @@
D3F9A9EE15AF277E0045320F /* UACellBackgroundView.m in Sources */,
D35860D615B549B500513429 /* Utils.m in Sources */,
D3F7998115BD32370018C273 /* TPMultiLayoutViewController.m in Sources */,
D3807FBF15C28940005BE9BC /* DCRoundSwitch.m in Sources */,
D3807FC115C28940005BE9BC /* DCRoundSwitchKnobLayer.m in Sources */,
D3807FC315C28940005BE9BC /* DCRoundSwitchOutlineLayer.m in Sources */,
D3807FC515C28940005BE9BC /* DCRoundSwitchToggleLayer.m in Sources */,
D3807FE815C2894A005BE9BC /* IASKAppSettingsViewController.m in Sources */,
D3807FEA15C2894A005BE9BC /* IASKAppSettingsWebViewController.m in Sources */,
D3807FEC15C2894A005BE9BC /* IASKSpecifierValuesViewController.m in Sources */,
D3807FEE15C2894A005BE9BC /* IASKSettingsReader.m in Sources */,
D3807FF015C2894A005BE9BC /* IASKSettingsStore.m in Sources */,
D3807FF215C2894A005BE9BC /* IASKSettingsStoreFile.m in Sources */,
D3807FF415C2894A005BE9BC /* IASKSettingsStoreUserDefaults.m in Sources */,
D3807FF615C2894A005BE9BC /* IASKSpecifier.m in Sources */,
D3807FF815C2894A005BE9BC /* IASKPSSliderSpecifierViewCell.m in Sources */,
D3807FFA15C2894A005BE9BC /* IASKPSTextFieldSpecifierViewCell.m in Sources */,
D3807FFC15C2894A005BE9BC /* IASKPSTitleValueSpecifierViewCell.m in Sources */,
D3807FFE15C2894A005BE9BC /* IASKSlider.m in Sources */,
D380800015C2894A005BE9BC /* IASKSwitch.m in Sources */,
D380800215C2894A005BE9BC /* IASKTextField.m in Sources */,
D380800515C28A7A005BE9BC /* UILinphone.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -3484,20 +3524,6 @@
D35E7598159460580066B1C1 /* ChatViewController.m in Sources */,
D35E75A0159460B70066B1C1 /* SettingsViewController.m in Sources */,
D37DC6C21594AE1800B2A5EB /* LinphoneCoreSettingsStore.m in Sources */,
D37DC6EE1594AE6F00B2A5EB /* IASKAppSettingsViewController.m in Sources */,
D37DC6F01594AE6F00B2A5EB /* IASKAppSettingsWebViewController.m in Sources */,
D37DC6F21594AE6F00B2A5EB /* IASKSpecifierValuesViewController.m in Sources */,
D37DC6F41594AE6F00B2A5EB /* IASKSettingsReader.m in Sources */,
D37DC6F61594AE6F00B2A5EB /* IASKSettingsStore.m in Sources */,
D37DC6F81594AE6F00B2A5EB /* IASKSettingsStoreFile.m in Sources */,
D37DC6FA1594AE6F00B2A5EB /* IASKSettingsStoreUserDefaults.m in Sources */,
D37DC6FC1594AE6F00B2A5EB /* IASKSpecifier.m in Sources */,
D37DC6FE1594AE6F00B2A5EB /* IASKPSSliderSpecifierViewCell.m in Sources */,
D37DC7001594AE6F00B2A5EB /* IASKPSTextFieldSpecifierViewCell.m in Sources */,
D37DC7021594AE6F00B2A5EB /* IASKPSTitleValueSpecifierViewCell.m in Sources */,
D37DC7061594AE6F00B2A5EB /* IASKSlider.m in Sources */,
D37DC7081594AE6F00B2A5EB /* IASKSwitch.m in Sources */,
D37DC70A1594AE6F00B2A5EB /* IASKTextField.m in Sources */,
D3EA53FE159850E80037DC6B /* LinphoneManager.m in Sources */,
D3EA540E1598528B0037DC6B /* ChatTableViewController.m in Sources */,
D3EA5412159853750037DC6B /* UIChatCell.m in Sources */,
@ -3529,6 +3555,25 @@
D3F9A9EF15AF277E0045320F /* UACellBackgroundView.m in Sources */,
D35860D715B549B500513429 /* Utils.m in Sources */,
D3F7998215BD32370018C273 /* TPMultiLayoutViewController.m in Sources */,
D3807FC015C28940005BE9BC /* DCRoundSwitch.m in Sources */,
D3807FC215C28940005BE9BC /* DCRoundSwitchKnobLayer.m in Sources */,
D3807FC415C28940005BE9BC /* DCRoundSwitchOutlineLayer.m in Sources */,
D3807FC615C28940005BE9BC /* DCRoundSwitchToggleLayer.m in Sources */,
D3807FE915C2894A005BE9BC /* IASKAppSettingsViewController.m in Sources */,
D3807FEB15C2894A005BE9BC /* IASKAppSettingsWebViewController.m in Sources */,
D3807FED15C2894A005BE9BC /* IASKSpecifierValuesViewController.m in Sources */,
D3807FEF15C2894A005BE9BC /* IASKSettingsReader.m in Sources */,
D3807FF115C2894A005BE9BC /* IASKSettingsStore.m in Sources */,
D3807FF315C2894A005BE9BC /* IASKSettingsStoreFile.m in Sources */,
D3807FF515C2894A005BE9BC /* IASKSettingsStoreUserDefaults.m in Sources */,
D3807FF715C2894A005BE9BC /* IASKSpecifier.m in Sources */,
D3807FF915C2894A005BE9BC /* IASKPSSliderSpecifierViewCell.m in Sources */,
D3807FFB15C2894A005BE9BC /* IASKPSTextFieldSpecifierViewCell.m in Sources */,
D3807FFD15C2894A005BE9BC /* IASKPSTitleValueSpecifierViewCell.m in Sources */,
D3807FFF15C2894A005BE9BC /* IASKSlider.m in Sources */,
D380800115C2894A005BE9BC /* IASKSwitch.m in Sources */,
D380800315C2894A005BE9BC /* IASKTextField.m in Sources */,
D380800615C28A7A005BE9BC /* UILinphone.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};