From a74860ef59ae5385cefffbb9d942cdafccf36bfa Mon Sep 17 00:00:00 2001 From: Vladislav Khazov Date: Sat, 2 Feb 2013 16:11:09 +0400 Subject: [PATCH 1/6] iDNA 1.5 ver 1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Добавлена локализация --- .DS_Store | Bin 0 -> 6148 bytes iDNA 1.5 | 1 + 2 files changed, 1 insertion(+) create mode 100644 .DS_Store create mode 160000 iDNA 1.5 diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..2e567150bca3e25410f81b81e31c67b41e94b55d GIT binary patch literal 6148 zcmeHK!EVz)5S>j!anvH^g4E-RQx8>?(n2|Ka3dGdLlLSg^*~W; z5Wmn5;Eeh=;mz(+k))g|Aymysvu}3x&941ydA&rWI>T&}s7XWtoUztGbBpmf`-0Vc zW*MmL95Iz-s88qn#R6Lr|Dyu@>>AXfh+;a0-#kC_AuUXbQGPXE!PlqO5E0c;aX~qi z`^60J#~d#JC!#mBOPV%O^K6!{4w(;E(uGyKZ$ICjZ0PaM4#!(BCX)uNc@;c<(t7#&DEU13^0l%TObRc)wMQO*!#4yA zxAQ6P_X^Xyz!=vx=#cgxPDBU57JZ~_PM~YB{uCZvF;PGi5C!h8fd6y_D|eqtW)KBL zfqSL^e;+iQG4xnDw4V+%_6Pv1BW(>a|1ffm_85As9AX5fTq)3%Du2XKt{i#od7;P3 zp(`h4SH?VkW#vyO%C3&QwscaVLuo|;QD9bqCD(28{=fJ4^Z#s-^h5zs;9e=9>QNkZ za7%t~UAQ^kYc>1~&c?jT;Y|qwyA^}WTk#s)8uFS0VCb=Ohzv}A1gs3whywpqfnTf9 BbQJ&q literal 0 HcmV?d00001 diff --git a/iDNA 1.5 b/iDNA 1.5 new file mode 160000 index 0000000..f581d7b --- /dev/null +++ b/iDNA 1.5 @@ -0,0 +1 @@ +Subproject commit f581d7b64fad2b053565685c1a563640fde4c2a7 From 94506c1889b21fe7f4c99e620f50409bdd10610c Mon Sep 17 00:00:00 2001 From: Vladislav Khazov Date: Sat, 2 Feb 2013 16:15:46 +0400 Subject: [PATCH 2/6] iDNA --- .DS_Store | Bin 6148 -> 6148 bytes iDNA 1.5 | 1 - 2 files changed, 1 deletion(-) delete mode 160000 iDNA 1.5 diff --git a/.DS_Store b/.DS_Store index 2e567150bca3e25410f81b81e31c67b41e94b55d..ce44ddc4047457e55f48881052d6c3a167769ea2 100644 GIT binary patch delta 67 zcmZoMXfc=|#>B`mu~2NHo+2aj#DLw5%#(STVmEg%*RyQCz%0+SnVo~51E^&4LFVtw Vlles~IT(O|k%56}bAZSeW&l{C5IFz< delta 353 zcmZoMXfc=|#>B)qu~2NHo+2aL#DLw4H!w0XvQ6e;jIHNj$YgL~@MCafP+%}*&|@(5 z%*jtq%E?b+U|e-C{&x9gV@FvwY8i;AaH;~R7uaqBP6k= zwywSb>|zE+MhMNo3#DOH69a=BriaRci}G^v^U{H;7&oUeHnD7G=iui62H@s}jNh3j S^NUz=01X72xj8^&3o`)N$x>qg diff --git a/iDNA 1.5 b/iDNA 1.5 deleted file mode 160000 index f581d7b..0000000 --- a/iDNA 1.5 +++ /dev/null @@ -1 +0,0 @@ -Subproject commit f581d7b64fad2b053565685c1a563640fde4c2a7 From e477b33daf48ded5d327e8bf4fa79d1bf189edb5 Mon Sep 17 00:00:00 2001 From: Vladislav Khazov Date: Sat, 2 Feb 2013 16:22:06 +0400 Subject: [PATCH 3/6] iDNA 1.5 ver 1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Добавлена локализация --- .DS_Store | Bin 6148 -> 6148 bytes iDNA 1.5/.DS_Store | Bin 0 -> 6148 bytes iDNA 1.5/iDNA.xcodeproj/project.pbxproj | 353 ++ .../contents.xcworkspacedata | 7 + .../UserInterfaceState.xcuserstate | Bin 0 -> 33471 bytes .../WorkspaceSettings.xcsettings | 10 + .../xcdebugger/Breakpoints.xcbkptlist | 59 + .../xcschemes/iDNA.xcscheme | 86 + .../xcschemes/xcschememanagement.plist | 22 + iDNA 1.5/iDNA/.DS_Store | Bin 0 -> 6148 bytes iDNA 1.5/iDNA/HVSCellDna.h | 29 + iDNA 1.5/iDNA/HVSCellDna.m | 110 + iDNA 1.5/iDNA/HVSDocument.h | 45 + iDNA 1.5/iDNA/HVSDocument.m | 311 ++ iDNA 1.5/iDNA/HVSPopulationOfDna.h | 36 + iDNA 1.5/iDNA/HVSPopulationOfDna.m | 139 + iDNA 1.5/iDNA/en.lproj/Credits.rtf | 31 + iDNA 1.5/iDNA/en.lproj/HVSDocument.xib | 2674 ++++++++++ iDNA 1.5/iDNA/en.lproj/InfoPlist.strings | 2 + iDNA 1.5/iDNA/en.lproj/Localizable.strings | 16 + iDNA 1.5/iDNA/en.lproj/MainMenu.xib | 4562 +++++++++++++++++ iDNA 1.5/iDNA/iDNA-Info.plist | 55 + iDNA 1.5/iDNA/iDNA-Prefix.pch | 7 + iDNA 1.5/iDNA/main.m | 14 + iDNA 1.5/iDNA/ru.lproj/Credits.rtf | 42 + iDNA 1.5/iDNA/ru.lproj/HVSDocument.xib | 2651 ++++++++++ iDNA 1.5/iDNA/ru.lproj/InfoPlist.strings | 2 + iDNA 1.5/iDNA/ru.lproj/Localizable.strings | 16 + iDNA 1.5/iDNA/ru.lproj/MainMenu.xib | 3132 +++++++++++ iDNA 1.5/mygoaldna.txt | 1 + 30 files changed, 14412 insertions(+) create mode 100644 iDNA 1.5/.DS_Store create mode 100644 iDNA 1.5/iDNA.xcodeproj/project.pbxproj create mode 100644 iDNA 1.5/iDNA.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 iDNA 1.5/iDNA.xcodeproj/project.xcworkspace/xcuserdata/hadush.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 iDNA 1.5/iDNA.xcodeproj/project.xcworkspace/xcuserdata/hadush.xcuserdatad/WorkspaceSettings.xcsettings create mode 100644 iDNA 1.5/iDNA.xcodeproj/xcuserdata/hadush.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist create mode 100644 iDNA 1.5/iDNA.xcodeproj/xcuserdata/hadush.xcuserdatad/xcschemes/iDNA.xcscheme create mode 100644 iDNA 1.5/iDNA.xcodeproj/xcuserdata/hadush.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 iDNA 1.5/iDNA/.DS_Store create mode 100644 iDNA 1.5/iDNA/HVSCellDna.h create mode 100644 iDNA 1.5/iDNA/HVSCellDna.m create mode 100644 iDNA 1.5/iDNA/HVSDocument.h create mode 100644 iDNA 1.5/iDNA/HVSDocument.m create mode 100644 iDNA 1.5/iDNA/HVSPopulationOfDna.h create mode 100644 iDNA 1.5/iDNA/HVSPopulationOfDna.m create mode 100644 iDNA 1.5/iDNA/en.lproj/Credits.rtf create mode 100644 iDNA 1.5/iDNA/en.lproj/HVSDocument.xib create mode 100644 iDNA 1.5/iDNA/en.lproj/InfoPlist.strings create mode 100644 iDNA 1.5/iDNA/en.lproj/Localizable.strings create mode 100644 iDNA 1.5/iDNA/en.lproj/MainMenu.xib create mode 100644 iDNA 1.5/iDNA/iDNA-Info.plist create mode 100644 iDNA 1.5/iDNA/iDNA-Prefix.pch create mode 100644 iDNA 1.5/iDNA/main.m create mode 100644 iDNA 1.5/iDNA/ru.lproj/Credits.rtf create mode 100644 iDNA 1.5/iDNA/ru.lproj/HVSDocument.xib create mode 100644 iDNA 1.5/iDNA/ru.lproj/InfoPlist.strings create mode 100644 iDNA 1.5/iDNA/ru.lproj/Localizable.strings create mode 100644 iDNA 1.5/iDNA/ru.lproj/MainMenu.xib create mode 100644 iDNA 1.5/mygoaldna.txt diff --git a/.DS_Store b/.DS_Store index ce44ddc4047457e55f48881052d6c3a167769ea2..0b80ea7667a856b5921d81814ac8861e99d62121 100644 GIT binary patch delta 364 zcmZoMXfc=|#>B)qu~2NHo+2aL#DLw4H!w0XvQ6e;460{fU|{GviX9R9;*FRlh!|ASbi9#K7PhBNH zm>rUzp95saKvjolrj%sF3rJK~o0^;IC>R@9)aocyo0}WxD3};q)YftWfxrO{Q6)Va zkC4Qg+PeA%pu2&9kr6^O@Iq-#D9z9WWMBk9S#VKaPJUiGP>ykP8eB`mu~2NHo+2aj#DLw5%#(STf;j$z0RzM4R^}#_%@>&EnKrX?@N)pw bZa&EToq009h$ROD5HK<@Fl`PH*}@C}sz(+u diff --git a/iDNA 1.5/.DS_Store b/iDNA 1.5/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..2edc92118fa9aac92e9550e32a5d819a6043469b GIT binary patch literal 6148 zcmeHKL2uJA6n^dsbihzANIOQHI8;@qF?9zHp$dpy5F!&hFc?WwwLxhdwJ9Acg@|9m zKj1GQapjCS@(1__NacIBH(ClqTu_Dlr04I&{$6ZK#7iBxyjMy<~}PE35)mfmKt0zuk4JlSe)s!B4+m*$xvKqLsIXJMil> zWr(m

hUwbZak}=ZOc*9_Ee4CsA4}pF4k{0=s;85T}tG zx8x{|hL8N79Q$$934_6773V=d8n%LgYPlceJ+!EJU&;jWpb3gKyZgb*>8sa;8Yl^DV9GWOp1>Ofr_+7z57I=Y zUDPrE%83jR@R-`z`XcI3h7C~Cv!A5-4F0@?XXYl|Ex#@M8FFB6AEG#u-=4=z~)6E%%b3IYb&6D zS@M-jD=-#21gn5mV6_zB{lS4Vx&{l4YU@Cut^mL?s+A$;9|q2G47vsjjc9=hoeI>c z!dx+gPDj0Cc&@=hqfRHGdd7Q9&%)eLgz6pjj-r!rHQLfDU=>(YU`;<(`TW0)Z}>O& z|HUNxWEHRq{8tKyvgdm(Ov#+BOOxZX)`35TvoWvGs8Udv<5&fJ6mP + + + + diff --git a/iDNA 1.5/iDNA.xcodeproj/project.xcworkspace/xcuserdata/hadush.xcuserdatad/UserInterfaceState.xcuserstate b/iDNA 1.5/iDNA.xcodeproj/project.xcworkspace/xcuserdata/hadush.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..e531757e6549d3f9b6b8e86fa9d82b2e8d0dc5a5 GIT binary patch literal 33471 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 + + + + HasAskedToTakeAutomaticSnapshotBeforeSignificantChanges + + SnapshotAutomaticallyBeforeSignificantChanges + + + diff --git a/iDNA 1.5/iDNA.xcodeproj/xcuserdata/hadush.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist b/iDNA 1.5/iDNA.xcodeproj/xcuserdata/hadush.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist new file mode 100644 index 0000000..adfcd62 --- /dev/null +++ b/iDNA 1.5/iDNA.xcodeproj/xcuserdata/hadush.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist @@ -0,0 +1,59 @@ + + + + + + + + + + + + + diff --git a/iDNA 1.5/iDNA.xcodeproj/xcuserdata/hadush.xcuserdatad/xcschemes/iDNA.xcscheme b/iDNA 1.5/iDNA.xcodeproj/xcuserdata/hadush.xcuserdatad/xcschemes/iDNA.xcscheme new file mode 100644 index 0000000..384e7a4 --- /dev/null +++ b/iDNA 1.5/iDNA.xcodeproj/xcuserdata/hadush.xcuserdatad/xcschemes/iDNA.xcscheme @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iDNA 1.5/iDNA.xcodeproj/xcuserdata/hadush.xcuserdatad/xcschemes/xcschememanagement.plist b/iDNA 1.5/iDNA.xcodeproj/xcuserdata/hadush.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..d767edb --- /dev/null +++ b/iDNA 1.5/iDNA.xcodeproj/xcuserdata/hadush.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,22 @@ + + + + + SchemeUserState + + iDNA.xcscheme + + orderHint + 0 + + + SuppressBuildableAutocreation + + 2EEBA3FF16875CA5004EC063 + + primary + + + + + diff --git a/iDNA 1.5/iDNA/.DS_Store b/iDNA 1.5/iDNA/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..c59a061950411118a86799de70a3cbd15c690da2 GIT binary patch literal 6148 zcmeHK%TB{E5FA5=3KY=;2aY*%p%Q-(Nlq+d$KR(wl?XzUn0q)709VJEJ5 zYlAAF3j8$%}91JlfE5?jpdxHB;T=0J> z`8RNiOOAd-Ud&%a_6_-WMV`6%B5zXSy_R@eK3>GR4KT;V&Nr<_w3$8UGF#3p#f0RT zXYTlzUB;X-X3PvzjCnW3IYyu6{GD-1^D&}9ew=N_j&O!U?4!duj5w1PXBM;l5ou9D z(ZSSnI^@}1S<%TKkbn-)LIo#1&Ru+y4$Ag|HsSE|3#AC zsRF9Nzf!=|qF&TyN`7yxBqw`qz;ewZCVrViOJU`=V|yW6@h*!s_62f53_WHJ*+SDl N0#*jCRDoYr;2qn{y$t{W literal 0 HcmV?d00001 diff --git a/iDNA 1.5/iDNA/HVSCellDna.h b/iDNA 1.5/iDNA/HVSCellDna.h new file mode 100644 index 0000000..f45117d --- /dev/null +++ b/iDNA 1.5/iDNA/HVSCellDna.h @@ -0,0 +1,29 @@ +// +// HVSCellDna.h +// iDNA +// +// Created by VladIslav Khazov on 23.12.12. +// Copyright (c) 2012 VladIslav Khazov. All rights reserved. +// + +#import + +//размерность ДНК (Значение по умолчанию) +#define sizeDNA 100 // НЕ задавать меньше 1 ! + +@interface HVSCellDna : NSObject + +// Основной массив, создаем свойство с методами +@property NSMutableArray *DNA; +//Данное свойство будет хранить размер данной ДНК. (Можно было брать его из популяции, но мне кажется так будет доп. проверка передаваемых значений) +@property int lengthDna; + +//Определяем функцию сравнения, входной параметр объект класса HVSСellDna +-(int) hammingDistance: (HVSCellDna *) otherCell; +//Мутация входящий параметр - % +-(void) mutate:(int) i; +//метод init +-(id)init; +//Свой метод init с указанной размерностью ДНК. +-(id)initWithLengthDna:(int) length; +@end diff --git a/iDNA 1.5/iDNA/HVSCellDna.m b/iDNA 1.5/iDNA/HVSCellDna.m new file mode 100644 index 0000000..bc2746a --- /dev/null +++ b/iDNA 1.5/iDNA/HVSCellDna.m @@ -0,0 +1,110 @@ +// +// HVSCellDna.m +// iDNA +// +// Created by VladIslav Khazov on 23.12.12. +// Copyright (c) 2012 VladIslav Khazov. All rights reserved. +// + +#import "HVSCellDna.h" + +@implementation HVSCellDna + +//Изменяем стандартный метод init +- (id) init { + if (sizeDNA<1) { + NSAlert *myAlert = [NSAlert alertWithMessageText:NSLocalizedString(@"WARNING_DNA","ДНК не может быть меньше 1") defaultButton:NSLocalizedString(@"EXIT", "") alternateButton:nil otherButton:nil informativeTextWithFormat:@" "]; + [myAlert runModal]; + exit(0); + } + //вызов родительского метода + self = [super init]; + if (self) { + //Создаем временный массив + NSArray *arrayCode = [NSArray arrayWithObjects:@"A", @"T", @"G", @"C", nil]; + //Определяем размерность нашего массива + _DNA = [[NSMutableArray alloc] initWithCapacity:sizeDNA]; + //Заполняем массив + for (int i=0; i<=sizeDNA-1; i++) { + //Добавляем объект в массив DNA, используя случайное число от 0 до 3, как индекс для массива arrayCode + [_DNA addObject:[arrayCode objectAtIndex:arc4random_uniform(4)]]; + } + } + // Устанавливаем размерность данного ДНК. + [self setLengthDna:(int)sizeDNA]; + return self; +} + +-(id)initWithLengthDna:(int)length { + if (length<1 || length>100) { + NSAlert *myAlert = [NSAlert alertWithMessageText:NSLocalizedString(@"WARNING_DNA","ДНК не может быть меньше 1 и больше 100.") defaultButton:NSLocalizedString(@"EXIT", "") alternateButton:nil otherButton:nil informativeTextWithFormat:@" "]; + [myAlert runModal]; + exit(0); + } + //вызов родительского метода + self = [super init]; + if (self) { + //Создаем временный массив + NSArray *arrayCode = [NSArray arrayWithObjects:@"A", @"T", @"G", @"C", nil]; + //Определяем размерность нашего массива + _DNA = [[NSMutableArray alloc] initWithCapacity:length]; + //Заполняем массив + for (int i=0; i<=length-1; i++) { + //Добавляем объект в массив DNA, используя случайное число от 0 до 3, как индекс для массива arrayCode + [_DNA addObject:[arrayCode objectAtIndex:arc4random_uniform(4)]]; + } + } + // Устанавливаем размерность данного ДНК. + [self setLengthDna:(int)length]; + return self; +} + +-(int) hammingDistance: (HVSCellDna *) otherCell{ + //Счетчик совпадений + int count = 0; + //Проверка размерности + if (_lengthDna != [otherCell lengthDna]) { + NSAlert *myAlert = [NSAlert alertWithMessageText:NSLocalizedString(@"WARNING_DNA_SIZE", "ДНК имеют разную размерность!") defaultButton:NSLocalizedString(@"OK", "") alternateButton:nil otherButton:nil informativeTextWithFormat:@" "]; + [myAlert runModal]; + return 0; + } + // [otherCell DNA] возвращает свойство второго HVSCellDna, Обращаемся к нему как к NSMutableArray + for(int i=0;i<=_lengthDna-1;i++){ + //Проверяем на совпадение + if ([[otherCell DNA] objectAtIndex:i]!=[_DNA objectAtIndex:i]) { + count++; + } + } + return count; +} + +-(void) mutate:(int) i{ + if (i<1 || i>100) { + NSAlert *myAlert = [NSAlert alertWithMessageText:NSLocalizedString(@"WARNING_MUTATE","Указан не верный параметр 'Процента мутации'. Обе ДНК остались без изменений") defaultButton:NSLocalizedString(@"OK", "") alternateButton:nil otherButton:nil informativeTextWithFormat:@" "]; + [myAlert runModal]; + return; + } + // Количество элементов которые необходимо изменить в ДНК + int countMutator = _lengthDna*i/100; + //Создадим массив для хранения еще не мутировавших + NSMutableArray *arrayCheck = [[NSMutableArray alloc] initWithCapacity:_lengthDna]; + for (int k=0; k<_lengthDna; k++) { + [arrayCheck addObject:[NSNumber numberWithInt:k]]; + } + //Создаем временный массив видов ДНК + NSArray *arrayCode = [NSArray arrayWithObjects:@"A", @"T", @"G", @"C", nil]; + // Переменная для случайного номера ДНК + int dnaIndex = 0; + + //Цикл по нужному количество изменяемых элементов + for (int j=1; j<=countMutator; j++) { + //Генерим случайное число от 0 до количества еще не мутировавших элементов + dnaIndex = arc4random_uniform(_lengthDna-j+1); + //Меняем + [[self DNA] replaceObjectAtIndex:[[arrayCheck objectAtIndex:dnaIndex] intValue] withObject:[arrayCode objectAtIndex:arc4random_uniform(4)]]; + // Удаляем мутировавший элемент из архива + [arrayCheck removeObjectAtIndex:dnaIndex]; + } +} + +@end diff --git a/iDNA 1.5/iDNA/HVSDocument.h b/iDNA 1.5/iDNA/HVSDocument.h new file mode 100644 index 0000000..807b5e5 --- /dev/null +++ b/iDNA 1.5/iDNA/HVSDocument.h @@ -0,0 +1,45 @@ +// +// HVSDocument.h +// iDNA +// +// Created by VladIslav Khazov on 23.12.12. +// Copyright (c) 2012 VladIslav Khazov. All rights reserved. +// + +#import +#import "HVSPopulationOfDna.h" + +@interface HVSDocument : NSDocument { + //Определяем нашу популяцию + HVSPopulationOfDna *myPopulation; + //Флаг Паузы + BOOL flagPause; +} +//Свойста для работы с объектами на форме +//Текстовые поля +@property (weak) IBOutlet NSTextField *popTextSize; +@property (weak) IBOutlet NSTextField *popTextLength; +@property (weak) IBOutlet NSTextField *popTextRate; +@property (weak) IBOutlet NSTextField *popTextGoalDna; +//Слайдеры +@property (weak) IBOutlet NSSlider *popSliderSize; +@property (weak) IBOutlet NSSlider *popSliderLength; +@property (weak) IBOutlet NSSlider *popSliderRate; +//Лэйблы +@property (weak) IBOutlet NSTextField *popLabelGeneration; +@property (weak) IBOutlet NSTextField *popLabelMatch; +//Индикатор +@property (weak) IBOutlet NSLevelIndicator *popLevelMatch; +//Кнопки +@property (weak) IBOutlet NSButton *popButtonStart; +@property (weak) IBOutlet NSButton *popButtonPause; +@property (weak) IBOutlet NSButton *popButtonLoad; + + +//Действия +- (IBAction)buttonStart:(id)sender; +- (IBAction)buttonPause:(id)sender; +- (IBAction)buttonLoad:(id)sender; +//Фоновый поток +-(void)startBackgroundEvolution; +@end diff --git a/iDNA 1.5/iDNA/HVSDocument.m b/iDNA 1.5/iDNA/HVSDocument.m new file mode 100644 index 0000000..d697a76 --- /dev/null +++ b/iDNA 1.5/iDNA/HVSDocument.m @@ -0,0 +1,311 @@ +// +// HVSDocument.m +// iDNA +// +// Created by VladIslav Khazov on 23.12.12. +// Copyright (c) 2012 VladIslav Khazov. All rights reserved. +// + +#import "HVSDocument.h" +#import "HVSCellDna.h" +#import "HVSPopulationOfDna.h" + +@implementation HVSDocument + +- (id)init +{ + self = [super init]; + if (self) { + //Создаем популяцию с начальными параметрами. + myPopulation = [[HVSPopulationOfDna alloc]init]; + //Добавляем свойство lengthDNA в наблюдение нашему контроллеру. + [myPopulation addObserver:self forKeyPath:@"populationLengthDna" options:NSKeyValueObservingOptionOld context:@"changePopulationLengthDNA"]; + [myPopulation addObserver:self forKeyPath:@"populationSize" options:NSKeyValueObservingOptionOld context:@"changePopulationSize"]; + [myPopulation addObserver:self forKeyPath:@"populationRate" options:NSKeyValueObservingOptionOld context:@"changePopulationRate"]; + flagPause=NO; + } + return self; +} + +-(void)dealloc { + //Убираем свойства из наблюдения. + [myPopulation removeObserver:self forKeyPath:@"populationLengthDna"]; + [myPopulation removeObserver:self forKeyPath:@"populationSize"]; + [myPopulation removeObserver:self forKeyPath:@"populationRate"]; +} +//Доп метод +-(void) changeKeyPath:(NSString *) keyPath + ofObject:(id) obj + toValue:(id) value { + [obj setValue:value forKeyPath:keyPath]; +} +//Метод запускается когда изменяется переменная populationLengthDna объекта myPopulation, а также всех остальных наблюдаемых объектов +-(void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { + + NSUndoManager *myManager = [self undoManager]; + //Проверка, какая переменная была изменена. + if (context==@"changePopulationLengthDNA") { + //UNDO + id oldValue = [change objectForKey:NSKeyValueChangeOldKey]; + if (oldValue == [NSNull null]) { + oldValue = nil; + } + [[myManager prepareWithInvocationTarget:self] changeKeyPath:@"populationLengthDna" ofObject:myPopulation toValue:oldValue]; + [myManager setActionName:@"Change Length DNA"]; + + //Получаем текущие значение переменной + int length = (int)[myPopulation populationLengthDna]; + //Генерим нового Альфа самца + [myPopulation setGoalDNA:[[HVSCellDna alloc]initWithLengthDna:length]]; + // Выводим Goal DNA нашей поппуляции в текстовом поле. + //Берем GOAL DNA + NSMutableArray *myArrayDNA = [[myPopulation goalDNA] DNA]; + NSMutableString *result = [[NSMutableString alloc]init]; + //Цикл перевода массива в строку. + for (int i=0; i<=[myArrayDNA count]-1 ; i++) { + [result appendString:[myArrayDNA objectAtIndex:i]]; + } + [_popTextGoalDna setStringValue:result]; + } + if (context==@"changePopulationSize") { + id oldValue = [change objectForKey:NSKeyValueChangeOldKey]; + if (oldValue == [NSNull null]) { + oldValue = nil; + } + [[myManager prepareWithInvocationTarget:self] changeKeyPath:@"populationSize" ofObject:myPopulation toValue:oldValue]; + [myManager setActionName:@"Change Size"]; + } + if (context==@"changePopulationRate") { + id oldValue = [change objectForKey:NSKeyValueChangeOldKey]; + if (oldValue == [NSNull null]) { + oldValue = nil; + } + [[myManager prepareWithInvocationTarget:self] changeKeyPath:@"populationRate" ofObject:myPopulation toValue:oldValue]; + [myManager setActionName:@"Change Rate"]; + } +} + +//Действия +-(void)startBackgroundEvolution { + //Эволюция + //Выполняем пока не получим 100: совпадений или пока не нажмут на кнопку Пауза + while ([myPopulation flag]==NO && flagPause==NO) { + [myPopulation evolution]; + [_popLevelMatch setIntegerValue:myPopulation.maxHamming]; + [_popLabelMatch setIntegerValue:myPopulation.maxHamming]; + [_popLabelGeneration setIntegerValue:myPopulation.countEvolution]; + } + + //Меняем интерфейс если не Пауза + if (flagPause==NO) { + [_popTextSize setEnabled:YES]; + [_popTextLength setEnabled:YES]; + + [_popSliderSize setEnabled:YES]; + [_popSliderLength setEnabled:YES]; + + [_popButtonLoad setEnabled:YES]; + } + + //Разрешаем менять % мутации, даже на паузе. + [_popSliderRate setEnabled:YES]; + [_popTextRate setEnabled:YES]; + [_popButtonStart setEnabled:YES]; + [_popButtonPause setEnabled:NO]; +} + + +//Нажата кнопка Старт +- (IBAction)buttonStart:(id)sender { + //Меняем интерфейс + + [_popTextSize setEnabled:NO]; + [_popTextLength setEnabled:NO]; + [_popTextRate setEnabled:NO]; + + [_popSliderSize setEnabled:NO]; + [_popSliderLength setEnabled:NO]; + [_popSliderRate setEnabled:NO]; + + [_popButtonStart setEnabled:NO]; + [_popButtonLoad setEnabled:NO]; + [_popButtonPause setEnabled:YES]; + + //Если это не после паузы + if (flagPause==NO) { + //Создаем случайную популяцию ДНК с заданными параметрами. + [myPopulation setPopulation]; + // Устанавливаем флаг совпадений в NO + [myPopulation setFlag:NO]; + //Совпадение с Альфа + [myPopulation setMaxHamming:0]; + //Количество эволюций + [myPopulation setCountEvolution:0]; + } + //Эволюция - запускаем фоном + flagPause=NO; + [self performSelectorInBackground:@selector(startBackgroundEvolution) withObject:nil]; +} +- (IBAction)buttonPause:(id)sender { + flagPause=YES; + +} +- (IBAction)buttonLoad:(id)sender { + //Загрузка файла текстового поля + + //Создаем File Open Dialog class + NSOpenPanel* openDlg = [NSOpenPanel openPanel]; + + //Включаем выбор файлов + [openDlg setCanChooseFiles:YES]; + //отключаем выбор папок + [openDlg setCanChooseDirectories:NO]; +// [openDlg setRequireFileType:@"txt"]; + //разрешаем только расширение txt + [openDlg setAllowedFileTypes:[[NSArray alloc]initWithObjects:@"txt", nil]]; + //Остальные разрешенеия запрещаем выбирать + [openDlg setAllowsOtherFileTypes:NO]; + + // Запускаем и ждем Окей + if ( [openDlg runModal] == NSOKButton ) + { + // Получаем список выбранных файлов + NSArray* files = [openDlg URLs] ; + + BOOL symbol=NO; + // Проходим по ним + for( int i = 0; i < [files count]; i++ ) + { + //Получаем Path первого выбранного + NSString* fileName = [[files objectAtIndex:i] path]; + //Считываем все подряд + NSString * fileContents = [NSString stringWithContentsOfFile:fileName encoding:NSUTF8StringEncoding error:nil]; + // Записываем его есои он устраивает нашим параметрам + if ([fileContents length]==[myPopulation populationLengthDna] && [fileContents length]<=100) { + //Проверка символов в файле + for (int t=0; t<=[fileContents length]-1; t++) { + switch ([fileContents characterAtIndex:t]) { + case (unichar)'A': + break; + case (unichar)'T': + break; + case (unichar)'G': + break; + case (unichar)'C': + break; + default: + symbol=YES; + break; + } + } + + if (symbol==NO) { + //Устанавливаем текстовое поле + [_popTextGoalDna setStringValue:fileContents]; + //создаем нового альфа самца размерностью файла + [[myPopulation goalDNA] setDNA:[[NSMutableArray alloc]initWithContentsOfFile:fileContents]]; + } else { + NSAlert *myAlert = [NSAlert alertWithMessageText:NSLocalizedString(@"WARNING_FILE_SYM","Похоже файл содержит символ не относящийся к ДНК или в нем есть управляющие символы (Пр. перевод каретки)") + defaultButton:NSLocalizedString(@"OK", "") alternateButton:nil otherButton:nil informativeTextWithFormat:@" "]; + [myAlert runModal]; + } + + } else { + NSString *str=[[NSMutableString alloc]initWithFormat:NSLocalizedString(@"FILE_LENGTH","Данный файл имеет длину %ld"),[fileContents length]]; + NSAlert *myAlert = [NSAlert alertWithMessageText:NSLocalizedString(@"WARNING_FILE_LENGTH","Файл содержит ДНК другой размерностью или его размер больше 100 единиц!!! ") + defaultButton:NSLocalizedString(@"OK", "") alternateButton:nil otherButton:nil informativeTextWithFormat:str]; + [myAlert runModal]; + } + + } + } + +} + + +- (NSString *)windowNibName +{ + // Override returning the nib file name of the document + // If you need to use a subclass of NSWindowController or if your document supports multiple NSWindowControllers, you should remove this method and override -makeWindowControllers instead. + return @"HVSDocument"; +} + +- (void)windowControllerDidLoadNib:(NSWindowController *)aController +{ + [super windowControllerDidLoadNib:aController]; + // Add any code here that needs to be executed once the windowController has loaded the document's window. + // Выводим Goal DNA нашей поппуляции. + //Берем GOAL DNA + NSMutableArray *myArrayDNA = [[myPopulation goalDNA] DNA]; + NSMutableString *result = [[NSMutableString alloc]init]; + //Цикл перевода массива в строку. + for (int i=0; i<=[myArrayDNA count]-1 ; i++) { + [result appendString:[myArrayDNA objectAtIndex:i]]; + } + [_popTextGoalDna setStringValue:result]; +} + ++ (BOOL)autosavesInPlace +{ + return YES; +} + +//Сохранение документа +- (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError +{ + NSMutableData *saveData = [[NSMutableData alloc]init]; + NSKeyedArchiver *myKeyArchiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:saveData]; + [myKeyArchiver encodeInteger:[myPopulation populationSize] forKey:@"populationSize"]; + [myKeyArchiver encodeInteger:[myPopulation populationLengthDna] forKey:@"populationLengthDna"]; + [myKeyArchiver encodeInteger:[myPopulation populationRate] forKey:@"populationRate"]; + [myKeyArchiver encodeObject:[myPopulation populationDNA] forKey:@"populationDNA"]; + [myKeyArchiver encodeInt:[[myPopulation goalDNA] lengthDna] forKey:@"lengthDna"]; + [myKeyArchiver encodeObject:[[myPopulation goalDNA] DNA] forKey:@"DNA"]; + [myKeyArchiver encodeBool:[myPopulation flag] forKey:@"flag"]; + [myKeyArchiver encodeInteger:[myPopulation maxHamming] forKey:@"maxHamming"]; + [myKeyArchiver encodeInteger:[myPopulation countEvolution] forKey:@"countEvolution"]; + + [myKeyArchiver finishEncoding]; + + +// NSData *saveData = [NSKeyedArchiver archivedDataWithRootObject:[self popButtonLoad]]; + return saveData; +} + +- (BOOL)readFromData:(NSData *)data ofType:(NSString *)typeName error:(NSError **)outError +{ + + NSKeyedUnarchiver *myKeyArchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data]; + HVSPopulationOfDna *newMyPopulation = nil; + @try { + newMyPopulation = [[HVSPopulationOfDna alloc] init]; + [newMyPopulation setPopulationSize:[myKeyArchiver decodeIntegerForKey:@"populationSize"]]; + [newMyPopulation setPopulationLengthDna:[myKeyArchiver decodeIntegerForKey:@"populationLengthDna"]]; + [newMyPopulation setPopulationRate:[myKeyArchiver decodeIntegerForKey:@"populationRate"]]; + [newMyPopulation setPopulationDNA:[myKeyArchiver decodeObjectForKey:@"populationDNA"]]; + //Подготовка + [newMyPopulation setGoalDNA:[[HVSCellDna alloc] initWithLengthDna:(int)[myKeyArchiver decodeIntegerForKey:@"lengthDna"]]]; +// [myKeyArchiver decodeIntForKey:@"lengthDna"]; +// [myKeyArchiver decodeObjectForKey:@"DNA"]; + [[newMyPopulation goalDNA] setDNA:[myKeyArchiver decodeObjectForKey:@"DNA"]]; + + [newMyPopulation setFlag:[myKeyArchiver decodeBoolForKey:@"flag"]]; + [newMyPopulation setMaxHamming:[myKeyArchiver decodeIntegerForKey:@"maxHamming"]]; + [newMyPopulation setCountEvolution:[myKeyArchiver decodeIntegerForKey:@"countEvolution"]]; + } + @catch (NSException *exception) { + if (outError) { + NSDictionary *d = [NSDictionary dictionaryWithObject:@"The file is invalid!" forKey:NSLocalizedFailureReasonErrorKey]; + *outError = [NSError errorWithDomain:NSOSStatusErrorDomain code:unimpErr userInfo:d]; + return NO; + } + } + myPopulation = newMyPopulation; + //Не понятно, потому что в инит стоит addObsrving, но он при почему то не работает при вызове... + [myPopulation addObserver:self forKeyPath:@"populationLengthDna" options:NSKeyValueObservingOptionOld context:@"changePopulationLengthDNA"]; + [myPopulation addObserver:self forKeyPath:@"populationSize" options:NSKeyValueObservingOptionOld context:@"changePopulationSize"]; + [myPopulation addObserver:self forKeyPath:@"populationRate" options:NSKeyValueObservingOptionOld context:@"changePopulationRate"]; + return YES; +} + +@end diff --git a/iDNA 1.5/iDNA/HVSPopulationOfDna.h b/iDNA 1.5/iDNA/HVSPopulationOfDna.h new file mode 100644 index 0000000..ad30591 --- /dev/null +++ b/iDNA 1.5/iDNA/HVSPopulationOfDna.h @@ -0,0 +1,36 @@ +// +// HVSPopulationOfDna.h +// iDNA +// +// Created by VladIslav Khazov on 23.12.12. +// Copyright (c) 2012 VladIslav Khazov. All rights reserved. +// Популяция ДНК + +#import +#import "HVSCellDna.h" + +@interface HVSPopulationOfDna : NSObject + +//Свойства популяции ДНК, определяющие размер популяции, размер 1-ой ДНК и процент мутации. +@property NSInteger populationSize; +@property NSInteger populationLengthDna; +@property NSInteger populationRate; +// Массив который хранит объекты типа ДНК (HVSCellDna) +@property NSMutableArray *populationDNA; +// Goal DNA +@property HVSCellDna *goalDNA; +//Флаг указывающий на совпадение одного из ДНК с Альфа самцом +@property BOOL flag; +//Максимальное совпадение в % +@property NSInteger maxHamming; +//Количество проходов +@property NSInteger countEvolution; + +-(id) init; + +//метод заполнения популяции +-(void)setPopulation; +//метод эволюции +- (void)evolution; + +@end diff --git a/iDNA 1.5/iDNA/HVSPopulationOfDna.m b/iDNA 1.5/iDNA/HVSPopulationOfDna.m new file mode 100644 index 0000000..7ba9e4b --- /dev/null +++ b/iDNA 1.5/iDNA/HVSPopulationOfDna.m @@ -0,0 +1,139 @@ +// +// HVSPopulationOfDna.m +// iDNA +// +// Created by VladIslav Khazov on 23.12.12. +// Copyright (c) 2012 VladIslav Khazov. All rights reserved. +// + +#import "HVSPopulationOfDna.h" + +@implementation HVSPopulationOfDna + +-(id)init { + self = [super init]; + if (self) { + [self setPopulationLengthDna:30]; + [self setPopulationRate:5]; + [self setPopulationSize:1000]; + [self setGoalDNA:[[HVSCellDna alloc]initWithLengthDna:30]]; + [self setFlag:NO]; + [self setMaxHamming:0]; + [self setCountEvolution:0]; + } + return self; +} + +//метод заполнения популяции c заданными параметрами +-(void)setPopulation { +// [self setPopulationDNA:[[NSMutableArray alloc]initWithCapacity:[self populationSize]]]; + _populationDNA = [[NSMutableArray alloc] initWithCapacity:_populationSize]; + //Заполняем популяцию + for (int i=0; i<=_populationSize-1; i++) { + //Длина каждой днк + int length = (int)_populationLengthDna; + //Добавляем объект в массив. +// [[self populationDNA] addObject:[[HVSCellDna alloc]initWithLengthDna:length]]; + [_populationDNA addObject:[[HVSCellDna alloc] initWithLengthDna:length]]; + } +} + + +//Эволюция 1 проход +-(void)evolution { + //Сортировка + //Создаем временный массив. + NSMutableArray *sortPopulationDNA = [[NSMutableArray alloc] initWithCapacity:_populationSize]; + //Смысл сортировки: Ищем и добавляем в массив сначала все элементы которые совпадают полностью, затем на 1 меньше и так далее. Пока не добавим все элементы в сортированный массив. + for (int lenDNA=(int)_populationLengthDna; lenDNA>=1; lenDNA--) { + for (int i=0; i<=_populationSize-1 ; i++) { + int tempHamming =[[_populationDNA objectAtIndex:i] hammingDistance:_goalDNA]; + if (tempHamming==lenDNA) { + [sortPopulationDNA addObject:[_populationDNA objectAtIndex:i]]; + //Проверка на полное совпадение + if (tempHamming==(int)_populationLengthDna) { + _flag=YES; + } + //Максимальное совпадение + if (tempHamming*100/_populationLengthDna>_maxHamming) { + _maxHamming = tempHamming*100/_populationLengthDna; + } + } + } + } + //Присваиваем отсортированный массив нашему. + _populationDNA=sortPopulationDNA; + //Временная ДНК для скрещивания. + NSMutableArray *tempDNA = [[NSMutableArray alloc] initWithCapacity:_populationLengthDna]; + // временные индексы топ ДНК + int tempDNA1,tempDNA2; + //Если нет совпадений делаем эволюцию + if (_flag==NO) { + //Увеличиваем счетчик + _countEvolution++; + //Цикл по второй половине популяция, для их замены. + for (int i=(int)_populationSize/2; i<=_populationSize-1; i++) { + //Случайный выбор метода. + int random = arc4random_uniform(3); + switch (random) { + case 0: + tempDNA1 = arc4random_uniform((int)_populationSize/2); + tempDNA2 = arc4random_uniform((int)_populationSize/2); + //создаем новый ДНК 50/50 + for (int j=0; j<=(int)_populationLengthDna-1; j++) { + if (j<=(int)_populationLengthDna/2) { + //Добавляем значение случайной ДНК 1, по индексу j. + [tempDNA addObject:[[[_populationDNA objectAtIndex:tempDNA1] DNA] objectAtIndex:j]]; + } else { + //Добавляем значение случайной ДНК 2, по индексу j. + [tempDNA addObject:[[[_populationDNA objectAtIndex:tempDNA2] DNA] objectAtIndex:j]]; + } + } + //Записываем результат + [[_populationDNA objectAtIndex:i] setDNA:tempDNA]; + break; + case 1: + tempDNA1 = arc4random_uniform((int)_populationSize/2); + tempDNA2 = arc4random_uniform((int)_populationSize/2); + //создаем новый ДНК через 1 1/1/1/1/1 + for (int j=0; j<=(int)_populationLengthDna-1; j++) { + if (j%2==0) { + //Добавляем значение случайной ДНК 1, по индексу j. + [tempDNA addObject:[[[_populationDNA objectAtIndex:tempDNA1] DNA] objectAtIndex:j]]; + } else { + //Добавляем значение случайной ДНК 2, по индексу j. + [tempDNA addObject:[[[_populationDNA objectAtIndex:tempDNA2] DNA] objectAtIndex:j]]; + } + } + //Записываем результат + [[_populationDNA objectAtIndex:i] setDNA:tempDNA]; + break; + case 2: + tempDNA1 = arc4random_uniform((int)_populationSize/2); + tempDNA2 = arc4random_uniform((int)_populationSize/2); + //создаем новый ДНК 20/60/20 + for (int j=0; j<=(int)_populationLengthDna-1; j++) { + if (j*100/((int)_populationLengthDna-1)<=20 || j*100/((int)_populationLengthDna-1)>60) { + //Добавляем значение случайной ДНК 1, по индексу j. + [tempDNA addObject:[[[_populationDNA objectAtIndex:tempDNA1] DNA] objectAtIndex:j]]; + } else { + //Добавляем значение случайной ДНК 2, по индексу j. + [tempDNA addObject:[[[_populationDNA objectAtIndex:tempDNA2] DNA] objectAtIndex:j]]; + } + } + //Записываем результат + [[_populationDNA objectAtIndex:i] setDNA:tempDNA]; + break; + default: + break; + } + + } + //Мутация популяции + for (HVSCellDna *dna in _populationDNA) { + [dna mutate:(int)_populationRate]; + } + } +} + +@end diff --git a/iDNA 1.5/iDNA/en.lproj/Credits.rtf b/iDNA 1.5/iDNA/en.lproj/Credits.rtf new file mode 100644 index 0000000..88aa6a7 --- /dev/null +++ b/iDNA 1.5/iDNA/en.lproj/Credits.rtf @@ -0,0 +1,31 @@ +{\rtf1\ansi\ansicpg1251\cocoartf1187\cocoasubrtf340 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\paperw11900\paperh16840\vieww9600\viewh8400\viewkind0 +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720 + +\f0\b\fs24 \cf0 Engineering: +\b0 \ + Vladislav Khazov\ +\ + +\b Human Interface Design: +\b0 \ + Hexlet.ru\ +\ + +\b Testing: +\b0 \ + Vladislav Khazov\ +\ + +\b Documentation: +\b0 \ + Whoever\ +\ + +\b With special thanks to: +\b0 \ + Mom\ + Hexlet.ru\ +} \ No newline at end of file diff --git a/iDNA 1.5/iDNA/en.lproj/HVSDocument.xib b/iDNA 1.5/iDNA/en.lproj/HVSDocument.xib new file mode 100644 index 0000000..ad19c9e --- /dev/null +++ b/iDNA 1.5/iDNA/en.lproj/HVSDocument.xib @@ -0,0 +1,2674 @@ + + + + 1080 + 12C60 + 3084 + 1187.34 + 625.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 3084 + + + IBNSLayoutConstraint + NSButton + NSButtonCell + NSCustomObject + NSLevelIndicator + NSLevelIndicatorCell + NSNumberFormatter + NSSlider + NSSliderCell + NSTextField + NSTextFieldCell + NSUserDefaultsController + NSView + NSWindowTemplate + + + com.apple.InterfaceBuilder.CocoaPlugin + + + PluginDependencyRecalculationVersion + + + + + HVSDocument + + + FirstResponder + + + 15 + 2 + {{133, 235}, {507, 413}} + 1886912512 + iDNA 1.5 + NSWindow + View + + {94, 86} + + + 256 + + + + 268 + {{17, 376}, {106, 17}} + + + _NS:1535 + YES + + 68157504 + 272630784 + Population size + + LucidaGrande + 13 + 1044 + + _NS:1535 + + + 6 + System + controlColor + + 3 + MC42NjY2NjY2NjY3AA + + + + 6 + System + controlTextColor + + 3 + MAA + + + + NO + + + + 268 + {{17, 351}, {106, 17}} + + + _NS:1535 + YES + + 68157504 + 272630784 + DNA length + + _NS:1535 + + + + + NO + + + + 268 + {{17, 326}, {106, 17}} + + + _NS:1535 + YES + + 68157504 + 272630784 + Mutation rate % + + _NS:1535 + + + + + NO + + + + 268 + {{197, 374}, {292, 21}} + + + _NS:9 + YES + + -2080374784 + 0 + + _NS:9 + + 10000 + 1 + 5000 + 0.0 + 0 + 1 + NO + NO + + NO + + + + 268 + {{197, 349}, {292, 21}} + + + _NS:9 + YES + + -2080374784 + 0 + + _NS:9 + + 100 + 1 + 50 + 0.0 + 0 + 1 + NO + NO + + NO + + + + 268 + {{197, 324}, {292, 21}} + + + _NS:9 + YES + + -2080374784 + 0 + + _NS:9 + + 100 + 1 + 50 + 0.0 + 0 + 1 + NO + NO + + NO + + + + 268 + {{128, 371}, {63, 22}} + + + _NS:9 + YES + + -1804599231 + -1874852864 + + + + + + + + + + + + -∞ + + + +∞ + + #,##0.### + #,##0.### + + + + + + + + NaN + + + + + + 3 + YES + YES + YES + + . + , + YES + NO + YES + + _NS:9 + + YES + + 6 + System + textBackgroundColor + + 3 + MQA + + + + 6 + System + textColor + + + + NO + + + + 268 + {{128, 346}, {63, 22}} + + + _NS:9 + YES + + -1804599231 + -1874852864 + + + + + + + + + + -∞ + + + +∞ + + #,##0.### + #,##0.### + + + + + + + + NaN + + + + + + 3 + YES + YES + YES + + . + , + YES + NO + YES + + _NS:9 + + YES + + + + NO + + + + 268 + {{128, 321}, {63, 22}} + + + _NS:9 + YES + + -1804599231 + -1874852864 + + + + + + + + + + -∞ + + + +∞ + + #,##0.### + #,##0.### + + + + + + + + NaN + + + + + + 3 + YES + YES + YES + + . + , + YES + NO + YES + + _NS:9 + + YES + + + + NO + + + + 268 + {{20, 290}, {295, 19}} + + + _NS:1535 + YES + + 68157504 + 71304192 + Generation: + + LucidaGrande + 16 + 16 + + _NS:1535 + + + + + NO + + + + 268 + {{23, 265}, {315, 17}} + + + _NS:1535 + YES + + 68157504 + 71304192 + Best individual match % - + + _NS:1535 + + + + + NO + + + + 268 + {{20, 241}, {467, 16}} + + + _NS:9 + YES + + 0 + 0 + _NS:9 + + 100 + 100 + 2 + 2 + 1 + + NO + + + + 268 + {{20, 49}, {467, 184}} + + + _NS:9 + YES + + -1805647871 + 205520896 + + + LucidaGrande + 30 + 16 + + _NS:9 + + YES + + + + NO + + + + 268 + {{14, 13}, {132, 32}} + + + _NS:9 + YES + + 67108864 + 134217728 + Start evolution + + _NS:9 + + -2038284288 + 129 + + + 200 + 25 + + NO + + + + 268 + {{146, 13}, {77, 32}} + + + _NS:9 + YES + + 603979776 + 134217728 + Pause + + _NS:9 + + -2038284288 + 129 + + + 200 + 25 + + NO + + + + 268 + {{359, 13}, {134, 32}} + + + _NS:9 + YES + + 67108864 + 134217728 + Load goal DNA + + _NS:9 + + -2038284288 + 129 + + + 200 + 25 + + NO + + + + 268 + {{343, 265}, {147, 17}} + + + _NS:1535 + YES + + 68157504 + -1874852864 + 0 + + + + + + + -∞ + + +∞ + + # + # + + + + + + + + NaN + + + + 0 + 0 + YES + NO + 1 + AAAAAAAAAAAAAAAAAAAAAA + + + + 3 + YES + YES + YES + + . + , + NO + NO + YES + + _NS:1535 + + + + + NO + + + + 268 + {{317, 292}, {173, 17}} + + + _NS:1535 + YES + + 68157504 + -1874852864 + 0 + + + + + + + -∞ + + +∞ + + # + # + + + + + + + + NaN + + + + + + 3 + YES + YES + YES + + . + , + NO + NO + YES + + _NS:1535 + + + + + NO + + + {507, 413} + + + + {{0, 0}, {1920, 1058}} + {94, 108} + {10000000000000, 10000000000000} + YES + + + NSApplication + + + YES + + + + + + + popTextLength + + + + 100163 + + + + popTextSize + + + + 100164 + + + + popTextRate + + + + 100165 + + + + popTextGoalDna + + + + 100194 + + + + popSliderSize + + + + 100195 + + + + popSliderLength + + + + 100196 + + + + popSliderRate + + + + 100197 + + + + popLevelMatch + + + + 100200 + + + + popButtonStart + + + + 100201 + + + + popButtonPause + + + + 100202 + + + + popButtonLoad + + + + 100203 + + + + buttonStart: + + + + 100204 + + + + buttonPause: + + + + 100205 + + + + buttonLoad: + + + + 100206 + + + + popLabelGeneration + + + + 100274 + + + + popLabelMatch + + + + 100277 + + + + window + + + + 100278 + + + + delegate + + + + 17 + + + + value: self.myPopulation.populationSize + + + + + + value: self.myPopulation.populationSize + value + self.myPopulation.populationSize + 2 + + + 100178 + + + + value: self.myPopulation.populationLengthDna + + + + + + value: self.myPopulation.populationLengthDna + value + self.myPopulation.populationLengthDna + 2 + + + 100181 + + + + value: self.myPopulation.populationRate + + + + + + value: self.myPopulation.populationRate + value + self.myPopulation.populationRate + 2 + + + 100184 + + + + value: self.myPopulation.populationSize + + + + + + value: self.myPopulation.populationSize + value + self.myPopulation.populationSize + 2 + + + 100187 + + + + value: self.myPopulation.populationLengthDna + + + + + + value: self.myPopulation.populationLengthDna + value + self.myPopulation.populationLengthDna + 2 + + + 100190 + + + + value: self.myPopulation.populationRate + + + + + + value: self.myPopulation.populationRate + value + self.myPopulation.populationRate + 2 + + + 100193 + + + + value: self.myPopulation.maxHamming + + + + + + value: self.myPopulation.maxHamming + value + self.myPopulation.maxHamming + 2 + + + 100271 + + + + value: self.myPopulation.maxHamming + + + + + + value: self.myPopulation.maxHamming + value + self.myPopulation.maxHamming + 2 + + + 100248 + + + + value: self.myPopulation.countEvolution + + + + + + value: self.myPopulation.countEvolution + value + self.myPopulation.countEvolution + 2 + + + 100268 + + + + value: self.myPopulation.maxHamming + + + + + + value: self.myPopulation.maxHamming + value + self.myPopulation.maxHamming + 2 + + + 100254 + + + + + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + 5 + + + + + + Window + + + 6 + + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 4 + 0 + + 4 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 6 + 1 + + 12 + + 1000 + + 6 + 24 + 3 + + + + 4 + 0 + + 4 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 3 + 0 + + 4 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 4 + 0 + + 4 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 11 + 0 + + 11 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 6 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 3 + 0 + + 3 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 5 + 0 + + 6 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 11 + 0 + + 11 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 5 + 0 + + 6 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 5 + 0 + + 5 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 11 + 0 + + 11 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 5 + 0 + + 6 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 5 + 0 + + 5 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 3 + 0 + + 3 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 3 + 0 + + 4 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 3 + 0 + + 4 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 5 + 0 + + 5 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 5 + 0 + + 6 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 3 + 0 + + 3 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 3 + 0 + + 3 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 5 + 0 + + 5 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 5 + 0 + + 6 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 5 + 0 + + 5 + 1 + + 26 + + 1000 + + 3 + 9 + 3 + + + + 3 + 0 + + 4 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 5 + 0 + + 6 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 3 + 0 + + 3 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 3 + 0 + + 4 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 3 + 0 + + 4 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 3 + 0 + + 3 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + + + + + + + + + + + + + + + + + + + + + -3 + + + Application + + + 100027 + + + + + + 7 + 0 + + 0 + 1 + + 100 + + 1000 + + 3 + 9 + 1 + + + + + + 100028 + + + + + 100031 + + + + + 100032 + + + + + 100033 + + + + + 100034 + + + + + + + + 100036 + + + + + 100039 + + + + + 100040 + + + + + 100042 + + + + + + + + 100043 + + + + + 100047 + + + + + 100049 + + + + + 100050 + + + + + + + + 100051 + + + + + 100052 + + + + + 100055 + + + + + 100056 + + + + + + + + 100057 + + + + + 100061 + + + + + 100063 + + + + + 100065 + + + + + + + + 100066 + + + + + 100070 + + + + + 100072 + + + + + 100079 + + + + + + 7 + 0 + + 0 + 1 + + 63 + + 1000 + + 3 + 9 + 1 + + + + + + 100080 + + + + + + + + 100085 + + + + + 100086 + + + + + 100091 + + + + + 100093 + + + + + 100094 + + + + + 100095 + + + + + 100096 + + + + + + + + 100098 + + + + + + + + 100101 + + + + + 100102 + + + + + 100103 + + + + + 100104 + + + + + 100105 + + + + + + + + 100106 + + + + + + + + 100110 + + + + + 100111 + + + + + 100112 + + + + + 100113 + + + + + 100114 + + + + + + 7 + 0 + + 0 + 1 + + 289 + + 1000 + + 3 + 9 + 1 + + + + + + 100115 + + + + + 100120 + + + + + + 7 + 0 + + 0 + 1 + + 309 + + 1000 + + 3 + 9 + 1 + + + + + + 100121 + + + + + 100123 + + + + + 100131 + + + + + + + + 100132 + + + + + 100133 + + + + + 100134 + + + + + 100136 + + + + + 100137 + + + + + + 8 + 0 + + 0 + 1 + + 184 + + 1000 + + 3 + 9 + 1 + + + + + + 100138 + + + + + 100139 + + + + + 100140 + + + + + 100142 + + + + + 100144 + + + + + + + + 100145 + + + + + 100146 + + + + + 100147 + + + + + 100148 + + + + + 100149 + + + + + 100150 + + + + + + + + 100151 + + + + + 100154 + + + + + 100155 + + + + + 100156 + + + + + + + + 100157 + + + + + 100160 + + + + + 100161 + + + + + 100166 + + + + + 100173 + + + + + 100174 + + + + + 100175 + + + + + 100208 + + + + + 100211 + + + + + 100212 + + + + + 100223 + + + + + + 7 + 0 + + 0 + 1 + + 141 + + 1000 + + 3 + 9 + 1 + + + + + + 100224 + + + + + + + + 100225 + + + + + 100245 + + + + + 100250 + + + + + 7 + 0 + + 0 + 1 + + 167 + + 1000 + + 3 + 9 + 1 + + + + 8 + 0 + + 0 + 1 + + 17 + + 1000 + + 3 + 9 + 1 + + + + + + + 100252 + + + + + + + + 100253 + + + + + 100261 + + + + + 100263 + + + + + 100264 + + + + + 100272 + + + + + 100273 + + + + + 100275 + + + + + 100276 + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + com.apple.InterfaceBuilder.CocoaPlugin + + + com.apple.InterfaceBuilder.CocoaPlugin + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{133, 170}, {507, 413}} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + 100278 + + + 0 + IBCocoaFramework + YES + 3 + YES + + diff --git a/iDNA 1.5/iDNA/en.lproj/InfoPlist.strings b/iDNA 1.5/iDNA/en.lproj/InfoPlist.strings new file mode 100644 index 0000000..477b28f --- /dev/null +++ b/iDNA 1.5/iDNA/en.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/iDNA 1.5/iDNA/en.lproj/Localizable.strings b/iDNA 1.5/iDNA/en.lproj/Localizable.strings new file mode 100644 index 0000000..47d3d31 --- /dev/null +++ b/iDNA 1.5/iDNA/en.lproj/Localizable.strings @@ -0,0 +1,16 @@ +/* + Localizable.strings + iDNA + + Created by VladIslav Khazov on 02.02.13. + Copyright (c) 2013 VladIslav Khazov. All rights reserved. +*/ + +"EXIT" = "Exit"; +"WARNING_DNA" = "DNA can not be less than 1 and greater than 100. You killed her!"; +"OK" = "Ok"; +"WARNING_DNA_SIZE" = "DNA have a different dimension!"; +"WARNING_MUTATE" = "Set a wrong parameter 'Mutation rate'. Both DNA remained unchanged"; +"WARNING_FILE_SYM" = "It looks like the file contains a character not related to DNA or it has control characters (Prov. carriage return)"; +"FILE_LENGTH" = "This file has a length %ld"; +"WARNING_FILE_LENGTH" = "This file contains the DNA of another dimension or size of more than 100 items!"; \ No newline at end of file diff --git a/iDNA 1.5/iDNA/en.lproj/MainMenu.xib b/iDNA 1.5/iDNA/en.lproj/MainMenu.xib new file mode 100644 index 0000000..b5a73d3 --- /dev/null +++ b/iDNA 1.5/iDNA/en.lproj/MainMenu.xib @@ -0,0 +1,4562 @@ + + + + 1080 + 11D50 + 2457 + 1138.32 + 568.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 2457 + + + NSMenu + NSMenuItem + NSCustomObject + + + com.apple.InterfaceBuilder.CocoaPlugin + + + PluginDependencyRecalculationVersion + + + + + NSApplication + + + FirstResponder + + + NSApplication + + + AMainMenu + + + + iDNA + + 1048576 + 2147483647 + + NSImage + NSMenuCheckmark + + + NSImage + NSMenuMixedState + + submenuAction: + + iDNA + + + + About iDNA + + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Preferences… + , + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Services + + 1048576 + 2147483647 + + + submenuAction: + + Services + + _NSServicesMenu + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Hide iDNA + h + 1048576 + 2147483647 + + + + + + Hide Others + h + 1572864 + 2147483647 + + + + + + Show All + + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Quit iDNA + 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 + + + + iDNA Help + ? + 1048576 + 2147483647 + + + + + _NSHelpMenu + + + + _NSMainMenu + + + NSFontManager + + + + + + + terminate: + + + + 448 + + + + orderFrontStandardAboutPanel: + + + + 142 + + + + performMiniaturize: + + + + 37 + + + + arrangeInFront: + + + + 39 + + + + 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: + + + + 371 + + + + openDocument: + + + + 372 + + + + printDocument: + + + + 373 + + + + raiseBaseline: + + + + 425 + + + + lowerBaseline: + + + + 426 + + + + copyFont: + + + + 427 + + + + subscript: + + + + 428 + + + + superscript: + + + + 429 + + + + tightenKerning: + + + + 430 + + + + underline: + + + + 431 + + + + orderFrontColorPanel: + + + + 432 + + + + useAllLigatures: + + + + 433 + + + + loosenKerning: + + + + 434 + + + + pasteFont: + + + + 435 + + + + unscript: + + + + 436 + + + + useStandardKerning: + + + + 437 + + + + useStandardLigatures: + + + + 438 + + + + turnOffLigatures: + + + + 439 + + + + turnOffKerning: + + + + 440 + + + + capitalizeWord: + + + + 454 + + + + lowercaseWord: + + + + 455 + + + + uppercaseWord: + + + + 456 + + + + toggleAutomaticDashSubstitution: + + + + 460 + + + + orderFrontSubstitutionsPanel: + + + + 461 + + + + toggleAutomaticTextReplacement: + + + + 463 + + + + toggleAutomaticSpellingCorrection: + + + + 466 + + + + performFindPanelAction: + + + + 467 + + + + performFindPanelAction: + + + + 468 + + + + performFindPanelAction: + + + + 469 + + + + pasteAsPlainText: + + + + 471 + + + + showHelp: + + + + 494 + + + + alignCenter: + + + + 517 + + + + pasteRuler: + + + + 518 + + + + toggleRuler: + + + + 519 + + + + alignRight: + + + + 520 + + + + copyRuler: + + + + 521 + + + + alignJustified: + + + + 522 + + + + alignLeft: + + + + 523 + + + + makeBaseWritingDirectionNatural: + + + + 524 + + + + makeBaseWritingDirectionLeftToRight: + + + + 525 + + + + makeBaseWritingDirectionRightToLeft: + + + + 526 + + + + makeTextWritingDirectionNatural: + + + + 527 + + + + makeTextWritingDirectionLeftToRight: + + + + 528 + + + + makeTextWritingDirectionRightToLeft: + + + + 529 + + + + performFindPanelAction: + + + + 533 + + + + addFontTrait: + + + + 420 + + + + addFontTrait: + + + + 421 + + + + modifyFont: + + + + 422 + + + + orderFrontFontPanel: + + + + 423 + + + + modifyFont: + + + + 424 + + + + + + 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 + + + + + 374 + + + + + + + + 375 + + + + + + + + + 376 + + + + + + + + 387 + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + + 449 + + + + + + + + 450 + + + + + + + + + + 451 + + + + + 452 + + + + + 453 + + + + + 457 + + + + + 458 + + + + + 459 + + + + + 462 + + + + + 464 + + + + + 465 + + + + + 470 + + + + + 491 + + + + + + + + 492 + + + + + + + + 493 + + + + + 495 + + + + + + + + 496 + + + + + + + + + + + + + + + + + 497 + + + + + 498 + + + + + 499 + + + + + 500 + + + + + 501 + + + + + 502 + + + + + + + + 503 + + + + + 504 + + + + + 505 + + + + + 506 + + + + + 507 + + + + + + + + + + + + + + + + 508 + + + + + 509 + + + + + 510 + + + + + 511 + + + + + 512 + + + + + 513 + + + + + 514 + + + + + 515 + + + + + 516 + + + + + 532 + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + 533 + + + + + ABAppCardController + NSWindowController + + id + id + id + id + id + id + id + id + + + + addCardViewField: + id + + + copy: + id + + + cut: + id + + + doDelete: + id + + + find: + id + + + paste: + id + + + saveChanges: + id + + + toggleCardEditingMode: + id + + + + ABCardView + NSButton + NSManagedObjectContext + NSSearchField + NSTextField + NSWindow + + + + mCardView + ABCardView + + + mEditButton + NSButton + + + mManagedObjectContext + NSManagedObjectContext + + + mSearchField + NSSearchField + + + mStatusTextField + NSTextField + + + mWindow + NSWindow + + + + IBProjectSource + ./Classes/ABAppCardController.h + + + + ABCardView + NSView + + id + id + + + + commitAndSave: + id + + + statusImageClicked: + id + + + + NSObjectController + NSImageView + NSView + ABNameFrameView + NSView + NSImage + ABImageView + + + + mBindingsController + NSObjectController + + + mBuddyStatusImage + NSImageView + + + mHeaderView + NSView + + + mNameView + ABNameFrameView + + + mNextKeyView + NSView + + + mUserImage + NSImage + + + mUserImageView + ABImageView + + + + IBProjectSource + ./Classes/ABCardView.h + + + + ABImageView + NSImageView + + id + id + id + id + + + + copy: + id + + + cut: + id + + + delete: + id + + + paste: + id + + + + IBProjectSource + ./Classes/ABImageView.h + + + + DVTBorderedView + DVTLayoutView_ML + + contentView + NSView + + + contentView + + contentView + NSView + + + + IBProjectSource + ./Classes/DVTBorderedView.h + + + + DVTDelayedMenuButton + NSButton + + IBProjectSource + ./Classes/DVTDelayedMenuButton.h + + + + DVTGradientImageButton + NSButton + + IBProjectSource + ./Classes/DVTGradientImageButton.h + + + + DVTImageAndTextCell + NSTextFieldCell + + IBProjectSource + ./Classes/DVTImageAndTextCell.h + + + + DVTImageAndTextColumn + NSTableColumn + + IBProjectSource + ./Classes/DVTImageAndTextColumn.h + + + + DVTLayoutView_ML + NSView + + IBProjectSource + ./Classes/DVTLayoutView_ML.h + + + + DVTOutlineView + NSOutlineView + + IBProjectSource + ./Classes/DVTOutlineView.h + + + + DVTSplitView + NSSplitView + + IBProjectSource + ./Classes/DVTSplitView.h + + + + DVTStackView_ML + DVTLayoutView_ML + + IBProjectSource + ./Classes/DVTStackView_ML.h + + + + DVTTableView + NSTableView + + IBProjectSource + ./Classes/DVTTableView.h + + + + DVTViewController + NSViewController + + IBProjectSource + ./Classes/DVTViewController.h + + + + FirstResponder + + duplicateDocument: + id + + + duplicateDocument: + + duplicateDocument: + id + + + + IBUserSource + + + + + HFController + NSObject + + selectAll: + id + + + selectAll: + + selectAll: + id + + + + IBProjectSource + ./Classes/HFController.h + + + + HFRepresenterTextView + NSView + + selectAll: + id + + + selectAll: + + selectAll: + id + + + + IBProjectSource + ./Classes/HFRepresenterTextView.h + + + + IBEditor + NSObject + + id + id + id + id + id + + + + changeFont: + id + + + performCopy: + id + + + performCut: + id + + + selectAll: + id + + + sizeSelectionToFit: + id + + + + IBProjectSource + ./Classes/IBEditor.h + + + + IDECapsuleListView + DVTStackView_ML + + dataSource + id + + + dataSource + + dataSource + id + + + + IBProjectSource + ./Classes/IDECapsuleListView.h + + + + IDEDMArrayController + NSArrayController + + IBProjectSource + ./Classes/IDEDMArrayController.h + + + + IDEDMEditor + IDEEditor + + DVTBorderedView + NSView + IDEDMEditorSourceListController + DVTSplitView + + + + bottomToolbarBorderView + DVTBorderedView + + + sourceListSplitViewPane + NSView + + + sourceListViewController + IDEDMEditorSourceListController + + + splitView + DVTSplitView + + + + IBProjectSource + ./Classes/IDEDMEditor.h + + + + IDEDMEditorController + IDEViewController + + IBProjectSource + ./Classes/IDEDMEditorController.h + + + + IDEDMEditorSourceListController + IDEDMEditorController + + DVTBorderedView + IDEDMEditor + DVTImageAndTextColumn + DVTOutlineView + NSTreeController + + + + borderedView + DVTBorderedView + + + parentEditor + IDEDMEditor + + + primaryColumn + DVTImageAndTextColumn + + + sourceListOutlineView + DVTOutlineView + + + sourceListTreeController + NSTreeController + + + + IBProjectSource + ./Classes/IDEDMEditorSourceListController.h + + + + IDEDMHighlightImageAndTextCell + DVTImageAndTextCell + + IBProjectSource + ./Classes/IDEDMHighlightImageAndTextCell.h + + + + IDEDataModelBrowserEditor + IDEDMEditorController + + IDEDataModelPropertiesTableController + IDECapsuleListView + NSArrayController + IDEDataModelPropertiesTableController + IDEDataModelEntityContentsEditor + IDEDataModelPropertiesTableController + + + + attributesTableViewController + IDEDataModelPropertiesTableController + + + capsuleView + IDECapsuleListView + + + entityArrayController + NSArrayController + + + fetchedPropertiesTableViewController + IDEDataModelPropertiesTableController + + + parentEditor + IDEDataModelEntityContentsEditor + + + relationshipsTableViewController + IDEDataModelPropertiesTableController + + + + IBProjectSource + ./Classes/IDEDataModelBrowserEditor.h + + + + IDEDataModelConfigurationEditor + IDEDMEditorController + + IDECapsuleListView + IDEDataModelEditor + IDEDataModelConfigurationTableController + + + + capsuleListView + IDECapsuleListView + + + parentEditor + IDEDataModelEditor + + + tableController + IDEDataModelConfigurationTableController + + + + IBProjectSource + ./Classes/IDEDataModelConfigurationEditor.h + + + + IDEDataModelConfigurationTableController + IDEDMEditorController + + NSArrayController + NSArrayController + IDEDataModelConfigurationEditor + XDTableView + + + + configurationsArrayController + NSArrayController + + + entitiesArrayController + NSArrayController + + + parentEditor + IDEDataModelConfigurationEditor + + + tableView + XDTableView + + + + IBProjectSource + ./Classes/IDEDataModelConfigurationTableController.h + + + + IDEDataModelDiagramEditor + IDEDMEditorController + + XDDiagramView + IDEDataModelEntityContentsEditor + + + + diagramView + XDDiagramView + + + parentEditor + IDEDataModelEntityContentsEditor + + + + IBProjectSource + ./Classes/IDEDataModelDiagramEditor.h + + + + IDEDataModelEditor + IDEDMEditor + + DVTDelayedMenuButton + DVTDelayedMenuButton + NSSegmentedControl + IDEDataModelConfigurationEditor + IDEDataModelEntityContentsEditor + IDEDataModelFetchRequestEditor + NSSegmentedControl + NSTabView + + + + addEntityButton + DVTDelayedMenuButton + + + addPropertyButton + DVTDelayedMenuButton + + + browserDiagramSegmentControl + NSSegmentedControl + + + configurationViewController + IDEDataModelConfigurationEditor + + + entityContentsViewController + IDEDataModelEntityContentsEditor + + + fetchRequestViewController + IDEDataModelFetchRequestEditor + + + hierarchySegmentControl + NSSegmentedControl + + + tabView + NSTabView + + + + IBProjectSource + ./Classes/IDEDataModelEditor.h + + + + IDEDataModelEntityContentsEditor + IDEDMEditorController + + IDEDataModelBrowserEditor + IDEDataModelDiagramEditor + IDEDataModelEditor + NSTabView + + + + browserViewController + IDEDataModelBrowserEditor + + + diagramViewController + IDEDataModelDiagramEditor + + + parentEditor + IDEDataModelEditor + + + tabView + NSTabView + + + + IBProjectSource + ./Classes/IDEDataModelEntityContentsEditor.h + + + + IDEDataModelFetchRequestEditor + IDEDMEditorController + + NSArrayController + IDEDataModelEditor + IDECapsuleListView + + + + entityController + NSArrayController + + + parentEditor + IDEDataModelEditor + + + tableView + IDECapsuleListView + + + + IBProjectSource + ./Classes/IDEDataModelFetchRequestEditor.h + + + + IDEDataModelPropertiesTableController + IDEDMEditorController + + IDEDMArrayController + NSTableColumn + NSArrayController + IDEDataModelBrowserEditor + IDEDMHighlightImageAndTextCell + XDTableView + + + + arrayController + IDEDMArrayController + + + entitiesColumn + NSTableColumn + + + entityArrayController + NSArrayController + + + parentEditor + IDEDataModelBrowserEditor + + + propertyNameAndImageCell + IDEDMHighlightImageAndTextCell + + + tableView + XDTableView + + + + IBProjectSource + ./Classes/IDEDataModelPropertiesTableController.h + + + + IDEDocDownloadsTableViewController + NSObject + + NSButtonCell + DVTTableView + IDEDocViewingPrefPaneController + + + + _downloadButtonCell + NSButtonCell + + + _tableView + DVTTableView + + + prefPaneController + IDEDocViewingPrefPaneController + + + + IBProjectSource + ./Classes/IDEDocDownloadsTableViewController.h + + + + IDEDocViewingPrefPaneController + IDEViewController + + id + id + id + id + id + id + id + id + id + id + id + + + + addSubscription: + id + + + checkForAndInstallUpdatesNow: + id + + + deleteDocSet: + id + + + downloadAction: + id + + + minimumFontSizeComboBoxAction: + id + + + minimumFontSizeEnabledAction: + id + + + showHelp: + id + + + showSubscriptionSheet: + id + + + subscriptionCancelAction: + id + + + toggleAutoCheckForAndInstallUpdates: + id + + + toggleDocSetInfo: + id + + + + DVTGradientImageButton + DVTGradientImageButton + DVTGradientImageButton + NSSplitView + NSView + NSView + DVTBorderedView + DVTBorderedView + NSButton + NSTextView + IDEDocDownloadsTableViewController + NSComboBox + NSTextField + NSButton + NSTextField + NSWindow + NSButton + + + + _addButton + DVTGradientImageButton + + + _deleteButton + DVTGradientImageButton + + + _showInfoAreaButton + DVTGradientImageButton + + + _splitView + NSSplitView + + + _splitViewDocSetInfoSubview + NSView + + + _splitViewDocSetsListSubview + NSView + + + borderedViewAroundSplitView + DVTBorderedView + + + borderedViewBelowTable + DVTBorderedView + + + checkAndInstallNowButton + NSButton + + + docSetInfoTextView + NSTextView + + + downloadsTableViewController + IDEDocDownloadsTableViewController + + + minimumFontSizeControl + NSComboBox + + + noUpdatesAvailableMessage + NSTextField + + + showInfoButton + NSButton + + + subscriptionTextField + NSTextField + + + subscriptionWindow + NSWindow + + + validateAddSubscriptionButton + NSButton + + + + IBProjectSource + ./Classes/IDEDocViewingPrefPaneController.h + + + + IDEEditor + IDEViewController + + IBProjectSource + ./Classes/IDEEditor.h + + + + IDEViewController + DVTViewController + + IBProjectSource + ./Classes/IDEViewController.h + + + + IKImageView + + id + id + id + id + + + + copy: + id + + + crop: + id + + + cut: + id + + + paste: + id + + + + IBProjectSource + ./Classes/IKImageView.h + + + + NSDocument + + id + id + id + id + id + id + + + + printDocument: + id + + + revertDocumentToSaved: + id + + + runPageLayout: + id + + + saveDocument: + id + + + saveDocumentAs: + id + + + saveDocumentTo: + id + + + + IBProjectSource + ./Classes/NSDocument.h + + + + NSDocumentController + + _openRecentDocument: + id + + + _openRecentDocument: + + _openRecentDocument: + id + + + + IBProjectSource + ./Classes/NSDocumentController.h + + + + NSResponder + + _insertFindPattern: + id + + + _insertFindPattern: + + _insertFindPattern: + id + + + + IBProjectSource + ./Classes/NSResponder.h + + + + QLPreviewBubble + NSObject + + id + id + + + + hide: + id + + + show: + id + + + + parentWindow + NSWindow + + + parentWindow + + parentWindow + NSWindow + + + + IBProjectSource + ./Classes/QLPreviewBubble.h + + + + QTMovieView + + id + id + id + id + id + + + + showAll: + id + + + showCustomButton: + id + + + toggleLoops: + id + + + zoomIn: + id + + + zoomOut: + id + + + + IBProjectSource + ./Classes/QTMovieView.h + + + + WebView + + id + id + id + id + + + + reloadFromOrigin: + id + + + resetPageZoom: + id + + + zoomPageIn: + id + + + zoomPageOut: + id + + + + IBProjectSource + ./Classes/WebView.h + + + + XDDiagramView + NSView + + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + + + + _graphLayouterMenuItemAction: + id + + + _zoomPopUpButtonAction: + id + + + alignBottomEdges: + id + + + alignCentersHorizontallyInContainer: + id + + + alignCentersVerticallyInContainer: + id + + + alignHorizontalCenters: + id + + + alignLeftEdges: + id + + + alignRightEdges: + id + + + alignTopEdges: + id + + + alignVerticalCenters: + id + + + bringToFront: + id + + + collapseAllCompartments: + id + + + copy: + id + + + cut: + id + + + delete: + id + + + deleteBackward: + id + + + deleteForward: + id + + + deselectAll: + id + + + diagramZoomIn: + id + + + diagramZoomOut: + id + + + expandAllCompartments: + id + + + flipHorizontally: + id + + + flipVertically: + id + + + layoutGraphicsConcentrically: + id + + + layoutGraphicsHierarchically: + id + + + lock: + id + + + makeSameHeight: + id + + + makeSameWidth: + id + + + moveDown: + id + + + moveDownAndModifySelection: + id + + + moveLeft: + id + + + moveLeftAndModifySelection: + id + + + moveRight: + id + + + moveRightAndModifySelection: + id + + + moveUp: + id + + + moveUpAndModifySelection: + id + + + paste: + id + + + rollDownAllCompartments: + id + + + rollUpAllCompartments: + id + + + selectAll: + id + + + sendToBack: + id + + + sizeToFit: + id + + + toggleGridShown: + id + + + toggleHiddenGraphicsShown: + id + + + togglePageBreaksShown: + id + + + toggleRuler: + id + + + toggleSnapsToGrid: + id + + + unlock: + id + + + + _diagramController + IDEDataModelDiagramEditor + + + _diagramController + + _diagramController + IDEDataModelDiagramEditor + + + + IBProjectSource + ./Classes/XDDiagramView.h + + + + XDTableView + NSTableView + + showAllTableColumns: + id + + + showAllTableColumns: + + showAllTableColumns: + id + + + + IBProjectSource + ./Classes/XDTableView.h + + + + + 0 + IBCocoaFramework + YES + 3 + + {11, 11} + {10, 3} + + YES + + diff --git a/iDNA 1.5/iDNA/iDNA-Info.plist b/iDNA 1.5/iDNA/iDNA-Info.plist new file mode 100644 index 0000000..445a3a1 --- /dev/null +++ b/iDNA 1.5/iDNA/iDNA-Info.plist @@ -0,0 +1,55 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleDocumentTypes + + + CFBundleTypeExtensions + + idna + + CFBundleTypeIconFile + + CFBundleTypeName + DocumentType + CFBundleTypeOSTypes + + ???? + + CFBundleTypeRole + Editor + NSDocumentClass + HVSDocument + + + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIconFile + + CFBundleIdentifier + Pride.${PRODUCT_NAME:rfc1034identifier} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.5 + CFBundleSignature + ???? + CFBundleVersion + 1 + LSMinimumSystemVersion + ${MACOSX_DEPLOYMENT_TARGET} + NSHumanReadableCopyright + Copyright © 2012 VladIslav Khazov. All rights reserved. + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/iDNA 1.5/iDNA/iDNA-Prefix.pch b/iDNA 1.5/iDNA/iDNA-Prefix.pch new file mode 100644 index 0000000..24593cd --- /dev/null +++ b/iDNA 1.5/iDNA/iDNA-Prefix.pch @@ -0,0 +1,7 @@ +// +// Prefix header for all source files of the 'iDNA' target in the 'iDNA' project +// + +#ifdef __OBJC__ + #import +#endif diff --git a/iDNA 1.5/iDNA/main.m b/iDNA 1.5/iDNA/main.m new file mode 100644 index 0000000..a052ecb --- /dev/null +++ b/iDNA 1.5/iDNA/main.m @@ -0,0 +1,14 @@ +// +// main.m +// iDNA +// +// Created by VladIslav Khazov on 23.12.12. +// Copyright (c) 2012 VladIslav Khazov. All rights reserved. +// + +#import + +int main(int argc, char *argv[]) +{ + return NSApplicationMain(argc, (const char **)argv); +} diff --git a/iDNA 1.5/iDNA/ru.lproj/Credits.rtf b/iDNA 1.5/iDNA/ru.lproj/Credits.rtf new file mode 100644 index 0000000..bc10935 --- /dev/null +++ b/iDNA 1.5/iDNA/ru.lproj/Credits.rtf @@ -0,0 +1,42 @@ +{\rtf1\ansi\ansicpg1251\cocoartf1187\cocoasubrtf340 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\paperw11900\paperh16840\vieww9600\viewh8400\viewkind0 +\deftab720 +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardeftab720\pardirnatural + +\f0\b\fs24 \cf0 \expnd0\expndtw0\kerning0 +\uc0\u1056 \u1072 \u1079 \u1088 \u1072 \u1073 \u1086 \u1090 \u1082 \u1072 : +\b0 \expnd0\expndtw0\kerning0 +\ + \uc0\u1042 \u1083 \u1072 \u1076 \u1080 \u1089 \u1083 \u1072 \u1074 \u1061 \u1072 \u1079 \u1086 \u1074 \ +\ + +\b \expnd0\expndtw0\kerning0 +\uc0\u1044 \u1080 \u1079 \u1072 \u1081 \u1085 \u1080 \u1085 \u1090 \u1077 \u1088 \u1092 \u1077 \u1081 \u1089 \u1072 : +\b0 \expnd0\expndtw0\kerning0 +\ + Hexlet.ru\ +\ + +\b \expnd0\expndtw0\kerning0 +\uc0\u1058 \u1077 \u1089 \u1090 \u1080 \u1088 \u1086 \u1074 \u1072 \u1085 \u1080 \u1077 : +\b0 \expnd0\expndtw0\kerning0 +\ + \uc0\u1042 \u1083 \u1072 \u1076 \u1080 \u1089 \u1083 \u1072 \u1074 \u1061 \u1072 \u1079 \u1086 \u1074 \ +\ + +\b \expnd0\expndtw0\kerning0 +\uc0\u1044 \u1086 \u1082 \u1091 \u1084 \u1077 \u1085 \u1090 \u1072 \u1094 \u1080 \u1103 : +\b0 \expnd0\expndtw0\kerning0 +\ + \uc0\u1053 \u1077 \u1090 \u1085 \u1080 \u1082 \u1086 \u1075 \u1086 .\ +\ + +\b \expnd0\expndtw0\kerning0 +\uc0\u1054 \u1089 \u1086 \u1073 \u1072 \u1103 \u1073 \u1083 \u1072 \u1075 \u1086 \u1076 \u1072 \u1088 \u1085 \u1086 \u1089 \u1090 \u1100 : +\b0 \expnd0\expndtw0\kerning0 +\ + \uc0\u1052 \u1072 \u1084 \u1077 \ + Hexlet.ru\ +} \ No newline at end of file diff --git a/iDNA 1.5/iDNA/ru.lproj/HVSDocument.xib b/iDNA 1.5/iDNA/ru.lproj/HVSDocument.xib new file mode 100644 index 0000000..f47ba6d --- /dev/null +++ b/iDNA 1.5/iDNA/ru.lproj/HVSDocument.xib @@ -0,0 +1,2651 @@ + + + + 1080 + 12C60 + 3084 + 1187.34 + 625.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 3084 + + + IBNSLayoutConstraint + NSButton + NSButtonCell + NSCustomObject + NSLevelIndicator + NSLevelIndicatorCell + NSNumberFormatter + NSSlider + NSSliderCell + NSTextField + NSTextFieldCell + NSUserDefaultsController + NSView + NSWindowTemplate + + + com.apple.InterfaceBuilder.CocoaPlugin + + + PluginDependencyRecalculationVersion + + + + + HVSDocument + + + FirstResponder + + + 15 + 2 + {{133, 235}, {507, 413}} + 1886912512 + iDNA 1.5 + NSWindow + View + + {94, 86} + + + 256 + + + + 268 + {{17, 376}, {120, 17}} + + + _NS:1535 + YES + + 68157504 + 272630784 + Размер популяции + + LucidaGrande + 13 + 1044 + + _NS:1535 + + + 6 + System + controlColor + + 3 + MC42NjY2NjY2NjY3AA + + + + 6 + System + controlTextColor + + 3 + MAA + + + + NO + + + + 268 + {{17, 351}, {120, 17}} + + + _NS:1535 + YES + + 68157504 + 272630784 + Длина ДНК + + _NS:1535 + + + + + NO + + + + 268 + {{17, 326}, {120, 17}} + + + _NS:1535 + YES + + 68157504 + 272630784 + Процент мутации + + _NS:1535 + + + + + NO + + + + 268 + {{211, 374}, {278, 21}} + + + _NS:9 + YES + + -2080374784 + 0 + + _NS:9 + + 10000 + 1 + 5000 + 0.0 + 0 + 1 + NO + NO + + NO + + + + 268 + {{211, 349}, {278, 21}} + + + _NS:9 + YES + + -2080374784 + 0 + + _NS:9 + + 100 + 1 + 50 + 0.0 + 0 + 1 + NO + NO + + NO + + + + 268 + {{211, 324}, {278, 21}} + + + _NS:9 + YES + + -2080374784 + 0 + + _NS:9 + + 100 + 1 + 50 + 0.0 + 0 + 1 + NO + NO + + NO + + + + 268 + {{142, 371}, {63, 22}} + + + _NS:9 + YES + + -1804599231 + -1874852864 + + + + + + + + + + + + -∞ + + + +∞ + + #,##0.### + #,##0.### + + + + + + + + NaN + + + + + + 3 + YES + YES + YES + + . + , + YES + NO + YES + + _NS:9 + + YES + + 6 + System + textBackgroundColor + + 3 + MQA + + + + 6 + System + textColor + + + + NO + + + + 268 + {{142, 346}, {63, 22}} + + + _NS:9 + YES + + -1804599231 + -1874852864 + + + + + + + + + + -∞ + + + +∞ + + #,##0.### + #,##0.### + + + + + + + + NaN + + + + + + 3 + YES + YES + YES + + . + , + YES + NO + YES + + _NS:9 + + YES + + + + NO + + + + 268 + {{142, 321}, {63, 22}} + + + _NS:9 + YES + + -1804599231 + -1874852864 + + + + + + + + + + -∞ + + + +∞ + + #,##0.### + #,##0.### + + + + + + + + NaN + + + + + + 3 + YES + YES + YES + + . + , + YES + NO + YES + + _NS:9 + + YES + + + + NO + + + + 268 + {{20, 290}, {295, 19}} + + + _NS:1535 + YES + + 68157504 + 71304192 + Генерация (шаги): + + LucidaGrande + 16 + 16 + + _NS:1535 + + + + + NO + + + + 268 + {{23, 265}, {315, 17}} + + + _NS:1535 + YES + + 68157504 + 71304192 + Лучшее совпадение % - + + _NS:1535 + + + + + NO + + + + 268 + {{20, 241}, {467, 16}} + + + _NS:9 + YES + + 0 + 0 + _NS:9 + + 100 + 100 + 2 + 2 + 1 + + NO + + + + 268 + {{20, 49}, {467, 184}} + + + _NS:9 + YES + + -1805647871 + 205520896 + + + LucidaGrande + 30 + 16 + + _NS:9 + + YES + + + + NO + + + + 268 + {{14, 13}, {155, 32}} + + + _NS:9 + YES + + 67108864 + 134217728 + Начать эволюцию + + _NS:9 + + -2038284288 + 129 + + + 200 + 25 + + NO + + + + 268 + {{169, 13}, {77, 32}} + + + _NS:9 + YES + + 603979776 + 134217728 + Пауза + + _NS:9 + + -2038284288 + 129 + + + 200 + 25 + + NO + + + + 268 + {{299, 13}, {194, 32}} + + + _NS:9 + YES + + 67108864 + 134217728 + Загрузить целевую ДНК + + _NS:9 + + -2038284288 + 129 + + + 200 + 25 + + NO + + + + 268 + {{343, 265}, {147, 17}} + + + _NS:1535 + YES + + 68157504 + -1874852864 + 0 + + + + + + + -∞ + + +∞ + + # + # + + + + + + + + NaN + + + + 0 + 0 + YES + NO + 1 + AAAAAAAAAAAAAAAAAAAAAA + + + + 3 + YES + YES + YES + + . + , + NO + NO + YES + + _NS:1535 + + + + + NO + + + + 268 + {{317, 292}, {173, 17}} + + + _NS:1535 + YES + + 68157504 + -1874852864 + 0 + + + + + + + -∞ + + +∞ + + # + # + + + + + + + + NaN + + + + + + 3 + YES + YES + YES + + . + , + NO + NO + YES + + _NS:1535 + + + + + NO + + + {507, 413} + + + + {{0, 0}, {1920, 1058}} + {94, 108} + {10000000000000, 10000000000000} + YES + + + NSApplication + + + YES + + + + + + + popTextLength + + + + 100163 + + + + popTextSize + + + + 100164 + + + + popTextRate + + + + 100165 + + + + popTextGoalDna + + + + 100194 + + + + popSliderSize + + + + 100195 + + + + popSliderLength + + + + 100196 + + + + popSliderRate + + + + 100197 + + + + popLevelMatch + + + + 100200 + + + + popButtonStart + + + + 100201 + + + + popButtonPause + + + + 100202 + + + + popButtonLoad + + + + 100203 + + + + buttonStart: + + + + 100204 + + + + buttonPause: + + + + 100205 + + + + buttonLoad: + + + + 100206 + + + + popLabelGeneration + + + + 100274 + + + + popLabelMatch + + + + 100277 + + + + window + + + + 100278 + + + + delegate + + + + 17 + + + + value: self.myPopulation.populationSize + + + + + + value: self.myPopulation.populationSize + value + self.myPopulation.populationSize + 2 + + + 100178 + + + + value: self.myPopulation.populationLengthDna + + + + + + value: self.myPopulation.populationLengthDna + value + self.myPopulation.populationLengthDna + 2 + + + 100181 + + + + value: self.myPopulation.populationRate + + + + + + value: self.myPopulation.populationRate + value + self.myPopulation.populationRate + 2 + + + 100184 + + + + value: self.myPopulation.populationSize + + + + + + value: self.myPopulation.populationSize + value + self.myPopulation.populationSize + 2 + + + 100187 + + + + value: self.myPopulation.populationLengthDna + + + + + + value: self.myPopulation.populationLengthDna + value + self.myPopulation.populationLengthDna + 2 + + + 100190 + + + + value: self.myPopulation.populationRate + + + + + + value: self.myPopulation.populationRate + value + self.myPopulation.populationRate + 2 + + + 100193 + + + + value: self.myPopulation.maxHamming + + + + + + value: self.myPopulation.maxHamming + value + self.myPopulation.maxHamming + 2 + + + 100271 + + + + value: self.myPopulation.maxHamming + + + + + + value: self.myPopulation.maxHamming + value + self.myPopulation.maxHamming + 2 + + + 100248 + + + + value: self.myPopulation.countEvolution + + + + + + value: self.myPopulation.countEvolution + value + self.myPopulation.countEvolution + 2 + + + 100268 + + + + value: self.myPopulation.maxHamming + + + + + + value: self.myPopulation.maxHamming + value + self.myPopulation.maxHamming + 2 + + + 100254 + + + + + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + 5 + + + + + + Window + + + 6 + + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 4 + 0 + + 4 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 6 + 1 + + 12 + + 1000 + + 6 + 24 + 3 + + + + 4 + 0 + + 4 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 3 + 0 + + 4 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 4 + 0 + + 4 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 11 + 0 + + 11 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 6 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 3 + 0 + + 3 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 5 + 0 + + 6 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 11 + 0 + + 11 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 5 + 0 + + 6 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 5 + 0 + + 5 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 11 + 0 + + 11 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 5 + 0 + + 6 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 5 + 0 + + 5 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 3 + 0 + + 3 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 3 + 0 + + 4 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 3 + 0 + + 4 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 5 + 0 + + 6 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 3 + 0 + + 3 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 3 + 0 + + 3 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 5 + 0 + + 5 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 5 + 0 + + 6 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 5 + 0 + + 5 + 1 + + 26 + + 1000 + + 3 + 9 + 3 + + + + 3 + 0 + + 4 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 5 + 0 + + 6 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 3 + 0 + + 3 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 3 + 0 + + 4 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 3 + 0 + + 4 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 3 + 0 + + 3 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + + + + + + + + + + + + + + + + + + + + + -3 + + + Application + + + 100027 + + + + + + 7 + 0 + + 0 + 1 + + 114 + + 1000 + + 3 + 9 + 1 + + + + + + 100028 + + + + + 100032 + + + + + 100033 + + + + + 100034 + + + + + + + + 100036 + + + + + 100039 + + + + + 100040 + + + + + 100042 + + + + + + + + 100043 + + + + + 100047 + + + + + 100049 + + + + + 100050 + + + + + + + + 100051 + + + + + 100052 + + + + + 100055 + + + + + 100056 + + + + + + + + 100057 + + + + + 100061 + + + + + 100063 + + + + + 100065 + + + + + + + + 100066 + + + + + 100070 + + + + + 100072 + + + + + 100079 + + + + + + 7 + 0 + + 0 + 1 + + 63 + + 1000 + + 3 + 9 + 1 + + + + + + 100080 + + + + + + + + 100085 + + + + + 100086 + + + + + 100091 + + + + + 100093 + + + + + 100094 + + + + + 100095 + + + + + 100096 + + + + + + + + 100098 + + + + + + + + 100101 + + + + + 100102 + + + + + 100103 + + + + + 100104 + + + + + 100105 + + + + + + + + 100106 + + + + + + + + 100110 + + + + + 100111 + + + + + 100112 + + + + + 100114 + + + + + + 7 + 0 + + 0 + 1 + + 289 + + 1000 + + 3 + 9 + 1 + + + + + + 100115 + + + + + 100120 + + + + + + 7 + 0 + + 0 + 1 + + 309 + + 1000 + + 3 + 9 + 1 + + + + + + 100121 + + + + + 100123 + + + + + 100131 + + + + + + + + 100132 + + + + + 100133 + + + + + 100134 + + + + + 100136 + + + + + 100137 + + + + + + 8 + 0 + + 0 + 1 + + 184 + + 1000 + + 3 + 9 + 1 + + + + + + 100138 + + + + + 100139 + + + + + 100140 + + + + + 100142 + + + + + 100144 + + + + + + + + 100145 + + + + + 100146 + + + + + 100147 + + + + + 100148 + + + + + 100149 + + + + + 100150 + + + + + + + + 100151 + + + + + 100154 + + + + + 100155 + + + + + 100156 + + + + + + + + 100157 + + + + + 100160 + + + + + 100161 + + + + + 100166 + + + + + 100173 + + + + + 100174 + + + + + 100175 + + + + + 100208 + + + + + 100211 + + + + + 100212 + + + + + 100223 + + + + + + 7 + 0 + + 0 + 1 + + 141 + + 1000 + + 3 + 9 + 1 + + + + + + 100224 + + + + + + + + 100225 + + + + + 100245 + + + + + 100250 + + + + + 7 + 0 + + 0 + 1 + + 167 + + 1000 + + 3 + 9 + 1 + + + + 8 + 0 + + 0 + 1 + + 17 + + 1000 + + 3 + 9 + 1 + + + + + + + 100252 + + + + + + + + 100253 + + + + + 100261 + + + + + 100263 + + + + + 100264 + + + + + 100272 + + + + + 100273 + + + + + 100275 + + + + + 100276 + + + + + 100279 + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + com.apple.InterfaceBuilder.CocoaPlugin + + + com.apple.InterfaceBuilder.CocoaPlugin + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{133, 170}, {507, 413}} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + 100279 + + + 0 + IBCocoaFramework + YES + 3 + YES + + diff --git a/iDNA 1.5/iDNA/ru.lproj/InfoPlist.strings b/iDNA 1.5/iDNA/ru.lproj/InfoPlist.strings new file mode 100644 index 0000000..477b28f --- /dev/null +++ b/iDNA 1.5/iDNA/ru.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/iDNA 1.5/iDNA/ru.lproj/Localizable.strings b/iDNA 1.5/iDNA/ru.lproj/Localizable.strings new file mode 100644 index 0000000..913200c --- /dev/null +++ b/iDNA 1.5/iDNA/ru.lproj/Localizable.strings @@ -0,0 +1,16 @@ +/* + Localizable.strings + iDNA + + Created by VladIslav Khazov on 02.02.13. + Copyright (c) 2013 VladIslav Khazov. All rights reserved. +*/ + +"EXIT" = "Выход"; +"WARNING_DNA" = "ДНК не может быть меньше 1 и больше 100. Вы убили ее!!!"; +"OK" = "Хорошо"; +"WARNING_DNA_SIZE" = "ДНК имеют разную размерность!"; +"WARNING_MUTATE" = "Указан не верный параметр 'Процента мутации'. Обе ДНК остались без изменений "; +"WARNING_FILE_SYM" = "Похоже файл содержит символ не относящийся к ДНК или в нем есть управляющие символы (Пр. перевод каретки)"; +"FILE_LENGTH" = "Данный файл имеет длину %ld"; +"WARNING_FILE_LENGTH" = "Файл содержит ДНК другой размерностью или его размер больше 100 единиц!!! "; \ No newline at end of file diff --git a/iDNA 1.5/iDNA/ru.lproj/MainMenu.xib b/iDNA 1.5/iDNA/ru.lproj/MainMenu.xib new file mode 100644 index 0000000..6c53f71 --- /dev/null +++ b/iDNA 1.5/iDNA/ru.lproj/MainMenu.xib @@ -0,0 +1,3132 @@ + + + + 1080 + 12C60 + 3084 + 1187.34 + 625.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 3084 + + + NSCustomObject + NSMenu + NSMenuItem + + + com.apple.InterfaceBuilder.CocoaPlugin + + + PluginDependencyRecalculationVersion + + + + + NSApplication + + + FirstResponder + + + NSApplication + + + AMainMenu + + + + iDNA + + 1048576 + 2147483647 + + NSImage + NSMenuCheckmark + + + NSImage + NSMenuMixedState + + submenuAction: + + iDNA + + + + О iDNA + + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Настройки… + , + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Службы + + 1048576 + 2147483647 + + + submenuAction: + + Службы + + _NSServicesMenu + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Скрыть iDNA + h + 1048576 + 2147483647 + + + + + + Скрыть другие + h + 1572864 + 2147483647 + + + + + + Показать все + + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Выйти из iDNA + q + 1048576 + 2147483647 + + + + + _NSAppleMenu + + + + + Файл + + 1048576 + 2147483647 + + + submenuAction: + + Файл + + + + Новый + n + 1048576 + 2147483647 + + + + + + Открыть… + o + 1048576 + 2147483647 + + + + + + Открыть последние + + 1048576 + 2147483647 + + + submenuAction: + + Открыть последние + + + + Clear Menu + + 1048576 + 2147483647 + + + + + _NSRecentDocumentsMenu + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Закрыть + w + 1048576 + 2147483647 + + + + + + Save… + s + 1048576 + 2147483647 + + + + + + Revert to Saved + + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Настройка страницы... + P + 1179648 + 2147483647 + + + + + + + Напечатать… + p + 1048576 + 2147483647 + + + + + + + + + Правка + + 1048576 + 2147483647 + + + submenuAction: + + Правка + + + + Отменить + z + 1048576 + 2147483647 + + + + + + Повторить + Z + 1179648 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Вырезать + x + 1048576 + 2147483647 + + + + + + Копировать + c + 1048576 + 2147483647 + + + + + + Вставить + v + 1048576 + 2147483647 + + + + + + Вставить в текущем стиле + V + 1572864 + 2147483647 + + + + + + Удалить + + 1048576 + 2147483647 + + + + + + Выбрать все + a + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Найти + + 1048576 + 2147483647 + + + submenuAction: + + Найти + + + + 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 + + + + + + + + + Правописание + + 1048576 + 2147483647 + + + submenuAction: + + Правописание + + + + 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 + + + + + + + + + Замены + + 1048576 + 2147483647 + + + submenuAction: + + Замены + + + + 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 + + + + + + + + + Трансформации + + 2147483647 + + + submenuAction: + + Трансформации + + + + Make Upper Case + + 2147483647 + + + + + + Make Lower Case + + 2147483647 + + + + + + Capitalize + + 2147483647 + + + + + + + + + Разговор + + 1048576 + 2147483647 + + + submenuAction: + + Разговор + + + + Начать диктовку + + 1048576 + 2147483647 + + + + + + Остановить диктовку + + 1048576 + 2147483647 + + + + + + + + + + + + Формат + + 2147483647 + + + submenuAction: + + Формат + + + + 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 + + + + + + + + + + + + Вид + + 1048576 + 2147483647 + + + submenuAction: + + Вид + + + + Show Toolbar + t + 1572864 + 2147483647 + + + + + + Customize Toolbar… + + 1048576 + 2147483647 + + + + + + + + + Окно + + 1048576 + 2147483647 + + + submenuAction: + + Окно + + + + Minimize + m + 1048576 + 2147483647 + + + + + + Zoom + + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Bring All to Front + + 1048576 + 2147483647 + + + + + _NSWindowsMenu + + + + + Помощь + + 2147483647 + + + submenuAction: + + Помощь + + + + iDNA 1.5 помощь + ? + 1048576 + 2147483647 + + + + + _NSHelpMenu + + + + _NSMainMenu + + + NSFontManager + + + + + + + terminate: + + + + 448 + + + + orderFrontStandardAboutPanel: + + + + 142 + + + + performMiniaturize: + + + + 37 + + + + arrangeInFront: + + + + 39 + + + + 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: + + + + 371 + + + + openDocument: + + + + 372 + + + + printDocument: + + + + 373 + + + + raiseBaseline: + + + + 425 + + + + lowerBaseline: + + + + 426 + + + + copyFont: + + + + 427 + + + + subscript: + + + + 428 + + + + superscript: + + + + 429 + + + + tightenKerning: + + + + 430 + + + + underline: + + + + 431 + + + + orderFrontColorPanel: + + + + 432 + + + + useAllLigatures: + + + + 433 + + + + loosenKerning: + + + + 434 + + + + pasteFont: + + + + 435 + + + + unscript: + + + + 436 + + + + useStandardKerning: + + + + 437 + + + + useStandardLigatures: + + + + 438 + + + + turnOffLigatures: + + + + 439 + + + + turnOffKerning: + + + + 440 + + + + capitalizeWord: + + + + 454 + + + + lowercaseWord: + + + + 455 + + + + uppercaseWord: + + + + 456 + + + + toggleAutomaticDashSubstitution: + + + + 460 + + + + orderFrontSubstitutionsPanel: + + + + 461 + + + + toggleAutomaticTextReplacement: + + + + 463 + + + + toggleAutomaticSpellingCorrection: + + + + 466 + + + + performFindPanelAction: + + + + 467 + + + + performFindPanelAction: + + + + 468 + + + + performFindPanelAction: + + + + 469 + + + + pasteAsPlainText: + + + + 471 + + + + showHelp: + + + + 494 + + + + alignCenter: + + + + 517 + + + + pasteRuler: + + + + 518 + + + + toggleRuler: + + + + 519 + + + + alignRight: + + + + 520 + + + + copyRuler: + + + + 521 + + + + alignJustified: + + + + 522 + + + + alignLeft: + + + + 523 + + + + makeBaseWritingDirectionNatural: + + + + 524 + + + + makeBaseWritingDirectionLeftToRight: + + + + 525 + + + + makeBaseWritingDirectionRightToLeft: + + + + 526 + + + + makeTextWritingDirectionNatural: + + + + 527 + + + + makeTextWritingDirectionLeftToRight: + + + + 528 + + + + makeTextWritingDirectionRightToLeft: + + + + 529 + + + + performFindPanelAction: + + + + 533 + + + + addFontTrait: + + + + 420 + + + + addFontTrait: + + + + 421 + + + + modifyFont: + + + + 422 + + + + orderFrontFontPanel: + + + + 423 + + + + modifyFont: + + + + 424 + + + + + + 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 + + + + + 374 + + + + + + + + 375 + + + + + + + + + 376 + + + + + + + + 387 + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + + 449 + + + + + + + + 450 + + + + + + + + + + 451 + + + + + 452 + + + + + 453 + + + + + 457 + + + + + 458 + + + + + 459 + + + + + 462 + + + + + 464 + + + + + 465 + + + + + 470 + + + + + 491 + + + + + + + + 492 + + + + + + + + 493 + + + + + 495 + + + + + + + + 496 + + + + + + + + + + + + + + + + + 497 + + + + + 498 + + + + + 499 + + + + + 500 + + + + + 501 + + + + + 502 + + + + + + + + 503 + + + + + 504 + + + + + 505 + + + + + 506 + + + + + 507 + + + + + + + + + + + + + + + + 508 + + + + + 509 + + + + + 510 + + + + + 511 + + + + + 512 + + + + + 513 + + + + + 514 + + + + + 515 + + + + + 516 + + + + + 532 + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + 533 + + + + + FirstResponder + + duplicateDocument: + id + + + duplicateDocument: + + duplicateDocument: + id + + + + IBUserSource + + + + + + 0 + IBCocoaFramework + YES + 3 + + {11, 11} + {10, 3} + + YES + + diff --git a/iDNA 1.5/mygoaldna.txt b/iDNA 1.5/mygoaldna.txt new file mode 100644 index 0000000..eba4e0e --- /dev/null +++ b/iDNA 1.5/mygoaldna.txt @@ -0,0 +1 @@ +CCCCTTTTTTTAAACCCGAGGGGGGCTC \ No newline at end of file From 15dda0a87a222d2b226848fa8452d3719ce11e84 Mon Sep 17 00:00:00 2001 From: Vladislav Khazov Date: Sat, 2 Feb 2013 18:58:01 +0400 Subject: [PATCH 4/6] iDNA 1.5 ver 2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Добавлены подтверждения --- .DS_Store | Bin 6148 -> 6148 bytes iDNA 1.5/.DS_Store | Bin 6148 -> 6148 bytes .../UserInterfaceState.xcuserstate | Bin 33471 -> 33926 bytes iDNA 1.5/iDNA/.DS_Store | Bin 6148 -> 6148 bytes iDNA 1.5/iDNA/HVSDocument.m | 33 ++++++++++++++++++ iDNA 1.5/iDNA/en.lproj/Localizable.strings | 11 +++++- iDNA 1.5/iDNA/ru.lproj/Localizable.strings | 11 +++++- 7 files changed, 53 insertions(+), 2 deletions(-) diff --git a/.DS_Store b/.DS_Store index 0b80ea7667a856b5921d81814ac8861e99d62121..45875e540dbafd16bdec40413672675ab8849b2d 100644 GIT binary patch delta 75 zcmZoMXffEZm5Fh~=E3MR%DwY8i;AaH;~R7uaq dBP6k=wywTmvKzBJW7Fm|=7lVq**O030{}P^71RI# diff --git a/iDNA 1.5/.DS_Store b/iDNA 1.5/.DS_Store index 2edc92118fa9aac92e9550e32a5d819a6043469b..f7899da12c12fb9f13ba0c0544d8501f2a2cf630 100644 GIT binary patch delta 103 zcmZoMXffE3$Rf-1|33o=urOpYxG?xJI3|@B7bNB6CjrGaOs-=|)|ITTHa0NOQ7|$$ zs?|}bHZ(Ri)=@AsHK?uS1OkC}4pAjN8;_90+PeCN#>u>_@{G-!by;sRZD!~A%MSpA C*c-I~ delta 102 zcmZoMXffE3$Rf+~|33o=urOpYxG?xJI3|@B7bNB6CjrIQPp)H0){&^LHZ?cZQ7|^J zsMS%ZHa9oWQ7|#KsIBD$0)Yb@qDp!;9wCV}wRQCkllfTX8JjlivEF3b%*OGL9{_iX B8_xg$ diff --git a/iDNA 1.5/iDNA.xcodeproj/project.xcworkspace/xcuserdata/hadush.xcuserdatad/UserInterfaceState.xcuserstate b/iDNA 1.5/iDNA.xcodeproj/project.xcworkspace/xcuserdata/hadush.xcuserdatad/UserInterfaceState.xcuserstate index e531757e6549d3f9b6b8e86fa9d82b2e8d0dc5a5..b77d0d97a9983d78934d42b98c718f6d17b74b99 100644 GIT binary patch delta 17866 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 A8vpn5_)ga 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 delta 90 zcmZoMXffEp#mdIu#=yWZW3m9N2^+&1Fw=|GX>tvl;N(zNjmbw@`6pjsVP%{#`4+1U j6C=lD2{tel#-;`0HL>Y&Fmn6{gN=p$jGNgx{_+C=8`~O- diff --git a/iDNA 1.5/iDNA/HVSDocument.m b/iDNA 1.5/iDNA/HVSDocument.m index d697a76..0fa5539 100644 --- a/iDNA 1.5/iDNA/HVSDocument.m +++ b/iDNA 1.5/iDNA/HVSDocument.m @@ -253,6 +253,15 @@ + (BOOL)autosavesInPlace //Сохранение документа - (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError { + //Проверим, действительно ли пользователь хочет сохранить файл. + NSInteger choice = NSRunAlertPanel(NSLocalizedString(@"FILE_SAVE_NAME",@"Сохранение данных в файл") + ,NSLocalizedString(@"FILE_SAVE_MSG",@"Вы действительно хотите сохранить документ?") + ,NSLocalizedString(@"YES","") + ,NSLocalizedString(@"NO",""), nil); + if (choice != 1) { + return nil; + } + NSMutableData *saveData = [[NSMutableData alloc]init]; NSKeyedArchiver *myKeyArchiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:saveData]; [myKeyArchiver encodeInteger:[myPopulation populationSize] forKey:@"populationSize"]; @@ -272,8 +281,17 @@ - (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError return saveData; } +//Загрузка файла - (BOOL)readFromData:(NSData *)data ofType:(NSString *)typeName error:(NSError **)outError { + //Проверим, действительно ли пользователь хочет загрузить файл. + NSInteger choice = NSRunAlertPanel(NSLocalizedString(@"FILE_LOAD_NAME",@"Загрузка данных из файла"), + NSLocalizedString(@"FILE_LOAD_MSG",@"Вы действительно хотите открыть новый документ?"), + NSLocalizedString(@"YES",""), + NSLocalizedString(@"NO",""), nil); + if (choice != 1) { + return NO; + } NSKeyedUnarchiver *myKeyArchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data]; HVSPopulationOfDna *newMyPopulation = nil; @@ -308,4 +326,19 @@ - (BOOL)readFromData:(NSData *)data ofType:(NSString *)typeName error:(NSError * return YES; } +//Закрытие документа +- (BOOL)windowShouldClose:(id)sender +{ + //NSLog(@"CLoooose"); + NSInteger choice = NSRunAlertPanel(NSLocalizedString(@"DOC_CLOSE_NAME",@"Закрытие документа"), + NSLocalizedString(@"DOC_CLOSE_MSG",@"Вы действительно хотите закрыть документ?"), + NSLocalizedString(@"YES",""), + NSLocalizedString(@"NO",""), nil); + if (choice == 1) { + return YES; + + } + return NO; +} + @end diff --git a/iDNA 1.5/iDNA/en.lproj/Localizable.strings b/iDNA 1.5/iDNA/en.lproj/Localizable.strings index 47d3d31..7e6bffc 100644 --- a/iDNA 1.5/iDNA/en.lproj/Localizable.strings +++ b/iDNA 1.5/iDNA/en.lproj/Localizable.strings @@ -9,8 +9,17 @@ "EXIT" = "Exit"; "WARNING_DNA" = "DNA can not be less than 1 and greater than 100. You killed her!"; "OK" = "Ok"; +"CANCEL" = "Cancel"; "WARNING_DNA_SIZE" = "DNA have a different dimension!"; "WARNING_MUTATE" = "Set a wrong parameter 'Mutation rate'. Both DNA remained unchanged"; "WARNING_FILE_SYM" = "It looks like the file contains a character not related to DNA or it has control characters (Prov. carriage return)"; "FILE_LENGTH" = "This file has a length %ld"; -"WARNING_FILE_LENGTH" = "This file contains the DNA of another dimension or size of more than 100 items!"; \ No newline at end of file +"WARNING_FILE_LENGTH" = "This file contains the DNA of another dimension or size of more than 100 items!"; +"FILE_SAVE_NAME" = "Saving data to file"; +"FILE_SAVE_MSG" = "Do you really want to save the document?"; +"FILE_LOAD_NAME" = "Loading data from file"; +"FILE_LOAD_MSG" = "Do you really want to open a new document?"; +"YES" = "Yes"; +"NO" = "No"; +"DOC_CLOSE_NAME" = "Closing a document"; +"DOC_CLOSE_MSG" = "Do you really want to close the document?"; \ No newline at end of file diff --git a/iDNA 1.5/iDNA/ru.lproj/Localizable.strings b/iDNA 1.5/iDNA/ru.lproj/Localizable.strings index 913200c..881f5a0 100644 --- a/iDNA 1.5/iDNA/ru.lproj/Localizable.strings +++ b/iDNA 1.5/iDNA/ru.lproj/Localizable.strings @@ -9,8 +9,17 @@ "EXIT" = "Выход"; "WARNING_DNA" = "ДНК не может быть меньше 1 и больше 100. Вы убили ее!!!"; "OK" = "Хорошо"; +"CANCEL" = "Отмена"; "WARNING_DNA_SIZE" = "ДНК имеют разную размерность!"; "WARNING_MUTATE" = "Указан не верный параметр 'Процента мутации'. Обе ДНК остались без изменений "; "WARNING_FILE_SYM" = "Похоже файл содержит символ не относящийся к ДНК или в нем есть управляющие символы (Пр. перевод каретки)"; "FILE_LENGTH" = "Данный файл имеет длину %ld"; -"WARNING_FILE_LENGTH" = "Файл содержит ДНК другой размерностью или его размер больше 100 единиц!!! "; \ No newline at end of file +"WARNING_FILE_LENGTH" = "Файл содержит ДНК другой размерностью или его размер больше 100 единиц!!! "; +"FILE_SAVE_NAME" = "Сохранение данных в файл"; +"FILE_SAVE_MSG" = "Вы действительно хотите сохранить документ?"; +"FILE_LOAD_NAME" = "Загрузка данных из файла"; +"FILE_LOAD_MSG" = "Вы действительно хотите открыть новый документ?"; +"YES" = "Да"; +"NO" = "Нет"; +"DOC_CLOSE_NAME" = "Закрытие документа"; +"DOC_CLOSE_MSG" = "Вы действительно хотите закрыть документ?"; \ No newline at end of file From 3b50fda43c3568c742bc2a988d8d2c5e97c20c04 Mon Sep 17 00:00:00 2001 From: Vladislav Khazov Date: Sat, 2 Feb 2013 22:26:03 +0400 Subject: [PATCH 5/6] iDNA 1.5 ver 3 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Добавлено сохранение/восстановление пользовательских настроек. --- .../UserInterfaceState.xcuserstate | Bin 33926 -> 34897 bytes .../xcdebugger/Breakpoints.xcbkptlist | 24 +- iDNA 1.5/iDNA/HVSDocument.h | 1 + iDNA 1.5/iDNA/HVSDocument.m | 9 +- iDNA 1.5/iDNA/HVSPopulationOfDna.h | 18 + iDNA 1.5/iDNA/HVSPopulationOfDna.m | 59 +- iDNA 1.5/iDNA/en.lproj/HVSDocument.xib | 179 +- iDNA 1.5/iDNA/en.lproj/MainMenu.xib | 1493 +---------------- iDNA 1.5/iDNA/ru.lproj/MainMenu.xib | 183 +- 9 files changed, 421 insertions(+), 1545 deletions(-) diff --git a/iDNA 1.5/iDNA.xcodeproj/project.xcworkspace/xcuserdata/hadush.xcuserdatad/UserInterfaceState.xcuserstate b/iDNA 1.5/iDNA.xcodeproj/project.xcworkspace/xcuserdata/hadush.xcuserdatad/UserInterfaceState.xcuserstate index b77d0d97a9983d78934d42b98c718f6d17b74b99..41ead4bc2ab6eb7186d8dee629d20e8381b39126 100644 GIT binary patch delta 19303 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 delta 18334 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 CmfzI? diff --git a/iDNA 1.5/iDNA.xcodeproj/xcuserdata/hadush.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist b/iDNA 1.5/iDNA.xcodeproj/xcuserdata/hadush.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist index adfcd62..3592f39 100644 --- a/iDNA 1.5/iDNA.xcodeproj/xcuserdata/hadush.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist +++ b/iDNA 1.5/iDNA.xcodeproj/xcuserdata/hadush.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist @@ -8,11 +8,11 @@ ignoreCount = "0" continueAfterRunningActions = "No" filePath = "iDNA/HVSPopulationOfDna.m" - timestampString = "378068992.091209" + timestampString = "381519797.113212" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "45" - endingLineNumber = "45" + startingLineNumber = "98" + endingLineNumber = "98" landmarkName = "-evolution" landmarkType = "5"> @@ -21,11 +21,11 @@ ignoreCount = "0" continueAfterRunningActions = "No" filePath = "iDNA/HVSPopulationOfDna.m" - timestampString = "378069228.392762" + timestampString = "381519797.113212" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "65" - endingLineNumber = "65" + startingLineNumber = "118" + endingLineNumber = "118" landmarkName = "-evolution" landmarkType = "5"> @@ -34,11 +34,11 @@ ignoreCount = "0" continueAfterRunningActions = "No" filePath = "iDNA/HVSDocument.m" - timestampString = "378981926.909515" + timestampString = "381521559.008798" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "122" - endingLineNumber = "122" + startingLineNumber = "128" + endingLineNumber = "128" landmarkName = "-buttonStart:" landmarkType = "5"> @@ -47,11 +47,11 @@ ignoreCount = "0" continueAfterRunningActions = "No" filePath = "iDNA/HVSDocument.m" - timestampString = "378983022.164456" + timestampString = "381521559.008798" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "180" - endingLineNumber = "180" + startingLineNumber = "186" + endingLineNumber = "186" landmarkName = "-buttonLoad:" landmarkType = "5"> diff --git a/iDNA 1.5/iDNA/HVSDocument.h b/iDNA 1.5/iDNA/HVSDocument.h index 807b5e5..0422612 100644 --- a/iDNA 1.5/iDNA/HVSDocument.h +++ b/iDNA 1.5/iDNA/HVSDocument.h @@ -42,4 +42,5 @@ - (IBAction)buttonLoad:(id)sender; //Фоновый поток -(void)startBackgroundEvolution; + @end diff --git a/iDNA 1.5/iDNA/HVSDocument.m b/iDNA 1.5/iDNA/HVSDocument.m index 0fa5539..32918da 100644 --- a/iDNA 1.5/iDNA/HVSDocument.m +++ b/iDNA 1.5/iDNA/HVSDocument.m @@ -66,6 +66,8 @@ -(void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(N [result appendString:[myArrayDNA objectAtIndex:i]]; } [_popTextGoalDna setStringValue:result]; + //Сохраним пользовательскую настройку + [HVSPopulationOfDna setPreferenceLengthDNA:[myPopulation populationLengthDna]]; } if (context==@"changePopulationSize") { id oldValue = [change objectForKey:NSKeyValueChangeOldKey]; @@ -74,6 +76,8 @@ -(void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(N } [[myManager prepareWithInvocationTarget:self] changeKeyPath:@"populationSize" ofObject:myPopulation toValue:oldValue]; [myManager setActionName:@"Change Size"]; + //Сохраним пользовательскую настройку + [HVSPopulationOfDna setPreferenceSize:[myPopulation populationSize]]; } if (context==@"changePopulationRate") { id oldValue = [change objectForKey:NSKeyValueChangeOldKey]; @@ -82,6 +86,8 @@ -(void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(N } [[myManager prepareWithInvocationTarget:self] changeKeyPath:@"populationRate" ofObject:myPopulation toValue:oldValue]; [myManager setActionName:@"Change Rate"]; + //Сохраним пользовательскую настройку + [HVSPopulationOfDna setPreferenceRate:[myPopulation populationRate]]; } } @@ -247,7 +253,8 @@ - (void)windowControllerDidLoadNib:(NSWindowController *)aController + (BOOL)autosavesInPlace { - return YES; + //Парит - жутко. Отключил. + return NO; } //Сохранение документа diff --git a/iDNA 1.5/iDNA/HVSPopulationOfDna.h b/iDNA 1.5/iDNA/HVSPopulationOfDna.h index ad30591..b7ab8db 100644 --- a/iDNA 1.5/iDNA/HVSPopulationOfDna.h +++ b/iDNA 1.5/iDNA/HVSPopulationOfDna.h @@ -9,6 +9,11 @@ #import #import "HVSCellDna.h" +//Для пользовательских настроек +extern NSString *const HVSPopulationSizeKey; +extern NSString *const HVSPopulationLengthDNAKey; +extern NSString *const HVSPopulationRateKey; + @interface HVSPopulationOfDna : NSObject //Свойства популяции ДНК, определяющие размер популяции, размер 1-ой ДНК и процент мутации. @@ -26,11 +31,24 @@ //Количество проходов @property NSInteger countEvolution; +//Методы для загрузки/сохранения пользовательских настроек ++(void)setPreferenceSize:(NSInteger)value; ++(NSInteger)preferenceSize; ++(void)setPreferenceLengthDNA:(NSInteger)value; ++(NSInteger)preferenceLengthDNA; ++(void)setPreferenceRate:(NSInteger)value; ++(NSInteger)preferenceRate; + + -(id) init; //метод заполнения популяции -(void)setPopulation; //метод эволюции - (void)evolution; +//Метод сохранения пользовательских настроек +-(IBAction)setSavePreference:(id)sender; +//Восстановление заводских настроек +-(IBAction)restoreFactoryPreference:(id)sender; @end diff --git a/iDNA 1.5/iDNA/HVSPopulationOfDna.m b/iDNA 1.5/iDNA/HVSPopulationOfDna.m index 7ba9e4b..10989e6 100644 --- a/iDNA 1.5/iDNA/HVSPopulationOfDna.m +++ b/iDNA 1.5/iDNA/HVSPopulationOfDna.m @@ -10,12 +10,65 @@ @implementation HVSPopulationOfDna +//Зададим значения для пользовательских настроек +NSString *const HVSPopulationSizeKey = @"HVSPopulationSizeKey"; +NSString *const HVSPopulationLengthDNAKey = @"HVSPopulationLengthDNAKey"; +NSString *const HVSPopulationRateKey = @"HVSPopulationRateKey"; + +//Воспользуемся методом initialized для записи заводских настроек ++(void)initialize { + NSMutableDictionary *factoryValues = [NSMutableDictionary dictionary]; + [factoryValues setObject:[NSNumber numberWithInteger:1000] forKey:HVSPopulationSizeKey]; + [factoryValues setObject:[NSNumber numberWithInteger:30] forKey:HVSPopulationLengthDNAKey]; + [factoryValues setObject:[NSNumber numberWithInteger:5] forKey:HVSPopulationRateKey]; + [[NSUserDefaults standardUserDefaults] registerDefaults:factoryValues]; +} + +//методы загрузки/сохранения пользовательских настроек ++(void)setPreferenceSize:(NSInteger)value { + [[NSUserDefaults standardUserDefaults] setInteger:value forKey:HVSPopulationSizeKey]; +} ++(NSInteger)preferenceSize { + return [[NSUserDefaults standardUserDefaults] integerForKey:HVSPopulationSizeKey]; +} ++(void)setPreferenceLengthDNA:(NSInteger)value { + [[NSUserDefaults standardUserDefaults] setInteger:value forKey:HVSPopulationLengthDNAKey]; +} + ++(NSInteger)preferenceLengthDNA { + return [[NSUserDefaults standardUserDefaults] integerForKey:HVSPopulationLengthDNAKey]; +} ++(void)setPreferenceRate:(NSInteger)value { + [[NSUserDefaults standardUserDefaults] setInteger:value forKey:HVSPopulationRateKey]; +} + ++(NSInteger)preferenceRate { + return [[NSUserDefaults standardUserDefaults] integerForKey:HVSPopulationRateKey]; +} + +//сохранение пользовательских настроек +-(IBAction)setSavePreference:(id)sender { + [HVSPopulationOfDna setPreferenceSize:[self populationSize]]; + [HVSPopulationOfDna setPreferenceRate:[self populationRate]]; + [HVSPopulationOfDna setPreferenceLengthDNA:[self populationLengthDna]]; + NSLog(@"Size:%ld",[self populationSize]); + NSLog(@"Rate:%ld",[self populationRate]); + NSLog(@"Length:%ld",[self populationLengthDna]); +} + +//Восстановление заводских настроек +-(IBAction)restoreFactoryPreference:(id)sender { + [[NSUserDefaults standardUserDefaults] removeObjectForKey:HVSPopulationSizeKey]; + [[NSUserDefaults standardUserDefaults] removeObjectForKey:HVSPopulationLengthDNAKey]; + [[NSUserDefaults standardUserDefaults] removeObjectForKey:HVSPopulationRateKey]; +} + -(id)init { self = [super init]; if (self) { - [self setPopulationLengthDna:30]; - [self setPopulationRate:5]; - [self setPopulationSize:1000]; + [self setPopulationLengthDna:[HVSPopulationOfDna preferenceLengthDNA]]; + [self setPopulationRate:[HVSPopulationOfDna preferenceRate]]; + [self setPopulationSize:[HVSPopulationOfDna preferenceSize]]; [self setGoalDNA:[[HVSCellDna alloc]initWithLengthDna:30]]; [self setFlag:NO]; [self setMaxHamming:0]; diff --git a/iDNA 1.5/iDNA/en.lproj/HVSDocument.xib b/iDNA 1.5/iDNA/en.lproj/HVSDocument.xib index ad19c9e..0ec6bf4 100644 --- a/iDNA 1.5/iDNA/en.lproj/HVSDocument.xib +++ b/iDNA 1.5/iDNA/en.lproj/HVSDocument.xib @@ -428,7 +428,7 @@ 268 - {{23, 265}, {315, 17}} + {{23, 265}, {292, 17}} _NS:1535 @@ -544,7 +544,6 @@ 268 {{359, 13}, {134, 32}} - _NS:9 YES @@ -566,7 +565,7 @@ 268 - {{343, 265}, {147, 17}} + {{317, 265}, {173, 17}} _NS:1535 @@ -1149,6 +1148,38 @@ 29 3 + + + 5 + 0 + + 5 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 5 + 0 + + 6 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + 6 @@ -1181,36 +1212,36 @@ 24 2 - - - 6 + + + 5 0 - + 6 1 - 20 + 8 1000 - 8 - 29 + 6 + 24 3 - - - 5 + + + 6 0 - + 6 1 - 8 + 20 1000 - 6 - 24 + 8 + 29 3 @@ -1597,22 +1628,6 @@ 24 3 - - - 5 - 0 - - 5 - 1 - - 26 - - 1000 - - 3 - 9 - 3 - 3 @@ -2111,7 +2126,7 @@ - + 7 0 @@ -2119,7 +2134,7 @@ 0 1 - 309 + 286 1000 @@ -2311,42 +2326,11 @@ - - 100208 - - - - - 100211 - - - - - 100212 - - - 100223 - - - 7 - 0 - - 0 - 1 - - 141 - - 1000 - - 3 - 9 - 1 - @@ -2426,11 +2410,6 @@ - - 100263 - - - 100264 @@ -2442,19 +2421,39 @@ - 100273 + 100275 + + + + + 100279 + + + + + 100281 + + + + + 100288 + + + + + 100294 - 100275 - + 100295 + - 100276 - - + 100296 + + @@ -2529,7 +2528,7 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin @@ -2577,12 +2576,6 @@ com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -2590,7 +2583,7 @@ com.apple.InterfaceBuilder.CocoaPlugin - + @@ -2601,12 +2594,15 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin {{133, 170}, {507, 413}} @@ -2619,7 +2615,6 @@ - @@ -2644,10 +2639,12 @@ - + + + @@ -2662,7 +2659,7 @@ - 100278 + 100296 0 diff --git a/iDNA 1.5/iDNA/en.lproj/MainMenu.xib b/iDNA 1.5/iDNA/en.lproj/MainMenu.xib index b5a73d3..93235ee 100644 --- a/iDNA 1.5/iDNA/en.lproj/MainMenu.xib +++ b/iDNA 1.5/iDNA/en.lproj/MainMenu.xib @@ -2,18 +2,18 @@ 1080 - 11D50 - 2457 - 1138.32 - 568.00 + 12C60 + 3084 + 1187.34 + 625.00 com.apple.InterfaceBuilder.CocoaPlugin - 2457 + 3084 + NSCustomObject NSMenu NSMenuItem - NSCustomObject com.apple.InterfaceBuilder.CocoaPlugin @@ -261,6 +261,24 @@ + + + YES + YES + + + 2147483647 + + + + + + Restore preference + + 2147483647 + + + YES @@ -1290,6 +1308,9 @@ NSFontManager + + HVSPopulationOfDna + @@ -1957,6 +1978,14 @@ 424 + + + restoreFactoryPreference: + + + + 539 + @@ -2044,6 +2073,8 @@ + + @@ -2938,6 +2969,21 @@ + + 535 + + + + + 538 + + + + + 540 + + + @@ -3076,6 +3122,9 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -3095,288 +3144,10 @@ - 533 + 541 - - ABAppCardController - NSWindowController - - id - id - id - id - id - id - id - id - - - - addCardViewField: - id - - - copy: - id - - - cut: - id - - - doDelete: - id - - - find: - id - - - paste: - id - - - saveChanges: - id - - - toggleCardEditingMode: - id - - - - ABCardView - NSButton - NSManagedObjectContext - NSSearchField - NSTextField - NSWindow - - - - mCardView - ABCardView - - - mEditButton - NSButton - - - mManagedObjectContext - NSManagedObjectContext - - - mSearchField - NSSearchField - - - mStatusTextField - NSTextField - - - mWindow - NSWindow - - - - IBProjectSource - ./Classes/ABAppCardController.h - - - - ABCardView - NSView - - id - id - - - - commitAndSave: - id - - - statusImageClicked: - id - - - - NSObjectController - NSImageView - NSView - ABNameFrameView - NSView - NSImage - ABImageView - - - - mBindingsController - NSObjectController - - - mBuddyStatusImage - NSImageView - - - mHeaderView - NSView - - - mNameView - ABNameFrameView - - - mNextKeyView - NSView - - - mUserImage - NSImage - - - mUserImageView - ABImageView - - - - IBProjectSource - ./Classes/ABCardView.h - - - - ABImageView - NSImageView - - id - id - id - id - - - - copy: - id - - - cut: - id - - - delete: - id - - - paste: - id - - - - IBProjectSource - ./Classes/ABImageView.h - - - - DVTBorderedView - DVTLayoutView_ML - - contentView - NSView - - - contentView - - contentView - NSView - - - - IBProjectSource - ./Classes/DVTBorderedView.h - - - - DVTDelayedMenuButton - NSButton - - IBProjectSource - ./Classes/DVTDelayedMenuButton.h - - - - DVTGradientImageButton - NSButton - - IBProjectSource - ./Classes/DVTGradientImageButton.h - - - - DVTImageAndTextCell - NSTextFieldCell - - IBProjectSource - ./Classes/DVTImageAndTextCell.h - - - - DVTImageAndTextColumn - NSTableColumn - - IBProjectSource - ./Classes/DVTImageAndTextColumn.h - - - - DVTLayoutView_ML - NSView - - IBProjectSource - ./Classes/DVTLayoutView_ML.h - - - - DVTOutlineView - NSOutlineView - - IBProjectSource - ./Classes/DVTOutlineView.h - - - - DVTSplitView - NSSplitView - - IBProjectSource - ./Classes/DVTSplitView.h - - - - DVTStackView_ML - DVTLayoutView_ML - - IBProjectSource - ./Classes/DVTStackView_ML.h - - - - DVTTableView - NSTableView - - IBProjectSource - ./Classes/DVTTableView.h - - - - DVTViewController - NSViewController - - IBProjectSource - ./Classes/DVTViewController.h - - FirstResponder @@ -3395,1158 +3166,6 @@ - - HFController - NSObject - - selectAll: - id - - - selectAll: - - selectAll: - id - - - - IBProjectSource - ./Classes/HFController.h - - - - HFRepresenterTextView - NSView - - selectAll: - id - - - selectAll: - - selectAll: - id - - - - IBProjectSource - ./Classes/HFRepresenterTextView.h - - - - IBEditor - NSObject - - id - id - id - id - id - - - - changeFont: - id - - - performCopy: - id - - - performCut: - id - - - selectAll: - id - - - sizeSelectionToFit: - id - - - - IBProjectSource - ./Classes/IBEditor.h - - - - IDECapsuleListView - DVTStackView_ML - - dataSource - id - - - dataSource - - dataSource - id - - - - IBProjectSource - ./Classes/IDECapsuleListView.h - - - - IDEDMArrayController - NSArrayController - - IBProjectSource - ./Classes/IDEDMArrayController.h - - - - IDEDMEditor - IDEEditor - - DVTBorderedView - NSView - IDEDMEditorSourceListController - DVTSplitView - - - - bottomToolbarBorderView - DVTBorderedView - - - sourceListSplitViewPane - NSView - - - sourceListViewController - IDEDMEditorSourceListController - - - splitView - DVTSplitView - - - - IBProjectSource - ./Classes/IDEDMEditor.h - - - - IDEDMEditorController - IDEViewController - - IBProjectSource - ./Classes/IDEDMEditorController.h - - - - IDEDMEditorSourceListController - IDEDMEditorController - - DVTBorderedView - IDEDMEditor - DVTImageAndTextColumn - DVTOutlineView - NSTreeController - - - - borderedView - DVTBorderedView - - - parentEditor - IDEDMEditor - - - primaryColumn - DVTImageAndTextColumn - - - sourceListOutlineView - DVTOutlineView - - - sourceListTreeController - NSTreeController - - - - IBProjectSource - ./Classes/IDEDMEditorSourceListController.h - - - - IDEDMHighlightImageAndTextCell - DVTImageAndTextCell - - IBProjectSource - ./Classes/IDEDMHighlightImageAndTextCell.h - - - - IDEDataModelBrowserEditor - IDEDMEditorController - - IDEDataModelPropertiesTableController - IDECapsuleListView - NSArrayController - IDEDataModelPropertiesTableController - IDEDataModelEntityContentsEditor - IDEDataModelPropertiesTableController - - - - attributesTableViewController - IDEDataModelPropertiesTableController - - - capsuleView - IDECapsuleListView - - - entityArrayController - NSArrayController - - - fetchedPropertiesTableViewController - IDEDataModelPropertiesTableController - - - parentEditor - IDEDataModelEntityContentsEditor - - - relationshipsTableViewController - IDEDataModelPropertiesTableController - - - - IBProjectSource - ./Classes/IDEDataModelBrowserEditor.h - - - - IDEDataModelConfigurationEditor - IDEDMEditorController - - IDECapsuleListView - IDEDataModelEditor - IDEDataModelConfigurationTableController - - - - capsuleListView - IDECapsuleListView - - - parentEditor - IDEDataModelEditor - - - tableController - IDEDataModelConfigurationTableController - - - - IBProjectSource - ./Classes/IDEDataModelConfigurationEditor.h - - - - IDEDataModelConfigurationTableController - IDEDMEditorController - - NSArrayController - NSArrayController - IDEDataModelConfigurationEditor - XDTableView - - - - configurationsArrayController - NSArrayController - - - entitiesArrayController - NSArrayController - - - parentEditor - IDEDataModelConfigurationEditor - - - tableView - XDTableView - - - - IBProjectSource - ./Classes/IDEDataModelConfigurationTableController.h - - - - IDEDataModelDiagramEditor - IDEDMEditorController - - XDDiagramView - IDEDataModelEntityContentsEditor - - - - diagramView - XDDiagramView - - - parentEditor - IDEDataModelEntityContentsEditor - - - - IBProjectSource - ./Classes/IDEDataModelDiagramEditor.h - - - - IDEDataModelEditor - IDEDMEditor - - DVTDelayedMenuButton - DVTDelayedMenuButton - NSSegmentedControl - IDEDataModelConfigurationEditor - IDEDataModelEntityContentsEditor - IDEDataModelFetchRequestEditor - NSSegmentedControl - NSTabView - - - - addEntityButton - DVTDelayedMenuButton - - - addPropertyButton - DVTDelayedMenuButton - - - browserDiagramSegmentControl - NSSegmentedControl - - - configurationViewController - IDEDataModelConfigurationEditor - - - entityContentsViewController - IDEDataModelEntityContentsEditor - - - fetchRequestViewController - IDEDataModelFetchRequestEditor - - - hierarchySegmentControl - NSSegmentedControl - - - tabView - NSTabView - - - - IBProjectSource - ./Classes/IDEDataModelEditor.h - - - - IDEDataModelEntityContentsEditor - IDEDMEditorController - - IDEDataModelBrowserEditor - IDEDataModelDiagramEditor - IDEDataModelEditor - NSTabView - - - - browserViewController - IDEDataModelBrowserEditor - - - diagramViewController - IDEDataModelDiagramEditor - - - parentEditor - IDEDataModelEditor - - - tabView - NSTabView - - - - IBProjectSource - ./Classes/IDEDataModelEntityContentsEditor.h - - - - IDEDataModelFetchRequestEditor - IDEDMEditorController - - NSArrayController - IDEDataModelEditor - IDECapsuleListView - - - - entityController - NSArrayController - - - parentEditor - IDEDataModelEditor - - - tableView - IDECapsuleListView - - - - IBProjectSource - ./Classes/IDEDataModelFetchRequestEditor.h - - - - IDEDataModelPropertiesTableController - IDEDMEditorController - - IDEDMArrayController - NSTableColumn - NSArrayController - IDEDataModelBrowserEditor - IDEDMHighlightImageAndTextCell - XDTableView - - - - arrayController - IDEDMArrayController - - - entitiesColumn - NSTableColumn - - - entityArrayController - NSArrayController - - - parentEditor - IDEDataModelBrowserEditor - - - propertyNameAndImageCell - IDEDMHighlightImageAndTextCell - - - tableView - XDTableView - - - - IBProjectSource - ./Classes/IDEDataModelPropertiesTableController.h - - - - IDEDocDownloadsTableViewController - NSObject - - NSButtonCell - DVTTableView - IDEDocViewingPrefPaneController - - - - _downloadButtonCell - NSButtonCell - - - _tableView - DVTTableView - - - prefPaneController - IDEDocViewingPrefPaneController - - - - IBProjectSource - ./Classes/IDEDocDownloadsTableViewController.h - - - - IDEDocViewingPrefPaneController - IDEViewController - - id - id - id - id - id - id - id - id - id - id - id - - - - addSubscription: - id - - - checkForAndInstallUpdatesNow: - id - - - deleteDocSet: - id - - - downloadAction: - id - - - minimumFontSizeComboBoxAction: - id - - - minimumFontSizeEnabledAction: - id - - - showHelp: - id - - - showSubscriptionSheet: - id - - - subscriptionCancelAction: - id - - - toggleAutoCheckForAndInstallUpdates: - id - - - toggleDocSetInfo: - id - - - - DVTGradientImageButton - DVTGradientImageButton - DVTGradientImageButton - NSSplitView - NSView - NSView - DVTBorderedView - DVTBorderedView - NSButton - NSTextView - IDEDocDownloadsTableViewController - NSComboBox - NSTextField - NSButton - NSTextField - NSWindow - NSButton - - - - _addButton - DVTGradientImageButton - - - _deleteButton - DVTGradientImageButton - - - _showInfoAreaButton - DVTGradientImageButton - - - _splitView - NSSplitView - - - _splitViewDocSetInfoSubview - NSView - - - _splitViewDocSetsListSubview - NSView - - - borderedViewAroundSplitView - DVTBorderedView - - - borderedViewBelowTable - DVTBorderedView - - - checkAndInstallNowButton - NSButton - - - docSetInfoTextView - NSTextView - - - downloadsTableViewController - IDEDocDownloadsTableViewController - - - minimumFontSizeControl - NSComboBox - - - noUpdatesAvailableMessage - NSTextField - - - showInfoButton - NSButton - - - subscriptionTextField - NSTextField - - - subscriptionWindow - NSWindow - - - validateAddSubscriptionButton - NSButton - - - - IBProjectSource - ./Classes/IDEDocViewingPrefPaneController.h - - - - IDEEditor - IDEViewController - - IBProjectSource - ./Classes/IDEEditor.h - - - - IDEViewController - DVTViewController - - IBProjectSource - ./Classes/IDEViewController.h - - - - IKImageView - - id - id - id - id - - - - copy: - id - - - crop: - id - - - cut: - id - - - paste: - id - - - - IBProjectSource - ./Classes/IKImageView.h - - - - NSDocument - - id - id - id - id - id - id - - - - printDocument: - id - - - revertDocumentToSaved: - id - - - runPageLayout: - id - - - saveDocument: - id - - - saveDocumentAs: - id - - - saveDocumentTo: - id - - - - IBProjectSource - ./Classes/NSDocument.h - - - - NSDocumentController - - _openRecentDocument: - id - - - _openRecentDocument: - - _openRecentDocument: - id - - - - IBProjectSource - ./Classes/NSDocumentController.h - - - - NSResponder - - _insertFindPattern: - id - - - _insertFindPattern: - - _insertFindPattern: - id - - - - IBProjectSource - ./Classes/NSResponder.h - - - - QLPreviewBubble - NSObject - - id - id - - - - hide: - id - - - show: - id - - - - parentWindow - NSWindow - - - parentWindow - - parentWindow - NSWindow - - - - IBProjectSource - ./Classes/QLPreviewBubble.h - - - - QTMovieView - - id - id - id - id - id - - - - showAll: - id - - - showCustomButton: - id - - - toggleLoops: - id - - - zoomIn: - id - - - zoomOut: - id - - - - IBProjectSource - ./Classes/QTMovieView.h - - - - WebView - - id - id - id - id - - - - reloadFromOrigin: - id - - - resetPageZoom: - id - - - zoomPageIn: - id - - - zoomPageOut: - id - - - - IBProjectSource - ./Classes/WebView.h - - - - XDDiagramView - NSView - - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - - - - _graphLayouterMenuItemAction: - id - - - _zoomPopUpButtonAction: - id - - - alignBottomEdges: - id - - - alignCentersHorizontallyInContainer: - id - - - alignCentersVerticallyInContainer: - id - - - alignHorizontalCenters: - id - - - alignLeftEdges: - id - - - alignRightEdges: - id - - - alignTopEdges: - id - - - alignVerticalCenters: - id - - - bringToFront: - id - - - collapseAllCompartments: - id - - - copy: - id - - - cut: - id - - - delete: - id - - - deleteBackward: - id - - - deleteForward: - id - - - deselectAll: - id - - - diagramZoomIn: - id - - - diagramZoomOut: - id - - - expandAllCompartments: - id - - - flipHorizontally: - id - - - flipVertically: - id - - - layoutGraphicsConcentrically: - id - - - layoutGraphicsHierarchically: - id - - - lock: - id - - - makeSameHeight: - id - - - makeSameWidth: - id - - - moveDown: - id - - - moveDownAndModifySelection: - id - - - moveLeft: - id - - - moveLeftAndModifySelection: - id - - - moveRight: - id - - - moveRightAndModifySelection: - id - - - moveUp: - id - - - moveUpAndModifySelection: - id - - - paste: - id - - - rollDownAllCompartments: - id - - - rollUpAllCompartments: - id - - - selectAll: - id - - - sendToBack: - id - - - sizeToFit: - id - - - toggleGridShown: - id - - - toggleHiddenGraphicsShown: - id - - - togglePageBreaksShown: - id - - - toggleRuler: - id - - - toggleSnapsToGrid: - id - - - unlock: - id - - - - _diagramController - IDEDataModelDiagramEditor - - - _diagramController - - _diagramController - IDEDataModelDiagramEditor - - - - IBProjectSource - ./Classes/XDDiagramView.h - - - - XDTableView - NSTableView - - showAllTableColumns: - id - - - showAllTableColumns: - - showAllTableColumns: - id - - - - IBProjectSource - ./Classes/XDTableView.h - - 0 diff --git a/iDNA 1.5/iDNA/ru.lproj/MainMenu.xib b/iDNA 1.5/iDNA/ru.lproj/MainMenu.xib index 6c53f71..2ca0745 100644 --- a/iDNA 1.5/iDNA/ru.lproj/MainMenu.xib +++ b/iDNA 1.5/iDNA/ru.lproj/MainMenu.xib @@ -261,6 +261,24 @@ + + + YES + YES + + + 2147483647 + + + + + + Восстановить настройки + + 2147483647 + + + YES @@ -1290,6 +1308,12 @@ NSFontManager + + HVSPopulationOfDna + + + HVSDocument + @@ -1957,6 +1981,14 @@ 424 + + + restoreFactoryPreference: + + + + 542 + @@ -2044,6 +2076,8 @@ + + @@ -2938,6 +2972,26 @@ + + 537 + + + + + 540 + + + + + 541 + + + + + 543 + + + @@ -3076,6 +3130,10 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -3095,7 +3153,7 @@ - 533 + 544 @@ -3117,6 +3175,129 @@ + + HVSDocument + NSDocument + + id + id + id + id + + + + buttonLoad: + id + + + buttonPause: + id + + + buttonStart: + id + + + setSavePreference: + id + + + + NSButton + NSButton + NSButton + NSTextField + NSTextField + NSLevelIndicator + NSSlider + NSSlider + NSSlider + NSTextField + NSTextField + NSTextField + NSTextField + + + + popButtonLoad + NSButton + + + popButtonPause + NSButton + + + popButtonStart + NSButton + + + popLabelGeneration + NSTextField + + + popLabelMatch + NSTextField + + + popLevelMatch + NSLevelIndicator + + + popSliderLength + NSSlider + + + popSliderRate + NSSlider + + + popSliderSize + NSSlider + + + popTextGoalDna + NSTextField + + + popTextLength + NSTextField + + + popTextRate + NSTextField + + + popTextSize + NSTextField + + + + IBProjectSource + ./Classes/HVSDocument.h + + + + HVSPopulationOfDna + NSObject + + id + id + + + + restoreFactoryPreference: + id + + + setSavePreference: + id + + + + IBProjectSource + ./Classes/HVSPopulationOfDna.h + + 0 From a0fbca45f40937c6f8b8b7b18b68cf4a8a64efad Mon Sep 17 00:00:00 2001 From: Vladislav Khazov Date: Sun, 3 Feb 2013 22:33:24 +0400 Subject: [PATCH 6/6] iDNA 1.5 ver 4 FINAL MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Исправлены ошибки, добавлено окно генерации случайного числа. --- iDNA 1.5/iDNA.xcodeproj/project.pbxproj | 24 +- .../UserInterfaceState.xcuserstate | Bin 34897 -> 38427 bytes .../xcdebugger/Breakpoints.xcbkptlist | 24 +- iDNA 1.5/iDNA/HVSDocument.h | 7 + iDNA 1.5/iDNA/HVSDocument.m | 47 ++- iDNA 1.5/iDNA/HVSGenerateWindowController.h | 19 + iDNA 1.5/iDNA/HVSGenerateWindowController.m | 80 ++++ iDNA 1.5/iDNA/HVSPopulationOfDna.h | 11 +- iDNA 1.5/iDNA/HVSPopulationOfDna.m | 26 +- iDNA 1.5/iDNA/en.lproj/HVSDocument.xib | 134 +++++- .../en.lproj/HVSGenerateWindowController.xib | 254 ++++++++++++ iDNA 1.5/iDNA/ru.lproj/HVSDocument.xib | 387 +++++++++++++++--- .../ru.lproj/HVSGenerateWindowController.xib | 286 +++++++++++++ 13 files changed, 1207 insertions(+), 92 deletions(-) create mode 100644 iDNA 1.5/iDNA/HVSGenerateWindowController.h create mode 100644 iDNA 1.5/iDNA/HVSGenerateWindowController.m create mode 100644 iDNA 1.5/iDNA/en.lproj/HVSGenerateWindowController.xib create mode 100644 iDNA 1.5/iDNA/ru.lproj/HVSGenerateWindowController.xib diff --git a/iDNA 1.5/iDNA.xcodeproj/project.pbxproj b/iDNA 1.5/iDNA.xcodeproj/project.pbxproj index d05834b..cab86a7 100644 --- a/iDNA 1.5/iDNA.xcodeproj/project.pbxproj +++ b/iDNA 1.5/iDNA.xcodeproj/project.pbxproj @@ -7,6 +7,8 @@ objects = { /* Begin PBXBuildFile section */ + 2E78308116BE6AD7000A5DEF /* HVSGenerateWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2E78307F16BE6AD7000A5DEF /* HVSGenerateWindowController.m */; }; + 2E78308316BE843B000A5DEF /* HVSGenerateWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2E78308516BE843B000A5DEF /* HVSGenerateWindowController.xib */; }; 2EE1D4B016BD3157007B91F8 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 2EE1D4B216BD3157007B91F8 /* Localizable.strings */; }; 2EEBA40516875CA5004EC063 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2EEBA40416875CA5004EC063 /* Cocoa.framework */; }; 2EEBA40F16875CA5004EC063 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 2EEBA40D16875CA5004EC063 /* InfoPlist.strings */; }; @@ -24,8 +26,12 @@ 2E7704F716BD281F00CCBDF3 /* ru */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ru; path = ru.lproj/MainMenu.xib; sourceTree = ""; }; 2E7704F816BD281F00CCBDF3 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/InfoPlist.strings; sourceTree = ""; }; 2E7704F916BD281F00CCBDF3 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = ru; path = ru.lproj/Credits.rtf; sourceTree = ""; }; - 2EE1D4B116BD3157007B91F8 /* en */ = {isa = PBXFileReference; lastKnownFileType = file; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; - 2EE1D4B316BD315A007B91F8 /* ru */ = {isa = PBXFileReference; lastKnownFileType = file; name = ru; path = ru.lproj/Localizable.strings; sourceTree = ""; }; + 2E78307E16BE6AD7000A5DEF /* HVSGenerateWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HVSGenerateWindowController.h; sourceTree = ""; }; + 2E78307F16BE6AD7000A5DEF /* HVSGenerateWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HVSGenerateWindowController.m; sourceTree = ""; }; + 2E78308416BE843B000A5DEF /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/HVSGenerateWindowController.xib; sourceTree = ""; }; + 2E78308616BE8443000A5DEF /* ru */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ru; path = ru.lproj/HVSGenerateWindowController.xib; sourceTree = ""; }; + 2EE1D4B116BD3157007B91F8 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; + 2EE1D4B316BD315A007B91F8 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Localizable.strings; sourceTree = ""; }; 2EEBA40016875CA5004EC063 /* iDNA.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = iDNA.app; sourceTree = BUILT_PRODUCTS_DIR; }; 2EEBA40416875CA5004EC063 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; 2EEBA40716875CA5004EC063 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; }; @@ -105,6 +111,9 @@ 2EEBA41716875CA5004EC063 /* HVSDocument.m */, 2EEBA41916875CA5004EC063 /* HVSDocument.xib */, 2EEBA41C16875CA6004EC063 /* MainMenu.xib */, + 2E78307E16BE6AD7000A5DEF /* HVSGenerateWindowController.h */, + 2E78307F16BE6AD7000A5DEF /* HVSGenerateWindowController.m */, + 2E78308516BE843B000A5DEF /* HVSGenerateWindowController.xib */, 2EEBA40B16875CA5004EC063 /* Supporting Files */, ); path = iDNA; @@ -181,6 +190,7 @@ 2EEBA41B16875CA5004EC063 /* HVSDocument.xib in Resources */, 2EEBA41E16875CA6004EC063 /* MainMenu.xib in Resources */, 2EE1D4B016BD3157007B91F8 /* Localizable.strings in Resources */, + 2E78308316BE843B000A5DEF /* HVSGenerateWindowController.xib in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -195,12 +205,22 @@ 2EEBA41816875CA5004EC063 /* HVSDocument.m in Sources */, 2EEBA42616875D19004EC063 /* HVSCellDna.m in Sources */, 2EEBA42D168774BE004EC063 /* HVSPopulationOfDna.m in Sources */, + 2E78308116BE6AD7000A5DEF /* HVSGenerateWindowController.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXVariantGroup section */ + 2E78308516BE843B000A5DEF /* HVSGenerateWindowController.xib */ = { + isa = PBXVariantGroup; + children = ( + 2E78308416BE843B000A5DEF /* en */, + 2E78308616BE8443000A5DEF /* ru */, + ); + name = HVSGenerateWindowController.xib; + sourceTree = ""; + }; 2EE1D4B216BD3157007B91F8 /* Localizable.strings */ = { isa = PBXVariantGroup; children = ( diff --git a/iDNA 1.5/iDNA.xcodeproj/project.xcworkspace/xcuserdata/hadush.xcuserdatad/UserInterfaceState.xcuserstate b/iDNA 1.5/iDNA.xcodeproj/project.xcworkspace/xcuserdata/hadush.xcuserdatad/UserInterfaceState.xcuserstate index 41ead4bc2ab6eb7186d8dee629d20e8381b39126..8689732aea09d9b0f69d5a9a655a80b9664e58c6 100644 GIT binary patch literal 38427 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 P`(NBe_{G1naOi&lps6s| literal 34897 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 @@ -21,11 +21,11 @@ ignoreCount = "0" continueAfterRunningActions = "No" filePath = "iDNA/HVSPopulationOfDna.m" - timestampString = "381519797.113212" + timestampString = "381583265.58348" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "118" - endingLineNumber = "118" + startingLineNumber = "132" + endingLineNumber = "132" landmarkName = "-evolution" landmarkType = "5"> @@ -34,11 +34,11 @@ ignoreCount = "0" continueAfterRunningActions = "No" filePath = "iDNA/HVSDocument.m" - timestampString = "381521559.008798" + timestampString = "381608092.279412" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "128" - endingLineNumber = "128" + startingLineNumber = "173" + endingLineNumber = "173" landmarkName = "-buttonStart:" landmarkType = "5"> @@ -47,11 +47,11 @@ ignoreCount = "0" continueAfterRunningActions = "No" filePath = "iDNA/HVSDocument.m" - timestampString = "381521559.008798" + timestampString = "381608092.279412" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "186" - endingLineNumber = "186" + startingLineNumber = "231" + endingLineNumber = "231" landmarkName = "-buttonLoad:" landmarkType = "5"> diff --git a/iDNA 1.5/iDNA/HVSDocument.h b/iDNA 1.5/iDNA/HVSDocument.h index 0422612..bcd3d57 100644 --- a/iDNA 1.5/iDNA/HVSDocument.h +++ b/iDNA 1.5/iDNA/HVSDocument.h @@ -8,12 +8,18 @@ #import #import "HVSPopulationOfDna.h" +#import "HVSGenerateWindowController.h" + +//Для получения сообщения из Центра уведомлений +extern NSString *const HVSMyRandomNumberNotification; @interface HVSDocument : NSDocument { //Определяем нашу популяцию HVSPopulationOfDna *myPopulation; //Флаг Паузы BOOL flagPause; + //Окно генерации случайных чисел + HVSGenerateWindowController *generate; } //Свойста для работы с объектами на форме //Текстовые поля @@ -38,6 +44,7 @@ //Действия - (IBAction)buttonStart:(id)sender; +- (IBAction)buttonStartNew:(id)sender; //Будет вызываться вместо buttonStart, для генерации слуайных чисел. - (IBAction)buttonPause:(id)sender; - (IBAction)buttonLoad:(id)sender; //Фоновый поток diff --git a/iDNA 1.5/iDNA/HVSDocument.m b/iDNA 1.5/iDNA/HVSDocument.m index 32918da..e6b4b62 100644 --- a/iDNA 1.5/iDNA/HVSDocument.m +++ b/iDNA 1.5/iDNA/HVSDocument.m @@ -9,9 +9,13 @@ #import "HVSDocument.h" #import "HVSCellDna.h" #import "HVSPopulationOfDna.h" +#import "HVSGenerateWindowController.h" @implementation HVSDocument +//Для получения сообщения из Центра уведомлений +NSString *const HVSMyRandomNumberNotification = @"HVSMyRandomNumberNotification"; + - (id)init { self = [super init]; @@ -22,6 +26,9 @@ - (id)init [myPopulation addObserver:self forKeyPath:@"populationLengthDna" options:NSKeyValueObservingOptionOld context:@"changePopulationLengthDNA"]; [myPopulation addObserver:self forKeyPath:@"populationSize" options:NSKeyValueObservingOptionOld context:@"changePopulationSize"]; [myPopulation addObserver:self forKeyPath:@"populationRate" options:NSKeyValueObservingOptionOld context:@"changePopulationRate"]; + //Добавим себя слушателем для Центра уведомлений. Будем ожидать когда закончится генерация случайного числа. + NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; + [nc addObserver:self selector:@selector(handleRandomNumber:) name:HVSMyRandomNumberNotification object:nil]; flagPause=NO; } return self; @@ -32,6 +39,9 @@ -(void)dealloc { [myPopulation removeObserver:self forKeyPath:@"populationLengthDna"]; [myPopulation removeObserver:self forKeyPath:@"populationSize"]; [myPopulation removeObserver:self forKeyPath:@"populationRate"]; + //Уберем себя из наблюдателей + NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; + [nc removeObserver:self]; } //Доп метод -(void) changeKeyPath:(NSString *) keyPath @@ -120,9 +130,44 @@ -(void)startBackgroundEvolution { [_popButtonPause setEnabled:NO]; } +//Метод запускается когда приходит сообщение о окончании процесса генерации случайного числа +-(void)handleRandomNumber:(NSNotification *) notif { + + //в UserInfo объекта NSNotification данне о нашем случайном числе + unsigned int temp = [[notif userInfo] objectForKey:@"myRandomNumber"]; + //устанавливаем + [myPopulation setIntGenerate:temp]; + //теперь все готово и можно снова запускать эволюцию + [self buttonStart:self]; +} + -//Нажата кнопка Старт +//Метд который обрабатывает нажатие на кнопку старт. Если случ.число еще не сгенерилось, то запускаем окно генерации. +-(IBAction)buttonStartNew:(id)sender { + + if (![myPopulation intGenerate]) { + if (!generate) { + generate = [[HVSGenerateWindowController alloc] init]; + } + [generate showWindow:self]; + //как только будет сгенерировано случаное число, метод buttonStart запуститься автоматически из метода handleRandomNumber Центра сообщений + } + else { //запускаем основной процесс эволюции если случ. число уже готово. и/или нажимаем кнопку после Паузы + [self buttonStart:self]; + } + + +} + +//Нажата кнопка Старт - теперь этот метод не обрабатывает нажатие, сначала запускается buttonStartNew - (IBAction)buttonStart:(id)sender { + + //Доп. проверка + //Проверяем, если еще не генерировано число, то выходим + if (![myPopulation intGenerate]) { + return; + } + //Меняем интерфейс [_popTextSize setEnabled:NO]; diff --git a/iDNA 1.5/iDNA/HVSGenerateWindowController.h b/iDNA 1.5/iDNA/HVSGenerateWindowController.h new file mode 100644 index 0000000..00678a9 --- /dev/null +++ b/iDNA 1.5/iDNA/HVSGenerateWindowController.h @@ -0,0 +1,19 @@ +// +// HVSGenerateWindowController.h +// iDNA +// +// Created by VladIslav Khazov on 03.02.13. +// Copyright (c) 2013 VladIslav Khazov. All rights reserved. +// + +#import + +@interface HVSGenerateWindowController : NSWindowController { + //Число для random + unsigned int myRandomNumber; +} + +@property double countMoveMouse; +@property (weak) IBOutlet NSProgressIndicator *progress; + +@end diff --git a/iDNA 1.5/iDNA/HVSGenerateWindowController.m b/iDNA 1.5/iDNA/HVSGenerateWindowController.m new file mode 100644 index 0000000..3e3bbea --- /dev/null +++ b/iDNA 1.5/iDNA/HVSGenerateWindowController.m @@ -0,0 +1,80 @@ +// +// HVSGenerateWindowController.m +// iDNA +// +// Created by VladIslav Khazov on 03.02.13. +// Copyright (c) 2013 VladIslav Khazov. All rights reserved. +// + +#import "HVSGenerateWindowController.h" +#import "HVSDocument.h" + +@interface HVSGenerateWindowController () + +@end + +@implementation HVSGenerateWindowController + +- (id)initWithWindow:(NSWindow *)window +{ + self = [super initWithWindow:window]; + if (self) { + // Initialization code here. + } + + return self; +} + +-(id) init { + self =[super initWithWindowNibName:@"HVSGenerateWindowController"]; + if (self) { + //Опа, оказывается надо вызвать метод у окна, чтоб он вызвывал метод mouseMoved - значение по умолчанию - НЕТ. + [[self window] setAcceptsMouseMovedEvents:YES]; + [self setCountMoveMouse:0]; + [[self progress] stopAnimation:self]; + } + return self; +} + +//Если не двигаем мышь, останавливаем прогресс бар +-(void)stopBackgroundUpdate { + sleep(1); + [_progress stopAnimation:self]; +} + +//Так как мы унаследованы от NSResponer, перепишем его метод. +-(void)mouseMoved:(NSEvent *)theEvent { + //запускаем движение бара + [_progress startAnimation:self]; + [self setCountMoveMouse:_countMoveMouse+1]; + //Как только 100 раз двигали мышь, заканчиваем + if (_countMoveMouse <=100) { + NSPoint p = [theEvent locationInWindow]; + myRandomNumber = myRandomNumber + p.x+p.y; + //NSLog(@"currentNumber:%d",myRandomNumber); + if (_countMoveMouse==100) { + //Пошлем сообщение в центр Сообщений для обработки + NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; + //Данный ключь потом можно использовать при обращении к объекту Notification свойства userInfo как к словарю. + //Передадим наше случайно число. + NSDictionary *dictInfo = [NSDictionary dictionaryWithObject:[NSNumber numberWithUnsignedInt:myRandomNumber] forKey:@"myRandomNumber"]; + //Пошлем сообщение с вложенной информацией о нашем случайном числе. dictInfo всегда Dictionary + [nc postNotificationName:HVSMyRandomNumberNotification object:nil userInfo:dictInfo]; + } + } else { + [[self window] close]; + } +// currentPoint = [selfconvertPoint:p fromView:nil]; + //запускаем остановку + [self performSelectorInBackground:@selector(stopBackgroundUpdate) withObject:nil]; + +} + +- (void)windowDidLoad +{ + [super windowDidLoad]; + + // Implement this method to handle any initialization after your window controller's window has been loaded from its nib file. +} + +@end diff --git a/iDNA 1.5/iDNA/HVSPopulationOfDna.h b/iDNA 1.5/iDNA/HVSPopulationOfDna.h index b7ab8db..e9b4e3c 100644 --- a/iDNA 1.5/iDNA/HVSPopulationOfDna.h +++ b/iDNA 1.5/iDNA/HVSPopulationOfDna.h @@ -14,8 +14,13 @@ extern NSString *const HVSPopulationSizeKey; extern NSString *const HVSPopulationLengthDNAKey; extern NSString *const HVSPopulationRateKey; -@interface HVSPopulationOfDna : NSObject +@interface HVSPopulationOfDna : NSObject { + //Переменная для инициализации случайных чисел + unsigned int intGenerate; +} +//Переменная для инициализации случайных чисел +@property unsigned int intGenerate; //Свойства популяции ДНК, определяющие размер популяции, размер 1-ой ДНК и процент мутации. @property NSInteger populationSize; @property NSInteger populationLengthDna; @@ -51,4 +56,8 @@ extern NSString *const HVSPopulationRateKey; //Восстановление заводских настроек -(IBAction)restoreFactoryPreference:(id)sender; +//Перезапишем методы к свойству intGenerate +-(unsigned int)intGenerate; +-(void)setIntGenerate:(unsigned int)intG; + @end diff --git a/iDNA 1.5/iDNA/HVSPopulationOfDna.m b/iDNA 1.5/iDNA/HVSPopulationOfDna.m index 10989e6..3f3a294 100644 --- a/iDNA 1.5/iDNA/HVSPopulationOfDna.m +++ b/iDNA 1.5/iDNA/HVSPopulationOfDna.m @@ -46,7 +46,7 @@ +(NSInteger)preferenceRate { return [[NSUserDefaults standardUserDefaults] integerForKey:HVSPopulationRateKey]; } -//сохранение пользовательских настроек +//сохранение пользовательских настроек - уже не нужно, сделал автоматически. -(IBAction)setSavePreference:(id)sender { [HVSPopulationOfDna setPreferenceSize:[self populationSize]]; [HVSPopulationOfDna setPreferenceRate:[self populationRate]]; @@ -56,23 +56,37 @@ -(IBAction)setSavePreference:(id)sender { NSLog(@"Length:%ld",[self populationLengthDna]); } -//Восстановление заводских настроек +//Восстановление заводских настроек - вызвывается в меню "Файл" - -(IBAction)restoreFactoryPreference:(id)sender { [[NSUserDefaults standardUserDefaults] removeObjectForKey:HVSPopulationSizeKey]; [[NSUserDefaults standardUserDefaults] removeObjectForKey:HVSPopulationLengthDNAKey]; [[NSUserDefaults standardUserDefaults] removeObjectForKey:HVSPopulationRateKey]; } +//методы которые устанавливают наше число для генерации случайных чисел +-(unsigned int)intGenerate { + return intGenerate; +} + +-(void)setIntGenerate:(unsigned int)intG { + intGenerate = intG; + //вызываем srandom, что бы пересоздать генератор случайных чисел для random в методе, который используется в методе evolution, для случайного выбора метода скрещивания + srandom(intG); +} + + -(id)init { self = [super init]; if (self) { [self setPopulationLengthDna:[HVSPopulationOfDna preferenceLengthDNA]]; [self setPopulationRate:[HVSPopulationOfDna preferenceRate]]; [self setPopulationSize:[HVSPopulationOfDna preferenceSize]]; - [self setGoalDNA:[[HVSCellDna alloc]initWithLengthDna:30]]; + [self setGoalDNA:[[HVSCellDna alloc]initWithLengthDna:(int)[HVSPopulationOfDna preferenceLengthDNA]]]; [self setFlag:NO]; [self setMaxHamming:0]; [self setCountEvolution:0]; + //переменная генерации + [self setIntGenerate:nil]; } return self; } @@ -126,9 +140,9 @@ -(void)evolution { _countEvolution++; //Цикл по второй половине популяция, для их замены. for (int i=(int)_populationSize/2; i<=_populationSize-1; i++) { - //Случайный выбор метода. - int random = arc4random_uniform(3); - switch (random) { + //Случайный выбор метода. (Используем генератор полученный с помощью мышки) + //int random = arc4random_uniform(3); + switch (random() % 3) { case 0: tempDNA1 = arc4random_uniform((int)_populationSize/2); tempDNA2 = arc4random_uniform((int)_populationSize/2); diff --git a/iDNA 1.5/iDNA/en.lproj/HVSDocument.xib b/iDNA 1.5/iDNA/en.lproj/HVSDocument.xib index 0ec6bf4..0a83d3b 100644 --- a/iDNA 1.5/iDNA/en.lproj/HVSDocument.xib +++ b/iDNA 1.5/iDNA/en.lproj/HVSDocument.xib @@ -189,7 +189,7 @@ 268 {{197, 324}, {292, 21}} - + _NS:9 YES @@ -679,6 +679,30 @@ NO + + + 268 + {{20, 301}, {470, 17}} + + + _NS:1535 + YES + + 68157504 + 272630784 + * Restore the factory settings, you can in the menu 'File' - 'Restore preference'. + + LucidaGrande + 9 + 16 + + _NS:1535 + + + + + NO + {507, 413} @@ -786,14 +810,6 @@ 100203 - - - buttonStart: - - - - 100204 - buttonPause: @@ -834,6 +850,14 @@ 100278 + + + buttonStartNew: + + + + 100297 + delegate @@ -1676,6 +1700,54 @@ 29 3 + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 3 + 0 + + 4 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 5 + 0 + + 5 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + 5 @@ -1790,6 +1862,7 @@ + @@ -2455,6 +2528,34 @@ + + 100298 + + + + + + + + 100299 + + + + + 100300 + + + + + 100301 + + + + + 100302 + + + @@ -2603,15 +2704,26 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin {{133, 170}, {507, 413}} - + + + + @@ -2659,7 +2771,7 @@ - 100296 + 100302 0 diff --git a/iDNA 1.5/iDNA/en.lproj/HVSGenerateWindowController.xib b/iDNA 1.5/iDNA/en.lproj/HVSGenerateWindowController.xib new file mode 100644 index 0000000..69b9125 --- /dev/null +++ b/iDNA 1.5/iDNA/en.lproj/HVSGenerateWindowController.xib @@ -0,0 +1,254 @@ + + + + 1080 + 12C60 + 3084 + 1187.34 + 625.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 3084 + + + IBNSLayoutConstraint + NSCustomObject + NSProgressIndicator + NSUserDefaultsController + NSView + NSWindowTemplate + + + com.apple.InterfaceBuilder.CocoaPlugin + + + PluginDependencyRecalculationVersion + + + + + HVSGenerateWindowController + + + FirstResponder + + + NSApplication + + + 31 + 2 + {{252, 217}, {480, 58}} + 544735232 + Generating random numbers. Move the mouse. + NSPanel + + + + + 256 + + + + 268 + {{20, 19}, {440, 20}} + + _NS:9 + {250, 250} + 16399 + 100 + + + {480, 58} + + + + {{0, 0}, {1920, 1058}} + {10000000000000, 10000000000000} + YES + + + YES + + + + + + + window + + + + 3 + + + + progress + + + + 21 + + + + delegate + + + + 4 + + + + + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 1 + + + + + + + + 2 + + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 3 + 0 + + 3 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + + + + 5 + + + + + + 8 + + + + + 12 + + + + + 13 + + + + + 14 + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + com.apple.InterfaceBuilder.CocoaPlugin + {{357, 418}, {480, 270}} + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + 33 + + + 0 + IBCocoaFramework + YES + 3 + YES + + diff --git a/iDNA 1.5/iDNA/ru.lproj/HVSDocument.xib b/iDNA 1.5/iDNA/ru.lproj/HVSDocument.xib index f47ba6d..746d702 100644 --- a/iDNA 1.5/iDNA/ru.lproj/HVSDocument.xib +++ b/iDNA 1.5/iDNA/ru.lproj/HVSDocument.xib @@ -59,6 +59,7 @@ 268 {{17, 376}, {120, 17}} + _NS:1535 YES @@ -99,6 +100,7 @@ 268 {{17, 351}, {120, 17}} + _NS:1535 YES @@ -119,6 +121,7 @@ 268 {{17, 326}, {120, 17}} + _NS:1535 YES @@ -139,6 +142,7 @@ 268 {{211, 374}, {278, 21}} + _NS:9 YES @@ -164,6 +168,7 @@ 268 {{211, 349}, {278, 21}} + _NS:9 YES @@ -189,7 +194,8 @@ 268 {{211, 324}, {278, 21}} - + + _NS:9 YES @@ -214,6 +220,7 @@ 268 {{142, 371}, {63, 22}} + _NS:9 YES @@ -288,6 +295,7 @@ 268 {{142, 346}, {63, 22}} + _NS:9 YES @@ -347,6 +355,7 @@ 268 {{142, 321}, {63, 22}} + _NS:9 YES @@ -406,6 +415,7 @@ 268 {{20, 290}, {295, 19}} + _NS:1535 YES @@ -430,6 +440,7 @@ 268 {{23, 265}, {315, 17}} + _NS:1535 YES @@ -450,6 +461,7 @@ 268 {{20, 241}, {467, 16}} + _NS:9 YES @@ -471,6 +483,7 @@ 268 {{20, 49}, {467, 184}} + _NS:9 YES @@ -496,6 +509,7 @@ 268 {{14, 13}, {155, 32}} + _NS:9 YES @@ -520,6 +534,7 @@ 268 {{169, 13}, {77, 32}} + _NS:9 YES @@ -544,6 +559,7 @@ 268 {{299, 13}, {194, 32}} + _NS:9 YES @@ -568,6 +584,7 @@ 268 {{343, 265}, {147, 17}} + _NS:1535 YES @@ -630,6 +647,7 @@ 268 {{317, 292}, {173, 17}} + _NS:1535 YES @@ -680,9 +698,35 @@ NO + + + 268 + {{17, 301}, {473, 17}} + + + + _NS:1535 + YES + + 68157504 + 4195328 + * Восстановить заводские настройки, Вы всегда можете в меню ‘Файл’. - 'Восстановить настройки' + + LucidaGrande + 9 + 16 + + _NS:1535 + + + + + NO + {507, 413} + {{0, 0}, {1920, 1058}} @@ -787,14 +831,6 @@ 100203 - - - buttonStart: - - - - 100204 - buttonPause: @@ -835,6 +871,14 @@ 100278 + + + buttonStartNew: + + + + 100280 + delegate @@ -1453,6 +1497,38 @@ 29 3 + + + 5 + 0 + + 6 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 3 + 0 + + 3 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + 6 @@ -1501,38 +1577,6 @@ 24 3 - - - 5 - 0 - - 6 - 1 - - 8 - - 1000 - - 6 - 24 - 3 - - - - 3 - 0 - - 3 - 1 - - 0.0 - - 1000 - - 6 - 24 - 2 - 3 @@ -1581,6 +1625,38 @@ 24 3 + + + 5 + 0 + + 6 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 3 + 0 + + 3 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + 5 @@ -1613,28 +1689,28 @@ 24 3 - - - 5 + + + 6 0 - + 6 1 - 8 + 20 1000 - 6 - 24 + 8 + 29 3 - - - 3 + + + 5 0 - 3 + 5 1 20 @@ -1645,6 +1721,22 @@ 29 3 + + + 3 + 0 + + 4 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + 5 @@ -1759,6 +1851,7 @@ + @@ -2435,6 +2528,55 @@ + + 100281 + + + + + + 8 + 0 + + 0 + 1 + + 17 + + 1000 + + 3 + 9 + 1 + + + + + + 100282 + + + + + 100285 + + + + + 100289 + + + + + 100287 + + + + + 100293 + + + @@ -2585,27 +2727,42 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin {{133, 170}, {507, 413}} - + - - + + + + + - - + + @@ -2639,9 +2796,121 @@ - 100279 + 100293 + + + + + HVSDocument + NSDocument + + id + id + id + id + + + + buttonLoad: + id + + + buttonPause: + id + + + buttonStart: + id + + + buttonStartNew: + id + + + + NSButton + NSButton + NSButton + NSTextField + NSTextField + NSLevelIndicator + NSSlider + NSSlider + NSSlider + NSTextField + NSTextField + NSTextField + NSTextField + + + + popButtonLoad + NSButton + + + popButtonPause + NSButton + + + popButtonStart + NSButton + + + popLabelGeneration + NSTextField + + + popLabelMatch + NSTextField + + + popLevelMatch + NSLevelIndicator + + + popSliderLength + NSSlider + + + popSliderRate + NSSlider + + + popSliderSize + NSSlider + + + popTextGoalDna + NSTextField + + + popTextLength + NSTextField + + + popTextRate + NSTextField + + + popTextSize + NSTextField + + + + IBProjectSource + ./Classes/HVSDocument.h + + + + NSLayoutConstraint + NSObject + + IBProjectSource + ./Classes/NSLayoutConstraint.h + + + - 0 IBCocoaFramework YES diff --git a/iDNA 1.5/iDNA/ru.lproj/HVSGenerateWindowController.xib b/iDNA 1.5/iDNA/ru.lproj/HVSGenerateWindowController.xib new file mode 100644 index 0000000..adea7e9 --- /dev/null +++ b/iDNA 1.5/iDNA/ru.lproj/HVSGenerateWindowController.xib @@ -0,0 +1,286 @@ + + + + 1080 + 12C60 + 3084 + 1187.34 + 625.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 3084 + + + IBNSLayoutConstraint + NSCustomObject + NSProgressIndicator + NSUserDefaultsController + NSView + NSWindowTemplate + + + com.apple.InterfaceBuilder.CocoaPlugin + + + PluginDependencyRecalculationVersion + + + + + HVSGenerateWindowController + + + FirstResponder + + + NSApplication + + + 31 + 2 + {{196, 240}, {480, 58}} + 544735232 + Генерация случайных чисел. Двигайте мышь. + NSPanel + + + + + 256 + + + + 268 + {{20, 19}, {440, 20}} + + + _NS:9 + {250, 250} + 16399 + 100 + + + {480, 58} + + + + + {{0, 0}, {1920, 1058}} + {10000000000000, 10000000000000} + YES + + + YES + + + + + + + window + + + + 3 + + + + progress + + + + 18 + + + + delegate + + + + 4 + + + + + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 1 + + + + + + + + 2 + + + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 3 + 0 + + 3 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + + + 5 + + + + + + 8 + + + + + 12 + + + + + 13 + + + + + 14 + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + com.apple.InterfaceBuilder.CocoaPlugin + {{357, 418}, {480, 270}} + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + 32 + + + + + HVSGenerateWindowController + NSWindowController + + progress + NSProgressIndicator + + + progress + + progress + NSProgressIndicator + + + + IBProjectSource + ./Classes/HVSGenerateWindowController.h + + + + NSLayoutConstraint + NSObject + + IBProjectSource + ./Classes/NSLayoutConstraint.h + + + + + 0 + IBCocoaFramework + YES + 3 + YES + +