diff --git a/iDNA/iDNA.xcodeproj/project.pbxproj b/iDNA/iDNA.xcodeproj/project.pbxproj new file mode 100644 index 0000000..ed16ede --- /dev/null +++ b/iDNA/iDNA.xcodeproj/project.pbxproj @@ -0,0 +1,386 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + FA03ADBA16BBF68A001FD807 /* PreferencesController.m in Sources */ = {isa = PBXBuildFile; fileRef = FA03ADB916BBF68A001FD807 /* PreferencesController.m */; }; + FA40EB4C16C12A5A00DE3FB2 /* RandomWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = FA40EB4A16C12A5A00DE3FB2 /* RandomWindowController.m */; }; + FA40EB4E16C12A9E00DE3FB2 /* RandomWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = FA40EB5016C12A9E00DE3FB2 /* RandomWindowController.xib */; }; + FA40EB5816C13F7000DE3FB2 /* MouseView.m in Sources */ = {isa = PBXBuildFile; fileRef = FA40EB5716C13F7000DE3FB2 /* MouseView.m */; }; + FA43D70616AFDFBD00CDECCF /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA43D70516AFDFBD00CDECCF /* Cocoa.framework */; }; + FA43D71016AFDFBD00CDECCF /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = FA43D70E16AFDFBD00CDECCF /* InfoPlist.strings */; }; + FA43D71216AFDFBD00CDECCF /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = FA43D71116AFDFBD00CDECCF /* main.m */; }; + FA43D71616AFDFBD00CDECCF /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = FA43D71416AFDFBD00CDECCF /* Credits.rtf */; }; + FA43D71916AFDFBD00CDECCF /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = FA43D71816AFDFBD00CDECCF /* AppDelegate.m */; }; + FA43D71C16AFDFBD00CDECCF /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = FA43D71A16AFDFBD00CDECCF /* MainMenu.xib */; }; + FA43D72616AFE04500CDECCF /* Cell.m in Sources */ = {isa = PBXBuildFile; fileRef = FA43D72316AFE04500CDECCF /* Cell.m */; }; + FA43D72716AFE04500CDECCF /* Population.m in Sources */ = {isa = PBXBuildFile; fileRef = FA43D72516AFE04500CDECCF /* Population.m */; }; + FA43D72D16AFE45100CDECCF /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = FA43D72F16AFE45100CDECCF /* Localizable.strings */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + FA03ADB816BBF68A001FD807 /* PreferencesController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PreferencesController.h; sourceTree = ""; }; + FA03ADB916BBF68A001FD807 /* PreferencesController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PreferencesController.m; sourceTree = ""; }; + FA40EB4916C12A5A00DE3FB2 /* RandomWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RandomWindowController.h; sourceTree = ""; }; + FA40EB4A16C12A5A00DE3FB2 /* RandomWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RandomWindowController.m; sourceTree = ""; }; + FA40EB5116C12AA000DE3FB2 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/RandomWindowController.xib; sourceTree = ""; }; + FA40EB5616C13F7000DE3FB2 /* MouseView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MouseView.h; sourceTree = ""; }; + FA40EB5716C13F7000DE3FB2 /* MouseView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MouseView.m; sourceTree = ""; }; + FA43D70116AFDFBD00CDECCF /* iDNA.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = iDNA.app; sourceTree = BUILT_PRODUCTS_DIR; }; + FA43D70516AFDFBD00CDECCF /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; + FA43D70816AFDFBD00CDECCF /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; }; + FA43D70916AFDFBD00CDECCF /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; }; + FA43D70A16AFDFBD00CDECCF /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + FA43D70D16AFDFBD00CDECCF /* iDNA-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "iDNA-Info.plist"; sourceTree = ""; }; + FA43D70F16AFDFBD00CDECCF /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; + FA43D71116AFDFBD00CDECCF /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + FA43D71316AFDFBD00CDECCF /* iDNA-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "iDNA-Prefix.pch"; sourceTree = ""; }; + FA43D71516AFDFBD00CDECCF /* en */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = en; path = en.lproj/Credits.rtf; sourceTree = ""; }; + FA43D71716AFDFBD00CDECCF /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; + FA43D71816AFDFBD00CDECCF /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; + FA43D71B16AFDFBD00CDECCF /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/MainMenu.xib; sourceTree = ""; }; + FA43D72216AFE04500CDECCF /* Cell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Cell.h; sourceTree = ""; }; + FA43D72316AFE04500CDECCF /* Cell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Cell.m; sourceTree = ""; }; + FA43D72416AFE04500CDECCF /* Population.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Population.h; sourceTree = ""; }; + FA43D72516AFE04500CDECCF /* Population.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Population.m; sourceTree = ""; }; + FA43D72816AFE16F00CDECCF /* ru */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ru; path = ru.lproj/MainMenu.xib; sourceTree = ""; }; + FA43D72916AFE16F00CDECCF /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/InfoPlist.strings; sourceTree = ""; }; + FA43D72A16AFE16F00CDECCF /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = ru; path = ru.lproj/Credits.rtf; sourceTree = ""; }; + FA43D72E16AFE45100CDECCF /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Localizable.strings; sourceTree = ""; }; + FA43D73016AFE45600CDECCF /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; + FAF14E1816C26DCC00A50E9A /* ru */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ru; path = ru.lproj/RandomWindowController.xib; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + FA43D6FE16AFDFBD00CDECCF /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + FA43D70616AFDFBD00CDECCF /* Cocoa.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + FA40EB5416C13E7C00DE3FB2 /* RandomPanel */ = { + isa = PBXGroup; + children = ( + FA40EB4916C12A5A00DE3FB2 /* RandomWindowController.h */, + FA40EB4A16C12A5A00DE3FB2 /* RandomWindowController.m */, + FA40EB5016C12A9E00DE3FB2 /* RandomWindowController.xib */, + FA40EB5616C13F7000DE3FB2 /* MouseView.h */, + FA40EB5716C13F7000DE3FB2 /* MouseView.m */, + ); + name = RandomPanel; + sourceTree = ""; + }; + FA40EB5516C13E9D00DE3FB2 /* DNA */ = { + isa = PBXGroup; + children = ( + FA43D72216AFE04500CDECCF /* Cell.h */, + FA43D72316AFE04500CDECCF /* Cell.m */, + FA43D72416AFE04500CDECCF /* Population.h */, + FA43D72516AFE04500CDECCF /* Population.m */, + ); + name = DNA; + sourceTree = ""; + }; + FA43D6F616AFDFBD00CDECCF = { + isa = PBXGroup; + children = ( + FA43D70B16AFDFBD00CDECCF /* iDNA */, + FA43D70416AFDFBD00CDECCF /* Frameworks */, + FA43D70216AFDFBD00CDECCF /* Products */, + ); + sourceTree = ""; + }; + FA43D70216AFDFBD00CDECCF /* Products */ = { + isa = PBXGroup; + children = ( + FA43D70116AFDFBD00CDECCF /* iDNA.app */, + ); + name = Products; + sourceTree = ""; + }; + FA43D70416AFDFBD00CDECCF /* Frameworks */ = { + isa = PBXGroup; + children = ( + FA43D70516AFDFBD00CDECCF /* Cocoa.framework */, + FA43D70716AFDFBD00CDECCF /* Other Frameworks */, + ); + name = Frameworks; + sourceTree = ""; + }; + FA43D70716AFDFBD00CDECCF /* Other Frameworks */ = { + isa = PBXGroup; + children = ( + FA43D70816AFDFBD00CDECCF /* AppKit.framework */, + FA43D70916AFDFBD00CDECCF /* CoreData.framework */, + FA43D70A16AFDFBD00CDECCF /* Foundation.framework */, + ); + name = "Other Frameworks"; + sourceTree = ""; + }; + FA43D70B16AFDFBD00CDECCF /* iDNA */ = { + isa = PBXGroup; + children = ( + FA40EB5516C13E9D00DE3FB2 /* DNA */, + FA40EB5416C13E7C00DE3FB2 /* RandomPanel */, + FA03ADB816BBF68A001FD807 /* PreferencesController.h */, + FA03ADB916BBF68A001FD807 /* PreferencesController.m */, + FA43D71716AFDFBD00CDECCF /* AppDelegate.h */, + FA43D71816AFDFBD00CDECCF /* AppDelegate.m */, + FA43D71A16AFDFBD00CDECCF /* MainMenu.xib */, + FA43D72F16AFE45100CDECCF /* Localizable.strings */, + FA43D70C16AFDFBD00CDECCF /* Supporting Files */, + ); + path = iDNA; + sourceTree = ""; + }; + FA43D70C16AFDFBD00CDECCF /* Supporting Files */ = { + isa = PBXGroup; + children = ( + FA43D70D16AFDFBD00CDECCF /* iDNA-Info.plist */, + FA43D70E16AFDFBD00CDECCF /* InfoPlist.strings */, + FA43D71116AFDFBD00CDECCF /* main.m */, + FA43D71316AFDFBD00CDECCF /* iDNA-Prefix.pch */, + FA43D71416AFDFBD00CDECCF /* Credits.rtf */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + FA43D70016AFDFBD00CDECCF /* iDNA */ = { + isa = PBXNativeTarget; + buildConfigurationList = FA43D71F16AFDFBD00CDECCF /* Build configuration list for PBXNativeTarget "iDNA" */; + buildPhases = ( + FA43D6FD16AFDFBD00CDECCF /* Sources */, + FA43D6FE16AFDFBD00CDECCF /* Frameworks */, + FA43D6FF16AFDFBD00CDECCF /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = iDNA; + productName = iDNA; + productReference = FA43D70116AFDFBD00CDECCF /* iDNA.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + FA43D6F816AFDFBD00CDECCF /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0450; + ORGANIZATIONNAME = alex; + }; + buildConfigurationList = FA43D6FB16AFDFBD00CDECCF /* Build configuration list for PBXProject "iDNA" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ru, + ); + mainGroup = FA43D6F616AFDFBD00CDECCF; + productRefGroup = FA43D70216AFDFBD00CDECCF /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + FA43D70016AFDFBD00CDECCF /* iDNA */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + FA43D6FF16AFDFBD00CDECCF /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + FA43D71016AFDFBD00CDECCF /* InfoPlist.strings in Resources */, + FA43D71616AFDFBD00CDECCF /* Credits.rtf in Resources */, + FA43D71C16AFDFBD00CDECCF /* MainMenu.xib in Resources */, + FA43D72D16AFE45100CDECCF /* Localizable.strings in Resources */, + FA40EB4E16C12A9E00DE3FB2 /* RandomWindowController.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + FA43D6FD16AFDFBD00CDECCF /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + FA43D71216AFDFBD00CDECCF /* main.m in Sources */, + FA43D71916AFDFBD00CDECCF /* AppDelegate.m in Sources */, + FA43D72616AFE04500CDECCF /* Cell.m in Sources */, + FA43D72716AFE04500CDECCF /* Population.m in Sources */, + FA03ADBA16BBF68A001FD807 /* PreferencesController.m in Sources */, + FA40EB4C16C12A5A00DE3FB2 /* RandomWindowController.m in Sources */, + FA40EB5816C13F7000DE3FB2 /* MouseView.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + FA40EB5016C12A9E00DE3FB2 /* RandomWindowController.xib */ = { + isa = PBXVariantGroup; + children = ( + FA40EB5116C12AA000DE3FB2 /* en */, + FAF14E1816C26DCC00A50E9A /* ru */, + ); + name = RandomWindowController.xib; + sourceTree = ""; + }; + FA43D70E16AFDFBD00CDECCF /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + FA43D70F16AFDFBD00CDECCF /* en */, + FA43D72916AFE16F00CDECCF /* ru */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; + FA43D71416AFDFBD00CDECCF /* Credits.rtf */ = { + isa = PBXVariantGroup; + children = ( + FA43D71516AFDFBD00CDECCF /* en */, + FA43D72A16AFE16F00CDECCF /* ru */, + ); + name = Credits.rtf; + sourceTree = ""; + }; + FA43D71A16AFDFBD00CDECCF /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + FA43D71B16AFDFBD00CDECCF /* en */, + FA43D72816AFE16F00CDECCF /* ru */, + ); + name = MainMenu.xib; + sourceTree = ""; + }; + FA43D72F16AFE45100CDECCF /* Localizable.strings */ = { + isa = PBXVariantGroup; + children = ( + FA43D72E16AFE45100CDECCF /* ru */, + FA43D73016AFE45600CDECCF /* en */, + ); + name = Localizable.strings; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + FA43D71D16AFDFBD00CDECCF /* 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; + }; + FA43D71E16AFDFBD00CDECCF /* 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; + }; + FA43D72016AFDFBD00CDECCF /* 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; + }; + FA43D72116AFDFBD00CDECCF /* 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 */ + FA43D6FB16AFDFBD00CDECCF /* Build configuration list for PBXProject "iDNA" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + FA43D71D16AFDFBD00CDECCF /* Debug */, + FA43D71E16AFDFBD00CDECCF /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + FA43D71F16AFDFBD00CDECCF /* Build configuration list for PBXNativeTarget "iDNA" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + FA43D72016AFDFBD00CDECCF /* Debug */, + FA43D72116AFDFBD00CDECCF /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = FA43D6F816AFDFBD00CDECCF /* Project object */; +} diff --git a/iDNA/iDNA.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/iDNA/iDNA.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..2d38afe --- /dev/null +++ b/iDNA/iDNA.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/iDNA/iDNA.xcodeproj/project.xcworkspace/xcuserdata/alex.xcuserdatad/UserInterfaceState.xcuserstate b/iDNA/iDNA.xcodeproj/project.xcworkspace/xcuserdata/alex.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000..bb06a0b Binary files /dev/null and b/iDNA/iDNA.xcodeproj/project.xcworkspace/xcuserdata/alex.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/iDNA/iDNA.xcodeproj/xcuserdata/alex.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist b/iDNA/iDNA.xcodeproj/xcuserdata/alex.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist new file mode 100644 index 0000000..15a8215 --- /dev/null +++ b/iDNA/iDNA.xcodeproj/xcuserdata/alex.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist @@ -0,0 +1,20 @@ + + + + + + + diff --git a/iDNA/iDNA.xcodeproj/xcuserdata/alex.xcuserdatad/xcschemes/iDNA.xcscheme b/iDNA/iDNA.xcodeproj/xcuserdata/alex.xcuserdatad/xcschemes/iDNA.xcscheme new file mode 100644 index 0000000..27bbff2 --- /dev/null +++ b/iDNA/iDNA.xcodeproj/xcuserdata/alex.xcuserdatad/xcschemes/iDNA.xcscheme @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iDNA/iDNA.xcodeproj/xcuserdata/alex.xcuserdatad/xcschemes/xcschememanagement.plist b/iDNA/iDNA.xcodeproj/xcuserdata/alex.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..0c5b14c --- /dev/null +++ b/iDNA/iDNA.xcodeproj/xcuserdata/alex.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,22 @@ + + + + + SchemeUserState + + iDNA.xcscheme + + orderHint + 0 + + + SuppressBuildableAutocreation + + FA43D70016AFDFBD00CDECCF + + primary + + + + + diff --git a/iDNA/iDNA/.DS_Store b/iDNA/iDNA/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/iDNA/iDNA/.DS_Store differ diff --git a/iDNA/iDNA/AppDelegate.h b/iDNA/iDNA/AppDelegate.h new file mode 100755 index 0000000..7028c5c --- /dev/null +++ b/iDNA/iDNA/AppDelegate.h @@ -0,0 +1,47 @@ +// +// AppDelegate.h +// iDNA +// +// Created by alex on 17/12/2012. +// Copyright (c) 2012 alex. All rights reserved. +// + +#import + +@class Cell; +@class PreferencesController; +@class RandomWindowController; + +@interface AppDelegate : NSObject { + PreferencesController *preferences; + RandomWindowController *randomPanel; + + NSInteger populationSize; + NSInteger DNALength; + NSInteger mutationRate; + BOOL paused; +} + +@property Cell* DNA; // goal DNA + +@property (assign) IBOutlet NSWindow *window; +@property (weak) IBOutlet NSWindow *randomPanel; +@property (weak) IBOutlet NSTextField *populationSizeTextField; +@property (weak) IBOutlet NSTextField *DNALengthTextField; +@property (weak) IBOutlet NSTextField *mutationRateTextField; +@property (weak) IBOutlet NSTextField *goalDNATextField; +@property (weak) IBOutlet NSTextField *generationLabel; +@property (weak) IBOutlet NSTextField *bestMatchLabel; +@property (weak) IBOutlet NSButton *startEvolutionButton; +@property (weak) IBOutlet NSButton *pauseButton; +@property (weak) IBOutlet NSSlider *populationSizeSlider; +@property (weak) IBOutlet NSSlider *DNALengthSlider; +@property (weak) IBOutlet NSSlider *mutationRateSlider; +@property (weak) IBOutlet NSButton *loadDNAButton; + +- (IBAction)startEvolution:(id)sender; +- (IBAction)pauseClick:(id)sender; +- (IBAction)saveAs:(id)sender; +- (IBAction)openFile:(id)sender; + +@end diff --git a/iDNA/iDNA/AppDelegate.m b/iDNA/iDNA/AppDelegate.m new file mode 100755 index 0000000..1af2405 --- /dev/null +++ b/iDNA/iDNA/AppDelegate.m @@ -0,0 +1,184 @@ +// +// AppDelegate.m +// iDNA +// +// Created by alex on 17/12/2012. +// Copyright (c) 2012 alex. All rights reserved. +// + +#import "AppDelegate.h" +#import "Cell.h" +#import "Population.h" +#import "PreferencesController.h" +#import "RandomWindowController.h" + +@implementation AppDelegate + +- (void)applicationDidFinishLaunching:(NSNotification *)aNotification +{ + [self setValue:[NSNumber numberWithLong:[preferences populationSize]] forKey:@"populationSize"]; + [self setValue:[NSNumber numberWithLong:[preferences DNALength]] forKey:@"DNALength"]; + [self setValue:[NSNumber numberWithLong:[preferences mutationRate]] forKey:@"mutationRate"]; +} + +-(NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender +{ + NSAlert *alert = [NSAlert alertWithMessageText:NSLocalizedString(@"MSG_EXIT", @"") defaultButton:NSLocalizedString(@"BTN_YES", @"")alternateButton:NSLocalizedString(@"BTN_NO", @"") otherButton:nil informativeTextWithFormat:@""]; + + NSInteger answer = [alert runModal]; + + if (answer == NSAlertAlternateReturn) return NSTerminateCancel; + + return NSTerminateNow; +} + +-(id)init { + if (self = [super init]) { + preferences = [[PreferencesController alloc] init]; + + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleDNAChange:) name:DNAChangeNotification object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleFinishRandomGeneration:) name:@"FinishRandomGeneration" object:nil]; + + _DNA = [[Cell alloc] init]; + [self addObserver:self forKeyPath:@"populationSize" options:0 context:nil]; + [self addObserver:self forKeyPath:@"DNALength" options:0 context:nil]; + [self addObserver:self forKeyPath:@"mutationRate" options:0 context:nil]; + + paused = NO; + } + + return self; +} + +-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context +{ + if ([keyPath isEqualToString:@"populationSize"]) { + [preferences setPopulationSize:[[self valueForKey:@"populationSize"] intValue]]; + } else if ([keyPath isEqualToString:@"DNALength"]) { + [_DNA populateForSize:[[self valueForKey:@"DNALength"] intValue]]; + [preferences setDNALength:[[self valueForKey:@"DNALength"] intValue]]; + } else if ([keyPath isEqualToString:@"mutationRate"]) { + [preferences setMutationRate:[[self valueForKey:@"mutationRate"] intValue]]; + } else { + [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; + } +} + +-(void)handleDNAChange:(NSNotification *)n +{ + [_goalDNATextField setStringValue:[_DNA asString]]; +} + +- (IBAction)startEvolution:(id)sender +{ + randomPanel = [[RandomWindowController alloc] initWithWindowNibName:@"RandomWindowController"]; + + [NSApp beginSheet: [randomPanel window] + modalForWindow: [self window] + modalDelegate: randomPanel + didEndSelector: @selector(sheetDidEnd:returnCode:contextInfo:) + contextInfo: nil]; + + [NSApp runModalForWindow: [randomPanel window]]; + [NSApp endSheet: [randomPanel window]]; +} + +-(void)handleFinishRandomGeneration:(NSNotification*)notification +{ + NSLog(@"finish random generation"); + + NSNumber *number = [[notification userInfo] objectForKey: @"random"]; + + // абсолютно ненужное действие, но требуется по условиям задания + srandom(number); + + [self setStateOfUIElements:FALSE]; + [self performSelectorInBackground:@selector(evolutionJob) withObject:nil]; +} + +-(void)evolutionJob +{ + Population *population = [[Population alloc] initPopulationWithSize:[[self valueForKey:@"populationSize"] intValue] andSizeDNA:[[self valueForKey:@"DNALength"] intValue] andGoalDNA:_DNA]; + + int i = 1; + int evolutionResult = -1; + int bestMatch = 999; + int l = [[self valueForKey:@"DNALength"] intValue]; + paused = NO; + + while (true) { + [_generationLabel setStringValue:[NSString stringWithFormat:NSLocalizedString(@"GENERATION", ""), i]]; + + evolutionResult = [population evolution:[[self valueForKey:@"mutationRate"] intValue]]; + if (bestMatch > evolutionResult) { + bestMatch = evolutionResult; + [_bestMatchLabel setStringValue:[NSString stringWithFormat:NSLocalizedString(@"BEST_MATCH", ""), 100-bestMatch*100/l]]; + } + + // для отладки + /* + [_goalDNATextField setStringValue:[[_DNA asString] stringByAppendingFormat:@"\r\n%@ - %d (%d)", [[population bestMatch] asString], [[population bestMatch] hammingDistance:_DNA], evolutionResult]]; + */ + + if (paused || !bestMatch) { + [self setStateOfUIElements:TRUE]; + break; + } + + i++; + } +} + +-(void)setStateOfUIElements:(BOOL)newState +{ + [_pauseButton setEnabled:!newState]; + [_startEvolutionButton setEnabled:newState]; + [_populationSizeSlider setEnabled:newState]; + [_populationSizeTextField setEnabled:newState]; + [_DNALengthSlider setEnabled:newState]; + [_DNALengthTextField setEnabled:newState]; + [_mutationRateSlider setEnabled:newState]; + [_mutationRateTextField setEnabled:newState]; + [_loadDNAButton setEnabled:newState]; +} + +- (IBAction)pauseClick:(id)sender +{ + paused = YES; +} + +- (IBAction)saveAs:(id)sender +{ + NSSavePanel *panel = [NSSavePanel savePanel]; + if ([panel runModal] == NSOKButton) { + NSError *error; + + [[[self DNA] asString] writeToURL:[panel URL] atomically:YES encoding:NSUTF8StringEncoding error:&error]; + + if (error.code) { + NSAlert *alert = [NSAlert alertWithMessageText:NSLocalizedString(@"ERROR_SAVE", @"") defaultButton:NSLocalizedString(@"BTN_CLOSE", @"") alternateButton:nil otherButton:nil informativeTextWithFormat:@""]; + [alert runModal]; + } + } +} + +- (IBAction)openFile:(id)sender +{ + NSOpenPanel *panel = [NSOpenPanel openPanel]; + if ([panel runModal] == NSOKButton) { + NSError *error; + + NSString *string = [NSString stringWithContentsOfURL:[panel URL] encoding:NSUTF8StringEncoding error:&error]; + // ставим правильное значение длины ДНК + [self setValue:[NSNumber numberWithInt:(int)string.length] forKey:@"DNALength"]; + // пишем новое ДНК в соотв. поле + [_DNA populateWithString:string]; + + if (error.code) { + NSAlert *alert = [NSAlert alertWithMessageText:NSLocalizedString(@"ERROR_OPEN", @"") defaultButton:NSLocalizedString(@"BTN_CLOSE", @"") alternateButton:nil otherButton:nil informativeTextWithFormat:@""]; + [alert runModal]; + } + } +} + +@end diff --git a/iDNA/iDNA/Cell.h b/iDNA/iDNA/Cell.h new file mode 100755 index 0000000..ccd68dc --- /dev/null +++ b/iDNA/iDNA/Cell.h @@ -0,0 +1,41 @@ +// +// Cell.h +// DNAProject +// +// Created by alex on 31/10/2012. +// Copyright (c) 2012 alex. All rights reserved. +// + +#import + +extern NSString *const DNAChangeNotification; + +@interface Cell : NSObject { + NSArray *DNAElements; // A, T, G и C +} + +@property NSMutableArray *DNA; +@property Cell *rootCell; +@property int hammingDistanceToRootCell; + + +-(id) init; +-(id) initWithSize: (NSInteger) size; +-(id) initWithSize: (NSInteger) size andRootCell:(Cell*)cell; +-(id) initWithString: (NSString*) string; +-(void) populateForSize: (NSInteger) size; +-(void) populateWithString: (NSString*) string; +-(int) hammingDistance: (Cell*) cell; +-(NSString*) asString; +-(NSComparisonResult)compareWithCell:(Cell*) cell; +-(id)combineWith:(Cell*) cell withWay:(int)n; + ++(id) copyCell: (Cell*) cell; + +@end + +@interface Cell (mutator) + +-(void) mutate: (NSInteger)X; + +@end diff --git a/iDNA/iDNA/Cell.m b/iDNA/iDNA/Cell.m new file mode 100755 index 0000000..315ea60 --- /dev/null +++ b/iDNA/iDNA/Cell.m @@ -0,0 +1,203 @@ +// +// Cell.m +// DNAProject +// +// Created by alex on 31/10/2012. +// Copyright (c) 2012 alex. All rights reserved. +// + +#import "Cell.h" + +NSString *const DNAChangeNotification = @"DNAChangeNotification"; + +@implementation Cell (mutator) + +-(void) mutate: (NSInteger)X +{ + // количество ячеек, которые нужно заменить + int n = (int)floor([[self DNA] count]*X/100); + NSMutableArray *exists = [[NSMutableArray alloc] init]; + + for (int i = 0; i < n; i++) { + // следим, чтобы не воткнуть новый элемент в уже измененную ячейку + int k = arc4random()%[[self DNA] count]; + while ([exists containsObject:[NSNumber numberWithInteger:k]]) { + k = arc4random()%[[self DNA] count]; + } + // добавляем номер ячейки в список измененных + [exists addObject:[NSNumber numberWithInteger:k]]; + + // запоминаем, что у нас на этом месте стояло + NSString *prev = [[self DNA] objectAtIndex:k]; + // и заменяем на другой(!) элемент + while ([prev isEqualToString:[[self DNA] objectAtIndex:k]]) { + [[self DNA] replaceObjectAtIndex:k withObject:[DNAElements objectAtIndex:arc4random()%4]]; + } + } + + // сбрасываем закэшированное значение расстояния до goalDNA + self.hammingDistanceToRootCell = -1; +} + +@end + + +@implementation Cell + +-(id) init +{ + if (self = [super init]) { + DNAElements = [[NSArray alloc] initWithObjects:@"A", @"T", @"G", @"C", nil]; + _DNA = [[NSMutableArray alloc] init]; + _hammingDistanceToRootCell = -1; + } + return self; +} + +-(id)initWithSize:(NSInteger)size +{ + if (self = [self init]) { + [self populateForSize:size]; + } + return self; +} + +-(id)initWithSize:(NSInteger)size andRootCell:(Cell *)cell +{ + if (self = [self initWithSize:size]) { + _rootCell = cell; + } + return self; +} + +-(id)initWithString:(NSString *)string +{ + if (self = [self init]) { + [self populateWithString:string]; + } + return self; +} + +-(void)populateForSize:(NSInteger)size +{ + [_DNA removeAllObjects]; + + // заполняем массив DNA случайными элементами + for (int i = 0; i < size; i++) { + [_DNA addObject:[DNAElements objectAtIndex:arc4random()%4]]; + } + //NSLog(@"%@", _DNA); + + // говорим всем, что значение поменялось + [[NSNotificationCenter defaultCenter] postNotificationName:DNAChangeNotification object:self]; +} + +-(void)populateWithString:(NSString*)string +{ + [_DNA removeAllObjects]; + + for (int i = 0; i < string.length; i++) { + [_DNA addObject:[string substringWithRange:NSMakeRange(i, 1)]]; + } + + // говорим всем, что значение поменялось + [[NSNotificationCenter defaultCenter] postNotificationName:DNAChangeNotification object:self]; +} + + +-(int) hammingDistance:(Cell *)cell +{ + int result = 0; + + // проверяем, а не с goalDNA мы сравниваем, если да, то пытаемся возвратить закэшированное значение + if (self == _rootCell || cell == _rootCell) { + if (_hammingDistanceToRootCell > -1) { + //NSLog(@"return cached value (%d)", _hammingDistanceToRootCell); + return _hammingDistanceToRootCell; + } + } + + for (int i = 0; i < _DNA.count; i++) { + if (![[_DNA objectAtIndex:i] isEqualToString: [[cell DNA] objectAtIndex:i]]) { + result++; + } + } + + // если сравниваем с goalDNA, то кэшируем полученное значение + if (self == _rootCell || cell == _rootCell) { + //NSLog(@"store value (%d) in cache", result); + _hammingDistanceToRootCell = result; + } + + return result; +} + + +-(NSString*) asString +{ + return [[_DNA valueForKey:@"description"] componentsJoinedByString:@""]; +} + +-(NSComparisonResult)compareWithCell:(Cell*) cell +{ + int distance1 = [_rootCell hammingDistance:self]; + int distance2 = [_rootCell hammingDistance:cell]; + + if (distance1 < distance2) { + return NSOrderedAscending; + } else + if (distance1 > distance2) { + return NSOrderedDescending; + } else + return NSOrderedSame; + + // сравнение имеет смысл только с goalDNA + //return [[[NSNumber alloc] initWithInt:[_rootCell hammingDistance:self]] compare:[[NSNumber alloc] initWithInt:[_rootCell hammingDistance:cell]]]; +} + +-(id)combineWith:(Cell *)cell withWay:(int)n +{ + Cell *newCell = [Cell copyCell:self]; + + if (n == 1) { // 50% первого ДНК + 50% второго ДНК + + int size1 = (int)_DNA.count/2; // середина нашего массива + int size2 = (int)cell.DNA.count/2; // середина другого массива + // если число элементов нечетное, то чуточку подправляем... + if (size2 < _DNA.count-size1) { + size2 = (int)_DNA.count-size1; + } + + [newCell.DNA replaceObjectsInRange:NSMakeRange(size1, _DNA.count-size1) withObjectsFromArray:cell.DNA range:NSMakeRange(0, size2)]; + + } else if (n == 2) { // 1% первого ДНК + 1% второго ДНК + 1% первого ДНК + ... и т.д. (в лекции было сказано, что можно просто по одной штучке менять) + + int i = 1; + while (i < newCell.DNA.count) { + if (i >= cell.DNA.count) break; + [newCell.DNA replaceObjectAtIndex:i withObject:[cell.DNA objectAtIndex:i]]; + i += 2; + } + + } else if (n == 3) { // 20% первого ДНК + 60% второго ДНК + 20% первого ДНК + int size20 = (int)_DNA.count/5; // 20% нашего массива + int size60 = (int)cell.DNA.count*0.6f; // 60% чужого массива + + [newCell.DNA replaceObjectsInRange:NSMakeRange(size20, size60) withObjectsFromArray:cell.DNA range:NSMakeRange(0, size60)]; // - тут автоматически должно остаться 20% исходного массива в конце + } + + return newCell; +} + ++(id) copyCell:(Cell *) cell +{ + Cell *result = [[Cell alloc] initWithSize:[[cell DNA] count]]; + NSMutableArray *dest = [result DNA]; + NSMutableArray *source = [cell DNA]; + for (int i = 0; i < source.count; i++) { + [dest replaceObjectAtIndex:i withObject: [source objectAtIndex:i]]; + } + return result; +} + +@end diff --git a/iDNA/iDNA/MouseView.h b/iDNA/iDNA/MouseView.h new file mode 100644 index 0000000..68c3f14 --- /dev/null +++ b/iDNA/iDNA/MouseView.h @@ -0,0 +1,15 @@ +// +// MouseView.h +// iDNA +// +// Created by alex on 05/02/2013. +// Copyright (c) 2013 alex. All rights reserved. +// + +#import + +@interface MouseView : NSView { + NSPoint p; +} + +@end diff --git a/iDNA/iDNA/MouseView.m b/iDNA/iDNA/MouseView.m new file mode 100644 index 0000000..b735f62 --- /dev/null +++ b/iDNA/iDNA/MouseView.m @@ -0,0 +1,56 @@ +// +// MouseView.m +// iDNA +// +// Created by alex on 05/02/2013. +// Copyright (c) 2013 alex. All rights reserved. +// + +#import "MouseView.h" + +@implementation MouseView + +- (id)initWithFrame:(NSRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + p = NSMakePoint(0, 0); + } + + return self; +} + +- (void)drawRect:(NSRect)dirtyRect +{ + [[NSColor blackColor] set]; + [NSBezierPath strokeRect:[self bounds]]; +} + +- (void)mouseMoved:(NSEvent *)theEvent +{ + NSPoint realPoint = [self convertPoint:[theEvent locationInWindow] fromView:nil]; + int rand = (realPoint.x - p.x)*(realPoint.y - p.y); + p = NSMakePoint(realPoint.x, realPoint.y); + + NSDictionary *d = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:rand] forKey:@"random"]; + [[NSNotificationCenter defaultCenter] postNotificationName:@"RandomGeneration" object:self userInfo:d]; +} + +- (BOOL)acceptsFirstMouse:(NSEvent *)theEvent +{ + return YES; +} + +-(void)viewDidMoveToWindow +{ + NSTrackingArea *trackingArea = [[NSTrackingArea alloc] + initWithRect:[self frame] + options:NSTrackingMouseMoved+NSTrackingActiveInKeyWindow + owner:self + userInfo:nil]; + [self addTrackingArea:trackingArea]; + [self becomeFirstResponder]; + +} + +@end diff --git a/iDNA/iDNA/Population.h b/iDNA/iDNA/Population.h new file mode 100755 index 0000000..ca72c5d --- /dev/null +++ b/iDNA/iDNA/Population.h @@ -0,0 +1,25 @@ +// +// Population.h +// iDNA +// +// Created by alex on 12/20/12. +// Copyright (c) 2012 alex. All rights reserved. +// + +#import + +@class Cell; + +@interface Population : NSObject { + NSMutableArray *elements; +} + +@property Cell *goalDNA; +@property Cell *bestMatch; // для отладки + +-(id)initPopulationWithSize:(NSInteger)populationSize andSizeDNA:(NSInteger)sizeDNA andGoalDNA:(Cell*)goalDNA; +-(int)evolution: (NSInteger)mutation; + +-(NSMutableArray*)getElements; + +@end diff --git a/iDNA/iDNA/Population.m b/iDNA/iDNA/Population.m new file mode 100755 index 0000000..539442c --- /dev/null +++ b/iDNA/iDNA/Population.m @@ -0,0 +1,80 @@ +// +// Population.m +// iDNA +// +// Created by alex on 12/20/12. +// Copyright (c) 2012 alex. All rights reserved. +// + +#import "Population.h" +#import "Cell.h" + +@implementation Population + +-(id)init +{ + if (self = [super init]) { + elements = [[NSMutableArray alloc] init]; + } + return self; +} + +-(id)initPopulationWithSize:(NSInteger)populationSize andSizeDNA:(NSInteger)sizeDNA andGoalDNA:(Cell *)goalDNA +{ + if (self = [self init]) { + _goalDNA = goalDNA; + for (int i = 0; i < populationSize; i++) { + [elements addObject:[[Cell alloc] initWithSize:sizeDNA andRootCell:_goalDNA]]; + } + } + return self; +} + +-(int)evolution:(NSInteger)mutation +{ + [elements sortUsingSelector:@selector(compareWithCell:)]; + /* + for (Cell* cell in elements) { + NSLog(@"%d", [cell hammingDistance:_goalDNA]); + } + */ + + int result = [[elements objectAtIndex:0] hammingDistance:_goalDNA]; + + _bestMatch = [elements objectAtIndex:0]; + + // ищем половину списка + int size = (int)elements.count/2; + int middle = size; // запомним реальную половину списка + + // нам проще скрестить четное кол-во элементов, пусть один остается неизменным + if (size % 2) { + size--; + } + + int i = 0; + while (i < size/2) { + Cell *cell1 = [elements objectAtIndex:i]; + Cell *cell2 = [elements objectAtIndex:size-(i+1)]; // - второй берем с обратной стороны + + // комбинируем, выбирая случайный способ (1, 2 или 3) + Cell *newCell = [cell1 combineWith:cell2 withWay:(1+arc4random()%3)]; + + // замещаем вторую половину наших элементов на свежескомбинированные элементы + [elements replaceObjectAtIndex:middle+i withObject:newCell]; + i++; + } + + for (Cell *cell in elements) { + [cell mutate:mutation]; + } + + return result; +} + +-(NSMutableArray*)getElements +{ + return elements; +} + +@end diff --git a/iDNA/iDNA/PreferencesController.h b/iDNA/iDNA/PreferencesController.h new file mode 100644 index 0000000..a3bf3e8 --- /dev/null +++ b/iDNA/iDNA/PreferencesController.h @@ -0,0 +1,25 @@ +// +// PreferencesController.h +// iDNA +// +// Created by alex on 01/02/2013. +// Copyright (c) 2013 alex. All rights reserved. +// + +#import + +extern NSString *const PrefPopulationSize; +extern NSString *const PrefDNALength; +extern NSString *const PrefMutationRate; + +@interface PreferencesController : NSObject + +-(void)setPopulationSize:(NSInteger)value; +-(void)setDNALength:(NSInteger)value; +-(void)setMutationRate:(NSInteger)value; + +-(NSInteger)populationSize; +-(NSInteger)DNALength; +-(NSInteger)mutationRate; + +@end diff --git a/iDNA/iDNA/PreferencesController.m b/iDNA/iDNA/PreferencesController.m new file mode 100644 index 0000000..56d40ea --- /dev/null +++ b/iDNA/iDNA/PreferencesController.m @@ -0,0 +1,63 @@ +// +// PreferencesController.m +// iDNA +// +// Created by alex on 01/02/2013. +// Copyright (c) 2013 alex. All rights reserved. +// + +#import "PreferencesController.h" + +extern NSString *const PrefPopulationSize = @"PrefPopulationSize"; +extern NSString *const PrefDNALength = @"PrefDNALength"; +extern NSString *const PrefMutationRate = @"PrefMutationRate"; + + +@implementation PreferencesController + +-(id)init +{ + if (self = [super init]) { + NSMutableDictionary *defaultValues = [NSMutableDictionary dictionary]; + + // -1 означает, что нужно взять случайное значение + [defaultValues setObject:[NSNumber numberWithInt:-1] forKey:PrefPopulationSize]; + [defaultValues setObject:[NSNumber numberWithInt:-1] forKey:PrefDNALength]; + [defaultValues setObject:[NSNumber numberWithInt:-1] forKey:PrefMutationRate]; + + [[NSUserDefaults standardUserDefaults]registerDefaults:defaultValues]; + } + return self; +} + +-(void)setPopulationSize:(NSInteger)value +{ + [[NSUserDefaults standardUserDefaults] setInteger:value forKey:PrefPopulationSize]; +} +-(void)setDNALength:(NSInteger)value +{ + [[NSUserDefaults standardUserDefaults] setInteger:value forKey:PrefDNALength]; +} +-(void)setMutationRate:(NSInteger)value +{ + [[NSUserDefaults standardUserDefaults] setInteger:value forKey:PrefMutationRate]; +} + +-(NSInteger)populationSize +{ + NSInteger result = [[NSUserDefaults standardUserDefaults] integerForKey:PrefPopulationSize]; + return result < 0? 1+arc4random()%100 : result; +} +-(NSInteger)DNALength +{ + NSInteger result = [[NSUserDefaults standardUserDefaults] integerForKey:PrefDNALength]; + return result < 0? 1+arc4random()%100 : result; +} +-(NSInteger)mutationRate +{ + NSInteger result = [[NSUserDefaults standardUserDefaults] integerForKey:PrefMutationRate]; + return result < 0? 1+arc4random()%100 : result; +} + + +@end diff --git a/iDNA/iDNA/RandomWindowController.h b/iDNA/iDNA/RandomWindowController.h new file mode 100644 index 0000000..317046a --- /dev/null +++ b/iDNA/iDNA/RandomWindowController.h @@ -0,0 +1,21 @@ +// +// RandomWindowController.h +// iDNA +// +// Created by alex on 05/02/2013. +// Copyright (c) 2013 alex. All rights reserved. +// + +#import + +@interface RandomWindowController : NSWindowController + +@property (weak) IBOutlet NSProgressIndicator *progressBar; +@property (weak) IBOutlet NSView *view; +@property NSNumber *random; + +- (IBAction)onExit:(id)sender; + +- (void)sheetDidEnd:(NSWindow *)sheet returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo; + +@end diff --git a/iDNA/iDNA/RandomWindowController.m b/iDNA/iDNA/RandomWindowController.m new file mode 100644 index 0000000..ea62a57 --- /dev/null +++ b/iDNA/iDNA/RandomWindowController.m @@ -0,0 +1,56 @@ +// +// RandomWindowController.m +// iDNA +// +// Created by alex on 05/02/2013. +// Copyright (c) 2013 alex. All rights reserved. +// + +#import "RandomWindowController.h" + +@implementation RandomWindowController + +- (id)initWithWindow:(NSWindow *)window +{ + self = [super initWithWindow:window]; + if (self) { + // + } + + return self; +} + +- (void)windowDidLoad +{ + [super windowDidLoad]; + + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleRandomChange:) name:@"RandomGeneration" object:nil]; +} + +- (IBAction)onExit:(id)sender +{ + [NSApp stopModal]; +} + +-(void)handleRandomChange:(NSNotification *)notification +{ + NSNumber *number = [[notification userInfo] objectForKey: @"random"]; + [[self progressBar] incrementBy:1]; + + [_random initWithLong:[_random integerValue] + [number integerValue]]; + + if ([[self progressBar] doubleValue] >= 100) { + [NSApp stopModal]; + } +} + +- (void)sheetDidEnd:(NSWindow *)sheet returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo +{ + [sheet orderOut:self]; + + NSDictionary *d = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:_random] forKey:@"random"]; + [[NSNotificationCenter defaultCenter] postNotificationName:@"FinishRandomGeneration" object:self userInfo:d]; +} + + +@end diff --git a/iDNA/iDNA/en.lproj/Credits.rtf b/iDNA/iDNA/en.lproj/Credits.rtf new file mode 100755 index 0000000..46576ef --- /dev/null +++ b/iDNA/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/iDNA/en.lproj/InfoPlist.strings b/iDNA/iDNA/en.lproj/InfoPlist.strings new file mode 100755 index 0000000..477b28f --- /dev/null +++ b/iDNA/iDNA/en.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/iDNA/iDNA/en.lproj/Localizable.strings b/iDNA/iDNA/en.lproj/Localizable.strings new file mode 100644 index 0000000..764a46a --- /dev/null +++ b/iDNA/iDNA/en.lproj/Localizable.strings @@ -0,0 +1,8 @@ +"BEST_MATCH" = "Best individual match - %d%%"; +"MSG_EXIT" = "Do you really want to exit?"; +"BTN_YES" = "Yes"; +"BTN_NO" = "No"; +"ERROR_SAVE" = "Error save file"; +"ERROR_OPEN" = "Error open file"; +"BTN_CLOSE" = "Close"; +"GENERATION" = "Generation: %d"; \ No newline at end of file diff --git a/iDNA/iDNA/en.lproj/MainMenu.xib b/iDNA/iDNA/en.lproj/MainMenu.xib new file mode 100755 index 0000000..ef5d648 --- /dev/null +++ b/iDNA/iDNA/en.lproj/MainMenu.xib @@ -0,0 +1,3080 @@ + + + + 1080 + 12C3012 + 2844 + 1187.34 + 625.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 2844 + + + IBNSLayoutConstraint + NSBox + NSButton + NSButtonCell + NSCustomObject + NSMenu + NSMenuItem + NSNumberFormatter + NSProgressIndicator + NSSlider + NSSliderCell + NSTextField + NSTextFieldCell + NSUserDefaultsController + NSView + NSWindowTemplate + + + com.apple.InterfaceBuilder.CocoaPlugin + + + PluginDependencyRecalculationVersion + + + + + NSApplication + + + FirstResponder + + + NSApplication + + + AMainMenu + + + + iDNA + + 1048576 + 2147483647 + + NSImage + NSMenuCheckmark + + + NSImage + NSMenuMixedState + + submenuAction: + + iDNA + + + + About iDNA + + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Preferences… + , + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Services + + 1048576 + 2147483647 + + + submenuAction: + + Services + + _NSServicesMenu + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Hide iDNA + h + 1048576 + 2147483647 + + + + + + Hide Others + h + 1572864 + 2147483647 + + + + + + Show All + + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Quit iDNA + q + 1048576 + 2147483647 + + + + + _NSAppleMenu + + + + + File + + 1048576 + 2147483647 + + + submenuAction: + + File + + + + Open… + o + 1048576 + 2147483647 + + + + + + Save… + s + 1048576 + 2147483647 + + + + + + + + + Help + + 2147483647 + + + submenuAction: + + Help + + + + iDNA Help + ? + 1048576 + 2147483647 + + + + + _NSHelpMenu + + + + _NSMainMenu + + + 15 + 2 + {{335, 390}, {598, 428}} + 1954021376 + iDNA + NSWindow + + + + + 256 + + + + 268 + {{17, 391}, {112, 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, 366}, {112, 17}} + + + + _NS:1535 + YES + + 68157504 + 272630784 + DNA length + + _NS:1535 + + + + + NO + + + + 268 + {{17, 341}, {112, 17}} + + + + _NS:1535 + YES + + 68157504 + 272630784 + Mutation rate % + + _NS:1535 + + + + + NO + + + + 268 + {{124, 388}, {50, 22}} + + + + _NS:9 + YES + + -1804599231 + -1874852864 + + + + + + + + + + + + -∞ + + +∞ + + # + # + + + + + + + + NaN + + + + + + 3 + YES + YES + YES + + . + , + NO + NO + YES + + _NS:9 + + YES + + 6 + System + textBackgroundColor + + 3 + MQA + + + + 6 + System + textColor + + + + NO + + + + 268 + {{124, 363}, {50, 22}} + + + + _NS:9 + YES + + -1804599231 + -1874852864 + + + + + + + + + + -∞ + + +∞ + + # + # + + + + + + + + NaN + + + + + + 3 + YES + YES + YES + + . + , + NO + NO + YES + + _NS:9 + + YES + + + + NO + + + + 268 + {{124, 338}, {50, 22}} + + + + _NS:9 + YES + + -1804599231 + -1874852864 + + + + + + + + + + -∞ + + +∞ + + # + # + + + + + + + + NaN + + + + + + 3 + YES + YES + YES + + . + , + NO + NO + YES + + _NS:9 + + YES + + + + NO + + + + 268 + {{179, 388}, {401, 21}} + + + + _NS:9 + YES + + 67108864 + 0 + + _NS:9 + + 100 + 1 + 8.3140727796052616 + 0.0 + 0 + 1 + NO + NO + + NO + + + + 268 + {{179, 363}, {401, 21}} + + + + _NS:9 + YES + + -2080374784 + 0 + + _NS:9 + + 100 + 0.0 + 0.0 + 0.0 + 0 + 1 + NO + NO + + NO + + + + 268 + {{179, 338}, {401, 21}} + + + + _NS:9 + YES + + -2080374784 + 0 + + _NS:9 + + 100 + 0.0 + 0.0 + 0.0 + 0 + 1 + NO + NO + + NO + + + + 268 + {{236, 308}, {126, 17}} + + + + _NS:1535 + YES + + 68157504 + 138413120 + Generation: 0 + + LucidaGrande-Bold + 13 + 2072 + + _NS:1535 + + + + + NO + + + + 268 + {{199, 283}, {200, 17}} + + + + _NS:1535 + YES + + 68157504 + 138413056 + Best individual match - ??? + + _NS:1535 + + + + + NO + + + + 268 + {{20, 254}, {558, 20}} + + + + _NS:9 + {250, 250} + 16397 + 100 + + + + 12 + + + + 274 + + + + 268 + {{231, 147}, {100, 17}} + + + + _NS:1535 + YES + + 68157504 + 138413056 + Goal DNA + + _NS:1535 + + + + + NO + + + + 268 + {{18, 14}, {526, 120}} + + + + _NS:9 + {250, 750} + YES + + -1805647871 + 272629760 + + + _NS:9 + + YES + + + + NO + + + {{1, 1}, {562, 172}} + + + + _NS:11 + + + {{17, 68}, {564, 174}} + + + + _NS:9 + {0, 0} + + 67108864 + 0 + Box + + LucidaGrande + 11 + 3100 + + + + 3 + MCAwLjgwMDAwMDAxMTkAA + + + + 1 + 0 + 0 + NO + + + + 268 + {{14, 24}, {132, 32}} + + + + _NS:9 + YES + + 67108864 + 134217728 + Start evolution + + _NS:9 + + -2038284288 + 129 + + + 200 + 25 + + NO + + + + 268 + {{146, 24}, {77, 32}} + + + + YES + _NS:9 + YES + + 603979776 + 134217728 + Pause + + _NS:9 + + -2038284288 + 129 + + + 200 + 25 + + NO + + + + 268 + {{481, 24}, {103, 32}} + + + _NS:9 + YES + + 67108864 + 134217728 + Load DNA + + _NS:9 + + -2038284288 + 129 + + + 200 + 25 + + NO + + + {598, 428} + + + + + {{0, 0}, {1280, 778}} + {10000000000000, 10000000000000} + YES + + + AppDelegate + + + NSFontManager + + + YES + + + + + + + terminate: + + + + 449 + + + + orderFrontStandardAboutPanel: + + + + 142 + + + + delegate + + + + 495 + + + + hide: + + + + 367 + + + + hideOtherApplications: + + + + 368 + + + + unhideAllApplications: + + + + 370 + + + + openDocument: + + + + 374 + + + + showHelp: + + + + 493 + + + + window + + + + 532 + + + + DNALengthTextField + + + + 815 + + + + populationSizeTextField + + + + 817 + + + + mutationRateTextField + + + + 818 + + + + goalDNATextField + + + + 841 + + + + startEvolution: + + + + 842 + + + + generationLabel + + + + 843 + + + + bestMatchLabel + + + + 844 + + + + startEvolutionButton + + + + 857 + + + + pauseButton + + + + 858 + + + + populationSizeSlider + + + + 859 + + + + DNALengthSlider + + + + 860 + + + + mutationRateSlider + + + + 861 + + + + pauseClick: + + + + 862 + + + + saveAs: + + + + 863 + + + + openFile: + + + + 864 + + + + loadDNAButton + + + + 865 + + + + value: self.populationSize + + + + + + value: self.populationSize + value + self.populationSize + 2 + + + 825 + + + + value: self.DNALength + + + + + + value: self.DNALength + value + self.DNALength + 2 + + + 834 + + + + value: self.mutationRate + + + + + + value: self.mutationRate + value + self.mutationRate + 2 + + + 837 + + + + value: self.populationSize + + + + + + value: self.populationSize + value + self.populationSize + 2 + + + 822 + + + + value: self.DNALength + + + + + + value: self.DNALength + value + self.DNALength + 2 + + + 833 + + + + value: self.mutationRate + + + + + + value: self.mutationRate + value + self.mutationRate + 2 + + + 840 + + + + + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 29 + + + + + + + + + + 56 + + + + + + + + 83 + + + + + + + + 81 + + + + + + + + + 75 + + + + + 72 + + + + + 57 + + + + + + + + + + + + + + + + + + 58 + + + + + 134 + + + + + 150 + + + + + 136 + + + + + 144 + + + + + 129 + + + + + 143 + + + + + 236 + + + + + 131 + + + + + + + + 149 + + + + + 145 + + + + + 130 + + + + + 371 + + + + + + + + 372 + + + + + + 11 + 0 + + 11 + 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 + + 12 + + 1000 + + 6 + 24 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 3 + 0 + + 4 + 1 + + 20 + + 1000 + + 6 + 24 + 3 + + + + 4 + 0 + + 4 + 1 + + 31 + + 1000 + + 3 + 9 + 3 + + + + 3 + 0 + + 3 + 1 + + 103 + + 1000 + + 3 + 9 + 3 + + + + 9 + 0 + + 9 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 9 + 0 + + 9 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 3 + 0 + + 4 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 10 + 0 + + 10 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 5 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 3 + 0 + + 3 + 1 + + 188 + + 1000 + + 3 + 9 + 3 + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 10 + 0 + + 10 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 5 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 10 + 0 + + 10 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 3 + 0 + + 3 + 1 + + 155 + + 1000 + + 3 + 9 + 3 + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 6 + 0 + + 6 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 5 + 0 + + 5 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 10 + 0 + + 10 + 1 + + 0.0 + + 1000 + + 9 + 40 + 2 + + + + 6 + 0 + + 6 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 5 + 0 + + 5 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 10 + 0 + + 10 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 5 + 0 + + 5 + 1 + + 124 + + 1000 + + 3 + 9 + 3 + + + + 10 + 0 + + 10 + 1 + + 0.0 + + 1000 + + 9 + 40 + 2 + + + + 6 + 0 + + 6 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 3 + 0 + + 4 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 6 + 0 + + 6 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 3 + 0 + + 4 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 3 + 0 + + 3 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + + + + + + + + + + + + + + + + + + 420 + + + + + 490 + + + + + + + + 491 + + + + + + + + 492 + + + + + 494 + + + + + 536 + + + + + + 7 + 0 + + 0 + 1 + + 106 + + 1000 + + 3 + 9 + 1 + + + + + + 537 + + + + + 538 + + + + + 539 + + + + + 540 + + + + + + + + 541 + + + + + 542 + + + + + 544 + + + + + + + + 545 + + + + + 548 + + + + + 549 + + + + + 550 + + + + + 551 + + + + + + 7 + 0 + + 0 + 1 + + 50 + + 1000 + + 3 + 9 + 1 + + + + + + 552 + + + + + + + + 556 + + + + + + + + 557 + + + + + + + + 559 + + + + + 561 + + + + + + + + 562 + + + + + + + + 565 + + + + + 577 + + + + + + 7 + 0 + + 0 + 1 + + 397 + + 1000 + + 3 + 9 + 1 + + + + + + 578 + + + + + 584 + + + + + + + + 586 + + + + + 589 + + + + + 590 + + + + + 592 + + + + + + + + 594 + + + + + 597 + + + + + 598 + + + + + 599 + + + + + 611 + + + + + 612 + + + + + 616 + + + + + 618 + + + + + 621 + + + + + 622 + + + + + 624 + + + + + 628 + + + + + 629 + + + + + 630 + + + + + 631 + + + + + 632 + + + + + + 7 + 0 + + 0 + 1 + + 120 + + 1000 + + 9 + 40 + 1 + + + + + + 633 + + + + + 645 + + + + + 663 + + + + + + 7 + 0 + + 0 + 1 + + 194 + + 1000 + + 3 + 9 + 1 + + + + + + 664 + + + + + 665 + + + + + 668 + + + + + 671 + + + + + 672 + + + + + + 674 + + + + + 676 + + + + + 677 + + + + + 678 + + + + + 679 + + + + + 680 + + + + + 3 + 0 + + 3 + 1 + + 7 + + 1000 + + 3 + 9 + 3 + + + + 4 + 0 + + 4 + 1 + + 11 + + 1000 + + 8 + 29 + 3 + + + + 6 + 0 + + 6 + 1 + + 16 + + 1000 + + 8 + 29 + 3 + + + + 9 + 0 + + 9 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 5 + 0 + + 5 + 1 + + 16 + + 1000 + + 8 + 29 + 3 + + + + + + + + 682 + + + + + 686 + + + + + 687 + + + + + + 7 + 0 + + 0 + 1 + + 94 + + 1000 + + 3 + 9 + 1 + + + + + + 688 + + + + + 693 + + + + + 694 + + + + + 696 + + + + + + 8 + 0 + + 0 + 1 + + 120 + + 1000 + + 9 + 40 + 1 + + + + + + 697 + + + + + + 699 + + + + + 702 + + + + + 703 + + + + + 704 + + + + + 705 + + + + + 783 + + + + + 784 + + + + + 785 + + + + + 801 + + + + + + + + 802 + + + + + 803 + + + + + 804 + + + + + 805 + + + + + 806 + + + + + + + + 807 + + + + + 808 + + + + + 809 + + + + + 810 + + + + + + + + 811 + + + + + 812 + + + + + 813 + + + + + 819 + + + + + 853 + + + + + 854 + + + + + 855 + + + + + 856 + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{380, 496}, {480, 360}} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + com.apple.InterfaceBuilder.CocoaPlugin + + + com.apple.InterfaceBuilder.CocoaPlugin + + + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + 865 + + + + + AppDelegate + NSObject + + id + id + id + id + + + + openFile: + id + + + pauseClick: + id + + + saveAs: + id + + + startEvolution: + id + + + + NSSlider + NSTextField + NSTextField + NSTextField + NSTextField + NSButton + NSSlider + NSTextField + NSButton + NSSlider + NSTextField + NSButton + NSWindow + + + + DNALengthSlider + NSSlider + + + DNALengthTextField + NSTextField + + + bestMatchLabel + NSTextField + + + generationLabel + NSTextField + + + goalDNATextField + NSTextField + + + loadDNAButton + NSButton + + + mutationRateSlider + NSSlider + + + mutationRateTextField + NSTextField + + + pauseButton + NSButton + + + populationSizeSlider + NSSlider + + + populationSizeTextField + NSTextField + + + startEvolutionButton + NSButton + + + window + NSWindow + + + + IBProjectSource + ./Classes/AppDelegate.h + + + + NSLayoutConstraint + NSObject + + IBProjectSource + ./Classes/NSLayoutConstraint.h + + + + + 0 + IBCocoaFramework + YES + 3 + + {11, 11} + {10, 3} + + YES + + diff --git a/iDNA/iDNA/en.lproj/RandomWindowController.xib b/iDNA/iDNA/en.lproj/RandomWindowController.xib new file mode 100644 index 0000000..a777e3c --- /dev/null +++ b/iDNA/iDNA/en.lproj/RandomWindowController.xib @@ -0,0 +1,797 @@ + + + + 1080 + 12C3012 + 3084 + 1187.34 + 625.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 3084 + + + IBNSLayoutConstraint + NSButton + NSButtonCell + NSCustomObject + NSCustomView + NSProgressIndicator + NSTextField + NSTextFieldCell + NSView + NSWindowTemplate + + + com.apple.InterfaceBuilder.CocoaPlugin + + + PluginDependencyRecalculationVersion + + + + + RandomWindowController + + + FirstResponder + + + NSApplication + + + 15 + 2 + {{196, 240}, {484, 336}} + 544735232 + Random Generation + NSWindow + + + + + 256 + + + + 268 + {{17, 282}, {450, 34}} + + + + _NS:9 + {250, 750} + YES + + 67108864 + 138674176 + Please move mouse over View to generate very-very random value + + LucidaGrande + 13 + 16 + + _NS:9 + + + 6 + System + controlColor + + 3 + MC42NjY2NjY2NjY3AA + + + + 6 + System + controlTextColor + + 3 + MAA + + + + NO + YES + + + + 268 + {{20, 266}, {444, 20}} + + + + _NS:9 + {250, 250} + 16397 + 100 + + + + 268 + + + + 268 + {{17, 88}, {410, 17}} + + + + _NS:1535 + YES + + 68157504 + 138413056 + View + + LucidaGrande + 13 + 1044 + + _NS:1535 + + + + + NO + + + {{20, 56}, {444, 193}} + + + + _NS:9 + MouseView + + + + 268 + {{387, 13}, {82, 32}} + + + + _NS:9 + YES + + 67108864 + 134217728 + Exit + + _NS:9 + + -2038284288 + 129 + + + 200 + 25 + + NO + + + {484, 336} + + + + + {{0, 0}, {1280, 778}} + {10000000000000, 10000000000000} + YES + + + + + + + window + + + + 3 + + + + progressBar + + + + 31 + + + + view + + + + 32 + + + + onExit + + + + 45 + + + + onExit: + + + + 46 + + + + delegate + + + + 4 + + + + + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 1 + + + + + + + + 2 + + + + + 6 + 0 + + 6 + 1 + + 21 + + 1000 + + 3 + 9 + 3 + + + + 4 + 0 + + 4 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 4 + 0 + + 4 + 1 + + 56 + + 1000 + + 3 + 9 + 3 + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 3 + 0 + + 3 + 1 + + 87 + + 1000 + + 3 + 9 + 3 + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 3 + 0 + + 3 + 1 + + 51 + + 1000 + + 3 + 9 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 3 + 0 + + 3 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + + + + + + + 5 + + + + + + 8 + 0 + + 0 + 1 + + 34 + + 1000 + + 3 + 9 + 1 + + + + + + 6 + + + + + 7 + + + + + 9 + + + + + 10 + + + + + 11 + + + + + 12 + + + + + + 13 + + + + + 14 + + + + + 16 + + + + + 17 + + + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 10 + 0 + + 10 + 1 + + 0.0 + + 1000 + + 5 + 22 + 2 + + + + + + 18 + + + + + 19 + + + + + 22 + + + + + 24 + + + + + + + + 25 + + + + + 26 + + + + + 29 + + + + + 30 + + + + + 33 + + + + + 39 + + + + + + + + 40 + + + + + 41 + + + + + 42 + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + com.apple.InterfaceBuilder.CocoaPlugin + {{357, 418}, {480, 270}} + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + + + + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + 46 + + + + + MouseView + NSView + + IBProjectSource + ./Classes/MouseView.h + + + + NSLayoutConstraint + NSObject + + IBProjectSource + ./Classes/NSLayoutConstraint.h + + + + RandomWindowController + NSWindowController + + onExit: + id + + + onExit: + + onExit: + id + + + + NSProgressIndicator + NSView + + + + progressBar + NSProgressIndicator + + + view + NSView + + + + IBProjectSource + ./Classes/RandomWindowController.h + + + + + 0 + IBCocoaFramework + YES + 3 + YES + + diff --git a/iDNA/iDNA/iDNA-Info.plist b/iDNA/iDNA/iDNA-Info.plist new file mode 100755 index 0000000..2595762 --- /dev/null +++ b/iDNA/iDNA/iDNA-Info.plist @@ -0,0 +1,34 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIconFile + + CFBundleIdentifier + mixtline.${PRODUCT_NAME:rfc1034identifier} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + LSMinimumSystemVersion + ${MACOSX_DEPLOYMENT_TARGET} + NSHumanReadableCopyright + Copyright © 2012 alex. All rights reserved. + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/iDNA/iDNA/iDNA-Prefix.pch b/iDNA/iDNA/iDNA-Prefix.pch new file mode 100755 index 0000000..24593cd --- /dev/null +++ b/iDNA/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/iDNA/main.m b/iDNA/iDNA/main.m new file mode 100755 index 0000000..6055e33 --- /dev/null +++ b/iDNA/iDNA/main.m @@ -0,0 +1,14 @@ +// +// main.m +// iDNA +// +// Created by alex on 17/12/2012. +// Copyright (c) 2012 alex. All rights reserved. +// + +#import + +int main(int argc, char *argv[]) +{ + return NSApplicationMain(argc, (const char **)argv); +} diff --git a/iDNA/iDNA/ru.lproj/Credits.rtf b/iDNA/iDNA/ru.lproj/Credits.rtf new file mode 100755 index 0000000..46576ef --- /dev/null +++ b/iDNA/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/iDNA/ru.lproj/InfoPlist.strings b/iDNA/iDNA/ru.lproj/InfoPlist.strings new file mode 100755 index 0000000..477b28f --- /dev/null +++ b/iDNA/iDNA/ru.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/iDNA/iDNA/ru.lproj/Localizable.strings b/iDNA/iDNA/ru.lproj/Localizable.strings new file mode 100644 index 0000000..1413fe1 --- /dev/null +++ b/iDNA/iDNA/ru.lproj/Localizable.strings @@ -0,0 +1,8 @@ +"BEST_MATCH" = "Лучшее совпадение - %d%%"; +"MSG_EXIT" = "Вы действительно хотите выйти из приложения?"; +"BTN_YES" = "Да"; +"BTN_NO" = "Нет"; +"ERROR_SAVE" = "Ошибка записи файла"; +"ERROR_OPEN" = "Ошибка открытия файла"; +"BTN_CLOSE" = "Закрыть"; +"GENERATION" = "Количество циклов: %d"; \ No newline at end of file diff --git a/iDNA/iDNA/ru.lproj/MainMenu.xib b/iDNA/iDNA/ru.lproj/MainMenu.xib new file mode 100755 index 0000000..159fbb7 --- /dev/null +++ b/iDNA/iDNA/ru.lproj/MainMenu.xib @@ -0,0 +1,3110 @@ + + + + 1080 + 12C3012 + 3084 + 1187.34 + 625.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 3084 + + + IBNSLayoutConstraint + NSBox + NSButton + NSButtonCell + NSCustomObject + NSMenu + NSMenuItem + NSNumberFormatter + NSProgressIndicator + NSSlider + NSSliderCell + NSTextField + NSTextFieldCell + NSUserDefaultsController + NSView + NSWindowTemplate + + + com.apple.InterfaceBuilder.CocoaPlugin + + + PluginDependencyRecalculationVersion + + + + + NSApplication + + + FirstResponder + + + NSApplication + + + AMainMenu + + + + iDNA + + 1048576 + 2147483647 + + NSImage + NSMenuCheckmark + + + NSImage + NSMenuMixedState + + submenuAction: + + iDNA + + + + About iDNA + + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Preferences… + , + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Services + + 1048576 + 2147483647 + + + submenuAction: + + Services + + _NSServicesMenu + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Hide iDNA + h + 1048576 + 2147483647 + + + + + + Hide Others + h + 1572864 + 2147483647 + + + + + + Show All + + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Quit iDNA + q + 1048576 + 2147483647 + + + + + _NSAppleMenu + + + + + Файл + + 1048576 + 2147483647 + + + submenuAction: + + Файл + + + + Открыть… + o + 1048576 + 2147483647 + + + + + + Сохранить… + s + 1048576 + 2147483647 + + + + + + + + + Помощь + + 2147483647 + + + submenuAction: + + Помощь + + + + iDNA Помощь + ? + 1048576 + 2147483647 + + + + + _NSHelpMenu + + + + _NSMainMenu + + + 15 + 2 + {{335, 390}, {598, 428}} + 1954021376 + iDNA + NSWindow + + + + + 256 + + + + 268 + {{17, 391}, {112, 17}} + + + + _NS:1535 + YES + + 68157504 + 272630784 + Популяция + + LucidaGrande + 13 + 1044 + + _NS:1535 + + + 6 + System + controlColor + + 3 + MC42NjY2NjY2NjY3AA + + + + 6 + System + controlTextColor + + 3 + MAA + + + + NO + + + + 268 + {{17, 366}, {112, 17}} + + + + _NS:1535 + YES + + 68157504 + 272630784 + Размер ДНК + + _NS:1535 + + + + + NO + + + + 268 + {{17, 341}, {112, 17}} + + + + _NS:1535 + YES + + 68157504 + 272630784 + % мутаций + + _NS:1535 + + + + + NO + + + + 268 + {{124, 388}, {50, 22}} + + + + _NS:9 + YES + + -1804599231 + -1874852864 + + + + + + + + + + + + -∞ + + +∞ + + # + # + + + + + + + + NaN + + + + + + 3 + YES + YES + YES + + . + , + NO + NO + YES + + _NS:9 + + YES + + 6 + System + textBackgroundColor + + 3 + MQA + + + + 6 + System + textColor + + + + NO + + + + 268 + {{124, 363}, {50, 22}} + + + + _NS:9 + YES + + -1804599231 + -1874852864 + + + + + + + + + + -∞ + + +∞ + + # + # + + + + + + + + NaN + + + + + + 3 + YES + YES + YES + + . + , + NO + NO + YES + + _NS:9 + + YES + + + + NO + + + + 268 + {{124, 338}, {50, 22}} + + + + _NS:9 + YES + + -1804599231 + -1874852864 + + + + + + + + + + -∞ + + +∞ + + # + # + + + + + + + + NaN + + + + + + 3 + YES + YES + YES + + . + , + NO + NO + YES + + _NS:9 + + YES + + + + NO + + + + 268 + {{179, 388}, {401, 21}} + + + + _NS:9 + YES + + 67108864 + 0 + + _NS:9 + + 100 + 1 + 8.3140727796052616 + 0.0 + 0 + 1 + NO + NO + + NO + + + + 268 + {{179, 363}, {401, 21}} + + + + _NS:9 + YES + + -2080374784 + 0 + + _NS:9 + + 100 + 0.0 + 0.0 + 0.0 + 0 + 1 + NO + NO + + NO + + + + 268 + {{179, 338}, {401, 21}} + + + + _NS:9 + YES + + -2080374784 + 0 + + _NS:9 + + 100 + 0.0 + 0.0 + 0.0 + 0 + 1 + NO + NO + + NO + + + + 268 + {{196, 308}, {206, 17}} + + + + _NS:1535 + YES + + 68157504 + 138413120 + Количество циклов: 0 + + LucidaGrande-Bold + 13 + 2072 + + _NS:1535 + + + + + NO + + + + 268 + {{199, 283}, {200, 17}} + + + + _NS:1535 + YES + + 68157504 + 138413056 + Лучшее совпадение - ??? + + _NS:1535 + + + + + NO + + + + 268 + {{20, 254}, {558, 20}} + + + + _NS:9 + {250, 250} + 16397 + 100 + + + + 12 + + + + 274 + + + + 268 + {{231, 147}, {100, 17}} + + + + _NS:1535 + YES + + 68157504 + 138413056 + Целевой ДНК + + _NS:1535 + + + + + NO + + + + 268 + {{18, 14}, {526, 120}} + + + + _NS:9 + {250, 750} + YES + + -1805647871 + 272629760 + + + _NS:9 + + YES + + + + NO + + + {{1, 1}, {562, 172}} + + + + _NS:11 + + + {{17, 68}, {564, 174}} + + + + _NS:9 + {0, 0} + + 67108864 + 0 + Box + + LucidaGrande + 11 + 3100 + + + + 3 + MCAwLjgwMDAwMDAxMTkAA + + + + 1 + 0 + 0 + NO + + + + 268 + {{14, 24}, {146, 32}} + + + + _NS:9 + YES + + 67108864 + 134217728 + Начать эволюцию + + _NS:9 + + -2038284288 + 129 + + + 200 + 25 + + NO + + + + 268 + {{165, 24}, {77, 32}} + + + + YES + _NS:9 + YES + + 603979776 + 134217728 + Пауза + + _NS:9 + + -2038284288 + 129 + + + 200 + 25 + + NO + + + + 268 + {{449, 24}, {135, 32}} + + + _NS:9 + YES + + 67108864 + 134217728 + Загрузить ДНК + + _NS:9 + + -2038284288 + 129 + + + 200 + 25 + + NO + + + {598, 428} + + + + + {{0, 0}, {1280, 778}} + {10000000000000, 10000000000000} + YES + + + AppDelegate + + + NSFontManager + + + YES + + + + + + + terminate: + + + + 449 + + + + orderFrontStandardAboutPanel: + + + + 142 + + + + delegate + + + + 495 + + + + hide: + + + + 367 + + + + hideOtherApplications: + + + + 368 + + + + unhideAllApplications: + + + + 370 + + + + openDocument: + + + + 374 + + + + showHelp: + + + + 493 + + + + window + + + + 532 + + + + DNALengthTextField + + + + 815 + + + + populationSizeTextField + + + + 817 + + + + mutationRateTextField + + + + 818 + + + + goalDNATextField + + + + 841 + + + + startEvolution: + + + + 842 + + + + generationLabel + + + + 843 + + + + bestMatchLabel + + + + 844 + + + + startEvolutionButton + + + + 857 + + + + pauseButton + + + + 858 + + + + populationSizeSlider + + + + 859 + + + + DNALengthSlider + + + + 860 + + + + mutationRateSlider + + + + 861 + + + + pauseClick: + + + + 862 + + + + loadDNAButton + + + + 874 + + + + openFile: + + + + 875 + + + + saveAs: + + + + 876 + + + + value: self.populationSize + + + + + + value: self.populationSize + value + self.populationSize + 2 + + + 825 + + + + value: self.DNALength + + + + + + value: self.DNALength + value + self.DNALength + 2 + + + 834 + + + + value: self.mutationRate + + + + + + value: self.mutationRate + value + self.mutationRate + 2 + + + 837 + + + + value: self.populationSize + + + + + + value: self.populationSize + value + self.populationSize + 2 + + + 822 + + + + value: self.DNALength + + + + + + value: self.DNALength + value + self.DNALength + 2 + + + 833 + + + + value: self.mutationRate + + + + + + value: self.mutationRate + value + self.mutationRate + 2 + + + 840 + + + + + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 29 + + + + + + + + + + 56 + + + + + + + + 83 + + + + + + + + 81 + + + + + + + + + 75 + + + + + 72 + + + + + 57 + + + + + + + + + + + + + + + + + + 58 + + + + + 134 + + + + + 150 + + + + + 136 + + + + + 144 + + + + + 129 + + + + + 143 + + + + + 236 + + + + + 131 + + + + + + + + 149 + + + + + 145 + + + + + 130 + + + + + 371 + + + + + + + + 372 + + + + + + 11 + 0 + + 11 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 5 + 1 + + 171 + + 1000 + + 3 + 9 + 3 + + + + 11 + 0 + + 11 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 3 + 0 + + 4 + 1 + + 20 + + 1000 + + 6 + 24 + 3 + + + + 4 + 0 + + 4 + 1 + + 31 + + 1000 + + 3 + 9 + 3 + + + + 9 + 0 + + 9 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 3 + 0 + + 4 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 9 + 0 + + 9 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 3 + 0 + + 3 + 1 + + 103 + + 1000 + + 3 + 9 + 3 + + + + 11 + 0 + + 11 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 5 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 3 + 0 + + 3 + 1 + + 188 + + 1000 + + 3 + 9 + 3 + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 3 + 0 + + 4 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 11 + 0 + + 11 + 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 + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 5 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 3 + 0 + + 3 + 1 + + 155 + + 1000 + + 3 + 9 + 3 + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 6 + 0 + + 6 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 5 + 0 + + 5 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 10 + 0 + + 10 + 1 + + 0.0 + + 1000 + + 9 + 40 + 2 + + + + 6 + 0 + + 6 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 5 + 0 + + 5 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 5 + 0 + + 5 + 1 + + 124 + + 1000 + + 3 + 9 + 3 + + + + 10 + 0 + + 10 + 1 + + 0.0 + + 1000 + + 9 + 40 + 2 + + + + 6 + 0 + + 6 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 3 + 0 + + 4 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 6 + 0 + + 6 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 3 + 0 + + 4 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 3 + 0 + + 3 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + + + + + + + + + + + + + + + + + + 420 + + + + + 490 + + + + + + + + 491 + + + + + + + + 492 + + + + + 494 + + + + + 536 + + + + + + 7 + 0 + + 0 + 1 + + 106 + + 1000 + + 3 + 9 + 1 + + + + + + 537 + + + + + 538 + + + + + 539 + + + + + 540 + + + + + + + + 541 + + + + + 542 + + + + + 544 + + + + + + + + 545 + + + + + 548 + + + + + 549 + + + + + 550 + + + + + 551 + + + + + + 7 + 0 + + 0 + 1 + + 50 + + 1000 + + 3 + 9 + 1 + + + + + + 552 + + + + + + + + 556 + + + + + + + + 557 + + + + + + + + 561 + + + + + + + + 562 + + + + + + + + 565 + + + + + 577 + + + + + + 7 + 0 + + 0 + 1 + + 397 + + 1000 + + 3 + 9 + 1 + + + + + + 578 + + + + + 584 + + + + + + + + 586 + + + + + 589 + + + + + 592 + + + + + + + + 594 + + + + + 597 + + + + + 598 + + + + + 611 + + + + + 616 + + + + + 618 + + + + + 621 + + + + + 622 + + + + + 624 + + + + + 628 + + + + + 629 + + + + + 630 + + + + + 631 + + + + + 632 + + + + + + 7 + 0 + + 0 + 1 + + 200 + + 1000 + + 3 + 9 + 1 + + + + + + 633 + + + + + 663 + + + + + + 7 + 0 + + 0 + 1 + + 194 + + 1000 + + 3 + 9 + 1 + + + + + + 664 + + + + + 665 + + + + + 668 + + + + + 672 + + + + + + 674 + + + + + 676 + + + + + 677 + + + + + 678 + + + + + 679 + + + + + 680 + + + + + 3 + 0 + + 3 + 1 + + 7 + + 1000 + + 3 + 9 + 3 + + + + 4 + 0 + + 4 + 1 + + 11 + + 1000 + + 8 + 29 + 3 + + + + 6 + 0 + + 6 + 1 + + 16 + + 1000 + + 8 + 29 + 3 + + + + 9 + 0 + + 9 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 5 + 0 + + 5 + 1 + + 16 + + 1000 + + 8 + 29 + 3 + + + + + + + + 682 + + + + + 686 + + + + + 687 + + + + + + 7 + 0 + + 0 + 1 + + 94 + + 1000 + + 3 + 9 + 1 + + + + + + 688 + + + + + 693 + + + + + 694 + + + + + 696 + + + + + + 8 + 0 + + 0 + 1 + + 120 + + 1000 + + 9 + 40 + 1 + + + + + + 697 + + + + + + 699 + + + + + 702 + + + + + 703 + + + + + 704 + + + + + 705 + + + + + 783 + + + + + 784 + + + + + 785 + + + + + 801 + + + + + + 7 + 0 + + 0 + 1 + + 134 + + 1000 + + 3 + 9 + 1 + + + + + + 802 + + + + + 803 + + + + + 804 + + + + + 805 + + + + + 806 + + + + + + + + 807 + + + + + 809 + + + + + 810 + + + + + + + + 811 + + + + + 812 + + + + + 813 + + + + + 819 + + + + + 853 + + + + + 854 + + + + + 855 + + + + + 856 + + + + + 863 + + + + + 864 + + + + + 865 + + + + + 867 + + + + + 868 + + + + + 869 + + + + + 872 + + + + + 873 + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{380, 496}, {480, 360}} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + com.apple.InterfaceBuilder.CocoaPlugin + + + com.apple.InterfaceBuilder.CocoaPlugin + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + 876 + + + + + AppDelegate + NSObject + + id + id + id + id + + + + openFile: + id + + + pauseClick: + id + + + saveAs: + id + + + startEvolution: + id + + + + NSSlider + NSTextField + NSTextField + NSTextField + NSTextField + NSButton + NSSlider + NSTextField + NSButton + NSSlider + NSTextField + NSWindow + NSButton + NSWindow + + + + DNALengthSlider + NSSlider + + + DNALengthTextField + NSTextField + + + bestMatchLabel + NSTextField + + + generationLabel + NSTextField + + + goalDNATextField + NSTextField + + + loadDNAButton + NSButton + + + mutationRateSlider + NSSlider + + + mutationRateTextField + NSTextField + + + pauseButton + NSButton + + + populationSizeSlider + NSSlider + + + populationSizeTextField + NSTextField + + + randomPanel + NSWindow + + + startEvolutionButton + NSButton + + + window + NSWindow + + + + IBProjectSource + ./Classes/AppDelegate.h + + + + NSLayoutConstraint + NSObject + + IBProjectSource + ./Classes/NSLayoutConstraint.h + + + + + 0 + IBCocoaFramework + YES + 3 + + {11, 11} + {10, 3} + + YES + + diff --git a/iDNA/iDNA/ru.lproj/RandomWindowController.xib b/iDNA/iDNA/ru.lproj/RandomWindowController.xib new file mode 100644 index 0000000..94802c1 --- /dev/null +++ b/iDNA/iDNA/ru.lproj/RandomWindowController.xib @@ -0,0 +1,774 @@ + + + + 1080 + 12C3012 + 3084 + 1187.34 + 625.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 3084 + + + IBNSLayoutConstraint + NSButton + NSButtonCell + NSCustomObject + NSCustomView + NSProgressIndicator + NSTextField + NSTextFieldCell + NSView + NSWindowTemplate + + + com.apple.InterfaceBuilder.CocoaPlugin + + + PluginDependencyRecalculationVersion + + + + + RandomWindowController + + + FirstResponder + + + NSApplication + + + 15 + 2 + {{196, 240}, {484, 336}} + 544735232 + Генерация случайности + NSWindow + + + + + 256 + + + + 268 + {{16, 293}, {450, 34}} + + + + _NS:9 + {250, 750} + YES + + 67108864 + 138674176 + Пожалуйста, подергайте мышкой над нижевыделенным "Пространством" + + LucidaGrande + 13 + 16 + + _NS:9 + + + 6 + System + controlColor + + 3 + MC42NjY2NjY2NjY3AA + + + + 6 + System + controlTextColor + + 3 + MAA + + + + NO + YES + + + + 268 + {{20, 266}, {444, 20}} + + + + _NS:9 + {250, 250} + 16397 + 100 + + + + 268 + + + + 268 + {{17, 88}, {410, 17}} + + + + _NS:1535 + YES + + 68157504 + 138413056 + Пространство + + LucidaGrande + 13 + 1044 + + _NS:1535 + + + + + NO + + + {{20, 56}, {444, 193}} + + + + _NS:9 + MouseView + + + + 268 + {{405, 13}, {64, 32}} + + + + _NS:9 + YES + + 67108864 + 134217728 + Выход + + _NS:9 + + -2038284288 + 129 + + + 200 + 25 + + NO + + + {484, 336} + + + + + {{0, 0}, {1280, 778}} + {10000000000000, 10000000000000} + YES + + + + + + + window + + + + 3 + + + + progressBar + + + + 31 + + + + view + + + + 32 + + + + onExit + + + + 45 + + + + onExit: + + + + 46 + + + + delegate + + + + 4 + + + + + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 1 + + + + + + + + 2 + + + + + 4 + 0 + + 4 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 4 + 0 + + 4 + 1 + + 56 + + 1000 + + 3 + 9 + 3 + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 3 + 0 + + 3 + 1 + + 87 + + 1000 + + 3 + 9 + 3 + + + + 3 + 0 + + 4 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 3 + 0 + + 3 + 1 + + 9 + + 1000 + + 3 + 9 + 3 + + + + 6 + 0 + + 6 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 5 + 0 + + 5 + 1 + + 19 + + 1000 + + 3 + 9 + 3 + + + + + + + + + + 5 + + + + + + 7 + 0 + + 0 + 1 + + 444 + + 1000 + + 3 + 9 + 1 + + + + + + 6 + + + + + 12 + + + + + + 13 + + + + + 16 + + + + + 17 + + + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 10 + 0 + + 10 + 1 + + 0.0 + + 1000 + + 5 + 22 + 2 + + + + + + 18 + + + + + 19 + + + + + 22 + + + + + 24 + + + + + + + + 25 + + + + + 26 + + + + + 29 + + + + + 30 + + + + + 33 + + + + + 39 + + + + + + + + 40 + + + + + 41 + + + + + 47 + + + + + 48 + + + + + 49 + + + + + 50 + + + + + 51 + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + com.apple.InterfaceBuilder.CocoaPlugin + {{357, 418}, {480, 270}} + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + + + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + 51 + + + + + MouseView + NSView + + IBProjectSource + ./Classes/MouseView.h + + + + NSLayoutConstraint + NSObject + + IBProjectSource + ./Classes/NSLayoutConstraint.h + + + + RandomWindowController + NSWindowController + + onExit: + id + + + onExit: + + onExit: + id + + + + NSProgressIndicator + NSView + + + + progressBar + NSProgressIndicator + + + view + NSView + + + + IBProjectSource + ./Classes/RandomWindowController.h + + + + + 0 + IBCocoaFramework + YES + 3 + YES + +