From ffabed5521a1afdca5502ef200dc92086a6e400a Mon Sep 17 00:00:00 2001 From: ShSergey Date: Sun, 23 Dec 2012 13:06:03 +0400 Subject: [PATCH 1/7] =?UTF-8?q?=D0=BF=D1=80=D0=B5=D0=B4=D0=B2=D0=B0=D1=80?= =?UTF-8?q?=D0=B8=D1=82=D0=B5=D0=BB=D1=8C=D0=BD=D1=8B=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit предварительный --- .DS_Store | Bin 0 -> 6148 bytes .../DNA-project-3.xcodeproj/project.pbxproj | 302 ++ .../contents.xcworkspacedata | 7 + .../UserInterfaceState.xcuserstate | Bin 0 -> 17842 bytes .../xcdebugger/Breakpoints.xcbkptlist | 5 + .../xcschemes/DNA-project-3.xcscheme | 84 + .../xcschemes/xcschememanagement.plist | 22 + DNA-project-3/DNA-project-3/AppDelegate.h | 43 + DNA-project-3/DNA-project-3/AppDelegate.m | 164 + DNA-project-3/DNA-project-3/Cell.h | 28 + DNA-project-3/DNA-project-3/Cell.m | 13 + .../DNA-project-3/DNA-project-3-Info.plist | 34 + .../DNA-project-3/DNA-project-3-Prefix.pch | 7 + .../DNA-project-3/en.lproj/Credits.rtf | 29 + .../DNA-project-3/en.lproj/InfoPlist.strings | 2 + .../DNA-project-3/en.lproj/MainMenu.xib | 4318 +++++++++++++++++ DNA-project-3/DNA-project-3/main.m | 14 + 17 files changed, 5072 insertions(+) create mode 100644 .DS_Store create mode 100644 DNA-project-3/DNA-project-3.xcodeproj/project.pbxproj create mode 100644 DNA-project-3/DNA-project-3.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 DNA-project-3/DNA-project-3.xcodeproj/project.xcworkspace/xcuserdata/sergey.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 DNA-project-3/DNA-project-3.xcodeproj/xcuserdata/sergey.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist create mode 100644 DNA-project-3/DNA-project-3.xcodeproj/xcuserdata/sergey.xcuserdatad/xcschemes/DNA-project-3.xcscheme create mode 100644 DNA-project-3/DNA-project-3.xcodeproj/xcuserdata/sergey.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 DNA-project-3/DNA-project-3/AppDelegate.h create mode 100644 DNA-project-3/DNA-project-3/AppDelegate.m create mode 100644 DNA-project-3/DNA-project-3/Cell.h create mode 100644 DNA-project-3/DNA-project-3/Cell.m create mode 100644 DNA-project-3/DNA-project-3/DNA-project-3-Info.plist create mode 100644 DNA-project-3/DNA-project-3/DNA-project-3-Prefix.pch create mode 100644 DNA-project-3/DNA-project-3/en.lproj/Credits.rtf create mode 100644 DNA-project-3/DNA-project-3/en.lproj/InfoPlist.strings create mode 100644 DNA-project-3/DNA-project-3/en.lproj/MainMenu.xib create mode 100644 DNA-project-3/DNA-project-3/main.m diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 GIT binary patch literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0 + + + + diff --git a/DNA-project-3/DNA-project-3.xcodeproj/project.xcworkspace/xcuserdata/sergey.xcuserdatad/UserInterfaceState.xcuserstate b/DNA-project-3/DNA-project-3.xcodeproj/project.xcworkspace/xcuserdata/sergey.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..5d6faf2f20cf219c867460d956421fa768bd8c52 GIT binary patch literal 17842 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 RhhfA|ZoByD`?pWu{{rL*EUEwi literal 0 HcmV?d00001 diff --git a/DNA-project-3/DNA-project-3.xcodeproj/xcuserdata/sergey.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist b/DNA-project-3/DNA-project-3.xcodeproj/xcuserdata/sergey.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist new file mode 100644 index 0000000..05301bc --- /dev/null +++ b/DNA-project-3/DNA-project-3.xcodeproj/xcuserdata/sergey.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist @@ -0,0 +1,5 @@ + + + diff --git a/DNA-project-3/DNA-project-3.xcodeproj/xcuserdata/sergey.xcuserdatad/xcschemes/DNA-project-3.xcscheme b/DNA-project-3/DNA-project-3.xcodeproj/xcuserdata/sergey.xcuserdatad/xcschemes/DNA-project-3.xcscheme new file mode 100644 index 0000000..1d569bb --- /dev/null +++ b/DNA-project-3/DNA-project-3.xcodeproj/xcuserdata/sergey.xcuserdatad/xcschemes/DNA-project-3.xcscheme @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/DNA-project-3/DNA-project-3.xcodeproj/xcuserdata/sergey.xcuserdatad/xcschemes/xcschememanagement.plist b/DNA-project-3/DNA-project-3.xcodeproj/xcuserdata/sergey.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..921b32b --- /dev/null +++ b/DNA-project-3/DNA-project-3.xcodeproj/xcuserdata/sergey.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,22 @@ + + + + + SchemeUserState + + DNA-project-3.xcscheme + + orderHint + 0 + + + SuppressBuildableAutocreation + + A52619C51685A568001951F2 + + primary + + + + + diff --git a/DNA-project-3/DNA-project-3/AppDelegate.h b/DNA-project-3/DNA-project-3/AppDelegate.h new file mode 100644 index 0000000..9fc5d35 --- /dev/null +++ b/DNA-project-3/DNA-project-3/AppDelegate.h @@ -0,0 +1,43 @@ +// +// AppDelegate.h +// DNA-project-3 +// +// Created by Sergey on 22.12.12. +// Copyright (c) 2012 __MyCompanyName__. All rights reserved. +// + +#import +#import "Cell.h" + +#define DEFAULTPOPULATIONSIZE 100; +#define DEFAULTDNALENGTH 50; +#define DEFAULTMUTATIONRATE 1; + + +@interface AppDelegate : NSObject { + NSInteger populationSize; + NSInteger dnaLength; + NSInteger mutationRate; + Cell* goalDNA; + NSMutableArray* population; +} +@property (assign) IBOutlet NSWindow *window; +@property (weak) IBOutlet NSTextField *goalDNATextField; + +@property (weak) IBOutlet NSButton *pauseButton; +@property (weak) IBOutlet NSButton *startButton; +@property (weak) IBOutlet NSButton *loadButton; + +@property (weak) IBOutlet NSTextField *populationSizeTextField; +@property (weak) IBOutlet NSTextField *dnaLengthTextField; +@property (weak) IBOutlet NSTextField *mutationRateTextField; + +@property (weak) IBOutlet NSSlider *populationSizeSlider; +@property (weak) IBOutlet NSSlider *dnaLengthSlider; +@property (weak) IBOutlet NSSlider *mutationRateSlider; + +- (IBAction)startEvolution:(id)sender; +- (IBAction)pauseEvolution:(id)sender; +- (IBAction)loadGoalDNA:(id)sender; + +@end diff --git a/DNA-project-3/DNA-project-3/AppDelegate.m b/DNA-project-3/DNA-project-3/AppDelegate.m new file mode 100644 index 0000000..d7a30b0 --- /dev/null +++ b/DNA-project-3/DNA-project-3/AppDelegate.m @@ -0,0 +1,164 @@ +// +// AppDelegate.m +// DNA-project-3 +// +// Created by Sergey on 22.12.12. +// Copyright (c) 2012 __MyCompanyName__. All rights reserved. +// + +#import "AppDelegate.h" +#import "Cell.h" + +@implementation AppDelegate + +@synthesize window = _window; +@synthesize goalDNATextField; +@synthesize pauseButton; +@synthesize startButton; +@synthesize loadButton; +@synthesize populationSizeTextField; +@synthesize dnaLengthTextField; +@synthesize mutationRateTextField; +@synthesize populationSizeSlider; +@synthesize dnaLengthSlider; +@synthesize mutationRateSlider; + + +- (void)applicationDidFinishLaunching:(NSNotification *)aNotification +{ + [self willChangeValueForKey:@"populationSize"]; + populationSize = DEFAULTPOPULATIONSIZE; + [self didChangeValueForKey:@"populationSize"]; + + [self willChangeValueForKey:@"dnaLength"]; + dnaLength = DEFAULTDNALENGTH; + [self didChangeValueForKey:@"dnaLength"]; + + [self willChangeValueForKey:@"mutationRate"]; + mutationRate = DEFAULTMUTATIONRATE; + [self didChangeValueForKey:@"mutationRate"]; + + goalDNA = [[Cell alloc] init ]; + [goalDNA initWithDNALenght:dnaLength]; + [goalDNATextField setStringValue:[goalDNA stringDNA]]; + + population = [[NSMutableArray alloc] init]; +} + +-(void)setPopulationSize:(int) x { + populationSize = x; +} + +-(NSInteger)populationSize { + return populationSize; +} + +-(void)setDnaLength:(int) x { + dnaLength = x; + [goalDNA initWithDNALenght:dnaLength]; + [goalDNATextField setStringValue:[goalDNA stringDNA]]; +} + +-(NSInteger)dnaLength{ + return dnaLength; +} + +-(void)setMutationRate:(int) x { + mutationRate = x; +} + +-(NSInteger)mutationRate { + return mutationRate; +} + +- (IBAction)startEvolution:(id)sender { + /*1. создать случайную популяцию ДНК. Размер популяции = значение первого text field'а. + Размер каждого ДНК = значение второго text field'а.*/ + [population removeAllObjects]; // удаляем все старые популяции + // заполняем новыми популяциями + for (int i=0; i [obj2 integerValue]) { + return (NSComparisonResult)NSOrderedDescending; + } + if ([obj1 integerValue] < [obj2 integerValue]) { + return (NSComparisonResult)NSOrderedAscending; + } + return (NSComparisonResult)NSOrderedSame; + }]; + // непостредственно сортируем массив, используя ранее созданные десктрипторы + NSMutableArray* sortedArray = [NSMutableArray arrayWithArray:[population sortedArrayUsingDescriptors:[NSArray arrayWithObject:aSortDescriptor]]]; + population = sortedArray.copy; + + //4.2 Остановить эволюцию если есть ДНК полностью совпадающее с Goal DNA (hamming distance = 0) + // вычисляем различия hammingDistance чтобы по нему отсортировать + for (int i=0; i + + +@interface Cell : NSObject { + NSArray* arrayATGC; + NSInteger dnaLenght; + // NSInteger hammingDistance; +} + +@property (nonatomic, retain) NSMutableArray* DNA; +@property (nonatomic) NSInteger hammingDistance; + +-(void)initWithDNALenght:(NSInteger) d; +-(int)calculateHammingDistance:(Cell*) c; +-(void)mutate:(NSInteger) percent; +-(NSString*)stringDNA; +-(Cell*)crossing:(Cell*) c; + + +@end diff --git a/DNA-project-3/DNA-project-3/Cell.m b/DNA-project-3/DNA-project-3/Cell.m new file mode 100644 index 0000000..772dadf --- /dev/null +++ b/DNA-project-3/DNA-project-3/Cell.m @@ -0,0 +1,13 @@ +// +// Cell.m +// DNA-project-3 +// +// Created by Sergey on 22.12.12. +// Copyright (c) 2012 __MyCompanyName__. All rights reserved. +// + +#import "Cell.h" + +@implementation Cell + +@end diff --git a/DNA-project-3/DNA-project-3/DNA-project-3-Info.plist b/DNA-project-3/DNA-project-3/DNA-project-3-Info.plist new file mode 100644 index 0000000..96f79d1 --- /dev/null +++ b/DNA-project-3/DNA-project-3/DNA-project-3-Info.plist @@ -0,0 +1,34 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIconFile + + CFBundleIdentifier + ShSergey.${PRODUCT_NAME:rfc1034identifier} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + LSMinimumSystemVersion + ${MACOSX_DEPLOYMENT_TARGET} + NSHumanReadableCopyright + Copyright © 2012 __MyCompanyName__. All rights reserved. + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/DNA-project-3/DNA-project-3/DNA-project-3-Prefix.pch b/DNA-project-3/DNA-project-3/DNA-project-3-Prefix.pch new file mode 100644 index 0000000..556930c --- /dev/null +++ b/DNA-project-3/DNA-project-3/DNA-project-3-Prefix.pch @@ -0,0 +1,7 @@ +// +// Prefix header for all source files of the 'DNA-project-3' target in the 'DNA-project-3' project +// + +#ifdef __OBJC__ + #import +#endif diff --git a/DNA-project-3/DNA-project-3/en.lproj/Credits.rtf b/DNA-project-3/DNA-project-3/en.lproj/Credits.rtf new file mode 100644 index 0000000..46576ef --- /dev/null +++ b/DNA-project-3/DNA-project-3/en.lproj/Credits.rtf @@ -0,0 +1,29 @@ +{\rtf0\ansi{\fonttbl\f0\fswiss Helvetica;} +{\colortbl;\red255\green255\blue255;} +\paperw9840\paperh8400 +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural + +\f0\b\fs24 \cf0 Engineering: +\b0 \ + Some people\ +\ + +\b Human Interface Design: +\b0 \ + Some other people\ +\ + +\b Testing: +\b0 \ + Hopefully not nobody\ +\ + +\b Documentation: +\b0 \ + Whoever\ +\ + +\b With special thanks to: +\b0 \ + Mom\ +} diff --git a/DNA-project-3/DNA-project-3/en.lproj/InfoPlist.strings b/DNA-project-3/DNA-project-3/en.lproj/InfoPlist.strings new file mode 100644 index 0000000..477b28f --- /dev/null +++ b/DNA-project-3/DNA-project-3/en.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/DNA-project-3/DNA-project-3/en.lproj/MainMenu.xib b/DNA-project-3/DNA-project-3/en.lproj/MainMenu.xib new file mode 100644 index 0000000..8375cef --- /dev/null +++ b/DNA-project-3/DNA-project-3/en.lproj/MainMenu.xib @@ -0,0 +1,4318 @@ + + + + 1070 + 11G63 + 1938 + 1138.51 + 569.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 1938 + + + NSNumberFormatter + NSMenuItem + NSMenu + NSTextFieldCell + NSButtonCell + NSButton + NSBox + NSProgressIndicator + NSSlider + NSSliderCell + NSCustomObject + NSView + NSWindowTemplate + NSTextField + NSUserDefaultsController + + + com.apple.InterfaceBuilder.CocoaPlugin + + + PluginDependencyRecalculationVersion + + + + + NSApplication + + + FirstResponder + + + NSApplication + + + AMainMenu + + + + DNA-project-3 + + 1048576 + 2147483647 + + NSImage + NSMenuCheckmark + + + NSImage + NSMenuMixedState + + submenuAction: + + DNA-project-3 + + + + About DNA-project-3 + + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Preferences… + , + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Services + + 1048576 + 2147483647 + + + submenuAction: + + Services + + _NSServicesMenu + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Hide DNA-project-3 + h + 1048576 + 2147483647 + + + + + + Hide Others + h + 1572864 + 2147483647 + + + + + + Show All + + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Quit DNA-project-3 + q + 1048576 + 2147483647 + + + + + _NSAppleMenu + + + + + File + + 1048576 + 2147483647 + + + submenuAction: + + File + + + + New + n + 1048576 + 2147483647 + + + + + + Open… + o + 1048576 + 2147483647 + + + + + + Open Recent + + 1048576 + 2147483647 + + + submenuAction: + + Open Recent + + + + Clear Menu + + 1048576 + 2147483647 + + + + + _NSRecentDocumentsMenu + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Close + w + 1048576 + 2147483647 + + + + + + Save… + s + 1048576 + 2147483647 + + + + + + Revert to Saved + + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Page Setup... + P + 1179648 + 2147483647 + + + + + + + Print… + p + 1048576 + 2147483647 + + + + + + + + + Edit + + 1048576 + 2147483647 + + + submenuAction: + + Edit + + + + Undo + z + 1048576 + 2147483647 + + + + + + Redo + Z + 1179648 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Cut + x + 1048576 + 2147483647 + + + + + + Copy + c + 1048576 + 2147483647 + + + + + + Paste + v + 1048576 + 2147483647 + + + + + + Paste and Match Style + V + 1572864 + 2147483647 + + + + + + Delete + + 1048576 + 2147483647 + + + + + + Select All + a + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Find + + 1048576 + 2147483647 + + + submenuAction: + + Find + + + + Find… + f + 1048576 + 2147483647 + + + 1 + + + + Find and Replace… + f + 1572864 + 2147483647 + + + 12 + + + + Find Next + g + 1048576 + 2147483647 + + + 2 + + + + Find Previous + G + 1179648 + 2147483647 + + + 3 + + + + Use Selection for Find + e + 1048576 + 2147483647 + + + 7 + + + + Jump to Selection + j + 1048576 + 2147483647 + + + + + + + + + Spelling and Grammar + + 1048576 + 2147483647 + + + submenuAction: + + Spelling and Grammar + + + + Show Spelling and Grammar + : + 1048576 + 2147483647 + + + + + + Check Document Now + ; + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Check Spelling While Typing + + 1048576 + 2147483647 + + + + + + Check Grammar With Spelling + + 1048576 + 2147483647 + + + + + + Correct Spelling Automatically + + 2147483647 + + + + + + + + + Substitutions + + 1048576 + 2147483647 + + + submenuAction: + + Substitutions + + + + Show Substitutions + + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Smart Copy/Paste + f + 1048576 + 2147483647 + + + 1 + + + + Smart Quotes + g + 1048576 + 2147483647 + + + 2 + + + + Smart Dashes + + 2147483647 + + + + + + Smart Links + G + 1179648 + 2147483647 + + + 3 + + + + Text Replacement + + 2147483647 + + + + + + + + + Transformations + + 2147483647 + + + submenuAction: + + Transformations + + + + Make Upper Case + + 2147483647 + + + + + + Make Lower Case + + 2147483647 + + + + + + Capitalize + + 2147483647 + + + + + + + + + Speech + + 1048576 + 2147483647 + + + submenuAction: + + Speech + + + + Start Speaking + + 1048576 + 2147483647 + + + + + + Stop Speaking + + 1048576 + 2147483647 + + + + + + + + + + + + Format + + 2147483647 + + + submenuAction: + + Format + + + + Font + + 2147483647 + + + submenuAction: + + Font + + + + Show Fonts + t + 1048576 + 2147483647 + + + + + + Bold + b + 1048576 + 2147483647 + + + 2 + + + + Italic + i + 1048576 + 2147483647 + + + 1 + + + + Underline + u + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Bigger + + + 1048576 + 2147483647 + + + 3 + + + + Smaller + - + 1048576 + 2147483647 + + + 4 + + + + YES + YES + + + 2147483647 + + + + + + Kern + + 2147483647 + + + submenuAction: + + Kern + + + + Use Default + + 2147483647 + + + + + + Use None + + 2147483647 + + + + + + Tighten + + 2147483647 + + + + + + Loosen + + 2147483647 + + + + + + + + + Ligature + + 2147483647 + + + submenuAction: + + Ligature + + + + Use Default + + 2147483647 + + + + + + Use None + + 2147483647 + + + + + + Use All + + 2147483647 + + + + + + + + + Baseline + + 2147483647 + + + submenuAction: + + Baseline + + + + Use Default + + 2147483647 + + + + + + Superscript + + 2147483647 + + + + + + Subscript + + 2147483647 + + + + + + Raise + + 2147483647 + + + + + + Lower + + 2147483647 + + + + + + + + + YES + YES + + + 2147483647 + + + + + + Show Colors + C + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Copy Style + c + 1572864 + 2147483647 + + + + + + Paste Style + v + 1572864 + 2147483647 + + + + + _NSFontMenu + + + + + Text + + 2147483647 + + + submenuAction: + + Text + + + + Align Left + { + 1048576 + 2147483647 + + + + + + Center + | + 1048576 + 2147483647 + + + + + + Justify + + 2147483647 + + + + + + Align Right + } + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Writing Direction + + 2147483647 + + + submenuAction: + + Writing Direction + + + + YES + Paragraph + + 2147483647 + + + + + + CURlZmF1bHQ + + 2147483647 + + + + + + CUxlZnQgdG8gUmlnaHQ + + 2147483647 + + + + + + CVJpZ2h0IHRvIExlZnQ + + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + YES + Selection + + 2147483647 + + + + + + CURlZmF1bHQ + + 2147483647 + + + + + + CUxlZnQgdG8gUmlnaHQ + + 2147483647 + + + + + + CVJpZ2h0IHRvIExlZnQ + + 2147483647 + + + + + + + + + YES + YES + + + 2147483647 + + + + + + Show Ruler + + 2147483647 + + + + + + Copy Ruler + c + 1310720 + 2147483647 + + + + + + Paste Ruler + v + 1310720 + 2147483647 + + + + + + + + + + + + View + + 1048576 + 2147483647 + + + submenuAction: + + View + + + + Show Toolbar + t + 1572864 + 2147483647 + + + + + + Customize Toolbar… + + 1048576 + 2147483647 + + + + + + + + + Window + + 1048576 + 2147483647 + + + submenuAction: + + Window + + + + Minimize + m + 1048576 + 2147483647 + + + + + + Zoom + + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Bring All to Front + + 1048576 + 2147483647 + + + + + _NSWindowsMenu + + + + + Help + + 2147483647 + + + submenuAction: + + Help + + + + DNA-project-3 Help + ? + 1048576 + 2147483647 + + + + + _NSHelpMenu + + + + _NSMainMenu + + + 7 + 2 + {{335, 390}, {558, 428}} + 1954021376 + iDNA + NSWindow + + + + + 256 + + + + 268 + {{14, 12}, {132, 32}} + + + _NS:687 + YES + + 67239424 + 134217728 + Start evolution + + LucidaGrande + 13 + 1044 + + _NS:687 + + -2038284033 + 129 + + + 200 + 25 + + + + + 268 + {{146, 12}, {77, 32}} + + + _NS:687 + YES + + -1543373312 + 134217728 + Pause + + _NS:687 + + -2038284033 + 129 + + + 200 + 25 + + + + + 268 + {{410, 12}, {134, 32}} + + _NS:687 + YES + + 67239424 + 134217728 + Load goal DNA + + _NS:687 + + -2038284033 + 129 + + + 200 + 25 + + + + + 268 + {{191, 387}, {349, 21}} + + + _NS:779 + YES + + -2079981824 + 0 + + _NS:779 + + 10000 + 100 + 100 + 0.0 + 0 + 1 + NO + NO + + + + + 268 + {{17, 389}, {101, 17}} + + + _NS:3944 + YES + + 68288064 + 272630784 + Population size + + _NS:3944 + + + 6 + System + controlColor + + 3 + MC42NjY2NjY2NjY3AA + + + + 6 + System + controlTextColor + + 3 + MAA + + + + + + + 268 + {{123, 386}, {62, 22}} + + + _NS:903 + YES + + -1804468671 + 4195328 + + + + + + + + + + + + -∞ + + + +∞ + + #,##0.### + #,##0.### + + + + + + + + NaN + + + + + + 3 + YES + YES + YES + + . + , + YES + NO + YES + + 100-10000 + _NS:903 + + YES + + 6 + System + textBackgroundColor + + 3 + MQA + + + + 6 + System + textColor + + + + + + + 268 + {{17, 359}, {77, 17}} + + + _NS:3944 + YES + + 68288064 + 272630784 + DNA length + + _NS:3944 + + + + + + + + 268 + {{123, 356}, {62, 22}} + + + _NS:903 + YES + + -1804468671 + 272630784 + + + + + + + + + + -∞ + + + +∞ + + #,##0.### + #,##0.### + + + + + + + + NaN + + + + + + 3 + YES + YES + YES + + . + , + YES + NO + YES + + 50-100 + _NS:903 + + YES + + + + + + + 268 + {{191, 327}, {349, 21}} + + + _NS:779 + YES + + -2079981824 + 0 + + _NS:779 + + 100 + 1 + 1 + 0.0 + 0 + 1 + NO + NO + + + + + 268 + {{17, 329}, {102, 17}} + + + _NS:3944 + YES + + 68288064 + 272630784 + Mutation rate % + + _NS:3944 + + + + + + + + 268 + {{123, 326}, {62, 22}} + + + _NS:903 + YES + + -1804468671 + 272630784 + + + + + + + + + + + -∞ + + + +∞ + + #,##0.### + #,##0.### + + + + + + + + NaN + + + + + + 3 + YES + YES + YES + + . + , + YES + NO + YES + + 1-100 + _NS:903 + + YES + + + + + + + 268 + {{207, 295}, {95, 21}} + + + _NS:3944 + YES + + 68288064 + 272630784 + Generation: + + LucidaGrande-Bold + 15 + 16 + + _NS:3944 + + YES + + + + + + + 9228 + + {{18, 232}, {522, 20}} + + + _NS:2352 + 16394 + 100 + + + + 12 + + + + 274 + + + + 268 + {{20, 14}, {482, 112}} + + + _NS:354 + {250, 750} + YES + + -2076049920 + 272629760 + + + _NS:354 + + YES + + + + + + + 268 + {{235, 134}, {65, 17}} + + + _NS:3944 + YES + + 68288064 + 272630784 + Goal DNA + + _NS:3944 + + + + + + + {{1, 1}, {523, 146}} + + + _NS:21 + + + {{17, 51}, {525, 167}} + + + _NS:18 + {0, 0} + + 67239424 + 0 + + + LucidaGrande + 14 + 16 + + + + 3 + MCAwLjgwMDAwMDAxMTkAA + + + + 1 + 0 + 1 + NO + + + + 268 + {{304, 295}, {48, 21}} + + + _NS:3944 + YES + + 68288064 + 272630784 + 0 + + _NS:3944 + + YES + + + + + + + 268 + {{165, 270}, {155, 17}} + + + _NS:3944 + YES + + 68288064 + 272630784 + Best individual match - + + _NS:3944 + + + + + + + + 268 + {{316, 270}, {30, 17}} + + + _NS:3944 + YES + + 68288064 + 272630784 + 78% + + _NS:3944 + + + + + + + + 268 + {{192, 356}, {349, 21}} + + + _NS:779 + YES + + -2079981824 + 0 + + _NS:779 + + 300 + 50 + 50 + 0.0 + 0 + 1 + NO + NO + + + + {558, 428} + + + + {{0, 0}, {1680, 1028}} + {10000000000000, 10000000000000} + YES + + + AppDelegate + + + NSFontManager + + + YES + + + + + + + terminate: + + + + 449 + + + + orderFrontStandardAboutPanel: + + + + 142 + + + + delegate + + + + 495 + + + + performMiniaturize: + + + + 37 + + + + arrangeInFront: + + + + 39 + + + + print: + + + + 86 + + + + runPageLayout: + + + + 87 + + + + clearRecentDocuments: + + + + 127 + + + + performClose: + + + + 193 + + + + toggleContinuousSpellChecking: + + + + 222 + + + + undo: + + + + 223 + + + + copy: + + + + 224 + + + + checkSpelling: + + + + 225 + + + + paste: + + + + 226 + + + + stopSpeaking: + + + + 227 + + + + cut: + + + + 228 + + + + showGuessPanel: + + + + 230 + + + + redo: + + + + 231 + + + + selectAll: + + + + 232 + + + + startSpeaking: + + + + 233 + + + + delete: + + + + 235 + + + + performZoom: + + + + 240 + + + + performFindPanelAction: + + + + 241 + + + + centerSelectionInVisibleArea: + + + + 245 + + + + toggleGrammarChecking: + + + + 347 + + + + toggleSmartInsertDelete: + + + + 355 + + + + toggleAutomaticQuoteSubstitution: + + + + 356 + + + + toggleAutomaticLinkDetection: + + + + 357 + + + + saveDocument: + + + + 362 + + + + revertDocumentToSaved: + + + + 364 + + + + runToolbarCustomizationPalette: + + + + 365 + + + + toggleToolbarShown: + + + + 366 + + + + hide: + + + + 367 + + + + hideOtherApplications: + + + + 368 + + + + unhideAllApplications: + + + + 370 + + + + newDocument: + + + + 373 + + + + openDocument: + + + + 374 + + + + raiseBaseline: + + + + 426 + + + + lowerBaseline: + + + + 427 + + + + copyFont: + + + + 428 + + + + subscript: + + + + 429 + + + + superscript: + + + + 430 + + + + tightenKerning: + + + + 431 + + + + underline: + + + + 432 + + + + orderFrontColorPanel: + + + + 433 + + + + useAllLigatures: + + + + 434 + + + + loosenKerning: + + + + 435 + + + + pasteFont: + + + + 436 + + + + unscript: + + + + 437 + + + + useStandardKerning: + + + + 438 + + + + useStandardLigatures: + + + + 439 + + + + turnOffLigatures: + + + + 440 + + + + turnOffKerning: + + + + 441 + + + + toggleAutomaticSpellingCorrection: + + + + 456 + + + + orderFrontSubstitutionsPanel: + + + + 458 + + + + toggleAutomaticDashSubstitution: + + + + 461 + + + + toggleAutomaticTextReplacement: + + + + 463 + + + + uppercaseWord: + + + + 464 + + + + capitalizeWord: + + + + 467 + + + + lowercaseWord: + + + + 468 + + + + pasteAsPlainText: + + + + 486 + + + + performFindPanelAction: + + + + 487 + + + + performFindPanelAction: + + + + 488 + + + + performFindPanelAction: + + + + 489 + + + + showHelp: + + + + 493 + + + + alignCenter: + + + + 518 + + + + pasteRuler: + + + + 519 + + + + toggleRuler: + + + + 520 + + + + alignRight: + + + + 521 + + + + copyRuler: + + + + 522 + + + + alignJustified: + + + + 523 + + + + alignLeft: + + + + 524 + + + + makeBaseWritingDirectionNatural: + + + + 525 + + + + makeBaseWritingDirectionLeftToRight: + + + + 526 + + + + makeBaseWritingDirectionRightToLeft: + + + + 527 + + + + makeTextWritingDirectionNatural: + + + + 528 + + + + makeTextWritingDirectionLeftToRight: + + + + 529 + + + + makeTextWritingDirectionRightToLeft: + + + + 530 + + + + performFindPanelAction: + + + + 535 + + + + addFontTrait: + + + + 421 + + + + addFontTrait: + + + + 422 + + + + modifyFont: + + + + 423 + + + + orderFrontFontPanel: + + + + 424 + + + + modifyFont: + + + + 425 + + + + window + + + + 532 + + + + goalDNATextField + + + + 671 + + + + pauseButton + + + + 672 + + + + pauseEvolution: + + + + 674 + + + + startButton + + + + 675 + + + + startEvolution: + + + + 677 + + + + loadGoalDNA: + + + + 678 + + + + loadButton + + + + 679 + + + + populationSizeTextField + + + + 681 + + + + dnaLengthTextField + + + + 682 + + + + mutationRateTextField + + + + 683 + + + + populationSizeSlider + + + + 684 + + + + dnaLengthSlider + + + + 685 + + + + mutationRateSlider + + + + 686 + + + + value: self.populationSize + + + + + + value: self.populationSize + value + self.populationSize + 2 + + + 663 + + + + value: self.populationSize + + + + + + value: self.populationSize + value + self.populationSize + 2 + + + 654 + + + + value: self.dnaLength + + + + + + value: self.dnaLength + value + self.dnaLength + 2 + + + 657 + + + + value: self.mutationRate + + + + + + value: self.mutationRate + value + self.mutationRate + 2 + + + 670 + + + + value: self.mutationRate + + + + + + value: self.mutationRate + value + self.mutationRate + 2 + + + 660 + + + + value: self.dnaLength + + + + + + value: self.dnaLength + value + self.dnaLength + 2 + + + 666 + + + + + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 29 + + + + + + + + + + + + + + 19 + + + + + + + + 56 + + + + + + + + 217 + + + + + + + + 83 + + + + + + + + 81 + + + + + + + + + + + + + + + + + 75 + + + + + 78 + + + + + 72 + + + + + 82 + + + + + 124 + + + + + + + + 77 + + + + + 73 + + + + + 79 + + + + + 112 + + + + + 74 + + + + + 125 + + + + + + + + 126 + + + + + 205 + + + + + + + + + + + + + + + + + + + + + + 202 + + + + + 198 + + + + + 207 + + + + + 214 + + + + + 199 + + + + + 203 + + + + + 197 + + + + + 206 + + + + + 215 + + + + + 218 + + + + + + + + 216 + + + + + + + + 200 + + + + + + + + + + + + + 219 + + + + + 201 + + + + + 204 + + + + + 220 + + + + + + + + + + + + + 213 + + + + + 210 + + + + + 221 + + + + + 208 + + + + + 209 + + + + + 57 + + + + + + + + + + + + + + + + + + 58 + + + + + 134 + + + + + 150 + + + + + 136 + + + + + 144 + + + + + 129 + + + + + 143 + + + + + 236 + + + + + 131 + + + + + + + + 149 + + + + + 145 + + + + + 130 + + + + + 24 + + + + + + + + + + + 92 + + + + + 5 + + + + + 239 + + + + + 23 + + + + + 295 + + + + + + + + 296 + + + + + + + + + 297 + + + + + 298 + + + + + 211 + + + + + + + + 212 + + + + + + + + + 195 + + + + + 196 + + + + + 346 + + + + + 348 + + + + + + + + 349 + + + + + + + + + + + + + + 350 + + + + + 351 + + + + + 354 + + + + + 371 + + + + + + + + 372 + + + + + + + + + + + + + + + + + + + + + + + + + 375 + + + + + + + + 376 + + + + + + + + + 377 + + + + + + + + 388 + + + + + + + + + + + + + + + + + + + + + + + 389 + + + + + 390 + + + + + 391 + + + + + 392 + + + + + 393 + + + + + 394 + + + + + 395 + + + + + 396 + + + + + 397 + + + + + + + + 398 + + + + + + + + 399 + + + + + + + + 400 + + + + + 401 + + + + + 402 + + + + + 403 + + + + + 404 + + + + + 405 + + + + + + + + + + + + 406 + + + + + 407 + + + + + 408 + + + + + 409 + + + + + 410 + + + + + 411 + + + + + + + + + + 412 + + + + + 413 + + + + + 414 + + + + + 415 + + + + + + + + + + + 416 + + + + + 417 + + + + + 418 + + + + + 419 + + + + + 420 + + + + + 450 + + + + + + + + 451 + + + + + + + + + + 452 + + + + + 453 + + + + + 454 + + + + + 457 + + + + + 459 + + + + + 460 + + + + + 462 + + + + + 465 + + + + + 466 + + + + + 485 + + + + + 490 + + + + + + + + 491 + + + + + + + + 492 + + + + + 494 + + + + + 496 + + + + + + + + 497 + + + + + + + + + + + + + + + + + 498 + + + + + 499 + + + + + 500 + + + + + 501 + + + + + 502 + + + + + 503 + + + + + + + + 504 + + + + + 505 + + + + + 506 + + + + + 507 + + + + + 508 + + + + + + + + + + + + + + + + 509 + + + + + 510 + + + + + 511 + + + + + 512 + + + + + 513 + + + + + 514 + + + + + 515 + + + + + 516 + + + + + 517 + + + + + 534 + + + + + 536 + + + + + + + + 537 + + + + + 538 + + + + + + + + 539 + + + + + 540 + + + + + + + + 541 + + + + + 542 + + + + + + + + 543 + + + + + 544 + + + + + + + + 545 + + + + + 546 + + + + + + + + 547 + + + + + + + + 549 + + + + + + + + 550 + + + + + + + + 551 + + + + + + + + 552 + + + + + 554 + + + + + + + + 555 + + + + + + + + 556 + + + + + + + + 557 + + + + + + + + 558 + + + + + 559 + + + + + 566 + + + + + + + + 567 + + + + + 570 + + + + + 586 + + + + + + + + + 580 + + + + + + + + 581 + + + + + 587 + + + + + + + + 588 + + + + + 589 + + + + + + + + 590 + + + + + 591 + + + + + + + + 592 + + + + + 593 + + + + + + + + 594 + + + + + 595 + + + + + 596 + + + + + 597 + + + + + 598 + + + + + 650 + + + + + + + + 651 + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{380, 496}, {480, 360}} + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + com.apple.InterfaceBuilder.CocoaPlugin + + + com.apple.InterfaceBuilder.CocoaPlugin + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + 686 + + + 0 + IBCocoaFramework + YES + 3 + + {11, 11} + {10, 3} + + + diff --git a/DNA-project-3/DNA-project-3/main.m b/DNA-project-3/DNA-project-3/main.m new file mode 100644 index 0000000..8bbebd9 --- /dev/null +++ b/DNA-project-3/DNA-project-3/main.m @@ -0,0 +1,14 @@ +// +// main.m +// DNA-project-3 +// +// Created by Sergey on 22.12.12. +// Copyright (c) 2012 __MyCompanyName__. All rights reserved. +// + +#import + +int main(int argc, char *argv[]) +{ + return NSApplicationMain(argc, (const char **)argv); +} From 589dcf832978642c50c69896d2aab005d66629c5 Mon Sep 17 00:00:00 2001 From: ShSergey Date: Sun, 23 Dec 2012 16:30:58 +0400 Subject: [PATCH 2/7] =?UTF-8?q?=D0=BF=D1=80=D0=B5=D0=B4=D0=B2=D0=B0=D1=80?= =?UTF-8?q?=D0=B8=D1=82=D0=B5=D0=BB=D1=8C=D0=BD=D1=8B=D0=B9=201?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DNA-project-3.xcodeproj/project.pbxproj | 8 +- .../UserInterfaceState.xcuserstate | Bin 17842 -> 18298 bytes DNA-project-3/DNA-project-3/Cell.m | 99 +++++++++++++++++- 3 files changed, 100 insertions(+), 7 deletions(-) diff --git a/DNA-project-3/DNA-project-3.xcodeproj/project.pbxproj b/DNA-project-3/DNA-project-3.xcodeproj/project.pbxproj index b133051..a53cce2 100644 --- a/DNA-project-3/DNA-project-3.xcodeproj/project.pbxproj +++ b/DNA-project-3/DNA-project-3.xcodeproj/project.pbxproj @@ -13,7 +13,7 @@ A52619DB1685A568001951F2 /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = A52619D91685A568001951F2 /* Credits.rtf */; }; A52619DE1685A568001951F2 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = A52619DD1685A568001951F2 /* AppDelegate.m */; }; A52619E11685A568001951F2 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = A52619DF1685A568001951F2 /* MainMenu.xib */; }; - A52619E91685B78C001951F2 /* Cell.m in Sources */ = {isa = PBXBuildFile; fileRef = A52619E81685B78C001951F2 /* Cell.m */; }; + A5F06F4A168729BD005B9EA4 /* Cell.m in Sources */ = {isa = PBXBuildFile; fileRef = A5F06F49168729BD005B9EA4 /* Cell.m */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -31,7 +31,7 @@ A52619DD1685A568001951F2 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; A52619E01685A568001951F2 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/MainMenu.xib; sourceTree = ""; }; A52619E71685B78C001951F2 /* Cell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Cell.h; sourceTree = ""; }; - A52619E81685B78C001951F2 /* Cell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Cell.m; sourceTree = ""; }; + A5F06F49168729BD005B9EA4 /* Cell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Cell.m; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -87,8 +87,8 @@ children = ( A52619DC1685A568001951F2 /* AppDelegate.h */, A52619DD1685A568001951F2 /* AppDelegate.m */, + A5F06F49168729BD005B9EA4 /* Cell.m */, A52619E71685B78C001951F2 /* Cell.h */, - A52619E81685B78C001951F2 /* Cell.m */, A52619DF1685A568001951F2 /* MainMenu.xib */, A52619D11685A568001951F2 /* Supporting Files */, ); @@ -172,7 +172,7 @@ files = ( A52619D71685A568001951F2 /* main.m in Sources */, A52619DE1685A568001951F2 /* AppDelegate.m in Sources */, - A52619E91685B78C001951F2 /* Cell.m in Sources */, + A5F06F4A168729BD005B9EA4 /* Cell.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/DNA-project-3/DNA-project-3.xcodeproj/project.xcworkspace/xcuserdata/sergey.xcuserdatad/UserInterfaceState.xcuserstate b/DNA-project-3/DNA-project-3.xcodeproj/project.xcworkspace/xcuserdata/sergey.xcuserdatad/UserInterfaceState.xcuserstate index 5d6faf2f20cf219c867460d956421fa768bd8c52..507ce958ecc2dfbbf965755df4050fd1cdfd5532 100644 GIT binary patch literal 18298 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 GKK~En3?Z}t delta 10344 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 diff --git a/DNA-project-3/DNA-project-3/Cell.m b/DNA-project-3/DNA-project-3/Cell.m index 772dadf..0d86d54 100644 --- a/DNA-project-3/DNA-project-3/Cell.m +++ b/DNA-project-3/DNA-project-3/Cell.m @@ -1,13 +1,106 @@ // // Cell.m -// DNA-project-3 +// Project1DNK // -// Created by Sergey on 22.12.12. -// Copyright (c) 2012 __MyCompanyName__. All rights reserved. +// Created by Sergey on 02.11.12. +// Copyright (c) 2012 Sergey. All rights reserved. // #import "Cell.h" @implementation Cell +@synthesize hammingDistance; +@synthesize DNA = _DNA; + +-(id) init { + self = [super init]; + if (self) { + arrayATGC = [[NSArray alloc] initWithObjects:@"A", @"T", @"G", @"C",nil]; + _DNA = [[NSMutableArray alloc] init]; + } + return self; +} + +-(void)initWithDNALenght:(NSInteger) d { + dnaLenght = d; + for (int i=0; i(dnaLenght-halfdnaLenght)) + [crossingCell.DNA addObject:[_DNA objectAtIndex:i]]; + else + [crossingCell.DNA addObject:[c.DNA objectAtIndex:i]]; + } + } + return crossingCell; +} + + @end From 116a499bfb914968700e6ff7868e2263782bd821 Mon Sep 17 00:00:00 2001 From: ShSergey Date: Mon, 24 Dec 2012 19:41:17 +0400 Subject: [PATCH 3/7] =?UTF-8?q?=D0=BF=D1=80=D0=B5=D0=B4=D0=B2=D0=B0=D1=80?= =?UTF-8?q?=D0=B8=D1=82=D0=B5=D0=BB=D1=8C=D0=BD=D1=8B=D0=B9=202?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .DS_Store | Bin 6148 -> 6148 bytes DNA-project-3/.DS_Store | Bin 0 -> 6148 bytes .../DNA-project-3.xcodeproj/project.pbxproj | 4 +- .../UserInterfaceState.xcuserstate | Bin 18298 -> 20634 bytes .../WorkspaceSettings.xcsettings | 10 + .../xcschemes/DNA-project-3.xcscheme | 6 +- DNA-project-3/DNA-project-3/.DS_Store | Bin 0 -> 6148 bytes DNA-project-3/DNA-project-3/AppDelegate.h | 11 + DNA-project-3/DNA-project-3/AppDelegate.m | 248 +++++++++++----- DNA-project-3/DNA-project-3/Cell.h | 2 +- DNA-project-3/DNA-project-3/Cell.m | 25 +- .../DNA-project-3/en.lproj/MainMenu.xib | 279 ++++++++++++++++-- 12 files changed, 479 insertions(+), 106 deletions(-) create mode 100644 DNA-project-3/.DS_Store create mode 100644 DNA-project-3/DNA-project-3.xcodeproj/project.xcworkspace/xcuserdata/sergey.xcuserdatad/WorkspaceSettings.xcsettings create mode 100644 DNA-project-3/DNA-project-3/.DS_Store diff --git a/.DS_Store b/.DS_Store index 5008ddfcf53c02e82d7eee2e57c38e5672ef89f6..ab23e6a3e6384a245c000e2f52591a572bad9510 100644 GIT binary patch delta 342 zcmZoMXfc=|#>B)qF;Q%yo}wrd0|Nsi1A_nqLjgk(Lq0C}}^&lBu1{VfD z21f>6WLbt1Am2Etytp7KCqD_OYF$!6PG)h5fx$IKCT12^Hg*mm;E4&(%uC5Hcgio# zODT>H&d4th&P+*7N-T;6vr7_7N{gKmi@-7gi6t3888AB}KR*Y^u8)B#56?^~$%q#a zudX&R(orxrG_KWAs5Un@&`~fkwy3S;1OkD19HL5kHXb2~)it$s^*|>90VB{`V89Ed zVN@fKfyZNI!9{sF`FX7AKxK>@6MwQyHV|Ri%+0~g0SvW`iQkzg^NT35fAjHu~2NHo+1YW5HK<@2y7N){>HLdfq56xW_AvK4xj>{$am(+{342+ UKzW7)kiy9(Jj$D6L{=~Z01@sEU;qFB diff --git a/DNA-project-3/.DS_Store b/DNA-project-3/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..f9c9273e1d10a7875f9251d7abe3288b7a9ab418 GIT binary patch literal 6148 zcmeHKF-k-+5PhRtELgammbrj}c!9XY)@Cmt>=!{?vdAu2{>p=R85@se;hW4Te*BG% zEXxceZ!(jaBoBV_2Y}4C-32fMFlAE|RYpY3qpky=tSBwV8c(Qrz#Wz&iFVPXdp|+J z4X$v8pZni%e2H^B^DGq|&*a|6dcRoK)!L5pa{TuUt6EC8-H@aAkJq7j^) z5-n7`#1IRoJ^8%s*c)0nq^-<6zVcV`B5ifrQ=1OShS3KD!N8D#LmSTY{lDfXGg{;i zLt+#R1Ot1%ci39dQ~XY2R{KE=sj}UoaRreb6$4r4K<6} RTR1U(1R5dH1q1)Uz$Y?sC&>T+ literal 0 HcmV?d00001 diff --git a/DNA-project-3/DNA-project-3.xcodeproj/project.pbxproj b/DNA-project-3/DNA-project-3.xcodeproj/project.pbxproj index a53cce2..ccd632a 100644 --- a/DNA-project-3/DNA-project-3.xcodeproj/project.pbxproj +++ b/DNA-project-3/DNA-project-3.xcodeproj/project.pbxproj @@ -133,7 +133,7 @@ A52619BD1685A568001951F2 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0420; + LastUpgradeCheck = 0450; }; buildConfigurationList = A52619C01685A568001951F2 /* Build configuration list for PBXProject "DNA-project-3" */; compatibilityVersion = "Xcode 3.2"; @@ -256,6 +256,7 @@ A52619E51685A568001951F2 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + COMBINE_HIDPI_IMAGES = YES; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "DNA-project-3/DNA-project-3-Prefix.pch"; INFOPLIST_FILE = "DNA-project-3/DNA-project-3-Info.plist"; @@ -267,6 +268,7 @@ A52619E61685A568001951F2 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + COMBINE_HIDPI_IMAGES = YES; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "DNA-project-3/DNA-project-3-Prefix.pch"; INFOPLIST_FILE = "DNA-project-3/DNA-project-3-Info.plist"; diff --git a/DNA-project-3/DNA-project-3.xcodeproj/project.xcworkspace/xcuserdata/sergey.xcuserdatad/UserInterfaceState.xcuserstate b/DNA-project-3/DNA-project-3.xcodeproj/project.xcworkspace/xcuserdata/sergey.xcuserdatad/UserInterfaceState.xcuserstate index 507ce958ecc2dfbbf965755df4050fd1cdfd5532..8c59a4e225092fd2facb34d57e2d992aad9ba673 100644 GIT binary patch literal 20634 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 ai-L+2MM*_kF$73a;y1TW{C0j8>Hj}9OXdRr delta 10634 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 S)~5^;{1w39Z_RgB_x}gf$^oAM diff --git a/DNA-project-3/DNA-project-3.xcodeproj/project.xcworkspace/xcuserdata/sergey.xcuserdatad/WorkspaceSettings.xcsettings b/DNA-project-3/DNA-project-3.xcodeproj/project.xcworkspace/xcuserdata/sergey.xcuserdatad/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..bfffcfe --- /dev/null +++ b/DNA-project-3/DNA-project-3.xcodeproj/project.xcworkspace/xcuserdata/sergey.xcuserdatad/WorkspaceSettings.xcsettings @@ -0,0 +1,10 @@ + + + + + HasAskedToTakeAutomaticSnapshotBeforeSignificantChanges + + SnapshotAutomaticallyBeforeSignificantChanges + + + diff --git a/DNA-project-3/DNA-project-3.xcodeproj/xcuserdata/sergey.xcuserdatad/xcschemes/DNA-project-3.xcscheme b/DNA-project-3/DNA-project-3.xcodeproj/xcuserdata/sergey.xcuserdatad/xcschemes/DNA-project-3.xcscheme index 1d569bb..2306ad4 100644 --- a/DNA-project-3/DNA-project-3.xcodeproj/xcuserdata/sergey.xcuserdatad/xcschemes/DNA-project-3.xcscheme +++ b/DNA-project-3/DNA-project-3.xcodeproj/xcuserdata/sergey.xcuserdatad/xcschemes/DNA-project-3.xcscheme @@ -1,5 +1,6 @@ @@ -39,11 +40,12 @@ diff --git a/DNA-project-3/DNA-project-3/.DS_Store b/DNA-project-3/DNA-project-3/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 GIT binary patch literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0 [obj2 integerValue]) { - return (NSComparisonResult)NSOrderedDescending; + NSLog(@"генерация = %i",generation); + // [generationTextField setStringValue:[NSString stringWithFormat:@"%d", generation]]; + //4.1 Отсортировать популяцию по близости (hamming distance) к Goal DNA + // вычисляем различия hammingDistance чтобы по нему отсортировать + for (int i=0; i [obj2 integerValue]) { + return (NSComparisonResult)NSOrderedDescending; + } + if ([obj1 integerValue] < [obj2 integerValue]) { + return (NSComparisonResult)NSOrderedAscending; + } + return (NSComparisonResult)NSOrderedSame; + }]; + // непостредственно сортируем массив, используя ранее созданные десктрипторы + NSMutableArray* sortedArray = [NSMutableArray arrayWithArray:[population sortedArrayUsingDescriptors:[NSArray arrayWithObject:aSortDescriptor]] ]; + [population removeAllObjects]; + for (int i=0; i(dnaLenght-halfdnaLenght)) - [crossingCell.DNA addObject:[_DNA objectAtIndex:i]]; + [NewDNA addObject:[_DNA objectAtIndex:i]]; else - [crossingCell.DNA addObject:[c.DNA objectAtIndex:i]]; + [NewDNA addObject:[c.DNA objectAtIndex:i]]; } } - return crossingCell; + return NewDNA; } diff --git a/DNA-project-3/DNA-project-3/en.lproj/MainMenu.xib b/DNA-project-3/DNA-project-3/en.lproj/MainMenu.xib index 8375cef..67fe734 100644 --- a/DNA-project-3/DNA-project-3/en.lproj/MainMenu.xib +++ b/DNA-project-3/DNA-project-3/en.lproj/MainMenu.xib @@ -3,29 +3,29 @@ 1070 11G63 - 1938 + 2844 1138.51 569.00 com.apple.InterfaceBuilder.CocoaPlugin - 1938 + 2844 - NSNumberFormatter - NSMenuItem - NSMenu - NSTextFieldCell - NSButtonCell - NSButton NSBox + NSButton + NSButtonCell + NSCustomObject + NSMenu + NSMenuItem + NSNumberFormatter NSProgressIndicator NSSlider NSSliderCell - NSCustomObject - NSView - NSWindowTemplate NSTextField + NSTextFieldCell NSUserDefaultsController + NSView + NSWindowTemplate com.apple.InterfaceBuilder.CocoaPlugin @@ -1317,6 +1317,7 @@ 268 {{14, 12}, {132, 32}} + _NS:687 YES @@ -1344,6 +1345,7 @@ 268 {{146, 12}, {77, 32}} + _NS:687 YES @@ -1367,6 +1369,8 @@ 268 {{410, 12}, {134, 32}} + + _NS:687 YES @@ -1389,6 +1393,7 @@ 268 {{191, 387}, {349, 21}} + _NS:779 YES @@ -1413,6 +1418,7 @@ 268 {{17, 389}, {101, 17}} + _NS:3944 YES @@ -1448,6 +1454,7 @@ 268 {{123, 386}, {62, 22}} + _NS:903 YES @@ -1522,6 +1529,7 @@ 268 {{17, 359}, {77, 17}} + _NS:3944 YES @@ -1541,6 +1549,7 @@ 268 {{123, 356}, {62, 22}} + _NS:903 YES @@ -1600,6 +1609,7 @@ 268 {{191, 327}, {349, 21}} + _NS:779 YES @@ -1624,6 +1634,7 @@ 268 {{17, 329}, {102, 17}} + _NS:3944 YES @@ -1643,6 +1654,7 @@ 268 {{123, 326}, {62, 22}} + _NS:903 YES @@ -1703,6 +1715,7 @@ 268 {{207, 295}, {95, 21}} + _NS:3944 YES @@ -1728,9 +1741,10 @@ {{18, 232}, {522, 20}} + _NS:2352 - 16394 + 16392 100 @@ -1746,6 +1760,7 @@ 268 {{20, 14}, {482, 112}} + _NS:354 {250, 750} @@ -1767,6 +1782,7 @@ 268 {{235, 134}, {65, 17}} + _NS:3944 YES @@ -1784,12 +1800,14 @@ {{1, 1}, {523, 146}} + _NS:21 {{17, 51}, {525, 167}} + _NS:18 {0, 0} @@ -1797,7 +1815,7 @@ 67239424 0 - + LucidaGrande 14 16 @@ -1819,6 +1837,7 @@ 268 {{304, 295}, {48, 21}} + _NS:3944 YES @@ -1837,8 +1856,9 @@ 268 - {{165, 270}, {155, 17}} + {{181, 270}, {155, 17}} + _NS:3944 YES @@ -1856,15 +1876,16 @@ 268 - {{316, 270}, {30, 17}} + {{325, 270}, {32, 17}} - + + _NS:3944 YES 68288064 - 272630784 - 78% + 71304192 + 0 _NS:3944 @@ -1877,6 +1898,7 @@ 268 {{192, 356}, {349, 21}} + _NS:779 YES @@ -1896,9 +1918,30 @@ NO + + + 268 + {{353, 270}, {24, 17}} + + + + _NS:1535 + YES + + 68157504 + 272630784 + % + + _NS:1535 + + + + + {558, 428} + {{0, 0}, {1680, 1028}} @@ -2701,6 +2744,30 @@ 686 + + + bestMatchTextField + + + + 689 + + + + generationTextField + + + + 690 + + + + progressIndicator + + + + 691 + value: self.populationSize @@ -2781,6 +2848,54 @@ 660 + + + value: self.bestHammingDistance + + + + + + value: self.bestHammingDistance + value + self.bestHammingDistance + 2 + + + 703 + + + + value: self.generation + + + + + + value: self.generation + value + self.generation + 2 + + + 697 + + + + value: self.bestHammingDistance + + + + + + value: self.bestHammingDistance + value + self.bestHammingDistance + 2 + + + 700 + value: self.dnaLength @@ -3331,8 +3446,6 @@ - - @@ -3340,6 +3453,9 @@ + + + @@ -4093,6 +4209,19 @@ + + 704 + + + + + + + + 705 + + + @@ -4287,6 +4416,8 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -4303,9 +4434,113 @@ - 686 + 705 +

+ + + + AppDelegate + NSObject + + id + id + id + + + + loadGoalDNA: + id + + + pauseEvolution: + id + + + startEvolution: + id + + + + NSTextField + NSSlider + NSTextField + NSTextField + NSTextField + NSButton + NSSlider + NSTextField + NSButton + NSSlider + NSTextField + NSProgressIndicator + NSButton + NSWindow + + + + bestMatchTextField + NSTextField + + + dnaLengthSlider + NSSlider + + + dnaLengthTextField + NSTextField + + + generationTextField + NSTextField + + + goalDNATextField + NSTextField + + + loadButton + NSButton + + + mutationRateSlider + NSSlider + + + mutationRateTextField + NSTextField + + + pauseButton + NSButton + + + populationSizeSlider + NSSlider + + + populationSizeTextField + NSTextField + + + progressIndicator + NSProgressIndicator + + + startButton + NSButton + + + window + NSWindow + + + + IBProjectSource + ./Classes/AppDelegate.h + + + - 0 IBCocoaFramework YES From c1525e5c8dfbfc23a6642d8e758e2c6f9c56ecd6 Mon Sep 17 00:00:00 2001 From: ShSergey Date: Tue, 25 Dec 2012 15:27:01 +0400 Subject: [PATCH 4/7] =?UTF-8?q?=D0=BF=D1=80=D0=B5=D0=B4=D0=B2=D0=B0=D1=80?= =?UTF-8?q?=D0=B8=D1=82=D0=B5=D0=BB=D1=8C=D0=BD=D1=8B=D0=B9=203?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserInterfaceState.xcuserstate | Bin 20634 -> 25018 bytes DNA-project-3/DNA-project-3/AppDelegate.h | 6 +- DNA-project-3/DNA-project-3/AppDelegate.m | 131 +- DNA-project-3/DNA-project-3/Cell.h | 3 +- DNA-project-3/DNA-project-3/Cell.m | 42 +- .../DNA-project-3/en.lproj/MainMenu.xib | 10 +- .../TestUndoManager.xcodeproj/project.pbxproj | 304 ++ .../contents.xcworkspacedata | 7 + .../UserInterfaceState.xcuserstate | Bin 0 -> 14402 bytes .../xcschemes/TestUndoManager.xcscheme | 86 + .../xcschemes/xcschememanagement.plist | 22 + TestUndoManager/TestUndoManager/AppDelegate.h | 19 + TestUndoManager/TestUndoManager/AppDelegate.m | 71 + .../TestUndoManager-Info.plist | 34 + .../TestUndoManager-Prefix.pch | 7 + .../TestUndoManager/en.lproj/Credits.rtf | 29 + .../en.lproj/InfoPlist.strings | 2 + .../TestUndoManager/en.lproj/MainMenu.xib | 3446 +++++++++++++++++ TestUndoManager/TestUndoManager/main.m | 14 + 19 files changed, 4204 insertions(+), 29 deletions(-) create mode 100644 TestUndoManager/TestUndoManager.xcodeproj/project.pbxproj create mode 100644 TestUndoManager/TestUndoManager.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 TestUndoManager/TestUndoManager.xcodeproj/project.xcworkspace/xcuserdata/sergey.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 TestUndoManager/TestUndoManager.xcodeproj/xcuserdata/sergey.xcuserdatad/xcschemes/TestUndoManager.xcscheme create mode 100644 TestUndoManager/TestUndoManager.xcodeproj/xcuserdata/sergey.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 TestUndoManager/TestUndoManager/AppDelegate.h create mode 100644 TestUndoManager/TestUndoManager/AppDelegate.m create mode 100644 TestUndoManager/TestUndoManager/TestUndoManager-Info.plist create mode 100644 TestUndoManager/TestUndoManager/TestUndoManager-Prefix.pch create mode 100644 TestUndoManager/TestUndoManager/en.lproj/Credits.rtf create mode 100644 TestUndoManager/TestUndoManager/en.lproj/InfoPlist.strings create mode 100644 TestUndoManager/TestUndoManager/en.lproj/MainMenu.xib create mode 100644 TestUndoManager/TestUndoManager/main.m diff --git a/DNA-project-3/DNA-project-3.xcodeproj/project.xcworkspace/xcuserdata/sergey.xcuserdatad/UserInterfaceState.xcuserstate b/DNA-project-3/DNA-project-3.xcodeproj/project.xcworkspace/xcuserdata/sergey.xcuserdatad/UserInterfaceState.xcuserstate index 8c59a4e225092fd2facb34d57e2d992aad9ba673..650de89895c4faff58cb103827b336d61104a896 100644 GIT binary patch delta 14028 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 F{|^Y-IY0ma delta 10591 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 { NSInteger populationSize; @@ -24,8 +24,9 @@ int generation; NSInteger bestHammingDistance; NSUndoManager* undoManager; - NSInteger test; } +//@property (nonatomic,retain) NSUndoManager *undoManager; + @property (assign) IBOutlet NSWindow *window; @property (weak) IBOutlet NSTextField *goalDNATextField; @@ -51,4 +52,5 @@ -(void)setVisible:(BOOL) v; + @end diff --git a/DNA-project-3/DNA-project-3/AppDelegate.m b/DNA-project-3/DNA-project-3/AppDelegate.m index 91399de..ffb15fc 100644 --- a/DNA-project-3/DNA-project-3/AppDelegate.m +++ b/DNA-project-3/DNA-project-3/AppDelegate.m @@ -26,23 +26,27 @@ @implementation AppDelegate @synthesize generationTextField; @synthesize bestMatchTextField; +//@synthesize undoManager; + static void *RMDocumentKVOContext; -(id)init { self = [super init]; if (self) { + [self addObserver:self forKeyPath:@"populationSize" options:NSKeyValueObservingOptionOld context:&RMDocumentKVOContext]; + [self addObserver:self forKeyPath:@"dnaLength" options:NSKeyValueObservingOptionOld context:&RMDocumentKVOContext]; + [self addObserver:self forKeyPath:@"mutationRate" options:NSKeyValueObservingOptionOld context:&RMDocumentKVOContext]; undoManager = [[NSUndoManager alloc] init]; - NSLog(@"OKKKKK"); - [self addObserver:self forKeyPath:@"populationSize" options:0 context:&RMDocumentKVOContext]; - [self addObserver:self forKeyPath:@"dnaLength" options:0 context:&RMDocumentKVOContext]; - [self addObserver:self forKeyPath:@"mutationRate" options:0 context:&RMDocumentKVOContext]; - [self addObserver:self forKeyPath:@"test" options:0 context:&RMDocumentKVOContext]; + NSLog(@"OK"); } return self; } --(void)changeKeyPath:(NSString*)keyPath - ofObject:(id)obj - toValue:(id)newValue { + +- (NSUndoManager*) windowWillReturnUndoManager: (NSWindow*) window { + return undoManager; +} + +-(void) changeKeyPath:(NSString*)keyPath ofObject:(id)obj toValue:(id)newValue { [obj setValue:newValue forKeyPath:keyPath]; } @@ -52,22 +56,19 @@ -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NS return; } id oldValue = [change objectForKey:NSKeyValueChangeOldKey]; - NSLog(@"oldValue=%@",oldValue); if (oldValue == [NSNull null]) oldValue = nil; - NSLog(@"keyPath=%@",keyPath); [[undoManager prepareWithInvocationTarget:self] changeKeyPath:keyPath ofObject:object toValue:oldValue]; + [undoManager setActionName:@"Edit"]; } -(void)dealloc { [self removeObserver:self forKeyPath:@"populationSize"]; [self removeObserver:self forKeyPath:@"dnaLength"]; [self removeObserver:self forKeyPath:@"mutationRate"]; - [self removeObserver:self forKeyPath:@"test"]; } -- (void)applicationDidFinishLaunching:(NSNotification *)aNotification -{ +- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { [self willChangeValueForKey:@"populationSize"]; populationSize = DEFAULTPOPULATIONSIZE; [self didChangeValueForKey:@"populationSize"]; @@ -85,7 +86,7 @@ - (void)applicationDidFinishLaunching:(NSNotification *)aNotification [self didChangeValueForKey:@"generation"]; goalDNA = [[Cell alloc] init ]; - [goalDNA initWithDNALenght:dnaLength]; + [goalDNA fillDNALenght:dnaLength]; [goalDNATextField setStringValue:[goalDNA stringDNA]]; population = [[NSMutableArray alloc] init]; @@ -102,7 +103,7 @@ -(NSInteger)populationSize { -(void)setDnaLength:(int) x { dnaLength = x; - [goalDNA initWithDNALenght:dnaLength]; + [goalDNA fillDNALenght:dnaLength]; [goalDNATextField setStringValue:[goalDNA stringDNA]]; } @@ -147,9 +148,8 @@ -(void)setVisible:(BOOL) v { [loadButton setEnabled:!v]; [startButton setEnabled:!v]; - /*3. сделать активной кнопку Pause. */ - [pauseButton setEnabled:v]; - + /*3. сделать активной кнопку Pause. */ + [pauseButton setEnabled:v]; } -(void)processEvolution{ @@ -171,7 +171,7 @@ -(void)processEvolution{ // заполняем новыми популяциями for (int i=0; i dnaLenght) { + for (i=dnaLenght; i=d; i--) { + [_DNA removeObjectAtIndex:i]; + } + } dnaLenght = d; - for (int i=0; i %lu",[_DNA count], dnaLenght ); + + } +} + +-(BOOL)fillDNAString:(NSString*) s { + NSInteger n = [s length]; + // перебираем переданную строку и ищем запрещенные символы + for (NSInteger i=0; i 535

+ + + delegate + + + + 706 + addFontTrait: @@ -4434,7 +4442,7 @@ - 705 + 706 diff --git a/TestUndoManager/TestUndoManager.xcodeproj/project.pbxproj b/TestUndoManager/TestUndoManager.xcodeproj/project.pbxproj new file mode 100644 index 0000000..4a5f55e --- /dev/null +++ b/TestUndoManager/TestUndoManager.xcodeproj/project.pbxproj @@ -0,0 +1,304 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + A57607621688B8DD0050A54E /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A57607611688B8DD0050A54E /* Cocoa.framework */; }; + A576076C1688B8DD0050A54E /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = A576076A1688B8DD0050A54E /* InfoPlist.strings */; }; + A576076E1688B8DD0050A54E /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = A576076D1688B8DD0050A54E /* main.m */; }; + A57607721688B8DD0050A54E /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = A57607701688B8DD0050A54E /* Credits.rtf */; }; + A57607751688B8DD0050A54E /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = A57607741688B8DD0050A54E /* AppDelegate.m */; }; + A57607781688B8DD0050A54E /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = A57607761688B8DD0050A54E /* MainMenu.xib */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + A576075D1688B8DD0050A54E /* TestUndoManager.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = TestUndoManager.app; sourceTree = BUILT_PRODUCTS_DIR; }; + A57607611688B8DD0050A54E /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; + A57607641688B8DD0050A54E /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; }; + A57607651688B8DD0050A54E /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; }; + A57607661688B8DD0050A54E /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + A57607691688B8DD0050A54E /* TestUndoManager-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "TestUndoManager-Info.plist"; sourceTree = ""; }; + A576076B1688B8DD0050A54E /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; + A576076D1688B8DD0050A54E /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + A576076F1688B8DD0050A54E /* TestUndoManager-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "TestUndoManager-Prefix.pch"; sourceTree = ""; }; + A57607711688B8DD0050A54E /* en */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = en; path = en.lproj/Credits.rtf; sourceTree = ""; }; + A57607731688B8DD0050A54E /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; + A57607741688B8DD0050A54E /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; + A57607771688B8DD0050A54E /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/MainMenu.xib; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + A576075A1688B8DD0050A54E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + A57607621688B8DD0050A54E /* Cocoa.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + A57607521688B8DD0050A54E = { + isa = PBXGroup; + children = ( + A57607671688B8DD0050A54E /* TestUndoManager */, + A57607601688B8DD0050A54E /* Frameworks */, + A576075E1688B8DD0050A54E /* Products */, + ); + sourceTree = ""; + }; + A576075E1688B8DD0050A54E /* Products */ = { + isa = PBXGroup; + children = ( + A576075D1688B8DD0050A54E /* TestUndoManager.app */, + ); + name = Products; + sourceTree = ""; + }; + A57607601688B8DD0050A54E /* Frameworks */ = { + isa = PBXGroup; + children = ( + A57607611688B8DD0050A54E /* Cocoa.framework */, + A57607631688B8DD0050A54E /* Other Frameworks */, + ); + name = Frameworks; + sourceTree = ""; + }; + A57607631688B8DD0050A54E /* Other Frameworks */ = { + isa = PBXGroup; + children = ( + A57607641688B8DD0050A54E /* AppKit.framework */, + A57607651688B8DD0050A54E /* CoreData.framework */, + A57607661688B8DD0050A54E /* Foundation.framework */, + ); + name = "Other Frameworks"; + sourceTree = ""; + }; + A57607671688B8DD0050A54E /* TestUndoManager */ = { + isa = PBXGroup; + children = ( + A57607731688B8DD0050A54E /* AppDelegate.h */, + A57607741688B8DD0050A54E /* AppDelegate.m */, + A57607761688B8DD0050A54E /* MainMenu.xib */, + A57607681688B8DD0050A54E /* Supporting Files */, + ); + path = TestUndoManager; + sourceTree = ""; + }; + A57607681688B8DD0050A54E /* Supporting Files */ = { + isa = PBXGroup; + children = ( + A57607691688B8DD0050A54E /* TestUndoManager-Info.plist */, + A576076A1688B8DD0050A54E /* InfoPlist.strings */, + A576076D1688B8DD0050A54E /* main.m */, + A576076F1688B8DD0050A54E /* TestUndoManager-Prefix.pch */, + A57607701688B8DD0050A54E /* Credits.rtf */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + A576075C1688B8DD0050A54E /* TestUndoManager */ = { + isa = PBXNativeTarget; + buildConfigurationList = A576077B1688B8DD0050A54E /* Build configuration list for PBXNativeTarget "TestUndoManager" */; + buildPhases = ( + A57607591688B8DD0050A54E /* Sources */, + A576075A1688B8DD0050A54E /* Frameworks */, + A576075B1688B8DD0050A54E /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = TestUndoManager; + productName = TestUndoManager; + productReference = A576075D1688B8DD0050A54E /* TestUndoManager.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + A57607541688B8DD0050A54E /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0450; + ORGANIZATIONNAME = Sergey; + }; + buildConfigurationList = A57607571688B8DD0050A54E /* Build configuration list for PBXProject "TestUndoManager" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = A57607521688B8DD0050A54E; + productRefGroup = A576075E1688B8DD0050A54E /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + A576075C1688B8DD0050A54E /* TestUndoManager */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + A576075B1688B8DD0050A54E /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + A576076C1688B8DD0050A54E /* InfoPlist.strings in Resources */, + A57607721688B8DD0050A54E /* Credits.rtf in Resources */, + A57607781688B8DD0050A54E /* MainMenu.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + A57607591688B8DD0050A54E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + A576076E1688B8DD0050A54E /* main.m in Sources */, + A57607751688B8DD0050A54E /* AppDelegate.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + A576076A1688B8DD0050A54E /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + A576076B1688B8DD0050A54E /* en */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; + A57607701688B8DD0050A54E /* Credits.rtf */ = { + isa = PBXVariantGroup; + children = ( + A57607711688B8DD0050A54E /* en */, + ); + name = Credits.rtf; + sourceTree = ""; + }; + A57607761688B8DD0050A54E /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + A57607771688B8DD0050A54E /* en */, + ); + name = MainMenu.xib; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + A57607791688B8DD0050A54E /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.7; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + }; + name = Debug; + }; + A576077A1688B8DD0050A54E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.7; + SDKROOT = macosx; + }; + name = Release; + }; + A576077C1688B8DD0050A54E /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COMBINE_HIDPI_IMAGES = YES; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "TestUndoManager/TestUndoManager-Prefix.pch"; + INFOPLIST_FILE = "TestUndoManager/TestUndoManager-Info.plist"; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = app; + }; + name = Debug; + }; + A576077D1688B8DD0050A54E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + COMBINE_HIDPI_IMAGES = YES; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "TestUndoManager/TestUndoManager-Prefix.pch"; + INFOPLIST_FILE = "TestUndoManager/TestUndoManager-Info.plist"; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = app; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + A57607571688B8DD0050A54E /* Build configuration list for PBXProject "TestUndoManager" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + A57607791688B8DD0050A54E /* Debug */, + A576077A1688B8DD0050A54E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + A576077B1688B8DD0050A54E /* Build configuration list for PBXNativeTarget "TestUndoManager" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + A576077C1688B8DD0050A54E /* Debug */, + A576077D1688B8DD0050A54E /* Release */, + ); + defaultConfigurationIsVisible = 0; + }; +/* End XCConfigurationList section */ + }; + rootObject = A57607541688B8DD0050A54E /* Project object */; +} diff --git a/TestUndoManager/TestUndoManager.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/TestUndoManager/TestUndoManager.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..2650de8 --- /dev/null +++ b/TestUndoManager/TestUndoManager.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/TestUndoManager/TestUndoManager.xcodeproj/project.xcworkspace/xcuserdata/sergey.xcuserdatad/UserInterfaceState.xcuserstate b/TestUndoManager/TestUndoManager.xcodeproj/project.xcworkspace/xcuserdata/sergey.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..ad0594e7ab3d84b443cf34d18ed625d97c5b04c0 GIT binary patch literal 14402 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 literal 0 HcmV?d00001 diff --git a/TestUndoManager/TestUndoManager.xcodeproj/xcuserdata/sergey.xcuserdatad/xcschemes/TestUndoManager.xcscheme b/TestUndoManager/TestUndoManager.xcodeproj/xcuserdata/sergey.xcuserdatad/xcschemes/TestUndoManager.xcscheme new file mode 100644 index 0000000..46fcf97 --- /dev/null +++ b/TestUndoManager/TestUndoManager.xcodeproj/xcuserdata/sergey.xcuserdatad/xcschemes/TestUndoManager.xcscheme @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/TestUndoManager/TestUndoManager.xcodeproj/xcuserdata/sergey.xcuserdatad/xcschemes/xcschememanagement.plist b/TestUndoManager/TestUndoManager.xcodeproj/xcuserdata/sergey.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..69bde64 --- /dev/null +++ b/TestUndoManager/TestUndoManager.xcodeproj/xcuserdata/sergey.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,22 @@ + + + + + SchemeUserState + + TestUndoManager.xcscheme + + orderHint + 0 + + + SuppressBuildableAutocreation + + A576075C1688B8DD0050A54E + + primary + + + + + diff --git a/TestUndoManager/TestUndoManager/AppDelegate.h b/TestUndoManager/TestUndoManager/AppDelegate.h new file mode 100644 index 0000000..5d1e68d --- /dev/null +++ b/TestUndoManager/TestUndoManager/AppDelegate.h @@ -0,0 +1,19 @@ +// +// AppDelegate.h +// TestUndoManager +// +// Created by Sergey on 24.12.12. +// Copyright (c) 2012 Sergey. All rights reserved. +// + +#import + +@interface AppDelegate : NSObject { + NSInteger testNum; + NSUndoManager* undo; +} + +@property (assign) IBOutlet NSWindow *window; +@property (weak) IBOutlet NSTextField *numTextField; + +@end diff --git a/TestUndoManager/TestUndoManager/AppDelegate.m b/TestUndoManager/TestUndoManager/AppDelegate.m new file mode 100644 index 0000000..a653886 --- /dev/null +++ b/TestUndoManager/TestUndoManager/AppDelegate.m @@ -0,0 +1,71 @@ +// +// AppDelegate.m +// TestUndoManager +// +// Created by Sergey on 24.12.12. +// Copyright (c) 2012 Sergey. All rights reserved. +// + +#import "AppDelegate.h" + +static void *RMDocumentKVOContext; +@implementation AppDelegate { + +} + +- (void)applicationDidFinishLaunching:(NSNotification *)aNotification +{ + // Insert code here to initialize your application + [self addObserver:self forKeyPath:@"testNum" options:NSKeyValueObservingOptionOld context:&RMDocumentKVOContext]; +} + +-(id)init { + self = [super init]; + if (self) { + undo = [[NSUndoManager alloc]init]; + } + return self; +} + +-(void)setTestNum:(NSInteger) x { + testNum = x; +} + +-(NSInteger)testNum { + return testNum; +} + +- (NSUndoManager*) windowWillReturnUndoManager: (NSWindow*) window +{ + + NSLog(@"windowWillReturnUndoManager"); + return undo; +} + +-(void)changeKeyPath:(NSString*)keyPath + ofObject:(id)obj + toValue:(id)newValue { + [obj setValue:newValue forKeyPath:keyPath]; +} + +-(void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { + if (context != &RMDocumentKVOContext) { + [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; + return; + } + id oldValue = [change objectForKey:NSKeyValueChangeOldKey]; + if (oldValue == [NSNull null]) { + oldValue = nil; + } + NSLog(@"oldValue = %@",oldValue); + NSLog(@"before replacing: canUndo:%d", [undo canUndo]); + [[undo prepareWithInvocationTarget:self] changeKeyPath:keyPath ofObject:object toValue:oldValue]; + [undo setActionName:@"Edit"]; + NSLog(@"after replacing: canUndo:%d", [undo canUndo]); //prints + + +} + + + +@end diff --git a/TestUndoManager/TestUndoManager/TestUndoManager-Info.plist b/TestUndoManager/TestUndoManager/TestUndoManager-Info.plist new file mode 100644 index 0000000..0c83e2b --- /dev/null +++ b/TestUndoManager/TestUndoManager/TestUndoManager-Info.plist @@ -0,0 +1,34 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIconFile + + CFBundleIdentifier + ShSergey.${PRODUCT_NAME:rfc1034identifier} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + LSMinimumSystemVersion + ${MACOSX_DEPLOYMENT_TARGET} + NSHumanReadableCopyright + Copyright © 2012 Sergey. All rights reserved. + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/TestUndoManager/TestUndoManager/TestUndoManager-Prefix.pch b/TestUndoManager/TestUndoManager/TestUndoManager-Prefix.pch new file mode 100644 index 0000000..bf3fa00 --- /dev/null +++ b/TestUndoManager/TestUndoManager/TestUndoManager-Prefix.pch @@ -0,0 +1,7 @@ +// +// Prefix header for all source files of the 'TestUndoManager' target in the 'TestUndoManager' project +// + +#ifdef __OBJC__ + #import +#endif diff --git a/TestUndoManager/TestUndoManager/en.lproj/Credits.rtf b/TestUndoManager/TestUndoManager/en.lproj/Credits.rtf new file mode 100644 index 0000000..46576ef --- /dev/null +++ b/TestUndoManager/TestUndoManager/en.lproj/Credits.rtf @@ -0,0 +1,29 @@ +{\rtf0\ansi{\fonttbl\f0\fswiss Helvetica;} +{\colortbl;\red255\green255\blue255;} +\paperw9840\paperh8400 +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural + +\f0\b\fs24 \cf0 Engineering: +\b0 \ + Some people\ +\ + +\b Human Interface Design: +\b0 \ + Some other people\ +\ + +\b Testing: +\b0 \ + Hopefully not nobody\ +\ + +\b Documentation: +\b0 \ + Whoever\ +\ + +\b With special thanks to: +\b0 \ + Mom\ +} diff --git a/TestUndoManager/TestUndoManager/en.lproj/InfoPlist.strings b/TestUndoManager/TestUndoManager/en.lproj/InfoPlist.strings new file mode 100644 index 0000000..477b28f --- /dev/null +++ b/TestUndoManager/TestUndoManager/en.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/TestUndoManager/TestUndoManager/en.lproj/MainMenu.xib b/TestUndoManager/TestUndoManager/en.lproj/MainMenu.xib new file mode 100644 index 0000000..1c13505 --- /dev/null +++ b/TestUndoManager/TestUndoManager/en.lproj/MainMenu.xib @@ -0,0 +1,3446 @@ + + + + 1070 + 11G63 + 2844 + 1138.51 + 569.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 2844 + + + IBNSLayoutConstraint + NSCustomObject + NSMenu + NSMenuItem + NSNumberFormatter + NSTextField + NSTextFieldCell + NSUserDefaultsController + NSView + NSWindowTemplate + + + com.apple.InterfaceBuilder.CocoaPlugin + + + PluginDependencyRecalculationVersion + + + + + NSApplication + + + FirstResponder + + + NSApplication + + + AMainMenu + + + + TestUndoManager + + 1048576 + 2147483647 + + NSImage + NSMenuCheckmark + + + NSImage + NSMenuMixedState + + submenuAction: + + TestUndoManager + + + + About TestUndoManager + + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Preferences… + , + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Services + + 1048576 + 2147483647 + + + submenuAction: + + Services + + _NSServicesMenu + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Hide TestUndoManager + h + 1048576 + 2147483647 + + + + + + Hide Others + h + 1572864 + 2147483647 + + + + + + Show All + + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Quit TestUndoManager + q + 1048576 + 2147483647 + + + + + _NSAppleMenu + + + + + File + + 1048576 + 2147483647 + + + submenuAction: + + File + + + + New + n + 1048576 + 2147483647 + + + + + + Open… + o + 1048576 + 2147483647 + + + + + + Open Recent + + 1048576 + 2147483647 + + + submenuAction: + + Open Recent + + + + Clear Menu + + 1048576 + 2147483647 + + + + + _NSRecentDocumentsMenu + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Close + w + 1048576 + 2147483647 + + + + + + Save… + s + 1048576 + 2147483647 + + + + + + Revert to Saved + + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Page Setup... + P + 1179648 + 2147483647 + + + + + + + Print… + p + 1048576 + 2147483647 + + + + + + + + + Edit + + 1048576 + 2147483647 + + + submenuAction: + + Edit + + + + Undo + z + 1048576 + 2147483647 + + + + + + Redo + Z + 1179648 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Cut + x + 1048576 + 2147483647 + + + + + + Copy + c + 1048576 + 2147483647 + + + + + + Paste + v + 1048576 + 2147483647 + + + + + + Paste and Match Style + V + 1572864 + 2147483647 + + + + + + Delete + + 1048576 + 2147483647 + + + + + + Select All + a + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Find + + 1048576 + 2147483647 + + + submenuAction: + + Find + + + + Find… + f + 1048576 + 2147483647 + + + 1 + + + + Find and Replace… + f + 1572864 + 2147483647 + + + 12 + + + + Find Next + g + 1048576 + 2147483647 + + + 2 + + + + Find Previous + G + 1179648 + 2147483647 + + + 3 + + + + Use Selection for Find + e + 1048576 + 2147483647 + + + 7 + + + + Jump to Selection + j + 1048576 + 2147483647 + + + + + + + + + Spelling and Grammar + + 1048576 + 2147483647 + + + submenuAction: + + Spelling and Grammar + + + + Show Spelling and Grammar + : + 1048576 + 2147483647 + + + + + + Check Document Now + ; + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Check Spelling While Typing + + 1048576 + 2147483647 + + + + + + Check Grammar With Spelling + + 1048576 + 2147483647 + + + + + + Correct Spelling Automatically + + 2147483647 + + + + + + + + + Substitutions + + 1048576 + 2147483647 + + + submenuAction: + + Substitutions + + + + Show Substitutions + + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Smart Copy/Paste + f + 1048576 + 2147483647 + + + 1 + + + + Smart Quotes + g + 1048576 + 2147483647 + + + 2 + + + + Smart Dashes + + 2147483647 + + + + + + Smart Links + G + 1179648 + 2147483647 + + + 3 + + + + Text Replacement + + 2147483647 + + + + + + + + + Transformations + + 2147483647 + + + submenuAction: + + Transformations + + + + Make Upper Case + + 2147483647 + + + + + + Make Lower Case + + 2147483647 + + + + + + Capitalize + + 2147483647 + + + + + + + + + Speech + + 1048576 + 2147483647 + + + submenuAction: + + Speech + + + + Start Speaking + + 1048576 + 2147483647 + + + + + + Stop Speaking + + 1048576 + 2147483647 + + + + + + + + + + + + Format + + 2147483647 + + + submenuAction: + + Format + + + + Font + + 2147483647 + + + submenuAction: + + Font + + + + Show Fonts + t + 1048576 + 2147483647 + + + + + + Bold + b + 1048576 + 2147483647 + + + 2 + + + + Italic + i + 1048576 + 2147483647 + + + 1 + + + + Underline + u + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Bigger + + + 1048576 + 2147483647 + + + 3 + + + + Smaller + - + 1048576 + 2147483647 + + + 4 + + + + YES + YES + + + 2147483647 + + + + + + Kern + + 2147483647 + + + submenuAction: + + Kern + + + + Use Default + + 2147483647 + + + + + + Use None + + 2147483647 + + + + + + Tighten + + 2147483647 + + + + + + Loosen + + 2147483647 + + + + + + + + + Ligatures + + 2147483647 + + + submenuAction: + + Ligatures + + + + Use Default + + 2147483647 + + + + + + Use None + + 2147483647 + + + + + + Use All + + 2147483647 + + + + + + + + + Baseline + + 2147483647 + + + submenuAction: + + Baseline + + + + Use Default + + 2147483647 + + + + + + Superscript + + 2147483647 + + + + + + Subscript + + 2147483647 + + + + + + Raise + + 2147483647 + + + + + + Lower + + 2147483647 + + + + + + + + + YES + YES + + + 2147483647 + + + + + + Show Colors + C + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Copy Style + c + 1572864 + 2147483647 + + + + + + Paste Style + v + 1572864 + 2147483647 + + + + + _NSFontMenu + + + + + Text + + 2147483647 + + + submenuAction: + + Text + + + + Align Left + { + 1048576 + 2147483647 + + + + + + Center + | + 1048576 + 2147483647 + + + + + + Justify + + 2147483647 + + + + + + Align Right + } + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Writing Direction + + 2147483647 + + + submenuAction: + + Writing Direction + + + + YES + Paragraph + + 2147483647 + + + + + + CURlZmF1bHQ + + 2147483647 + + + + + + CUxlZnQgdG8gUmlnaHQ + + 2147483647 + + + + + + CVJpZ2h0IHRvIExlZnQ + + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + YES + Selection + + 2147483647 + + + + + + CURlZmF1bHQ + + 2147483647 + + + + + + CUxlZnQgdG8gUmlnaHQ + + 2147483647 + + + + + + CVJpZ2h0IHRvIExlZnQ + + 2147483647 + + + + + + + + + YES + YES + + + 2147483647 + + + + + + Show Ruler + + 2147483647 + + + + + + Copy Ruler + c + 1310720 + 2147483647 + + + + + + Paste Ruler + v + 1310720 + 2147483647 + + + + + + + + + + + + View + + 1048576 + 2147483647 + + + submenuAction: + + View + + + + Show Toolbar + t + 1572864 + 2147483647 + + + + + + Customize Toolbar… + + 1048576 + 2147483647 + + + + + + + + + Window + + 1048576 + 2147483647 + + + submenuAction: + + Window + + + + Minimize + m + 1048576 + 2147483647 + + + + + + Zoom + + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Bring All to Front + + 1048576 + 2147483647 + + + + + _NSWindowsMenu + + + + + Help + + 2147483647 + + + submenuAction: + + Help + + + + TestUndoManager Help + ? + 1048576 + 2147483647 + + + + + _NSHelpMenu + + + + _NSMainMenu + + + 15 + 2 + {{335, 390}, {480, 360}} + 1954021376 + TestUndoManager + NSWindow + + + + + 256 + + + + 268 + {{141, 230}, {96, 22}} + + + + _NS:9 + YES + + -1804599231 + -1874852864 + + + LucidaGrande + 13 + 1044 + + + + + + + + + -∞ + + + +∞ + + #,##0.### + #,##0.### + + + + + + + + NaN + + + + 0 + 0 + YES + NO + 1 + AAAAAAAAAAAAAAAAAAAAAA + + + + 3 + YES + YES + YES + + . + , + YES + NO + YES + + _NS:9 + + YES + + 6 + System + textBackgroundColor + + 3 + MQA + + + + 6 + System + textColor + + 3 + MAA + + + + + + {480, 360} + + + + + {{0, 0}, {1680, 1028}} + {10000000000000, 10000000000000} + YES + + + AppDelegate + + + NSFontManager + + + YES + + + + + + + terminate: + + + + 449 + + + + orderFrontStandardAboutPanel: + + + + 142 + + + + delegate + + + + 495 + + + + performMiniaturize: + + + + 37 + + + + arrangeInFront: + + + + 39 + + + + print: + + + + 86 + + + + runPageLayout: + + + + 87 + + + + clearRecentDocuments: + + + + 127 + + + + performClose: + + + + 193 + + + + toggleContinuousSpellChecking: + + + + 222 + + + + undo: + + + + 223 + + + + copy: + + + + 224 + + + + checkSpelling: + + + + 225 + + + + paste: + + + + 226 + + + + stopSpeaking: + + + + 227 + + + + cut: + + + + 228 + + + + showGuessPanel: + + + + 230 + + + + redo: + + + + 231 + + + + selectAll: + + + + 232 + + + + startSpeaking: + + + + 233 + + + + delete: + + + + 235 + + + + performZoom: + + + + 240 + + + + performFindPanelAction: + + + + 241 + + + + centerSelectionInVisibleArea: + + + + 245 + + + + toggleGrammarChecking: + + + + 347 + + + + toggleSmartInsertDelete: + + + + 355 + + + + toggleAutomaticQuoteSubstitution: + + + + 356 + + + + toggleAutomaticLinkDetection: + + + + 357 + + + + saveDocument: + + + + 362 + + + + revertDocumentToSaved: + + + + 364 + + + + runToolbarCustomizationPalette: + + + + 365 + + + + toggleToolbarShown: + + + + 366 + + + + hide: + + + + 367 + + + + hideOtherApplications: + + + + 368 + + + + unhideAllApplications: + + + + 370 + + + + newDocument: + + + + 373 + + + + openDocument: + + + + 374 + + + + raiseBaseline: + + + + 426 + + + + lowerBaseline: + + + + 427 + + + + copyFont: + + + + 428 + + + + subscript: + + + + 429 + + + + superscript: + + + + 430 + + + + tightenKerning: + + + + 431 + + + + underline: + + + + 432 + + + + orderFrontColorPanel: + + + + 433 + + + + useAllLigatures: + + + + 434 + + + + loosenKerning: + + + + 435 + + + + pasteFont: + + + + 436 + + + + unscript: + + + + 437 + + + + useStandardKerning: + + + + 438 + + + + useStandardLigatures: + + + + 439 + + + + turnOffLigatures: + + + + 440 + + + + turnOffKerning: + + + + 441 + + + + toggleAutomaticSpellingCorrection: + + + + 456 + + + + orderFrontSubstitutionsPanel: + + + + 458 + + + + toggleAutomaticDashSubstitution: + + + + 461 + + + + toggleAutomaticTextReplacement: + + + + 463 + + + + uppercaseWord: + + + + 464 + + + + capitalizeWord: + + + + 467 + + + + lowercaseWord: + + + + 468 + + + + pasteAsPlainText: + + + + 486 + + + + performFindPanelAction: + + + + 487 + + + + performFindPanelAction: + + + + 488 + + + + performFindPanelAction: + + + + 489 + + + + showHelp: + + + + 493 + + + + alignCenter: + + + + 518 + + + + pasteRuler: + + + + 519 + + + + toggleRuler: + + + + 520 + + + + alignRight: + + + + 521 + + + + copyRuler: + + + + 522 + + + + alignJustified: + + + + 523 + + + + alignLeft: + + + + 524 + + + + makeBaseWritingDirectionNatural: + + + + 525 + + + + makeBaseWritingDirectionLeftToRight: + + + + 526 + + + + makeBaseWritingDirectionRightToLeft: + + + + 527 + + + + makeTextWritingDirectionNatural: + + + + 528 + + + + makeTextWritingDirectionLeftToRight: + + + + 529 + + + + makeTextWritingDirectionRightToLeft: + + + + 530 + + + + performFindPanelAction: + + + + 535 + + + + delegate + + + + 552 + + + + addFontTrait: + + + + 421 + + + + addFontTrait: + + + + 422 + + + + modifyFont: + + + + 423 + + + + orderFrontFontPanel: + + + + 424 + + + + modifyFont: + + + + 425 + + + + window + + + + 532 + + + + numTextField + + + + 542 + + + + value: self.testNum + + + + + + value: self.testNum + value + self.testNum + 2 + + + 551 + + + + + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 29 + + + + + + + + + + + + + + 19 + + + + + + + + 56 + + + + + + + + 217 + + + + + + + + 83 + + + + + + + + 81 + + + + + + + + + + + + + + + + + 75 + + + + + 78 + + + + + 72 + + + + + 82 + + + + + 124 + + + + + + + + 77 + + + + + 73 + + + + + 79 + + + + + 112 + + + + + 74 + + + + + 125 + + + + + + + + 126 + + + + + 205 + + + + + + + + + + + + + + + + + + + + + + 202 + + + + + 198 + + + + + 207 + + + + + 214 + + + + + 199 + + + + + 203 + + + + + 197 + + + + + 206 + + + + + 215 + + + + + 218 + + + + + + + + 216 + + + + + + + + 200 + + + + + + + + + + + + + 219 + + + + + 201 + + + + + 204 + + + + + 220 + + + + + + + + + + + + + 213 + + + + + 210 + + + + + 221 + + + + + 208 + + + + + 209 + + + + + 57 + + + + + + + + + + + + + + + + + + 58 + + + + + 134 + + + + + 150 + + + + + 136 + + + + + 144 + + + + + 129 + + + + + 143 + + + + + 236 + + + + + 131 + + + + + + + + 149 + + + + + 145 + + + + + 130 + + + + + 24 + + + + + + + + + + + 92 + + + + + 5 + + + + + 239 + + + + + 23 + + + + + 295 + + + + + + + + 296 + + + + + + + + + 297 + + + + + 298 + + + + + 211 + + + + + + + + 212 + + + + + + + + + 195 + + + + + 196 + + + + + 346 + + + + + 348 + + + + + + + + 349 + + + + + + + + + + + + + + 350 + + + + + 351 + + + + + 354 + + + + + 371 + + + + + + + + 372 + + + + + 5 + 0 + + 5 + 1 + + 141 + + 1000 + + 3 + 9 + 3 + + + + 3 + 0 + + 3 + 1 + + 108 + + 1000 + + 3 + 9 + 3 + + + + + + + 375 + + + + + + + + 376 + + + + + + + + + 377 + + + + + + + + 388 + + + + + + + + + + + + + + + + + + + + + + + 389 + + + + + 390 + + + + + 391 + + + + + 392 + + + + + 393 + + + + + 394 + + + + + 395 + + + + + 396 + + + + + 397 + + + + + + + + 398 + + + + + + + + 399 + + + + + + + + 400 + + + + + 401 + + + + + 402 + + + + + 403 + + + + + 404 + + + + + 405 + + + + + + + + + + + + 406 + + + + + 407 + + + + + 408 + + + + + 409 + + + + + 410 + + + + + 411 + + + + + + + + + + 412 + + + + + 413 + + + + + 414 + + + + + 415 + + + + + + + + + + + 416 + + + + + 417 + + + + + 418 + + + + + 419 + + + + + 420 + + + + + 450 + + + + + + + + 451 + + + + + + + + + + 452 + + + + + 453 + + + + + 454 + + + + + 457 + + + + + 459 + + + + + 460 + + + + + 462 + + + + + 465 + + + + + 466 + + + + + 485 + + + + + 490 + + + + + + + + 491 + + + + + + + + 492 + + + + + 494 + + + + + 496 + + + + + + + + 497 + + + + + + + + + + + + + + + + + 498 + + + + + 499 + + + + + 500 + + + + + 501 + + + + + 502 + + + + + 503 + + + + + + + + 504 + + + + + 505 + + + + + 506 + + + + + 507 + + + + + 508 + + + + + + + + + + + + + + + + 509 + + + + + 510 + + + + + 511 + + + + + 512 + + + + + 513 + + + + + 514 + + + + + 515 + + + + + 516 + + + + + 517 + + + + + 534 + + + + + 536 + + + + + + 7 + 0 + + 0 + 1 + + 96 + + 1000 + + 3 + 9 + 1 + + + + + + 537 + + + + + + + + 538 + + + + + 539 + + + + + 540 + + + + + 541 + + + + + 543 + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{380, 496}, {480, 360}} + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + 552 + + + + + AppDelegate + NSObject + + NSTextField + NSWindow + + + + numTextField + NSTextField + + + window + NSWindow + + + + IBProjectSource + ./Classes/AppDelegate.h + + + + NSLayoutConstraint + NSObject + + IBProjectSource + ./Classes/NSLayoutConstraint.h + + + + + 0 + IBCocoaFramework + YES + 3 + + {11, 11} + {10, 3} + + YES + + diff --git a/TestUndoManager/TestUndoManager/main.m b/TestUndoManager/TestUndoManager/main.m new file mode 100644 index 0000000..d4c6b17 --- /dev/null +++ b/TestUndoManager/TestUndoManager/main.m @@ -0,0 +1,14 @@ +// +// main.m +// TestUndoManager +// +// Created by Sergey on 24.12.12. +// Copyright (c) 2012 Sergey. All rights reserved. +// + +#import + +int main(int argc, char *argv[]) +{ + return NSApplicationMain(argc, (const char **)argv); +} From 35d8a3819dfebe19e02b2c8d63af6a8baeff89c7 Mon Sep 17 00:00:00 2001 From: ShSergey Date: Tue, 25 Dec 2012 19:07:39 +0400 Subject: [PATCH 5/7] FINAL FINAL --- .../UserInterfaceState.xcuserstate | Bin 25018 -> 24916 bytes DNA-project-3/DNA-project-3/AppDelegate.h | 5 +- DNA-project-3/DNA-project-3/AppDelegate.m | 165 +++++++++--------- DNA-project-3/DNA-project-3/Cell.m | 2 +- .../DNA-project-3/en.lproj/MainMenu.xib | 132 +------------- 5 files changed, 92 insertions(+), 212 deletions(-) diff --git a/DNA-project-3/DNA-project-3.xcodeproj/project.xcworkspace/xcuserdata/sergey.xcuserdatad/UserInterfaceState.xcuserstate b/DNA-project-3/DNA-project-3.xcodeproj/project.xcworkspace/xcuserdata/sergey.xcuserdatad/UserInterfaceState.xcuserstate index 650de89895c4faff58cb103827b336d61104a896..971ed610b0a35a00390da978c08fc694d334e958 100644 GIT binary patch delta 11443 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 delta 11524 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 { + +@interface AppDelegate : NSObject { NSInteger populationSize; NSInteger dnaLength; NSInteger mutationRate; diff --git a/DNA-project-3/DNA-project-3/AppDelegate.m b/DNA-project-3/DNA-project-3/AppDelegate.m index ffb15fc..87f34be 100644 --- a/DNA-project-3/DNA-project-3/AppDelegate.m +++ b/DNA-project-3/DNA-project-3/AppDelegate.m @@ -30,18 +30,6 @@ @implementation AppDelegate static void *RMDocumentKVOContext; --(id)init { - self = [super init]; - if (self) { - [self addObserver:self forKeyPath:@"populationSize" options:NSKeyValueObservingOptionOld context:&RMDocumentKVOContext]; - [self addObserver:self forKeyPath:@"dnaLength" options:NSKeyValueObservingOptionOld context:&RMDocumentKVOContext]; - [self addObserver:self forKeyPath:@"mutationRate" options:NSKeyValueObservingOptionOld context:&RMDocumentKVOContext]; - undoManager = [[NSUndoManager alloc] init]; - NSLog(@"OK"); - } - return self; -} - - (NSUndoManager*) windowWillReturnUndoManager: (NSWindow*) window { return undoManager; } @@ -69,28 +57,7 @@ -(void)dealloc { } - (void)applicationDidFinishLaunching:(NSNotification *)aNotification { - [self willChangeValueForKey:@"populationSize"]; - populationSize = DEFAULTPOPULATIONSIZE; - [self didChangeValueForKey:@"populationSize"]; - - [self willChangeValueForKey:@"dnaLength"]; - dnaLength = DEFAULTDNALENGTH; - [self didChangeValueForKey:@"dnaLength"]; - - [self willChangeValueForKey:@"mutationRate"]; - mutationRate = DEFAULTMUTATIONRATE; - [self didChangeValueForKey:@"mutationRate"]; - [self willChangeValueForKey:@"generation"]; - generation = 0; - [self didChangeValueForKey:@"generation"]; - - goalDNA = [[Cell alloc] init ]; - [goalDNA fillDNALenght:dnaLength]; - [goalDNATextField setStringValue:[goalDNA stringDNA]]; - - population = [[NSMutableArray alloc] init]; - startEvolution = NO; } -(void)setPopulationSize:(int) x { @@ -153,17 +120,14 @@ -(void)setVisible:(BOOL) v { } -(void)processEvolution{ + /*2. сделать неактивными (disabled) три первых text field'а и их ползунки, + а также кнопки "Start evolution" и "Load goal DNA"*/ startEvolution = YES; [self setVisible:startEvolution]; [self willChangeValueForKey:@"generation"]; generation = 0; [self didChangeValueForKey:@"generation"]; - - - /*2. сделать неактивными (disabled) три первых text field'а и их ползунки, - а также кнопки "Start evolution" и "Load goal DNA"*/ - /*1. создать случайную популяцию ДНК. Размер популяции = значение первого text field'а. Размер каждого ДНК = значение второго text field'а.*/ @@ -179,20 +143,12 @@ -(void)processEvolution{ [self willChangeValueForKey:@"generation"]; generation++; [self didChangeValueForKey:@"generation"]; - - - NSLog(@"генерация = %i",generation); - // [generationTextField setStringValue:[NSString stringWithFormat:@"%d", generation]]; + // NSLog(@"генерация = %i",generation); //4.1 Отсортировать популяцию по близости (hamming distance) к Goal DNA // вычисляем различия hammingDistance чтобы по нему отсортировать for (int i=0; imaxDNAlenght) { + NSAlert *alert = [[NSAlert alloc] init]; + [alert addButtonWithTitle:@"OK"]; + [alert setMessageText:@"В загружаемом файле превышена максимальная длина ДНК !"]; + [alert setInformativeText:@"Выберите файл с нужной структурой ДНК"]; + [alert setAlertStyle:NSWarningAlertStyle]; + [alert runModal]; + return; + } if ([goalDNA fillDNAString:fileContents]) { [goalDNATextField setStringValue:fileContents]; } @@ -300,45 +255,95 @@ - (IBAction)loadGoalDNA:(id)sender { } } } -/* + +-(id)init { + NSLog(@"init"); + self = [super init]; + if (self) { + [self addObserver:self forKeyPath:@"populationSize" options:NSKeyValueObservingOptionOld context:&RMDocumentKVOContext]; + [self addObserver:self forKeyPath:@"dnaLength" options:NSKeyValueObservingOptionOld context:&RMDocumentKVOContext]; + [self addObserver:self forKeyPath:@"mutationRate" options:NSKeyValueObservingOptionOld context:&RMDocumentKVOContext]; + undoManager = [[NSUndoManager alloc] init]; + + [self willChangeValueForKey:@"populationSize"]; + populationSize = DEFAULTPOPULATIONSIZE; + [self didChangeValueForKey:@"populationSize"]; + + [self willChangeValueForKey:@"dnaLength"]; + dnaLength = DEFAULTDNALENGTH; + [self didChangeValueForKey:@"dnaLength"]; + + [self willChangeValueForKey:@"mutationRate"]; + mutationRate = DEFAULTMUTATIONRATE; + [self didChangeValueForKey:@"mutationRate"]; + + [self willChangeValueForKey:@"generation"]; + generation = 0; + [self didChangeValueForKey:@"generation"]; + + goalDNA = [[Cell alloc] init ]; + [goalDNA fillDNALenght:dnaLength]; + [goalDNATextField setStringValue:[goalDNA stringDNA]]; + + population = [[NSMutableArray alloc] init]; + startEvolution = NO; + } + return self; +} + + -(void)encodeWithCoder:(NSCoder *)aCoder { -// NSInteger populationSize; -// NSInteger dnaLength; -// NSInteger mutationRate; - [aCoder encodeInteger:populationSize forKey:@"populationSize"]; - [aCoder encodeInteger:dnaLength forKey:@"dnaLength"]; - [aCoder encodeInteger:mutationRate forKey:@"mutationRate"]; + NSLog(@"encodeWithCoder"); + [aCoder encodeInteger:populationSize forKey:@"populationSize"]; + [aCoder encodeInteger:dnaLength forKey:@"dnaLength"]; + [aCoder encodeInteger:mutationRate forKey:@"mutationRate"]; } -(id)initWithCoder:(NSCoder *)aDecoder { + NSLog(@"initWithCoder"); self = [super init]; if (self) { + [self addObserver:self forKeyPath:@"populationSize" options:NSKeyValueObservingOptionOld context:&RMDocumentKVOContext]; + [self addObserver:self forKeyPath:@"dnaLength" options:NSKeyValueObservingOptionOld context:&RMDocumentKVOContext]; + [self addObserver:self forKeyPath:@"mutationRate" options:NSKeyValueObservingOptionOld context:&RMDocumentKVOContext]; + undoManager = [[NSUndoManager alloc] init]; + + [self willChangeValueForKey:@"populationSize"]; populationSize = [aDecoder decodeIntegerForKey:@"populationSize"]; + [self didChangeValueForKey:@"populationSize"]; + + [self willChangeValueForKey:@"dnaLength"]; dnaLength = [aDecoder decodeIntegerForKey:@"dnaLength"]; - mutationRate = [aDecoder decodeIntegerForKey:@"mutationRate"]; + [self didChangeValueForKey:@"dnaLength"]; + + [self willChangeValueForKey:@"mutationRate"]; + mutationRate = [aDecoder decodeIntegerForKey:@"mutationRate"]; + [self didChangeValueForKey:@"mutationRate"]; + + goalDNA = [[Cell alloc] init ]; + [goalDNA fillDNALenght:dnaLength]; + [goalDNATextField setStringValue:[goalDNA stringDNA]]; + + population = [[NSMutableArray alloc] init]; + startEvolution = NO; } return self; } -- (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError -{ +- (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError { + NSLog(@"dataOfType"); [[populationSizeTextField window] endEditingFor:nil]; [[populationSizeSlider window] endEditingFor:nil]; [[dnaLengthTextField window] endEditingFor:nil]; [[dnaLengthSlider window] endEditingFor:nil]; [[mutationRateTextField window] endEditingFor:nil]; [[mutationRateSlider window] endEditingFor:nil]; - // arrayArchive = [[NSMutableArray alloc]a - //initWithObjects:populationSize, dnaLength,mutationRate, nil]; - - -// return [NSKeyedArchiver archivedDataWithRootObject:employees]; - + return [NSKeyedArchiver archivedDataWithRootObject:population]; } -- (BOOL)readFromData:(NSData *)data ofType:(NSString *)typeName error:(NSError **)outError -{ +- (BOOL)readFromData:(NSData *)data ofType:(NSString *)typeName error:(NSError **)outError { + NSLog(@"readFromData"); NSMutableArray *newArray = nil; @try { newArray = [NSKeyedUnarchiver unarchiveObjectWithData:data]; @@ -350,7 +355,7 @@ - (BOOL)readFromData:(NSData *)data ofType:(NSString *)typeName error:(NSError * return NO; } } - [self setEmployees:newArray]; + population = newArray; return YES; } @@ -358,6 +363,8 @@ + (BOOL)autosavesInPlace { return YES; } -*/ + + + @end diff --git a/DNA-project-3/DNA-project-3/Cell.m b/DNA-project-3/DNA-project-3/Cell.m index 2f82682..2879480 100644 --- a/DNA-project-3/DNA-project-3/Cell.m +++ b/DNA-project-3/DNA-project-3/Cell.m @@ -118,7 +118,7 @@ -(NSMutableArray*)crossing:(Cell*) c { } } else if (num_variant == 2) { - //1% первого ДНК + 1% второго ДНК + 1% первого ДНК + ... и т.д. + //1% первого ДНК + 1 второго ДНК + 1 первого ДНК + ... и т.д. for(int i=0; i268 {{14, 12}, {132, 32}} - _NS:687 YES @@ -1345,7 +1344,6 @@ 268 {{146, 12}, {77, 32}} - _NS:687 YES @@ -1369,8 +1367,6 @@ 268 {{410, 12}, {134, 32}} - - _NS:687 YES @@ -1393,7 +1389,6 @@ 268 {{191, 387}, {349, 21}} - _NS:779 YES @@ -1418,7 +1413,6 @@ 268 {{17, 389}, {101, 17}} - _NS:3944 YES @@ -1454,7 +1448,6 @@ 268 {{123, 386}, {62, 22}} - _NS:903 YES @@ -1529,7 +1522,6 @@ 268 {{17, 359}, {77, 17}} - _NS:3944 YES @@ -1549,7 +1541,6 @@ 268 {{123, 356}, {62, 22}} - _NS:903 YES @@ -1609,7 +1600,6 @@ 268 {{191, 327}, {349, 21}} - _NS:779 YES @@ -1634,7 +1624,6 @@ 268 {{17, 329}, {102, 17}} - _NS:3944 YES @@ -1654,7 +1643,6 @@ 268 {{123, 326}, {62, 22}} - _NS:903 YES @@ -1715,7 +1703,6 @@ 268 {{207, 295}, {95, 21}} - _NS:3944 YES @@ -1741,7 +1728,6 @@ {{18, 232}, {522, 20}} - _NS:2352 16392 @@ -1760,7 +1746,6 @@ 268 {{20, 14}, {482, 112}} - _NS:354 {250, 750} @@ -1782,7 +1767,6 @@ 268 {{235, 134}, {65, 17}} - _NS:3944 YES @@ -1800,14 +1784,12 @@ {{1, 1}, {523, 146}} - _NS:21 {{17, 51}, {525, 167}} - _NS:18 {0, 0} @@ -1837,7 +1819,6 @@ 268 {{304, 295}, {48, 21}} - _NS:3944 YES @@ -1858,7 +1839,6 @@ 268 {{181, 270}, {155, 17}} - _NS:3944 YES @@ -1878,7 +1858,6 @@ 268 {{325, 270}, {32, 17}} - _NS:3944 YES @@ -1898,7 +1877,6 @@ 268 {{192, 356}, {349, 21}} - _NS:779 YES @@ -1923,7 +1901,6 @@ 268 {{353, 270}, {24, 17}} - _NS:1535 YES @@ -1941,7 +1918,6 @@ {558, 428} - {{0, 0}, {1680, 1028}} @@ -4442,113 +4418,9 @@ - 706 - - - - - AppDelegate - NSObject - - id - id - id - - - - loadGoalDNA: - id - - - pauseEvolution: - id - - - startEvolution: - id - - - - NSTextField - NSSlider - NSTextField - NSTextField - NSTextField - NSButton - NSSlider - NSTextField - NSButton - NSSlider - NSTextField - NSProgressIndicator - NSButton - NSWindow - - - - bestMatchTextField - NSTextField - - - dnaLengthSlider - NSSlider - - - dnaLengthTextField - NSTextField - - - generationTextField - NSTextField - - - goalDNATextField - NSTextField - - - loadButton - NSButton - - - mutationRateSlider - NSSlider - - - mutationRateTextField - NSTextField - - - pauseButton - NSButton - - - populationSizeSlider - NSSlider - - - populationSizeTextField - NSTextField - - - progressIndicator - NSProgressIndicator - - - startButton - NSButton - - - window - NSWindow - - - - IBProjectSource - ./Classes/AppDelegate.h - - - + 708 + 0 IBCocoaFramework YES From 8a500af4e11dfc304b97873624880523e09edd73 Mon Sep 17 00:00:00 2001 From: ShSergey Date: Fri, 28 Dec 2012 18:42:34 +0400 Subject: [PATCH 6/7] =?UTF-8?q?=D0=BF=D0=BE=D1=87=D1=82=D0=B8=20=D0=B2?= =?UTF-8?q?=D1=81=D0=B5=20=D0=B3=D0=BE=D1=82=D0=BE=D0=B2=D0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DNA-project-3.xcodeproj/project.pbxproj | 9 +- .../UserInterfaceState.xcuserstate | Bin 24916 -> 24968 bytes DNA-project-3/DNA-project-3/AppDelegate.h | 15 +- DNA-project-3/DNA-project-3/AppDelegate.m | 219 ++- DNA-project-3/DNA-project-3/Cell.h | 10 +- DNA-project-3/DNA-project-3/Cell.m | 106 +- .../DNA-project-3/en.lproj/MainMenu.xib | 196 +- .../DNA-project-3/ru.lproj}/Credits.rtf | 0 .../DNA-project-3/ru.lproj}/InfoPlist.strings | 0 .../DNA-project-3/ru.lproj}/MainMenu.xib | 1590 ++++++++++++++--- .../TestUndoManager.xcodeproj/project.pbxproj | 304 ---- .../contents.xcworkspacedata | 7 - .../UserInterfaceState.xcuserstate | Bin 14402 -> 0 bytes .../xcschemes/TestUndoManager.xcscheme | 86 - .../xcschemes/xcschememanagement.plist | 22 - TestUndoManager/TestUndoManager/AppDelegate.h | 19 - TestUndoManager/TestUndoManager/AppDelegate.m | 71 - .../TestUndoManager-Info.plist | 34 - .../TestUndoManager-Prefix.pch | 7 - TestUndoManager/TestUndoManager/main.m | 14 - 20 files changed, 1639 insertions(+), 1070 deletions(-) rename {TestUndoManager/TestUndoManager/en.lproj => DNA-project-3/DNA-project-3/ru.lproj}/Credits.rtf (100%) rename {TestUndoManager/TestUndoManager/en.lproj => DNA-project-3/DNA-project-3/ru.lproj}/InfoPlist.strings (100%) rename {TestUndoManager/TestUndoManager/en.lproj => DNA-project-3/DNA-project-3/ru.lproj}/MainMenu.xib (71%) delete mode 100644 TestUndoManager/TestUndoManager.xcodeproj/project.pbxproj delete mode 100644 TestUndoManager/TestUndoManager.xcodeproj/project.xcworkspace/contents.xcworkspacedata delete mode 100644 TestUndoManager/TestUndoManager.xcodeproj/project.xcworkspace/xcuserdata/sergey.xcuserdatad/UserInterfaceState.xcuserstate delete mode 100644 TestUndoManager/TestUndoManager.xcodeproj/xcuserdata/sergey.xcuserdatad/xcschemes/TestUndoManager.xcscheme delete mode 100644 TestUndoManager/TestUndoManager.xcodeproj/xcuserdata/sergey.xcuserdatad/xcschemes/xcschememanagement.plist delete mode 100644 TestUndoManager/TestUndoManager/AppDelegate.h delete mode 100644 TestUndoManager/TestUndoManager/AppDelegate.m delete mode 100644 TestUndoManager/TestUndoManager/TestUndoManager-Info.plist delete mode 100644 TestUndoManager/TestUndoManager/TestUndoManager-Prefix.pch delete mode 100644 TestUndoManager/TestUndoManager/main.m diff --git a/DNA-project-3/DNA-project-3.xcodeproj/project.pbxproj b/DNA-project-3/DNA-project-3.xcodeproj/project.pbxproj index ccd632a..258193e 100644 --- a/DNA-project-3/DNA-project-3.xcodeproj/project.pbxproj +++ b/DNA-project-3/DNA-project-3.xcodeproj/project.pbxproj @@ -31,6 +31,9 @@ A52619DD1685A568001951F2 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; A52619E01685A568001951F2 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/MainMenu.xib; sourceTree = ""; }; A52619E71685B78C001951F2 /* Cell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Cell.h; sourceTree = ""; }; + A576F4F9168DB5CD00B21327 /* ru */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ru; path = ru.lproj/MainMenu.xib; sourceTree = ""; }; + A576F4FA168DB5CD00B21327 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/InfoPlist.strings; sourceTree = ""; }; + A576F4FB168DB5CD00B21327 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = ru; path = ru.lproj/Credits.rtf; sourceTree = ""; }; A5F06F49168729BD005B9EA4 /* Cell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Cell.m; sourceTree = ""; }; /* End PBXFileReference section */ @@ -87,8 +90,8 @@ children = ( A52619DC1685A568001951F2 /* AppDelegate.h */, A52619DD1685A568001951F2 /* AppDelegate.m */, - A5F06F49168729BD005B9EA4 /* Cell.m */, A52619E71685B78C001951F2 /* Cell.h */, + A5F06F49168729BD005B9EA4 /* Cell.m */, A52619DF1685A568001951F2 /* MainMenu.xib */, A52619D11685A568001951F2 /* Supporting Files */, ); @@ -141,6 +144,7 @@ hasScannedForEncodings = 0; knownRegions = ( en, + ru, ); mainGroup = A52619BB1685A568001951F2; productRefGroup = A52619C71685A568001951F2 /* Products */; @@ -183,6 +187,7 @@ isa = PBXVariantGroup; children = ( A52619D41685A568001951F2 /* en */, + A576F4FA168DB5CD00B21327 /* ru */, ); name = InfoPlist.strings; sourceTree = ""; @@ -191,6 +196,7 @@ isa = PBXVariantGroup; children = ( A52619DA1685A568001951F2 /* en */, + A576F4FB168DB5CD00B21327 /* ru */, ); name = Credits.rtf; sourceTree = ""; @@ -199,6 +205,7 @@ isa = PBXVariantGroup; children = ( A52619E01685A568001951F2 /* en */, + A576F4F9168DB5CD00B21327 /* ru */, ); name = MainMenu.xib; sourceTree = ""; diff --git a/DNA-project-3/DNA-project-3.xcodeproj/project.xcworkspace/xcuserdata/sergey.xcuserdatad/UserInterfaceState.xcuserstate b/DNA-project-3/DNA-project-3.xcodeproj/project.xcworkspace/xcuserdata/sergey.xcuserdatad/UserInterfaceState.xcuserstate index 971ed610b0a35a00390da978c08fc694d334e958..3b77ace9e155ac99229cb58fd487d23c23e6eec8 100644 GIT binary patch delta 13885 zcma)i30PA{)b^dZ8-WOckg$X$gs_AqBrFLKmIMOI4&uHc0xF82ENWGn8TV>kuUoBF zS=_a)TKBdtt=8Svt#(mstF_u%TU%ROTm2_QM8Ch^|NP`3%gmWGXU==(J!kH{7mtA1 zAAyB(`T~D(k&gxpT9j$B4WTNjDryu}Pc=}DR1-CxdWFK&RB8q_n_5M!rrx5~P;03c zs+DS^+Ns^t9%?VOkJ?Wipx&oGpbk-osgJ3n)D7xe>O1Ntb&L9*x=sB+-J$MMKT{3bTAvd1{MGTYyn%rHt;rh2fPcmgB@Te zcn|CXyTLy20XPgk0ms1!a1wk9J_DbFE8rTq4sL<(!EIo>2Yv&OA%HA&hOSTw{b2wM zgi06+BVZ)dLnBOwW@v#qFc;>*QrHXjhJ9cytb=3WI9LxGU?XgTKKdODVlqvPoW+CUrWRN6vk(b;q% z-JdR_tLTyRXu6iJqZ{an^b{J=)9KggdGvgG3B8nFL$9S<=vI0?y_eoc@23yYw)g1| z=nv_G^db5feVRT;e@b7VFVdgWSLiS3tMoPc2l@_um;RCdiM~hwOy8$}p?{|z(tpu^ zGZe!z-56KKjqzf<86PHyQ8B@cnu%hf87-5@Br(a1iAiTln4U~2(~IfN^kMok{h0nt z8B@uOVn#DHOudb1U>cc;%qz?cW+pR>na#Y$%wgs-uQT(Q`OE@FV3sp0m{w*zvzOV& z9Au6%$C(q%Y32;`Df1a~iMh;t%Y4V&WNtCvGk2LEnfuHy%&8l0ch-ZIvYxDr zm9t)~H|xWOu%T=i8_sH2J)6KLvMH=Boy}wO*#fqZEn@q#1K5G=Aa*EQ$yTuqY$Mym zj%O#Z6WLeTN$jiaGH0auf$R$kCjLbLHfm7Z=DWIW-qy9%1z@Ia0|Ib++t4PmT*hC7Os_RHG|S9zUO7z%S%i^DTTkzmea=`E9FjkAO?f!LJ^w}G{P!2Nt8xn0SIkFOq4-dI;ZkTmovAC_M}tg1%1$}jO4Od7H(t4WuozN%b8 zi3ST}i849nm`TkllSn%R zggYWhpP4VtA*be00@7@x=2EXy^QigM0%{?(h+2#yQ51?sS`>qHNRMJSQcI|%)G}&0 zwSszsT1mZ$;!rvoga)Hp)QD`TZD*RA1!ihJ^)}LMpf*q&sZG>oY74cM+J@p$0x}>Y zN<>L0c>@(jUfaq4PU<~MO|ViR6Zua;sVGe-2n`k1gs463SY=HdTV7jPRhiRRHKw6V z5+oFd$^{TwD0~zWVmnX#?Lsg(h{D$vJATAbA0fB3PMz+PQ=d>5k!CA(oH{|Bq)t(% zsWa4B>Kyec^%-&h1!P7Rlz}pl6=k7p)E)IeIVcz9ZKWb!el#r!SyXc^-I6P($dEI>e>;g2o>1P zdqDk0{ocQ@RNLTaE+j_VBj69}&oYVIbNC#C+DP*w%Jf``L-cRzv2ZxtpQHYv{-sRh ztKVXc(grA^{bvBE`+z2~WN9S&hcz`;HK0;5ch6^Y0}d7Tt!*09)KFE~=^!x>0T&d~ z0-RB=79d8w`xKUD*VQ&&q(s0CNPs)=08-!yWTd^Yd`uPjD6O7UMXVa0T~j`y0rf?F zf^Fu|j!>lB#gak!O%>IZ<=yM;uyxoByn)X%t*yYDL?loUYX<^9VrkFv+7VTmbxpO6 zsJ}xv00a&wEX^TULm@tpl0DwRJ9wh0c;NqgeJ9ssYnRY`Eg(-n1wXLl4z9;%mwqFch5(! zc1^MfEJm8OFDz&&Sc^29!7{KMtN?F-mEcXV3akcifi(yrjHaS#XgZpKW};bWHhOI{ zXd%|L**70p4>o{}U=!Gk<`B!~lK(U`4=qM-BKj?~c4wY81(YOqLbC_#MXx`DWaLE5;1SZaf}3Q*m1w#B3(=2Ob_$5Wzu>8@QzxX*n$8|Mq#nhUeFu0qjhLKK@lpTA3<#c+EgaY z&`$}3DyZ&^8yJE%b`1}Q8WLNoSXB;;hB0KB9oZJ@(3Z|=;|NkP9wtBo+KS#mJ37aT zVG>MvF-^i$n1;5Yw}mCKA;mBgX1~@|W7_Jd^OZifBg05}j1f`j1@SO$l}aySg_L3`0Yv>zQn z@1qaUhv*8^yDma{E!5ml(N5RpshUCJ-=mL65vWhPTVhoHJq+>7*rIGYa!p~YY zyu7KV(ONaEX@tEzDU-xk9VRQ)b`!&)V!v(7md*x~V~U>=cqKvDZEw zqeoPA)Hj`LmBUF8AEWm0BnX^&{=d&7^G5W!*}7%mpb2ryU=Io{J_k*+J-uN6;xFo zY@VC=5~gyvAHHul>Hxaf0zW{PgmSNN;h?Kix*Q&cAK813pvx`rWAu5ig7WIxE>n)f z(jNbybixXSJ5?e9esmtpl{K48{oI_J9rb`0^h>h@CS4g-9o>jzt9`#Z}eDL<-Jh2 z;-c_`58!X`cS-~w!av}j@Dcor$`N>RPtiSe8-0&{A?_U}PKt$3kXsvkN>emIKcKtl zN8(?arWx?_fzdqeBs>)dl7pd0_*bm%-y!-H>0kbA9PLJa z{505FXo((MUpK0%qA@z|0_{PRN@-78M$7v*R*$J_Xe=Kyc3@>)Mbj8ENAI5bh(h<# z&vtA{%|rX3LIIo0tz#UMDri3v&DK7>tj`AI*Hx6;i{Dn-pECV-mt$lgtrRLpdqd(A}gn1qbzqn4;&pYCsJ-{$% zazdg$DM}d|pAg&Jf3iWJWQB;I4|tH+cJC6Wv^1{9(&aKXUo zGF?O$(V21IV0*)SH#c*=z)%i!GOmAI^w0% zxN;IP^f0=DuEc=GfWd$zU5=n}M2h3bOJOkv-NAr+IWCG{3JgaGylk*1G1&g!m!3en z$(o!o5Ovxy$?l|FvRH>do9S1DU)>`}XxfDP?s|sC^i-k9Ba}2u6AC=^3VJ5}8p(L{ zEP6Hu-7s)%rE=)GcHVRomU-l4(F#Z)2dvAO-`S zV0H@^zL#xwd$w5~(4OcY4B~~i6p6c}u-JM_|UIip|#NMtd7j6ViuGOCpcWRw_WV2~-4dKoq8M84BRITOl|vZa*? zV+e3o46<682!^;S8-p6*9WUMcwTi8LmI$z-fd7L(0%XUO<`3<@wP#GnX+VhlPnhjf`TDNHl-DnrPt41=Kf&Fc zj^qJ@A*s2!b7f*?CG*yQA+?4e)q=qoJ5spQJ9biF2q|>d2sTR2Y-H@L@c)I?c4h~& zlX;KXMX(|?LA*8=gGm^?ia|pMR<<&U&)BA6HPsc`x?%RrOA=3XMRY@5Q+-9%3+&G9 zXAan@!)6C@A_n7LqIc#np$_H<^AYng2K5*;VlbYpz)tT>2X!>OdFoVrx zt!x$sZ(^_tgVh+k)lR*~_F%KvTtobFxZU2mUV0` zTgQ%N$FXGFY{f2M8wPJ<@D2t$1Wn*<+knXlMgyrNlj5Hfh@73mHrr==7HTXa49a45 zDhBUju)Sw&QfZt~-(~D9cJ|B0&Se+=KfJh@cyWo{i|-LH62jcmrD-|4(vCB6qr-`< z?3*m{|1J!6cL}Xw$z_-quFJ4(Z2QX%8`y3CZmZAxasqPk6yGd)U49sX85Vz~Pt=Ivn%<%U(Im9(mcSqwFUnv9QN5 zIM~9H@IFkIL>;ij{y@bIL z3_il(<2DkPSJ*G?{yd7oC&JOBQQjbzy^g9|*l#d6<}h_Q`yIJvCnzPJ!k}bV-EH=c z-IO0NIMKr1#o(0P6o)1E9G0ByvgB8?NuH#XC3PY2JNuU%--qlU?4Rr-3{GQk27|L0 zoNH(QW*@Wvu>WH4DF&Zm@HqxIgjmy8Hjd?ZGH1uN5Y7pM^Un<9Tu8~piMehVT)^N` z=OkiI!bx8&eyFjW3s8V1*exv8nNiAxbqrK;#uE=~9)HKWSHWxNy=To#v) zH0$9HTz9Sqm&4_9dFU|)-(heIgWDL84E5uBu7E4#inwB~gzJgHJq&)ufO!2M3@Hpb zVvGYiuD1ian}U0K{xiKRJWDeM${3`CHvxuUENc=y1Gwnt)P0qWFtAe>k|?Z>{Vc#KK^Bu zySM{{%edXdUt#0|K{z??kSheglWPPI*KzN29}v9=K)xC##D~ zv@i8Vhn?ik*>O9?o#xJPXEEe4biz=Cp>sR;Dfd|iZqNmj3%Ac;nljS4CTXk0(>ZjVHk!#&rubWG6Ygef-xV(NAp_y^_n?7zC!lE9}B79wjg@`*gpC-bI`6-8ngMHYo&G=|#sd@7&Dr}Jj= zPU0*ELmh^C4C6Y!=mht?Afa2{Y+DX7CzsE&8)LtyW{-srDt=VPVi?xp8pRZz+>mJHo9+FX9sP*M7+NvR65I;C zg>41Sidp;|yUc96O!p3%x%}%G_P{WQ$oTgo%Uz7ZH}e9&gkQ=pf$bdvFXjvWJ%>=wE}^|dsH@WE4>$yRbqO3K0?#XLdGNEeq3MtVUm$xu z>uBSTImY%C%8HMBK5KK7N3g&BB=llU< zWOg9%GNQC)v~F>6xdTnLPY5m)pjj z;BInH$bJ%$CsbT{FJ48SM~Ndl%)%FvCr~Q*Dt-ic_GC19`lODxjpG~mCK4fY_}9r} zCky$-BovnMD@YLR(b99HUMOBHULsy5ULjs7UL}4@yjI*QZWmt=-|i;uX6)9d+xTt^ zy6x(Aw%a4uKv#onx@!;DT-SWp-mYb?<*vhAN4qw=PIsN>y3BQl>ps^@u6JF3cLQ#& zZW1>SH&2_JzgwVNm|MJ?!7a(npeDl9Q3&D@rTq&DwBFi zeWiZVKxvRo8YeYNGo+bPt8}1rq;!;YjI>T#FKv`!=``td=?v*&=@RKC=@#iW={wTx z(w)*>(mm3B(gV^Dr01mFUxt?o1cX*!g zd?a&~g~+rrolGxFmYHQ)vOHNYSsz({*+5yP%r;y$Mph>qCu@*l*#g;W*=E^R**miB zviD@WWyfWgWS`5vlzlC`F1sPSFZ)OKL=NP%oRd4r*8h&)^#A&-{F$W!HM@;rHg zyjb2--do;RUMU|gua=LN*UHDro8>n7boosAZ23I-0{J5OTk^H?Hu*aFM)_v>9-Dlh ze82pF{A2ks`6>As`8oL&`Iqvm^6T;+-gCX@ zc`xu@;=Rm!h4&Wk_k1`XsgKMj!Y9f{>!b6D^@;Z}_$2xy`=t1!`IP$f_UY@>-)ErD zV4tBr6+Xj#s(nWLV4syf>wI?leCTu8=dLgCRr?x!t-jg5CBCJ;y?y)o_V*p=JKW|w z(sz_^jc={*Sl_9>ulp|XUE{mg_o(kDz9)T8`=0at%=c&C$G-n6C);!i)u&&K(Q{9OE8{Um-eKb4=_FVZjCFUC*rm*|)5m*SV^ zH_C6S-%7tWzjb~a{WkmU@!RKj-0!5{X}`06pZcBmyXbe>@0QOY?EpG}4d4Sr0WJaE0@4F|1mp&k1eDqWdI$6k z7#c7-U`#+=z{G&%0jmNI1biHDEZ}&+X8{)iE(LrS@Jqnofn1j^stKwMni;e_Xh+cLpc_FqgT4>C6ZDgc zRfVhKRVGz;Rk5m6)koD&HBdEJRj+DNO;k-%O;Nq7nx%S8wNNFfmZ{!QwW``x>s9Zl zwySok-dBC7I;=XU`dW2O^^NLV)nnDas;9v)m<@IfmIOK)b;8n^%S*D zjn&iD@2Zchzfs>&|ET_1{j2&(2o>TM;t?VX@eWah1cU^Is6*mH3?WG&DIw`086jCA zJwkeij18F*vM^+8$jK1f<&Y<#(olJ*PpBf)KU5j235^Vm4NVA53^j#XL$gD3Li>c4 zg_eg_hSrBp4s8xaq4PtRhqi~V58W8LB}^8k3R8zghH1m}Vew(6u(U8sm^G{>ObB~B zY**O9u;XDj!lmKLa8-Cncv$$N@Ri}K!qY79>F~3*@Xx|8hF=Z89)2_Y zcKF@!Kg0hDf1;r@P{V7SHQh8`8l@&$6QhaO7&M8RRE=4asp+j5q8Y6jqp8<4X(no# z$^DaQnnjv@nh!OnG-ovDHJ3D3G*>m>Xui|j(>%~TjQ|l&5iSv~5$+M*5sC=^2xUZm zL}kR3h#3*HB5ZRa=0&WGSQW7);_Zm-5${FpiP#_ULByema}nnwE=634_$uOB#EpoX z5x+)?BfTS|B6~y*kF1ZJ9{EP(s>n5wEs<@J>muKdd^d7emJ$S7@;J}N%S7?lw@#v;o>6ZK5_y+g)3zEz$PU z_SFv2mTN1t!?ktVaoR@h1nqR~Ozl$b3hkTPx3n$VcI^i3X6-)h``UxrBif_dwjj{1Dq8OJL&lq`(e~dCFI3_eECPp6Z95WqhBnbalFMx(m9m zb=Pz^bT@VX=tX)Ly;$E(@2mGCr)_fUT%V#(*Js%DS^6IOJbj_QMBht4T0cfVR$s4g z(ofV+*1xL9`sw@`$MH`RK!S6EIKeH!BSDs+Pbf_ok$@8BB`io- zmheWxs)RKO>k~F5Y)yD4;Y7kW3I7;G1{Z_a(9Pg$@H6-u0t{h>c!R-UF<1@V4Y`H_ zL$P6?VThsJP-z%p7-eWOV8cek5yKtB1H->YXPZ%M>}GT|dKrC;0mdMs+8AbxG$tC8 zjV5D?F~^u^>}Bk09AF%59BQmKjyBdB#~B-q*f`BN+c?)a-zXTD8Q(CjH*Pd;GHy2R zG43<&Hy$t^H=ZQkfiLS5lM5BgrucOE0W$!YEN39v?1wW(&?nLNuMQMO!_?O%cR>$canZe z`Z?*(q`#8;C08YnNFJNqkUT#5mE6Gb=>AdNp>9Xl7(^bx7b84T|iqxvq;i)518&k)pPD`DUIy-f4>ipD2sY_B@QrlBEq;5{#milh$ z&eTJxM^cZbev;;zrbzQoQ>LlXBGaPNW~VJpTb{NuZB^R3v<>N^ba}dWx+2{_Jv2Q$ zeOmg$^u_5*)0d~OO>Z^3n*+>Bv&I~0j<%U&%zAUOIn``7XPC3hh30|eLTkOb(cElC z=4s}c=GV-N%}dQI%qz{S&3nz)&G#%aOMoTJ5^phB(k&KCrX|bL-BN5Rwe+#{vkbIU zTE*TSw6RXYq@2)ZL!_4{Ajsn zd1QHPd6Ge8&>38YB*P~|k*Uv2&g`C9k~t)EXl8Y0O=ewYeP&bUtC=`+dgjc`*D~8P zPi1~#1y*OPhc(a|WK~G zzqVetervsD{mFXY`oQ|TEh{W5BWqw*W!CVlx~%%FrmTrsle1=L&B*_!iN&L6qT+}zyK+(EgOxnpw2=Dw1Pa%bc&$z7JaCbuQG zJ$HTX&fHzO@8=%OJ(7Dg_jK;L-1E7Ya=*>JnR`3;PM$TdB(F5DPhP*g{du3{oya?# zcQ#*>Z^%!~Pt7;yXXf|F&&w~&?`6v$m|vMcCVx`?lzf~&J%3jI>-h`v7w50YZ^_@B zzbAiR{)hR8^FPi%k$*b>T>ho}Yx%eHf60GPz!x|dbSsb)NDJfzJ_UXSfd#69kb>BP z_yS`=Qb9(6wP1b0&VpS9dkgj#d{l6>P+1sV7*iNq7+;uLm|nQDa6{py!mWjG7nbcQ z+*cG_q$`RoN+>cGnTs-twifLxI#Bds(V?O1zIapdmJ;uhkdm;H fh?1z1H%qpa>?qmmxNQTW_aj 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 diff --git a/DNA-project-3/DNA-project-3/AppDelegate.h b/DNA-project-3/DNA-project-3/AppDelegate.h index 8a35c82..64f40bf 100644 --- a/DNA-project-3/DNA-project-3/AppDelegate.h +++ b/DNA-project-3/DNA-project-3/AppDelegate.h @@ -15,18 +15,17 @@ #define DEFAULTMUTATIONRATE 1; -@interface AppDelegate : NSObject { +@interface AppDelegate : NSObject { NSInteger populationSize; NSInteger dnaLength; NSInteger mutationRate; - Cell* goalDNA; - NSMutableArray* population; - BOOL startEvolution; - int generation; NSInteger bestHammingDistance; + NSMutableArray* population; NSUndoManager* undoManager; + BOOL evolution; + int generation; + Cell* goalDNA; } -//@property (nonatomic,retain) NSUndoManager *undoManager; @property (assign) IBOutlet NSWindow *window; @property (weak) IBOutlet NSTextField *goalDNATextField; @@ -46,6 +45,9 @@ - (IBAction)startEvolution:(id)sender; - (IBAction)pauseEvolution:(id)sender; - (IBAction)loadGoalDNA:(id)sender; +- (IBAction)savePopulation:(id)sender; +- (IBAction)loadPopulation:(id)sender; + @property (weak) IBOutlet NSTextField *bestMatchTextField; @property (weak) IBOutlet NSTextField *generationTextField; @@ -53,5 +55,4 @@ -(void)setVisible:(BOOL) v; - @end diff --git a/DNA-project-3/DNA-project-3/AppDelegate.m b/DNA-project-3/DNA-project-3/AppDelegate.m index 87f34be..f619be2 100644 --- a/DNA-project-3/DNA-project-3/AppDelegate.m +++ b/DNA-project-3/DNA-project-3/AppDelegate.m @@ -26,8 +26,6 @@ @implementation AppDelegate @synthesize generationTextField; @synthesize bestMatchTextField; -//@synthesize undoManager; - static void *RMDocumentKVOContext; - (NSUndoManager*) windowWillReturnUndoManager: (NSWindow*) window { @@ -57,10 +55,26 @@ -(void)dealloc { } - (void)applicationDidFinishLaunching:(NSNotification *)aNotification { - + //NSLog(@"applicationDidFinishLaunching"); + [goalDNATextField setStringValue:[goalDNA stringDNA]]; } --(void)setPopulationSize:(int) x { +-(void)setPopulationSize:(NSInteger) x { +// NSLog(@"setPopulationSize"); + /*1. создать случайную популяцию ДНК. Размер популяции = значение первого text field'а. + Размер каждого ДНК = значение второго text field'а.*/ + NSInteger i; + if (x > populationSize) { + for (i=populationSize; i=x; i--) + [population removeObjectAtIndex:i]; // удаляем лишние элементы + } populationSize = x; } @@ -68,17 +82,21 @@ -(NSInteger)populationSize { return populationSize; } --(void)setDnaLength:(int) x { +-(void)setDnaLength:(NSInteger) x { dnaLength = x; + // обновляем goalDNA [goalDNA fillDNALenght:dnaLength]; - [goalDNATextField setStringValue:[goalDNA stringDNA]]; + [goalDNATextField setStringValue:[goalDNA stringDNA]]; + //обновляем DNA в популяции + for (int i=0; imaxDNAlenght) { + [message appendFormat:@"The downloadable file exceeds maximum length of DNA = %lu !", maxDNAlenght]; NSAlert *alert = [[NSAlert alloc] init]; [alert addButtonWithTitle:@"OK"]; - [alert setMessageText:@"В загружаемом файле превышена максимальная длина ДНК !"]; - [alert setInformativeText:@"Выберите файл с нужной структурой ДНК"]; + [alert setMessageText:message]; + [alert setInformativeText:@"Select the file with the correct structure of DNA"]; [alert setAlertStyle:NSWarningAlertStyle]; [alert runModal]; return; } - if ([goalDNA fillDNAString:fileContents]) { + NSString *s = [goalDNA fillDNAString:fileContents]; + if (s == @"") { [goalDNATextField setStringValue:fileContents]; } else { + [message appendFormat:@"The downloadable file is invalid character = %@ !", s]; NSAlert *alert = [[NSAlert alloc] init]; [alert addButtonWithTitle:@"OK"]; - [alert setMessageText:@"В загружаемом файле недопустимый символ !"]; - [alert setInformativeText:@"Выберите файл с нужной структурой ДНК"]; + [alert setMessageText:message]; + [alert setInformativeText:@"Select the file with the correct structure of DNA"]; [alert setAlertStyle:NSWarningAlertStyle]; [alert runModal]; } @@ -257,13 +264,11 @@ - (IBAction)loadGoalDNA:(id)sender { } -(id)init { - NSLog(@"init"); self = [super init]; if (self) { - [self addObserver:self forKeyPath:@"populationSize" options:NSKeyValueObservingOptionOld context:&RMDocumentKVOContext]; - [self addObserver:self forKeyPath:@"dnaLength" options:NSKeyValueObservingOptionOld context:&RMDocumentKVOContext]; - [self addObserver:self forKeyPath:@"mutationRate" options:NSKeyValueObservingOptionOld context:&RMDocumentKVOContext]; + population = [[NSMutableArray alloc] init]; undoManager = [[NSUndoManager alloc] init]; + evolution = NO; [self willChangeValueForKey:@"populationSize"]; populationSize = DEFAULTPOPULATIONSIZE; @@ -283,88 +288,68 @@ -(id)init { goalDNA = [[Cell alloc] init ]; [goalDNA fillDNALenght:dnaLength]; - [goalDNATextField setStringValue:[goalDNA stringDNA]]; - population = [[NSMutableArray alloc] init]; - startEvolution = NO; + // заполняем новыми популяциями + for (int i=0; i +//static NSArray* arrayATGCQ; -@interface Cell : NSObject { +@interface Cell : NSObject { NSArray* arrayATGC; - NSInteger dnaLenght; - // NSInteger hammingDistance; + NSInteger dnaLenght; } @property (nonatomic, retain) NSMutableArray* DNA; @property (nonatomic) NSInteger hammingDistance; -(void)fillDNALenght:(NSInteger) d; --(BOOL)fillDNAString:(NSString*) s; --(int)calculateHammingDistance:(Cell*) c; +-(NSString*)fillDNAString:(NSString*) s; +-(void)calculateHammingDistance:(Cell*) c; -(void)mutate:(NSInteger) percent; -(NSString*)stringDNA; -(NSMutableArray*)crossing:(Cell*) c; diff --git a/DNA-project-3/DNA-project-3/Cell.m b/DNA-project-3/DNA-project-3/Cell.m index 2879480..e9dade8 100644 --- a/DNA-project-3/DNA-project-3/Cell.m +++ b/DNA-project-3/DNA-project-3/Cell.m @@ -7,12 +7,30 @@ // #import "Cell.h" +//#define kSizeLarge @["A", "T", "G", "C"] @implementation Cell @synthesize hammingDistance; @synthesize DNA = _DNA; +/* +static NSArray* arrayATGCQ = nil; +static dispatch_once_t onceToken; + + + +dispatch_once(&onceToken, ^{ + arrayATGCQ = @[kSizeLarge]; +}); + +dispatch_once () + +dispatch_once(&onceToken, ^{ + arrayATGCQ = [NSArray initWithObjects:@"A", @"T", @"G", @"C",nil]; +}); +*/ + -(id) init { self = [super init]; if (self) { @@ -27,21 +45,18 @@ -(void)fillDNALenght:(NSInteger) d { NSInteger i; if (d > dnaLenght) { for (i=dnaLenght; i=d; i--) { - [_DNA removeObjectAtIndex:i]; - } + for (i=dnaLenght-1; i>=d; i--) + [_DNA removeObjectAtIndex:i]; // удаляем лишние элементы } dnaLenght = d; - if ([_DNA count] != dnaLenght) { + if ([_DNA count] != dnaLenght) // дополнительная проверка NSLog(@"длина ДНК различна %lu <> %lu",[_DNA count], dnaLenght ); - - } } --(BOOL)fillDNAString:(NSString*) s { +-(NSString*)fillDNAString:(NSString*) s { NSInteger n = [s length]; // перебираем переданную строку и ищем запрещенные символы for (NSInteger i=0; i - - - Open Recent - - 1048576 - 2147483647 - - - submenuAction: - - Open Recent - - - - Clear Menu - - 1048576 - 2147483647 - - - - - _NSRecentDocumentsMenu - - YES @@ -265,14 +240,6 @@ - - - Revert to Saved - - 2147483647 - - - YES @@ -1387,7 +1354,7 @@ 268 - {{191, 387}, {349, 21}} + {{220, 387}, {320, 21}} _NS:779 @@ -1446,7 +1413,7 @@ 268 - {{123, 386}, {62, 22}} + {{149, 386}, {62, 22}} _NS:903 @@ -1539,7 +1506,7 @@ 268 - {{123, 356}, {62, 22}} + {{149, 356}, {62, 22}} _NS:903 @@ -1598,7 +1565,7 @@ 268 - {{191, 327}, {349, 21}} + {{220, 327}, {320, 21}} _NS:779 @@ -1641,7 +1608,7 @@ 268 - {{123, 326}, {62, 22}} + {{149, 326}, {62, 22}} _NS:903 @@ -1875,7 +1842,7 @@ 268 - {{192, 356}, {349, 21}} + {{220, 356}, {321, 21}} _NS:779 @@ -1933,6 +1900,37 @@ YES + + Open Recent + + 1048576 + 2147483647 + + + submenuAction: + + Open Recent + + + + Clear Menu + + 1048576 + 2147483647 + + + + + _NSRecentDocumentsMenu + + + + Revert to Saved + + 2147483647 + + + @@ -1992,14 +1990,6 @@ 87 - - - clearRecentDocuments: - - - - 127 - performClose: @@ -2160,22 +2150,6 @@ 357 - - - saveDocument: - - - - 362 - - - - revertDocumentToSaved: - - - - 364 - runToolbarCustomizationPalette: @@ -2224,14 +2198,6 @@ 373 - - - openDocument: - - - - 374 - raiseBaseline: @@ -2568,6 +2534,22 @@ 535 + + + clearRecentDocuments: + + + + 127 + + + + revertDocumentToSaved: + + + + 364 + delegate @@ -2752,6 +2734,22 @@ 691 + + + savePopulation: + + + + 711 + + + + loadPopulation: + + + + 715 + value: self.populationSize @@ -2977,11 +2975,9 @@ - - @@ -3006,14 +3002,6 @@ - - 124 - - - - - - 77 @@ -3029,29 +3017,11 @@ - - 112 - - - 74 - - 125 - - - - - - - - 126 - - - 205 @@ -4206,6 +4176,32 @@ + + 124 + + + + + + + + 125 + + + + + + + + 126 + + + + + 112 + + + @@ -4418,7 +4414,7 @@ - 708 + 715 0 diff --git a/TestUndoManager/TestUndoManager/en.lproj/Credits.rtf b/DNA-project-3/DNA-project-3/ru.lproj/Credits.rtf similarity index 100% rename from TestUndoManager/TestUndoManager/en.lproj/Credits.rtf rename to DNA-project-3/DNA-project-3/ru.lproj/Credits.rtf diff --git a/TestUndoManager/TestUndoManager/en.lproj/InfoPlist.strings b/DNA-project-3/DNA-project-3/ru.lproj/InfoPlist.strings similarity index 100% rename from TestUndoManager/TestUndoManager/en.lproj/InfoPlist.strings rename to DNA-project-3/DNA-project-3/ru.lproj/InfoPlist.strings diff --git a/TestUndoManager/TestUndoManager/en.lproj/MainMenu.xib b/DNA-project-3/DNA-project-3/ru.lproj/MainMenu.xib similarity index 71% rename from TestUndoManager/TestUndoManager/en.lproj/MainMenu.xib rename to DNA-project-3/DNA-project-3/ru.lproj/MainMenu.xib index 1c13505..d0cbde4 100644 --- a/TestUndoManager/TestUndoManager/en.lproj/MainMenu.xib +++ b/DNA-project-3/DNA-project-3/ru.lproj/MainMenu.xib @@ -11,11 +11,16 @@ 2844 - IBNSLayoutConstraint + NSBox + NSButton + NSButtonCell NSCustomObject NSMenu NSMenuItem NSNumberFormatter + NSProgressIndicator + NSSlider + NSSliderCell NSTextField NSTextFieldCell NSUserDefaultsController @@ -44,7 +49,7 @@ - TestUndoManager + DNA-project-3 1048576 2147483647 @@ -58,11 +63,11 @@ submenuAction: - TestUndoManager + DNA-project-3 - About TestUndoManager + About DNA-project-3 2147483647 @@ -127,7 +132,7 @@ - Hide TestUndoManager + Hide DNA-project-3 h 1048576 2147483647 @@ -165,7 +170,7 @@ - Quit TestUndoManager + Quit DNA-project-3 q 1048576 2147483647 @@ -206,31 +211,6 @@ - - - Open Recent - - 1048576 - 2147483647 - - - submenuAction: - - Open Recent - - - - Clear Menu - - 1048576 - 2147483647 - - - - - _NSRecentDocumentsMenu - - YES @@ -260,14 +240,6 @@ - - - Revert to Saved - - 2147483647 - - - YES @@ -851,14 +823,14 @@ - Ligatures + Ligature 2147483647 submenuAction: - Ligatures + Ligature @@ -1280,7 +1252,7 @@ - TestUndoManager Help + DNA-project-3 Help ? 1048576 2147483647 @@ -1295,11 +1267,11 @@ _NSMainMenu - 15 + 7 2 - {{335, 390}, {480, 360}} + {{335, 390}, {558, 428}} 1954021376 - TestUndoManager + iDNA NSWindow @@ -1307,31 +1279,165 @@ 256 - + 268 - {{141, 230}, {96, 22}} + {{7, 12}, {146, 32}} - - _NS:9 + + _NS:687 YES - - -1804599231 - -1874852864 - - + + 67239424 + 134217728 + Старт эволюции + LucidaGrande 13 1044 - + _NS:687 + + -2038284033 + 129 + + + 200 + 25 + + + + + 268 + {{146, 12}, {77, 32}} + + + + _NS:687 + YES + + -1543373312 + 134217728 + Пауза + + _NS:687 + + -2038284033 + 129 + + + 200 + 25 + + + + + 268 + {{351, 12}, {194, 32}} + + + _NS:687 + YES + + 67239424 + 134217728 + Загрузить целевую ДНК + + _NS:687 + + -2038284033 + 129 + + + 200 + 25 + + + + + 268 + {{220, 387}, {320, 21}} + + + + _NS:779 + YES + + -2079981824 + 0 + + _NS:779 + + 10000 + 100 + 100 + 0.0 + 0 + 1 + NO + NO + + + + + 268 + {{17, 389}, {125, 17}} + + + + _NS:3944 + YES + + 68288064 + 272630784 + Размер популяции + + _NS:3944 + + + 6 + System + controlColor + + 3 + MC42NjY2NjY2NjY3AA + + + + 6 + System + controlTextColor + + 3 + MAA + + + + + + + 268 + {{150, 386}, {62, 22}} + + + + _NS:903 + YES + + -1804468671 + 4195328 + + + - + + + -∞ @@ -1347,17 +1453,10 @@ NaN - + - - 0 - 0 - YES - NO - 1 - AAAAAAAAAAAAAAAAAAAAAA - - + + 3 YES @@ -1370,10 +1469,11 @@ NO YES - _NS:9 - + 100-10000 + _NS:903 + YES - + 6 System textBackgroundColor @@ -1382,22 +1482,433 @@ MQA - + 6 System textColor - - 3 - MAA + + + + + + + 268 + {{17, 359}, {77, 17}} + + + + _NS:3944 + YES + + 68288064 + 272630784 + Длина ДНК + + _NS:3944 + + + + + + + + 268 + {{150, 356}, {62, 22}} + + + + _NS:903 + YES + + -1804468671 + 272630784 + + + + + + + + + + -∞ + + + +∞ + + #,##0.### + #,##0.### + + + + + + + + NaN + + + + + + 3 + YES + YES + YES + + . + , + YES + NO + YES + + 50-100 + _NS:903 + + YES + + + + + + + 268 + {{220, 327}, {320, 21}} + + + + _NS:779 + YES + + -2079981824 + 0 + + _NS:779 + + 100 + 1 + 1 + 0.0 + 0 + 1 + NO + NO + + + + + 268 + {{17, 329}, {126, 17}} + + + + _NS:3944 + YES + + 68288064 + 272630784 + Частота мутации % + + _NS:3944 + + + + + + + + 268 + {{150, 326}, {62, 22}} + + + + _NS:903 + YES + + -1804468671 + 272630784 + + + + + + + + + + + -∞ + + + +∞ + + #,##0.### + #,##0.### + + + + + + + + NaN + + + + + + 3 + YES + YES + YES + . + , + YES + NO + YES + + 1-100 + _NS:903 + + YES + + + + + + + 268 + {{207, 295}, {95, 21}} + + + + _NS:3944 + YES + + 68288064 + 272630784 + Поколение: + + LucidaGrande-Bold + 15 + 16 + + _NS:3944 + + YES + + + + + + + 9228 + + {{18, 232}, {522, 20}} + + + + _NS:2352 + 16392 + 100 + + + + 12 + + + + 274 + + + + 268 + {{20, 14}, {482, 112}} + + + + _NS:354 + {250, 750} + YES + + -2076049920 + 272629760 + + + _NS:354 + + YES + + + + + + + 268 + {{217, 134}, {89, 17}} + + + + _NS:3944 + YES + + 68288064 + 272630784 + Целевая ДНК + + _NS:3944 + + + + + + + {{1, 1}, {523, 146}} + + + + _NS:21 + + + {{17, 51}, {525, 167}} + + + + _NS:18 + {0, 0} + + 67239424 + 0 + + + LucidaGrande + 14 + 16 + + + + 3 + MCAwLjgwMDAwMDAxMTkAA + + 1 + 0 + 1 + NO + + + + 268 + {{304, 295}, {48, 21}} + + + + _NS:3944 + YES + + 68288064 + 272630784 + 0 + + _NS:3944 + + YES + + + + + + + 268 + {{181, 270}, {149, 17}} + + + + _NS:3944 + YES + + 68288064 + 272630784 + Лучшее совпадение - + + _NS:3944 + + + + + + + + 268 + {{325, 270}, {32, 17}} + + + + _NS:3944 + YES + + 68288064 + 71304192 + 0 + + _NS:3944 + + + + + + + + 268 + {{220, 356}, {321, 21}} + + + + _NS:779 + YES + + -2079981824 + 0 + + _NS:779 + + 300 + 50 + 50 + 0.0 + 0 + 1 + NO + NO + + + + + 268 + {{353, 270}, {24, 17}} + + + + _NS:1535 + YES + + 68157504 + 272630784 + % + + _NS:1535 + + + + - {480, 360} + {558, 428} - + {{0, 0}, {1680, 1028}} {10000000000000, 10000000000000} @@ -1409,9 +1920,40 @@ NSFontManager - + YES + + Open Recent + + 1048576 + 2147483647 + + + submenuAction: + + Open Recent + + + + Clear Menu + + 1048576 + 2147483647 + + + + + _NSRecentDocumentsMenu + + + + Revert to Saved + + 2147483647 + + + @@ -1471,14 +2013,6 @@ 87 - - - clearRecentDocuments: - - - - 127 - performClose: @@ -1641,23 +2175,7 @@ - saveDocument: - - - - 362 - - - - revertDocumentToSaved: - - - - 364 - - - - runToolbarCustomizationPalette: + runToolbarCustomizationPalette: @@ -1703,14 +2221,6 @@ 373 - - - openDocument: - - - - 374 - raiseBaseline: @@ -2047,13 +2557,29 @@ 535 + + + clearRecentDocuments: + + + + 127 + + + + revertDocumentToSaved: + + + + 364 + delegate - 552 + 706 @@ -2105,27 +2631,291 @@ - numTextField + goalDNATextField + + + + 671 + + + + pauseButton - + - 542 + 672 + + + + pauseEvolution: + + + + 674 + + + + startButton + + + + 675 + + + + startEvolution: + + + + 677 + + + + loadGoalDNA: + + + + 678 + + + + loadButton + + + + 679 + + + + populationSizeTextField + + + + 681 + + + + dnaLengthTextField + + + + 682 + + + + mutationRateTextField + + + + 683 + + + + populationSizeSlider + + + + 684 + + + + dnaLengthSlider + + + + 685 + + + + mutationRateSlider + + + + 686 + + + + bestMatchTextField + + + + 689 + + + + generationTextField + + + + 690 + + + + progressIndicator + + + + 691 + + + + savePopulation: + + + + 711 + + + + loadPopulation: + + + + 715 + + + + value: self.populationSize + + + + + + value: self.populationSize + value + self.populationSize + 2 + + + 663 + + + + value: self.populationSize + + + + + + value: self.populationSize + value + self.populationSize + 2 + + + 654 + + + + value: self.dnaLength + + + + + + value: self.dnaLength + value + self.dnaLength + 2 + + + 657 + + + + value: self.mutationRate + + + + + + value: self.mutationRate + value + self.mutationRate + 2 + + + 670 + + + + value: self.mutationRate + + + + + + value: self.mutationRate + value + self.mutationRate + 2 + + + 660 + + + + value: self.bestHammingDistance + + + + + + value: self.bestHammingDistance + value + self.bestHammingDistance + 2 + + + 703 + + + + value: self.generation + + + + + + value: self.generation + value + self.generation + 2 + + + 697 + + + + value: self.bestHammingDistance + + + + + + value: self.bestHammingDistance + value + self.bestHammingDistance + 2 + + + 700 - value: self.testNum - + value: self.dnaLength + - + - value: self.testNum + value: self.dnaLength value - self.testNum + self.dnaLength 2 - 551 + 666 @@ -2208,11 +2998,9 @@ - - @@ -2237,14 +3025,6 @@ - - 124 - - - - - - 77 @@ -2260,29 +3040,11 @@ - - 112 - - - 74 - - 125 - - - - - - - - 126 - - - 205 @@ -2652,39 +3414,25 @@ 372 - - - 5 - 0 - - 5 - 1 - - 141 - - 1000 - - 3 - 9 - 3 - - - - 3 - 0 - - 3 - 1 - - 108 - - 1000 - - 3 - 9 - 3 - - + + + + + + + + + + + + + + + + + + + @@ -3163,59 +3911,318 @@ 536 - - - - - - 7 - 0 - - 0 - 1 - - 96 - - 1000 - - 3 - 9 - 1 - + + + 537 - - - - - + + 538 - - + + + + + 539 - - + + 540 - + + + + 541 - - + + + + + 542 + + + + + 543 - + + + + + 544 + + + + + + + + 545 + + + + + 546 + + + + + + + + 547 + + + + + + + + 549 + + + + + + + + 550 + + + + + + + + 551 + + + + + + + + 552 + + + + + 554 + + + + + + + + 555 + + + + + + + + 556 + + + + + + + + 557 + + + + + + + + 558 + + + + + 559 + + + + + 566 + + + + + + + + 567 + + + + + 570 + + + + + 586 + + + + + + + + + 580 + + + + + + + + 581 + + + + + 587 + + + + + + + + 588 + + + + + 589 + + + + + + + + 590 + + + + + 591 + + + + + + + + 592 + + + + + 593 + + + + + + + + 594 + + + + + 595 + + + + + 596 + + + + + 597 + + + + + 598 + + + + + 650 + + + + + + + + 651 + + + + + 704 + + + + + + + + 705 + + + + + 124 + + + + + + + + 125 + + + + + + + + 126 + + + + + 112 + @@ -3284,10 +4291,6 @@ com.apple.InterfaceBuilder.CocoaPlugin {{380, 496}, {480, 360}} - - - - com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -3365,22 +4368,59 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - - - - com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + com.apple.InterfaceBuilder.CocoaPlugin + + + com.apple.InterfaceBuilder.CocoaPlugin + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -3397,22 +4437,111 @@ - 552 + 715 AppDelegate NSObject + + id + id + id + id + id + + + + loadGoalDNA: + id + + + loadPopulation: + id + + + pauseEvolution: + id + + + savePopulation: + id + + + startEvolution: + id + + - NSTextField + NSTextField + NSSlider + NSTextField + NSTextField + NSTextField + NSButton + NSSlider + NSTextField + NSButton + NSSlider + NSTextField + NSProgressIndicator + NSButton NSWindow - - numTextField + + bestMatchTextField + NSTextField + + + dnaLengthSlider + NSSlider + + + dnaLengthTextField NSTextField + + generationTextField + NSTextField + + + goalDNATextField + NSTextField + + + loadButton + NSButton + + + mutationRateSlider + NSSlider + + + mutationRateTextField + NSTextField + + + pauseButton + NSButton + + + populationSizeSlider + NSSlider + + + populationSizeTextField + NSTextField + + + progressIndicator + NSProgressIndicator + + + startButton + NSButton + window NSWindow @@ -3423,14 +4552,6 @@ ./Classes/AppDelegate.h - - NSLayoutConstraint - NSObject - - IBProjectSource - ./Classes/NSLayoutConstraint.h - - 0 @@ -3441,6 +4562,5 @@ {11, 11} {10, 3} - YES diff --git a/TestUndoManager/TestUndoManager.xcodeproj/project.pbxproj b/TestUndoManager/TestUndoManager.xcodeproj/project.pbxproj deleted file mode 100644 index 4a5f55e..0000000 --- a/TestUndoManager/TestUndoManager.xcodeproj/project.pbxproj +++ /dev/null @@ -1,304 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - A57607621688B8DD0050A54E /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A57607611688B8DD0050A54E /* Cocoa.framework */; }; - A576076C1688B8DD0050A54E /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = A576076A1688B8DD0050A54E /* InfoPlist.strings */; }; - A576076E1688B8DD0050A54E /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = A576076D1688B8DD0050A54E /* main.m */; }; - A57607721688B8DD0050A54E /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = A57607701688B8DD0050A54E /* Credits.rtf */; }; - A57607751688B8DD0050A54E /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = A57607741688B8DD0050A54E /* AppDelegate.m */; }; - A57607781688B8DD0050A54E /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = A57607761688B8DD0050A54E /* MainMenu.xib */; }; -/* End PBXBuildFile section */ - -/* Begin PBXFileReference section */ - A576075D1688B8DD0050A54E /* TestUndoManager.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = TestUndoManager.app; sourceTree = BUILT_PRODUCTS_DIR; }; - A57607611688B8DD0050A54E /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; - A57607641688B8DD0050A54E /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; }; - A57607651688B8DD0050A54E /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; }; - A57607661688B8DD0050A54E /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; - A57607691688B8DD0050A54E /* TestUndoManager-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "TestUndoManager-Info.plist"; sourceTree = ""; }; - A576076B1688B8DD0050A54E /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; - A576076D1688B8DD0050A54E /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; - A576076F1688B8DD0050A54E /* TestUndoManager-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "TestUndoManager-Prefix.pch"; sourceTree = ""; }; - A57607711688B8DD0050A54E /* en */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = en; path = en.lproj/Credits.rtf; sourceTree = ""; }; - A57607731688B8DD0050A54E /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; - A57607741688B8DD0050A54E /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; - A57607771688B8DD0050A54E /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/MainMenu.xib; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - A576075A1688B8DD0050A54E /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - A57607621688B8DD0050A54E /* Cocoa.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - A57607521688B8DD0050A54E = { - isa = PBXGroup; - children = ( - A57607671688B8DD0050A54E /* TestUndoManager */, - A57607601688B8DD0050A54E /* Frameworks */, - A576075E1688B8DD0050A54E /* Products */, - ); - sourceTree = ""; - }; - A576075E1688B8DD0050A54E /* Products */ = { - isa = PBXGroup; - children = ( - A576075D1688B8DD0050A54E /* TestUndoManager.app */, - ); - name = Products; - sourceTree = ""; - }; - A57607601688B8DD0050A54E /* Frameworks */ = { - isa = PBXGroup; - children = ( - A57607611688B8DD0050A54E /* Cocoa.framework */, - A57607631688B8DD0050A54E /* Other Frameworks */, - ); - name = Frameworks; - sourceTree = ""; - }; - A57607631688B8DD0050A54E /* Other Frameworks */ = { - isa = PBXGroup; - children = ( - A57607641688B8DD0050A54E /* AppKit.framework */, - A57607651688B8DD0050A54E /* CoreData.framework */, - A57607661688B8DD0050A54E /* Foundation.framework */, - ); - name = "Other Frameworks"; - sourceTree = ""; - }; - A57607671688B8DD0050A54E /* TestUndoManager */ = { - isa = PBXGroup; - children = ( - A57607731688B8DD0050A54E /* AppDelegate.h */, - A57607741688B8DD0050A54E /* AppDelegate.m */, - A57607761688B8DD0050A54E /* MainMenu.xib */, - A57607681688B8DD0050A54E /* Supporting Files */, - ); - path = TestUndoManager; - sourceTree = ""; - }; - A57607681688B8DD0050A54E /* Supporting Files */ = { - isa = PBXGroup; - children = ( - A57607691688B8DD0050A54E /* TestUndoManager-Info.plist */, - A576076A1688B8DD0050A54E /* InfoPlist.strings */, - A576076D1688B8DD0050A54E /* main.m */, - A576076F1688B8DD0050A54E /* TestUndoManager-Prefix.pch */, - A57607701688B8DD0050A54E /* Credits.rtf */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - A576075C1688B8DD0050A54E /* TestUndoManager */ = { - isa = PBXNativeTarget; - buildConfigurationList = A576077B1688B8DD0050A54E /* Build configuration list for PBXNativeTarget "TestUndoManager" */; - buildPhases = ( - A57607591688B8DD0050A54E /* Sources */, - A576075A1688B8DD0050A54E /* Frameworks */, - A576075B1688B8DD0050A54E /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = TestUndoManager; - productName = TestUndoManager; - productReference = A576075D1688B8DD0050A54E /* TestUndoManager.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - A57607541688B8DD0050A54E /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 0450; - ORGANIZATIONNAME = Sergey; - }; - buildConfigurationList = A57607571688B8DD0050A54E /* Build configuration list for PBXProject "TestUndoManager" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - en, - ); - mainGroup = A57607521688B8DD0050A54E; - productRefGroup = A576075E1688B8DD0050A54E /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - A576075C1688B8DD0050A54E /* TestUndoManager */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - A576075B1688B8DD0050A54E /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - A576076C1688B8DD0050A54E /* InfoPlist.strings in Resources */, - A57607721688B8DD0050A54E /* Credits.rtf in Resources */, - A57607781688B8DD0050A54E /* MainMenu.xib in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - A57607591688B8DD0050A54E /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - A576076E1688B8DD0050A54E /* main.m in Sources */, - A57607751688B8DD0050A54E /* AppDelegate.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXVariantGroup section */ - A576076A1688B8DD0050A54E /* InfoPlist.strings */ = { - isa = PBXVariantGroup; - children = ( - A576076B1688B8DD0050A54E /* en */, - ); - name = InfoPlist.strings; - sourceTree = ""; - }; - A57607701688B8DD0050A54E /* Credits.rtf */ = { - isa = PBXVariantGroup; - children = ( - A57607711688B8DD0050A54E /* en */, - ); - name = Credits.rtf; - sourceTree = ""; - }; - A57607761688B8DD0050A54E /* MainMenu.xib */ = { - isa = PBXVariantGroup; - children = ( - A57607771688B8DD0050A54E /* en */, - ); - name = MainMenu.xib; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - A57607791688B8DD0050A54E /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_ENABLE_OBJC_EXCEPTIONS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.7; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = macosx; - }; - name = Debug; - }; - A576077A1688B8DD0050A54E /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_ENABLE_OBJC_EXCEPTIONS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.7; - SDKROOT = macosx; - }; - name = Release; - }; - A576077C1688B8DD0050A54E /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - COMBINE_HIDPI_IMAGES = YES; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "TestUndoManager/TestUndoManager-Prefix.pch"; - INFOPLIST_FILE = "TestUndoManager/TestUndoManager-Info.plist"; - PRODUCT_NAME = "$(TARGET_NAME)"; - WRAPPER_EXTENSION = app; - }; - name = Debug; - }; - A576077D1688B8DD0050A54E /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - COMBINE_HIDPI_IMAGES = YES; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "TestUndoManager/TestUndoManager-Prefix.pch"; - INFOPLIST_FILE = "TestUndoManager/TestUndoManager-Info.plist"; - PRODUCT_NAME = "$(TARGET_NAME)"; - WRAPPER_EXTENSION = app; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - A57607571688B8DD0050A54E /* Build configuration list for PBXProject "TestUndoManager" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - A57607791688B8DD0050A54E /* Debug */, - A576077A1688B8DD0050A54E /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - A576077B1688B8DD0050A54E /* Build configuration list for PBXNativeTarget "TestUndoManager" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - A576077C1688B8DD0050A54E /* Debug */, - A576077D1688B8DD0050A54E /* Release */, - ); - defaultConfigurationIsVisible = 0; - }; -/* End XCConfigurationList section */ - }; - rootObject = A57607541688B8DD0050A54E /* Project object */; -} diff --git a/TestUndoManager/TestUndoManager.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/TestUndoManager/TestUndoManager.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 2650de8..0000000 --- a/TestUndoManager/TestUndoManager.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/TestUndoManager/TestUndoManager.xcodeproj/project.xcworkspace/xcuserdata/sergey.xcuserdatad/UserInterfaceState.xcuserstate b/TestUndoManager/TestUndoManager.xcodeproj/project.xcworkspace/xcuserdata/sergey.xcuserdatad/UserInterfaceState.xcuserstate deleted file mode 100644 index ad0594e7ab3d84b443cf34d18ed625d97c5b04c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14402 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 diff --git a/TestUndoManager/TestUndoManager.xcodeproj/xcuserdata/sergey.xcuserdatad/xcschemes/TestUndoManager.xcscheme b/TestUndoManager/TestUndoManager.xcodeproj/xcuserdata/sergey.xcuserdatad/xcschemes/TestUndoManager.xcscheme deleted file mode 100644 index 46fcf97..0000000 --- a/TestUndoManager/TestUndoManager.xcodeproj/xcuserdata/sergey.xcuserdatad/xcschemes/TestUndoManager.xcscheme +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/TestUndoManager/TestUndoManager.xcodeproj/xcuserdata/sergey.xcuserdatad/xcschemes/xcschememanagement.plist b/TestUndoManager/TestUndoManager.xcodeproj/xcuserdata/sergey.xcuserdatad/xcschemes/xcschememanagement.plist deleted file mode 100644 index 69bde64..0000000 --- a/TestUndoManager/TestUndoManager.xcodeproj/xcuserdata/sergey.xcuserdatad/xcschemes/xcschememanagement.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - SchemeUserState - - TestUndoManager.xcscheme - - orderHint - 0 - - - SuppressBuildableAutocreation - - A576075C1688B8DD0050A54E - - primary - - - - - diff --git a/TestUndoManager/TestUndoManager/AppDelegate.h b/TestUndoManager/TestUndoManager/AppDelegate.h deleted file mode 100644 index 5d1e68d..0000000 --- a/TestUndoManager/TestUndoManager/AppDelegate.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// AppDelegate.h -// TestUndoManager -// -// Created by Sergey on 24.12.12. -// Copyright (c) 2012 Sergey. All rights reserved. -// - -#import - -@interface AppDelegate : NSObject { - NSInteger testNum; - NSUndoManager* undo; -} - -@property (assign) IBOutlet NSWindow *window; -@property (weak) IBOutlet NSTextField *numTextField; - -@end diff --git a/TestUndoManager/TestUndoManager/AppDelegate.m b/TestUndoManager/TestUndoManager/AppDelegate.m deleted file mode 100644 index a653886..0000000 --- a/TestUndoManager/TestUndoManager/AppDelegate.m +++ /dev/null @@ -1,71 +0,0 @@ -// -// AppDelegate.m -// TestUndoManager -// -// Created by Sergey on 24.12.12. -// Copyright (c) 2012 Sergey. All rights reserved. -// - -#import "AppDelegate.h" - -static void *RMDocumentKVOContext; -@implementation AppDelegate { - -} - -- (void)applicationDidFinishLaunching:(NSNotification *)aNotification -{ - // Insert code here to initialize your application - [self addObserver:self forKeyPath:@"testNum" options:NSKeyValueObservingOptionOld context:&RMDocumentKVOContext]; -} - --(id)init { - self = [super init]; - if (self) { - undo = [[NSUndoManager alloc]init]; - } - return self; -} - --(void)setTestNum:(NSInteger) x { - testNum = x; -} - --(NSInteger)testNum { - return testNum; -} - -- (NSUndoManager*) windowWillReturnUndoManager: (NSWindow*) window -{ - - NSLog(@"windowWillReturnUndoManager"); - return undo; -} - --(void)changeKeyPath:(NSString*)keyPath - ofObject:(id)obj - toValue:(id)newValue { - [obj setValue:newValue forKeyPath:keyPath]; -} - --(void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { - if (context != &RMDocumentKVOContext) { - [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; - return; - } - id oldValue = [change objectForKey:NSKeyValueChangeOldKey]; - if (oldValue == [NSNull null]) { - oldValue = nil; - } - NSLog(@"oldValue = %@",oldValue); - NSLog(@"before replacing: canUndo:%d", [undo canUndo]); - [[undo prepareWithInvocationTarget:self] changeKeyPath:keyPath ofObject:object toValue:oldValue]; - [undo setActionName:@"Edit"]; - NSLog(@"after replacing: canUndo:%d", [undo canUndo]); //prints - - -} - - - -@end diff --git a/TestUndoManager/TestUndoManager/TestUndoManager-Info.plist b/TestUndoManager/TestUndoManager/TestUndoManager-Info.plist deleted file mode 100644 index 0c83e2b..0000000 --- a/TestUndoManager/TestUndoManager/TestUndoManager-Info.plist +++ /dev/null @@ -1,34 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIconFile - - CFBundleIdentifier - ShSergey.${PRODUCT_NAME:rfc1034identifier} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - LSMinimumSystemVersion - ${MACOSX_DEPLOYMENT_TARGET} - NSHumanReadableCopyright - Copyright © 2012 Sergey. All rights reserved. - NSMainNibFile - MainMenu - NSPrincipalClass - NSApplication - - diff --git a/TestUndoManager/TestUndoManager/TestUndoManager-Prefix.pch b/TestUndoManager/TestUndoManager/TestUndoManager-Prefix.pch deleted file mode 100644 index bf3fa00..0000000 --- a/TestUndoManager/TestUndoManager/TestUndoManager-Prefix.pch +++ /dev/null @@ -1,7 +0,0 @@ -// -// Prefix header for all source files of the 'TestUndoManager' target in the 'TestUndoManager' project -// - -#ifdef __OBJC__ - #import -#endif diff --git a/TestUndoManager/TestUndoManager/main.m b/TestUndoManager/TestUndoManager/main.m deleted file mode 100644 index d4c6b17..0000000 --- a/TestUndoManager/TestUndoManager/main.m +++ /dev/null @@ -1,14 +0,0 @@ -// -// main.m -// TestUndoManager -// -// Created by Sergey on 24.12.12. -// Copyright (c) 2012 Sergey. All rights reserved. -// - -#import - -int main(int argc, char *argv[]) -{ - return NSApplicationMain(argc, (const char **)argv); -} From 869907bb8e74d5770e657aec202c0a215550511d Mon Sep 17 00:00:00 2001 From: ShSergey Date: Sat, 5 Jan 2013 15:59:42 +0400 Subject: [PATCH 7/7] FINAL2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Новый FINAL после продления дедлайна --- .../DNA-project-3.xcodeproj/project.pbxproj | 14 ++++++++++++++ .../UserInterfaceState.xcuserstate | Bin 24968 -> 31342 bytes DNA-project-3/DNA-project-3/AppDelegate.m | 14 ++++++-------- DNA-project-3/DNA-project-3/Cell.m | 2 -- .../en.lproj/Localizable.strings | 14 ++++++++++++++ .../ru.lproj/Localizable.strings | 14 ++++++++++++++ 6 files changed, 48 insertions(+), 10 deletions(-) create mode 100644 DNA-project-3/DNA-project-3/en.lproj/Localizable.strings create mode 100644 DNA-project-3/DNA-project-3/ru.lproj/Localizable.strings diff --git a/DNA-project-3/DNA-project-3.xcodeproj/project.pbxproj b/DNA-project-3/DNA-project-3.xcodeproj/project.pbxproj index 258193e..ff1e65c 100644 --- a/DNA-project-3/DNA-project-3.xcodeproj/project.pbxproj +++ b/DNA-project-3/DNA-project-3.xcodeproj/project.pbxproj @@ -13,6 +13,7 @@ A52619DB1685A568001951F2 /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = A52619D91685A568001951F2 /* Credits.rtf */; }; A52619DE1685A568001951F2 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = A52619DD1685A568001951F2 /* AppDelegate.m */; }; A52619E11685A568001951F2 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = A52619DF1685A568001951F2 /* MainMenu.xib */; }; + A5A0891F1698485800B01C96 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = A5A089211698485800B01C96 /* Localizable.strings */; }; A5F06F4A168729BD005B9EA4 /* Cell.m in Sources */ = {isa = PBXBuildFile; fileRef = A5F06F49168729BD005B9EA4 /* Cell.m */; }; /* End PBXBuildFile section */ @@ -34,6 +35,8 @@ A576F4F9168DB5CD00B21327 /* ru */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ru; path = ru.lproj/MainMenu.xib; sourceTree = ""; }; A576F4FA168DB5CD00B21327 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/InfoPlist.strings; sourceTree = ""; }; A576F4FB168DB5CD00B21327 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = ru; path = ru.lproj/Credits.rtf; sourceTree = ""; }; + A5A089201698485800B01C96 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Localizable.strings; sourceTree = ""; }; + A5A089221698486600B01C96 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; A5F06F49168729BD005B9EA4 /* Cell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Cell.m; sourceTree = ""; }; /* End PBXFileReference section */ @@ -90,6 +93,7 @@ children = ( A52619DC1685A568001951F2 /* AppDelegate.h */, A52619DD1685A568001951F2 /* AppDelegate.m */, + A5A089211698485800B01C96 /* Localizable.strings */, A52619E71685B78C001951F2 /* Cell.h */, A5F06F49168729BD005B9EA4 /* Cell.m */, A52619DF1685A568001951F2 /* MainMenu.xib */, @@ -164,6 +168,7 @@ A52619D51685A568001951F2 /* InfoPlist.strings in Resources */, A52619DB1685A568001951F2 /* Credits.rtf in Resources */, A52619E11685A568001951F2 /* MainMenu.xib in Resources */, + A5A0891F1698485800B01C96 /* Localizable.strings in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -210,6 +215,15 @@ name = MainMenu.xib; sourceTree = ""; }; + A5A089211698485800B01C96 /* Localizable.strings */ = { + isa = PBXVariantGroup; + children = ( + A5A089201698485800B01C96 /* ru */, + A5A089221698486600B01C96 /* en */, + ); + name = Localizable.strings; + sourceTree = ""; + }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ diff --git a/DNA-project-3/DNA-project-3.xcodeproj/project.xcworkspace/xcuserdata/sergey.xcuserdatad/UserInterfaceState.xcuserstate b/DNA-project-3/DNA-project-3.xcodeproj/project.xcworkspace/xcuserdata/sergey.xcuserdatad/UserInterfaceState.xcuserstate index 3b77ace9e155ac99229cb58fd487d23c23e6eec8..7b6edd426ff2fc3f6836064ce5afd3406b7a22f2 100644 GIT binary patch literal 31342 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 delta 14154 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 { - [message appendFormat:@"The downloadable file exceeds maximum length of DNA = %lu !", maxDNAlenght]; + [message appendFormat:NSLocalizedString(@"MESSAGE3",@""), maxDNAlenght]; NSAlert *alert = [[NSAlert alloc] init]; [alert addButtonWithTitle:@"OK"]; [alert setMessageText:message]; - [alert setInformativeText:@"Select the file with the correct structure of DNA"]; + [alert setInformativeText:NSLocalizedString(@"MESSAGE4",@"")]; [alert setAlertStyle:NSWarningAlertStyle]; [alert runModal]; return; @@ -251,11 +249,11 @@ - (IBAction)loadGoalDNA:(id)sender { [goalDNATextField setStringValue:fileContents]; } else { - [message appendFormat:@"The downloadable file is invalid character = %@ !", s]; + [message appendFormat:NSLocalizedString(@"MESSAGE5",@""), s]; NSAlert *alert = [[NSAlert alloc] init]; [alert addButtonWithTitle:@"OK"]; [alert setMessageText:message]; - [alert setInformativeText:@"Select the file with the correct structure of DNA"]; + [alert setInformativeText:NSLocalizedString(@"MESSAGE6",@"")]; [alert setAlertStyle:NSWarningAlertStyle]; [alert runModal]; } diff --git a/DNA-project-3/DNA-project-3/Cell.m b/DNA-project-3/DNA-project-3/Cell.m index e9dade8..0dc1d79 100644 --- a/DNA-project-3/DNA-project-3/Cell.m +++ b/DNA-project-3/DNA-project-3/Cell.m @@ -63,7 +63,6 @@ -(NSString*)fillDNAString:(NSString*) s { unichar charAtIndex = [s characterAtIndex:i]; NSString* charString = [NSString stringWithCharacters:&charAtIndex length:1]; if (![arrayATGC containsObject:charString]) { - NSLog(@"запрещенный символ %@",charString); return charString; } } @@ -115,7 +114,6 @@ -(NSMutableArray*)crossing:(Cell*) c { NSMutableArray* NewDNA = [[NSMutableArray alloc] init]; //Скомбинировать их содержание чтобы получить новую ДНК. Комбинирование одним из следующих способов (случайный выбор) int num_variant = arc4random() % 3; -// NSLog(@"Вариант %d",num_variant); if (num_variant == 0) { //50% первого ДНК + 50% второго ДНК int halfdnaLenght = dnaLenght/2; //50% diff --git a/DNA-project-3/DNA-project-3/en.lproj/Localizable.strings b/DNA-project-3/DNA-project-3/en.lproj/Localizable.strings new file mode 100644 index 0000000..7517032 --- /dev/null +++ b/DNA-project-3/DNA-project-3/en.lproj/Localizable.strings @@ -0,0 +1,14 @@ +/* + Localizable.strings + DNA-project-3 + + Created by Sergey on 05.01.13. + +*/ + +"MESSAGE1" = "The length of the goal DNA %lu and the population DNA %lu are not equal !"; +"MESSAGE2" = "Change the size of the DNA population or download another goal DNA"; +"MESSAGE3" = "The downloadable file exceeds maximum length of DNA = %lu !"; +"MESSAGE4" = "Select the file with the correct structure of DNA"; +"MESSAGE5" = "The downloadable file is invalid character = %@ !"; +"MESSAGE6" = "Select the file with the correct structure of DNA"; \ No newline at end of file diff --git a/DNA-project-3/DNA-project-3/ru.lproj/Localizable.strings b/DNA-project-3/DNA-project-3/ru.lproj/Localizable.strings new file mode 100644 index 0000000..386b9c6 --- /dev/null +++ b/DNA-project-3/DNA-project-3/ru.lproj/Localizable.strings @@ -0,0 +1,14 @@ +/* + Localizable.strings + DNA-project-3 + + Created by Sergey on 05.01.13. + +*/ + +"MESSAGE1" = "Длина целевой ДНК %lu и ДНК популяциии %lu не равны !"; +"MESSAGE2" = "Измените размер ДНК популяции или загрузите другой целевую ДНК"; +"MESSAGE3" = "Загружаемый файл превышает максимальную длину ДНК =%lu !"; +"MESSAGE4" = "Выберите файл с правильной структурой ДНК"; +"MESSAGE5" = "В загружаемом файле есть недопустимый символ =%@ !"; +"MESSAGE6" = "Выберите файл с правильной структурой ДНК";