From 7b9503f429bfaf465e4c5985e0f541345a82b1b8 Mon Sep 17 00:00:00 2001 From: Igor Pavlov Date: Sat, 9 Feb 2013 00:00:57 +0400 Subject: [PATCH] FINAL --- README.md | 18 +- iDNA.xcodeproj/project.pbxproj | 373 ++ iDNA/Cell+hybrid.h | 18 + iDNA/Cell+hybrid.m | 110 + iDNA/Cell+mutator.h | 16 + iDNA/Cell+mutator.m | 76 + iDNA/Cell.h | 24 + iDNA/Cell.m | 142 + iDNA/Document.h | 37 + iDNA/Document.m | 311 ++ iDNA/Document.xcdatamodeld/.xccurrentversion | 8 + .../Document.xcdatamodel/contents | 4 + iDNA/en.lproj/Credits.rtf | 29 + iDNA/en.lproj/Document.xib | 3366 ++++++++++++++++ iDNA/en.lproj/InfoPlist.strings | 2 + iDNA/en.lproj/Localizable.strings | 10 + iDNA/en.lproj/MainMenu.xib | 1064 ++++++ iDNA/iDNA-Info.plist | 103 + iDNA/iDNA-Prefix.pch | 7 + iDNA/main.m | 45 + iDNA/ru.lproj/Credits.rtf | 29 + iDNA/ru.lproj/Document.xib | 3368 +++++++++++++++++ iDNA/ru.lproj/InfoPlist.strings | 2 + iDNA/ru.lproj/Localizable.strings | 10 + iDNA/ru.lproj/MainMenu.xib | 1064 ++++++ 25 files changed, 10221 insertions(+), 15 deletions(-) create mode 100644 iDNA.xcodeproj/project.pbxproj create mode 100644 iDNA/Cell+hybrid.h create mode 100644 iDNA/Cell+hybrid.m create mode 100644 iDNA/Cell+mutator.h create mode 100644 iDNA/Cell+mutator.m create mode 100644 iDNA/Cell.h create mode 100644 iDNA/Cell.m create mode 100644 iDNA/Document.h create mode 100644 iDNA/Document.m create mode 100644 iDNA/Document.xcdatamodeld/.xccurrentversion create mode 100644 iDNA/Document.xcdatamodeld/Document.xcdatamodel/contents create mode 100644 iDNA/en.lproj/Credits.rtf create mode 100644 iDNA/en.lproj/Document.xib create mode 100644 iDNA/en.lproj/InfoPlist.strings create mode 100644 iDNA/en.lproj/Localizable.strings create mode 100644 iDNA/en.lproj/MainMenu.xib create mode 100644 iDNA/iDNA-Info.plist create mode 100644 iDNA/iDNA-Prefix.pch create mode 100644 iDNA/main.m create mode 100644 iDNA/ru.lproj/Credits.rtf create mode 100644 iDNA/ru.lproj/Document.xib create mode 100644 iDNA/ru.lproj/InfoPlist.strings create mode 100644 iDNA/ru.lproj/Localizable.strings create mode 100644 iDNA/ru.lproj/MainMenu.xib diff --git a/README.md b/README.md index 36abdc1..58d96e8 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,4 @@ -# Проект 4 +osx-project-3 +============= -## Один из двух вариантов на ваш выбор: - -### Вариант 1. Собственное приложение -1. Необходимо закончить разработку приложения и выложить исполняемый файл (готовый продукт) -2. Ваше приложение должно запускаться. -3. Нужно сдать весь проект (project-файл, файлы-ресурсы, .xib-файл и так далее – всю папку). - -### Вариант 2. iDNA - -1. Добавить локализацию (русский язык или английский если изначально был русский). -2. Добавить всплывающие окна для подтверждения открытия, сохранения файлов и закрытия приложения. -3. Сохранять настройки эволюции в системе (user defaults) и загружать их при новом запуске приложения. -4. Использовать движение мыши в качестве источника случайности. Перед стартом эволюции пользователю должен совершить несколько движений мышью; координаты курсора будут использоваться в качестве некоторых исходных данных для генератора случайных чисел. Сбор этих координат должен отоброжаться прогресс-баром. - +OS X Development Course, Project 3 \ No newline at end of file diff --git a/iDNA.xcodeproj/project.pbxproj b/iDNA.xcodeproj/project.pbxproj new file mode 100644 index 0000000..75f19ca --- /dev/null +++ b/iDNA.xcodeproj/project.pbxproj @@ -0,0 +1,373 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 78096E8116C58C2600FCD2BF /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 78096E8316C58C2600FCD2BF /* Localizable.strings */; }; + 78621305168A004B00D1E070 /* Cell+hybrid.m in Sources */ = {isa = PBXBuildFile; fileRef = 78621304168A004B00D1E070 /* Cell+hybrid.m */; }; + 78B136231688EC0400EBA2DB /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 78B136221688EC0400EBA2DB /* Cocoa.framework */; }; + 78B1362D1688EC0400EBA2DB /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 78B1362B1688EC0400EBA2DB /* InfoPlist.strings */; }; + 78B1362F1688EC0400EBA2DB /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 78B1362E1688EC0400EBA2DB /* main.m */; }; + 78B136331688EC0400EBA2DB /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = 78B136311688EC0400EBA2DB /* Credits.rtf */; }; + 78B136361688EC0400EBA2DB /* Document.m in Sources */ = {isa = PBXBuildFile; fileRef = 78B136351688EC0400EBA2DB /* Document.m */; }; + 78B136391688EC0400EBA2DB /* Document.xib in Resources */ = {isa = PBXBuildFile; fileRef = 78B136371688EC0400EBA2DB /* Document.xib */; }; + 78B1363C1688EC0500EBA2DB /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 78B1363A1688EC0500EBA2DB /* MainMenu.xib */; }; + 78B1363F1688EC0500EBA2DB /* Document.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 78B1363D1688EC0500EBA2DB /* Document.xcdatamodeld */; }; + 78B13659168913CA00EBA2DB /* Cell.m in Sources */ = {isa = PBXBuildFile; fileRef = 78B13657168913CA00EBA2DB /* Cell.m */; }; + 78B1365A168913CA00EBA2DB /* Cell+mutator.m in Sources */ = {isa = PBXBuildFile; fileRef = 78B13658168913CA00EBA2DB /* Cell+mutator.m */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 78096E7D16C58B1F00FCD2BF /* ru */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ru; path = ru.lproj/Document.xib; sourceTree = ""; }; + 78096E7E16C58B1F00FCD2BF /* ru */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ru; path = ru.lproj/MainMenu.xib; sourceTree = ""; }; + 78096E7F16C58B1F00FCD2BF /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/InfoPlist.strings; sourceTree = ""; }; + 78096E8016C58B1F00FCD2BF /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = ru; path = ru.lproj/Credits.rtf; sourceTree = ""; }; + 78096E8216C58C2600FCD2BF /* ru */ = {isa = PBXFileReference; lastKnownFileType = file; name = ru; path = ru.lproj/Localizable.strings; sourceTree = ""; }; + 78096E8416C58C2C00FCD2BF /* en */ = {isa = PBXFileReference; lastKnownFileType = file; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; + 78621303168A004B00D1E070 /* Cell+hybrid.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Cell+hybrid.h"; sourceTree = ""; }; + 78621304168A004B00D1E070 /* Cell+hybrid.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "Cell+hybrid.m"; sourceTree = ""; }; + 78B1361E1688EC0400EBA2DB /* iDNA.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = iDNA.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 78B136221688EC0400EBA2DB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; + 78B136251688EC0400EBA2DB /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; }; + 78B136261688EC0400EBA2DB /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; }; + 78B136271688EC0400EBA2DB /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + 78B1362A1688EC0400EBA2DB /* iDNA-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "iDNA-Info.plist"; sourceTree = ""; }; + 78B1362C1688EC0400EBA2DB /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; + 78B1362E1688EC0400EBA2DB /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + 78B136301688EC0400EBA2DB /* iDNA-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "iDNA-Prefix.pch"; sourceTree = ""; }; + 78B136321688EC0400EBA2DB /* en */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = en; path = en.lproj/Credits.rtf; sourceTree = ""; }; + 78B136341688EC0400EBA2DB /* Document.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Document.h; sourceTree = ""; }; + 78B136351688EC0400EBA2DB /* Document.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Document.m; sourceTree = ""; }; + 78B136381688EC0400EBA2DB /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/Document.xib; sourceTree = ""; }; + 78B1363E1688EC0500EBA2DB /* Document.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = Document.xcdatamodel; sourceTree = ""; }; + 78B13655168913CA00EBA2DB /* Cell+mutator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Cell+mutator.h"; sourceTree = ""; }; + 78B13656168913CA00EBA2DB /* Cell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Cell.h; sourceTree = ""; }; + 78B13657168913CA00EBA2DB /* Cell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Cell.m; sourceTree = ""; }; + 78B13658168913CA00EBA2DB /* Cell+mutator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "Cell+mutator.m"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 78B1361B1688EC0400EBA2DB /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 78B136231688EC0400EBA2DB /* Cocoa.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 78B136131688EC0400EBA2DB = { + isa = PBXGroup; + children = ( + 78B136281688EC0400EBA2DB /* iDNA */, + 78B136211688EC0400EBA2DB /* Frameworks */, + 78B1361F1688EC0400EBA2DB /* Products */, + ); + sourceTree = ""; + }; + 78B1361F1688EC0400EBA2DB /* Products */ = { + isa = PBXGroup; + children = ( + 78B1361E1688EC0400EBA2DB /* iDNA.app */, + ); + name = Products; + sourceTree = ""; + }; + 78B136211688EC0400EBA2DB /* Frameworks */ = { + isa = PBXGroup; + children = ( + 78B136221688EC0400EBA2DB /* Cocoa.framework */, + 78B136241688EC0400EBA2DB /* Other Frameworks */, + ); + name = Frameworks; + sourceTree = ""; + }; + 78B136241688EC0400EBA2DB /* Other Frameworks */ = { + isa = PBXGroup; + children = ( + 78B136251688EC0400EBA2DB /* AppKit.framework */, + 78B136261688EC0400EBA2DB /* CoreData.framework */, + 78B136271688EC0400EBA2DB /* Foundation.framework */, + ); + name = "Other Frameworks"; + sourceTree = ""; + }; + 78B136281688EC0400EBA2DB /* iDNA */ = { + isa = PBXGroup; + children = ( + 78B13656168913CA00EBA2DB /* Cell.h */, + 78B13657168913CA00EBA2DB /* Cell.m */, + 78B13655168913CA00EBA2DB /* Cell+mutator.h */, + 78B13658168913CA00EBA2DB /* Cell+mutator.m */, + 78621303168A004B00D1E070 /* Cell+hybrid.h */, + 78621304168A004B00D1E070 /* Cell+hybrid.m */, + 78B136341688EC0400EBA2DB /* Document.h */, + 78B136351688EC0400EBA2DB /* Document.m */, + 78096E8316C58C2600FCD2BF /* Localizable.strings */, + 78B136371688EC0400EBA2DB /* Document.xib */, + 78B1363A1688EC0500EBA2DB /* MainMenu.xib */, + 78B1363D1688EC0500EBA2DB /* Document.xcdatamodeld */, + 78B136291688EC0400EBA2DB /* Supporting Files */, + ); + path = iDNA; + sourceTree = ""; + }; + 78B136291688EC0400EBA2DB /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 78B1362A1688EC0400EBA2DB /* iDNA-Info.plist */, + 78B1362B1688EC0400EBA2DB /* InfoPlist.strings */, + 78B1362E1688EC0400EBA2DB /* main.m */, + 78B136301688EC0400EBA2DB /* iDNA-Prefix.pch */, + 78B136311688EC0400EBA2DB /* Credits.rtf */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 78B1361D1688EC0400EBA2DB /* iDNA */ = { + isa = PBXNativeTarget; + buildConfigurationList = 78B136421688EC0500EBA2DB /* Build configuration list for PBXNativeTarget "iDNA" */; + buildPhases = ( + 78B1361A1688EC0400EBA2DB /* Sources */, + 78B1361B1688EC0400EBA2DB /* Frameworks */, + 78B1361C1688EC0400EBA2DB /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = iDNA; + productName = iDNA; + productReference = 78B1361E1688EC0400EBA2DB /* iDNA.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 78B136151688EC0400EBA2DB /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0450; + ORGANIZATIONNAME = "Igor Pavlov"; + }; + buildConfigurationList = 78B136181688EC0400EBA2DB /* Build configuration list for PBXProject "iDNA" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ru, + ); + mainGroup = 78B136131688EC0400EBA2DB; + productRefGroup = 78B1361F1688EC0400EBA2DB /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 78B1361D1688EC0400EBA2DB /* iDNA */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 78B1361C1688EC0400EBA2DB /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 78B1362D1688EC0400EBA2DB /* InfoPlist.strings in Resources */, + 78B136331688EC0400EBA2DB /* Credits.rtf in Resources */, + 78B136391688EC0400EBA2DB /* Document.xib in Resources */, + 78B1363C1688EC0500EBA2DB /* MainMenu.xib in Resources */, + 78096E8116C58C2600FCD2BF /* Localizable.strings in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 78B1361A1688EC0400EBA2DB /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 78B1362F1688EC0400EBA2DB /* main.m in Sources */, + 78B136361688EC0400EBA2DB /* Document.m in Sources */, + 78B1363F1688EC0500EBA2DB /* Document.xcdatamodeld in Sources */, + 78B13659168913CA00EBA2DB /* Cell.m in Sources */, + 78B1365A168913CA00EBA2DB /* Cell+mutator.m in Sources */, + 78621305168A004B00D1E070 /* Cell+hybrid.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 78096E8316C58C2600FCD2BF /* Localizable.strings */ = { + isa = PBXVariantGroup; + children = ( + 78096E8216C58C2600FCD2BF /* ru */, + 78096E8416C58C2C00FCD2BF /* en */, + ); + name = Localizable.strings; + sourceTree = ""; + }; + 78B1362B1688EC0400EBA2DB /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + 78B1362C1688EC0400EBA2DB /* en */, + 78096E7F16C58B1F00FCD2BF /* ru */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; + 78B136311688EC0400EBA2DB /* Credits.rtf */ = { + isa = PBXVariantGroup; + children = ( + 78B136321688EC0400EBA2DB /* en */, + 78096E8016C58B1F00FCD2BF /* ru */, + ); + name = Credits.rtf; + sourceTree = ""; + }; + 78B136371688EC0400EBA2DB /* Document.xib */ = { + isa = PBXVariantGroup; + children = ( + 78B136381688EC0400EBA2DB /* en */, + 78096E7D16C58B1F00FCD2BF /* ru */, + ); + name = Document.xib; + sourceTree = ""; + }; + 78B1363A1688EC0500EBA2DB /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + 78096E7E16C58B1F00FCD2BF /* ru */, + ); + name = MainMenu.xib; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 78B136401688EC0500EBA2DB /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.8; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + }; + name = Debug; + }; + 78B136411688EC0500EBA2DB /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.8; + SDKROOT = macosx; + }; + name = Release; + }; + 78B136431688EC0500EBA2DB /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COMBINE_HIDPI_IMAGES = YES; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "iDNA/iDNA-Prefix.pch"; + INFOPLIST_FILE = "iDNA/iDNA-Info.plist"; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = app; + }; + name = Debug; + }; + 78B136441688EC0500EBA2DB /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + COMBINE_HIDPI_IMAGES = YES; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "iDNA/iDNA-Prefix.pch"; + INFOPLIST_FILE = "iDNA/iDNA-Info.plist"; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = app; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 78B136181688EC0400EBA2DB /* Build configuration list for PBXProject "iDNA" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 78B136401688EC0500EBA2DB /* Debug */, + 78B136411688EC0500EBA2DB /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 78B136421688EC0500EBA2DB /* Build configuration list for PBXNativeTarget "iDNA" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 78B136431688EC0500EBA2DB /* Debug */, + 78B136441688EC0500EBA2DB /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + +/* Begin XCVersionGroup section */ + 78B1363D1688EC0500EBA2DB /* Document.xcdatamodeld */ = { + isa = XCVersionGroup; + children = ( + 78B1363E1688EC0500EBA2DB /* Document.xcdatamodel */, + ); + currentVersion = 78B1363E1688EC0500EBA2DB /* Document.xcdatamodel */; + path = Document.xcdatamodeld; + sourceTree = ""; + versionGroupType = wrapper.xcdatamodel; + }; +/* End XCVersionGroup section */ + }; + rootObject = 78B136151688EC0400EBA2DB /* Project object */; +} diff --git a/iDNA/Cell+hybrid.h b/iDNA/Cell+hybrid.h new file mode 100644 index 0000000..c2ed86d --- /dev/null +++ b/iDNA/Cell+hybrid.h @@ -0,0 +1,18 @@ +// +// Cell+mutator.h +// dna +// +// Created by Igor Pavlov on 03.11.12. +// Copyright (c) 2012 Igor Pavlov. All rights reserved. +// + +#import "Cell.h" + + +@interface Cell (hybrid) + + ++ (Cell*) makeHybridWith:(Cell*)a andWith:(Cell*)b; + + +@end diff --git a/iDNA/Cell+hybrid.m b/iDNA/Cell+hybrid.m new file mode 100644 index 0000000..4337db3 --- /dev/null +++ b/iDNA/Cell+hybrid.m @@ -0,0 +1,110 @@ +// +// Cell+mutator.m +// dna +// +// Created by Igor Pavlov on 03.11.12. +// Copyright (c) 2012 Igor Pavlov. All rights reserved. +// + +#import "Cell+hybrid.h" + + +@implementation Cell (hybrid) + + ++ (Cell*) makeHybrid0With:(Cell*)a andWith:(Cell*)b +{ + const NSUInteger dnaLength = [a->dna length]; + + NSMutableString *newDna = [NSMutableString stringWithCapacity:dnaLength]; + + [newDna appendString:[a->dna substringToIndex:dnaLength/2]]; + [newDna appendString:[b->dna substringFromIndex:dnaLength/2]]; + + return [[Cell alloc] initWithDnaString:newDna]; +} + + ++ (Cell*) makeHybrid1With:(Cell*)a andWith:(Cell*)b +{ + const NSUInteger dnaLength = [a->dna length]; + + NSMutableString *newDna = [NSMutableString stringWithCapacity:dnaLength]; + + for (NSUInteger i = 0; i != dnaLength; ++i) + { + const NSUInteger curPercent = 100*i/(dnaLength - 1); + if (curPercent & 1) + [newDna appendString:[b->dna substringWithRange:NSMakeRange(i, 1)]]; + else + [newDna appendString:[a->dna substringWithRange:NSMakeRange(i, 1)]]; + } + + return [[Cell alloc] initWithDnaString:newDna]; +} + + ++ (Cell*) makeHybrid2With:(Cell*)a andWith:(Cell*)b +{ + const NSUInteger dnaLength = [a->dna length]; + + NSMutableString *newDna = [NSMutableString stringWithCapacity:dnaLength]; + + const NSUInteger i0 = 20*dnaLength/100; + const NSUInteger l1 = 60*dnaLength/100; + const NSUInteger i2 = i0 + l1; + + [newDna appendString:[a->dna substringToIndex:i0]]; + [newDna appendString:[b->dna substringWithRange:NSMakeRange(i0, l1)]]; + [newDna appendString:[a->dna substringFromIndex:i2]]; + + return [[Cell alloc] initWithDnaString:newDna]; +} + + ++ (Cell*) makeHybrid3With:(Cell*)a andWith:(Cell*)b +{ + const NSUInteger dnaLength = [a->dna length]; + + NSMutableString *newDna = [NSMutableString stringWithCapacity:dnaLength]; + + for (NSUInteger i = 0; i != dnaLength; ++i) + { + if (i & 1) + [newDna appendString:[b->dna substringWithRange:NSMakeRange(i, 1)]]; + else + [newDna appendString:[a->dna substringWithRange:NSMakeRange(i, 1)]]; + } + + return [[Cell alloc] initWithDnaString:newDna]; +} + + ++ (Cell*) makeHybridWith:(Cell*)a andWith:(Cell*)b +{ + if (!a || !b) + return nil; + + if ([a->dna length] != [b->dna length]) + return nil; + + const NSUInteger method = arc4random_uniform(4); + switch (method) + { + case 0: + return [Cell makeHybrid0With:a andWith:b]; + + case 1: + return [Cell makeHybrid1With:a andWith:b]; + + case 2: + return [Cell makeHybrid2With:a andWith:b]; + + case 3: + return [Cell makeHybrid3With:a andWith:b]; + } + + return nil; +} + +@end diff --git a/iDNA/Cell+mutator.h b/iDNA/Cell+mutator.h new file mode 100644 index 0000000..1d4e2c5 --- /dev/null +++ b/iDNA/Cell+mutator.h @@ -0,0 +1,16 @@ +// +// Cell+mutator.h +// dna +// +// Created by Igor Pavlov on 03.11.12. +// Copyright (c) 2012 Igor Pavlov. All rights reserved. +// + +#import "Cell.h" + + +@interface Cell (mutator) + +- (void) mutate:(NSUInteger)percent; + +@end diff --git a/iDNA/Cell+mutator.m b/iDNA/Cell+mutator.m new file mode 100644 index 0000000..73eac7b --- /dev/null +++ b/iDNA/Cell+mutator.m @@ -0,0 +1,76 @@ +// +// Cell+mutator.m +// dna +// +// Created by Igor Pavlov on 03.11.12. +// Copyright (c) 2012 Igor Pavlov. All rights reserved. +// + +#import "Cell+mutator.h" + + +@implementation Cell (mutator) + + +- (void) mutate:(NSUInteger)percent +{ + const NSUInteger maxPercent = 100; + + // проверка на правильность аргумента + if (percent > maxPercent) + @throw [NSException exceptionWithName:NSRangeException reason:@"argument is out of [0..100] range" userInfo:nil]; + + // если задано изменение 0%, то ничего делать не надо, сразу выход + if (0 == percent) + return; + + const NSUInteger dnaLength = [dna length]; + + // создать массив флагов и зарезервировать в нем место + NSMutableArray *mutationFlags = [NSMutableArray arrayWithCapacity:dnaLength]; + + // количество символов к мутации + const NSUInteger mutationIndexCount = dnaLength*percent/maxPercent; + + // заполнить флаги + for (NSUInteger i = 0; i != mutationIndexCount; ++i) + [mutationFlags addObject:[NSNumber numberWithBool:YES]]; + + for (NSUInteger i = mutationIndexCount; i != dnaLength; ++i) + [mutationFlags addObject:[NSNumber numberWithBool:NO]]; + + // если мутация затрагивает менее 100% символов, перемешать флаги для случайности изменений + if (mutationIndexCount < dnaLength) + { + // перемешивание + for (NSUInteger i = 0; i != mutationIndexCount; ++i) + { + const NSUInteger j = i + arc4random_uniform((u_int32_t)(dnaLength - i)); + [mutationFlags exchangeObjectAtIndex:i withObjectAtIndex:j]; + } + } + + const NSString *nucleotides = [Cell getNucleotides]; + const NSUInteger nucleotideCount = [nucleotides length]; + + NSMutableString *newDna = [NSMutableString stringWithCapacity:dnaLength]; + + for (NSUInteger i = 0; i != dnaLength; ++i) + { + NSString *c = [dna substringWithRange:NSMakeRange(i, 1)]; + if ([[mutationFlags objectAtIndex:i] boolValue]) + { + const NSUInteger curNucleotideIndex = [nucleotides rangeOfString:c].location; + NSAssert(NSNotFound != curNucleotideIndex, @"curNucleotideIndex = %lu", curNucleotideIndex); + const NSUInteger newNucleotideIndex = (curNucleotideIndex + 1 + arc4random_uniform((u_int32_t)(nucleotideCount - 1))) % nucleotideCount; + NSAssert(newNucleotideIndex < nucleotideCount, @"newNucleotideIndex = %lu", newNucleotideIndex); + NSAssert(newNucleotideIndex != curNucleotideIndex, @"newNucleotideIndex = %lu", newNucleotideIndex); + c = [nucleotides substringWithRange:NSMakeRange(newNucleotideIndex, 1)]; + } + [newDna appendString:c]; + } + + dna = newDna; +} + +@end diff --git a/iDNA/Cell.h b/iDNA/Cell.h new file mode 100644 index 0000000..c288eb5 --- /dev/null +++ b/iDNA/Cell.h @@ -0,0 +1,24 @@ +// +// Cell.h +// dna +// +// Created by Igor Pavlov on 02.11.12. +// Copyright (c) 2012 Igor Pavlov. All rights reserved. +// + +#import + + +@interface Cell : NSObject +{ + NSString *dna; +} + ++ (NSString*) getNucleotides; + +- (id) init __attribute__((unavailable("init not available"))); +- (id) initWithSize:(NSUInteger)size; +- (id) initWithDnaString:(NSString*)dnaStr; +- (NSUInteger) hammingDistance:(Cell*)otherCell; + +@end diff --git a/iDNA/Cell.m b/iDNA/Cell.m new file mode 100644 index 0000000..10e4370 --- /dev/null +++ b/iDNA/Cell.m @@ -0,0 +1,142 @@ +// +// Cell.m +// dna +// +// Created by Igor Pavlov on 02.11.12. +// Copyright (c) 2012 Igor Pavlov. All rights reserved. +// + +#import "Cell.h" + + +@implementation Cell + + ++ (NSString*) getNucleotides +{ + // алфавит, составляющий ДНК + static NSString *nucleotides = @"ATGC"; + return nucleotides; +} + + +- (id) init +{ + [super doesNotRecognizeSelector:_cmd]; + return nil; +} + + +- (id) initWithSize:(NSUInteger)size +{ + if (self = [super init]) + { + // создать массив ДНК и зарезервировать в нем место + NSMutableString *newDna = [NSMutableString stringWithCapacity:size]; + if (!newDna) + return nil; + + NSString *nucleotides = [Cell getNucleotides]; + const NSUInteger nucleotideCount = [nucleotides length]; + + // проинициализировать массив ДНК случайными символами нуклеотидов из заданного алфавита + for (NSUInteger i = 0; i != size; ++i) + { + const NSUInteger randCharIdx = arc4random_uniform((u_int32_t)nucleotideCount); + const unichar c = [nucleotides characterAtIndex:randCharIdx]; + [newDna appendString:[NSString stringWithCharacters:&c length:1]]; + } + + dna = newDna; + } + return self; +} + + +- (id) initWithDnaString:(NSString*)dnaStr +{ + if (!dnaStr) + return nil; + + if (self = [super init]) + { + NSString *nucleotides = [Cell getNucleotides]; + NSCharacterSet *invalidChars = [[NSCharacterSet characterSetWithCharactersInString:nucleotides] invertedSet]; + if (!invalidChars) + return nil; + + dnaStr = [dnaStr uppercaseString]; + + if (NSNotFound != [dnaStr rangeOfCharacterFromSet:invalidChars].location) + return nil; + + dna = dnaStr; + } + + return self; +} + + +- (void) encodeWithCoder:(NSCoder *)aCoder +{ + [aCoder encodeObject:dna]; +} + + +- (id) initWithCoder:(NSCoder *)aDecoder +{ + if (self = [super init]) + dna = [aDecoder decodeObject]; + return self; +} + + +- (NSUInteger) hammingDistance:(Cell*)otherCell +{ + // проверка на правильность аргумента + if (!otherCell) + @throw [NSException exceptionWithName:NSInvalidArgumentException reason:@"Null argument" userInfo:nil]; + + const NSUInteger dnaLength = [dna length]; + const NSUInteger otherDnaLength = [otherCell->dna length]; + + const NSUInteger minLength = MIN(dnaLength, otherDnaLength); + const NSUInteger maxLength = MAX(dnaLength, otherDnaLength); + + NSUInteger distance = 0; + + for (NSUInteger i = 0; i != minLength; ++i) + { + const unichar l = [dna characterAtIndex:i]; + const unichar r = [otherCell->dna characterAtIndex:i]; + if (l != r) + ++distance; + } + + distance += maxLength - minLength; + + return distance; +} + + +- (NSString*) description +{ + return dna; +} + + +- (id) copyWithZone:(NSZone *)zone +{ + Cell *copy = [[[self class] allocWithZone:zone] init]; + if (!copy) + return nil; + + copy->dna = [dna mutableCopyWithZone:zone]; + if (!copy->dna) + return nil; + + return copy; +} + + +@end diff --git a/iDNA/Document.h b/iDNA/Document.h new file mode 100644 index 0000000..861c923 --- /dev/null +++ b/iDNA/Document.h @@ -0,0 +1,37 @@ +// +// Document.h +// iDNA +// +// Created by Igor Pavlov on 25.12.12. +// Copyright (c) 2012 Igor Pavlov. All rights reserved. +// + +#import + +@class Cell; + +@interface Document : NSDocument +{ + Cell *_goalDna; + NSInteger _dnaLength; +} + +@property NSInteger dnaLength; +@property NSInteger populationSize; +@property (atomic) NSUInteger mutationRate; +@property NSString* goalDnaString; +@property (atomic) NSInteger generationRound; +@property (atomic) double bestDnaMatch; +@property (atomic) Boolean evolutionStarted; +@property (atomic) Boolean breakEvolution; +@property (atomic) Boolean prepareEvolution; +@property (atomic) float randomizationProgress; + + +- (IBAction) onStartEvolution:(id)sender; +- (IBAction) onPause:(id)sender; +- (IBAction) onLoadGoalDna:(id)sender; + +- (void) evolutionMainMethod:(id)arg; + +@end diff --git a/iDNA/Document.m b/iDNA/Document.m new file mode 100644 index 0000000..e220a29 --- /dev/null +++ b/iDNA/Document.m @@ -0,0 +1,311 @@ +// +// Document.m +// iDNA +// +// Created by Igor Pavlov on 25.12.12. +// Copyright (c) 2012 Igor Pavlov. All rights reserved. +// + +#import "Document.h" +#import "Cell.h" +#import "Cell+mutator.h" +#import "Cell+hybrid.h" + + +@implementation Document + ++ (void) initialize +{ + NSMutableDictionary *defaultValues = [NSMutableDictionary dictionary]; + + [defaultValues setObject:[NSNumber numberWithInteger:10000] forKey:@"MaxPopulationSize"]; + [defaultValues setObject:[NSNumber numberWithInteger:1] forKey:@"MinPopulationSize"]; + + [defaultValues setObject:[NSNumber numberWithInteger:256] forKey:@"MaxDnaLength"]; + [defaultValues setObject:[NSNumber numberWithInteger:1] forKey:@"MinDnaLength"]; + + [defaultValues setObject:[NSNumber numberWithInteger:100] forKey:@"MaxMutationRate"]; + [defaultValues setObject:[NSNumber numberWithInteger:0] forKey:@"MinMutationRate"]; + + [[NSUserDefaults standardUserDefaults] registerDefaults:defaultValues]; +} + + +- (id)init +{ + self = [super init]; + if (self) + { + self.goalDnaString = @""; + [self setValue:[NSNumber numberWithInteger:10] forKey:@"populationSize"]; + [self setValue:[NSNumber numberWithInteger:42] forKey:@"dnaLength"]; + [self setValue:[NSNumber numberWithInteger:1] forKey:@"mutationRate"]; + self.generationRound = 0; + self.bestDnaMatch = 0; + self.evolutionStarted = NO; + self.breakEvolution = NO; + } + return self; +} + + +- (NSString *)windowNibName +{ + return @"Document"; +} + + +- (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. +} + + ++ (BOOL) autosavesInPlace +{ + return YES; +} + + +- (NSData*) dataOfType:(NSString *)typeName error:(NSError **)outError +{ + NSMutableData *data = [[NSMutableData alloc] init]; + NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data]; + + [archiver encodeObject:_goalDna forKey:@"goalDna"]; + + [archiver encodeInteger:_dnaLength forKey:@"dnaLength"]; + [archiver encodeInteger:_populationSize forKey:@"populationSize"]; + [archiver encodeInteger:_mutationRate forKey:@"mutationRate"]; + + [archiver encodeInteger:_generationRound forKey:@"generationRound"]; + [archiver encodeDouble:_bestDnaMatch forKey:@"bestDnaMatch"]; + + [archiver finishEncoding]; + + return data; +} + + +- (BOOL) readFromData:(NSData *)data ofType:(NSString *)typeName error:(NSError **)outError +{ + @try + { + [self willChangeValueForKey:@"goalDna"]; + + [self willChangeValueForKey:@"dnaLength"]; + [self willChangeValueForKey:@"populationSize"]; + [self willChangeValueForKey:@"mutationRate"]; + + [self willChangeValueForKey:@"generationRound"]; + [self willChangeValueForKey:@"bestDnaMatch"]; + + NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data]; + + _goalDna = [unarchiver decodeObjectForKey:@"goalDna"]; + + _dnaLength = [unarchiver decodeIntegerForKey:@"dnaLength"]; + _populationSize = [unarchiver decodeIntegerForKey:@"populationSize"]; + _mutationRate = [unarchiver decodeIntegerForKey:@"mutationRate"]; + + _generationRound = [unarchiver decodeIntegerForKey:@"generationRound"]; + _bestDnaMatch = [unarchiver decodeDoubleForKey:@"bestDnaMatch"]; + + [unarchiver finishDecoding]; + + [self didChangeValueForKey:@"goalDna"]; + + [self didChangeValueForKey:@"dnaLength"]; + [self didChangeValueForKey:@"populationSize"]; + [self didChangeValueForKey:@"mutationRate"]; + + [self didChangeValueForKey:@"generationRound"]; + [self didChangeValueForKey:@"bestDnaMatch"]; + + if (_goalDna) + self.goalDnaString = [_goalDna description]; + } + @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; + } + + return YES; +} + + +- (void) setDnaLength:(NSInteger)dl +{ + _dnaLength = dl; + self.goalDna = [[Cell alloc] initWithSize:_dnaLength]; +} + + +- (NSInteger) dnaLength +{ + return _dnaLength; +} + + +- (void) setGoalDna:(Cell*)cell +{ + _goalDna = cell; + if (_goalDna) + self.goalDnaString = [_goalDna description]; +} + + +- (IBAction) onStartEvolution:(id)sender +{ + self.randomizationProgress = 0; + self.prepareEvolution = YES; + + NSAlert *a = [NSAlert alertWithMessageText:nil + defaultButton:nil + alternateButton:nil + otherButton:nil + informativeTextWithFormat:NSLocalizedString(@"RANDOMIZE", @"Randomize")]; + [a runModal]; + + self.evolutionStarted = YES; + self.breakEvolution = NO; + + [self performSelectorInBackground:@selector(evolutionMainMethod:) withObject:nil]; +} + + +- (IBAction) onPause:(id)sender +{ + self.breakEvolution = YES; +} + + +- (IBAction) onLoadGoalDna:(id)sender +{ + NSOpenPanel *openDlg = [NSOpenPanel openPanel]; + + [openDlg setCanChooseFiles:YES]; + [openDlg setCanChooseDirectories:NO]; + [openDlg setCanCreateDirectories:NO]; + [openDlg setPrompt:@"Select DNA goal file"]; + [openDlg setAllowsMultipleSelection:NO]; + [openDlg setAllowedFileTypes:@[@"txt", @"dna"]]; + + if (NSOKButton != [openDlg runModal]) + return; + + NSString *dnaStr = [NSString stringWithContentsOfURL:[openDlg URL] encoding:NSASCIIStringEncoding error:nil]; + if (!dnaStr) + return; + + const NSInteger maxDnaLength = [[NSUserDefaults standardUserDefaults] integerForKey:@"MaxDnaLength"]; + if ([dnaStr length] > maxDnaLength) + return; + + Cell *newGoalDna = [[Cell alloc] initWithDnaString:dnaStr]; + if (!newGoalDna) + return; + + self.dnaLength = [[newGoalDna description] length]; + self.goalDna = newGoalDna; +} + + +- (void) evolutionMainMethod:(id)arg +{ + self.generationRound = 0; + + NSPoint prevMouseLoc = [NSEvent mouseLocation]; + + NSMutableArray *population = nil; + + while (!self.breakEvolution) + { + if (self.prepareEvolution) + { + NSPoint const currMouseLoc = [NSEvent mouseLocation]; + float const dx = currMouseLoc.x - prevMouseLoc.x; + float const dy = currMouseLoc.y - prevMouseLoc.y; + + prevMouseLoc = currMouseLoc; + + float const delta = hypotf(dx, dy); + self.randomizationProgress += delta; + + if (dx != 0) + arc4random_addrandom((unsigned char*)&dx, sizeof(dx)); + if (dy != 0) + arc4random_addrandom((unsigned char*)&dy, sizeof(dy)); + + if (self.randomizationProgress > 1000) + { + self.prepareEvolution = NO; + self.randomizationProgress = 0; + + population = [NSMutableArray arrayWithCapacity:self.populationSize]; + if (!population) + break; + + for (NSInteger i = 0; i != self.populationSize; ++i) + { + Cell *newDna = [[Cell alloc] initWithSize:self.dnaLength]; + [population addObject:newDna]; + } + } + else + { + [NSThread sleepForTimeInterval:0.1]; + } + } + else + { + [population sortUsingComparator:^ NSComparisonResult(Cell *lhs, Cell *rhs) + { + const NSInteger ld = [lhs hammingDistance:_goalDna]; + const NSInteger rd = [rhs hammingDistance:_goalDna]; + + if (ld < rd) + return NSOrderedAscending; + + if (ld > rd) + return NSOrderedDescending; + + return NSOrderedSame; + } + ]; + + const NSUInteger minDistance = [[population objectAtIndex:0] hammingDistance:_goalDna]; + self.bestDnaMatch = 1.0 - (double)minDistance/_dnaLength; + if (0 == minDistance) + break; + + const NSUInteger hybridizationStartIndex = self.populationSize/2; + for (NSUInteger i = hybridizationStartIndex; i != self.populationSize; ++i) + { + const NSUInteger i1 = hybridizationStartIndex > 0 ? arc4random_uniform((u_int32_t)hybridizationStartIndex) : 0; + const NSUInteger i2 = hybridizationStartIndex > 0 ? arc4random_uniform((u_int32_t)hybridizationStartIndex) : 0; + Cell *a = [population objectAtIndex:i1]; + Cell *b = [population objectAtIndex:i2]; + Cell *hybrid = [Cell makeHybridWith:a andWith:b]; + [population replaceObjectAtIndex:i withObject:hybrid]; + } + + const NSUInteger mRate = _mutationRate; + for (Cell *c in population) + [c mutate:mRate]; + + ++self.generationRound; + } + } + + self.evolutionStarted = NO; +} + + +@end diff --git a/iDNA/Document.xcdatamodeld/.xccurrentversion b/iDNA/Document.xcdatamodeld/.xccurrentversion new file mode 100644 index 0000000..29890b8 --- /dev/null +++ b/iDNA/Document.xcdatamodeld/.xccurrentversion @@ -0,0 +1,8 @@ + + + + + _XCCurrentVersionName + Document.xcdatamodel + + diff --git a/iDNA/Document.xcdatamodeld/Document.xcdatamodel/contents b/iDNA/Document.xcdatamodeld/Document.xcdatamodel/contents new file mode 100644 index 0000000..fd3d23f --- /dev/null +++ b/iDNA/Document.xcdatamodeld/Document.xcdatamodel/contents @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/iDNA/en.lproj/Credits.rtf b/iDNA/en.lproj/Credits.rtf new file mode 100644 index 0000000..46576ef --- /dev/null +++ b/iDNA/en.lproj/Credits.rtf @@ -0,0 +1,29 @@ +{\rtf0\ansi{\fonttbl\f0\fswiss Helvetica;} +{\colortbl;\red255\green255\blue255;} +\paperw9840\paperh8400 +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural + +\f0\b\fs24 \cf0 Engineering: +\b0 \ + Some people\ +\ + +\b Human Interface Design: +\b0 \ + Some other people\ +\ + +\b Testing: +\b0 \ + Hopefully not nobody\ +\ + +\b Documentation: +\b0 \ + Whoever\ +\ + +\b With special thanks to: +\b0 \ + Mom\ +} diff --git a/iDNA/en.lproj/Document.xib b/iDNA/en.lproj/Document.xib new file mode 100644 index 0000000..e0906e8 --- /dev/null +++ b/iDNA/en.lproj/Document.xib @@ -0,0 +1,3366 @@ + + + + 1080 + 12C60 + 3084 + 1187.34 + 625.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 3084 + + + IBNSLayoutConstraint + NSBox + NSButton + NSButtonCell + NSCustomObject + NSNumberFormatter + NSProgressIndicator + NSScrollView + NSScroller + NSSlider + NSSliderCell + NSTextField + NSTextFieldCell + NSTextView + NSUserDefaultsController + NSView + NSWindowTemplate + + + com.apple.InterfaceBuilder.CocoaPlugin + + + PluginDependencyRecalculationVersion + + + + + Document + + + FirstResponder + + + 15 + 2 + {{133, 235}, {640, 480}} + 1886912512 + Window + NSWindow + View + + {640, 480} + + + 256 + + + + 268 + {{17, 442}, {101, 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, 410}, {77, 17}} + + + _NS:1535 + YES + + 68157504 + 272630784 + DNA length + + _NS:1535 + + + + + NO + + + + 268 + {{17, 378}, {102, 17}} + + + _NS:1535 + YES + + 68157504 + 272630784 + Mutation rate % + + _NS:1535 + + + + + NO + + + + 268 + {{225, 440}, {397, 21}} + + + _NS:9 + YES + + -2080112384 + 0 + + _NS:9 + + 100 + 0.0 + 50 + 0.0 + 0 + 1 + NO + NO + + NO + + + + 268 + {{225, 411}, {397, 21}} + + + _NS:9 + YES + + -2080112384 + 0 + + _NS:9 + + 100 + 0.0 + 50 + 0.0 + 0 + 1 + NO + NO + + NO + + + + 268 + {{225, 376}, {397, 21}} + + + _NS:9 + YES + + -2080112384 + 0 + + _NS:9 + + 100 + 0.0 + 50 + 0.0 + 0 + 1 + NO + NO + + NO + + + + 268 + {{123, 442}, {96, 22}} + + + _NS:9 + YES + + -1804599231 + 71304192 + + + + + + + + + -∞ + + + +∞ + + #,##0.### + #,##0.### + + + + + + + + NaN + + + + 0 + 0 + YES + NO + 1 + AAAAAAAAAAAAAAAAAAAAAA + + + + 3 + YES + YES + YES + + . + , + YES + NO + YES + + _NS:9 + + YES + + 6 + System + textBackgroundColor + + 3 + MQA + + + + 6 + System + textColor + + + + NO + + + + 268 + {{123, 410}, {96, 22}} + + + _NS:9 + YES + + -1804074943 + 71304192 + + + + + + + + -∞ + + + +∞ + + #,##0.### + #,##0.### + + + + + + + + NaN + + + + + + 3 + YES + YES + YES + + . + , + YES + NO + YES + + _NS:9 + + YES + + + + NO + + + + 268 + {{123, 378}, {96, 22}} + + + _NS:9 + YES + + -1804074943 + 71304192 + + + + + + + + -∞ + + + +∞ + + #,##0.### + #,##0.### + + + + + + + + NaN + + + + + + 3 + YES + YES + YES + + . + , + YES + NO + YES + + _NS:9 + + YES + + + + NO + + + + 268 + {{247, 353}, {78, 17}} + + + _NS:1535 + YES + + 68157504 + 272630784 + Generation: + + LucidaGrande-Bold + 13 + 2072 + + _NS:1535 + + + + + NO + + + + 268 + {{327, 353}, {66, 17}} + + + _NS:1535 + YES + + 68157504 + 272630784 + + + + + + + + -∞ + + + +∞ + + #,##0.### + #,##0.### + + + + + + + + NaN + + + + + + 3 + YES + YES + YES + + . + , + YES + NO + YES + + _NS:1535 + + + + + NO + + + + 268 + {{222, 328}, {143, 17}} + + + _NS:1535 + YES + + 68157504 + 272630784 + Best individual match: + + _NS:1535 + + + + + NO + + + + 268 + {{367, 328}, {48, 17}} + + + _NS:1535 + YES + + 68157504 + 272630784 + + + + + + + + -∞ + + + +∞ + + #,##0% + #,##0% + + + + + + + + NaN + + + + + + 3 + YES + YES + YES + + . + , + YES + NO + YES + + _NS:1535 + + + + + NO + + + + 268 + {{20, 301}, {600, 20}} + + + _NS:9 + {250, 250} + 16397 + 1000 + + + + 12 + + + + 274 + + + + 268 + {{268, 203}, {65, 17}} + + + _NS:1535 + YES + + 68157504 + 272630784 + Goal DNA + + _NS:1535 + + + + + NO + + + + 256 + + + + 2304 + + + + 2322 + {562, 179} + + + _NS:13 + + + + + + + + + + + + 166 + + + + 562 + 1 + + + 67111169 + 0 + + + + + 6 + System + selectedTextBackgroundColor + + + + 6 + System + selectedTextColor + + + + + + + 1 + MCAwIDEAA + + + {8, -8} + 13 + + + + + + 0 + + 6 + {562, 10000000} + + + + {{1, 1}, {562, 179}} + + + _NS:11 + + + + {4, 5} + + 12582912 + + + + + + TU0AKgAAEAj///8A////qwAAAP8AAAD/AwMD/BYWFtIFBQVuAAAABv///wD///8E6+vrTGhoaLYtLS3p +BAQE/QAAAP8AAAD/////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///+rAAAA/wAAAP8AAAD/AAAA/wAAAP8EBATSX19fK9HR0ZciIiLv +AAAA/wAAAP8AAAD/AAAA/wAAAP////8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////CsPDw0CRkZG1FxcX9AAAAP8bGxvr +ICAg8AAAAP8ICAjlFRUVVQAAAA////8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wrm5uab +FxcX9AAAAP8AAAD/AQEB3wAAAA////8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///zaXl5fGAAAA/wAAAP8AAABR////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////CO7u7q8AAAD/AAAA/wAAAAz///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////qwAAAP8AAAD/////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///+rAAAA/wAAAP////8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///6sAAAD/AAAA/////wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////qwAAAP8AAAD/ +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///+r +AAAA/wAAAP////8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///6sAAAD/AAAA/////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////qwAAAP8AAAD/////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///+rAAAA/wAAAP////8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///6sAAAD/AAAA/////wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////qwAAAP8AAAD/////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////qwAAAP8AAAD/AAAA/wAAAP8AAAD/ +AAAA/////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///+rAAAA/wAAAP8AAAD/ +AAAA/wAAAP8AAAD/////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////qwAAAP8AAAD/////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///+rAAAA/wAAAP////8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///6sAAAD/AAAA/////wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////qwAAAP8AAAD/////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///+rAAAA/wAAAP////8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///6sAAAD/AAAA/////wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////qwAAAP8AAAD/ +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///+r +AAAA/wAAAP////8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////CO7u7q8AAAD/AAAA/wAAAAz///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///80mpqaxQAAAP8AAAD/AAAATv///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////CuXl5ZYeHh7xAAAA/wAAAP8CAgLXAAAAD////wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////EKurq0mOjo63FxcX9AAAAP8bGxvrICAg8AAAAP8ICAjlHh4eXAAAABj///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////qwAAAP8AAAD/AAAA/wAAAP8AAAD/BAQE1V9fXyvS0tKZICAg8AAAAP8AAAD/ +AAAA/wAAAP8AAAD/////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///+rAAAA/wAAAP8AAAD/FBQU1AUFBXEAAAAG////AP///wTr6+tO +ZWVluC4uLuoAAAD/AAAA/wAAAP////8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8AABABAAADAAAAAQAgAAABAQADAAAAAQAgAAABAgADAAAABAAA +EM4BAwADAAAAAQABAAABBgADAAAAAQACAAABEQAEAAAAAQAAAAgBEgADAAAAAQABAAABFQADAAAAAQAE +AAABFgADAAAAAQAgAAABFwAEAAAAAQAAEAABGgAFAAAAAQAAENYBGwAFAAAAAQAAEN4BHAADAAAAAQAB +AAABKAADAAAAAQACAAABUgADAAAAAQACAAABUwADAAAABAAAEOYAAAAAAAgACAAIAAgSAAAAACAAABIA +AAAAIAAAAAEAAQABAAE + + + + + + + + TU0AKgAABAj///9VQ0ND/wAAAP////8A////AP///6pDQ0P/AAAA/////wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///+qAAAA/////6oAAAD/////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///6oAAAD/////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///+qAAAA/////wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////qgAAAP////8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///6oAAAD/////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///+qAAAA/////wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////qgAAAP////8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////qgAAAP8AAAD/ +AAAA/////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///+q +AAAA/////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////qgAAAP////8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///6oAAAD/////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///+qAAAA/////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////qgAAAP////8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////qgAAAP////+qAAAA/////wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///9VQ0ND/wAAAP////8A////AP///6pDQ0P/AAAA/////wD///8A////AP///wD///8A +////AP///wD///8AAA4BAAADAAAAAQAQAAABAQADAAAAAQAQAAABAgADAAAABAAABLYBAwADAAAAAQAB +AAABBgADAAAAAQACAAABEQAEAAAAAQAAAAgBEgADAAAAAQABAAABFQADAAAAAQAEAAABFgADAAAAAQAQ +AAABFwAEAAAAAQAABAABHAADAAAAAQABAAABUgADAAAAAQACAAABUwADAAAABAAABL6HcwAHAAAHqAAA +BMYAAAAAAAgACAAIAAgAAQABAAEAAQAAB6hhcHBsAiAAAG1udHJSR0IgWFlaIAfZAAIAGQALABoAC2Fj +c3BBUFBMAAAAAGFwcGwAAAAAAAAAAAAAAAAAAAAAAAD21gABAAAAANMtYXBwbAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC2Rlc2MAAAEIAAAAb2RzY20AAAF4AAAFbGNw +cnQAAAbkAAAAOHd0cHQAAAccAAAAFHJYWVoAAAcwAAAAFGdYWVoAAAdEAAAAFGJYWVoAAAdYAAAAFHJU +UkMAAAdsAAAADmNoYWQAAAd8AAAALGJUUkMAAAdsAAAADmdUUkMAAAdsAAAADmRlc2MAAAAAAAAAFEdl +bmVyaWMgUkdCIFByb2ZpbGUAAAAAAAAAAAAAABRHZW5lcmljIFJHQiBQcm9maWxlAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABtbHVjAAAAAAAAAB4AAAAMc2tTSwAA +ACgAAAF4aHJIUgAAACgAAAGgY2FFUwAAACQAAAHIcHRCUgAAACYAAAHsdWtVQQAAACoAAAISZnJGVQAA +ACgAAAI8emhUVwAAABYAAAJkaXRJVAAAACgAAAJ6bmJOTwAAACYAAAKia29LUgAAABYAAALIY3NDWgAA +ACIAAALeaGVJTAAAAB4AAAMAZGVERQAAACwAAAMeaHVIVQAAACgAAANKc3ZTRQAAACYAAAKiemhDTgAA +ABYAAANyamFKUAAAABoAAAOIcm9STwAAACQAAAOiZWxHUgAAACIAAAPGcHRQTwAAACYAAAPobmxOTAAA +ACgAAAQOZXNFUwAAACYAAAPodGhUSAAAACQAAAQ2dHJUUgAAACIAAARaZmlGSQAAACgAAAR8cGxQTAAA +ACwAAASkcnVSVQAAACIAAATQYXJFRwAAACYAAATyZW5VUwAAACYAAAUYZGFESwAAAC4AAAU+AFYBYQBl +AG8AYgBlAGMAbgD9ACAAUgBHAEIAIABwAHIAbwBmAGkAbABHAGUAbgBlAHIAaQENAGsAaQAgAFIARwBC +ACAAcAByAG8AZgBpAGwAUABlAHIAZgBpAGwAIABSAEcAQgAgAGcAZQBuAOgAcgBpAGMAUABlAHIAZgBp +AGwAIABSAEcAQgAgAEcAZQBuAOkAcgBpAGMAbwQXBDAEMwQwBDsETAQ9BDgEOQAgBD8EQAQ+BEQEMAQ5 +BDsAIABSAEcAQgBQAHIAbwBmAGkAbAAgAGcA6QBuAOkAcgBpAHEAdQBlACAAUgBWAEKQGnUoACAAUgBH +AEIAIIJyX2ljz4/wAFAAcgBvAGYAaQBsAG8AIABSAEcAQgAgAGcAZQBuAGUAcgBpAGMAbwBHAGUAbgBl +AHIAaQBzAGsAIABSAEcAQgAtAHAAcgBvAGYAaQBsx3y8GAAgAFIARwBCACDVBLhc0wzHfABPAGIAZQBj +AG4A/QAgAFIARwBCACAAcAByAG8AZgBpAGwF5AXoBdUF5AXZBdwAIABSAEcAQgAgBdsF3AXcBdkAQQBs +AGwAZwBlAG0AZQBpAG4AZQBzACAAUgBHAEIALQBQAHIAbwBmAGkAbADBAGwAdABhAGwA4QBuAG8AcwAg +AFIARwBCACAAcAByAG8AZgBpAGxmbpAaACAAUgBHAEIAIGPPj/Blh072TgCCLAAgAFIARwBCACAw1zDt +MNUwoTCkMOsAUAByAG8AZgBpAGwAIABSAEcAQgAgAGcAZQBuAGUAcgBpAGMDkwO1A70DuQO6A8wAIAPA +A8EDvwPGA68DuwAgAFIARwBCAFAAZQByAGYAaQBsACAAUgBHAEIAIABnAGUAbgDpAHIAaQBjAG8AQQBs +AGcAZQBtAGUAZQBuACAAUgBHAEIALQBwAHIAbwBmAGkAZQBsDkIOGw4jDkQOHw4lDkwAIABSAEcAQgAg +DhcOMQ5IDicORA4bAEcAZQBuAGUAbAAgAFIARwBCACAAUAByAG8AZgBpAGwAaQBZAGwAZQBpAG4AZQBu +ACAAUgBHAEIALQBwAHIAbwBmAGkAaQBsAGkAVQBuAGkAdwBlAHIAcwBhAGwAbgB5ACAAcAByAG8AZgBp +AGwAIABSAEcAQgQeBDEESQQ4BDkAIAQ/BEAEPgREBDgEOwRMACAAUgBHAEIGRQZEBkEAIAYqBjkGMQZK +BkEAIABSAEcAQgAgBicGRAY5BicGRQBHAGUAbgBlAHIAaQBjACAAUgBHAEIAIABQAHIAbwBmAGkAbABl +AEcAZQBuAGUAcgBlAGwAIABSAEcAQgAtAGIAZQBzAGsAcgBpAHYAZQBsAHMAZXRleHQAAAAAQ29weXJp +Z2h0IDIwMDcgQXBwbGUgSW5jLiwgYWxsIHJpZ2h0cyByZXNlcnZlZC4AWFlaIAAAAAAAAPNSAAEAAAAB +Fs9YWVogAAAAAAAAdE0AAD3uAAAD0FhZWiAAAAAAAABadQAArHMAABc0WFlaIAAAAAAAACgaAAAVnwAA +uDZjdXJ2AAAAAAAAAAEBzQAAc2YzMgAAAAAAAQxCAAAF3v//8yYAAAeSAAD9kf//+6L///2jAAAD3AAA +wGw + + + + + + 3 + MCAwAA + + + + 4 + + + + -2147483392 + {{-100, -100}, {15, 179}} + + + _NS:83 + NO + + _doScroller: + 1 + 0.85256409645080566 + + + + -2147483392 + {{-100, -100}, {87, 18}} + + + _NS:33 + NO + 1 + + _doScroller: + 1 + 0.94565218687057495 + + + {{18, 14}, {564, 181}} + + + _NS:9 + 154114 + + + + 0.25 + 4 + 1 + + + {{1, 1}, {600, 220}} + + + _NS:11 + + + {{21, 58}, {602, 236}} + + + _NS:9 + {0, 0} + + 67108864 + 0 + + + LucidaGrande + 11 + 3100 + + + + 3 + MCAwLjgwMDAwMDAxMTkAA + + + + 1 + 0 + 2 + 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 + + 67108864 + 134217728 + Pause + + _NS:9 + + -2038284288 + 129 + + + 200 + 25 + + NO + + + + 268 + {{492, 13}, {134, 32}} + + + _NS:9 + YES + + 67108864 + 134217728 + Load goal DNA + + _NS:9 + + -2038284288 + 129 + + + 200 + 25 + + NO + + + {640, 480} + + + + {{0, 0}, {2560, 1418}} + {640, 502} + {10000000000000, 10000000000000} + YES + + + NSApplication + + + YES + + + + + + + window + + + + 18 + + + + onStartEvolution: + + + + 100464 + + + + onPause: + + + + 100465 + + + + onLoadGoalDna: + + + + 100466 + + + + delegate + + + + 17 + + + + maxValue: values.MaxPopulationSize + + + + + + maxValue: values.MaxPopulationSize + maxValue + values.MaxPopulationSize + 2 + + + 100248 + + + + minValue: values.MinPopulationSize + + + + + + minValue: values.MinPopulationSize + minValue + values.MinPopulationSize + + 2 + + + 100294 + + + + value: self.populationSize + + + + + + value: self.populationSize + value + self.populationSize + + 2 + + + 100297 + + + + enabled: self.evolutionStarted + + + + + + enabled: self.evolutionStarted + enabled + self.evolutionStarted + + NSValueTransformerName + NSNegateBoolean + + 2 + + + 100488 + + + + minValue: values.MinPopulationSize + + + + + + minValue: values.MinPopulationSize + minValue + values.MinPopulationSize + 2 + + + 100250 + + + + value: self.populationSize + + + + + + value: self.populationSize + value + self.populationSize + + 2 + + + 100253 + + + + maxValue: values.MaxDnaLength + + + + + + maxValue: values.MaxDnaLength + maxValue + values.MaxDnaLength + 2 + + + 100255 + + + + minValue: values.MinDnaLength + + + + + + minValue: values.MinDnaLength + minValue + values.MinDnaLength + + 2 + + + 100257 + + + + value: self.dnaLength + + + + + + value: self.dnaLength + value + self.dnaLength + + 2 + + + 100258 + + + + enabled: self.evolutionStarted + + + + + + enabled: self.evolutionStarted + enabled + self.evolutionStarted + + NSValueTransformerName + NSNegateBoolean + + 2 + + + 100495 + + + + maxValue: values.MaxMutationRate + + + + + + maxValue: values.MaxMutationRate + maxValue + values.MaxMutationRate + 2 + + + 100261 + + + + minValue: values.MinMutationRate + + + + + + minValue: values.MinMutationRate + minValue + values.MinMutationRate + + 2 + + + 100264 + + + + value: self.mutationRate + + + + + + value: self.mutationRate + value + self.mutationRate + + 2 + + + 100267 + + + + maxValue: values.MaxPopulationSize + + + + + + maxValue: values.MaxPopulationSize + maxValue + values.MaxPopulationSize + 2 + + + 100270 + + + + minValue: values.MinPopulationSize + + + + + + minValue: values.MinPopulationSize + minValue + values.MinPopulationSize + + 2 + + + 100272 + + + + value: self.populationSize + + + + + + value: self.populationSize + value + self.populationSize + + 2 + + + 100275 + + + + enabled: self.evolutionStarted + + + + + + enabled: self.evolutionStarted + enabled + self.evolutionStarted + + NSValueTransformerName + NSNegateBoolean + + 2 + + + 100485 + + + + maxValue: values.MaxDnaLength + + + + + + maxValue: values.MaxDnaLength + maxValue + values.MaxDnaLength + 2 + + + 100277 + + + + minValue: values.MinDnaLength + + + + + + minValue: values.MinDnaLength + minValue + values.MinDnaLength + + 2 + + + 100279 + + + + value: self.dnaLength + + + + + + value: self.dnaLength + value + self.dnaLength + + 2 + + + 100282 + + + + enabled: self.evolutionStarted + + + + + + enabled: self.evolutionStarted + enabled + self.evolutionStarted + + NSValueTransformerName + NSNegateBoolean + + 2 + + + 100492 + + + + maxValue: values.MaxMutationRate + + + + + + maxValue: values.MaxMutationRate + maxValue + values.MaxMutationRate + 2 + + + 100285 + + + + minValue: values.MinMutationRate + + + + + + minValue: values.MinMutationRate + minValue + values.MinMutationRate + + 2 + + + 100288 + + + + value: self.mutationRate + + + + + + value: self.mutationRate + value + self.mutationRate + + 2 + + + 100291 + + + + value: self.generationRound + + + + + + value: self.generationRound + value + self.generationRound + 2 + + + 100507 + + + + enabled: self.evolutionStarted + + + + + + enabled: self.evolutionStarted + enabled + self.evolutionStarted + 2 + + + 100509 + + + + value: self.bestDnaMatch + + + + + + value: self.bestDnaMatch + value + self.bestDnaMatch + 2 + + + 100512 + + + + enabled: self.evolutionStarted + + + + + + enabled: self.evolutionStarted + enabled + self.evolutionStarted + 2 + + + 100514 + + + + animate: self.evolutionStarted + + + + + + animate: self.evolutionStarted + animate + self.evolutionStarted + 2 + + + 100505 + + + + value: self.randomizationProgress + + + + + + value: self.randomizationProgress + value + self.randomizationProgress + 2 + + + 100516 + + + + isIndeterminate: self.prepareEvolution + + + + + + isIndeterminate: self.prepareEvolution + isIndeterminate + self.prepareEvolution + + NSValueTransformerName + NSNegateBoolean + + + 2 + + + 100520 + + + + attributedString: self.goalDnaString + + + + + + attributedString: self.goalDnaString + attributedString + self.goalDnaString + + NSAllowsEditingMultipleValuesSelection + + + 2 + + + 100447 + + + + enabled: self.evolutionStarted + + + + + + enabled: self.evolutionStarted + enabled + self.evolutionStarted + + NSValueTransformerName + NSNegateBoolean + + 2 + + + 100482 + + + + enabled: self.evolutionStarted + + + + + + enabled: self.evolutionStarted + enabled + self.evolutionStarted + 2 + + + 100481 + + + + enabled: self.evolutionStarted + + + + + + enabled: self.evolutionStarted + enabled + self.evolutionStarted + + NSValueTransformerName + NSNegateBoolean + + 2 + + + 100480 + + + + + + 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 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 4 + 0 + + 4 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 6 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 11 + 0 + + 11 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 11 + 0 + + 11 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 5 + 0 + + 6 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 5 + 0 + + 5 + 1 + + 250 + + 1000 + + 3 + 9 + 3 + + + + 3 + 0 + + 4 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 3 + 0 + + 4 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 5 + 0 + + 5 + 1 + + 225 + + 1000 + + 3 + 9 + 3 + + + + 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 + + + + 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 + + + + 4 + 0 + + 4 + 1 + + 62 + + 1000 + + 3 + 9 + 3 + + + + 3 + 0 + + 3 + 1 + + 186 + + 1000 + + 3 + 9 + 3 + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 5 + 1 + + 24 + + 1000 + + 3 + 9 + 3 + + + + 3 + 0 + + 4 + 1 + + 8 + + 1000 + + 6 + 24 + 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 + + + + 3 + 0 + + 4 + 1 + + 10 + + 1000 + + 6 + 24 + 3 + + + + 4 + 0 + + 4 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 5 + 0 + + 5 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 5 + 0 + + 5 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 3 + 0 + + 4 + 1 + + 10 + + 1000 + + 6 + 24 + 3 + + + + 4 + 0 + + 4 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 10 + 0 + + 10 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 5 + 0 + + 6 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 4 + 0 + + 4 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + + + + + + + + + + + + + + + + + + + + + -3 + + + Application + + + 100062 + + + + + + + + 100063 + + + + + 100067 + + + + + 100068 + + + + + + + + 100069 + + + + + 100072 + + + + + 100074 + + + + + + + + 100075 + + + + + 100080 + + + + + 100101 + + + + + + + + 100102 + + + + + 100105 + + + + + 100107 + + + + + 100109 + + + + + + + + 100110 + + + + + 100115 + + + + + 100117 + + + + + 100118 + + + + + + + + 100119 + + + + + 100123 + + + + + 100124 + + + + + 100126 + + + + + 100136 + + + + + + 7 + 0 + + 0 + 1 + + 96 + + 1000 + + 3 + 9 + 1 + + + + + + 100137 + + + + + + + + 100138 + + + + + 100139 + + + + + 100140 + + + + + 100142 + + + + + 100143 + + + + + 100144 + + + + + + + + 100146 + + + + + + + + 100147 + + + + + 100150 + + + + + 100151 + + + + + 100152 + + + + + 100153 + + + + + 100154 + + + + + 100155 + + + + + + + + 100156 + + + + + + + + 100157 + + + + + 100161 + + + + + 100162 + + + + + 100163 + + + + + 100164 + + + + + 100165 + + + + + 100298 + + + + + + 7 + 0 + + 0 + 1 + + 72 + + 1000 + + 3 + 9 + 1 + + + + + + 100299 + + + + + 100309 + + + + + + 7 + 0 + + 0 + 1 + + 60 + + 1000 + + 3 + 9 + 1 + + + + + + 100310 + + + + + + + + 100314 + + + + + 100332 + + + + + 100333 + + + + + 100335 + + + + + 100336 + + + + + + + + 100337 + + + + + 100338 + + + + + 100341 + + + + + + 7 + 0 + + 0 + 1 + + 42 + + 1000 + + 3 + 9 + 1 + + + + + + 100342 + + + + + + + + 100343 + + + + + 100345 + + + + + 100347 + + + + + 100348 + + + + + 100349 + + + + + 100350 + + + + + 100352 + + + + + 100353 + + + + + 100354 + + + + + + 100360 + + + + + 100364 + + + + + 100365 + + + + + 100372 + + + + + 9 + 0 + + 9 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 3 + 0 + + 3 + 1 + + 15 + + 1000 + + 8 + 29 + 3 + + + + 3 + 0 + + 4 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 6 + 0 + + 6 + 1 + + 16 + + 1000 + + 8 + 29 + 3 + + + + 4 + 0 + + 4 + 1 + + 11 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 5 + 1 + + 16 + + 1000 + + 8 + 29 + 3 + + + + + + + + 100373 + + + + + 100382 + + + + + + + + 100383 + + + + + 100384 + + + + + 100417 + + + + + 100418 + + + + + 100422 + + + + + 100423 + + + + + 100424 + + + + + + + + + + 100425 + + + + + 100426 + + + + + 100427 + + + + + 100430 + + + + + 100432 + + + + + 100433 + + + + + 100434 + + + + + 100435 + + + + + 100448 + + + + + + + + 100449 + + + + + 100450 + + + + + 100451 + + + + + 100452 + + + + + + + + 100453 + + + + + 100456 + + + + + 100457 + + + + + 100458 + + + + + + + + 100459 + + + + + 100462 + + + + + 100463 + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + 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 + + + + + + 100520 + + + 0 + IBCocoaFramework + YES + 3 + YES + + diff --git a/iDNA/en.lproj/InfoPlist.strings b/iDNA/en.lproj/InfoPlist.strings new file mode 100644 index 0000000..477b28f --- /dev/null +++ b/iDNA/en.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/iDNA/en.lproj/Localizable.strings b/iDNA/en.lproj/Localizable.strings new file mode 100644 index 0000000..ff90869 --- /dev/null +++ b/iDNA/en.lproj/Localizable.strings @@ -0,0 +1,10 @@ +/* + Localizable.strings + iDNA + + Created by Igor Pavlov on 08.02.13. + Copyright (c) 2013 Igor Pavlov. All rights reserved. +*/ +"CANCEL" = "Cancel"; +"QUIT_QUESTION" = "Do you really want to quit?"; +"RANDOMIZE" = "Please, move mouse for randomization."; diff --git a/iDNA/en.lproj/MainMenu.xib b/iDNA/en.lproj/MainMenu.xib new file mode 100644 index 0000000..3286e27 --- /dev/null +++ b/iDNA/en.lproj/MainMenu.xib @@ -0,0 +1,1064 @@ + + + + 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 + + + + About iDNA + + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + YES + 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 + + + + + + + + + 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 + + + + + + + + + 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 + + + + clearRecentDocuments: + + + + 127 + + + + performClose: + + + + 193 + + + + undo: + + + + 223 + + + + copy: + + + + 224 + + + + paste: + + + + 226 + + + + cut: + + + + 228 + + + + redo: + + + + 231 + + + + selectAll: + + + + 232 + + + + delete: + + + + 235 + + + + performZoom: + + + + 240 + + + + saveDocument: + + + + 362 + + + + revertDocumentToSaved: + + + + 364 + + + + hide: + + + + 367 + + + + hideOtherApplications: + + + + 368 + + + + unhideAllApplications: + + + + 370 + + + + newDocument: + + + + 371 + + + + openDocument: + + + + 372 + + + + pasteAsPlainText: + + + + 471 + + + + showHelp: + + + + 494 + + + + + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 29 + + + + + + + + + + + + 19 + + + + + + + + 56 + + + + + + + + 217 + + + + + + + + 83 + + + + + + + + 81 + + + + + + + + + + + + + + 75 + + + + + 72 + + + + + 82 + + + + + 124 + + + + + + + + 73 + + + + + 79 + + + + + 112 + + + + + 125 + + + + + + + + 126 + + + + + 205 + + + + + + + + + + + + + + + + 202 + + + + + 198 + + + + + 207 + + + + + 199 + + + + + 203 + + + + + 197 + + + + + 206 + + + + + 215 + + + + + 57 + + + + + + + + + + + + + + + + + + 58 + + + + + 134 + + + + + 150 + + + + + 136 + + + + + 144 + + + + + 129 + + + + + 143 + + + + + 236 + + + + + 131 + + + + + + + + 149 + + + + + 145 + + + + + 130 + + + + + 24 + + + + + + + + + + + 92 + + + + + 5 + + + + + 239 + + + + + 23 + + + + + 419 + + + + + 470 + + + + + 491 + + + + + + + + 492 + + + + + + + + 493 + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + 535 + + + + + FirstResponder + + duplicateDocument: + id + + + duplicateDocument: + + duplicateDocument: + id + + + + IBUserSource + + + + + + 0 + IBCocoaFramework + YES + 3 + + {11, 11} + {10, 3} + + YES + + diff --git a/iDNA/iDNA-Info.plist b/iDNA/iDNA-Info.plist new file mode 100644 index 0000000..cebf866 --- /dev/null +++ b/iDNA/iDNA-Info.plist @@ -0,0 +1,103 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleDocumentTypes + + + CFBundleTypeExtensions + + binary + + CFBundleTypeMIMETypes + + application/octet-stream + + CFBundleTypeName + Binary + CFBundleTypeRole + Editor + LSTypeIsPackage + + NSDocumentClass + Document + NSPersistentStoreTypeKey + Binary + + + CFBundleTypeExtensions + + sqlite + + CFBundleTypeMIMETypes + + application/octet-stream + + CFBundleTypeName + SQLite + CFBundleTypeRole + Editor + LSTypeIsPackage + + NSDocumentClass + Document + NSPersistentStoreTypeKey + SQLite + + + CFBundleTypeExtensions + + xml + + CFBundleTypeIconFile + + CFBundleTypeMIMETypes + + text/xml + + CFBundleTypeName + XML + CFBundleTypeOSTypes + + ???? + + CFBundleTypeRole + Editor + LSTypeIsPackage + + NSDocumentClass + Document + NSPersistentStoreTypeKey + XML + + + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIconFile + + CFBundleIdentifier + com.igor-pavlov.${PRODUCT_NAME:rfc1034identifier} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + LSMinimumSystemVersion + ${MACOSX_DEPLOYMENT_TARGET} + NSHumanReadableCopyright + Copyright © 2012 Igor Pavlov. All rights reserved. + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/iDNA/iDNA-Prefix.pch b/iDNA/iDNA-Prefix.pch new file mode 100644 index 0000000..24593cd --- /dev/null +++ b/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/main.m b/iDNA/main.m new file mode 100644 index 0000000..50358d7 --- /dev/null +++ b/iDNA/main.m @@ -0,0 +1,45 @@ +// +// main.m +// iDNA +// +// Created by Igor Pavlov on 25.12.12. +// Copyright (c) 2012 Igor Pavlov. All rights reserved. +// + +#import + + +@interface AppController : NSObject + +- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender; + +@end + + +@implementation AppController + +- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender +{ + NSAlert *a = [NSAlert alertWithMessageText:nil + defaultButton:nil + alternateButton:NSLocalizedString(@"CANCEL", @"Cancel") + otherButton:nil + informativeTextWithFormat:NSLocalizedString(@"QUIT_QUESTION", @"Quit question")]; + NSInteger result = [a runModal]; + if (NSAlertDefaultReturn != result) + return NSTerminateCancel; + return NSTerminateNow; +} + +@end + + +int main(int argc, char *argv[]) +{ + [NSApplication sharedApplication]; + + AppController *delegate = [[AppController alloc] init]; + [NSApp setDelegate: delegate]; + + return NSApplicationMain(argc, (const char **)argv); +} diff --git a/iDNA/ru.lproj/Credits.rtf b/iDNA/ru.lproj/Credits.rtf new file mode 100644 index 0000000..46576ef --- /dev/null +++ b/iDNA/ru.lproj/Credits.rtf @@ -0,0 +1,29 @@ +{\rtf0\ansi{\fonttbl\f0\fswiss Helvetica;} +{\colortbl;\red255\green255\blue255;} +\paperw9840\paperh8400 +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural + +\f0\b\fs24 \cf0 Engineering: +\b0 \ + Some people\ +\ + +\b Human Interface Design: +\b0 \ + Some other people\ +\ + +\b Testing: +\b0 \ + Hopefully not nobody\ +\ + +\b Documentation: +\b0 \ + Whoever\ +\ + +\b With special thanks to: +\b0 \ + Mom\ +} diff --git a/iDNA/ru.lproj/Document.xib b/iDNA/ru.lproj/Document.xib new file mode 100644 index 0000000..ae67966 --- /dev/null +++ b/iDNA/ru.lproj/Document.xib @@ -0,0 +1,3368 @@ + + + + 1080 + 12C60 + 3084 + 1187.34 + 625.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 3084 + + + IBNSLayoutConstraint + NSBox + NSButton + NSButtonCell + NSCustomObject + NSNumberFormatter + NSProgressIndicator + NSScrollView + NSScroller + NSSlider + NSSliderCell + NSTextField + NSTextFieldCell + NSTextView + NSUserDefaultsController + NSView + NSWindowTemplate + + + com.apple.InterfaceBuilder.CocoaPlugin + + + PluginDependencyRecalculationVersion + + + + + Document + + + FirstResponder + + + 15 + 2 + {{133, 235}, {640, 480}} + 1886912512 + Window + NSWindow + View + + {640, 480} + + + 256 + + + + 268 + {{17, 442}, {108, 17}} + + + _NS:1535 + YES + + 68157504 + 272630784 + Размер выводка + + LucidaGrande + 13 + 1044 + + _NS:1535 + + + 6 + System + controlColor + + 3 + MC42NjY2NjY2NjY3AA + + + + 6 + System + controlTextColor + + 3 + MAA + + + + NO + + + + 268 + {{17, 410}, {77, 17}} + + + _NS:1535 + YES + + 68157504 + 272630784 + Длина ДНК + + _NS:1535 + + + + + NO + + + + 268 + {{17, 378}, {73, 17}} + + + _NS:1535 + YES + + 68157504 + 272630784 + Мутация % + + _NS:1535 + + + + + NO + + + + 268 + {{232, 440}, {390, 21}} + + + _NS:9 + YES + + -2080112384 + 0 + + _NS:9 + + 100 + 0.0 + 50 + 0.0 + 0 + 1 + NO + NO + + NO + + + + 268 + {{232, 411}, {390, 21}} + + + _NS:9 + YES + + -2080112384 + 0 + + _NS:9 + + 100 + 0.0 + 50 + 0.0 + 0 + 1 + NO + NO + + NO + + + + 268 + {{232, 376}, {390, 21}} + + + _NS:9 + YES + + -2080112384 + 0 + + _NS:9 + + 100 + 0.0 + 50 + 0.0 + 0 + 1 + NO + NO + + NO + + + + 268 + {{136, 442}, {90, 22}} + + + _NS:9 + YES + + -1804599231 + 71304192 + + + + + + + + + -∞ + + + +∞ + + #,##0.### + #,##0.### + + + + + + + + NaN + + + + 0 + 0 + YES + NO + 1 + AAAAAAAAAAAAAAAAAAAAAA + + + + 3 + YES + YES + YES + + . + , + YES + NO + YES + + _NS:9 + + YES + + 6 + System + textBackgroundColor + + 3 + MQA + + + + 6 + System + textColor + + + + NO + + + + 268 + {{136, 410}, {90, 22}} + + + _NS:9 + YES + + -1804074943 + 71304192 + + + + + + + + -∞ + + + +∞ + + #,##0.### + #,##0.### + + + + + + + + NaN + + + + + + 3 + YES + YES + YES + + . + , + YES + NO + YES + + _NS:9 + + YES + + + + NO + + + + 268 + {{136, 378}, {90, 22}} + + + _NS:9 + YES + + -1804074943 + 71304192 + + + + + + + + -∞ + + + +∞ + + #,##0.### + #,##0.### + + + + + + + + NaN + + + + + + 3 + YES + YES + YES + + . + , + YES + NO + YES + + _NS:9 + + YES + + + + NO + + + + 268 + {{247, 353}, {83, 17}} + + + _NS:1535 + YES + + 68157504 + 272630784 + Поколение: + + LucidaGrande-Bold + 13 + 2072 + + _NS:1535 + + + + + NO + + + + 268 + {{332, 353}, {66, 17}} + + + _NS:1535 + YES + + 68157504 + 272630784 + + + + + + + + -∞ + + + +∞ + + #,##0.### + #,##0.### + + + + + + + + NaN + + + + + + 3 + YES + YES + YES + + . + , + YES + NO + YES + + _NS:1535 + + + + + NO + + + + 268 + {{222, 328}, {137, 17}} + + + _NS:1535 + YES + + 68157504 + 272630784 + Лучшее совпадение: + + _NS:1535 + + + + + NO + + + + 268 + {{361, 328}, {48, 17}} + + + _NS:1535 + YES + + 68157504 + 272630784 + + + + + + + + -∞ + + + +∞ + + #,##0% + #,##0% + + + + + + + + NaN + + + + + + 3 + YES + YES + YES + + . + , + YES + NO + YES + + _NS:1535 + + + + + NO + + + + 268 + {{20, 301}, {600, 20}} + + + _NS:9 + {250, 250} + 16397 + 1000 + + + + 12 + + + + 274 + + + + 268 + {{256, 203}, {89, 17}} + + + _NS:1535 + YES + + 68157504 + 272630784 + Целевая ДНК + + _NS:1535 + + + + + NO + + + + 256 + + + + 2304 + + + + 2322 + {562, 179} + + + _NS:13 + + + + + + + + + + + + 166 + + + + 562 + 1 + + + 67111169 + 0 + + + + + 6 + System + selectedTextBackgroundColor + + + + 6 + System + selectedTextColor + + + + + + + 1 + MCAwIDEAA + + + {8, -8} + 13 + + + + + + 0 + + 6 + {562, 10000000} + + + + {{1, 1}, {562, 179}} + + + _NS:11 + + + + {4, 5} + + 12582912 + + + + + + TU0AKgAAEAj///8A////qwAAAP8AAAD/AwMD/BYWFtIFBQVuAAAABv///wD///8E6+vrTGhoaLYtLS3p +BAQE/QAAAP8AAAD/////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///+rAAAA/wAAAP8AAAD/AAAA/wAAAP8EBATSX19fK9HR0ZciIiLv +AAAA/wAAAP8AAAD/AAAA/wAAAP////8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////CsPDw0CRkZG1FxcX9AAAAP8bGxvr +ICAg8AAAAP8ICAjlFRUVVQAAAA////8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wrm5uab +FxcX9AAAAP8AAAD/AQEB3wAAAA////8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///zaXl5fGAAAA/wAAAP8AAABR////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////CO7u7q8AAAD/AAAA/wAAAAz///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////qwAAAP8AAAD/////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///+rAAAA/wAAAP////8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///6sAAAD/AAAA/////wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////qwAAAP8AAAD/ +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///+r +AAAA/wAAAP////8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///6sAAAD/AAAA/////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////qwAAAP8AAAD/////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///+rAAAA/wAAAP////8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///6sAAAD/AAAA/////wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////qwAAAP8AAAD/////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////qwAAAP8AAAD/AAAA/wAAAP8AAAD/ +AAAA/////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///+rAAAA/wAAAP8AAAD/ +AAAA/wAAAP8AAAD/////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////qwAAAP8AAAD/////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///+rAAAA/wAAAP////8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///6sAAAD/AAAA/////wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////qwAAAP8AAAD/////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///+rAAAA/wAAAP////8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///6sAAAD/AAAA/////wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////qwAAAP8AAAD/ +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///+r +AAAA/wAAAP////8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////CO7u7q8AAAD/AAAA/wAAAAz///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///80mpqaxQAAAP8AAAD/AAAATv///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////CuXl5ZYeHh7xAAAA/wAAAP8CAgLXAAAAD////wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////EKurq0mOjo63FxcX9AAAAP8bGxvrICAg8AAAAP8ICAjlHh4eXAAAABj///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////qwAAAP8AAAD/AAAA/wAAAP8AAAD/BAQE1V9fXyvS0tKZICAg8AAAAP8AAAD/ +AAAA/wAAAP8AAAD/////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///+rAAAA/wAAAP8AAAD/FBQU1AUFBXEAAAAG////AP///wTr6+tO +ZWVluC4uLuoAAAD/AAAA/wAAAP////8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8AABABAAADAAAAAQAgAAABAQADAAAAAQAgAAABAgADAAAABAAA +EM4BAwADAAAAAQABAAABBgADAAAAAQACAAABEQAEAAAAAQAAAAgBEgADAAAAAQABAAABFQADAAAAAQAE +AAABFgADAAAAAQAgAAABFwAEAAAAAQAAEAABGgAFAAAAAQAAENYBGwAFAAAAAQAAEN4BHAADAAAAAQAB +AAABKAADAAAAAQACAAABUgADAAAAAQACAAABUwADAAAABAAAEOYAAAAAAAgACAAIAAgSAAAAACAAABIA +AAAAIAAAAAEAAQABAAE + + + + + + + + TU0AKgAABAj///9VQ0ND/wAAAP////8A////AP///6pDQ0P/AAAA/////wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///+qAAAA/////6oAAAD/////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///6oAAAD/////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///+qAAAA/////wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////qgAAAP////8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///6oAAAD/////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///+qAAAA/////wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////qgAAAP////8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////qgAAAP8AAAD/ +AAAA/////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///+q +AAAA/////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////qgAAAP////8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///6oAAAD/////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///+qAAAA/////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////qgAAAP////8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////qgAAAP////+qAAAA/////wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///9VQ0ND/wAAAP////8A////AP///6pDQ0P/AAAA/////wD///8A////AP///wD///8A +////AP///wD///8AAA4BAAADAAAAAQAQAAABAQADAAAAAQAQAAABAgADAAAABAAABLYBAwADAAAAAQAB +AAABBgADAAAAAQACAAABEQAEAAAAAQAAAAgBEgADAAAAAQABAAABFQADAAAAAQAEAAABFgADAAAAAQAQ +AAABFwAEAAAAAQAABAABHAADAAAAAQABAAABUgADAAAAAQACAAABUwADAAAABAAABL6HcwAHAAAHqAAA +BMYAAAAAAAgACAAIAAgAAQABAAEAAQAAB6hhcHBsAiAAAG1udHJSR0IgWFlaIAfZAAIAGQALABoAC2Fj +c3BBUFBMAAAAAGFwcGwAAAAAAAAAAAAAAAAAAAAAAAD21gABAAAAANMtYXBwbAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC2Rlc2MAAAEIAAAAb2RzY20AAAF4AAAFbGNw +cnQAAAbkAAAAOHd0cHQAAAccAAAAFHJYWVoAAAcwAAAAFGdYWVoAAAdEAAAAFGJYWVoAAAdYAAAAFHJU +UkMAAAdsAAAADmNoYWQAAAd8AAAALGJUUkMAAAdsAAAADmdUUkMAAAdsAAAADmRlc2MAAAAAAAAAFEdl +bmVyaWMgUkdCIFByb2ZpbGUAAAAAAAAAAAAAABRHZW5lcmljIFJHQiBQcm9maWxlAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABtbHVjAAAAAAAAAB4AAAAMc2tTSwAA +ACgAAAF4aHJIUgAAACgAAAGgY2FFUwAAACQAAAHIcHRCUgAAACYAAAHsdWtVQQAAACoAAAISZnJGVQAA +ACgAAAI8emhUVwAAABYAAAJkaXRJVAAAACgAAAJ6bmJOTwAAACYAAAKia29LUgAAABYAAALIY3NDWgAA +ACIAAALeaGVJTAAAAB4AAAMAZGVERQAAACwAAAMeaHVIVQAAACgAAANKc3ZTRQAAACYAAAKiemhDTgAA +ABYAAANyamFKUAAAABoAAAOIcm9STwAAACQAAAOiZWxHUgAAACIAAAPGcHRQTwAAACYAAAPobmxOTAAA +ACgAAAQOZXNFUwAAACYAAAPodGhUSAAAACQAAAQ2dHJUUgAAACIAAARaZmlGSQAAACgAAAR8cGxQTAAA +ACwAAASkcnVSVQAAACIAAATQYXJFRwAAACYAAATyZW5VUwAAACYAAAUYZGFESwAAAC4AAAU+AFYBYQBl +AG8AYgBlAGMAbgD9ACAAUgBHAEIAIABwAHIAbwBmAGkAbABHAGUAbgBlAHIAaQENAGsAaQAgAFIARwBC +ACAAcAByAG8AZgBpAGwAUABlAHIAZgBpAGwAIABSAEcAQgAgAGcAZQBuAOgAcgBpAGMAUABlAHIAZgBp +AGwAIABSAEcAQgAgAEcAZQBuAOkAcgBpAGMAbwQXBDAEMwQwBDsETAQ9BDgEOQAgBD8EQAQ+BEQEMAQ5 +BDsAIABSAEcAQgBQAHIAbwBmAGkAbAAgAGcA6QBuAOkAcgBpAHEAdQBlACAAUgBWAEKQGnUoACAAUgBH +AEIAIIJyX2ljz4/wAFAAcgBvAGYAaQBsAG8AIABSAEcAQgAgAGcAZQBuAGUAcgBpAGMAbwBHAGUAbgBl +AHIAaQBzAGsAIABSAEcAQgAtAHAAcgBvAGYAaQBsx3y8GAAgAFIARwBCACDVBLhc0wzHfABPAGIAZQBj +AG4A/QAgAFIARwBCACAAcAByAG8AZgBpAGwF5AXoBdUF5AXZBdwAIABSAEcAQgAgBdsF3AXcBdkAQQBs +AGwAZwBlAG0AZQBpAG4AZQBzACAAUgBHAEIALQBQAHIAbwBmAGkAbADBAGwAdABhAGwA4QBuAG8AcwAg +AFIARwBCACAAcAByAG8AZgBpAGxmbpAaACAAUgBHAEIAIGPPj/Blh072TgCCLAAgAFIARwBCACAw1zDt +MNUwoTCkMOsAUAByAG8AZgBpAGwAIABSAEcAQgAgAGcAZQBuAGUAcgBpAGMDkwO1A70DuQO6A8wAIAPA +A8EDvwPGA68DuwAgAFIARwBCAFAAZQByAGYAaQBsACAAUgBHAEIAIABnAGUAbgDpAHIAaQBjAG8AQQBs +AGcAZQBtAGUAZQBuACAAUgBHAEIALQBwAHIAbwBmAGkAZQBsDkIOGw4jDkQOHw4lDkwAIABSAEcAQgAg +DhcOMQ5IDicORA4bAEcAZQBuAGUAbAAgAFIARwBCACAAUAByAG8AZgBpAGwAaQBZAGwAZQBpAG4AZQBu +ACAAUgBHAEIALQBwAHIAbwBmAGkAaQBsAGkAVQBuAGkAdwBlAHIAcwBhAGwAbgB5ACAAcAByAG8AZgBp +AGwAIABSAEcAQgQeBDEESQQ4BDkAIAQ/BEAEPgREBDgEOwRMACAAUgBHAEIGRQZEBkEAIAYqBjkGMQZK +BkEAIABSAEcAQgAgBicGRAY5BicGRQBHAGUAbgBlAHIAaQBjACAAUgBHAEIAIABQAHIAbwBmAGkAbABl +AEcAZQBuAGUAcgBlAGwAIABSAEcAQgAtAGIAZQBzAGsAcgBpAHYAZQBsAHMAZXRleHQAAAAAQ29weXJp +Z2h0IDIwMDcgQXBwbGUgSW5jLiwgYWxsIHJpZ2h0cyByZXNlcnZlZC4AWFlaIAAAAAAAAPNSAAEAAAAB +Fs9YWVogAAAAAAAAdE0AAD3uAAAD0FhZWiAAAAAAAABadQAArHMAABc0WFlaIAAAAAAAACgaAAAVnwAA +uDZjdXJ2AAAAAAAAAAEBzQAAc2YzMgAAAAAAAQxCAAAF3v//8yYAAAeSAAD9kf//+6L///2jAAAD3AAA +wGw + + + + + + 3 + MCAwAA + + + + 4 + + + + -2147483392 + {{-100, -100}, {15, 179}} + + + _NS:83 + NO + + _doScroller: + 1 + 0.85256409645080566 + + + + -2147483392 + {{-100, -100}, {87, 18}} + + + _NS:33 + NO + 1 + + _doScroller: + 1 + 0.94565218687057495 + + + {{18, 14}, {564, 181}} + + + _NS:9 + 154114 + + + + 0.25 + 4 + 1 + + + {{1, 1}, {600, 220}} + + + _NS:11 + + + {{21, 58}, {602, 236}} + + + _NS:9 + {0, 0} + + 67108864 + 0 + + + LucidaGrande + 11 + 3100 + + + + 3 + MCAwLjgwMDAwMDAxMTkAA + + + + 1 + 0 + 2 + NO + + + + 268 + {{14, 13}, {152, 32}} + + + _NS:9 + YES + + 67108864 + 134217728 + Запуск эволюции + + _NS:9 + + -2038284288 + 129 + + + 200 + 25 + + NO + + + + 268 + {{166, 13}, {108, 32}} + + + _NS:9 + YES + + 67108864 + 134217728 + Остановка + + _NS:9 + + -2038284288 + 129 + + + 200 + 25 + + NO + + + + 268 + {{432, 13}, {194, 32}} + + _NS:9 + YES + + 67108864 + 134217728 + Загрузить целевую ДНК + + _NS:9 + + -2038284288 + 129 + + + 200 + 25 + + NO + + + {640, 480} + + + + {{0, 0}, {2560, 1418}} + {640, 502} + {10000000000000, 10000000000000} + YES + + + NSApplication + + + YES + + + + + + + window + + + + 18 + + + + onStartEvolution: + + + + 100464 + + + + onPause: + + + + 100465 + + + + onLoadGoalDna: + + + + 100466 + + + + delegate + + + + 17 + + + + maxValue: values.MaxPopulationSize + + + + + + maxValue: values.MaxPopulationSize + maxValue + values.MaxPopulationSize + 2 + + + 100248 + + + + minValue: values.MinPopulationSize + + + + + + minValue: values.MinPopulationSize + minValue + values.MinPopulationSize + + 2 + + + 100294 + + + + value: self.populationSize + + + + + + value: self.populationSize + value + self.populationSize + + 2 + + + 100297 + + + + enabled: self.evolutionStarted + + + + + + enabled: self.evolutionStarted + enabled + self.evolutionStarted + + NSValueTransformerName + NSNegateBoolean + + 2 + + + 100488 + + + + minValue: values.MinPopulationSize + + + + + + minValue: values.MinPopulationSize + minValue + values.MinPopulationSize + 2 + + + 100250 + + + + value: self.populationSize + + + + + + value: self.populationSize + value + self.populationSize + + 2 + + + 100253 + + + + maxValue: values.MaxDnaLength + + + + + + maxValue: values.MaxDnaLength + maxValue + values.MaxDnaLength + 2 + + + 100255 + + + + minValue: values.MinDnaLength + + + + + + minValue: values.MinDnaLength + minValue + values.MinDnaLength + + 2 + + + 100257 + + + + value: self.dnaLength + + + + + + value: self.dnaLength + value + self.dnaLength + + 2 + + + 100258 + + + + enabled: self.evolutionStarted + + + + + + enabled: self.evolutionStarted + enabled + self.evolutionStarted + + NSValueTransformerName + NSNegateBoolean + + 2 + + + 100495 + + + + maxValue: values.MaxMutationRate + + + + + + maxValue: values.MaxMutationRate + maxValue + values.MaxMutationRate + 2 + + + 100261 + + + + minValue: values.MinMutationRate + + + + + + minValue: values.MinMutationRate + minValue + values.MinMutationRate + + 2 + + + 100264 + + + + value: self.mutationRate + + + + + + value: self.mutationRate + value + self.mutationRate + + 2 + + + 100267 + + + + maxValue: values.MaxPopulationSize + + + + + + maxValue: values.MaxPopulationSize + maxValue + values.MaxPopulationSize + 2 + + + 100270 + + + + minValue: values.MinPopulationSize + + + + + + minValue: values.MinPopulationSize + minValue + values.MinPopulationSize + + 2 + + + 100272 + + + + value: self.populationSize + + + + + + value: self.populationSize + value + self.populationSize + + 2 + + + 100275 + + + + enabled: self.evolutionStarted + + + + + + enabled: self.evolutionStarted + enabled + self.evolutionStarted + + NSValueTransformerName + NSNegateBoolean + + 2 + + + 100485 + + + + maxValue: values.MaxDnaLength + + + + + + maxValue: values.MaxDnaLength + maxValue + values.MaxDnaLength + 2 + + + 100277 + + + + minValue: values.MinDnaLength + + + + + + minValue: values.MinDnaLength + minValue + values.MinDnaLength + + 2 + + + 100279 + + + + value: self.dnaLength + + + + + + value: self.dnaLength + value + self.dnaLength + + 2 + + + 100282 + + + + enabled: self.evolutionStarted + + + + + + enabled: self.evolutionStarted + enabled + self.evolutionStarted + + NSValueTransformerName + NSNegateBoolean + + 2 + + + 100492 + + + + maxValue: values.MaxMutationRate + + + + + + maxValue: values.MaxMutationRate + maxValue + values.MaxMutationRate + 2 + + + 100285 + + + + minValue: values.MinMutationRate + + + + + + minValue: values.MinMutationRate + minValue + values.MinMutationRate + + 2 + + + 100288 + + + + value: self.mutationRate + + + + + + value: self.mutationRate + value + self.mutationRate + + 2 + + + 100291 + + + + value: self.generationRound + + + + + + value: self.generationRound + value + self.generationRound + 2 + + + 100507 + + + + enabled: self.evolutionStarted + + + + + + enabled: self.evolutionStarted + enabled + self.evolutionStarted + 2 + + + 100509 + + + + value: self.bestDnaMatch + + + + + + value: self.bestDnaMatch + value + self.bestDnaMatch + 2 + + + 100512 + + + + enabled: self.evolutionStarted + + + + + + enabled: self.evolutionStarted + enabled + self.evolutionStarted + 2 + + + 100514 + + + + animate: self.evolutionStarted + + + + + + animate: self.evolutionStarted + animate + self.evolutionStarted + 2 + + + 100505 + + + + value: self.randomizationProgress + + + + + + value: self.randomizationProgress + value + self.randomizationProgress + 2 + + + 100516 + + + + isIndeterminate: self.prepareEvolution + + + + + + isIndeterminate: self.prepareEvolution + isIndeterminate + self.prepareEvolution + + NSValueTransformerName + NSNegateBoolean + + + 2 + + + 100520 + + + + attributedString: self.goalDnaString + + + + + + attributedString: self.goalDnaString + attributedString + self.goalDnaString + + NSAllowsEditingMultipleValuesSelection + + + 2 + + + 100447 + + + + enabled: self.evolutionStarted + + + + + + enabled: self.evolutionStarted + enabled + self.evolutionStarted + + NSValueTransformerName + NSNegateBoolean + + 2 + + + 100482 + + + + enabled: self.evolutionStarted + + + + + + enabled: self.evolutionStarted + enabled + self.evolutionStarted + 2 + + + 100481 + + + + enabled: self.evolutionStarted + + + + + + enabled: self.evolutionStarted + enabled + self.evolutionStarted + + NSValueTransformerName + NSNegateBoolean + + 2 + + + 100480 + + + + + + 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 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 4 + 0 + + 4 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 6 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 11 + 0 + + 11 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 11 + 0 + + 11 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 5 + 0 + + 6 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 5 + 0 + + 5 + 1 + + 250 + + 1000 + + 3 + 9 + 3 + + + + 3 + 0 + + 4 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 3 + 0 + + 4 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 5 + 0 + + 5 + 1 + + 225 + + 1000 + + 3 + 9 + 3 + + + + 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 + + + + 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 + + + + 4 + 0 + + 4 + 1 + + 62 + + 1000 + + 3 + 9 + 3 + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 5 + 1 + + 24 + + 1000 + + 3 + 9 + 3 + + + + 3 + 0 + + 4 + 1 + + 8 + + 1000 + + 6 + 24 + 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 + + + + 3 + 0 + + 4 + 1 + + 10 + + 1000 + + 6 + 24 + 3 + + + + 4 + 0 + + 4 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 5 + 0 + + 5 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 5 + 0 + + 5 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 3 + 0 + + 4 + 1 + + 10 + + 1000 + + 6 + 24 + 3 + + + + 4 + 0 + + 4 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 10 + 0 + + 10 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 3 + 0 + + 3 + 1 + + 16 + + 1000 + + 3 + 9 + 3 + + + + 4 + 0 + + 4 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + + + + + + + + + + + + + + + + + + + + + -3 + + + Application + + + 100062 + + + + + + + + 100063 + + + + + 100067 + + + + + 100068 + + + + + + + + 100069 + + + + + 100072 + + + + + 100074 + + + + + + + + 100075 + + + + + 100080 + + + + + 100101 + + + + + + 7 + 0 + + 0 + 1 + + 386 + + 1000 + + 3 + 9 + 1 + + + + + + 100102 + + + + + 100105 + + + + + 100107 + + + + + 100109 + + + + + + + + 100110 + + + + + 100115 + + + + + 100117 + + + + + 100118 + + + + + + + + 100119 + + + + + 100123 + + + + + 100124 + + + + + 100126 + + + + + 100136 + + + + + + 7 + 0 + + 0 + 1 + + 90 + + 1000 + + 3 + 9 + 1 + + + + + + 100137 + + + + + + + + 100138 + + + + + 100140 + + + + + 100142 + + + + + 100144 + + + + + + + + 100146 + + + + + + + + 100147 + + + + + 100150 + + + + + 100151 + + + + + 100152 + + + + + 100153 + + + + + 100155 + + + + + + + + 100156 + + + + + + + + 100157 + + + + + 100162 + + + + + 100163 + + + + + 100164 + + + + + 100165 + + + + + 100298 + + + + + + + + 100299 + + + + + 100309 + + + + + + 7 + 0 + + 0 + 1 + + 60 + + 1000 + + 3 + 9 + 1 + + + + + + 100310 + + + + + + + + 100314 + + + + + 100332 + + + + + 100333 + + + + + 100335 + + + + + 100336 + + + + + + + + 100337 + + + + + 100341 + + + + + + 7 + 0 + + 0 + 1 + + 42 + + 1000 + + 3 + 9 + 1 + + + + + + 100342 + + + + + + + + 100343 + + + + + 100345 + + + + + 100347 + + + + + 100348 + + + + + 100349 + + + + + 100350 + + + + + 100352 + + + + + 100353 + + + + + 100354 + + + + + 8 + 0 + + 0 + 1 + + 18 + + 1000 + + 3 + 9 + 1 + + + + + + 100360 + + + + + 100364 + + + + + 100365 + + + + + 100372 + + + + + 9 + 0 + + 9 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 3 + 0 + + 3 + 1 + + 15 + + 1000 + + 8 + 29 + 3 + + + + 3 + 0 + + 4 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 6 + 0 + + 6 + 1 + + 16 + + 1000 + + 8 + 29 + 3 + + + + 4 + 0 + + 4 + 1 + + 11 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 5 + 1 + + 16 + + 1000 + + 8 + 29 + 3 + + + + + + + + 100373 + + + + + 100382 + + + + + + + + 100383 + + + + + 100384 + + + + + 100417 + + + + + 100418 + + + + + 100423 + + + + + 100424 + + + + + + + + + + 100425 + + + + + 100426 + + + + + 100427 + + + + + 100430 + + + + + 100432 + + + + + 100433 + + + + + 100434 + + + + + 100435 + + + + + 100448 + + + + + + + + 100449 + + + + + 100450 + + + + + 100451 + + + + + 100452 + + + + + + + + 100453 + + + + + 100456 + + + + + 100457 + + + + + 100458 + + + + + + + + 100459 + + + + + 100462 + + + + + 100463 + + + + + 100521 + + + + + 100522 + + + + + 100523 + + + + + 100524 + + + + + 100526 + + + + + 100528 + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + 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 + + + + + + 100528 + + + 0 + IBCocoaFramework + YES + 3 + YES + + diff --git a/iDNA/ru.lproj/InfoPlist.strings b/iDNA/ru.lproj/InfoPlist.strings new file mode 100644 index 0000000..477b28f --- /dev/null +++ b/iDNA/ru.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/iDNA/ru.lproj/Localizable.strings b/iDNA/ru.lproj/Localizable.strings new file mode 100644 index 0000000..971ac33 --- /dev/null +++ b/iDNA/ru.lproj/Localizable.strings @@ -0,0 +1,10 @@ +/* + Localizable.strings + iDNA + + Created by Igor Pavlov on 08.02.13. + Copyright (c) 2013 Igor Pavlov. All rights reserved. +*/ +"CANCEL" = "Отмена"; +"QUIT_QUESTION" = "Вы действительно хотите выйти?"; +"RANDOMIZE" = "Пожалуйста, подвигайте мышкой для рандомизации."; diff --git a/iDNA/ru.lproj/MainMenu.xib b/iDNA/ru.lproj/MainMenu.xib new file mode 100644 index 0000000..3286e27 --- /dev/null +++ b/iDNA/ru.lproj/MainMenu.xib @@ -0,0 +1,1064 @@ + + + + 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 + + + + About iDNA + + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + YES + 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 + + + + + + + + + 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 + + + + + + + + + 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 + + + + clearRecentDocuments: + + + + 127 + + + + performClose: + + + + 193 + + + + undo: + + + + 223 + + + + copy: + + + + 224 + + + + paste: + + + + 226 + + + + cut: + + + + 228 + + + + redo: + + + + 231 + + + + selectAll: + + + + 232 + + + + delete: + + + + 235 + + + + performZoom: + + + + 240 + + + + saveDocument: + + + + 362 + + + + revertDocumentToSaved: + + + + 364 + + + + hide: + + + + 367 + + + + hideOtherApplications: + + + + 368 + + + + unhideAllApplications: + + + + 370 + + + + newDocument: + + + + 371 + + + + openDocument: + + + + 372 + + + + pasteAsPlainText: + + + + 471 + + + + showHelp: + + + + 494 + + + + + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 29 + + + + + + + + + + + + 19 + + + + + + + + 56 + + + + + + + + 217 + + + + + + + + 83 + + + + + + + + 81 + + + + + + + + + + + + + + 75 + + + + + 72 + + + + + 82 + + + + + 124 + + + + + + + + 73 + + + + + 79 + + + + + 112 + + + + + 125 + + + + + + + + 126 + + + + + 205 + + + + + + + + + + + + + + + + 202 + + + + + 198 + + + + + 207 + + + + + 199 + + + + + 203 + + + + + 197 + + + + + 206 + + + + + 215 + + + + + 57 + + + + + + + + + + + + + + + + + + 58 + + + + + 134 + + + + + 150 + + + + + 136 + + + + + 144 + + + + + 129 + + + + + 143 + + + + + 236 + + + + + 131 + + + + + + + + 149 + + + + + 145 + + + + + 130 + + + + + 24 + + + + + + + + + + + 92 + + + + + 5 + + + + + 239 + + + + + 23 + + + + + 419 + + + + + 470 + + + + + 491 + + + + + + + + 492 + + + + + + + + 493 + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + 535 + + + + + FirstResponder + + duplicateDocument: + id + + + duplicateDocument: + + duplicateDocument: + id + + + + IBUserSource + + + + + + 0 + IBCocoaFramework + YES + 3 + + {11, 11} + {10, 3} + + YES + +