Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

first commit

  • Loading branch information...
commit 2f4454f3caa0657ee1bed8beddf16fb2ab1fbc1d 0 parents
Sergey Vinogoradov authored
Showing with 14,636 additions and 0 deletions.
  1. BIN  AMTextFieldNumberPad.bundle/button_keyboard3.png
  2. BIN  AMTextFieldNumberPad.bundle/button_keyboard3_highlighted.png
  3. BIN  AMTextFieldNumberPad.bundle/button_keyboard4.png
  4. BIN  AMTextFieldNumberPad.bundle/button_keyboard4@2x.png
  5. BIN  AMTextFieldNumberPad.bundle/button_keyboard4_highlighted.png
  6. BIN  AMTextFieldNumberPad.bundle/button_keyboard4_highlighted@2x.png
  7. BIN  AMTextFieldNumberPad.bundle/button_keyboard4_transparent.png
  8. BIN  AMTextFieldNumberPad.bundle/button_keyboard4_transparent@2x.png
  9. BIN  AMTextFieldNumberPad.bundle/button_keyboard4_transparent_highlighted.png
  10. BIN  AMTextFieldNumberPad.bundle/button_keyboard4_transparent_highlighted@2x.png
  11. BIN  AMTextFieldNumberPad.bundle/button_keyboard_icon.png
  12. BIN  AMTextFieldNumberPad.bundle/button_keyboard_icon@2x.png
  13. BIN  AMTextFieldNumberPad.bundle/button_keyboard_icon_highlighted.png
  14. BIN  AMTextFieldNumberPad.bundle/button_keyboard_icon_highlighted@2x.png
  15. BIN  AMTextFieldNumberPad.bundle/button_keyboard_icon_transparent.png
  16. BIN  AMTextFieldNumberPad.bundle/button_keyboard_icon_transparent@2x.png
  17. BIN  AMTextFieldNumberPad.bundle/button_keyboard_icon_transparent_highlighted.png
  18. BIN  AMTextFieldNumberPad.bundle/button_keyboard_icon_transparent_highlighted@2x.png
  19. +39 −0 AMTextFieldNumberPad.h
  20. +340 −0 AMTextFieldNumberPad.m
  21. +22 −0 Demo/Classes/KeyboardNumberPadAppDelegate.h
  22. +88 −0 Demo/Classes/KeyboardNumberPadAppDelegate.m
  23. +16 −0 Demo/Classes/KeyboardNumberPadViewController.h
  24. +88 −0 Demo/Classes/KeyboardNumberPadViewController.m
  25. +30 −0 Demo/KeyboardNumberPad-Info.plist
  26. +280 −0 Demo/KeyboardNumberPad.xcodeproj/project.pbxproj
  27. +7 −0 Demo/KeyboardNumberPad.xcodeproj/project.xcworkspace/contents.xcworkspacedata
  28. +9,139 −0 ...ardNumberPad.xcodeproj/project.xcworkspace/xcuserdata/vinogradov.xcuserdatad/UserInterfaceState.xcuserstate
  29. +1,400 −0 Demo/KeyboardNumberPad.xcodeproj/vinogradov.mode1v3
  30. +222 −0 Demo/KeyboardNumberPad.xcodeproj/vinogradov.pbxuser
  31. +73 −0 Demo/KeyboardNumberPad.xcodeproj/xcuserdata/vinogradov.xcuserdatad/xcschemes/KeyboardNumberPad.xcscheme
  32. +22 −0 Demo/KeyboardNumberPad.xcodeproj/xcuserdata/vinogradov.xcuserdatad/xcschemes/xcschememanagement.plist
  33. +441 −0 Demo/KeyboardNumberPadViewController.xib
  34. +8 −0 Demo/KeyboardNumberPad_Prefix.pch
  35. +444 −0 Demo/MainWindow.xib
  36. 0  Demo/README
  37. +18 −0 Demo/build/Debug-iphonesimulator/KeyboardNumberPad.app.dSYM/Contents/Info.plist
  38. BIN  Demo/build/Debug-iphonesimulator/KeyboardNumberPad.app.dSYM/Contents/Resources/DWARF/KeyboardNumberPad
  39. BIN  Demo/build/Debug-iphonesimulator/KeyboardNumberPad.app/AMTextFieldNumberPad.bundle/button_keyboard3.png
  40. BIN  ...ld/Debug-iphonesimulator/KeyboardNumberPad.app/AMTextFieldNumberPad.bundle/button_keyboard3_highlighted.png
  41. BIN  Demo/build/Debug-iphonesimulator/KeyboardNumberPad.app/AMTextFieldNumberPad.bundle/button_keyboard4.png
  42. BIN  Demo/build/Debug-iphonesimulator/KeyboardNumberPad.app/AMTextFieldNumberPad.bundle/button_keyboard4@2x.png
  43. BIN  ...ld/Debug-iphonesimulator/KeyboardNumberPad.app/AMTextFieldNumberPad.bundle/button_keyboard4_highlighted.png
  44. BIN  ...Debug-iphonesimulator/KeyboardNumberPad.app/AMTextFieldNumberPad.bundle/button_keyboard4_highlighted@2x.png
  45. BIN  ...ld/Debug-iphonesimulator/KeyboardNumberPad.app/AMTextFieldNumberPad.bundle/button_keyboard4_transparent.png
  46. BIN  ...Debug-iphonesimulator/KeyboardNumberPad.app/AMTextFieldNumberPad.bundle/button_keyboard4_transparent@2x.png
  47. BIN  ...onesimulator/KeyboardNumberPad.app/AMTextFieldNumberPad.bundle/button_keyboard4_transparent_highlighted.png
  48. BIN  ...simulator/KeyboardNumberPad.app/AMTextFieldNumberPad.bundle/button_keyboard4_transparent_highlighted@2x.png
  49. BIN  Demo/build/Debug-iphonesimulator/KeyboardNumberPad.app/AMTextFieldNumberPad.bundle/button_keyboard_icon.png
  50. BIN  Demo/build/Debug-iphonesimulator/KeyboardNumberPad.app/AMTextFieldNumberPad.bundle/button_keyboard_icon@2x.png
  51. BIN  ...ebug-iphonesimulator/KeyboardNumberPad.app/AMTextFieldNumberPad.bundle/button_keyboard_icon_highlighted.png
  52. BIN  ...g-iphonesimulator/KeyboardNumberPad.app/AMTextFieldNumberPad.bundle/button_keyboard_icon_highlighted@2x.png
  53. BIN  ...ebug-iphonesimulator/KeyboardNumberPad.app/AMTextFieldNumberPad.bundle/button_keyboard_icon_transparent.png
  54. BIN  ...g-iphonesimulator/KeyboardNumberPad.app/AMTextFieldNumberPad.bundle/button_keyboard_icon_transparent@2x.png
  55. BIN  ...imulator/KeyboardNumberPad.app/AMTextFieldNumberPad.bundle/button_keyboard_icon_transparent_highlighted.png
  56. BIN  ...lator/KeyboardNumberPad.app/AMTextFieldNumberPad.bundle/button_keyboard_icon_transparent_highlighted@2x.png
  57. BIN  Demo/build/Debug-iphonesimulator/KeyboardNumberPad.app/Info.plist
  58. BIN  Demo/build/Debug-iphonesimulator/KeyboardNumberPad.app/KeyboardNumberPad
  59. BIN  Demo/build/Debug-iphonesimulator/KeyboardNumberPad.app/KeyboardNumberPadViewController.nib
  60. BIN  Demo/build/Debug-iphonesimulator/KeyboardNumberPad.app/MainWindow.nib
  61. +1 −0  Demo/build/Debug-iphonesimulator/KeyboardNumberPad.app/PkgInfo
  62. BIN  Demo/build/Debug-iphonesimulator/KeyboardNumberPad.app/heart.png
  63. +23 −0 Demo/build/KeyboardNumberPad.build/Debug-iphoneos/KeyboardNumberPad.build/KeyboardNumberPad.dep
  64. +22 −0 Demo/build/KeyboardNumberPad.build/Debug-iphoneos/KeyboardNumberPad.build/KeyboardNumberPad~.dep
  65. +306 −0 Demo/build/KeyboardNumberPad.build/Debug-iphoneos/KeyboardNumberPad.build/build-state.dat
  66. +283 −0 Demo/build/KeyboardNumberPad.build/Debug-iphoneos/KeyboardNumberPad.build/build-state~.dat
  67. BIN  ...oardNumberPad.build/Debug-iphonesimulator/KeyboardNumberPad.build/KeyboardNumberPad-all-target-headers.hmap
  68. BIN  ...eyboardNumberPad.build/Debug-iphonesimulator/KeyboardNumberPad.build/KeyboardNumberPad-generated-files.hmap
  69. BIN  ...oardNumberPad.build/Debug-iphonesimulator/KeyboardNumberPad.build/KeyboardNumberPad-own-target-headers.hmap
  70. BIN  ...eyboardNumberPad.build/Debug-iphonesimulator/KeyboardNumberPad.build/KeyboardNumberPad-project-headers.hmap
  71. +20 −0 Demo/build/KeyboardNumberPad.build/Debug-iphonesimulator/KeyboardNumberPad.build/KeyboardNumberPad.dep
  72. BIN  Demo/build/KeyboardNumberPad.build/Debug-iphonesimulator/KeyboardNumberPad.build/KeyboardNumberPad.hmap
  73. +18 −0 Demo/build/KeyboardNumberPad.build/Debug-iphonesimulator/KeyboardNumberPad.build/KeyboardNumberPad~.dep
  74. +4 −0 ...rPad.build/Debug-iphonesimulator/KeyboardNumberPad.build/Objects-normal/i386/KeyboardNumberPad.LinkFileList
  75. BIN  ...build/Debug-iphonesimulator/KeyboardNumberPad.build/Objects-normal/i386/KeyboardNumberPadViewController.o~$
  76. 0  ...build/Debug-iphonesimulator/KeyboardNumberPad.build/Objects-normal/i386/KeyboardNumberPadViewController.o~>
  77. +517 −0 Demo/build/KeyboardNumberPad.build/Debug-iphonesimulator/KeyboardNumberPad.build/build-state.dat
  78. +435 −0 Demo/build/KeyboardNumberPad.build/Debug-iphonesimulator/KeyboardNumberPad.build/build-state~.dat
  79. BIN  Demo/build/KeyboardNumberPad.build/KeyboardNumberPad.pbxindex/categories.pbxbtree
  80. BIN  Demo/build/KeyboardNumberPad.build/KeyboardNumberPad.pbxindex/cdecls.pbxbtree
  81. BIN  Demo/build/KeyboardNumberPad.build/KeyboardNumberPad.pbxindex/decls.pbxbtree
  82. BIN  Demo/build/KeyboardNumberPad.build/KeyboardNumberPad.pbxindex/files.pbxbtree
  83. BIN  Demo/build/KeyboardNumberPad.build/KeyboardNumberPad.pbxindex/imports.pbxbtree
  84. BIN  Demo/build/KeyboardNumberPad.build/KeyboardNumberPad.pbxindex/pbxindex.header
  85. BIN  Demo/build/KeyboardNumberPad.build/KeyboardNumberPad.pbxindex/protocols.pbxbtree
  86. BIN  Demo/build/KeyboardNumberPad.build/KeyboardNumberPad.pbxindex/refs.pbxbtree
  87. BIN  Demo/build/KeyboardNumberPad.build/KeyboardNumberPad.pbxindex/strings.pbxstrings/control
  88. BIN  Demo/build/KeyboardNumberPad.build/KeyboardNumberPad.pbxindex/strings.pbxstrings/strings
  89. BIN  Demo/build/KeyboardNumberPad.build/KeyboardNumberPad.pbxindex/subclasses.pbxbtree
  90. BIN  Demo/build/KeyboardNumberPad.build/KeyboardNumberPad.pbxindex/symbols0.pbxsymbols
  91. +23 −0 Demo/build/KeyboardNumberPad.build/Release-iphoneos/KeyboardNumberPad.build/KeyboardNumberPad.dep
  92. +290 −0 Demo/build/KeyboardNumberPad.build/Release-iphoneos/KeyboardNumberPad.build/build-state.dat
  93. BIN  Demo/heart.png
  94. +17 −0 Demo/main.m
BIN  AMTextFieldNumberPad.bundle/button_keyboard3.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  AMTextFieldNumberPad.bundle/button_keyboard3_highlighted.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  AMTextFieldNumberPad.bundle/button_keyboard4.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  AMTextFieldNumberPad.bundle/button_keyboard4@2x.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  AMTextFieldNumberPad.bundle/button_keyboard4_highlighted.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  AMTextFieldNumberPad.bundle/button_keyboard4_highlighted@2x.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  AMTextFieldNumberPad.bundle/button_keyboard4_transparent.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  AMTextFieldNumberPad.bundle/button_keyboard4_transparent@2x.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  AMTextFieldNumberPad.bundle/button_keyboard4_transparent_highlighted.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  AMTextFieldNumberPad.bundle/button_keyboard4_transparent_highlighted@2x.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  AMTextFieldNumberPad.bundle/button_keyboard_icon.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  AMTextFieldNumberPad.bundle/button_keyboard_icon@2x.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  AMTextFieldNumberPad.bundle/button_keyboard_icon_highlighted.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  AMTextFieldNumberPad.bundle/button_keyboard_icon_highlighted@2x.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  AMTextFieldNumberPad.bundle/button_keyboard_icon_transparent.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  AMTextFieldNumberPad.bundle/button_keyboard_icon_transparent@2x.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  AMTextFieldNumberPad.bundle/button_keyboard_icon_transparent_highlighted.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  AMTextFieldNumberPad.bundle/button_keyboard_icon_transparent_highlighted@2x.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
39 AMTextFieldNumberPad.h
@@ -0,0 +1,39 @@
+//
+// AMTextFieldNumberPad.h
+// KeyboardNumberPad
+//
+// Created by Vinogradov Sergey on 13.06.11.
+// Copyright 2011 AppMake.Ru. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+typedef enum {
+ ButtonIconNone = 0,
+ ButtonIconKeyboard = 1,
+ ButtonIconCustom = 2
+} ButtonIcon;
+
+@interface AMTextFieldNumberPad : UITextField <UITextFieldDelegate> {
+ UIButton *buttonDone;
+ NSString *buttonText;
+ UIImage *buttonImage;
+
+ CGRect buttonRectShow;
+ CGRect buttonRectHide;
+
+ CGFloat buttonDurationShow;
+ CGFloat buttonDurationHide;
+
+ ButtonIcon buttonIcon;
+
+ BOOL isKeyboardShow;
+ BOOL isPortrait;
+ BOOL isRotating;
+}
+
+@property (nonatomic, retain) NSString *buttonText;
+@property (nonatomic, retain) UIImage *buttonImage;
+@property (nonatomic, assign) ButtonIcon buttonIcon;
+
+@end
340 AMTextFieldNumberPad.m
@@ -0,0 +1,340 @@
+//
+// AMTextFieldNumberPad.m
+// KeyboardNumberPad
+//
+// Created by Vinogradov Sergey on 13.06.11.
+// Copyright 2011 AppMake.Ru. All rights reserved.
+//
+
+#import "AMTextFieldNumberPad.h"
+
+@interface AMTextFieldNumberPad (Private)
+- (void)setup;
+- (id)getKeyboardWindow;
+- (void)checkKeyboardButton;
+- (void)removeKeyboardButton;
+- (void)changeButtonParams;
+@end
+
+@implementation AMTextFieldNumberPad
+
+@synthesize buttonText, buttonImage, buttonIcon;
+
+#pragma mark -
+#pragma mark Initializate
+
+- (id)initWithFrame:(CGRect)frame {
+ if ((self == [super initWithFrame:frame])) {
+ [self setup];
+ }
+ return self;
+}
+
+- (id)init {
+ if ((self == [super init])) {
+ [self setup];
+ }
+ return self;
+}
+
+- (void)awakeFromNib {
+ [self setup];
+}
+
+- (void)setup {
+
+ // Регистрируем события изменения состояния клавиатуры, UITextField и изменения ориентации экрана
+ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
+ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
+
+ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didBeginEditing:) name:UITextFieldTextDidBeginEditingNotification object:nil];
+ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didEndEditing:) name:UITextFieldTextDidEndEditingNotification object:nil];
+ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationDidChange:) name:UIDeviceOrientationDidChangeNotification object:nil];
+
+ buttonIcon = ButtonIconNone;
+}
+
+#pragma mark -
+#pragma mark Actions
+
+- (void)actionKeyboardHide:(UIButton *)sender {
+ [self resignFirstResponder];
+}
+
+#pragma mark -
+#pragma mark Setters
+
+- (void)setButtonText:(NSString *)theButtonText {
+ [theButtonText retain];
+ [buttonText release];
+ buttonText = theButtonText;
+ buttonIcon = ButtonIconNone;
+}
+
+- (void)setButtonImage:(UIImage *)theButtonImage {
+ [theButtonImage retain];
+ [buttonImage release];
+ buttonImage = theButtonImage;
+ buttonIcon = ButtonIconCustom;
+}
+
+- (void)setButtonIcon:(ButtonIcon)theButtonIcon {
+ buttonIcon = theButtonIcon;
+}
+
+#pragma mark -
+#pragma mark Methods
+
+- (id)getKeyboardWindow {
+ UIWindow *windowTemp = nil;
+ for (UIWindow *w in [[UIApplication sharedApplication] windows]) {
+ if ([NSStringFromClass([w class]) isEqualToString:@"UITextEffectsWindow"]) {
+ windowTemp = w;
+ break;
+ }
+ }
+ return windowTemp;
+}
+
+- (void)checkKeyboardButton {
+
+ // Пробуем найти нужное окно
+ id windowTemp = [self getKeyboardWindow];
+
+ // Если нужное окно найдено
+ if (windowTemp) {
+
+ // Пробуем удалить кнопку (мы ее могли создать раньше, в этом или другом UITextField)
+ for (UIView *v in [windowTemp subviews]) {
+ if ([NSStringFromClass([v class]) isEqualToString:@"UIButton"]) {
+ [v setHidden:FALSE];
+ buttonDone = [(UIButton *)v retain];
+ [buttonDone removeTarget:nil action:NULL forControlEvents:UIControlEventAllEvents];
+ }
+ }
+
+ // Создаем кнопку если она еще не создана
+ if (!buttonDone) {
+ UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
+ [button setAdjustsImageWhenHighlighted:NO];
+ [[button titleLabel] setLineBreakMode:UILineBreakModeWordWrap];
+ [[button titleLabel] setNumberOfLines:0];
+ [[button titleLabel] setTextAlignment:UITextAlignmentCenter];
+ [button retain];
+ [windowTemp addSubview:button];
+
+ [buttonDone release];
+ buttonDone = button;
+ }
+
+ // Устанавливаем позицию кнопки
+ [self changeButtonParams];
+
+ // Добавляем событие
+ [buttonDone addTarget:self action:@selector(actionKeyboardHide:) forControlEvents:UIControlEventTouchUpInside];
+
+ // Если клавиатура обычная (UIKeyboardAppearanceDefault)
+ if (self.keyboardAppearance == UIKeyboardAppearanceDefault) {
+ if ([[[UIDevice currentDevice] systemVersion] hasPrefix:@"3"]) {
+ [buttonDone setBackgroundImage:[UIImage imageNamed:@"AMTextFieldNumberPad.bundle/button_keyboard3.png"] forState:UIControlStateNormal];
+ [buttonDone setBackgroundImage:[UIImage imageNamed:@"AMTextFieldNumberPad.bundle/button_keyboard3_highlighted.png"] forState:UIControlStateHighlighted];
+ }
+ else {
+ [buttonDone setBackgroundImage:[UIImage imageNamed:@"AMTextFieldNumberPad.bundle/button_keyboard4.png"] forState:UIControlStateNormal];
+ [buttonDone setBackgroundImage:[UIImage imageNamed:@"AMTextFieldNumberPad.bundle/button_keyboard4_highlighted.png"] forState:UIControlStateHighlighted];
+ }
+ }
+ // Если клавиатура прозрачная (UIKeyboardAppearanceAlert)
+ else {
+ if ([[[UIDevice currentDevice] systemVersion] hasPrefix:@"3"]) {
+ [buttonDone setBackgroundImage:[UIImage imageNamed:@"AMTextFieldNumberPad.bundle/button_keyboard3_transparent.png"] forState:UIControlStateNormal];
+ [buttonDone setBackgroundImage:[UIImage imageNamed:@"AMTextFieldNumberPad.bundle/button_keyboard3_transparent_highlighted.png"] forState:UIControlStateHighlighted];
+ }
+ else {
+ [buttonDone setBackgroundImage:[UIImage imageNamed:@"AMTextFieldNumberPad.bundle/button_keyboard4_transparent.png"] forState:UIControlStateNormal];
+ [buttonDone setBackgroundImage:[UIImage imageNamed:@"AMTextFieldNumberPad.bundle/button_keyboard4_transparent_highlighted.png"] forState:UIControlStateHighlighted];
+ }
+ }
+
+ // Добавляем текст если он есть
+ if (buttonIcon == ButtonIconNone) {
+
+ if (self.keyboardAppearance == UIKeyboardAppearanceDefault) {
+ [buttonDone setTitleColor:[UIColor colorWithRed:71.0/255.0 green:78.0/255.0 blue:91.0/255.0 alpha:1.0] forState:UIControlStateNormal];
+ [buttonDone setTitleColor:[UIColor colorWithRed:255.0 green:255.0 blue:255.0 alpha:1.0] forState:UIControlStateHighlighted];
+ [buttonDone setTitleShadowColor:[UIColor colorWithRed:255.0 green:255.0 blue:255.0 alpha:0.5] forState:UIControlStateNormal];
+ [buttonDone setTitleShadowColor:[UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5] forState:UIControlStateHighlighted];
+ [[buttonDone titleLabel] setShadowOffset:CGSizeMake(0.00f, 1.00f)];
+ }
+ else {
+ [buttonDone setTitleColor:[UIColor colorWithRed:255.0 green:255.0 blue:255.0 alpha:1.0] forState:UIControlStateNormal];
+ [buttonDone setTitleColor:[UIColor colorWithRed:255.0 green:255.0 blue:255.0 alpha:1.0] forState:UIControlStateHighlighted];
+ [buttonDone setTitleShadowColor:[UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5] forState:UIControlStateNormal];
+ [buttonDone setTitleShadowColor:[UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5] forState:UIControlStateHighlighted];
+ [[buttonDone titleLabel] setShadowOffset:CGSizeMake(0.00f, -1.00f)];
+ }
+
+ [buttonDone setImage:nil forState:UIControlStateNormal];
+ [buttonDone setImage:nil forState:UIControlStateHighlighted];
+ [[buttonDone titleLabel] setFont:[UIFont fontWithName:@"HelveticaNeue-Bold" size:14.0]];
+ [buttonDone setReversesTitleShadowWhenHighlighted:TRUE];
+
+ // Если текст уже определен
+ if (buttonText)
+ [buttonDone setTitle:buttonText forState:UIControlStateNormal];
+ // Пытаемся подобрать текст из UIReturnKeyType
+ else {
+ NSString *title = nil;
+ if (self.returnKeyType == UIReturnKeyDone)
+ title = @"DONE";
+ else if (self.returnKeyType == UIReturnKeyEmergencyCall)
+ title = @"EMERGENCY CALL";
+ else if (self.returnKeyType == UIReturnKeyGo)
+ title = @"GO";
+ else if (self.returnKeyType == UIReturnKeyGoogle)
+ title = @"GOOGLE";
+ else if (self.returnKeyType == UIReturnKeyJoin)
+ title = @"JOIN";
+ else if (self.returnKeyType == UIReturnKeyNext)
+ title = @"NEXT";
+ else if (self.returnKeyType == UIReturnKeyRoute)
+ title = @"ROUTE";
+ else if (self.returnKeyType == UIReturnKeySearch)
+ title = @"SEARCH";
+ else if (self.returnKeyType == UIReturnKeySend)
+ title = @"SEND";
+ else if (self.returnKeyType == UIReturnKeyYahoo)
+ title = @"YAHOO";
+ else
+ title = @"RETURN";
+ [buttonDone setTitle:NSLocalizedString(title, @"") forState:UIControlStateNormal];
+ }
+ }
+ else if (buttonIcon == ButtonIconKeyboard) {
+ [buttonDone setTitle:@"" forState:UIControlStateNormal];
+ [buttonDone setImage:[UIImage imageNamed:((self.keyboardAppearance == UIKeyboardAppearanceDefault) ? @"AMTextFieldNumberPad.bundle/button_keyboard_icon.png" : @"AMTextFieldNumberPad.bundle/button_keyboard_icon_transparent.png")] forState:UIControlStateNormal];
+ [buttonDone setImage:[UIImage imageNamed:((self.keyboardAppearance == UIKeyboardAppearanceDefault) ? @"AMTextFieldNumberPad.bundle/button_keyboard_icon_highlighted.png" : @"AMTextFieldNumberPad.bundle/button_keyboard_icon_transparent_highlighted.png")] forState:UIControlStateHighlighted];
+ }
+ else if (buttonIcon == ButtonIconCustom && buttonImage) {
+ [buttonDone setTitle:@"" forState:UIControlStateNormal];
+ [buttonDone setImage:buttonImage forState:UIControlStateNormal];
+ [buttonDone setImage:nil forState:UIControlStateHighlighted];
+ }
+ }
+}
+
+- (void)removeKeyboardButton {
+
+ // Пробуем найти нужное окно
+ id windowTemp = [self getKeyboardWindow];
+
+ // Если нужное окно найдено
+ if (windowTemp) {
+
+ // Пробуем удалить кнопку
+ for (UIView *v in [windowTemp subviews]) {
+ if ([NSStringFromClass([v class]) isEqualToString:@"UIButton"]) {
+ [v setHidden:TRUE];
+ }
+ }
+ }
+}
+
+- (void)changeButtonParams {
+ if (self.editing) {
+ [buttonDone setFrame:buttonRectShow];
+ }
+}
+
+#pragma mark -
+#pragma mark Notifications
+
+- (void)orientationDidChange:(NSNotification *)theNotification {
+
+ isRotating = TRUE;
+
+ isPortrait = UIDeviceOrientationIsPortrait([UIDevice currentDevice].orientation);
+ buttonRectShow = (isPortrait) ? CGRectMake(0.00f, 427.00f, 105.00f, 53.00f) : CGRectMake(0.00f, 281.00f, 158.00f, 39.00f);
+ buttonRectHide = (isPortrait) ? CGRectMake(0.00f, 644.00f, 105.00f, 53.00f) : CGRectMake(0.00f, 443.00f, 158.00f, 39.00f);
+
+ [self changeButtonParams];
+}
+
+- (void)didBeginEditing:(NSNotification *)theNotification {
+ if (self.editing)
+ [self checkKeyboardButton];
+}
+
+- (void)didEndEditing:(NSNotification *)theNotification {
+ if (!self.editing)
+ [self removeKeyboardButton];
+}
+
+- (void)keyboardWillShow:(NSNotification *)theNotification {
+
+ isRotating = FALSE;
+
+ if (!self.editing || isKeyboardShow) {
+ return;
+ }
+
+ // Получаем нужное окно
+ UIWindow *windowTemp = [self getKeyboardWindow];
+
+ // Проверяем, создана ли кнопка
+ [self checkKeyboardButton];
+
+ // Если нужное окно найдено и кнопка существует
+ if (windowTemp && buttonDone) {
+
+ // Включаем отображение кнопки (на тот случай если была выключена)
+ [buttonDone setHidden:FALSE];
+
+ // Тянем кнопку вверх вместе с клавиатурой
+ [buttonDone setFrame:buttonRectHide];
+ [UIView animateWithDuration:0.3 delay:0 options:UIViewAnimationCurveEaseIn animations:^{
+ [buttonDone setFrame:buttonRectShow];
+ } completion:nil];
+ }
+}
+
+- (void)keyboardWillHide:(NSNotification *)theNotification {
+
+ if (!self.editing || isRotating) {
+ return;
+ }
+
+ // Получаем нужное окн
+ UIWindow *windowTemp = [self getKeyboardWindow];
+
+ // Проверяем, создана ли кнопка
+ [self checkKeyboardButton];
+
+ // Если нужное окно найдено и кнопка существует
+ if (windowTemp && buttonDone) {
+
+ // Тянем кнопку вниз вместе с клавиатурой
+ [UIView animateWithDuration:0.3 delay:0 options:UIViewAnimationCurveEaseOut animations:^{
+ [buttonDone setFrame:buttonRectHide];
+ } completion:^(BOOL finished) {
+
+ // И потом прячем ее
+ [buttonDone setHidden:TRUE];
+
+ isKeyboardShow = FALSE;
+ }];
+ }
+}
+
+#pragma mark -
+#pragma mark Memory managment
+
+- (void)dealloc {
+ [[NSNotificationCenter defaultCenter] removeObserver:self];
+ [buttonDone release];
+ [buttonText release];
+ [buttonImage release];
+ [super dealloc];
+}
+
+@end
22 Demo/Classes/KeyboardNumberPadAppDelegate.h
@@ -0,0 +1,22 @@
+//
+// KeyboardNumberPadAppDelegate.h
+// KeyboardNumberPad
+//
+// Created by Vinogradov Sergey on 11.06.11.
+// Copyright 2011 AppMake.Ru. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@class KeyboardNumberPadViewController;
+
+@interface KeyboardNumberPadAppDelegate : NSObject <UIApplicationDelegate> {
+ UIWindow *window;
+ KeyboardNumberPadViewController *viewController;
+}
+
+@property (nonatomic, retain) IBOutlet UIWindow *window;
+@property (nonatomic, retain) IBOutlet KeyboardNumberPadViewController *viewController;
+
+@end
+
88 Demo/Classes/KeyboardNumberPadAppDelegate.m
@@ -0,0 +1,88 @@
+//
+// KeyboardNumberPadAppDelegate.m
+// KeyboardNumberPad
+//
+// Created by Vinogradov Sergey on 11.06.11.
+// Copyright 2011 AppMake.Ru. All rights reserved.
+//
+
+#import "KeyboardNumberPadAppDelegate.h"
+#import "KeyboardNumberPadViewController.h"
+
+@implementation KeyboardNumberPadAppDelegate
+
+@synthesize window;
+@synthesize viewController;
+
+
+#pragma mark -
+#pragma mark Application lifecycle
+
+- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
+
+ // Override point for customization after application launch.
+
+ // Set the view controller as the window's root view controller and display.
+ self.window.rootViewController = self.viewController;
+ [self.window makeKeyAndVisible];
+
+ return YES;
+}
+
+
+- (void)applicationWillResignActive:(UIApplication *)application {
+ /*
+ Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
+ Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
+ */
+}
+
+
+- (void)applicationDidEnterBackground:(UIApplication *)application {
+ /*
+ Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
+ If your application supports background execution, called instead of applicationWillTerminate: when the user quits.
+ */
+}
+
+
+- (void)applicationWillEnterForeground:(UIApplication *)application {
+ /*
+ Called as part of transition from the background to the inactive state: here you can undo many of the changes made on entering the background.
+ */
+}
+
+
+- (void)applicationDidBecomeActive:(UIApplication *)application {
+ /*
+ Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
+ */
+}
+
+
+- (void)applicationWillTerminate:(UIApplication *)application {
+ /*
+ Called when the application is about to terminate.
+ See also applicationDidEnterBackground:.
+ */
+}
+
+
+#pragma mark -
+#pragma mark Memory management
+
+- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {
+ /*
+ Free up as much memory as possible by purging cached data objects that can be recreated (or reloaded from disk) later.
+ */
+}
+
+
+- (void)dealloc {
+ [viewController release];
+ [window release];
+ [super dealloc];
+}
+
+
+@end
16 Demo/Classes/KeyboardNumberPadViewController.h
@@ -0,0 +1,16 @@
+//
+// KeyboardNumberPadViewController.h
+// KeyboardNumberPad
+//
+// Created by Vinogradov Sergey on 11.06.11.
+// Copyright 2011 AppMake.Ru. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+#import "AMTextFieldNumberPad.h"
+
+@interface KeyboardNumberPadViewController : UIViewController {
+ IBOutlet AMTextFieldNumberPad *textField;
+}
+
+@end
88 Demo/Classes/KeyboardNumberPadViewController.m
@@ -0,0 +1,88 @@
+//
+// KeyboardNumberPadViewController.m
+// KeyboardNumberPad
+//
+// Created by Vinogradov Sergey on 11.06.11.
+// Copyright 2011 AppMake.Ru. All rights reserved.
+//
+
+#import "KeyboardNumberPadViewController.h"
+#import "AMTextFieldNumberPad.h"
+
+@implementation KeyboardNumberPadViewController
+
+#pragma mark -
+#pragma mark Initializate
+
+- (void)viewDidLoad {
+ [super viewDidLoad];
+
+ // Вызов из Interface Builder
+ [textField setButtonIcon:ButtonIconKeyboard];
+
+ // Прозрачная клавиатура с UIReturnKeyGo
+ AMTextFieldNumberPad *textField2 = [[AMTextFieldNumberPad alloc] initWithFrame:CGRectMake(20.00f, 70.00f, 280.00f, 31.00f)];
+ [textField2 setBorderStyle:UITextBorderStyleRoundedRect];
+ [textField2 setKeyboardType:UIKeyboardTypeNumberPad];
+ [textField2 setReturnKeyType:UIReturnKeyGo];
+ [textField2 setKeyboardAppearance:UIKeyboardAppearanceAlert];
+ [textField2 setPlaceholder:@"Прозрачная с UIReturnKeyGo"];
+ [self.view addSubview:textField2];
+ [textField2 release];
+
+ // Обычная клавиатура с иконкой клавиатуры
+ AMTextFieldNumberPad *textField3 = [[AMTextFieldNumberPad alloc] initWithFrame:CGRectMake(20.00f, 120.00f, 280.00f, 31.00f)];
+ [textField3 setBorderStyle:UITextBorderStyleRoundedRect];
+ [textField3 setKeyboardType:UIKeyboardTypeNumberPad];
+ [textField3 setKeyboardAppearance:UIKeyboardAppearanceDefault];
+ [textField3 setButtonIcon:ButtonIconKeyboard];
+ [textField3 setPlaceholder:@"Обычная с иконкой клавиатуры"];
+ [self.view addSubview:textField3];
+ [textField3 release];
+
+ // Прозрачная клавиатура с иконкой клавиатуры
+ AMTextFieldNumberPad *textField4 = [[AMTextFieldNumberPad alloc] initWithFrame:CGRectMake(20.00f, 170.00f, 280.00f, 31.00f)];
+ [textField4 setBorderStyle:UITextBorderStyleRoundedRect];
+ [textField4 setKeyboardType:UIKeyboardTypeNumberPad];
+ [textField4 setKeyboardAppearance:UIKeyboardAppearanceAlert];
+ [textField4 setButtonIcon:ButtonIconKeyboard];
+ [textField4 setPlaceholder:@"Прозрачная с иконкой клавиатуры"];
+ [self.view addSubview:textField4];
+ [textField4 release];
+
+ // Обычная клавиатура с кастомной иконкой
+ AMTextFieldNumberPad *textField5 = [[AMTextFieldNumberPad alloc] initWithFrame:CGRectMake(20.00f, 220.00f, 280.00f, 31.00f)];
+ [textField5 setBorderStyle:UITextBorderStyleRoundedRect];
+ [textField5 setKeyboardType:UIKeyboardTypeNumberPad];
+ [textField5 setKeyboardAppearance:UIKeyboardAppearanceDefault];
+ [textField5 setButtonImage:[UIImage imageNamed:@"heart.png"]];
+ [textField5 setPlaceholder:@"Обычная с кастомной иконкой"];
+ [self.view addSubview:textField5];
+ [textField5 release];
+
+ // Обычная клавиатура с текстом HABRAHABR
+ AMTextFieldNumberPad *textField6 = [[AMTextFieldNumberPad alloc] initWithFrame:CGRectMake(20.00f, 270.00f, 280.00f, 31.00f)];
+ [textField6 setBorderStyle:UITextBorderStyleRoundedRect];
+ [textField6 setKeyboardType:UIKeyboardTypeNumberPad];
+ [textField6 setButtonText:@"HABRAHABR"];
+ [textField6 setPlaceholder:@"Обычная c текстом"];
+ [self.view addSubview:textField6];
+ [textField6 release];
+}
+
+#pragma mark -
+#pragma mark Other
+
+- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
+ return (interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown || interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight);
+}
+
+#pragma mark -
+#pragma mark Memory managment
+
+- (void)dealloc {
+ [textField release];
+ [super dealloc];
+}
+
+@end
30 Demo/KeyboardNumberPad-Info.plist
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleDevelopmentRegion</key>
+ <string>English</string>
+ <key>CFBundleDisplayName</key>
+ <string>${PRODUCT_NAME}</string>
+ <key>CFBundleExecutable</key>
+ <string>${EXECUTABLE_NAME}</string>
+ <key>CFBundleIconFile</key>
+ <string></string>
+ <key>CFBundleIdentifier</key>
+ <string>ru.appmake</string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundleName</key>
+ <string>${PRODUCT_NAME}</string>
+ <key>CFBundlePackageType</key>
+ <string>APPL</string>
+ <key>CFBundleSignature</key>
+ <string>????</string>
+ <key>CFBundleVersion</key>
+ <string>1.0</string>
+ <key>LSRequiresIPhoneOS</key>
+ <true/>
+ <key>NSMainNibFile</key>
+ <string>MainWindow</string>
+</dict>
+</plist>
280 Demo/KeyboardNumberPad.xcodeproj/project.pbxproj
@@ -0,0 +1,280 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 46;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 1D3623260D0F684500981E51 /* KeyboardNumberPadAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D3623250D0F684500981E51 /* KeyboardNumberPadAppDelegate.m */; };
+ 1D60589B0D05DD56006BFB54 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; };
+ 1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D30AB110D05D00D00671497 /* Foundation.framework */; };
+ 1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */; };
+ 288765A50DF7441C002DB57D /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 288765A40DF7441C002DB57D /* CoreGraphics.framework */; };
+ 2899E5220DE3E06400AC0155 /* KeyboardNumberPadViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2899E5210DE3E06400AC0155 /* KeyboardNumberPadViewController.xib */; };
+ 28AD733F0D9D9553002E5188 /* MainWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 28AD733E0D9D9553002E5188 /* MainWindow.xib */; };
+ 28D7ACF80DDB3853001CB0EB /* KeyboardNumberPadViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 28D7ACF70DDB3853001CB0EB /* KeyboardNumberPadViewController.m */; };
+ D1CF0ADB13A68F6000A62F51 /* heart.png in Resources */ = {isa = PBXBuildFile; fileRef = D1CF0ADA13A68F6000A62F51 /* heart.png */; };
+ D1CF0B1B13A6A09200A62F51 /* AMTextFieldNumberPad.bundle in Resources */ = {isa = PBXBuildFile; fileRef = D1CF0B1813A6A09200A62F51 /* AMTextFieldNumberPad.bundle */; };
+ D1CF0B1C13A6A09200A62F51 /* AMTextFieldNumberPad.m in Sources */ = {isa = PBXBuildFile; fileRef = D1CF0B1A13A6A09200A62F51 /* AMTextFieldNumberPad.m */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXFileReference section */
+ 1D30AB110D05D00D00671497 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
+ 1D3623240D0F684500981E51 /* KeyboardNumberPadAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KeyboardNumberPadAppDelegate.h; sourceTree = "<group>"; };
+ 1D3623250D0F684500981E51 /* KeyboardNumberPadAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KeyboardNumberPadAppDelegate.m; sourceTree = "<group>"; };
+ 1D6058910D05DD3D006BFB54 /* KeyboardNumberPad.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = KeyboardNumberPad.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
+ 288765A40DF7441C002DB57D /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
+ 2899E5210DE3E06400AC0155 /* KeyboardNumberPadViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KeyboardNumberPadViewController.xib; sourceTree = "<group>"; };
+ 28AD733E0D9D9553002E5188 /* MainWindow.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MainWindow.xib; sourceTree = "<group>"; };
+ 28D7ACF60DDB3853001CB0EB /* KeyboardNumberPadViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KeyboardNumberPadViewController.h; sourceTree = "<group>"; };
+ 28D7ACF70DDB3853001CB0EB /* KeyboardNumberPadViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KeyboardNumberPadViewController.m; sourceTree = "<group>"; };
+ 29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
+ 32CA4F630368D1EE00C91783 /* KeyboardNumberPad_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KeyboardNumberPad_Prefix.pch; sourceTree = "<group>"; };
+ 8D1107310486CEB800E47090 /* KeyboardNumberPad-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "KeyboardNumberPad-Info.plist"; plistStructureDefinitionIdentifier = "com.apple.xcode.plist.structure-definition.iphone.info-plist"; sourceTree = "<group>"; };
+ D1CF0ADA13A68F6000A62F51 /* heart.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = heart.png; sourceTree = "<group>"; };
+ D1CF0B1813A6A09200A62F51 /* AMTextFieldNumberPad.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; name = AMTextFieldNumberPad.bundle; path = ../../AMTextFieldNumberPad.bundle; sourceTree = "<group>"; };
+ D1CF0B1913A6A09200A62F51 /* AMTextFieldNumberPad.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AMTextFieldNumberPad.h; path = ../../AMTextFieldNumberPad.h; sourceTree = "<group>"; };
+ D1CF0B1A13A6A09200A62F51 /* AMTextFieldNumberPad.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AMTextFieldNumberPad.m; path = ../../AMTextFieldNumberPad.m; sourceTree = "<group>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 1D60588F0D05DD3D006BFB54 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */,
+ 1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */,
+ 288765A50DF7441C002DB57D /* CoreGraphics.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 080E96DDFE201D6D7F000001 /* Classes */ = {
+ isa = PBXGroup;
+ children = (
+ D1CF0B1813A6A09200A62F51 /* AMTextFieldNumberPad.bundle */,
+ D1CF0B1913A6A09200A62F51 /* AMTextFieldNumberPad.h */,
+ D1CF0B1A13A6A09200A62F51 /* AMTextFieldNumberPad.m */,
+ 1D3623240D0F684500981E51 /* KeyboardNumberPadAppDelegate.h */,
+ 1D3623250D0F684500981E51 /* KeyboardNumberPadAppDelegate.m */,
+ 28D7ACF60DDB3853001CB0EB /* KeyboardNumberPadViewController.h */,
+ 28D7ACF70DDB3853001CB0EB /* KeyboardNumberPadViewController.m */,
+ );
+ path = Classes;
+ sourceTree = "<group>";
+ };
+ 19C28FACFE9D520D11CA2CBB /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 1D6058910D05DD3D006BFB54 /* KeyboardNumberPad.app */,
+ );
+ name = Products;
+ sourceTree = "<group>";
+ };
+ 29B97314FDCFA39411CA2CEA /* CustomTemplate */ = {
+ isa = PBXGroup;
+ children = (
+ 080E96DDFE201D6D7F000001 /* Classes */,
+ 29B97315FDCFA39411CA2CEA /* Other Sources */,
+ 29B97317FDCFA39411CA2CEA /* Resources */,
+ 29B97323FDCFA39411CA2CEA /* Frameworks */,
+ 19C28FACFE9D520D11CA2CBB /* Products */,
+ );
+ name = CustomTemplate;
+ sourceTree = "<group>";
+ };
+ 29B97315FDCFA39411CA2CEA /* Other Sources */ = {
+ isa = PBXGroup;
+ children = (
+ 32CA4F630368D1EE00C91783 /* KeyboardNumberPad_Prefix.pch */,
+ 29B97316FDCFA39411CA2CEA /* main.m */,
+ );
+ name = "Other Sources";
+ sourceTree = "<group>";
+ };
+ 29B97317FDCFA39411CA2CEA /* Resources */ = {
+ isa = PBXGroup;
+ children = (
+ D1CF0ADA13A68F6000A62F51 /* heart.png */,
+ 2899E5210DE3E06400AC0155 /* KeyboardNumberPadViewController.xib */,
+ 28AD733E0D9D9553002E5188 /* MainWindow.xib */,
+ 8D1107310486CEB800E47090 /* KeyboardNumberPad-Info.plist */,
+ );
+ name = Resources;
+ sourceTree = "<group>";
+ };
+ 29B97323FDCFA39411CA2CEA /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */,
+ 1D30AB110D05D00D00671497 /* Foundation.framework */,
+ 288765A40DF7441C002DB57D /* CoreGraphics.framework */,
+ );
+ name = Frameworks;
+ sourceTree = "<group>";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 1D6058900D05DD3D006BFB54 /* KeyboardNumberPad */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "KeyboardNumberPad" */;
+ buildPhases = (
+ 1D60588D0D05DD3D006BFB54 /* Resources */,
+ 1D60588E0D05DD3D006BFB54 /* Sources */,
+ 1D60588F0D05DD3D006BFB54 /* Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = KeyboardNumberPad;
+ productName = KeyboardNumberPad;
+ productReference = 1D6058910D05DD3D006BFB54 /* KeyboardNumberPad.app */;
+ productType = "com.apple.product-type.application";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 29B97313FDCFA39411CA2CEA /* Project object */ = {
+ isa = PBXProject;
+ buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "KeyboardNumberPad" */;
+ compatibilityVersion = "Xcode 3.2";
+ developmentRegion = English;
+ hasScannedForEncodings = 1;
+ knownRegions = (
+ English,
+ Japanese,
+ French,
+ German,
+ );
+ mainGroup = 29B97314FDCFA39411CA2CEA /* CustomTemplate */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ 1D6058900D05DD3D006BFB54 /* KeyboardNumberPad */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 1D60588D0D05DD3D006BFB54 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 28AD733F0D9D9553002E5188 /* MainWindow.xib in Resources */,
+ 2899E5220DE3E06400AC0155 /* KeyboardNumberPadViewController.xib in Resources */,
+ D1CF0ADB13A68F6000A62F51 /* heart.png in Resources */,
+ D1CF0B1B13A6A09200A62F51 /* AMTextFieldNumberPad.bundle in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 1D60588E0D05DD3D006BFB54 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 1D60589B0D05DD56006BFB54 /* main.m in Sources */,
+ 1D3623260D0F684500981E51 /* KeyboardNumberPadAppDelegate.m in Sources */,
+ 28D7ACF80DDB3853001CB0EB /* KeyboardNumberPadViewController.m in Sources */,
+ D1CF0B1C13A6A09200A62F51 /* AMTextFieldNumberPad.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin XCBuildConfiguration section */
+ 1D6058940D05DD3E006BFB54 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer: Sergey Vinogradov (69WW8Q864C)";
+ COPY_PHASE_STRIP = NO;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = KeyboardNumberPad_Prefix.pch;
+ INFOPLIST_FILE = "KeyboardNumberPad-Info.plist";
+ PRODUCT_NAME = KeyboardNumberPad;
+ "PROVISIONING_PROFILE[sdk=iphoneos*]" = "4197BC01-65ED-4A5D-B9ED-DE960B669851";
+ };
+ name = Debug;
+ };
+ 1D6058950D05DD3E006BFB54 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer: Sergey Vinogradov (69WW8Q864C)";
+ COPY_PHASE_STRIP = YES;
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = KeyboardNumberPad_Prefix.pch;
+ INFOPLIST_FILE = "KeyboardNumberPad-Info.plist";
+ PRODUCT_NAME = KeyboardNumberPad;
+ "PROVISIONING_PROFILE[sdk=iphoneos*]" = "4197BC01-65ED-4A5D-B9ED-DE960B669851";
+ VALIDATE_PRODUCT = YES;
+ };
+ name = Release;
+ };
+ C01FCF4F08A954540054247B /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ARCHS = "$(ARCHS_STANDARD_32_BIT)";
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer: Sergey Vinogradov (69WW8Q864C)";
+ GCC_C_LANGUAGE_STANDARD = c99;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 3.0;
+ PREBINDING = NO;
+ "PROVISIONING_PROFILE[sdk=iphoneos*]" = "4197BC01-65ED-4A5D-B9ED-DE960B669851";
+ SDKROOT = iphoneos;
+ };
+ name = Debug;
+ };
+ C01FCF5008A954540054247B /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ARCHS = "$(ARCHS_STANDARD_32_BIT)";
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer: Sergey Vinogradov (69WW8Q864C)";
+ GCC_C_LANGUAGE_STANDARD = c99;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 3.0;
+ OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1";
+ PREBINDING = NO;
+ "PROVISIONING_PROFILE[sdk=iphoneos*]" = "4197BC01-65ED-4A5D-B9ED-DE960B669851";
+ SDKROOT = iphoneos;
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "KeyboardNumberPad" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 1D6058940D05DD3E006BFB54 /* Debug */,
+ 1D6058950D05DD3E006BFB54 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ C01FCF4E08A954540054247B /* Build configuration list for PBXProject "KeyboardNumberPad" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ C01FCF4F08A954540054247B /* Debug */,
+ C01FCF5008A954540054247B /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 29B97313FDCFA39411CA2CEA /* Project object */;
+}
7 Demo/KeyboardNumberPad.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Workspace
+ version = "1.0">
+ <FileRef
+ location = "self:KeyboardNumberPad.xcodeproj">
+ </FileRef>
+</Workspace>
9,139 ...proj/project.xcworkspace/xcuserdata/vinogradov.xcuserdatad/UserInterfaceState.xcuserstate
9,139 additions, 0 deletions not shown
1,400 Demo/KeyboardNumberPad.xcodeproj/vinogradov.mode1v3
@@ -0,0 +1,1400 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>ActivePerspectiveName</key>
+ <string>Project</string>
+ <key>AllowedModules</key>
+ <array>
+ <dict>
+ <key>BundleLoadPath</key>
+ <string></string>
+ <key>MaxInstances</key>
+ <string>n</string>
+ <key>Module</key>
+ <string>PBXSmartGroupTreeModule</string>
+ <key>Name</key>
+ <string>Groups and Files Outline View</string>
+ </dict>
+ <dict>
+ <key>BundleLoadPath</key>
+ <string></string>
+ <key>MaxInstances</key>
+ <string>n</string>
+ <key>Module</key>
+ <string>PBXNavigatorGroup</string>
+ <key>Name</key>
+ <string>Editor</string>
+ </dict>
+ <dict>
+ <key>BundleLoadPath</key>
+ <string></string>
+ <key>MaxInstances</key>
+ <string>n</string>
+ <key>Module</key>
+ <string>XCTaskListModule</string>
+ <key>Name</key>
+ <string>Task List</string>
+ </dict>
+ <dict>
+ <key>BundleLoadPath</key>
+ <string></string>
+ <key>MaxInstances</key>
+ <string>n</string>
+ <key>Module</key>
+ <string>XCDetailModule</string>
+ <key>Name</key>
+ <string>File and Smart Group Detail Viewer</string>
+ </dict>
+ <dict>
+ <key>BundleLoadPath</key>
+ <string></string>
+ <key>MaxInstances</key>
+ <string>1</string>
+ <key>Module</key>
+ <string>PBXBuildResultsModule</string>
+ <key>Name</key>
+ <string>Detailed Build Results Viewer</string>
+ </dict>
+ <dict>
+ <key>BundleLoadPath</key>
+ <string></string>
+ <key>MaxInstances</key>
+ <string>1</string>
+ <key>Module</key>
+ <string>PBXProjectFindModule</string>
+ <key>Name</key>
+ <string>Project Batch Find Tool</string>
+ </dict>
+ <dict>
+ <key>BundleLoadPath</key>
+ <string></string>
+ <key>MaxInstances</key>
+ <string>n</string>
+ <key>Module</key>
+ <string>XCProjectFormatConflictsModule</string>
+ <key>Name</key>
+ <string>Project Format Conflicts List</string>
+ </dict>
+ <dict>
+ <key>BundleLoadPath</key>
+ <string></string>
+ <key>MaxInstances</key>
+ <string>n</string>
+ <key>Module</key>
+ <string>PBXBookmarksModule</string>
+ <key>Name</key>
+ <string>Bookmarks Tool</string>
+ </dict>
+ <dict>
+ <key>BundleLoadPath</key>
+ <string></string>
+ <key>MaxInstances</key>
+ <string>n</string>
+ <key>Module</key>
+ <string>PBXClassBrowserModule</string>
+ <key>Name</key>
+ <string>Class Browser</string>
+ </dict>
+ <dict>
+ <key>BundleLoadPath</key>
+ <string></string>
+ <key>MaxInstances</key>
+ <string>n</string>
+ <key>Module</key>
+ <string>PBXCVSModule</string>
+ <key>Name</key>
+ <string>Source Code Control Tool</string>
+ </dict>
+ <dict>
+ <key>BundleLoadPath</key>
+ <string></string>
+ <key>MaxInstances</key>
+ <string>n</string>
+ <key>Module</key>
+ <string>PBXDebugBreakpointsModule</string>
+ <key>Name</key>
+ <string>Debug Breakpoints Tool</string>
+ </dict>
+ <dict>
+ <key>BundleLoadPath</key>
+ <string></string>
+ <key>MaxInstances</key>
+ <string>n</string>
+ <key>Module</key>
+ <string>XCDockableInspector</string>
+ <key>Name</key>
+ <string>Inspector</string>
+ </dict>
+ <dict>
+ <key>BundleLoadPath</key>
+ <string></string>
+ <key>MaxInstances</key>
+ <string>n</string>
+ <key>Module</key>
+ <string>PBXOpenQuicklyModule</string>
+ <key>Name</key>
+ <string>Open Quickly Tool</string>
+ </dict>
+ <dict>
+ <key>BundleLoadPath</key>
+ <string></string>
+ <key>MaxInstances</key>
+ <string>1</string>
+ <key>Module</key>
+ <string>PBXDebugSessionModule</string>
+ <key>Name</key>
+ <string>Debugger</string>
+ </dict>
+ <dict>
+ <key>BundleLoadPath</key>
+ <string></string>
+ <key>MaxInstances</key>
+ <string>1</string>
+ <key>Module</key>
+ <string>PBXDebugCLIModule</string>
+ <key>Name</key>
+ <string>Debug Console</string>
+ </dict>
+ <dict>
+ <key>BundleLoadPath</key>
+ <string></string>
+ <key>MaxInstances</key>
+ <string>n</string>
+ <key>Module</key>
+ <string>XCSnapshotModule</string>
+ <key>Name</key>
+ <string>Snapshots Tool</string>
+ </dict>
+ </array>
+ <key>BundlePath</key>
+ <string>/Developer-old/Library/PrivateFrameworks/DevToolsInterface.framework/Resources</string>
+ <key>Description</key>
+ <string>DefaultDescriptionKey</string>
+ <key>DockingSystemVisible</key>
+ <false/>
+ <key>Extension</key>
+ <string>mode1v3</string>
+ <key>FavBarConfig</key>
+ <dict>
+ <key>PBXProjectModuleGUID</key>
+ <string>D155F76E13A39B7900A0A56A</string>
+ <key>XCBarModuleItemNames</key>
+ <dict/>
+ <key>XCBarModuleItems</key>
+ <array/>
+ </dict>
+ <key>FirstTimeWindowDisplayed</key>
+ <false/>
+ <key>Identifier</key>
+ <string>com.apple.perspectives.project.mode1v3</string>
+ <key>MajorVersion</key>
+ <integer>33</integer>
+ <key>MinorVersion</key>
+ <integer>0</integer>
+ <key>Name</key>
+ <string>Default</string>
+ <key>Notifications</key>
+ <array/>
+ <key>OpenEditors</key>
+ <array/>
+ <key>PerspectiveWidths</key>
+ <array>
+ <integer>-1</integer>
+ <integer>-1</integer>
+ </array>
+ <key>Perspectives</key>
+ <array>
+ <dict>
+ <key>ChosenToolbarItems</key>
+ <array>
+ <string>active-combo-popup</string>
+ <string>action</string>
+ <string>NSToolbarFlexibleSpaceItem</string>
+ <string>debugger-enable-breakpoints</string>
+ <string>build-and-go</string>
+ <string>com.apple.ide.PBXToolbarStopButton</string>
+ <string>get-info</string>
+ <string>NSToolbarFlexibleSpaceItem</string>
+ <string>com.apple.pbx.toolbar.searchfield</string>
+ </array>
+ <key>ControllerClassBaseName</key>
+ <string></string>
+ <key>IconName</key>
+ <string>WindowOfProjectWithEditor</string>
+ <key>Identifier</key>
+ <string>perspective.project</string>
+ <key>IsVertical</key>
+ <false/>
+ <key>Layout</key>
+ <array>
+ <dict>
+ <key>BecomeActive</key>
+ <true/>
+ <key>ContentConfiguration</key>
+ <dict>
+ <key>PBXBottomSmartGroupGIDs</key>
+ <array>
+ <string>1C37FBAC04509CD000000102</string>
+ <string>1C37FAAC04509CD000000102</string>
+ <string>1C37FABC05509CD000000102</string>
+ <string>1C37FABC05539CD112110102</string>
+ <string>E2644B35053B69B200211256</string>
+ <string>1C37FABC04509CD000100104</string>
+ <string>1CC0EA4004350EF90044410B</string>
+ <string>1CC0EA4004350EF90041110B</string>
+ </array>
+ <key>PBXProjectModuleGUID</key>
+ <string>1CE0B1FE06471DED0097A5F4</string>
+ <key>PBXProjectModuleLabel</key>
+ <string>Files</string>
+ <key>PBXProjectStructureProvided</key>
+ <string>yes</string>
+ <key>PBXSmartGroupTreeModuleColumnData</key>
+ <dict>
+ <key>PBXSmartGroupTreeModuleColumnWidthsKey</key>
+ <array>
+ <real>355</real>
+ </array>
+ <key>PBXSmartGroupTreeModuleColumnsKey_v4</key>
+ <array>
+ <string>MainColumn</string>
+ </array>
+ </dict>
+ <key>PBXSmartGroupTreeModuleOutlineStateKey_v7</key>
+ <dict>
+ <key>PBXSmartGroupTreeModuleOutlineStateExpansionKey</key>
+ <array>
+ <string>29B97314FDCFA39411CA2CEA</string>
+ <string>080E96DDFE201D6D7F000001</string>
+ <string>29B97317FDCFA39411CA2CEA</string>
+ <string>29B97323FDCFA39411CA2CEA</string>
+ <string>1DF5F4DF0D08C38300B7A737</string>
+ <string>1C37FABC05509CD000000102</string>
+ </array>
+ <key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key>
+ <array>
+ <array>
+ <integer>14</integer>
+ <integer>10</integer>
+ <integer>0</integer>
+ </array>
+ </array>
+ <key>PBXSmartGroupTreeModuleOutlineStateVisibleRectKey</key>
+ <string>{{0, 0}, {355, 1243}}</string>
+ </dict>
+ <key>PBXTopSmartGroupGIDs</key>
+ <array/>
+ <key>XCIncludePerspectivesSwitch</key>
+ <true/>
+ <key>XCSharingToken</key>
+ <string>com.apple.Xcode.GFSharingToken</string>
+ </dict>
+ <key>GeometryConfiguration</key>
+ <dict>
+ <key>Frame</key>
+ <string>{{0, 0}, {372, 1261}}</string>
+ <key>GroupTreeTableConfiguration</key>
+ <array>
+ <string>MainColumn</string>
+ <real>355</real>
+ </array>
+ <key>RubberWindowFrame</key>
+ <string>0 116 2560 1302 0 0 2560 1418 </string>
+ </dict>
+ <key>Module</key>
+ <string>PBXSmartGroupTreeModule</string>
+ <key>Proportion</key>
+ <string>372pt</string>
+ </dict>
+ <dict>
+ <key>Dock</key>
+ <array>
+ <dict>
+ <key>ContentConfiguration</key>
+ <dict>
+ <key>PBXProjectModuleGUID</key>
+ <string>1CE0B20306471E060097A5F4</string>
+ <key>PBXProjectModuleLabel</key>
+ <string>KeyboardNumberPad-Info.plist</string>
+ <key>PBXSplitModuleInNavigatorKey</key>
+ <dict>
+ <key>Split0</key>
+ <dict>
+ <key>PBXProjectModuleGUID</key>
+ <string>1CE0B20406471E060097A5F4</string>
+ <key>PBXProjectModuleLabel</key>
+ <string>KeyboardNumberPad-Info.plist</string>
+ <key>history</key>
+ <array>
+ <string>D1FC790913A5798E0062ADFA</string>
+ <string>D1FC79C713A62F120062ADFA</string>
+ <string>D1CF0AE613A68FAC00A62F51</string>
+ <string>D1CF0B0D13A69A6C00A62F51</string>
+ <string>D1CF0B0E13A69A6C00A62F51</string>
+ <string>D1CF0B1513A6A06C00A62F51</string>
+ <string>D1CF0B3413A6A0D700A62F51</string>
+ <string>D1CF0B4613A6A23700A62F51</string>
+ </array>
+ </dict>
+ <key>SplitCount</key>
+ <string>1</string>
+ </dict>
+ <key>StatusBarVisibility</key>
+ <true/>
+ </dict>
+ <key>GeometryConfiguration</key>
+ <dict>
+ <key>Frame</key>
+ <string>{{0, 0}, {2183, 1256}}</string>
+ <key>RubberWindowFrame</key>
+ <string>0 116 2560 1302 0 0 2560 1418 </string>
+ </dict>
+ <key>Module</key>
+ <string>PBXNavigatorGroup</string>
+ <key>Proportion</key>
+ <string>1256pt</string>
+ </dict>
+ <dict>
+ <key>ContentConfiguration</key>
+ <dict>
+ <key>PBXProjectModuleGUID</key>
+ <string>1CE0B20506471E060097A5F4</string>
+ <key>PBXProjectModuleLabel</key>
+ <string>Detail</string>
+ </dict>
+ <key>GeometryConfiguration</key>
+ <dict>
+ <key>Frame</key>
+ <string>{{0, 1261}, {2183, 0}}</string>
+ <key>RubberWindowFrame</key>
+ <string>0 116 2560 1302 0 0 2560 1418 </string>
+ </dict>
+ <key>Module</key>
+ <string>XCDetailModule</string>
+ <key>Proportion</key>
+ <string>0pt</string>
+ </dict>
+ </array>
+ <key>Proportion</key>
+ <string>2183pt</string>
+ </dict>
+ </array>
+ <key>Name</key>
+ <string>Project</string>
+ <key>ServiceClasses</key>
+ <array>
+ <string>XCModuleDock</string>
+ <string>PBXSmartGroupTreeModule</string>
+ <string>XCModuleDock</string>
+ <string>PBXNavigatorGroup</string>
+ <string>XCDetailModule</string>
+ </array>
+ <key>TableOfContents</key>
+ <array>
+ <string>D1AD7C9413A6A44900DCAEF0</string>
+ <string>1CE0B1FE06471DED0097A5F4</string>
+ <string>D1AD7C9513A6A44900DCAEF0</string>
+ <string>1CE0B20306471E060097A5F4</string>
+ <string>1CE0B20506471E060097A5F4</string>
+ </array>
+ <key>ToolbarConfigUserDefaultsMinorVersion</key>
+ <string>2</string>
+ <key>ToolbarConfiguration</key>
+ <string>xcode.toolbar.config.defaultV3</string>
+ </dict>
+ <dict>
+ <key>ControllerClassBaseName</key>
+ <string></string>
+ <key>IconName</key>
+ <string>WindowOfProject</string>
+ <key>Identifier</key>
+ <string>perspective.morph</string>
+ <key>IsVertical</key>
+ <integer>0</integer>
+ <key>Layout</key>
+ <array>
+ <dict>
+ <key>BecomeActive</key>
+ <integer>1</integer>
+ <key>ContentConfiguration</key>
+ <dict>
+ <key>PBXBottomSmartGroupGIDs</key>
+ <array>
+ <string>1C37FBAC04509CD000000102</string>
+ <string>1C37FAAC04509CD000000102</string>
+ <string>1C08E77C0454961000C914BD</string>
+ <string>1C37FABC05509CD000000102</string>
+ <string>1C37FABC05539CD112110102</string>
+ <string>E2644B35053B69B200211256</string>
+ <string>1C37FABC04509CD000100104</string>
+ <string>1CC0EA4004350EF90044410B</string>
+ <string>1CC0EA4004350EF90041110B</string>
+ </array>
+ <key>PBXProjectModuleGUID</key>
+ <string>11E0B1FE06471DED0097A5F4</string>
+ <key>PBXProjectModuleLabel</key>
+ <string>Files</string>
+ <key>PBXProjectStructureProvided</key>
+ <string>yes</string>
+ <key>PBXSmartGroupTreeModuleColumnData</key>
+ <dict>
+ <key>PBXSmartGroupTreeModuleColumnWidthsKey</key>
+ <array>
+ <real>186</real>
+ </array>
+ <key>PBXSmartGroupTreeModuleColumnsKey_v4</key>
+ <array>
+ <string>MainColumn</string>
+ </array>
+ </dict>
+ <key>PBXSmartGroupTreeModuleOutlineStateKey_v7</key>
+ <dict>
+ <key>PBXSmartGroupTreeModuleOutlineStateExpansionKey</key>
+ <array>
+ <string>29B97314FDCFA39411CA2CEA</string>
+ <string>1C37FABC05509CD000000102</string>
+ </array>
+ <key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key>
+ <array>
+ <array>
+ <integer>0</integer>
+ </array>
+ </array>
+ <key>PBXSmartGroupTreeModuleOutlineStateVisibleRectKey</key>
+ <string>{{0, 0}, {186, 337}}</string>
+ </dict>
+ <key>PBXTopSmartGroupGIDs</key>
+ <array/>
+ <key>XCIncludePerspectivesSwitch</key>
+ <integer>1</integer>
+ <key>XCSharingToken</key>
+ <string>com.apple.Xcode.GFSharingToken</string>
+ </dict>
+ <key>GeometryConfiguration</key>
+ <dict>
+ <key>Frame</key>
+ <string>{{0, 0}, {203, 355}}</string>
+ <key>GroupTreeTableConfiguration</key>
+ <array>
+ <string>MainColumn</string>
+ <real>186</real>
+ </array>
+ <key>RubberWindowFrame</key>
+ <string>373 269 690 397 0 0 1440 878 </string>
+ </dict>
+ <key>Module</key>
+ <string>PBXSmartGroupTreeModule</string>
+ <key>Proportion</key>
+ <string>100%</string>
+ </dict>
+ </array>
+ <key>Name</key>
+ <string>Morph</string>
+ <key>PreferredWidth</key>
+ <integer>300</integer>
+ <key>ServiceClasses</key>
+ <array>
+ <string>XCModuleDock</string>
+ <string>PBXSmartGroupTreeModule</string>
+ </array>
+ <key>TableOfContents</key>
+ <array>
+ <string>11E0B1FE06471DED0097A5F4</string>
+ </array>
+ <key>ToolbarConfiguration</key>
+ <string>xcode.toolbar.config.default.shortV3</string>
+ </dict>
+ </array>
+ <key>PerspectivesBarVisible</key>
+ <false/>
+ <key>ShelfIsVisible</key>
+ <false/>
+ <key>SourceDescription</key>
+ <string>file at '/Developer-old/Library/PrivateFrameworks/DevToolsInterface.framework/Resources/XCPerspectivesSpecificationMode1.xcperspec'</string>
+ <key>StatusbarIsVisible</key>
+ <true/>
+ <key>TimeStamp</key>
+ <real>0.0</real>
+ <key>ToolbarConfigUserDefaultsMinorVersion</key>
+ <string>2</string>
+ <key>ToolbarDisplayMode</key>
+ <integer>1</integer>
+ <key>ToolbarIsVisible</key>
+ <true/>
+ <key>ToolbarSizeMode</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Perspectives</string>
+ <key>UpdateMessage</key>
+ <string>The Default Workspace in this version of Xcode now includes support to hide and show the detail view (what has been referred to as the "Metro-Morph" feature). You must discard your current Default Workspace settings and update to the latest Default Workspace in order to gain this feature. Do you wish to update to the latest Workspace defaults for project '%@'?</string>
+ <key>WindowJustification</key>
+ <integer>5</integer>
+ <key>WindowOrderList</key>
+ <array>
+ <string>D155F73313A2DBAF00A0A56A</string>
+ <string>/Users/vinogradov/ProjectsiPhone/В работе/KeyboardPad/KeyboardNumberPad/KeyboardNumberPad.xcodeproj</string>
+ </array>
+ <key>WindowString</key>
+ <string>0 116 2560 1302 0 0 2560 1418 </string>
+ <key>WindowToolsV3</key>
+ <array>
+ <dict>
+ <key>FirstTimeWindowDisplayed</key>
+ <false/>
+ <key>Identifier</key>
+ <string>windowTool.build</string>
+ <key>IsVertical</key>
+ <true/>
+ <key>Layout</key>
+ <array>
+ <dict>
+ <key>Dock</key>
+ <array>
+ <dict>
+ <key>ContentConfiguration</key>
+ <dict>
+ <key>PBXProjectModuleGUID</key>
+ <string>1CD0528F0623707200166675</string>
+ <key>PBXProjectModuleLabel</key>
+ <string></string>
+ <key>StatusBarVisibility</key>
+ <true/>
+ </dict>
+ <key>GeometryConfiguration</key>
+ <dict>
+ <key>Frame</key>
+ <string>{{0, 0}, {972, 485}}</string>
+ <key>RubberWindowFrame</key>
+ <string>42 605 972 767 0 0 2560 1418 </string>
+ </dict>
+ <key>Module</key>
+ <string>PBXNavigatorGroup</string>
+ <key>Proportion</key>
+ <string>485pt</string>
+ </dict>
+ <dict>
+ <key>ContentConfiguration</key>
+ <dict>
+ <key>PBXProjectModuleGUID</key>
+ <string>XCMainBuildResultsModuleGUID</string>
+ <key>PBXProjectModuleLabel</key>
+ <string>Build Results</string>
+ <key>XCBuildResultsTrigger_Collapse</key>
+ <integer>1021</integer>
+ <key>XCBuildResultsTrigger_Open</key>
+ <integer>1011</integer>
+ </dict>
+ <key>GeometryConfiguration</key>
+ <dict>
+ <key>Frame</key>
+ <string>{{0, 490}, {972, 236}}</string>
+ <key>RubberWindowFrame</key>
+ <string>42 605 972 767 0 0 2560 1418 </string>
+ </dict>
+ <key>Module</key>
+ <string>PBXBuildResultsModule</string>
+ <key>Proportion</key>
+ <string>236pt</string>
+ </dict>
+ </array>
+ <key>Proportion</key>
+ <string>726pt</string>
+ </dict>
+ </array>
+ <key>Name</key>
+ <string>Build Results</string>
+ <key>ServiceClasses</key>
+ <array>
+ <string>PBXBuildResultsModule</string>
+ </array>
+ <key>StatusbarIsVisible</key>
+ <true/>
+ <key>TableOfContents</key>
+ <array>
+ <string>D155F73313A2DBAF00A0A56A</string>
+ <string>D1AD7C9613A6A44900DCAEF0</string>
+ <string>1CD0528F0623707200166675</string>
+ <string>XCMainBuildResultsModuleGUID</string>
+ </array>
+ <key>ToolbarConfiguration</key>
+ <string>xcode.toolbar.config.buildV3</string>
+ <key>WindowContentMinSize</key>
+ <string>486 300</string>
+ <key>WindowString</key>
+ <string>42 605 972 767 0 0 2560 1418 </string>
+ <key>WindowToolGUID</key>
+ <string>D155F73313A2DBAF00A0A56A</string>
+ <key>WindowToolIsVisible</key>
+ <false/>
+ </dict>
+ <dict>
+ <key>FirstTimeWindowDisplayed</key>
+ <false/>
+ <key>Identifier</key>
+ <string>windowTool.debugger</string>
+ <key>IsVertical</key>
+ <true/>
+ <key>Layout</key>
+ <array>
+ <dict>
+ <key>Dock</key>
+ <array>
+ <dict>
+ <key>ContentConfiguration</key>
+ <dict>
+ <key>Debugger</key>
+ <dict>
+ <key>HorizontalSplitView</key>
+ <dict>
+ <key>_collapsingFrameDimension</key>
+ <real>0.0</real>
+ <key>_indexOfCollapsedView</key>
+ <integer>0</integer>
+ <key>_percentageOfCollapsedView</key>
+ <real>0.0</real>
+ <key>isCollapsed</key>
+ <string>yes</string>
+ <key>sizes</key>
+ <array>
+ <string>{{0, 0}, {316, 198}}</string>
+ <string>{{316, 0}, {378, 198}}</string>
+ </array>
+ </dict>
+ <key>VerticalSplitView</key>
+ <dict>
+ <key>_collapsingFrameDimension</key>
+ <real>0.0</real>
+ <key>_indexOfCollapsedView</key>
+ <integer>0</integer>
+ <key>_percentageOfCollapsedView</key>
+ <real>0.0</real>
+ <key>isCollapsed</key>
+ <string>yes</string>
+ <key>sizes</key>
+ <array>
+ <string>{{0, 0}, {694, 198}}</string>
+ <string>{{0, 198}, {694, 183}}</string>
+ </array>
+ </dict>
+ </dict>
+ <key>LauncherConfigVersion</key>
+ <string>8</string>
+ <key>PBXProjectModuleGUID</key>
+ <string>1C162984064C10D400B95A72</string>
+ <key>PBXProjectModuleLabel</key>
+ <string>Debug - GLUTExamples (Underwater)</string>
+ </dict>
+ <key>GeometryConfiguration</key>
+ <dict>
+ <key>DebugConsoleVisible</key>
+ <string>None</string>
+ <key>DebugConsoleWindowFrame</key>
+ <string>{{200, 200}, {500, 300}}</string>
+ <key>DebugSTDIOWindowFrame</key>
+ <string>{{200, 200}, {500, 300}}</string>
+ <key>Frame</key>
+ <string>{{0, 0}, {694, 381}}</string>
+ <key>PBXDebugSessionStackFrameViewKey</key>
+ <dict>
+ <key>DebugVariablesTableConfiguration</key>
+ <array>
+ <string>Name</string>
+ <real>130</real>
+ <string>Value</string>
+ <real>95</real>
+ <string>Summary</string>
+ <real>128</real>
+ </array>
+ <key>Frame</key>
+ <string>{{316, 0}, {378, 198}}</string>
+ <key>RubberWindowFrame</key>
+ <string>21 973 694 422 0 0 2560 1418 </string>
+ </dict>
+ <key>RubberWindowFrame</key>
+ <string>21 973 694 422 0 0 2560 1418 </string>
+ </dict>
+ <key>Module</key>
+ <string>PBXDebugSessionModule</string>
+ <key>Proportion</key>
+ <string>381pt</string>
+ </dict>
+ </array>
+ <key>Proportion</key>
+ <string>381pt</string>
+ </dict>
+ </array>
+ <key>Name</key>
+ <string>Debugger</string>
+ <key>ServiceClasses</key>
+ <array>
+ <string>PBXDebugSessionModule</string>
+ </array>
+ <key>StatusbarIsVisible</key>
+ <true/>
+ <key>TableOfContents</key>
+ <array>
+ <string>1CD10A99069EF8BA00B06720</string>
+ <string>D1CF0A1413A67BB800A62F51</string>
+ <string>1C162984064C10D400B95A72</string>
+ <string>D1CF0A1513A67BB800A62F51</string>
+ <string>D1CF0A1613A67BB800A62F51</string>
+ <string>D1CF0A1713A67BB800A62F51</string>
+ <string>D1CF0A1813A67BB800A62F51</string>
+ <string>D1CF0A1913A67BB800A62F51</string>
+ </array>
+ <key>ToolbarConfiguration</key>
+ <string>xcode.toolbar.config.debugV3</string>
+ <key>WindowString</key>
+ <string>21 973 694 422 0 0 2560 1418 </string>
+ <key>WindowToolGUID</key>
+ <string>1CD10A99069EF8BA00B06720</string>
+ <key>WindowToolIsVisible</key>
+ <false/>
+ </dict>
+ <dict>
+ <key>Identifier</key>
+ <string>windowTool.find</string>
+ <key>Layout</key>
+ <array>
+ <dict>
+ <key>Dock</key>
+ <array>
+ <dict>
+ <key>Dock</key>
+ <array>
+ <dict>
+ <key>ContentConfiguration</key>
+ <dict>
+ <key>PBXProjectModuleGUID</key>
+ <string>1CDD528C0622207200134675</string>
+ <key>PBXProjectModuleLabel</key>
+ <string>&lt;No Editor&gt;</string>
+ <key>PBXSplitModuleInNavigatorKey</key>
+ <dict>
+ <key>Split0</key>
+ <dict>
+ <key>PBXProjectModuleGUID</key>
+ <string>1CD0528D0623707200166675</string>
+ </dict>
+ <key>SplitCount</key>
+ <string>1</string>
+ </dict>
+ <key>StatusBarVisibility</key>
+ <integer>1</integer>
+ </dict>
+ <key>GeometryConfiguration</key>
+ <dict>
+ <key>Frame</key>
+ <string>{{0, 0}, {781, 167}}</string>
+ <key>RubberWindowFrame</key>
+ <string>62 385 781 470 0 0 1440 878 </string>
+ </dict>
+ <key>Module</key>
+ <string>PBXNavigatorGroup</string>
+ <key>Proportion</key>
+ <string>781pt</string>
+ </dict>
+ </array>
+ <key>Proportion</key>
+ <string>50%</string>
+ </dict>
+ <dict>
+ <key>BecomeActive</key>
+ <integer>1</integer>
+ <key>ContentConfiguration</key>
+ <dict>
+ <key>PBXProjectModuleGUID</key>
+ <string>1CD0528E0623707200166675</string>
+ <key>PBXProjectModuleLabel</key>
+ <string>Project Find</string>
+ </dict>
+ <key>GeometryConfiguration</key>
+ <dict>
+ <key>Frame</key>
+ <string>{{8, 0}, {773, 254}}</string>
+ <key>RubberWindowFrame</key>
+ <string>62 385 781 470 0 0 1440 878 </string>
+ </dict>
+ <key>Module</key>
+ <string>PBXProjectFindModule</string>
+ <key>Proportion</key>
+ <string>50%</string>
+ </dict>
+ </array>
+ <key>Proportion</key>
+ <string>428pt</string>
+ </dict>
+ </array>
+ <key>Name</key>
+ <string>Project Find</string>
+ <key>ServiceClasses</key>
+ <array>
+ <string>PBXProjectFindModule</string>
+ </array>
+ <key>StatusbarIsVisible</key>
+ <integer>1</integer>
+ <key>TableOfContents</key>
+ <array>
+ <string>1C530D57069F1CE1000CFCEE</string>
+ <string>1C530D58069F1CE1000CFCEE</string>
+ <string>1C530D59069F1CE1000CFCEE</string>
+ <string>1CDD528C0622207200134675</string>
+ <string>1C530D5A069F1CE1000CFCEE</string>
+ <string>1CE0B1FE06471DED0097A5F4</string>
+ <string>1CD0528E0623707200166675</string>
+ </array>
+ <key>WindowString</key>
+ <string>62 385 781 470 0 0 1440 878 </string>
+ <key>WindowToolGUID</key>
+ <string>1C530D57069F1CE1000CFCEE</string>
+ <key>WindowToolIsVisible</key>
+ <integer>0</integer>
+ </dict>
+ <dict>
+ <key>Identifier</key>
+ <string>MENUSEPARATOR</string>
+ </dict>
+ <dict>
+ <key>FirstTimeWindowDisplayed</key>
+ <false/>
+ <key>Identifier</key>
+ <string>windowTool.debuggerConsole</string>
+ <key>IsVertical</key>
+ <true/>
+ <key>Layout</key>
+ <array>
+ <dict>
+ <key>Dock</key>
+ <array>
+ <dict>
+ <key>BecomeActive</key>
+ <true/>
+ <key>ContentConfiguration</key>
+ <dict>
+ <key>PBXProjectModuleGUID</key>
+ <string>1C78EAAC065D492600B07095</string>
+ <key>PBXProjectModuleLabel</key>
+ <string>Debugger Console</string>
+ </dict>
+ <key>GeometryConfiguration</key>
+ <dict>
+ <key>Frame</key>
+ <string>{{0, 0}, {1001, 1165}}</string>
+ <key>RubberWindowFrame</key>
+ <string>21 189 1001 1206 0 0 2560 1418 </string>
+ </dict>
+ <key>Module</key>
+ <string>PBXDebugCLIModule</string>
+ <key>Proportion</key>
+ <string>1165pt</string>
+ </dict>
+ </array>
+ <key>Proportion</key>
+ <string>1165pt</string>
+ </dict>
+ </array>
+ <key>Name</key>
+ <string>Debugger Console</string>
+ <key>ServiceClasses</key>
+ <array>
+ <string>PBXDebugCLIModule</string>
+ </array>
+ <key>StatusbarIsVisible</key>
+ <true/>
+ <key>TableOfContents</key>
+ <array>
+ <string>1C78EAAD065D492600B07095</string>
+ <string>D1CF0A1A13A67BB800A62F51</string>
+ <string>1C78EAAC065D492600B07095</string>
+ </array>
+ <key>ToolbarConfiguration</key>
+ <string>xcode.toolbar.config.consoleV3</string>
+ <key>WindowString</key>
+ <string>21 189 1001 1206 0 0 2560 1418 </string>
+ <key>WindowToolGUID</key>
+ <string>1C78EAAD065D492600B07095</string>
+ <key>WindowToolIsVisible</key>
+ <true/>
+ </dict>
+ <dict>
+ <key>Identifier</key>
+ <string>windowTool.snapshots</string>
+ <key>Layout</key>
+ <array>
+ <dict>
+ <key>Dock</key>
+ <array>
+ <dict>
+ <key>Module</key>
+ <string>XCSnapshotModule</string>
+ <key>Proportion</key>
+ <string>100%</string>
+ </dict>
+ </array>
+ <key>Proportion</key>
+ <string>100%</string>
+ </dict>
+ </array>
+ <key>Name</key>
+ <string>Snapshots</string>
+ <key>ServiceClasses</key>
+ <array>
+ <string>XCSnapshotModule</string>
+ </array>
+ <key>StatusbarIsVisible</key>
+ <string>Yes</string>
+ <key>ToolbarConfiguration</key>
+ <string>xcode.toolbar.config.snapshots</string>
+ <key>WindowString</key>
+ <string>315 824 300 550 0 0 1440 878 </string>
+ <key>WindowToolIsVisible</key>
+ <string>Yes</string>
+ </dict>
+ <dict>
+ <key>Identifier</key>
+ <string>windowTool.scm</string>
+ <key>Layout</key>
+ <array>
+ <dict>
+ <key>Dock</key>
+ <array>
+ <dict>
+ <key>ContentConfiguration</key>
+ <dict>
+ <key>PBXProjectModuleGUID</key>
+ <string>1C78EAB2065D492600B07095</string>
+ <key>PBXProjectModuleLabel</key>
+ <string>&lt;No Editor&gt;</string>
+ <key>PBXSplitModuleInNavigatorKey</key>
+ <dict>
+ <key>Split0</key>
+ <dict>
+ <key>PBXProjectModuleGUID</key>
+ <string>1C78EAB3065D492600B07095</string>
+ </dict>
+ <key>SplitCount</key>
+ <string>1</string>
+ </dict>
+ <key>StatusBarVisibility</key>
+ <integer>1</integer>
+ </dict>
+ <key>GeometryConfiguration</key>
+ <dict>
+ <key>Frame</key>
+ <string>{{0, 0}, {452, 0}}</string>
+ <key>RubberWindowFrame</key>
+ <string>743 379 452 308 0 0 1280 1002 </string>
+ </dict>
+ <key>Module</key>
+ <string>PBXNavigatorGroup</string>
+ <key>Proportion</key>
+ <string>0pt</string>
+ </dict>
+ <dict>
+ <key>BecomeActive</key>
+ <integer>1</integer>
+ <key>ContentConfiguration</key>
+ <dict>
+ <key>PBXProjectModuleGUID</key>
+ <string>1CD052920623707200166675</string>
+ <key>PBXProjectModuleLabel</key>
+ <string>SCM</string>
+ </dict>
+ <key>GeometryConfiguration</key>
+ <dict>
+ <key>ConsoleFrame</key>
+ <string>{{0, 259}, {452, 0}}</string>
+ <key>Frame</key>
+ <string>{{0, 7}, {452, 259}}</string>
+ <key>RubberWindowFrame</key>
+ <string>743 379 452 308 0 0 1280 1002 </string>
+ <key>TableConfiguration</key>
+ <array>
+ <string>Status</string>
+ <real>30</real>
+ <string>FileName</string>
+ <real>199</real>
+ <string>Path</string>
+ <real>197.0950012207031</real>
+ </array>
+ <key>TableFrame</key>
+ <string>{{0, 0}, {452, 250}}</string>
+ </dict>
+ <key>Module</key>
+ <string>PBXCVSModule</string>
+ <key>Proportion</key>
+ <string>262pt</string>
+ </dict>
+ </array>
+ <key>Proportion</key>
+ <string>266pt</string>
+ </dict>
+ </array>
+ <key>Name</key>
+ <string>SCM</string>
+ <key>ServiceClasses</key>
+ <array>
+ <string>PBXCVSModule</string>
+ </array>
+ <key>StatusbarIsVisible</key>
+ <integer>1</integer>
+ <key>TableOfContents</key>
+ <array>
+ <string>1C78EAB4065D492600B07095</string>
+ <string>1C78EAB5065D492600B07095</string>
+ <string>1C78EAB2065D492600B07095</string>
+ <string>1CD052920623707200166675</string>
+ </array>
+ <key>ToolbarConfiguration</key>
+ <string>xcode.toolbar.config.scm</string>
+ <key>WindowString</key>
+ <string>743 379 452 308 0 0 1280 1002 </string>
+ </dict>
+ <dict>
+ <key>Identifier</key>
+ <string>windowTool.breakpoints</string>
+ <key>IsVertical</key>
+ <integer>0</integer>
+ <key>Layout</key>
+ <array>
+ <dict>
+ <key>Dock</key>
+ <array>
+ <dict>
+ <key>BecomeActive</key>
+ <integer>1</integer>
+ <key>ContentConfiguration</key>
+ <dict>
+ <key>PBXBottomSmartGroupGIDs</key>
+ <array>
+ <string>1C77FABC04509CD000000102</string>
+ </array>
+ <key>PBXProjectModuleGUID</key>
+ <string>1CE0B1FE06471DED0097A5F4</string>
+ <key>PBXProjectModuleLabel</key>
+ <string>Files</string>
+ <key>PBXProjectStructureProvided</key>
+ <string>no</string>
+ <key>PBXSmartGroupTreeModuleColumnData</key>
+ <dict>
+ <key>PBXSmartGroupTreeModuleColumnWidthsKey</key>
+ <array>
+ <real>168</real>
+ </array>
+ <key>PBXSmartGroupTreeModuleColumnsKey_v4</key>
+ <array>
+ <string>MainColumn</string>
+ </array>
+ </dict>
+ <key>PBXSmartGroupTreeModuleOutlineStateKey_v7</key>
+ <dict>
+ <key>PBXSmartGroupTreeModuleOutlineStateExpansionKey</key>
+ <array>
+ <string>1C77FABC04509CD000000102</string>
+ </array>
+ <key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key>
+ <array>
+ <array>
+ <integer>0</integer>
+ </array>
+ </array>
+ <key>PBXSmartGroupTreeModuleOutlineStateVisibleRectKey</key>
+ <string>{{0, 0}, {168, 350}}</string>
+ </dict>
+ <key>PBXTopSmartGroupGIDs</key>
+ <array/>
+ <key>XCIncludePerspectivesSwitch</key>
+ <integer>0</integer>
+ </dict>
+ <key>GeometryConfiguration</key>
+ <dict>
+ <key>Frame</key>
+ <string>{{0, 0}, {185, 368}}</string>
+ <key>GroupTreeTableConfiguration</key>
+ <array>
+ <string>MainColumn</string>
+ <real>168</real>
+ </array>
+ <key>RubberWindowFrame</key>
+ <string>315 424 744 409 0 0 1440 878 </string>
+ </dict>
+ <key>Module</key>
+ <string>PBXSmartGroupTreeModule</string>
+ <key>Proportion</key>
+ <string>185pt</string>
+ </dict>
+ <dict>
+ <key>ContentConfiguration</key>
+ <dict>
+ <key>PBXProjectModuleGUID</key>
+ <string>1CA1AED706398EBD00589147</string>
+ <key>PBXProjectModuleLabel</key>
+ <string>Detail</string>
+ </dict>
+ <key>GeometryConfiguration</key>
+ <dict>
+ <key>Frame</key>
+ <string>{{190, 0}, {554, 368}}</string>
+ <key>RubberWindowFrame</key>
+ <string>315 424 744 409 0 0 1440 878 </string>
+ </dict>
+ <key>Module</key>
+ <string>XCDetailModule</string>
+ <key>Proportion</key>
+ <string>554pt</string>
+ </dict>
+ </array>
+ <key>Proportion</key>
+ <string>368pt</string>
+ </dict>
+ </array>
+ <key>MajorVersion</key>
+ <integer>3</integer>
+ <key>MinorVersion</key>
+ <integer>0</integer>
+ <key>Name</key>
+ <string>Breakpoints</string>
+ <key>ServiceClasses</key>
+ <array>
+ <string>PBXSmartGroupTreeModule</string>
+ <string>XCDetailModule</string>
+ </array>
+ <key>StatusbarIsVisible</key>
+ <integer>1</integer>
+ <key>TableOfContents</key>
+ <array>
+ <string>1CDDB66807F98D9800BB5817</string>
+ <string>1CDDB66907F98D9800BB5817</string>
+ <string>1CE0B1FE06471DED0097A5F4</string>
+ <string>1CA1AED706398EBD00589147</string>
+ </array>
+ <key>ToolbarConfiguration</key>
+ <string>xcode.toolbar.config.breakpointsV3</string>
+ <key>WindowString</key>
+ <string>315 424 744 409 0 0 1440 878 </string>
+ <key>WindowToolGUID</key>
+ <string>1CDDB66807F98D9800BB5817</string>
+ <key>WindowToolIsVisible</key>
+ <integer>1</integer>
+ </dict>
+ <dict>
+ <key>Identifier</key>
+ <string>windowTool.debugAnimator</string>
+ <key>Layout</key>
+ <array>
+ <dict>
+ <key>Dock</key>
+ <array>
+ <dict>
+ <key>Module</key>
+ <string>PBXNavigatorGroup</string>
+ <key>Proportion</key>
+ <string>100%</string>
+ </dict>
+ </array>
+ <key>Proportion</key>
+ <string>100%</string>
+ </dict>
+ </array>
+ <key>Name</key>
+ <string>Debug Visualizer</string>
+ <key>ServiceClasses</key>
+ <array>
+ <string>PBXNavigatorGroup</string>
+ </array>
+ <key>StatusbarIsVisible</key>
+ <integer>1</integer>
+ <key>ToolbarConfiguration</key>
+ <string>xcode.toolbar.config.debugAnimatorV3</string>
+ <key>WindowString</key>
+ <string>100 100 700 500 0 0 1280 1002 </string>
+ </dict>
+ <dict>
+ <key>Identifier</key>
+ <string>windowTool.bookmarks</string>
+ <key>Layout</key>
+ <array>
+ <dict>
+ <key>Dock</key>
+ <array>
+ <dict>
+ <key>Module</key>
+ <string>PBXBookmarksModule</string>
+ <key>Proportion</key>
+ <string>100%</string>
+ </dict>
+ </array>
+ <key>Proportion</key>
+ <string>100%</string>
+ </dict>
+ </array>
+ <key>Name</key>
+ <string>Bookmarks</string>
+ <key>ServiceClasses</key>
+ <array>
+ <string>PBXBookmarksModule</string>
+ </array>
+ <key>StatusbarIsVisible</key>
+ <integer>0</integer>
+ <key>WindowString</key>
+ <string>538 42 401 187 0 0 1280 1002 </string>
+ </dict>
+ <dict>
+ <key>Identifier</key>
+ <string>windowTool.projectFormatConflicts</string>
+ <key>Layout</key>
+ <array>
+ <dict>
+ <key>Dock</key>
+ <array>
+ <dict>
+ <key>Module</key>
+ <string>XCProjectFormatConflictsModule</string>
+ <key>Proportion</key>
+ <string>100%</string>
+ </dict>
+ </array>
+ <key>Proportion</key>
+ <string>100%</string>
+ </dict>
+ </array>
+ <key>Name</key>
+ <string>Project Format Conflicts</string>
+ <key>ServiceClasses</key>
+ <array>
+ <string>XCProjectFormatConflictsModule</string>
+ </array>
+ <key>StatusbarIsVisible</key>
+ <integer>0</integer>
+ <key>WindowContentMinSize</key>
+ <string>450 300</string>
+ <key>WindowString</key>
+ <string>50 850 472 307 0 0 1440 877</string>
+ </dict>
+ <dict>
+ <key>Identifier</key>
+ <string>windowTool.classBrowser</string>
+ <key>Layout</key>
+ <array>
+ <dict>
+ <key>Dock</key>
+ <array>
+ <dict>
+ <key>BecomeActive</key>
+ <integer>1</integer>
+ <key>ContentConfiguration</key>
+ <dict>
+ <key>OptionsSetName</key>
+ <string>Hierarchy, all classes</string>
+ <key>PBXProjectModuleGUID</key>
+ <string>1CA6456E063B45B4001379D8</string>
+ <key>PBXProjectModuleLabel</key>
+ <string>Class Browser - NSObject</string>
+ </dict>
+ <key>GeometryConfiguration</key>
+ <dict>
+ <key>ClassesFrame</key>
+ <string>{{0, 0}, {374, 96}}</string>
+ <key>ClassesTreeTableConfiguration</key>
+ <array>
+ <string>PBXClassNameColumnIdentifier</string>
+ <real>208</real>
+ <string>PBXClassBookColumnIdentifier</string>
+ <real>22</real>
+ </array>
+ <key>Frame</key>
+ <string>{{0, 0}, {630, 331}}</string>
+ <key>MembersFrame</key>
+ <string>{{0, 105}, {374, 395}}</string>
+ <key>MembersTreeTableConfiguration</key>
+ <array>
+ <string>PBXMemberTypeIconColumnIdentifier</string>
+ <real>22</real>
+ <string>PBXMemberNameColumnIdentifier</string>
+ <real>216</real>
+ <string>PBXMemberTypeColumnIdentifier</string>
+ <real>97</real>
+ <string>PBXMemberBookColumnIdentifier</string>
+ <real>22</real>
+ </array>
+ <key>PBXModuleWindowStatusBarHidden2</key>
+ <integer>1</integer>
+ <key>RubberWindowFrame</key>
+ <string>385 179 630 352 0 0 1440 878 </string>
+ </dict>
+ <key>Module</key>
+ <string>PBXClassBrowserModule</string>
+ <key>Proportion</key>
+ <string>332pt</string>
+ </dict>
+ </array>
+ <key>Proportion</key>
+ <string>332pt</string>
+ </dict>
+ </array>
+ <key>Name</key>
+ <string>Class Browser</string>
+ <key>ServiceClasses</key>
+ <array>
+ <string>PBXClassBrowserModule</string>
+ </array>
+ <key>StatusbarIsVisible</key>
+ <integer>0</integer>
+ <key>TableOfContents</key>
+ <array>
+ <string>1C0AD2AF069F1E9B00FABCE6</string>
+ <string>1C0AD2B0069F1E9B00FABCE6</string>
+ <string>1CA6456E063B45B4001379D8</string>
+ </array>
+ <key>ToolbarConfiguration</key>
+ <string>xcode.toolbar.config.classbrowser</string>
+ <key>WindowString</key>
+ <string>385 179 630 352 0 0 1440 878 </string>
+ <key>WindowToolGUID</key>
+ <string>1C0AD2AF069F1E9B00FABCE6</string>
+ <key>WindowToolIsVisible</key>
+ <integer>0</integer>
+ </dict>
+ <dict>
+ <key>Identifier</key>
+ <string>windowTool.refactoring</string>
+ <key>IncludeInToolsMenu</key>
+ <integer>0</integer>
+ <key>Layout</key>
+ <array>
+ <dict>
+ <key>Dock</key>
+ <array>
+ <dict>
+ <key>BecomeActive</key>
+ <integer>1</integer>
+ <key>GeometryConfiguration</key>
+ <dict>
+ <key>Frame</key>
+ <string>{0, 0}, {500, 335}</string>
+ <key>RubberWindowFrame</key>
+ <string>{0, 0}, {500, 335}</string>
+ </dict>
+ <key>Module</key>
+ <string>XCRefactoringModule</string>
+ <key>Proportion</key>
+ <string>100%</string>
+ </dict>
+ </array>
+ <key>Proportion</key>
+ <string>100%</string>
+ </dict>
+ </array>
+ <key>Name</key>
+ <string>Refactoring</string>
+ <key>ServiceClasses</key>
+ <array>
+ <string>XCRefactoringModule</string>
+ </array>
+ <key>WindowString</key>
+ <string>200 200 500 356 0 0 1920 1200 </string>
+ </dict>
+ </array>
+</dict>
+</plist>
222 Demo/KeyboardNumberPad.xcodeproj/vinogradov.pbxuser
@@ -0,0 +1,222 @@
+// !$*UTF8*$!
+{
+ 1D3623240D0F684500981E51 /* KeyboardNumberPadAppDelegate.h */ = {
+ uiCtxt = {
+ sepNavIntBoundsRect = "{{0, 0}, {2122, 1201}}";
+ sepNavSelRange = "{530, 0}";
+ sepNavVisRange = "{0, 538}";
+ };
+ };
+ 1D3623250D0F684500981E51 /* KeyboardNumberPadAppDelegate.m */ = {
+ uiCtxt = {
+ sepNavIntBoundsRect = "{{0, 0}, {2122, 1201}}";
+ sepNavSelRange = "{0, 0}";
+ sepNavVisRange = "{0, 2779}";
+ };
+ };
+ 1D6058900D05DD3D006BFB54 /* KeyboardNumberPad */ = {
+ activeExec = 0;
+ executables = (
+ D155F71513A2D9B300A0A56A /* KeyboardNumberPad */,
+ );
+ };
+ 28D7ACF60DDB3853001CB0EB /* KeyboardNumberPadViewController.h */ = {
+ uiCtxt = {
+ sepNavIntBoundsRect = "{{0, 0}, {2122, 1201}}";
+ sepNavSelRange = "{332, 0}";
+ sepNavVisRange = "{0, 340}";
+ };
+ };
+ 28D7ACF70DDB3853001CB0EB /* KeyboardNumberPadViewController.m */ = {
+ uiCtxt = {
+ sepNavIntBoundsRect = "{{0, 0}, {2122, 1201}}";
+ sepNavSelRange = "{3480, 0}";
+ sepNavVisRange = "{0, 3509}";
+ };
+ };
+ 29B97313FDCFA39411CA2CEA /* Project object */ = {
+ activeBuildConfigurationName = Debug;
+ activeExecutable = D155F71513A2D9B300A0A56A /* KeyboardNumberPad */;
+ activeSDKPreference = iphoneos4.3;
+ activeTarget = 1D6058900D05DD3D006BFB54 /* KeyboardNumberPad */;
+ addToTargets = (
+ 1D6058900D05DD3D006BFB54 /* KeyboardNumberPad */,
+ );
+ breakpoints = (
+ );
+ codeSenseManager = D155F71E13A2D9D400A0A56A /* Code sense */;
+ executables = (
+ D155F71513A2D9B300A0A56A /* KeyboardNumberPad */,
+ );
+ perUserDictionary = {
+ PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = {
+ PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
+ PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID;
+ PBXFileTableDataSourceColumnWidthsKey = (
+ 20,
+ 1959,
+ 20,
+ 48,
+ 43,
+ 43,
+ 20,
+ );
+ PBXFileTableDataSourceColumnsKey = (
+ PBXFileDataSource_FiletypeID,
+ PBXFileDataSource_Filename_ColumnID,
+ PBXFileDataSource_Built_ColumnID,
+ PBXFileDataSource_ObjectSize_ColumnID,
+ PBXFileDataSource_Errors_ColumnID,