From 173adff74f8ce5b10686e7d0a1e377ac0835834e Mon Sep 17 00:00:00 2001 From: Yann Diorcet Date: Thu, 26 Jul 2012 19:10:20 +0200 Subject: [PATCH 1/3] Customize Settings view colors --- Classes/HistoryDetailsViewController.xib | 14 +-- Classes/LinphoneUI/UILinphone.h | 3 + Classes/SettingsViewController.m | 114 ++++++++++++++++--- Classes/SettingsViewController.xib | 88 ++++++++------ Resources/history_details_bar_background.png | Bin 0 -> 161 bytes Resources/settings_bar_background.png | Bin 0 -> 161 bytes linphone.xcodeproj/project.pbxproj | 12 ++ 7 files changed, 174 insertions(+), 57 deletions(-) create mode 100644 Resources/history_details_bar_background.png create mode 100644 Resources/settings_bar_background.png diff --git a/Classes/HistoryDetailsViewController.xib b/Classes/HistoryDetailsViewController.xib index 7deedb7e5..6e340bd86 100644 --- a/Classes/HistoryDetailsViewController.xib +++ b/Classes/HistoryDetailsViewController.xib @@ -3,19 +3,19 @@ 1296 11E53 - 2182 + 2549 1138.47 569.00 com.apple.InterfaceBuilder.IBCocoaTouchPlugin - 1181 + 1498 + IBProxyObject IBUIButton IBUIImageView - IBUIView IBUILabel - IBProxyObject + IBUIView com.apple.InterfaceBuilder.IBCocoaTouchPlugin @@ -53,7 +53,7 @@ IBCocoaTouchFramework NSImage - contact_bar_background.png + history_details_bar_background.png @@ -896,12 +896,12 @@ {131, 131} {550, 101} {550, 101} - {5, 117} {320, 117} {320, 117} {320, 117} {320, 117} + {5, 117} - 1181 + 1498 diff --git a/Classes/LinphoneUI/UILinphone.h b/Classes/LinphoneUI/UILinphone.h index 42fc6c2ba..8b84d01f5 100644 --- a/Classes/LinphoneUI/UILinphone.h +++ b/Classes/LinphoneUI/UILinphone.h @@ -20,6 +20,9 @@ #ifndef UILINPHONE_H #define UILINPHONE_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] + #endif diff --git a/Classes/SettingsViewController.m b/Classes/SettingsViewController.m index 69f5085d6..6aa413b11 100644 --- a/Classes/SettingsViewController.m +++ b/Classes/SettingsViewController.m @@ -19,6 +19,105 @@ #import "SettingsViewController.h" #import "LinphoneManager.h" +#import "UILinphone.h" + +static void removeTableBackground(UIView* view) { + if([view isKindOfClass:[UITableView class]]) { + [view setBackgroundColor:[UIColor clearColor]]; + } + for(UIView *subview in [view subviews]) { + removeTableBackground(subview); + } +} + +@interface UINavigationBarEx: UINavigationBar { + +} +@end + +@implementation UINavigationBarEx + + +#pragma mark - Lifecycle Functions + +- (void)initUINavigationBarEx { + [self setTintColor:LINPHONE_MAIN_COLOR]; +} + +- (id)init { + self = [super init]; + if (self) { + [self initUINavigationBarEx]; + } + return self; +} + +- (id)initWithCoder:(NSCoder *)aDecoder { + self = [super initWithCoder:aDecoder]; + if (self) { + [self initUINavigationBarEx]; + } + return self; +} + +- (id)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + [self initUINavigationBarEx]; + } + return self; +} + +- (void)drawRect:(CGRect)rect { + UIImage *img = [UIImage imageNamed:@"settings_bar_background.png"]; + [img drawInRect:rect]; +} + +@end + +@interface UINavigationControllerEx : UINavigationController + +@end + +@implementation UINavigationControllerEx + +- (id)initWithRootViewController:(UIViewController *)rootViewController { + removeTableBackground(rootViewController.view); + return [super initWithRootViewController:rootViewController]; +} + +- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated { + removeTableBackground(viewController.view); + + 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]; + labelTitleView.shadowColor = [UIColor colorWithWhite:1.0 alpha:0.5]; + labelTitleView.font = [UIFont boldSystemFontOfSize:20]; + labelTitleView.shadowOffset = CGSizeMake(0,1); + labelTitleView.textAlignment = UITextAlignmentCenter; + labelTitleView.text = viewController.navigationItem.title; + [labelTitleView sizeToFit]; + viewController.navigationItem.titleView = labelTitleView; + + [super pushViewController:viewController animated:animated]; +} + +- (void)setViewControllers:(NSArray *)viewControllers { + for(UIViewController *controller in viewControllers) { + removeTableBackground(controller.view); + } + [super setViewControllers:viewControllers]; +} + +- (void)setViewControllers:(NSArray *)viewControllers animated:(BOOL)animated { + for(UIViewController *controller in viewControllers) { + removeTableBackground(controller.view); + } + [super setViewControllers:viewControllers animated:animated]; +} + +@end @implementation SettingsViewController @@ -59,17 +158,6 @@ static UICompositeViewDescription *compositeDescription = nil; } -#pragma mark - - -+ (void)removeBackground:(UIView*)view { - if([view isKindOfClass:[UITableView class]]) { - [view setBackgroundColor:[UIColor clearColor]]; - } - for(UIView *subview in [view subviews]) { - [SettingsViewController removeBackground:subview]; - } -} - #pragma mark - ViewController Functions - (void)viewDidLoad { @@ -82,8 +170,8 @@ static UICompositeViewDescription *compositeDescription = nil; settingsController.settingsStore = [[LinphoneManager instance] settingsStore]; navigationController.view.frame = self.view.frame; - [SettingsViewController removeBackground:navigationController.view]; - [SettingsViewController removeBackground:settingsController.view]; + removeTableBackground(navigationController.view); + [navigationController pushViewController:settingsController animated:FALSE]; [self.view addSubview: navigationController.view]; } diff --git a/Classes/SettingsViewController.xib b/Classes/SettingsViewController.xib index 4d1cbfb30..9c69905bb 100644 --- a/Classes/SettingsViewController.xib +++ b/Classes/SettingsViewController.xib @@ -3,20 +3,20 @@ 1296 11E53 - 2182 + 2549 1138.47 569.00 com.apple.InterfaceBuilder.IBCocoaTouchPlugin - 1181 + 1498 - IBUINavigationBar - IBUINavigationItem - IBUIViewController - IBUIView - IBUINavigationController IBProxyObject + IBUINavigationBar + IBUINavigationController + IBUINavigationItem + IBUIView + IBUIViewController com.apple.InterfaceBuilder.IBCocoaTouchPlugin @@ -48,6 +48,20 @@ IBCocoaTouchFramework + + NO + + Settings + IBCocoaTouchFramework + + + + 1 + 1 + + IBCocoaTouchFramework + NO + @@ -67,24 +81,7 @@ YES IBCocoaTouchFramework - - - NO - - - Settings - IBCocoaTouchFramework - - - - - 1 - 1 - - IBCocoaTouchFramework - NO - - + @@ -97,14 +94,6 @@ 9 - - - settingsController - - - - 8 - navigationController @@ -113,12 +102,20 @@ 15 + + + settingsController + + + + 8 + 0 - + @@ -144,7 +141,6 @@ - navigationController @@ -161,7 +157,7 @@ - + settingsController @@ -177,7 +173,9 @@ com.apple.InterfaceBuilder.IBCocoaTouchPlugin UIResponder com.apple.InterfaceBuilder.IBCocoaTouchPlugin + UINavigationControllerEx com.apple.InterfaceBuilder.IBCocoaTouchPlugin + UINavigationBarEx com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin @@ -233,6 +231,22 @@ ./Classes/SettingsViewController.h + + UINavigationBarEx + UINavigationBar + + IBProjectSource + ./Classes/UINavigationBarEx.h + + + + UINavigationControllerEx + UINavigationController + + IBProjectSource + ./Classes/UINavigationControllerEx.h + + 0 @@ -243,6 +257,6 @@ YES 3 - 1181 + 1498 diff --git a/Resources/history_details_bar_background.png b/Resources/history_details_bar_background.png new file mode 100644 index 0000000000000000000000000000000000000000..e3638e1976b397c669e71c428631487b600fe13e GIT binary patch literal 161 zcmeAS@N?(olHy`uVBq!ia0vp^tUz4K!2~2Z_4gEmr~;2jAk8fd!i)^F=12eq*-Jcq zUD@xjb8+$VX`9TE0SY;Ix;TbdoKF7p|Gz!6P(qRe>*7CwcBVgdST0F(cfOn$^x0#o ze8y*uQ2QHS`gf%#TxQ;T*?R5U#SymKSBR)Sm1em7dBT_DR>iJBvlu*G{an^LB{Ts5 D?eH-_ literal 0 HcmV?d00001 diff --git a/Resources/settings_bar_background.png b/Resources/settings_bar_background.png new file mode 100644 index 0000000000000000000000000000000000000000..e3638e1976b397c669e71c428631487b600fe13e GIT binary patch literal 161 zcmeAS@N?(olHy`uVBq!ia0vp^tUz4K!2~2Z_4gEmr~;2jAk8fd!i)^F=12eq*-Jcq zUD@xjb8+$VX`9TE0SY;Ix;TbdoKF7p|Gz!6P(qRe>*7CwcBVgdST0F(cfOn$^x0#o ze8y*uQ2QHS`gf%#TxQ;T*?R5U#SymKSBR)Sm1em7dBT_DR>iJBvlu*G{an^LB{Ts5 D?eH-_ literal 0 HcmV?d00001 diff --git a/linphone.xcodeproj/project.pbxproj b/linphone.xcodeproj/project.pbxproj index d1eef5517..b018832b9 100755 --- a/linphone.xcodeproj/project.pbxproj +++ b/linphone.xcodeproj/project.pbxproj @@ -666,6 +666,10 @@ D3A8BB7F15A6CC3200F96BE5 /* setup_back_disabled.png in Resources */ = {isa = PBXBuildFile; fileRef = D3A8BB7815A6CC3200F96BE5 /* setup_back_disabled.png */; }; D3A8BB8115A6CC3200F96BE5 /* setup_cancel_disabled.png in Resources */ = {isa = PBXBuildFile; fileRef = D3A8BB7915A6CC3200F96BE5 /* setup_cancel_disabled.png */; }; D3A8BB8315A6CC3200F96BE5 /* setup_start_disabled.png in Resources */ = {isa = PBXBuildFile; fileRef = D3A8BB7A15A6CC3200F96BE5 /* setup_start_disabled.png */; }; + D3B82A0215C18A710036C93E /* history_details_bar_background.png in Resources */ = {isa = PBXBuildFile; fileRef = D3B82A0015C18A710036C93E /* history_details_bar_background.png */; }; + D3B82A0315C18A710036C93E /* history_details_bar_background.png in Resources */ = {isa = PBXBuildFile; fileRef = D3B82A0015C18A710036C93E /* history_details_bar_background.png */; }; + D3B82A0415C18A710036C93E /* settings_bar_background.png in Resources */ = {isa = PBXBuildFile; fileRef = D3B82A0115C18A710036C93E /* settings_bar_background.png */; }; + D3B82A0515C18A710036C93E /* settings_bar_background.png in Resources */ = {isa = PBXBuildFile; fileRef = D3B82A0115C18A710036C93E /* settings_bar_background.png */; }; D3B9A3DF15A58C450096EA4E /* chat_field.png in Resources */ = {isa = PBXBuildFile; fileRef = D3B9A3DA15A58C440096EA4E /* chat_field.png */; }; D3B9A3E115A58C450096EA4E /* chat_ok_default.png in Resources */ = {isa = PBXBuildFile; fileRef = D3B9A3DB15A58C440096EA4E /* chat_ok_default.png */; }; D3B9A3E315A58C450096EA4E /* chat_ok_over.png in Resources */ = {isa = PBXBuildFile; fileRef = D3B9A3DC15A58C440096EA4E /* chat_ok_over.png */; }; @@ -1412,6 +1416,8 @@ D3A8BB7815A6CC3200F96BE5 /* setup_back_disabled.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = setup_back_disabled.png; path = Resources/setup_back_disabled.png; sourceTree = ""; }; D3A8BB7915A6CC3200F96BE5 /* setup_cancel_disabled.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = setup_cancel_disabled.png; path = Resources/setup_cancel_disabled.png; sourceTree = ""; }; D3A8BB7A15A6CC3200F96BE5 /* setup_start_disabled.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = setup_start_disabled.png; path = Resources/setup_start_disabled.png; sourceTree = ""; }; + D3B82A0015C18A710036C93E /* history_details_bar_background.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = history_details_bar_background.png; path = Resources/history_details_bar_background.png; sourceTree = ""; }; + D3B82A0115C18A710036C93E /* settings_bar_background.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = settings_bar_background.png; path = Resources/settings_bar_background.png; sourceTree = ""; }; D3B9A3DA15A58C440096EA4E /* chat_field.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = chat_field.png; path = Resources/chat_field.png; sourceTree = ""; }; D3B9A3DB15A58C440096EA4E /* chat_ok_default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = chat_ok_default.png; path = Resources/chat_ok_default.png; sourceTree = ""; }; D3B9A3DC15A58C440096EA4E /* chat_ok_over.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = chat_ok_over.png; path = Resources/chat_ok_over.png; sourceTree = ""; }; @@ -2343,6 +2349,7 @@ D3157A8915B4466F00DD8C4C /* history_details_add_over.png */, D3157A8E15B446CB00DD8C4C /* history_details_back_default.png */, D3157A8F15B446CB00DD8C4C /* history_details_back_over.png */, + D3B82A0015C18A710036C93E /* history_details_bar_background.png */, D3ED3E9415872EF1006C0DE4 /* history_edit_default.png */, D3ED3E9515872EF1006C0DE4 /* history_edit_over.png */, D3ED3E9715872EF1006C0DE4 /* history_missed_default.png */, @@ -2437,6 +2444,7 @@ D3D6A3A5159B0EFE005F692C /* security_ko.png */, D3D6A3A7159B0EFE005F692C /* security_ok.png */, D3D6A3A6159B0EFE005F692C /* security_pending.png */, + D3B82A0115C18A710036C93E /* settings_bar_background.png */, D38327EF1580FE3A00FA0D23 /* settings_default.png */, D38327FE158100E400FA0D23 /* settings_over.png */, D38327F01580FE3A00FA0D23 /* settings_selected.png */, @@ -3032,6 +3040,8 @@ D3C31A8215BD8DED008ED271 /* video_on_default_landscape.png in Resources */, D3C31A8415BD8DED008ED271 /* video_on_disabled_landscape.png in Resources */, D3C31A8615BD8DED008ED271 /* video_on_over_landscape.png in Resources */, + D3B82A0215C18A710036C93E /* history_details_bar_background.png in Resources */, + D3B82A0415C18A710036C93E /* settings_bar_background.png in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -3336,6 +3346,8 @@ D34BD74115C13E250070C209 /* Localizable.strings in Resources */, D34BD74215C13E350070C209 /* untitled.plist in Resources */, D34BD74315C13ED70070C209 /* DialerViewController.xib in Resources */, + D3B82A0315C18A710036C93E /* history_details_bar_background.png in Resources */, + D3B82A0515C18A710036C93E /* settings_bar_background.png in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; From de9ebfb8b0a543a71f5e908902f878852923788a Mon Sep 17 00:00:00 2001 From: Yann Diorcet Date: Fri, 27 Jul 2012 09:16:51 +0200 Subject: [PATCH 2/3] Fix landscape dial alt back --- .../dialer_alt_back_default_landscape.png | Bin 6970 -> 6765 bytes Resources/dialer_alt_back_over_landscape.png | Bin 5124 -> 4949 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/Resources/dialer_alt_back_default_landscape.png b/Resources/dialer_alt_back_default_landscape.png index b662db31f2d01fd30b19642139f999b9e85f72e1..9adc1d2a5ff11c0e8762cd5a473c7e9b1a0bcf23 100644 GIT binary patch delta 5947 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 RlM?(_IvV=Ok7{<&{|C8K79#)v delta 6167 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 KehtAP;y(cFhHY#B delta 4327 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 From ee358816b79fd8f96fa99971e203f15acc49e06d Mon Sep 17 00:00:00 2001 From: Yann Diorcet Date: Fri, 27 Jul 2012 11:20:09 +0200 Subject: [PATCH 3/3] Change InAppSettings place All settings with Linphone Colors --- Classes/LinphoneUI/UILinphone.h | 15 +- Classes/LinphoneUI/UILinphone.m | 52 ++ Classes/SettingsViewController.m | 159 +++++- Classes/SettingsViewController.xib | 16 +- Classes/Utils/DCRoundSwitch/DCRoundSwitch.h | 33 ++ Classes/Utils/DCRoundSwitch/DCRoundSwitch.m | 468 ++++++++++++++++++ .../DCRoundSwitch/DCRoundSwitchKnobLayer.h | 18 + .../DCRoundSwitch/DCRoundSwitchKnobLayer.m | 69 +++ .../DCRoundSwitch/DCRoundSwitchOutlineLayer.h | 16 + .../DCRoundSwitch/DCRoundSwitchOutlineLayer.m | 66 +++ .../DCRoundSwitch/DCRoundSwitchToggleLayer.h | 26 + .../DCRoundSwitch/DCRoundSwitchToggleLayer.m | 102 ++++ .../IASKAppSettingsViewController.h | 0 .../IASKAppSettingsViewController.m | 0 .../IASKAppSettingsWebViewController.h | 0 .../IASKAppSettingsWebViewController.m | 0 .../IASKSpecifierValuesViewController.h | 0 .../IASKSpecifierValuesViewController.m | 0 .../Controllers/IASKViewController.h | 0 .../Models/IASKSettingsReader.h | 0 .../Models/IASKSettingsReader.m | 0 .../Models/IASKSettingsStore.h | 0 .../Models/IASKSettingsStore.m | 0 .../Models/IASKSettingsStoreFile.h | 0 .../Models/IASKSettingsStoreFile.m | 0 .../Models/IASKSettingsStoreUserDefaults.h | 0 .../Models/IASKSettingsStoreUserDefaults.m | 0 .../InAppSettingsKit}/Models/IASKSpecifier.h | 0 .../InAppSettingsKit}/Models/IASKSpecifier.m | 0 .../Views/IASKPSSliderSpecifierViewCell.h | 0 .../Views/IASKPSSliderSpecifierViewCell.m | 0 .../Views/IASKPSTextFieldSpecifierViewCell.h | 0 .../Views/IASKPSTextFieldSpecifierViewCell.m | 0 .../Views/IASKPSTitleValueSpecifierViewCell.h | 0 .../Views/IASKPSTitleValueSpecifierViewCell.m | 0 .../InAppSettingsKit}/Views/IASKSlider.h | 0 .../InAppSettingsKit}/Views/IASKSlider.m | 0 .../InAppSettingsKit}/Views/IASKSwitch.h | 0 .../InAppSettingsKit}/Views/IASKSwitch.m | 0 .../InAppSettingsKit}/Views/IASKTextField.h | 0 .../InAppSettingsKit}/Views/IASKTextField.m | 0 linphone.xcodeproj/project.pbxproj | 301 ++++++----- 42 files changed, 1191 insertions(+), 150 deletions(-) create mode 100644 Classes/LinphoneUI/UILinphone.m create mode 100755 Classes/Utils/DCRoundSwitch/DCRoundSwitch.h create mode 100755 Classes/Utils/DCRoundSwitch/DCRoundSwitch.m create mode 100755 Classes/Utils/DCRoundSwitch/DCRoundSwitchKnobLayer.h create mode 100755 Classes/Utils/DCRoundSwitch/DCRoundSwitchKnobLayer.m create mode 100755 Classes/Utils/DCRoundSwitch/DCRoundSwitchOutlineLayer.h create mode 100755 Classes/Utils/DCRoundSwitch/DCRoundSwitchOutlineLayer.m create mode 100755 Classes/Utils/DCRoundSwitch/DCRoundSwitchToggleLayer.h create mode 100755 Classes/Utils/DCRoundSwitch/DCRoundSwitchToggleLayer.m rename {InAppSettingsKit => Classes/Utils/InAppSettingsKit}/Controllers/IASKAppSettingsViewController.h (100%) rename {InAppSettingsKit => Classes/Utils/InAppSettingsKit}/Controllers/IASKAppSettingsViewController.m (100%) rename {InAppSettingsKit => Classes/Utils/InAppSettingsKit}/Controllers/IASKAppSettingsWebViewController.h (100%) rename {InAppSettingsKit => Classes/Utils/InAppSettingsKit}/Controllers/IASKAppSettingsWebViewController.m (100%) rename {InAppSettingsKit => Classes/Utils/InAppSettingsKit}/Controllers/IASKSpecifierValuesViewController.h (100%) rename {InAppSettingsKit => Classes/Utils/InAppSettingsKit}/Controllers/IASKSpecifierValuesViewController.m (100%) rename {InAppSettingsKit => Classes/Utils/InAppSettingsKit}/Controllers/IASKViewController.h (100%) rename {InAppSettingsKit => Classes/Utils/InAppSettingsKit}/Models/IASKSettingsReader.h (100%) rename {InAppSettingsKit => Classes/Utils/InAppSettingsKit}/Models/IASKSettingsReader.m (100%) rename {InAppSettingsKit => Classes/Utils/InAppSettingsKit}/Models/IASKSettingsStore.h (100%) rename {InAppSettingsKit => Classes/Utils/InAppSettingsKit}/Models/IASKSettingsStore.m (100%) rename {InAppSettingsKit => Classes/Utils/InAppSettingsKit}/Models/IASKSettingsStoreFile.h (100%) rename {InAppSettingsKit => Classes/Utils/InAppSettingsKit}/Models/IASKSettingsStoreFile.m (100%) rename {InAppSettingsKit => Classes/Utils/InAppSettingsKit}/Models/IASKSettingsStoreUserDefaults.h (100%) rename {InAppSettingsKit => Classes/Utils/InAppSettingsKit}/Models/IASKSettingsStoreUserDefaults.m (100%) rename {InAppSettingsKit => Classes/Utils/InAppSettingsKit}/Models/IASKSpecifier.h (100%) rename {InAppSettingsKit => Classes/Utils/InAppSettingsKit}/Models/IASKSpecifier.m (100%) rename {InAppSettingsKit => Classes/Utils/InAppSettingsKit}/Views/IASKPSSliderSpecifierViewCell.h (100%) rename {InAppSettingsKit => Classes/Utils/InAppSettingsKit}/Views/IASKPSSliderSpecifierViewCell.m (100%) rename {InAppSettingsKit => Classes/Utils/InAppSettingsKit}/Views/IASKPSTextFieldSpecifierViewCell.h (100%) rename {InAppSettingsKit => Classes/Utils/InAppSettingsKit}/Views/IASKPSTextFieldSpecifierViewCell.m (100%) rename {InAppSettingsKit => Classes/Utils/InAppSettingsKit}/Views/IASKPSTitleValueSpecifierViewCell.h (100%) rename {InAppSettingsKit => Classes/Utils/InAppSettingsKit}/Views/IASKPSTitleValueSpecifierViewCell.m (100%) rename {InAppSettingsKit => Classes/Utils/InAppSettingsKit}/Views/IASKSlider.h (100%) rename {InAppSettingsKit => Classes/Utils/InAppSettingsKit}/Views/IASKSlider.m (100%) rename {InAppSettingsKit => Classes/Utils/InAppSettingsKit}/Views/IASKSwitch.h (100%) rename {InAppSettingsKit => Classes/Utils/InAppSettingsKit}/Views/IASKSwitch.m (100%) rename {InAppSettingsKit => Classes/Utils/InAppSettingsKit}/Views/IASKTextField.h (100%) rename {InAppSettingsKit => Classes/Utils/InAppSettingsKit}/Views/IASKTextField.m (100%) diff --git a/Classes/LinphoneUI/UILinphone.h b/Classes/LinphoneUI/UILinphone.h index 8b84d01f5..7eec97b7a 100644 --- a/Classes/LinphoneUI/UILinphone.h +++ b/Classes/LinphoneUI/UILinphone.h @@ -17,12 +17,19 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#ifndef UILINPHONE_H -#define UILINPHONE_H - +#import #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 \ No newline at end of file diff --git a/Classes/LinphoneUI/UILinphone.m b/Classes/LinphoneUI/UILinphone.m new file mode 100644 index 000000000..0c151bf99 --- /dev/null +++ b/Classes/LinphoneUI/UILinphone.m @@ -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 \ No newline at end of file diff --git a/Classes/SettingsViewController.m b/Classes/SettingsViewController.m index 6aa413b11..8580eec38 100644 --- a/Classes/SettingsViewController.m +++ b/Classes/SettingsViewController.m @@ -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]; } diff --git a/Classes/SettingsViewController.xib b/Classes/SettingsViewController.xib index 9c69905bb..f4b4552a1 100644 --- a/Classes/SettingsViewController.xib +++ b/Classes/SettingsViewController.xib @@ -51,7 +51,7 @@ NO - Settings + IBCocoaTouchFramework @@ -81,7 +81,7 @@ YES IBCocoaTouchFramework - + @@ -115,7 +115,7 @@ 0 - + @@ -179,7 +179,7 @@ com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin - IASKAppSettingsViewController + IASKAppSettingsViewControllerEx com.apple.InterfaceBuilder.IBCocoaTouchPlugin @@ -209,6 +209,14 @@ ./Classes/IASKAppSettingsViewController.h + + IASKAppSettingsViewControllerEx + IASKAppSettingsViewController + + IBProjectSource + ./Classes/IASKAppSettingsViewControllerEx.h + + SettingsViewController UIViewController diff --git a/Classes/Utils/DCRoundSwitch/DCRoundSwitch.h b/Classes/Utils/DCRoundSwitch/DCRoundSwitch.h new file mode 100755 index 000000000..dd693de9e --- /dev/null +++ b/Classes/Utils/DCRoundSwitch/DCRoundSwitch.h @@ -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 +#import + +@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 diff --git a/Classes/Utils/DCRoundSwitch/DCRoundSwitch.m b/Classes/Utils/DCRoundSwitch/DCRoundSwitch.m new file mode 100755 index 000000000..8e0549b27 --- /dev/null +++ b/Classes/Utils/DCRoundSwitch/DCRoundSwitch.m @@ -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 () + +@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 diff --git a/Classes/Utils/DCRoundSwitch/DCRoundSwitchKnobLayer.h b/Classes/Utils/DCRoundSwitch/DCRoundSwitchKnobLayer.h new file mode 100755 index 000000000..55141f72e --- /dev/null +++ b/Classes/Utils/DCRoundSwitch/DCRoundSwitchKnobLayer.h @@ -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 + +@interface DCRoundSwitchKnobLayer : CALayer + +@property (nonatomic) BOOL gripped; + +@end diff --git a/Classes/Utils/DCRoundSwitch/DCRoundSwitchKnobLayer.m b/Classes/Utils/DCRoundSwitch/DCRoundSwitchKnobLayer.m new file mode 100755 index 000000000..d64f2f468 --- /dev/null +++ b/Classes/Utils/DCRoundSwitch/DCRoundSwitchKnobLayer.m @@ -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 diff --git a/Classes/Utils/DCRoundSwitch/DCRoundSwitchOutlineLayer.h b/Classes/Utils/DCRoundSwitch/DCRoundSwitchOutlineLayer.h new file mode 100755 index 000000000..e9e82bf3f --- /dev/null +++ b/Classes/Utils/DCRoundSwitch/DCRoundSwitchOutlineLayer.h @@ -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 + +@interface DCRoundSwitchOutlineLayer : CALayer + +@end diff --git a/Classes/Utils/DCRoundSwitch/DCRoundSwitchOutlineLayer.m b/Classes/Utils/DCRoundSwitch/DCRoundSwitchOutlineLayer.m new file mode 100755 index 000000000..4cbb658e6 --- /dev/null +++ b/Classes/Utils/DCRoundSwitch/DCRoundSwitchOutlineLayer.m @@ -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 diff --git a/Classes/Utils/DCRoundSwitch/DCRoundSwitchToggleLayer.h b/Classes/Utils/DCRoundSwitch/DCRoundSwitchToggleLayer.h new file mode 100755 index 000000000..e56c631b9 --- /dev/null +++ b/Classes/Utils/DCRoundSwitch/DCRoundSwitchToggleLayer.h @@ -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 +#import + +@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 diff --git a/Classes/Utils/DCRoundSwitch/DCRoundSwitchToggleLayer.m b/Classes/Utils/DCRoundSwitch/DCRoundSwitchToggleLayer.m new file mode 100755 index 000000000..99e0550bf --- /dev/null +++ b/Classes/Utils/DCRoundSwitch/DCRoundSwitchToggleLayer.m @@ -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 diff --git a/InAppSettingsKit/Controllers/IASKAppSettingsViewController.h b/Classes/Utils/InAppSettingsKit/Controllers/IASKAppSettingsViewController.h similarity index 100% rename from InAppSettingsKit/Controllers/IASKAppSettingsViewController.h rename to Classes/Utils/InAppSettingsKit/Controllers/IASKAppSettingsViewController.h diff --git a/InAppSettingsKit/Controllers/IASKAppSettingsViewController.m b/Classes/Utils/InAppSettingsKit/Controllers/IASKAppSettingsViewController.m similarity index 100% rename from InAppSettingsKit/Controllers/IASKAppSettingsViewController.m rename to Classes/Utils/InAppSettingsKit/Controllers/IASKAppSettingsViewController.m diff --git a/InAppSettingsKit/Controllers/IASKAppSettingsWebViewController.h b/Classes/Utils/InAppSettingsKit/Controllers/IASKAppSettingsWebViewController.h similarity index 100% rename from InAppSettingsKit/Controllers/IASKAppSettingsWebViewController.h rename to Classes/Utils/InAppSettingsKit/Controllers/IASKAppSettingsWebViewController.h diff --git a/InAppSettingsKit/Controllers/IASKAppSettingsWebViewController.m b/Classes/Utils/InAppSettingsKit/Controllers/IASKAppSettingsWebViewController.m similarity index 100% rename from InAppSettingsKit/Controllers/IASKAppSettingsWebViewController.m rename to Classes/Utils/InAppSettingsKit/Controllers/IASKAppSettingsWebViewController.m diff --git a/InAppSettingsKit/Controllers/IASKSpecifierValuesViewController.h b/Classes/Utils/InAppSettingsKit/Controllers/IASKSpecifierValuesViewController.h similarity index 100% rename from InAppSettingsKit/Controllers/IASKSpecifierValuesViewController.h rename to Classes/Utils/InAppSettingsKit/Controllers/IASKSpecifierValuesViewController.h diff --git a/InAppSettingsKit/Controllers/IASKSpecifierValuesViewController.m b/Classes/Utils/InAppSettingsKit/Controllers/IASKSpecifierValuesViewController.m similarity index 100% rename from InAppSettingsKit/Controllers/IASKSpecifierValuesViewController.m rename to Classes/Utils/InAppSettingsKit/Controllers/IASKSpecifierValuesViewController.m diff --git a/InAppSettingsKit/Controllers/IASKViewController.h b/Classes/Utils/InAppSettingsKit/Controllers/IASKViewController.h similarity index 100% rename from InAppSettingsKit/Controllers/IASKViewController.h rename to Classes/Utils/InAppSettingsKit/Controllers/IASKViewController.h diff --git a/InAppSettingsKit/Models/IASKSettingsReader.h b/Classes/Utils/InAppSettingsKit/Models/IASKSettingsReader.h similarity index 100% rename from InAppSettingsKit/Models/IASKSettingsReader.h rename to Classes/Utils/InAppSettingsKit/Models/IASKSettingsReader.h diff --git a/InAppSettingsKit/Models/IASKSettingsReader.m b/Classes/Utils/InAppSettingsKit/Models/IASKSettingsReader.m similarity index 100% rename from InAppSettingsKit/Models/IASKSettingsReader.m rename to Classes/Utils/InAppSettingsKit/Models/IASKSettingsReader.m diff --git a/InAppSettingsKit/Models/IASKSettingsStore.h b/Classes/Utils/InAppSettingsKit/Models/IASKSettingsStore.h similarity index 100% rename from InAppSettingsKit/Models/IASKSettingsStore.h rename to Classes/Utils/InAppSettingsKit/Models/IASKSettingsStore.h diff --git a/InAppSettingsKit/Models/IASKSettingsStore.m b/Classes/Utils/InAppSettingsKit/Models/IASKSettingsStore.m similarity index 100% rename from InAppSettingsKit/Models/IASKSettingsStore.m rename to Classes/Utils/InAppSettingsKit/Models/IASKSettingsStore.m diff --git a/InAppSettingsKit/Models/IASKSettingsStoreFile.h b/Classes/Utils/InAppSettingsKit/Models/IASKSettingsStoreFile.h similarity index 100% rename from InAppSettingsKit/Models/IASKSettingsStoreFile.h rename to Classes/Utils/InAppSettingsKit/Models/IASKSettingsStoreFile.h diff --git a/InAppSettingsKit/Models/IASKSettingsStoreFile.m b/Classes/Utils/InAppSettingsKit/Models/IASKSettingsStoreFile.m similarity index 100% rename from InAppSettingsKit/Models/IASKSettingsStoreFile.m rename to Classes/Utils/InAppSettingsKit/Models/IASKSettingsStoreFile.m diff --git a/InAppSettingsKit/Models/IASKSettingsStoreUserDefaults.h b/Classes/Utils/InAppSettingsKit/Models/IASKSettingsStoreUserDefaults.h similarity index 100% rename from InAppSettingsKit/Models/IASKSettingsStoreUserDefaults.h rename to Classes/Utils/InAppSettingsKit/Models/IASKSettingsStoreUserDefaults.h diff --git a/InAppSettingsKit/Models/IASKSettingsStoreUserDefaults.m b/Classes/Utils/InAppSettingsKit/Models/IASKSettingsStoreUserDefaults.m similarity index 100% rename from InAppSettingsKit/Models/IASKSettingsStoreUserDefaults.m rename to Classes/Utils/InAppSettingsKit/Models/IASKSettingsStoreUserDefaults.m diff --git a/InAppSettingsKit/Models/IASKSpecifier.h b/Classes/Utils/InAppSettingsKit/Models/IASKSpecifier.h similarity index 100% rename from InAppSettingsKit/Models/IASKSpecifier.h rename to Classes/Utils/InAppSettingsKit/Models/IASKSpecifier.h diff --git a/InAppSettingsKit/Models/IASKSpecifier.m b/Classes/Utils/InAppSettingsKit/Models/IASKSpecifier.m similarity index 100% rename from InAppSettingsKit/Models/IASKSpecifier.m rename to Classes/Utils/InAppSettingsKit/Models/IASKSpecifier.m diff --git a/InAppSettingsKit/Views/IASKPSSliderSpecifierViewCell.h b/Classes/Utils/InAppSettingsKit/Views/IASKPSSliderSpecifierViewCell.h similarity index 100% rename from InAppSettingsKit/Views/IASKPSSliderSpecifierViewCell.h rename to Classes/Utils/InAppSettingsKit/Views/IASKPSSliderSpecifierViewCell.h diff --git a/InAppSettingsKit/Views/IASKPSSliderSpecifierViewCell.m b/Classes/Utils/InAppSettingsKit/Views/IASKPSSliderSpecifierViewCell.m similarity index 100% rename from InAppSettingsKit/Views/IASKPSSliderSpecifierViewCell.m rename to Classes/Utils/InAppSettingsKit/Views/IASKPSSliderSpecifierViewCell.m diff --git a/InAppSettingsKit/Views/IASKPSTextFieldSpecifierViewCell.h b/Classes/Utils/InAppSettingsKit/Views/IASKPSTextFieldSpecifierViewCell.h similarity index 100% rename from InAppSettingsKit/Views/IASKPSTextFieldSpecifierViewCell.h rename to Classes/Utils/InAppSettingsKit/Views/IASKPSTextFieldSpecifierViewCell.h diff --git a/InAppSettingsKit/Views/IASKPSTextFieldSpecifierViewCell.m b/Classes/Utils/InAppSettingsKit/Views/IASKPSTextFieldSpecifierViewCell.m similarity index 100% rename from InAppSettingsKit/Views/IASKPSTextFieldSpecifierViewCell.m rename to Classes/Utils/InAppSettingsKit/Views/IASKPSTextFieldSpecifierViewCell.m diff --git a/InAppSettingsKit/Views/IASKPSTitleValueSpecifierViewCell.h b/Classes/Utils/InAppSettingsKit/Views/IASKPSTitleValueSpecifierViewCell.h similarity index 100% rename from InAppSettingsKit/Views/IASKPSTitleValueSpecifierViewCell.h rename to Classes/Utils/InAppSettingsKit/Views/IASKPSTitleValueSpecifierViewCell.h diff --git a/InAppSettingsKit/Views/IASKPSTitleValueSpecifierViewCell.m b/Classes/Utils/InAppSettingsKit/Views/IASKPSTitleValueSpecifierViewCell.m similarity index 100% rename from InAppSettingsKit/Views/IASKPSTitleValueSpecifierViewCell.m rename to Classes/Utils/InAppSettingsKit/Views/IASKPSTitleValueSpecifierViewCell.m diff --git a/InAppSettingsKit/Views/IASKSlider.h b/Classes/Utils/InAppSettingsKit/Views/IASKSlider.h similarity index 100% rename from InAppSettingsKit/Views/IASKSlider.h rename to Classes/Utils/InAppSettingsKit/Views/IASKSlider.h diff --git a/InAppSettingsKit/Views/IASKSlider.m b/Classes/Utils/InAppSettingsKit/Views/IASKSlider.m similarity index 100% rename from InAppSettingsKit/Views/IASKSlider.m rename to Classes/Utils/InAppSettingsKit/Views/IASKSlider.m diff --git a/InAppSettingsKit/Views/IASKSwitch.h b/Classes/Utils/InAppSettingsKit/Views/IASKSwitch.h similarity index 100% rename from InAppSettingsKit/Views/IASKSwitch.h rename to Classes/Utils/InAppSettingsKit/Views/IASKSwitch.h diff --git a/InAppSettingsKit/Views/IASKSwitch.m b/Classes/Utils/InAppSettingsKit/Views/IASKSwitch.m similarity index 100% rename from InAppSettingsKit/Views/IASKSwitch.m rename to Classes/Utils/InAppSettingsKit/Views/IASKSwitch.m diff --git a/InAppSettingsKit/Views/IASKTextField.h b/Classes/Utils/InAppSettingsKit/Views/IASKTextField.h similarity index 100% rename from InAppSettingsKit/Views/IASKTextField.h rename to Classes/Utils/InAppSettingsKit/Views/IASKTextField.h diff --git a/InAppSettingsKit/Views/IASKTextField.m b/Classes/Utils/InAppSettingsKit/Views/IASKTextField.m similarity index 100% rename from InAppSettingsKit/Views/IASKTextField.m rename to Classes/Utils/InAppSettingsKit/Views/IASKTextField.m diff --git a/linphone.xcodeproj/project.pbxproj b/linphone.xcodeproj/project.pbxproj index b018832b9..b0ec8549a 100755 --- a/linphone.xcodeproj/project.pbxproj +++ b/linphone.xcodeproj/project.pbxproj @@ -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 = ""; }; D37DC6BF1594AE1800B2A5EB /* LinphoneCoreSettingsStore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LinphoneCoreSettingsStore.h; sourceTree = ""; }; D37DC6C01594AE1800B2A5EB /* LinphoneCoreSettingsStore.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LinphoneCoreSettingsStore.m; sourceTree = ""; }; - D37DC6C51594AE6F00B2A5EB /* IASKAppSettingsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKAppSettingsViewController.h; sourceTree = ""; }; - D37DC6C61594AE6F00B2A5EB /* IASKAppSettingsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = IASKAppSettingsViewController.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; - D37DC6C71594AE6F00B2A5EB /* IASKAppSettingsWebViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKAppSettingsWebViewController.h; sourceTree = ""; }; - D37DC6C81594AE6F00B2A5EB /* IASKAppSettingsWebViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = IASKAppSettingsWebViewController.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; - D37DC6C91594AE6F00B2A5EB /* IASKSpecifierValuesViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKSpecifierValuesViewController.h; sourceTree = ""; }; - D37DC6CA1594AE6F00B2A5EB /* IASKSpecifierValuesViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKSpecifierValuesViewController.m; sourceTree = ""; }; - D37DC6CB1594AE6F00B2A5EB /* IASKViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKViewController.h; sourceTree = ""; }; - D37DC6CD1594AE6F00B2A5EB /* IASKSettingsReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKSettingsReader.h; sourceTree = ""; }; - D37DC6CE1594AE6F00B2A5EB /* IASKSettingsReader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = IASKSettingsReader.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; - D37DC6CF1594AE6F00B2A5EB /* IASKSettingsStore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKSettingsStore.h; sourceTree = ""; }; - D37DC6D01594AE6F00B2A5EB /* IASKSettingsStore.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKSettingsStore.m; sourceTree = ""; }; - D37DC6D11594AE6F00B2A5EB /* IASKSettingsStoreFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKSettingsStoreFile.h; sourceTree = ""; }; - D37DC6D21594AE6F00B2A5EB /* IASKSettingsStoreFile.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = IASKSettingsStoreFile.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; - D37DC6D31594AE6F00B2A5EB /* IASKSettingsStoreUserDefaults.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKSettingsStoreUserDefaults.h; sourceTree = ""; }; - D37DC6D41594AE6F00B2A5EB /* IASKSettingsStoreUserDefaults.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKSettingsStoreUserDefaults.m; sourceTree = ""; }; - D37DC6D51594AE6F00B2A5EB /* IASKSpecifier.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKSpecifier.h; sourceTree = ""; }; - D37DC6D61594AE6F00B2A5EB /* IASKSpecifier.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKSpecifier.m; sourceTree = ""; }; - D37DC6D81594AE6F00B2A5EB /* IASKPSSliderSpecifierViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKPSSliderSpecifierViewCell.h; sourceTree = ""; }; - D37DC6D91594AE6F00B2A5EB /* IASKPSSliderSpecifierViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKPSSliderSpecifierViewCell.m; sourceTree = ""; }; - D37DC6DA1594AE6F00B2A5EB /* IASKPSTextFieldSpecifierViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKPSTextFieldSpecifierViewCell.h; sourceTree = ""; }; - D37DC6DB1594AE6F00B2A5EB /* IASKPSTextFieldSpecifierViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKPSTextFieldSpecifierViewCell.m; sourceTree = ""; }; - D37DC6DC1594AE6F00B2A5EB /* IASKPSTitleValueSpecifierViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKPSTitleValueSpecifierViewCell.h; sourceTree = ""; }; - D37DC6DD1594AE6F00B2A5EB /* IASKPSTitleValueSpecifierViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKPSTitleValueSpecifierViewCell.m; sourceTree = ""; }; - D37DC6E01594AE6F00B2A5EB /* IASKSlider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKSlider.h; sourceTree = ""; }; - D37DC6E11594AE6F00B2A5EB /* IASKSlider.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKSlider.m; sourceTree = ""; }; - D37DC6E21594AE6F00B2A5EB /* IASKSwitch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKSwitch.h; sourceTree = ""; }; - D37DC6E31594AE6F00B2A5EB /* IASKSwitch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKSwitch.m; sourceTree = ""; }; - D37DC6E41594AE6F00B2A5EB /* IASKTextField.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKTextField.h; sourceTree = ""; }; - D37DC6E51594AE6F00B2A5EB /* IASKTextField.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKTextField.m; sourceTree = ""; }; 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 = ""; }; + D3807FB815C28940005BE9BC /* DCRoundSwitch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DCRoundSwitch.m; sourceTree = ""; }; + D3807FB915C28940005BE9BC /* DCRoundSwitchKnobLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DCRoundSwitchKnobLayer.h; sourceTree = ""; }; + D3807FBA15C28940005BE9BC /* DCRoundSwitchKnobLayer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DCRoundSwitchKnobLayer.m; sourceTree = ""; }; + D3807FBB15C28940005BE9BC /* DCRoundSwitchOutlineLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DCRoundSwitchOutlineLayer.h; sourceTree = ""; }; + D3807FBC15C28940005BE9BC /* DCRoundSwitchOutlineLayer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DCRoundSwitchOutlineLayer.m; sourceTree = ""; }; + D3807FBD15C28940005BE9BC /* DCRoundSwitchToggleLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DCRoundSwitchToggleLayer.h; sourceTree = ""; }; + D3807FBE15C28940005BE9BC /* DCRoundSwitchToggleLayer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DCRoundSwitchToggleLayer.m; sourceTree = ""; }; + D3807FC915C2894A005BE9BC /* IASKAppSettingsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKAppSettingsViewController.h; sourceTree = ""; }; + D3807FCA15C2894A005BE9BC /* IASKAppSettingsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKAppSettingsViewController.m; sourceTree = ""; }; + D3807FCB15C2894A005BE9BC /* IASKAppSettingsWebViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKAppSettingsWebViewController.h; sourceTree = ""; }; + D3807FCC15C2894A005BE9BC /* IASKAppSettingsWebViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKAppSettingsWebViewController.m; sourceTree = ""; }; + D3807FCD15C2894A005BE9BC /* IASKSpecifierValuesViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKSpecifierValuesViewController.h; sourceTree = ""; }; + D3807FCE15C2894A005BE9BC /* IASKSpecifierValuesViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKSpecifierValuesViewController.m; sourceTree = ""; }; + D3807FCF15C2894A005BE9BC /* IASKViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKViewController.h; sourceTree = ""; }; + D3807FD115C2894A005BE9BC /* IASKSettingsReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKSettingsReader.h; sourceTree = ""; }; + D3807FD215C2894A005BE9BC /* IASKSettingsReader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKSettingsReader.m; sourceTree = ""; }; + D3807FD315C2894A005BE9BC /* IASKSettingsStore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKSettingsStore.h; sourceTree = ""; }; + D3807FD415C2894A005BE9BC /* IASKSettingsStore.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKSettingsStore.m; sourceTree = ""; }; + D3807FD515C2894A005BE9BC /* IASKSettingsStoreFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKSettingsStoreFile.h; sourceTree = ""; }; + D3807FD615C2894A005BE9BC /* IASKSettingsStoreFile.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKSettingsStoreFile.m; sourceTree = ""; }; + D3807FD715C2894A005BE9BC /* IASKSettingsStoreUserDefaults.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKSettingsStoreUserDefaults.h; sourceTree = ""; }; + D3807FD815C2894A005BE9BC /* IASKSettingsStoreUserDefaults.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKSettingsStoreUserDefaults.m; sourceTree = ""; }; + D3807FD915C2894A005BE9BC /* IASKSpecifier.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKSpecifier.h; sourceTree = ""; }; + D3807FDA15C2894A005BE9BC /* IASKSpecifier.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKSpecifier.m; sourceTree = ""; }; + D3807FDC15C2894A005BE9BC /* IASKPSSliderSpecifierViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKPSSliderSpecifierViewCell.h; sourceTree = ""; }; + D3807FDD15C2894A005BE9BC /* IASKPSSliderSpecifierViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKPSSliderSpecifierViewCell.m; sourceTree = ""; }; + D3807FDE15C2894A005BE9BC /* IASKPSTextFieldSpecifierViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKPSTextFieldSpecifierViewCell.h; sourceTree = ""; }; + D3807FDF15C2894A005BE9BC /* IASKPSTextFieldSpecifierViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKPSTextFieldSpecifierViewCell.m; sourceTree = ""; }; + D3807FE015C2894A005BE9BC /* IASKPSTitleValueSpecifierViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKPSTitleValueSpecifierViewCell.h; sourceTree = ""; }; + D3807FE115C2894A005BE9BC /* IASKPSTitleValueSpecifierViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKPSTitleValueSpecifierViewCell.m; sourceTree = ""; }; + D3807FE215C2894A005BE9BC /* IASKSlider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKSlider.h; sourceTree = ""; }; + D3807FE315C2894A005BE9BC /* IASKSlider.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKSlider.m; sourceTree = ""; }; + D3807FE415C2894A005BE9BC /* IASKSwitch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKSwitch.h; sourceTree = ""; }; + D3807FE515C2894A005BE9BC /* IASKSwitch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKSwitch.m; sourceTree = ""; }; + D3807FE615C2894A005BE9BC /* IASKTextField.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKTextField.h; sourceTree = ""; }; + D3807FE715C2894A005BE9BC /* IASKTextField.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKTextField.m; sourceTree = ""; }; + D380800415C28A7A005BE9BC /* UILinphone.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UILinphone.m; sourceTree = ""; }; D38327EB1580FE3A00FA0D23 /* contacts_default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = contacts_default.png; path = Resources/contacts_default.png; sourceTree = ""; }; D38327EC1580FE3A00FA0D23 /* contacts_selected.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = contacts_selected.png; path = Resources/contacts_selected.png; sourceTree = ""; }; D38327ED1580FE3A00FA0D23 /* dialer_default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = dialer_default.png; path = Resources/dialer_default.png; sourceTree = ""; }; @@ -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 = ""; }; - 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 = ""; + }; + D3807FC715C2894A005BE9BC /* InAppSettingsKit */ = { + isa = PBXGroup; + children = ( + D3807FC815C2894A005BE9BC /* Controllers */, + D3807FD015C2894A005BE9BC /* Models */, + D3807FDB15C2894A005BE9BC /* Views */, ); name = InAppSettingsKit; + path = Utils/InAppSettingsKit; sourceTree = ""; }; - 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 = ""; }; - 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 = ""; }; - 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 = ""; }; 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; };