diff --git a/README.md b/README.md index 36abdc1..615403c 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,35 @@ -# Проект 4 +VBoxCamp +======== -## Один из двух вариантов на ваш выбор: +Приложение для автоматизированного создания [VirtualBox][virtualbox] виртуальной машины на основе [BOOTCAMP][bootcamp] раздела, а также для быстрого старта ранее созданных VirtualBox виртуальных машин без непосредственного запуска VirtualBox Manager. -### Вариант 1. Собственное приложение -1. Необходимо закончить разработку приложения и выложить исполняемый файл (готовый продукт) -2. Ваше приложение должно запускаться. -3. Нужно сдать весь проект (project-файл, файлы-ресурсы, .xib-файл и так далее – всю папку). +## Описание ## -### Вариант 2. iDNA +### Проблема ### +1. Актуальные версии популярных коммерческих продуктов для десктопной виртуализации, такие как [Parallels Desktop][parallels] и [VMWare Fusion][vmware] предоставляют своим пользователям опцию создания виртуальной машины из раздела [BOOTCAMP][bootcamp] с предустановленной ОС семейства Windows. Таким образом, одну физическую установку ОС Windows можно использовать как для непосредственной загрузки, так и для запуска в режиме виртуальной машины под Mac OS X. Кроссплатформенный open source продукт [VirtualBox][virtualbox] такой функциональности из коробки, к сожалению, не предоставляет. +2. Запуск созданных виртуальных машин [VirtualBox][virtualbox] происходит из приложения VirtualBox Manager, которое потребляет ресурсы и служит для настройки и запуска, не являясь при этом необходимым для дальнейшей работы самой виртуальной машины. Предлагаемое решение обладает облегченным интерфейсом и позволяет запускать созданные конфигурации виртуальных машин буквально одним кликом из системного меню. -1. Добавить локализацию (русский язык или английский если изначально был русский). -2. Добавить всплывающие окна для подтверждения открытия, сохранения файлов и закрытия приложения. -3. Сохранять настройки эволюции в системе (user defaults) и загружать их при новом запуске приложения. -4. Использовать движение мыши в качестве источника случайности. Перед стартом эволюции пользователю должен совершить несколько движений мышью; координаты курсора будут использоваться в качестве некоторых исходных данных для генератора случайных чисел. Сбор этих координат должен отоброжаться прогресс-баром. - + +### Аудитория ### +Пользователи [VirtualBox][virtualbox], которые хотят использовать раздел [BOOTCAMP][bootcamp] в режиме виртуальной машины, а также те, кому необходимо быстро запускать уже готовые конфигурации виртуальных машин. + + +### Сценарии использования ### +- Пользователь запускает приложение и выбирает опцию создания виртуальной машины на основе существующего раздела [BOOTCAMP][bootcamp] +- Пользователь запускает приложение и выбирает одну из ранее сконфигурированных виртуальных машин для запуска + +### Поведение ### + +При запуске приложения появляется основное окно программы, в котором находится секция `Virtual machines`, включающая список сконфигурированных пользовательских виртуальных машин с возможностью добавления, удаления и запуска машин как из контекстного меню (кнопки `Add...`, `Remove`, `Run`, `Create BOOTCAMP VM`), так и из программного меню `Machines`. + +*Планируется изменение основного интерфейса и вынос его в строку меню* + + +## Материалы + +* [Функции VBoxManage](https://www.virtualbox.org/manual/ch08.html) + +[virtualbox]: https://www.virtualbox.org +[bootcamp]: http://www.apple.com/support/bootcamp/ +[parallels]: http://www.parallels.com/products/desktop/ +[vmware]: http://www.vmware.com/products/fusion/overview.html \ No newline at end of file diff --git a/VBoxCamp/Icon.icns b/VBoxCamp/Icon.icns new file mode 100644 index 0000000..1cc4593 Binary files /dev/null and b/VBoxCamp/Icon.icns differ diff --git a/VBoxCamp/VBoxCamp.xcodeproj/project.pbxproj b/VBoxCamp/VBoxCamp.xcodeproj/project.pbxproj new file mode 100644 index 0000000..1dfe677 --- /dev/null +++ b/VBoxCamp/VBoxCamp.xcodeproj/project.pbxproj @@ -0,0 +1,356 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + FD183433168A3DB000D3E677 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FD183432168A3DB000D3E677 /* Cocoa.framework */; }; + FD18343D168A3DB000D3E677 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = FD18343B168A3DB000D3E677 /* InfoPlist.strings */; }; + FD18343F168A3DB000D3E677 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = FD18343E168A3DB000D3E677 /* main.m */; }; + FD183443168A3DB000D3E677 /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = FD183441168A3DB000D3E677 /* Credits.rtf */; }; + FD183446168A3DB000D3E677 /* Document.m in Sources */ = {isa = PBXBuildFile; fileRef = FD183445168A3DB000D3E677 /* Document.m */; }; + FD183449168A3DB000D3E677 /* Document.xib in Resources */ = {isa = PBXBuildFile; fileRef = FD183447168A3DB000D3E677 /* Document.xib */; }; + FD18344C168A3DB000D3E677 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = FD18344A168A3DB000D3E677 /* MainMenu.xib */; }; + FD183453168A3DC400D3E677 /* DiskArbitration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FD183452168A3DC400D3E677 /* DiskArbitration.framework */; }; + FD183456168A478300D3E677 /* Volume.m in Sources */ = {isa = PBXBuildFile; fileRef = FD183455168A478300D3E677 /* Volume.m */; }; + FD6427A816C9840500C6B8FA /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = FD6427AA16C9840500C6B8FA /* Localizable.strings */; }; + FDA989CF168A65AB008B41F7 /* Icon.icns in Resources */ = {isa = PBXBuildFile; fileRef = FDA989CE168A65AB008B41F7 /* Icon.icns */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + FD18342E168A3DB000D3E677 /* VBoxCamp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = VBoxCamp.app; sourceTree = BUILT_PRODUCTS_DIR; }; + FD183432168A3DB000D3E677 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; + FD183435168A3DB000D3E677 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; }; + FD183436168A3DB000D3E677 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; }; + FD183437168A3DB000D3E677 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + FD18343A168A3DB000D3E677 /* VBoxCamp-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "VBoxCamp-Info.plist"; sourceTree = ""; }; + FD18343C168A3DB000D3E677 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; + FD18343E168A3DB000D3E677 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + FD183440168A3DB000D3E677 /* VBoxCamp-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "VBoxCamp-Prefix.pch"; sourceTree = ""; }; + FD183442168A3DB000D3E677 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = en; path = en.lproj/Credits.rtf; sourceTree = ""; }; + FD183444168A3DB000D3E677 /* Document.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Document.h; sourceTree = ""; }; + FD183445168A3DB000D3E677 /* Document.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Document.m; sourceTree = ""; }; + FD183448168A3DB000D3E677 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/Document.xib; sourceTree = ""; }; + FD18344B168A3DB000D3E677 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/MainMenu.xib; sourceTree = ""; }; + FD183452168A3DC400D3E677 /* DiskArbitration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DiskArbitration.framework; path = System/Library/Frameworks/DiskArbitration.framework; sourceTree = SDKROOT; }; + FD183454168A478300D3E677 /* Volume.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Volume.h; sourceTree = ""; }; + FD183455168A478300D3E677 /* Volume.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Volume.m; sourceTree = ""; }; + FD6427A216C97F2900C6B8FA /* ru */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ru; path = ru.lproj/Document.xib; sourceTree = ""; }; + FD6427A316C97F2900C6B8FA /* ru */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ru; path = ru.lproj/MainMenu.xib; sourceTree = ""; }; + FD6427A416C97F2900C6B8FA /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/InfoPlist.strings; sourceTree = ""; }; + FD6427A516C97F2A00C6B8FA /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = ru; path = ru.lproj/Credits.rtf; sourceTree = ""; }; + FD6427A916C9840500C6B8FA /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; + FD6427AB16C9840D00C6B8FA /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Localizable.strings; sourceTree = ""; }; + FDA989CE168A65AB008B41F7 /* Icon.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = Icon.icns; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + FD18342B168A3DB000D3E677 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + FD183453168A3DC400D3E677 /* DiskArbitration.framework in Frameworks */, + FD183433168A3DB000D3E677 /* Cocoa.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + FD183423168A3DB000D3E677 = { + isa = PBXGroup; + children = ( + FDA989CE168A65AB008B41F7 /* Icon.icns */, + FD183438168A3DB000D3E677 /* VBoxCamp */, + FD183431168A3DB000D3E677 /* Frameworks */, + FD18342F168A3DB000D3E677 /* Products */, + ); + sourceTree = ""; + }; + FD18342F168A3DB000D3E677 /* Products */ = { + isa = PBXGroup; + children = ( + FD18342E168A3DB000D3E677 /* VBoxCamp.app */, + ); + name = Products; + sourceTree = ""; + }; + FD183431168A3DB000D3E677 /* Frameworks */ = { + isa = PBXGroup; + children = ( + FD183452168A3DC400D3E677 /* DiskArbitration.framework */, + FD183432168A3DB000D3E677 /* Cocoa.framework */, + FD183434168A3DB000D3E677 /* Other Frameworks */, + ); + name = Frameworks; + sourceTree = ""; + }; + FD183434168A3DB000D3E677 /* Other Frameworks */ = { + isa = PBXGroup; + children = ( + FD183435168A3DB000D3E677 /* AppKit.framework */, + FD183436168A3DB000D3E677 /* CoreData.framework */, + FD183437168A3DB000D3E677 /* Foundation.framework */, + ); + name = "Other Frameworks"; + sourceTree = ""; + }; + FD183438168A3DB000D3E677 /* VBoxCamp */ = { + isa = PBXGroup; + children = ( + FD183444168A3DB000D3E677 /* Document.h */, + FD183445168A3DB000D3E677 /* Document.m */, + FD183447168A3DB000D3E677 /* Document.xib */, + FD18344A168A3DB000D3E677 /* MainMenu.xib */, + FD183439168A3DB000D3E677 /* Supporting Files */, + FD183454168A478300D3E677 /* Volume.h */, + FD183455168A478300D3E677 /* Volume.m */, + ); + path = VBoxCamp; + sourceTree = ""; + }; + FD183439168A3DB000D3E677 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + FD6427AA16C9840500C6B8FA /* Localizable.strings */, + FD18343A168A3DB000D3E677 /* VBoxCamp-Info.plist */, + FD18343B168A3DB000D3E677 /* InfoPlist.strings */, + FD18343E168A3DB000D3E677 /* main.m */, + FD183440168A3DB000D3E677 /* VBoxCamp-Prefix.pch */, + FD183441168A3DB000D3E677 /* Credits.rtf */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + FD18342D168A3DB000D3E677 /* VBoxCamp */ = { + isa = PBXNativeTarget; + buildConfigurationList = FD18344F168A3DB000D3E677 /* Build configuration list for PBXNativeTarget "VBoxCamp" */; + buildPhases = ( + FD18342A168A3DB000D3E677 /* Sources */, + FD18342B168A3DB000D3E677 /* Frameworks */, + FD18342C168A3DB000D3E677 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = VBoxCamp; + productName = VBoxCamp; + productReference = FD18342E168A3DB000D3E677 /* VBoxCamp.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + FD183425168A3DB000D3E677 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0450; + ORGANIZATIONNAME = "goodman116@gmail.com"; + }; + buildConfigurationList = FD183428168A3DB000D3E677 /* Build configuration list for PBXProject "VBoxCamp" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ru, + ); + mainGroup = FD183423168A3DB000D3E677; + productRefGroup = FD18342F168A3DB000D3E677 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + FD18342D168A3DB000D3E677 /* VBoxCamp */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + FD18342C168A3DB000D3E677 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + FD18343D168A3DB000D3E677 /* InfoPlist.strings in Resources */, + FD183443168A3DB000D3E677 /* Credits.rtf in Resources */, + FD183449168A3DB000D3E677 /* Document.xib in Resources */, + FD18344C168A3DB000D3E677 /* MainMenu.xib in Resources */, + FDA989CF168A65AB008B41F7 /* Icon.icns in Resources */, + FD6427A816C9840500C6B8FA /* Localizable.strings in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + FD18342A168A3DB000D3E677 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + FD18343F168A3DB000D3E677 /* main.m in Sources */, + FD183446168A3DB000D3E677 /* Document.m in Sources */, + FD183456168A478300D3E677 /* Volume.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + FD18343B168A3DB000D3E677 /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + FD18343C168A3DB000D3E677 /* en */, + FD6427A416C97F2900C6B8FA /* ru */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; + FD183441168A3DB000D3E677 /* Credits.rtf */ = { + isa = PBXVariantGroup; + children = ( + FD183442168A3DB000D3E677 /* en */, + FD6427A516C97F2A00C6B8FA /* ru */, + ); + name = Credits.rtf; + sourceTree = ""; + }; + FD183447168A3DB000D3E677 /* Document.xib */ = { + isa = PBXVariantGroup; + children = ( + FD183448168A3DB000D3E677 /* en */, + FD6427A216C97F2900C6B8FA /* ru */, + ); + name = Document.xib; + sourceTree = ""; + }; + FD18344A168A3DB000D3E677 /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + FD18344B168A3DB000D3E677 /* en */, + FD6427A316C97F2900C6B8FA /* ru */, + ); + name = MainMenu.xib; + sourceTree = ""; + }; + FD6427AA16C9840500C6B8FA /* Localizable.strings */ = { + isa = PBXVariantGroup; + children = ( + FD6427A916C9840500C6B8FA /* en */, + FD6427AB16C9840D00C6B8FA /* ru */, + ); + name = Localizable.strings; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + FD18344D168A3DB000D3E677 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.7; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + }; + name = Debug; + }; + FD18344E168A3DB000D3E677 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.7; + SDKROOT = macosx; + }; + name = Release; + }; + FD183450168A3DB000D3E677 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COMBINE_HIDPI_IMAGES = YES; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "VBoxCamp/VBoxCamp-Prefix.pch"; + INFOPLIST_FILE = "VBoxCamp/VBoxCamp-Info.plist"; + MACOSX_DEPLOYMENT_TARGET = 10.7; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = app; + }; + name = Debug; + }; + FD183451168A3DB000D3E677 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + COMBINE_HIDPI_IMAGES = YES; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "VBoxCamp/VBoxCamp-Prefix.pch"; + INFOPLIST_FILE = "VBoxCamp/VBoxCamp-Info.plist"; + MACOSX_DEPLOYMENT_TARGET = 10.7; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = app; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + FD183428168A3DB000D3E677 /* Build configuration list for PBXProject "VBoxCamp" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + FD18344D168A3DB000D3E677 /* Debug */, + FD18344E168A3DB000D3E677 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + FD18344F168A3DB000D3E677 /* Build configuration list for PBXNativeTarget "VBoxCamp" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + FD183450168A3DB000D3E677 /* Debug */, + FD183451168A3DB000D3E677 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = FD183425168A3DB000D3E677 /* Project object */; +} diff --git a/VBoxCamp/VBoxCamp.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/VBoxCamp/VBoxCamp.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..bacbd40 --- /dev/null +++ b/VBoxCamp/VBoxCamp.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/VBoxCamp/VBoxCamp.xcodeproj/project.xcworkspace/xcuserdata/goodman.xcuserdatad/UserInterfaceState.xcuserstate b/VBoxCamp/VBoxCamp.xcodeproj/project.xcworkspace/xcuserdata/goodman.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000..dbf921f Binary files /dev/null and b/VBoxCamp/VBoxCamp.xcodeproj/project.xcworkspace/xcuserdata/goodman.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/VBoxCamp/VBoxCamp.xcodeproj/project.xcworkspace/xcuserdata/goodman.xcuserdatad/WorkspaceSettings.xcsettings b/VBoxCamp/VBoxCamp.xcodeproj/project.xcworkspace/xcuserdata/goodman.xcuserdatad/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..bfffcfe --- /dev/null +++ b/VBoxCamp/VBoxCamp.xcodeproj/project.xcworkspace/xcuserdata/goodman.xcuserdatad/WorkspaceSettings.xcsettings @@ -0,0 +1,10 @@ + + + + + HasAskedToTakeAutomaticSnapshotBeforeSignificantChanges + + SnapshotAutomaticallyBeforeSignificantChanges + + + diff --git a/VBoxCamp/VBoxCamp.xcodeproj/xcuserdata/goodman.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist b/VBoxCamp/VBoxCamp.xcodeproj/xcuserdata/goodman.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist new file mode 100644 index 0000000..e15b2a1 --- /dev/null +++ b/VBoxCamp/VBoxCamp.xcodeproj/xcuserdata/goodman.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist @@ -0,0 +1,59 @@ + + + + + + + + + + + + + diff --git a/VBoxCamp/VBoxCamp.xcodeproj/xcuserdata/goodman.xcuserdatad/xcschemes/VBoxCamp.xcscheme b/VBoxCamp/VBoxCamp.xcodeproj/xcuserdata/goodman.xcuserdatad/xcschemes/VBoxCamp.xcscheme new file mode 100644 index 0000000..1a75d6e --- /dev/null +++ b/VBoxCamp/VBoxCamp.xcodeproj/xcuserdata/goodman.xcuserdatad/xcschemes/VBoxCamp.xcscheme @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/VBoxCamp/VBoxCamp.xcodeproj/xcuserdata/goodman.xcuserdatad/xcschemes/xcschememanagement.plist b/VBoxCamp/VBoxCamp.xcodeproj/xcuserdata/goodman.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..f8c2ef2 --- /dev/null +++ b/VBoxCamp/VBoxCamp.xcodeproj/xcuserdata/goodman.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,22 @@ + + + + + SchemeUserState + + VBoxCamp.xcscheme + + orderHint + 0 + + + SuppressBuildableAutocreation + + FD18342D168A3DB000D3E677 + + primary + + + + + diff --git a/VBoxCamp/VBoxCamp/Create_VM.scpt b/VBoxCamp/VBoxCamp/Create_VM.scpt new file mode 100644 index 0000000..3a7adca Binary files /dev/null and b/VBoxCamp/VBoxCamp/Create_VM.scpt differ diff --git a/VBoxCamp/VBoxCamp/Document.h b/VBoxCamp/VBoxCamp/Document.h new file mode 100644 index 0000000..d4ea6dc --- /dev/null +++ b/VBoxCamp/VBoxCamp/Document.h @@ -0,0 +1,25 @@ +// +// Document.h +// VBoxCamp +// +// Created by Dmitriy Zavorokhin on 12/26/12. +// Copyright (c) 2012 goodman116@gmail.com. All rights reserved. +// + +#import + +@interface Document : NSDocument { + NSArray *volumes; +} + +@property (assign) IBOutlet NSTableView *volumesTableView; +@property (assign) IBOutlet NSTextView *detailsTextView; +@property (assign) IBOutlet NSButton *disclosureButton; +@property (readonly) NSString *vm_name; +@property (readonly) NSString *vmdk_file_name; + +- (IBAction)createBootcampVM:(id)sender; +- (IBAction)refresh:(id)sender; +- (IBAction)expandCollapseLog:(id)sender; + +@end diff --git a/VBoxCamp/VBoxCamp/Document.m b/VBoxCamp/VBoxCamp/Document.m new file mode 100644 index 0000000..bc463cd --- /dev/null +++ b/VBoxCamp/VBoxCamp/Document.m @@ -0,0 +1,250 @@ +// +// Document.m +// VBoxCamp +// +// Created by Dmitriy Zavorokhin on 12/26/12. +// Copyright (c) 2012 goodman116@gmail.com. All rights reserved. +// + +#import "Document.h" +#import "Volume.h" + +@implementation Document + +- (id)init +{ + self = [super init]; + if (self) { + NSFileManager *fileMgr = [NSFileManager defaultManager]; + NSString *vbAppPath = @"/Applications/VirtualBox.app"; + if ([fileMgr fileExistsAtPath:vbAppPath]) { + volumes = [self volumesInfo]; + _vm_name = @"BOOTCAMP_VM"; + _vmdk_file_name = @"bootcampvm"; + } else { + NSAlert *alert = [NSAlert + alertWithMessageText:NSLocalizedString(@"VB_APP_NOT_FOUND_MSG", "VB_APP_NOT_FOUND_MSG") defaultButton:NSLocalizedString(@"QUIT_BTN", "QUIT_BTN") alternateButton:nil otherButton:nil informativeTextWithFormat:NSLocalizedString(@"VB_APP_NOT_FOUND_INF", "VB_APP_NOT_FOUND_INF"), vbAppPath]; + [alert beginSheetModalForWindow:[_volumesTableView window] modalDelegate:self didEndSelector:@selector(alertEnded:code:context:) contextInfo:NULL]; + } + } + return self; +} + +-(void)alertEnded:(NSAlert*)alert code:(NSInteger)choise context:(void*)v { + [[NSApplication sharedApplication] terminate:nil]; +} + +- (NSArray *)volumesInfo { + + // Get a list of mounted non-hidden volumes + NSArray *volumeURLs = [[NSFileManager defaultManager] mountedVolumeURLsIncludingResourceValuesForKeys:nil options:NSVolumeEnumerationSkipHiddenVolumes]; + NSUInteger size = [volumeURLs count]; + + NSMutableArray *result = [NSMutableArray arrayWithCapacity:size]; + DASessionRef session = DASessionCreate(kCFAllocatorDefault); + + for (NSURL *url in volumeURLs) { + NSString *label = [url lastPathComponent]; + // Escape root mount point + if (![label isEqualToString:@"/"]) { + // Create DADisk for the volume + DADiskRef volumeDisk = DADiskCreateFromVolumePath(kCFAllocatorDefault, session, (__bridge CFURLRef)url); + + // Filter out files/directories that aren't volumes + if (volumeDisk) { + Volume *v = [[Volume alloc] init]; + // Get disk description + NSDictionary *description = (__bridge_transfer NSDictionary *)DADiskCopyDescription(volumeDisk); + // Add label + [v setLabel:label]; + // Add mount point + [v setMountPoint:[url path]]; + // Add BSD disk identifier in format disc#s# + [v setBsdId:[description objectForKey: (__bridge id)kDADiskDescriptionMediaBSDNameKey]]; + [result addObject:v]; + CFRelease(volumeDisk); + } + } + } + CFRelease(session); + return result; +} + +- (NSString *)windowNibName +{ + // Override returning the nib file name of the document + // If you need to use a subclass of NSWindowController or if your document supports multiple NSWindowControllers, you should remove this method and override -makeWindowControllers instead. + return @"Document"; +} + +- (void)windowControllerDidLoadNib:(NSWindowController *)aController +{ + [super windowControllerDidLoadNib:aController]; + for (NSUInteger i = 0; i < volumes.count; i++) { + Volume *v = [volumes objectAtIndex:i]; + if ([[v.label uppercaseString] isEqualToString:@"BOOTCAMP"]) { + NSIndexSet *indexSet = [NSIndexSet indexSetWithIndex:i]; + [_volumesTableView selectRowIndexes:indexSet byExtendingSelection:NO]; + break; + } + } + if (volumes != nil) { + [self appendTextToDetails: NSLocalizedString(@"GETTING_INFO_MSG", "GETTING_INFO_MSG")]; + } +} + ++ (BOOL)autosavesInPlace +{ + return YES; +} + +- (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError +{ + // Insert code here to write your document to data of the specified type. If outError != NULL, ensure that you create and set an appropriate error when returning nil. + // You can also choose to override -fileWrapperOfType:error:, -writeToURL:ofType:error:, or -writeToURL:ofType:forSaveOperation:originalContentsURL:error: instead. + NSException *exception = [NSException exceptionWithName:@"UnimplementedMethod" reason:[NSString stringWithFormat:@"%@ is unimplemented", NSStringFromSelector(_cmd)] userInfo:nil]; + @throw exception; + return nil; +} + +- (BOOL)readFromData:(NSData *)data ofType:(NSString *)typeName error:(NSError **)outError +{ + // Insert code here to read your document from the given data of the specified type. If outError != NULL, ensure that you create and set an appropriate error when returning NO. + // You can also choose to override -readFromFileWrapper:ofType:error: or -readFromURL:ofType:error: instead. + // If you override either of these, you should also override -isEntireFileLoaded to return NO if the contents are lazily loaded. + NSException *exception = [NSException exceptionWithName:@"UnimplementedMethod" reason:[NSString stringWithFormat:@"%@ is unimplemented", NSStringFromSelector(_cmd)] userInfo:nil]; + @throw exception; + return YES; +} + +- (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView { +// NSLog(@"Calling numberOfRowsInTableView: %ld", [volumes count]); + volumes = [self volumesInfo]; + return [volumes count]; +} + +- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex { +// NSLog(@"Returning %@ to be displayed", [volumes objectAtIndex:rowIndex]); + return [volumes objectAtIndex:rowIndex]; +} + +- (IBAction)refresh:(id)sender { + volumes = [self volumesInfo]; + [_volumesTableView reloadData]; // TODO fix it +} + +- (IBAction)createBootcampVM:(id)sender { + if ([_volumesTableView selectedRow] != -1) { + Volume *v = [volumes objectAtIndex:[_volumesTableView selectedRow]]; + + //Show system dialog to choose VM files location + NSOpenPanel *openDlg = [NSOpenPanel openPanel]; + [openDlg setCanChooseFiles:NO]; + [openDlg setCanChooseDirectories:YES]; + [openDlg setAllowsMultipleSelection:NO]; + [openDlg setTitle:NSLocalizedString(@"SELECT_PATH_MSG", "SELECT_PATH_MSG")]; + [openDlg setPrompt:NSLocalizedString(@"SELECT_BTN", "SELECT_BTN")]; + if ([openDlg runModal] == NSOKButton) { + NSString *bootcamp_vm_dir = [[openDlg URL] path]; + NSString *chmod_dev = [NSString stringWithFormat:@"sudo chmod a+rw /dev/%@;", v.bsdId]; + NSString *cd_vm_dir = [NSString stringWithFormat:@"cd %@;", bootcamp_vm_dir]; + NSRange range = [v.bsdId rangeOfString:@"disk"]; + NSArray *disk_s = [[v.bsdId substringFromIndex:NSMaxRange(range)] componentsSeparatedByString:@"s"]; + NSString *vbm_create = [NSString stringWithFormat:@"sudo VBoxManage internalcommands createrawvmdk -rawdisk /dev/disk%@ -filename %@.vmdk -partitions %@;", disk_s[0], _vmdk_file_name, disk_s[1]]; + NSString *chmod_chown_vmdk = [NSString stringWithFormat:@"sudo chmod a+rw %@/*.vmdk; sudo chown %@ %@/*.vmdk", bootcamp_vm_dir, NSUserName(), bootcamp_vm_dir]; + + //Assemble AppleScript + NSMutableString *create_vmdk_source = [[NSMutableString alloc] init]; + [create_vmdk_source appendString:@"do shell script \""]; + [create_vmdk_source appendString:chmod_dev]; + [create_vmdk_source appendString:cd_vm_dir]; + [create_vmdk_source appendString:vbm_create]; + [create_vmdk_source appendString:chmod_chown_vmdk]; + [create_vmdk_source appendString:@"\" with administrator privileges"]; + + //Print details to console + [self appendTextToDetails:NSLocalizedString(@"CREATING_VMDK_MSG", "CREATING_VMDK_MSG")]; + [self appendTextToDetails:[NSString stringWithFormat:NSLocalizedString(@"RUNNING_SCRIPT_MSG", "RUNNING_SCRIPT_MSG"), chmod_dev]]; + [self appendTextToDetails:[NSString stringWithFormat:NSLocalizedString(@"RUNNING_SCRIPT_MSG", "RUNNING_SCRIPT_MSG"), cd_vm_dir]]; + [self appendTextToDetails:[NSString stringWithFormat:NSLocalizedString(@"RUNNING_SCRIPT_MSG", "RUNNING_SCRIPT_MSG"), vbm_create]]; + [self appendTextToDetails:[NSString stringWithFormat:NSLocalizedString(@"RUNNING_SCRIPT_MSG", "RUNNING_SCRIPT_MSG"), chmod_chown_vmdk]]; + + //Execute AppleScript + NSAppleScript *create_vmdk_script = [[NSAppleScript alloc] initWithSource:create_vmdk_source]; + NSDictionary *errorDict; + [create_vmdk_script executeAndReturnError:&errorDict]; + [self appendTextToDetails:NSLocalizedString(@"DONE_MSG", "DONE_MSG")]; + + //Fix sticky bits + NSString *partition_table_file = [NSString stringWithFormat:@"%@/%@-pt.vmdk", bootcamp_vm_dir, _vmdk_file_name]; + + NSData *bootcamp_pt_data = [NSData dataWithContentsOfFile:partition_table_file]; + NSUInteger dataLength = [bootcamp_pt_data length]; + NSMutableString *string = [NSMutableString stringWithCapacity:dataLength*2]; + const unsigned char *dataBytes = [bootcamp_pt_data bytes]; + for (NSUInteger idx = 0; idx < dataLength; ++idx) { + [string appendFormat:@"%02x", dataBytes[idx]]; + } + + NSUInteger offset = 446; // byte of partition records start in MBR + for (NSUInteger i = 0; i < [disk_s[1] intValue]-1; i++) { + [string replaceCharactersInRange:NSMakeRange((offset + 16*i + 4)*2, 2) withString:@"2d"]; // change the fifth byte of each 16-bytes partition record before BOOTCAMP's partition record + } + + NSMutableData *fixed_partition_table = [NSMutableData data]; + for (NSUInteger idx = 0; idx+2 <= string.length; idx+=2) { + NSRange range = NSMakeRange(idx, 2); + NSString *hexStr = [string substringWithRange:range]; + NSScanner *scanner = [NSScanner scannerWithString:hexStr]; + unsigned int intValue; + [scanner scanHexInt:&intValue]; + [fixed_partition_table appendBytes:&intValue length:1]; + } + [fixed_partition_table writeToFile:partition_table_file atomically:YES]; //TODO handle status + + // create a new VM + NSString *vbm_createvm = [NSString stringWithFormat:@"VBoxManage createvm --name \\\"%@\\\" --ostype \\\"WindowsXP\\\" --register --basefolder %@;", _vm_name, bootcamp_vm_dir]; + NSString *vbm_modifyvm = [NSString stringWithFormat:@"VBoxManage modifyvm \\\"%@\\\" --memory 1024 --vram 64 --ioapic on --hwvirtex on --chipset piix3 --nestedpaging on --boot1 disk --boot2 none --boot3 none --boot4 none --rtcuseutc on --clipboard bidirectional --accelerate2dvideo on --audio coreaudio --audiocontroller ac97;", _vm_name]; + NSString *vbm_storagectl = [NSString stringWithFormat:@"VBoxManage storagectl \\\"%@\\\" --name \\\"IDE Controller\\\" --add ide --controller ICH6;", _vm_name]; + NSString *vbm_storageattach_hd = [NSString stringWithFormat:@"VBoxManage storageattach \\\"%@\\\" --storagectl \\\"IDE Controller\\\" --port 0 --device 0 --type hdd --medium %@/%@.vmdk;", _vm_name, bootcamp_vm_dir, _vmdk_file_name]; + NSString *vbm_storageattach_addons = [NSString stringWithFormat:@"VBoxManage storageattach \\\"%@\\\" --storagectl \\\"IDE Controller\\\" --port 1 --device 0 --type dvddrive --medium /Applications/VirtualBox.app/Contents/MacOS/VBoxGuestAdditions.iso", _vm_name]; + + //Assemble AppleScript + NSMutableString *create_vm_source = [[NSMutableString alloc] init]; + [create_vm_source appendString:@"do shell script \""]; + [create_vm_source appendString:vbm_createvm]; + [create_vm_source appendString:vbm_modifyvm]; + [create_vm_source appendString:vbm_storagectl]; + [create_vm_source appendString:vbm_storageattach_hd]; + [create_vm_source appendString:vbm_storageattach_addons]; + [create_vm_source appendString:@"\""]; + + //Print details to console + [self appendTextToDetails:NSLocalizedString(@"BUILDING_VB_CONFIG_MSG", "BUILDING_VB_CONFIG_MSG")]; + [self appendTextToDetails:[NSString stringWithFormat:NSLocalizedString(@"RUNNING_SCRIPT_MSG", "RUNNING_SCRIPT_MSG"), vbm_createvm]]; + [self appendTextToDetails:[NSString stringWithFormat:NSLocalizedString(@"RUNNING_SCRIPT_MSG", "RUNNING_SCRIPT_MSG"), vbm_modifyvm]]; + [self appendTextToDetails:[NSString stringWithFormat:NSLocalizedString(@"RUNNING_SCRIPT_MSG", "RUNNING_SCRIPT_MSG"), vbm_storagectl]]; + [self appendTextToDetails:[NSString stringWithFormat:NSLocalizedString(@"RUNNING_SCRIPT_MSG", "RUNNING_SCRIPT_MSG"), vbm_storageattach_hd]]; + [self appendTextToDetails:[NSString stringWithFormat:NSLocalizedString(@"RUNNING_SCRIPT_MSG", "RUNNING_SCRIPT_MSG"), vbm_storageattach_addons]]; + + //Execute AppleScript + NSAppleScript *create_vm_script = [[NSAppleScript alloc] initWithSource:create_vm_source]; + [create_vm_script executeAndReturnError:&errorDict]; + + } + } +} + +- (IBAction)expandCollapseLog:(id)sender { + [_detailsTextView setHidden:YES]; +} + + +-(void)appendTextToDetails:(NSString *)aString { + NSMutableString *ms = [NSMutableString stringWithString:[_detailsTextView string]]; + [ms appendString:aString]; + [ms appendString:@"\n"]; + [_detailsTextView setString:ms]; +} + +@end diff --git a/VBoxCamp/VBoxCamp/VBoxCamp-Info.plist b/VBoxCamp/VBoxCamp/VBoxCamp-Info.plist new file mode 100644 index 0000000..67e90a1 --- /dev/null +++ b/VBoxCamp/VBoxCamp/VBoxCamp-Info.plist @@ -0,0 +1,57 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleDocumentTypes + + + CFBundleTypeExtensions + + vbc + + CFBundleTypeIconFile + + CFBundleTypeName + DocumentType + CFBundleTypeOSTypes + + ???? + + CFBundleTypeRole + Editor + NSDocumentClass + Document + + + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIconFile + Icon + CFBundleIdentifier + hexlet.${PRODUCT_NAME:rfc1034identifier} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + APPL + CFBundleShortVersionString + 0.1 + CFBundleSignature + ???? + CFBundleVersion + 1 + LSApplicationCategoryType + public.app-category.utilities + LSMinimumSystemVersion + ${MACOSX_DEPLOYMENT_TARGET} + NSHumanReadableCopyright + Copyright © 2012 goodman116@gmail.com. All rights reserved. + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/VBoxCamp/VBoxCamp/VBoxCamp-Prefix.pch b/VBoxCamp/VBoxCamp/VBoxCamp-Prefix.pch new file mode 100644 index 0000000..5834721 --- /dev/null +++ b/VBoxCamp/VBoxCamp/VBoxCamp-Prefix.pch @@ -0,0 +1,7 @@ +// +// Prefix header for all source files of the 'VBoxCamp' target in the 'VBoxCamp' project +// + +#ifdef __OBJC__ + #import +#endif diff --git a/VBoxCamp/VBoxCamp/VBoxCamp.scpt b/VBoxCamp/VBoxCamp/VBoxCamp.scpt new file mode 100644 index 0000000..f864900 Binary files /dev/null and b/VBoxCamp/VBoxCamp/VBoxCamp.scpt differ diff --git a/VBoxCamp/VBoxCamp/Volume.h b/VBoxCamp/VBoxCamp/Volume.h new file mode 100644 index 0000000..0eff020 --- /dev/null +++ b/VBoxCamp/VBoxCamp/Volume.h @@ -0,0 +1,17 @@ +// +// Volume.h +// VBoxCamp +// +// Created by Dmitriy Zavorokhin on 12/26/12. +// Copyright (c) 2012 goodman116@gmail.com. All rights reserved. +// + +#import + +@interface Volume : NSObject + +@property NSString *label; +@property NSString *mountPoint; +@property NSString *bsdId; + +@end diff --git a/VBoxCamp/VBoxCamp/Volume.m b/VBoxCamp/VBoxCamp/Volume.m new file mode 100644 index 0000000..53a64e2 --- /dev/null +++ b/VBoxCamp/VBoxCamp/Volume.m @@ -0,0 +1,13 @@ +// +// Volume.m +// VBoxCamp +// +// Created by Dmitriy Zavorokhin on 12/26/12. +// Copyright (c) 2012 goodman116@gmail.com. All rights reserved. +// + +#import "Volume.h" + +@implementation Volume + +@end diff --git a/VBoxCamp/VBoxCamp/en.lproj/Credits.rtf b/VBoxCamp/VBoxCamp/en.lproj/Credits.rtf new file mode 100644 index 0000000..ccbad3a --- /dev/null +++ b/VBoxCamp/VBoxCamp/en.lproj/Credits.rtf @@ -0,0 +1,30 @@ +{\rtf1\ansi\ansicpg1252\cocoartf1138\cocoasubrtf510 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\paperw11900\paperh16840\vieww9600\viewh8400\viewkind0 +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720 + +\f0\b\fs24 \cf0 Engineering: +\b0 \ + Dmitry Zavorokhin\ +\ + +\b Human Interface Design: +\b0 \ + Dmitry Zavorokhin\ +\ + +\b Testing: +\b0 \ + Hopefully not nobody\ +\ + +\b Documentation: +\b0 \ + Whoever\ +\ + +\b With special thanks to: +\b0 \ + Mom\ +} \ No newline at end of file diff --git a/VBoxCamp/VBoxCamp/en.lproj/Document.xib b/VBoxCamp/VBoxCamp/en.lproj/Document.xib new file mode 100644 index 0000000..521e5b6 --- /dev/null +++ b/VBoxCamp/VBoxCamp/en.lproj/Document.xib @@ -0,0 +1,1410 @@ + + + + 1070 + 11G63 + 2843 + 1138.51 + 569.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 2843 + + + IBNSLayoutConstraint + NSArrayController + NSButton + NSButtonCell + NSCustomObject + NSScrollView + NSScroller + NSTableColumn + NSTableHeaderView + NSTableView + NSTextFieldCell + NSTextView + NSToolbar + NSToolbarFlexibleSpaceItem + NSToolbarItem + NSToolbarSpaceItem + NSView + NSWindowTemplate + + + com.apple.InterfaceBuilder.CocoaPlugin + + + PluginDependencyRecalculationVersion + + + + + Document + + + FirstResponder + + + 7 + 2 + {{133, 235}, {494, 374}} + 1886912512 + VBoxCamp + NSWindow + + + BB4187B7-78DD-41D8-AB56-856E6DAF826A + + + YES + YES + YES + NO + 1 + 2 + + + + 211F98AF-724A-40CF-93C3-FAA89CF6553E + + Create BOOTCAMP + Create BOOTCAMP + + + + NSImage + NSActionTemplate + + + + {0, 0} + {0, 0} + YES + YES + -1 + YES + 0 + + + + D3F215E9-E908-4C4B-8DE8-CE89F7877D2A + + Refresh + Refresh + + + + NSImage + NSRefreshFreestandingTemplate + + + + {0, 0} + {0, 0} + YES + YES + -1 + YES + 0 + + + NSToolbarCustomizeToolbarItem + Customize + Customize + Customize Toolbar + + + NSImage + NSToolbarCustomize + + + runToolbarCustomizationPalette: + {0, 0} + {0, 0} + YES + YES + -1 + YES + 0 + + + NSToolbarFlexibleSpaceItem + + Flexible Space + + + + + + {1, 5} + {20000, 32} + YES + YES + -1 + YES + 0 + + YES + YES + + + 1048576 + 2147483647 + + NSImage + NSMenuCheckmark + + + NSImage + NSMenuMixedState + + + + + NSToolbarSpaceItem + + Space + + + + + + {32, 5} + {32, 32} + YES + YES + -1 + YES + 0 + + YES + YES + + + 1048576 + 2147483647 + + + + + + + + + + + + + + + + + + + + + + {94, 86} + + + 256 + + + + 268 + + + + 2304 + + + + 256 + {452, 114} + + + _NS:13 + YES + + + 256 + {452, 17} + + + + + + + -2147483392 + {{224, 0}, {16, 17}} + + _NS:19 + + + + 116 + 40 + 1000 + + 75497536 + 2048 + Label + + LucidaGrande + 11 + 3100 + + + 3 + MC4zMzMzMzI5ODU2AA + + + 6 + System + headerTextColor + + 3 + MAA + + + + + 69730369 + 2048 + Text Cell + + LucidaGrande + 13 + 1044 + + + + 6 + System + controlBackgroundColor + + 3 + MC42NjY2NjY2NjY3AA + + + + 6 + System + controlTextColor + + + + 3 + YES + + + + 140 + 40 + 1000 + + 75497536 + 2048 + Mount point + + + + + + 69730369 + 2048 + Text Cell + + + + + + 3 + YES + + + + 187 + 10 + 3.4028234663852886e+38 + + 75628096 + 2048 + BSD identifier + + + 6 + System + headerColor + + 3 + MQA + + + + + + 69860929 + 2048 + Text Cell + + + + + + 3 + YES + + + + 3 + 2 + + 6 + System + _sourceListBackgroundColor + + 6 + System + alternateSelectedControlColor + + 1 + MCAwIDEAA + + + + + 6 + System + gridColor + + 3 + MC41AA + + + 17 + 1388314624 + + + 4 + 15 + 0 + YES + 1 + 1 + + + {{1, 17}, {452, 114}} + + + _NS:11 + + + 4 + + + + -2147483392 + {{224, 17}, {15, 102}} + + + _NS:58 + + _doScroller: + 0.99507389162561577 + + + + -2147483392 + {{1, 204}, {350, 15}} + + + _NS:60 + 1 + + _doScroller: + 0.9971509971509972 + + + + 2304 + + + + {{1, 0}, {452, 17}} + + + + + 4 + + + {{20, 222}, {454, 132}} + + + _NS:9 + 133682 + + + + + QSAAAEEgAABBmAAAQZgAAA + + + + 256 + + + + 2304 + + + + 2322 + {452, 14} + + + _NS:13 + + + + + + + + + + + + 166 + + + + 452 + 1 + + + 67121125 + 0 + + + + + 6 + System + selectedTextBackgroundColor + + + + 6 + System + selectedTextColor + + + + + + + + {8, -8} + 13 + + + + + + 1 + + 6 + {463, 10000000} + {223, 14} + + + + {{1, 1}, {452, 192}} + + + _NS:11 + + + + {4, 5} + + 12582912 + + + + + + TU0AKgAAEAj///8A////qwAAAP8AAAD/AwMD/BYWFtIFBQVuAAAABv///wD///8E6+vrTGhoaLYtLS3p +BAQE/QAAAP8AAAD/////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///+rAAAA/wAAAP8AAAD/AAAA/wAAAP8EBATSX19fK9HR0ZciIiLv +AAAA/wAAAP8AAAD/AAAA/wAAAP////8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////CsPDw0CRkZG1FxcX9AAAAP8bGxvr +ICAg8AAAAP8ICAjlFRUVVQAAAA////8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wrm5uab +FxcX9AAAAP8AAAD/AQEB3wAAAA////8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///zaXl5fGAAAA/wAAAP8AAABR////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////CO7u7q8AAAD/AAAA/wAAAAz///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////qwAAAP8AAAD/////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///+rAAAA/wAAAP////8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///6sAAAD/AAAA/////wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////qwAAAP8AAAD/ +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///+r +AAAA/wAAAP////8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///6sAAAD/AAAA/////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////qwAAAP8AAAD/////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///+rAAAA/wAAAP////8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///6sAAAD/AAAA/////wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////qwAAAP8AAAD/////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////qwAAAP8AAAD/AAAA/wAAAP8AAAD/ +AAAA/////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///+rAAAA/wAAAP8AAAD/ +AAAA/wAAAP8AAAD/////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////qwAAAP8AAAD/////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///+rAAAA/wAAAP////8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///6sAAAD/AAAA/////wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////qwAAAP8AAAD/////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///+rAAAA/wAAAP////8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///6sAAAD/AAAA/////wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////qwAAAP8AAAD/ +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///+r +AAAA/wAAAP////8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////CO7u7q8AAAD/AAAA/wAAAAz///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///80mpqaxQAAAP8AAAD/AAAATv///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////CuXl5ZYeHh7xAAAA/wAAAP8CAgLXAAAAD////wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////EKurq0mOjo63FxcX9AAAAP8bGxvrICAg8AAAAP8ICAjlHh4eXAAAABj///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////qwAAAP8AAAD/AAAA/wAAAP8AAAD/BAQE1V9fXyvS0tKZICAg8AAAAP8AAAD/ +AAAA/wAAAP8AAAD/////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///+rAAAA/wAAAP8AAAD/FBQU1AUFBXEAAAAG////AP///wTr6+tO +ZWVluC4uLuoAAAD/AAAA/wAAAP////8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8AABABAAADAAAAAQAgAAABAQADAAAAAQAgAAABAgADAAAABAAA +EM4BAwADAAAAAQABAAABBgADAAAAAQACAAABEQAEAAAAAQAAAAgBEgADAAAAAQABAAABFQADAAAAAQAE +AAABFgADAAAAAQAgAAABFwAEAAAAAQAAEAABGgAFAAAAAQAAENYBGwAFAAAAAQAAEN4BHAADAAAAAQAB +AAABKAADAAAAAQACAAABUgADAAAAAQACAAABUwADAAAABAAAEOYAAAAAAAgACAAIAAgSAAAAACAAABIA +AAAAIAAAAAEAAQABAAE + + + + + + + + TU0AKgAABAj///9VQ0ND/wAAAP////8A////AP///6pDQ0P/AAAA/////wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///+qAAAA/////6oAAAD/////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///6oAAAD/////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///+qAAAA/////wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////qgAAAP////8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///6oAAAD/////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///+qAAAA/////wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////qgAAAP////8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////qgAAAP8AAAD/ +AAAA/////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///+q +AAAA/////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////qgAAAP////8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///6oAAAD/////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///+qAAAA/////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////qgAAAP////8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////qgAAAP////+qAAAA/////wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///9VQ0ND/wAAAP////8A////AP///6pDQ0P/AAAA/////wD///8A////AP///wD///8A +////AP///wD///8AAA4BAAADAAAAAQAQAAABAQADAAAAAQAQAAABAgADAAAABAAABLYBAwADAAAAAQAB +AAABBgADAAAAAQACAAABEQAEAAAAAQAAAAgBEgADAAAAAQABAAABFQADAAAAAQAEAAABFgADAAAAAQAQ +AAABFwAEAAAAAQAABAABHAADAAAAAQABAAABUgADAAAAAQACAAABUwADAAAABAAABL6HcwAHAAAHqAAA +BMYAAAAAAAgACAAIAAgAAQABAAEAAQAAB6hhcHBsAiAAAG1udHJSR0IgWFlaIAfZAAIAGQALABoAC2Fj +c3BBUFBMAAAAAGFwcGwAAAAAAAAAAAAAAAAAAAAAAAD21gABAAAAANMtYXBwbAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC2Rlc2MAAAEIAAAAb2RzY20AAAF4AAAFbGNw +cnQAAAbkAAAAOHd0cHQAAAccAAAAFHJYWVoAAAcwAAAAFGdYWVoAAAdEAAAAFGJYWVoAAAdYAAAAFHJU +UkMAAAdsAAAADmNoYWQAAAd8AAAALGJUUkMAAAdsAAAADmdUUkMAAAdsAAAADmRlc2MAAAAAAAAAFEdl +bmVyaWMgUkdCIFByb2ZpbGUAAAAAAAAAAAAAABRHZW5lcmljIFJHQiBQcm9maWxlAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABtbHVjAAAAAAAAAB4AAAAMc2tTSwAA +ACgAAAF4aHJIUgAAACgAAAGgY2FFUwAAACQAAAHIcHRCUgAAACYAAAHsdWtVQQAAACoAAAISZnJGVQAA +ACgAAAI8emhUVwAAABYAAAJkaXRJVAAAACgAAAJ6bmJOTwAAACYAAAKia29LUgAAABYAAALIY3NDWgAA +ACIAAALeaGVJTAAAAB4AAAMAZGVERQAAACwAAAMeaHVIVQAAACgAAANKc3ZTRQAAACYAAAKiemhDTgAA +ABYAAANyamFKUAAAABoAAAOIcm9STwAAACQAAAOiZWxHUgAAACIAAAPGcHRQTwAAACYAAAPobmxOTAAA +ACgAAAQOZXNFUwAAACYAAAPodGhUSAAAACQAAAQ2dHJUUgAAACIAAARaZmlGSQAAACgAAAR8cGxQTAAA +ACwAAASkcnVSVQAAACIAAATQYXJFRwAAACYAAATyZW5VUwAAACYAAAUYZGFESwAAAC4AAAU+AFYBYQBl +AG8AYgBlAGMAbgD9ACAAUgBHAEIAIABwAHIAbwBmAGkAbABHAGUAbgBlAHIAaQENAGsAaQAgAFIARwBC +ACAAcAByAG8AZgBpAGwAUABlAHIAZgBpAGwAIABSAEcAQgAgAGcAZQBuAOgAcgBpAGMAUABlAHIAZgBp +AGwAIABSAEcAQgAgAEcAZQBuAOkAcgBpAGMAbwQXBDAEMwQwBDsETAQ9BDgEOQAgBD8EQAQ+BEQEMAQ5 +BDsAIABSAEcAQgBQAHIAbwBmAGkAbAAgAGcA6QBuAOkAcgBpAHEAdQBlACAAUgBWAEKQGnUoACAAUgBH +AEIAIIJyX2ljz4/wAFAAcgBvAGYAaQBsAG8AIABSAEcAQgAgAGcAZQBuAGUAcgBpAGMAbwBHAGUAbgBl +AHIAaQBzAGsAIABSAEcAQgAtAHAAcgBvAGYAaQBsx3y8GAAgAFIARwBCACDVBLhc0wzHfABPAGIAZQBj +AG4A/QAgAFIARwBCACAAcAByAG8AZgBpAGwF5AXoBdUF5AXZBdwAIABSAEcAQgAgBdsF3AXcBdkAQQBs +AGwAZwBlAG0AZQBpAG4AZQBzACAAUgBHAEIALQBQAHIAbwBmAGkAbADBAGwAdABhAGwA4QBuAG8AcwAg +AFIARwBCACAAcAByAG8AZgBpAGxmbpAaACAAUgBHAEIAIGPPj/Blh072TgCCLAAgAFIARwBCACAw1zDt +MNUwoTCkMOsAUAByAG8AZgBpAGwAIABSAEcAQgAgAGcAZQBuAGUAcgBpAGMDkwO1A70DuQO6A8wAIAPA +A8EDvwPGA68DuwAgAFIARwBCAFAAZQByAGYAaQBsACAAUgBHAEIAIABnAGUAbgDpAHIAaQBjAG8AQQBs +AGcAZQBtAGUAZQBuACAAUgBHAEIALQBwAHIAbwBmAGkAZQBsDkIOGw4jDkQOHw4lDkwAIABSAEcAQgAg +DhcOMQ5IDicORA4bAEcAZQBuAGUAbAAgAFIARwBCACAAUAByAG8AZgBpAGwAaQBZAGwAZQBpAG4AZQBu +ACAAUgBHAEIALQBwAHIAbwBmAGkAaQBsAGkAVQBuAGkAdwBlAHIAcwBhAGwAbgB5ACAAcAByAG8AZgBp +AGwAIABSAEcAQgQeBDEESQQ4BDkAIAQ/BEAEPgREBDgEOwRMACAAUgBHAEIGRQZEBkEAIAYqBjkGMQZK +BkEAIABSAEcAQgAgBicGRAY5BicGRQBHAGUAbgBlAHIAaQBjACAAUgBHAEIAIABQAHIAbwBmAGkAbABl +AEcAZQBuAGUAcgBlAGwAIABSAEcAQgAtAGIAZQBzAGsAcgBpAHYAZQBsAHMAZXRleHQAAAAAQ29weXJp +Z2h0IDIwMDcgQXBwbGUgSW5jLiwgYWxsIHJpZ2h0cyByZXNlcnZlZC4AWFlaIAAAAAAAAPNSAAEAAAAB +Fs9YWVogAAAAAAAAdE0AAD3uAAAD0FhZWiAAAAAAAABadQAArHMAABc0WFlaIAAAAAAAACgaAAAVnwAA +uDZjdXJ2AAAAAAAAAAEBzQAAc2YzMgAAAAAAAQxCAAAF3v//8yYAAAeSAAD9kf//+6L///2jAAAD3AAA +wGw + + + + + + 3 + MCAwAA + + + + 4 + + + + 256 + {{438, 1}, {15, 192}} + + + _NS:83 + + _doScroller: + 1 + 0.85256409645080566 + + + + -2147483392 + {{-100, -100}, {87, 18}} + + + _NS:33 + 1 + + _doScroller: + 1 + 0.94565218687057495 + + + {{20, 20}, {454, 194}} + + + _NS:9 + 133138 + + + + + + + 268 + {{5, 201}, {13, 13}} + + + _NS:1622 + YES + + -2080374784 + 134217728 + + + _NS:1622 + + -1232322560 + 133 + + + 200 + 25 + + + + {494, 374} + + + + {{0, 0}, {1920, 1178}} + {94, 155} + {10000000000000, 10000000000000} + YES + + + + label + mountPoint + bsdId + + Volume + + YES + YES + YES + YES + YES + + + NSApplication + + + + + + + window + + + + 18 + + + + volumesTableView + + + + 100079 + + + + detailsTextView + + + + 100097 + + + + createBootcampVM: + + + + 100098 + + + + refresh: + + + + 100108 + + + + disclosureButton + + + + 100129 + + + + expandCollapseLog: + + + + 100134 + + + + delegate + + + + 17 + + + + content: arrangedObjects + + + + + + content: arrangedObjects + content + arrangedObjects + 2 + + + 100082 + + + + value: arrangedObjects.label + + + + + + value: arrangedObjects.label + value + arrangedObjects.label + 2 + + + 100049 + + + + value: arrangedObjects.mountPoint + + + + + + value: arrangedObjects.mountPoint + value + arrangedObjects.mountPoint + 2 + + + 100053 + + + + value: arrangedObjects.bsdId + + + + + + value: arrangedObjects.bsdId + value + arrangedObjects.bsdId + 2 + + + 100055 + + + + contentArray: self.volumes + + + + + + contentArray: self.volumes + contentArray + self.volumes + 2 + + + 100050 + + + + + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + 5 + + + + + + + VBoxCamp + + + 6 + + + + + 4 + 0 + + 4 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 3 + 0 + + 4 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 5 + 1 + + 5 + + 1000 + + 3 + 9 + 3 + + + + 3 + 0 + + 3 + 1 + + 160 + + 1000 + + 3 + 9 + 3 + + + + 3 + 0 + + 3 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 3 + 0 + + 3 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + + + + + + -3 + + + Application + + + 100027 + + + + + + + + + + + 100028 + + + + + + + + + + 100029 + + + + + 100031 + + + + + 100032 + + + + + + + + 100033 + + + + + + + + 100034 + + + + + 100035 + + + + + 100038 + + + + + 100039 + + + + + 100042 + + + + + 100044 + + + + + + + + 100045 + + + + + 100047 + + + + + 100056 + + + + + 100058 + + + + + + + + + + + + 100059 + + + + + 100062 + + + + + 100064 + + + + + 100083 + + + + + 100085 + + + + + + + + + + 100086 + + + + + 100087 + + + + + 100088 + + + + + 100089 + + + + + 100092 + + + + + 100094 + + + + + 100099 + + + + + 100100 + + + + + + + + 100101 + + + + + 100105 + + + + + 100123 + + + + + 100103 + + + + + 100102 + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{133, 170}, {507, 413}} + + + + + + + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + 100134 + + + 0 + IBCocoaFramework + YES + 3 + + {15, 15} + {11, 11} + {10, 3} + {14, 14} + {32, 32} + + YES + + diff --git a/VBoxCamp/VBoxCamp/en.lproj/InfoPlist.strings b/VBoxCamp/VBoxCamp/en.lproj/InfoPlist.strings new file mode 100644 index 0000000..477b28f --- /dev/null +++ b/VBoxCamp/VBoxCamp/en.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/VBoxCamp/VBoxCamp/en.lproj/Localizable.strings b/VBoxCamp/VBoxCamp/en.lproj/Localizable.strings new file mode 100644 index 0000000..80ae697 --- /dev/null +++ b/VBoxCamp/VBoxCamp/en.lproj/Localizable.strings @@ -0,0 +1,18 @@ +/* + Localizable.strings + VBoxCamp + + Created by Dmitriy Zavorokhin on 2/11/13. + Copyright (c) 2013 goodman116@gmail.com. All rights reserved. +*/ + +"SELECT_PATH_MSG" = "Select path to keep BOOTCAMP virtual machine files"; +"SELECT_BTN" = "Select"; +"CREATING_VMDK_MSG" = "Creating VMDK disk from existing partition ..."; +"BUILDING_VB_CONFIG_MSG" = "Building VirtualBox configuration for new machine ..."; +"RUNNING_SCRIPT_MSG" = "Running script: %@ ..."; +"GETTING_INFO_MSG" = "Getting volumes information... Done.\n"; +"DONE_MSG" = "Done."; +"QUIT_BTN" = "Quit"; +"VB_APP_NOT_FOUND_MSG" = "VirtualBox application not found."; +"VB_APP_NOT_FOUND_INF" = "Application folder not found at %@."; diff --git a/VBoxCamp/VBoxCamp/en.lproj/MainMenu.xib b/VBoxCamp/VBoxCamp/en.lproj/MainMenu.xib new file mode 100644 index 0000000..78f88d3 --- /dev/null +++ b/VBoxCamp/VBoxCamp/en.lproj/MainMenu.xib @@ -0,0 +1,704 @@ + + + + 1070 + 11G63 + 2843 + 1138.51 + 569.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 2843 + + + NSCustomObject + NSMenu + NSMenuItem + + + com.apple.InterfaceBuilder.CocoaPlugin + + + PluginDependencyRecalculationVersion + + + + + NSApplication + + + FirstResponder + + + NSApplication + + + AMainMenu + + + + VBoxCamp + + 1048576 + 2147483647 + + NSImage + NSMenuCheckmark + + + NSImage + NSMenuMixedState + + submenuAction: + + VBoxCamp + + + + About VBoxCamp + + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Preferences… + , + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Services + + 1048576 + 2147483647 + + + submenuAction: + + Services + + _NSServicesMenu + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Hide VBoxCamp + h + 1048576 + 2147483647 + + + + + + Hide Others + h + 1572864 + 2147483647 + + + + + + Show All + + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Quit VBoxCamp + q + 1048576 + 2147483647 + + + + + _NSAppleMenu + + + + + Edit + + 1048576 + 2147483647 + + + submenuAction: + + Edit + + + + Undo + z + 1048576 + 2147483647 + + + + + + Redo + Z + 1179648 + 2147483647 + + + + + + + + + Virtual machines + + 2147483647 + + + submenuAction: + + Virtual machines + + + + Add... + + 2147483647 + + + + + + Remove + CA + 1048576 + 2147483647 + + + + + + Run + r + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Create BOOTCAMP VM... + + 2147483647 + + + + + + + + + Help + + 2147483647 + + + submenuAction: + + Help + + + + VBoxCamp Help + ? + 1048576 + 2147483647 + + + + + _NSHelpMenu + + + + _NSMainMenu + + + NSFontManager + + + + + + + terminate: + + + + 448 + + + + orderFrontStandardAboutPanel: + + + + 142 + + + + undo: + + + + 223 + + + + redo: + + + + 231 + + + + hide: + + + + 367 + + + + hideOtherApplications: + + + + 368 + + + + unhideAllApplications: + + + + 370 + + + + showHelp: + + + + 494 + + + + createBootcampVM: + + + + 558 + + + + + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 29 + + + + + + + + + + + 56 + + + + + + + + 217 + + + + + + + + 205 + + + + + + + + + 207 + + + + + 215 + + + + + 57 + + + + + + + + + + + + + + + + + + 58 + + + + + 134 + + + + + 150 + + + + + 136 + + + + + 144 + + + + + 129 + + + + + 143 + + + + + 236 + + + + + 131 + + + + + + + + 149 + + + + + 145 + + + + + 130 + + + + + 419 + + + + + 491 + + + + + + + + 492 + + + + + + + + 493 + + + + + 534 + + + + + + + + 535 + + + + + + + + + + + + 553 + + + + + 554 + + + + + 555 + + + + + 556 + + + + + 557 + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + 558 + + + + + Document + NSDocument + + id + id + + + + createBootcampVM: + id + + + refresh: + id + + + + NSTextView + NSTableView + + + + detailsTextView + NSTextView + + + volumesTableView + NSTableView + + + + IBProjectSource + ./Classes/Document.h + + + + FirstResponder + + duplicateDocument: + id + + + duplicateDocument: + + duplicateDocument: + id + + + + IBUserSource + + + + + + 0 + IBCocoaFramework + YES + 3 + + {11, 11} + {10, 3} + + YES + + diff --git a/VBoxCamp/VBoxCamp/main.m b/VBoxCamp/VBoxCamp/main.m new file mode 100644 index 0000000..bcf6118 --- /dev/null +++ b/VBoxCamp/VBoxCamp/main.m @@ -0,0 +1,14 @@ +// +// main.m +// VBoxCamp +// +// Created by Dmitriy Zavorokhin on 12/26/12. +// Copyright (c) 2012 goodman116@gmail.com. All rights reserved. +// + +#import + +int main(int argc, char *argv[]) +{ + return NSApplicationMain(argc, (const char **)argv); +} diff --git a/VBoxCamp/VBoxCamp/ru.lproj/Credits.rtf b/VBoxCamp/VBoxCamp/ru.lproj/Credits.rtf new file mode 100644 index 0000000..ccbad3a --- /dev/null +++ b/VBoxCamp/VBoxCamp/ru.lproj/Credits.rtf @@ -0,0 +1,30 @@ +{\rtf1\ansi\ansicpg1252\cocoartf1138\cocoasubrtf510 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\paperw11900\paperh16840\vieww9600\viewh8400\viewkind0 +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720 + +\f0\b\fs24 \cf0 Engineering: +\b0 \ + Dmitry Zavorokhin\ +\ + +\b Human Interface Design: +\b0 \ + Dmitry Zavorokhin\ +\ + +\b Testing: +\b0 \ + Hopefully not nobody\ +\ + +\b Documentation: +\b0 \ + Whoever\ +\ + +\b With special thanks to: +\b0 \ + Mom\ +} \ No newline at end of file diff --git a/VBoxCamp/VBoxCamp/ru.lproj/Document.xib b/VBoxCamp/VBoxCamp/ru.lproj/Document.xib new file mode 100644 index 0000000..d701116 --- /dev/null +++ b/VBoxCamp/VBoxCamp/ru.lproj/Document.xib @@ -0,0 +1,1394 @@ + + + + 1070 + 11G63 + 2843 + 1138.51 + 569.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 2843 + + + IBNSLayoutConstraint + NSArrayController + NSButton + NSButtonCell + NSCustomObject + NSScrollView + NSScroller + NSTableColumn + NSTableHeaderView + NSTableView + NSTextFieldCell + NSTextView + NSToolbar + NSToolbarFlexibleSpaceItem + NSToolbarItem + NSToolbarSpaceItem + NSView + NSWindowTemplate + + + com.apple.InterfaceBuilder.CocoaPlugin + + + PluginDependencyRecalculationVersion + + + + + Document + + + FirstResponder + + + 7 + 2 + {{133, 235}, {494, 374}} + 1886912512 + VBoxCamp + NSWindow + + + BB4187B7-78DD-41D8-AB56-856E6DAF826A + + + YES + YES + YES + NO + 1 + 2 + + + + 211F98AF-724A-40CF-93C3-FAA89CF6553E + + Создать BOOTCAMP + Создать BOOTCAMP + + + + NSImage + NSActionTemplate + + + + {0, 0} + {0, 0} + YES + YES + -1 + YES + 0 + + + + D3F215E9-E908-4C4B-8DE8-CE89F7877D2A + + Обновить + Обновить + + + + NSImage + NSRefreshFreestandingTemplate + + + + {0, 0} + {0, 0} + YES + YES + -1 + YES + 0 + + + NSToolbarCustomizeToolbarItem + Customize + Customize + Customize Toolbar + + + NSImage + NSToolbarCustomize + + + runToolbarCustomizationPalette: + {0, 0} + {0, 0} + YES + YES + -1 + YES + 0 + + + NSToolbarFlexibleSpaceItem + + Flexible Space + + + + + + {1, 5} + {20000, 32} + YES + YES + -1 + YES + 0 + + YES + YES + + + 1048576 + 2147483647 + + NSImage + NSMenuCheckmark + + + NSImage + NSMenuMixedState + + + + + NSToolbarSpaceItem + + Space + + + + + + {32, 5} + {32, 32} + YES + YES + -1 + YES + 0 + + YES + YES + + + 1048576 + 2147483647 + + + + + + + + + + + + + + + + + + + + + + {94, 86} + + + 256 + + + + 268 + + + + 2304 + + + + 256 + {452, 114} + + + _NS:13 + YES + + + 256 + {452, 17} + + + + + + + -2147483392 + {{224, 0}, {16, 17}} + + _NS:19 + + + + 116 + 40 + 1000 + + 75497536 + 2048 + Метка тома + + LucidaGrande + 11 + 3100 + + + 3 + MC4zMzMzMzI5ODU2AA + + + 6 + System + headerTextColor + + 3 + MAA + + + + + 69730369 + 2048 + Text Cell + + LucidaGrande + 13 + 1044 + + + + 6 + System + controlBackgroundColor + + 3 + MC42NjY2NjY2NjY3AA + + + + 6 + System + controlTextColor + + + + 3 + YES + + + + 140 + 40 + 1000 + + 75497536 + 2048 + Точка монтирования + + + + + + 69730369 + 2048 + Text Cell + + + + + + 3 + YES + + + + 187 + 10 + 3.4028234663852886e+38 + + 75628096 + 2048 + BSD идентификатор + + + 6 + System + headerColor + + 3 + MQA + + + + + + 69860929 + 2048 + Text Cell + + + + + + 3 + YES + + + + 3 + 2 + + 6 + System + _sourceListBackgroundColor + + 6 + System + alternateSelectedControlColor + + 1 + MCAwIDEAA + + + + + 6 + System + gridColor + + 3 + MC41AA + + + 17 + 1388314624 + + + 4 + 15 + 0 + YES + 1 + 1 + + + {{1, 17}, {452, 114}} + + + _NS:11 + + + 4 + + + + -2147483392 + {{224, 17}, {15, 102}} + + + _NS:58 + + _doScroller: + 0.99507389162561577 + + + + -2147483392 + {{1, 204}, {350, 15}} + + + _NS:60 + 1 + + _doScroller: + 0.9971509971509972 + + + + 2304 + + + + {{1, 0}, {452, 17}} + + + + + 4 + + + {{20, 222}, {454, 132}} + + + _NS:9 + 133682 + + + + + QSAAAEEgAABBmAAAQZgAAA + + + + 256 + + + + 2304 + + + + 2322 + {452, 14} + + + _NS:13 + + + + + + + + + + + + 166 + + + + 452 + 1 + + + 67121125 + 0 + + + + + 6 + System + selectedTextBackgroundColor + + + + 6 + System + selectedTextColor + + + + + + + + {8, -8} + 13 + + + + + + 1 + + 6 + {463, 10000000} + {223, 14} + + + + {{1, 1}, {452, 192}} + + + _NS:11 + + + + {4, 5} + + 12582912 + + + + + + TU0AKgAAEAj///8A////qwAAAP8AAAD/AwMD/BYWFtIFBQVuAAAABv///wD///8E6+vrTGhoaLYtLS3p +BAQE/QAAAP8AAAD/////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///+rAAAA/wAAAP8AAAD/AAAA/wAAAP8EBATSX19fK9HR0ZciIiLv +AAAA/wAAAP8AAAD/AAAA/wAAAP////8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////CsPDw0CRkZG1FxcX9AAAAP8bGxvr +ICAg8AAAAP8ICAjlFRUVVQAAAA////8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wrm5uab +FxcX9AAAAP8AAAD/AQEB3wAAAA////8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///zaXl5fGAAAA/wAAAP8AAABR////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////CO7u7q8AAAD/AAAA/wAAAAz///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////qwAAAP8AAAD/////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///+rAAAA/wAAAP////8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///6sAAAD/AAAA/////wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////qwAAAP8AAAD/ +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///+r +AAAA/wAAAP////8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///6sAAAD/AAAA/////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////qwAAAP8AAAD/////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///+rAAAA/wAAAP////8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///6sAAAD/AAAA/////wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////qwAAAP8AAAD/////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////qwAAAP8AAAD/AAAA/wAAAP8AAAD/ +AAAA/////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///+rAAAA/wAAAP8AAAD/ +AAAA/wAAAP8AAAD/////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////qwAAAP8AAAD/////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///+rAAAA/wAAAP////8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///6sAAAD/AAAA/////wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////qwAAAP8AAAD/////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///+rAAAA/wAAAP////8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///6sAAAD/AAAA/////wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////qwAAAP8AAAD/ +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///+r +AAAA/wAAAP////8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////CO7u7q8AAAD/AAAA/wAAAAz///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///80mpqaxQAAAP8AAAD/AAAATv///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////CuXl5ZYeHh7xAAAA/wAAAP8CAgLXAAAAD////wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////EKurq0mOjo63FxcX9AAAAP8bGxvrICAg8AAAAP8ICAjlHh4eXAAAABj///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////qwAAAP8AAAD/AAAA/wAAAP8AAAD/BAQE1V9fXyvS0tKZICAg8AAAAP8AAAD/ +AAAA/wAAAP8AAAD/////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///+rAAAA/wAAAP8AAAD/FBQU1AUFBXEAAAAG////AP///wTr6+tO +ZWVluC4uLuoAAAD/AAAA/wAAAP////8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8AABABAAADAAAAAQAgAAABAQADAAAAAQAgAAABAgADAAAABAAA +EM4BAwADAAAAAQABAAABBgADAAAAAQACAAABEQAEAAAAAQAAAAgBEgADAAAAAQABAAABFQADAAAAAQAE +AAABFgADAAAAAQAgAAABFwAEAAAAAQAAEAABGgAFAAAAAQAAENYBGwAFAAAAAQAAEN4BHAADAAAAAQAB +AAABKAADAAAAAQACAAABUgADAAAAAQACAAABUwADAAAABAAAEOYAAAAAAAgACAAIAAgSAAAAACAAABIA +AAAAIAAAAAEAAQABAAE + + + + + + + + TU0AKgAABAj///9VQ0ND/wAAAP////8A////AP///6pDQ0P/AAAA/////wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///+qAAAA/////6oAAAD/////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///6oAAAD/////AP///wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///+qAAAA/////wD///8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////qgAAAP////8A////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///6oAAAD/////AP///wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///+qAAAA/////wD///8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////qgAAAP////8A +////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////qgAAAP8AAAD/ +AAAA/////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///+q +AAAA/////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////qgAAAP////8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///6oAAAD/////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///+qAAAA/////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////qgAAAP////8A////AP///wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///8A////qgAAAP////+qAAAA/////wD///8A////AP///wD///8A////AP///wD///8A +////AP///wD///9VQ0ND/wAAAP////8A////AP///6pDQ0P/AAAA/////wD///8A////AP///wD///8A +////AP///wD///8AAA4BAAADAAAAAQAQAAABAQADAAAAAQAQAAABAgADAAAABAAABLYBAwADAAAAAQAB +AAABBgADAAAAAQACAAABEQAEAAAAAQAAAAgBEgADAAAAAQABAAABFQADAAAAAQAEAAABFgADAAAAAQAQ +AAABFwAEAAAAAQAABAABHAADAAAAAQABAAABUgADAAAAAQACAAABUwADAAAABAAABL6HcwAHAAAHqAAA +BMYAAAAAAAgACAAIAAgAAQABAAEAAQAAB6hhcHBsAiAAAG1udHJSR0IgWFlaIAfZAAIAGQALABoAC2Fj +c3BBUFBMAAAAAGFwcGwAAAAAAAAAAAAAAAAAAAAAAAD21gABAAAAANMtYXBwbAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC2Rlc2MAAAEIAAAAb2RzY20AAAF4AAAFbGNw +cnQAAAbkAAAAOHd0cHQAAAccAAAAFHJYWVoAAAcwAAAAFGdYWVoAAAdEAAAAFGJYWVoAAAdYAAAAFHJU +UkMAAAdsAAAADmNoYWQAAAd8AAAALGJUUkMAAAdsAAAADmdUUkMAAAdsAAAADmRlc2MAAAAAAAAAFEdl +bmVyaWMgUkdCIFByb2ZpbGUAAAAAAAAAAAAAABRHZW5lcmljIFJHQiBQcm9maWxlAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABtbHVjAAAAAAAAAB4AAAAMc2tTSwAA +ACgAAAF4aHJIUgAAACgAAAGgY2FFUwAAACQAAAHIcHRCUgAAACYAAAHsdWtVQQAAACoAAAISZnJGVQAA +ACgAAAI8emhUVwAAABYAAAJkaXRJVAAAACgAAAJ6bmJOTwAAACYAAAKia29LUgAAABYAAALIY3NDWgAA +ACIAAALeaGVJTAAAAB4AAAMAZGVERQAAACwAAAMeaHVIVQAAACgAAANKc3ZTRQAAACYAAAKiemhDTgAA +ABYAAANyamFKUAAAABoAAAOIcm9STwAAACQAAAOiZWxHUgAAACIAAAPGcHRQTwAAACYAAAPobmxOTAAA +ACgAAAQOZXNFUwAAACYAAAPodGhUSAAAACQAAAQ2dHJUUgAAACIAAARaZmlGSQAAACgAAAR8cGxQTAAA +ACwAAASkcnVSVQAAACIAAATQYXJFRwAAACYAAATyZW5VUwAAACYAAAUYZGFESwAAAC4AAAU+AFYBYQBl +AG8AYgBlAGMAbgD9ACAAUgBHAEIAIABwAHIAbwBmAGkAbABHAGUAbgBlAHIAaQENAGsAaQAgAFIARwBC +ACAAcAByAG8AZgBpAGwAUABlAHIAZgBpAGwAIABSAEcAQgAgAGcAZQBuAOgAcgBpAGMAUABlAHIAZgBp +AGwAIABSAEcAQgAgAEcAZQBuAOkAcgBpAGMAbwQXBDAEMwQwBDsETAQ9BDgEOQAgBD8EQAQ+BEQEMAQ5 +BDsAIABSAEcAQgBQAHIAbwBmAGkAbAAgAGcA6QBuAOkAcgBpAHEAdQBlACAAUgBWAEKQGnUoACAAUgBH +AEIAIIJyX2ljz4/wAFAAcgBvAGYAaQBsAG8AIABSAEcAQgAgAGcAZQBuAGUAcgBpAGMAbwBHAGUAbgBl +AHIAaQBzAGsAIABSAEcAQgAtAHAAcgBvAGYAaQBsx3y8GAAgAFIARwBCACDVBLhc0wzHfABPAGIAZQBj +AG4A/QAgAFIARwBCACAAcAByAG8AZgBpAGwF5AXoBdUF5AXZBdwAIABSAEcAQgAgBdsF3AXcBdkAQQBs +AGwAZwBlAG0AZQBpAG4AZQBzACAAUgBHAEIALQBQAHIAbwBmAGkAbADBAGwAdABhAGwA4QBuAG8AcwAg +AFIARwBCACAAcAByAG8AZgBpAGxmbpAaACAAUgBHAEIAIGPPj/Blh072TgCCLAAgAFIARwBCACAw1zDt +MNUwoTCkMOsAUAByAG8AZgBpAGwAIABSAEcAQgAgAGcAZQBuAGUAcgBpAGMDkwO1A70DuQO6A8wAIAPA +A8EDvwPGA68DuwAgAFIARwBCAFAAZQByAGYAaQBsACAAUgBHAEIAIABnAGUAbgDpAHIAaQBjAG8AQQBs +AGcAZQBtAGUAZQBuACAAUgBHAEIALQBwAHIAbwBmAGkAZQBsDkIOGw4jDkQOHw4lDkwAIABSAEcAQgAg +DhcOMQ5IDicORA4bAEcAZQBuAGUAbAAgAFIARwBCACAAUAByAG8AZgBpAGwAaQBZAGwAZQBpAG4AZQBu +ACAAUgBHAEIALQBwAHIAbwBmAGkAaQBsAGkAVQBuAGkAdwBlAHIAcwBhAGwAbgB5ACAAcAByAG8AZgBp +AGwAIABSAEcAQgQeBDEESQQ4BDkAIAQ/BEAEPgREBDgEOwRMACAAUgBHAEIGRQZEBkEAIAYqBjkGMQZK +BkEAIABSAEcAQgAgBicGRAY5BicGRQBHAGUAbgBlAHIAaQBjACAAUgBHAEIAIABQAHIAbwBmAGkAbABl +AEcAZQBuAGUAcgBlAGwAIABSAEcAQgAtAGIAZQBzAGsAcgBpAHYAZQBsAHMAZXRleHQAAAAAQ29weXJp +Z2h0IDIwMDcgQXBwbGUgSW5jLiwgYWxsIHJpZ2h0cyByZXNlcnZlZC4AWFlaIAAAAAAAAPNSAAEAAAAB +Fs9YWVogAAAAAAAAdE0AAD3uAAAD0FhZWiAAAAAAAABadQAArHMAABc0WFlaIAAAAAAAACgaAAAVnwAA +uDZjdXJ2AAAAAAAAAAEBzQAAc2YzMgAAAAAAAQxCAAAF3v//8yYAAAeSAAD9kf//+6L///2jAAAD3AAA +wGw + + + + + + 3 + MCAwAA + + + + 4 + + + + 256 + {{438, 1}, {15, 192}} + + + _NS:83 + + _doScroller: + 1 + 0.85256409645080566 + + + + -2147483392 + {{-100, -100}, {87, 18}} + + + _NS:33 + 1 + + _doScroller: + 1 + 0.94565218687057495 + + + {{20, 20}, {454, 194}} + + + _NS:9 + 133138 + + + + + + + 268 + {{7, 201}, {13, 13}} + + + _NS:1622 + YES + + -2080374784 + 0 + + + _NS:1622 + + -1198768128 + 133 + + + 200 + 25 + + + + {494, 374} + + + + {{0, 0}, {1920, 1178}} + {94, 155} + {10000000000000, 10000000000000} + YES + + + + label + mountPoint + bsdId + + Volume + + YES + YES + YES + YES + YES + + + NSApplication + + + + + + + window + + + + 18 + + + + volumesTableView + + + + 100079 + + + + detailsTextView + + + + 100097 + + + + createBootcampVM: + + + + 100098 + + + + refresh: + + + + 100108 + + + + delegate + + + + 17 + + + + content: arrangedObjects + + + + + + content: arrangedObjects + content + arrangedObjects + 2 + + + 100082 + + + + value: arrangedObjects.label + + + + + + value: arrangedObjects.label + value + arrangedObjects.label + 2 + + + 100049 + + + + value: arrangedObjects.mountPoint + + + + + + value: arrangedObjects.mountPoint + value + arrangedObjects.mountPoint + 2 + + + 100053 + + + + value: arrangedObjects.bsdId + + + + + + value: arrangedObjects.bsdId + value + arrangedObjects.bsdId + 2 + + + 100055 + + + + contentArray: self.volumes + + + + + + contentArray: self.volumes + contentArray + self.volumes + 2 + + + 100050 + + + + + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + 5 + + + + + + + VBoxCamp + + + 6 + + + + + 4 + 0 + + 4 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 3 + 0 + + 4 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 5 + 1 + + 7 + + 1000 + + 3 + 9 + 3 + + + + 3 + 0 + + 3 + 1 + + 160 + + 1000 + + 3 + 9 + 3 + + + + 3 + 0 + + 3 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 3 + 0 + + 3 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 8 + 29 + 3 + + + + + + + + + -3 + + + Application + + + 100027 + + + + + + + + + + + 100028 + + + + + + + + + + 100029 + + + + + 100031 + + + + + 100032 + + + + + + + + 100033 + + + + + + + + 100034 + + + + + 100035 + + + + + 100038 + + + + + 100039 + + + + + 100042 + + + + + 100044 + + + + + + + + 100045 + + + + + 100047 + + + + + 100056 + + + + + 100058 + + + + + + + + + + + + 100059 + + + + + 100062 + + + + + 100064 + + + + + 100083 + + + + + 100085 + + + + + + + + + + 100086 + + + + + 100087 + + + + + 100088 + + + + + 100089 + + + + + 100092 + + + + + 100094 + + + + + 100099 + + + + + 100100 + + + + + + + + 100101 + + + + + 100102 + + + + + 100103 + + + + + 100104 + + + + + 100105 + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + {{133, 170}, {507, 413}} + + + + + + + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + 100108 + + + 0 + IBCocoaFramework + YES + 3 + + {15, 15} + {11, 11} + {10, 3} + {14, 14} + {32, 32} + + YES + + diff --git a/VBoxCamp/VBoxCamp/ru.lproj/InfoPlist.strings b/VBoxCamp/VBoxCamp/ru.lproj/InfoPlist.strings new file mode 100644 index 0000000..477b28f --- /dev/null +++ b/VBoxCamp/VBoxCamp/ru.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/VBoxCamp/VBoxCamp/ru.lproj/Localizable.strings b/VBoxCamp/VBoxCamp/ru.lproj/Localizable.strings new file mode 100644 index 0000000..e8f1be8 --- /dev/null +++ b/VBoxCamp/VBoxCamp/ru.lproj/Localizable.strings @@ -0,0 +1,18 @@ +/* + Localizable.strings + VBoxCamp + + Created by Dmitriy Zavorokhin on 2/11/13. + Copyright (c) 2013 goodman116@gmail.com. All rights reserved. +*/ + +"SELECT_PATH_MSG" = "Укажите папку для хранения файлов виртуальной машины BOOTCAMP"; +"SELECT_BTN" = "Выбрать"; +"CREATING_VMDK_MSG" = "Создание VMDK-диска из существующего раздела ..."; +"BUILDING_VB_CONFIG_MSG" = "Настройка VirtualBox-конфигурации для новой машины ..."; +"RUNNING_SCRIPT_MSG" = "Выполнение команды: %@ ..."; +"GETTING_INFO_MSG" = "Сбор информации о дисках... Готово.\n"; +"DONE_MSG" = "Готово."; +"QUIT_BTN" = "Выйти"; +"VB_APP_NOT_FOUND_MSG" = "Приложение VirtualBox не найдено."; +"VB_APP_NOT_FOUND_INF" = "Папка приложения не найдена в %@."; \ No newline at end of file diff --git a/VBoxCamp/VBoxCamp/ru.lproj/MainMenu.xib b/VBoxCamp/VBoxCamp/ru.lproj/MainMenu.xib new file mode 100644 index 0000000..ecb8670 --- /dev/null +++ b/VBoxCamp/VBoxCamp/ru.lproj/MainMenu.xib @@ -0,0 +1,794 @@ + + + + 1070 + 11G63 + 2843 + 1138.51 + 569.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 2843 + + + NSCustomObject + NSMenu + NSMenuItem + + + com.apple.InterfaceBuilder.CocoaPlugin + + + PluginDependencyRecalculationVersion + + + + + NSApplication + + + FirstResponder + + + NSApplication + + + AMainMenu + + + + VBoxCamp + + 1048576 + 2147483647 + + NSImage + NSMenuCheckmark + + + NSImage + NSMenuMixedState + + submenuAction: + + VBoxCamp + + + + О программе VBoxCamp + + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Настройки + , + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Службы + + 1048576 + 2147483647 + + + submenuAction: + + Службы + + _NSServicesMenu + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Скрыть VBoxCamp + h + 1048576 + 2147483647 + + + + + + Скрыть другие + h + 1572864 + 2147483647 + + + + + + Показать все + + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Завершить VBoxCamp + q + 1048576 + 2147483647 + + + + + _NSAppleMenu + + + + + Правка + + 1048576 + 2147483647 + + + submenuAction: + + Правка + + + + Undo + z + 1048576 + 2147483647 + + + + + + Redo + Z + 1179648 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Cut + x + 1048576 + 2147483647 + + + + + + Copy + c + 1048576 + 2147483647 + + + + + + Paste + v + 1048576 + 2147483647 + + + + + + + + + Виртуальные машины + + 2147483647 + + + submenuAction: + + Виртуальные машины + + + + Добавить... + + 2147483647 + + + + + + Удалить + CA + 1048576 + 2147483647 + + + + + + Запустить + r + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Создать из BOOTCAMP... + + 2147483647 + + + + + + + + + Справка + + 2147483647 + + + submenuAction: + + Справка + + + + VBoxCamp Help + ? + 1048576 + 2147483647 + + + + + _NSHelpMenu + + + + _NSMainMenu + + + NSFontManager + + + + + + + terminate: + + + + 448 + + + + orderFrontStandardAboutPanel: + + + + 142 + + + + undo: + + + + 223 + + + + copy: + + + + 224 + + + + paste: + + + + 226 + + + + cut: + + + + 228 + + + + redo: + + + + 231 + + + + hide: + + + + 367 + + + + hideOtherApplications: + + + + 368 + + + + unhideAllApplications: + + + + 370 + + + + showHelp: + + + + 494 + + + + createBootcampVM: + + + + 558 + + + + + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 29 + + + + + + + + + + + 56 + + + + + + + + 217 + + + + + + + + 205 + + + + + + + + + + + + + 207 + + + + + 215 + + + + + 57 + + + + + + + + + + + + + + + + + + 58 + + + + + 134 + + + + + 150 + + + + + 136 + + + + + 144 + + + + + 129 + + + + + 143 + + + + + 236 + + + + + 131 + + + + + + + + 149 + + + + + 145 + + + + + 130 + + + + + 419 + + + + + 491 + + + + + + + + 492 + + + + + + + + 493 + + + + + 534 + + + + + + + + 535 + + + + + + + + + + + + 553 + + + + + 554 + + + + + 555 + + + + + 556 + + + + + 557 + + + + + 203 + + + + + 197 + + + + + 199 + + + + + 206 + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + 558 + + + + + Document + NSDocument + + id + id + + + + createBootcampVM: + id + + + refresh: + id + + + + NSTextView + NSTableView + + + + detailsTextView + NSTextView + + + volumesTableView + NSTableView + + + + IBProjectSource + ./Classes/Document.h + + + + FirstResponder + + duplicateDocument: + id + + + duplicateDocument: + + duplicateDocument: + id + + + + IBUserSource + + + + + + 0 + IBCocoaFramework + YES + 3 + + {11, 11} + {10, 3} + + YES + +