diff --git a/iOXAudio.xcodeproj/project.pbxproj b/iOXAudio.xcodeproj/project.pbxproj new file mode 100755 index 0000000..555ec94 --- /dev/null +++ b/iOXAudio.xcodeproj/project.pbxproj @@ -0,0 +1,410 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 69348F8C1C627BA3002F515F /* CoreAudioKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 69348F8B1C627BA3002F515F /* CoreAudioKit.framework */; }; + 69348F8D1C627CEF002F515F /* AppKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DD4F7C0B13C30F9F00825C6E /* AppKit.framework */; }; + 69E8B0941C628B6E00F2165D /* in Resources */ = {isa = PBXBuildFile; fileRef = 69E8B0931C628B6E00F2165D /* */; }; + 69E8B0961C628B9400F2165D /* iOXAudio-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 69E8B0951C628B9400F2165D /* iOXAudio-Info.plist */; }; + 69E8B0991C628C0200F2165D /* Panel.xib in Resources */ = {isa = PBXBuildFile; fileRef = 69E8B0981C628C0200F2165D /* Panel.xib */; }; + 69E8B09B1C62906600F2165D /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 69E8B09A1C62906600F2165D /* Images.xcassets */; }; + DD4F7C0913C30F9F00825C6E /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DD4F7C0813C30F9F00825C6E /* Cocoa.framework */; }; + DD4F7C1513C30F9F00825C6E /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = DD4F7C1413C30F9F00825C6E /* main.m */; }; + DD4F7C1C13C30F9F00825C6E /* ApplicationDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = DD4F7C1B13C30F9F00825C6E /* ApplicationDelegate.m */; }; + DD4F7C1F13C30F9F00825C6E /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = DD4F7C1D13C30F9F00825C6E /* MainMenu.xib */; }; + DD4F7C3813C317A500825C6E /* MenubarController.m in Sources */ = {isa = PBXBuildFile; fileRef = DD4F7C3713C317A500825C6E /* MenubarController.m */; }; + DD4F7C3C13C3180800825C6E /* StatusItemView.m in Sources */ = {isa = PBXBuildFile; fileRef = DD4F7C3B13C3180800825C6E /* StatusItemView.m */; }; + DD4F7C3F13C318D600825C6E /* PanelController.m in Sources */ = {isa = PBXBuildFile; fileRef = DD4F7C3E13C318D600825C6E /* PanelController.m */; }; + DD4F7C4413C31BD200825C6E /* Panel.m in Sources */ = {isa = PBXBuildFile; fileRef = DD4F7C4313C31BD200825C6E /* Panel.m */; }; + DD4F7C4713C3208500825C6E /* BackgroundView.m in Sources */ = {isa = PBXBuildFile; fileRef = DD4F7C4613C3208500825C6E /* BackgroundView.m */; }; + DD4F7C4B13C322FA00825C6E /* Status.png in Resources */ = {isa = PBXBuildFile; fileRef = DD4F7C4913C322FA00825C6E /* Status.png */; }; + DD4F7C4C13C322FA00825C6E /* StatusHighlighted.png in Resources */ = {isa = PBXBuildFile; fileRef = DD4F7C4A13C322FA00825C6E /* StatusHighlighted.png */; }; + DDF4EFAC16C80A510044D141 /* Status@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DDF4EFAB16C80A510044D141 /* Status@2x.png */; }; + DDF4EFAE16C80AD30044D141 /* StatusHighlighted@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DDF4EFAD16C80AD30044D141 /* StatusHighlighted@2x.png */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 69348F8B1C627BA3002F515F /* CoreAudioKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudioKit.framework; path = System/Library/Frameworks/CoreAudioKit.framework; sourceTree = SDKROOT; }; + 69E8B0931C628B6E00F2165D /* */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = folder; name = ""; sourceTree = ""; }; + 69E8B0951C628B9400F2165D /* iOXAudio-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = "iOXAudio-Info.plist"; path = "iOXAudio/iOXAudio-Info.plist"; sourceTree = ""; }; + 69E8B0971C628BA600F2165D /* iOXAudio-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "iOXAudio-Prefix.pch"; sourceTree = ""; }; + 69E8B0981C628C0200F2165D /* Panel.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = Panel.xib; sourceTree = ""; }; + 69E8B09A1C62906600F2165D /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = iOXAudio/Images.xcassets; sourceTree = ""; }; + DD4F7C0413C30F9F00825C6E /* iOXAudio.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = iOXAudio.app; sourceTree = BUILT_PRODUCTS_DIR; }; + DD4F7C0813C30F9F00825C6E /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; + DD4F7C0B13C30F9F00825C6E /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; }; + DD4F7C0C13C30F9F00825C6E /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; }; + DD4F7C0D13C30F9F00825C6E /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + DD4F7C1413C30F9F00825C6E /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = main.m; path = iOXAudio/main.m; sourceTree = ""; }; + DD4F7C1A13C30F9F00825C6E /* ApplicationDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = ApplicationDelegate.h; path = iOXAudio/ApplicationDelegate.h; sourceTree = ""; }; + DD4F7C1B13C30F9F00825C6E /* ApplicationDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = ApplicationDelegate.m; path = iOXAudio/ApplicationDelegate.m; sourceTree = ""; }; + DD4F7C1E13C30F9F00825C6E /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/MainMenu.xib; sourceTree = ""; }; + DD4F7C3613C317A500825C6E /* MenubarController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MenubarController.h; path = iOXAudio/MenubarController.h; sourceTree = ""; }; + DD4F7C3713C317A500825C6E /* MenubarController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MenubarController.m; path = iOXAudio/MenubarController.m; sourceTree = ""; }; + DD4F7C3A13C3180800825C6E /* StatusItemView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = StatusItemView.h; path = iOXAudio/StatusItemView.h; sourceTree = ""; }; + DD4F7C3B13C3180800825C6E /* StatusItemView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = StatusItemView.m; path = iOXAudio/StatusItemView.m; sourceTree = ""; }; + DD4F7C3D13C318D600825C6E /* PanelController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PanelController.h; path = iOXAudio/PanelController.h; sourceTree = ""; }; + DD4F7C3E13C318D600825C6E /* PanelController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PanelController.m; path = iOXAudio/PanelController.m; sourceTree = ""; }; + DD4F7C4213C31BD200825C6E /* Panel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Panel.h; path = iOXAudio/Panel.h; sourceTree = ""; }; + DD4F7C4313C31BD200825C6E /* Panel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Panel.m; path = iOXAudio/Panel.m; sourceTree = ""; }; + DD4F7C4513C3208500825C6E /* BackgroundView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BackgroundView.h; path = iOXAudio/BackgroundView.h; sourceTree = ""; }; + DD4F7C4613C3208500825C6E /* BackgroundView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = BackgroundView.m; path = iOXAudio/BackgroundView.m; sourceTree = ""; }; + DD4F7C4913C322FA00825C6E /* Status.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Status.png; path = iOXAudio/Status.png; sourceTree = ""; }; + DD4F7C4A13C322FA00825C6E /* StatusHighlighted.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = StatusHighlighted.png; path = iOXAudio/StatusHighlighted.png; sourceTree = ""; }; + DDF4EFAB16C80A510044D141 /* Status@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Status@2x.png"; path = "iOXAudio/Status@2x.png"; sourceTree = ""; }; + DDF4EFAD16C80AD30044D141 /* StatusHighlighted@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "StatusHighlighted@2x.png"; path = "iOXAudio/StatusHighlighted@2x.png"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + DD4F7C0113C30F9F00825C6E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 69348F8D1C627CEF002F515F /* AppKit.framework in Frameworks */, + 69348F8C1C627BA3002F515F /* CoreAudioKit.framework in Frameworks */, + DD4F7C0913C30F9F00825C6E /* Cocoa.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + DD4F7BF913C30F9F00825C6E = { + isa = PBXGroup; + children = ( + 69E8B09A1C62906600F2165D /* Images.xcassets */, + DD4F7C0E13C30F9F00825C6E /* Sources */, + DD4F7C2813C3123E00825C6E /* User Interface */, + DD4F7C0713C30F9F00825C6E /* Frameworks */, + DD4F7C0513C30F9F00825C6E /* Products */, + 69E8B0951C628B9400F2165D /* iOXAudio-Info.plist */, + ); + sourceTree = ""; + }; + DD4F7C0513C30F9F00825C6E /* Products */ = { + isa = PBXGroup; + children = ( + DD4F7C0413C30F9F00825C6E /* iOXAudio.app */, + ); + name = Products; + sourceTree = ""; + }; + DD4F7C0713C30F9F00825C6E /* Frameworks */ = { + isa = PBXGroup; + children = ( + 69348F8B1C627BA3002F515F /* CoreAudioKit.framework */, + DD4F7C0B13C30F9F00825C6E /* AppKit.framework */, + DD4F7C0C13C30F9F00825C6E /* CoreData.framework */, + DD4F7C0D13C30F9F00825C6E /* Foundation.framework */, + DD4F7C0813C30F9F00825C6E /* Cocoa.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + DD4F7C0E13C30F9F00825C6E /* Sources */ = { + isa = PBXGroup; + children = ( + DD4F7C2613C311DF00825C6E /* Controllers */, + DD4F7C3913C317EC00825C6E /* Views */, + DD4F7C0F13C30F9F00825C6E /* Supporting Files */, + ); + name = Sources; + path = iOXAudio; + sourceTree = ""; + }; + DD4F7C0F13C30F9F00825C6E /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 69E8B0971C628BA600F2165D /* iOXAudio-Prefix.pch */, + DD4F7C1413C30F9F00825C6E /* main.m */, + ); + name = "Supporting Files"; + path = ..; + sourceTree = ""; + }; + DD4F7C2613C311DF00825C6E /* Controllers */ = { + isa = PBXGroup; + children = ( + DD4F7C1A13C30F9F00825C6E /* ApplicationDelegate.h */, + DD4F7C1B13C30F9F00825C6E /* ApplicationDelegate.m */, + DD4F7C3613C317A500825C6E /* MenubarController.h */, + DD4F7C3713C317A500825C6E /* MenubarController.m */, + DD4F7C3D13C318D600825C6E /* PanelController.h */, + DD4F7C3E13C318D600825C6E /* PanelController.m */, + ); + name = Controllers; + path = ..; + sourceTree = ""; + }; + DD4F7C2813C3123E00825C6E /* User Interface */ = { + isa = PBXGroup; + children = ( + DD4F7C4813C322D800825C6E /* Graphics */, + DD4F7C2913C3124300825C6E /* XIBs */, + ); + name = "User Interface"; + path = iOXAudio; + sourceTree = ""; + }; + DD4F7C2913C3124300825C6E /* XIBs */ = { + isa = PBXGroup; + children = ( + 69E8B0931C628B6E00F2165D /* */, + 69E8B0981C628C0200F2165D /* Panel.xib */, + DD4F7C1D13C30F9F00825C6E /* MainMenu.xib */, + ); + name = XIBs; + path = iOXAudio; + sourceTree = SOURCE_ROOT; + }; + DD4F7C3913C317EC00825C6E /* Views */ = { + isa = PBXGroup; + children = ( + DD4F7C4213C31BD200825C6E /* Panel.h */, + DD4F7C4313C31BD200825C6E /* Panel.m */, + DD4F7C3A13C3180800825C6E /* StatusItemView.h */, + DD4F7C3B13C3180800825C6E /* StatusItemView.m */, + DD4F7C4513C3208500825C6E /* BackgroundView.h */, + DD4F7C4613C3208500825C6E /* BackgroundView.m */, + ); + name = Views; + path = ..; + sourceTree = ""; + }; + DD4F7C4813C322D800825C6E /* Graphics */ = { + isa = PBXGroup; + children = ( + DD4F7C4913C322FA00825C6E /* Status.png */, + DDF4EFAB16C80A510044D141 /* Status@2x.png */, + DD4F7C4A13C322FA00825C6E /* StatusHighlighted.png */, + DDF4EFAD16C80AD30044D141 /* StatusHighlighted@2x.png */, + ); + name = Graphics; + path = ..; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + DD4F7C0313C30F9F00825C6E /* iOXAudio */ = { + isa = PBXNativeTarget; + buildConfigurationList = DD4F7C2213C30F9F00825C6E /* Build configuration list for PBXNativeTarget "iOXAudio" */; + buildPhases = ( + DD4F7C0013C30F9F00825C6E /* Sources */, + DD4F7C0113C30F9F00825C6E /* Frameworks */, + DD4F7C0213C30F9F00825C6E /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = iOXAudio; + productName = Popup; + productReference = DD4F7C0413C30F9F00825C6E /* iOXAudio.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + DD4F7BFB13C30F9F00825C6E /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0610; + TargetAttributes = { + DD4F7C0313C30F9F00825C6E = { + DevelopmentTeam = VEESE9857L; + }; + }; + }; + buildConfigurationList = DD4F7BFE13C30F9F00825C6E /* Build configuration list for PBXProject "iOXAudio" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = DD4F7BF913C30F9F00825C6E; + productRefGroup = DD4F7C0513C30F9F00825C6E /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + DD4F7C0313C30F9F00825C6E /* iOXAudio */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + DD4F7C0213C30F9F00825C6E /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 69E8B09B1C62906600F2165D /* Images.xcassets in Resources */, + 69E8B0941C628B6E00F2165D /* in Resources */, + DD4F7C1F13C30F9F00825C6E /* MainMenu.xib in Resources */, + 69E8B0991C628C0200F2165D /* Panel.xib in Resources */, + 69E8B0961C628B9400F2165D /* iOXAudio-Info.plist in Resources */, + DD4F7C4B13C322FA00825C6E /* Status.png in Resources */, + DD4F7C4C13C322FA00825C6E /* StatusHighlighted.png in Resources */, + DDF4EFAC16C80A510044D141 /* Status@2x.png in Resources */, + DDF4EFAE16C80AD30044D141 /* StatusHighlighted@2x.png in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + DD4F7C0013C30F9F00825C6E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + DD4F7C1513C30F9F00825C6E /* main.m in Sources */, + DD4F7C1C13C30F9F00825C6E /* ApplicationDelegate.m in Sources */, + DD4F7C3813C317A500825C6E /* MenubarController.m in Sources */, + DD4F7C3C13C3180800825C6E /* StatusItemView.m in Sources */, + DD4F7C3F13C318D600825C6E /* PanelController.m in Sources */, + DD4F7C4413C31BD200825C6E /* Panel.m in Sources */, + DD4F7C4713C3208500825C6E /* BackgroundView.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + DD4F7C1D13C30F9F00825C6E /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + DD4F7C1E13C30F9F00825C6E /* en */, + ); + name = MainMenu.xib; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + DD4F7C2013C30F9F00825C6E /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + 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_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.11; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + }; + name = Debug; + }; + DD4F7C2113C30F9F00825C6E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.11; + SDKROOT = macosx; + }; + name = Release; + }; + DD4F7C2313C30F9F00825C6E /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_OBJC_ARC = YES; + CODE_SIGN_IDENTITY = "Developer ID Application"; + COMBINE_HIDPI_IMAGES = YES; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "iOXAudio/iOXAudio-Prefix.pch"; + INFOPLIST_FILE = "iOXAudio/iOXAudio-Info.plist"; + PRODUCT_BUNDLE_IDENTIFIER = com.sieren.ioxaudio; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = app; + }; + name = Debug; + }; + DD4F7C2413C30F9F00825C6E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_OBJC_ARC = YES; + CODE_SIGN_IDENTITY = "Developer ID Application"; + COMBINE_HIDPI_IMAGES = YES; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "iOXAudio/iOXAudio-Prefix.pch"; + INFOPLIST_FILE = "iOXAudio/iOXAudio-Info.plist"; + PRODUCT_BUNDLE_IDENTIFIER = com.sieren.ioxaudio; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = app; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + DD4F7BFE13C30F9F00825C6E /* Build configuration list for PBXProject "iOXAudio" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + DD4F7C2013C30F9F00825C6E /* Debug */, + DD4F7C2113C30F9F00825C6E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + DD4F7C2213C30F9F00825C6E /* Build configuration list for PBXNativeTarget "iOXAudio" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + DD4F7C2313C30F9F00825C6E /* Debug */, + DD4F7C2413C30F9F00825C6E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = DD4F7BFB13C30F9F00825C6E /* Project object */; +} diff --git a/iOXAudio.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/iOXAudio.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/iOXAudio.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/iOXAudio.xcodeproj/project.xcworkspace/xcuserdata/sierenmusic.xcuserdatad/UserInterfaceState.xcuserstate b/iOXAudio.xcodeproj/project.xcworkspace/xcuserdata/sierenmusic.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000..d17062f Binary files /dev/null and b/iOXAudio.xcodeproj/project.xcworkspace/xcuserdata/sierenmusic.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/iOXAudio.xcodeproj/xcuserdata/sierenmusic.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/iOXAudio.xcodeproj/xcuserdata/sierenmusic.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist new file mode 100644 index 0000000..fe2b454 --- /dev/null +++ b/iOXAudio.xcodeproj/xcuserdata/sierenmusic.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -0,0 +1,5 @@ + + + diff --git a/iOXAudio.xcodeproj/xcuserdata/sierenmusic.xcuserdatad/xcschemes/Popup.xcscheme b/iOXAudio.xcodeproj/xcuserdata/sierenmusic.xcuserdatad/xcschemes/Popup.xcscheme new file mode 100644 index 0000000..ccb0b8f --- /dev/null +++ b/iOXAudio.xcodeproj/xcuserdata/sierenmusic.xcuserdatad/xcschemes/Popup.xcscheme @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iOXAudio.xcodeproj/xcuserdata/sierenmusic.xcuserdatad/xcschemes/iOXAudio.xcscheme b/iOXAudio.xcodeproj/xcuserdata/sierenmusic.xcuserdatad/xcschemes/iOXAudio.xcscheme new file mode 100644 index 0000000..b5ef23f --- /dev/null +++ b/iOXAudio.xcodeproj/xcuserdata/sierenmusic.xcuserdatad/xcschemes/iOXAudio.xcscheme @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iOXAudio.xcodeproj/xcuserdata/sierenmusic.xcuserdatad/xcschemes/xcschememanagement.plist b/iOXAudio.xcodeproj/xcuserdata/sierenmusic.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..b1f0072 --- /dev/null +++ b/iOXAudio.xcodeproj/xcuserdata/sierenmusic.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,27 @@ + + + + + SchemeUserState + + Popup.xcscheme + + orderHint + 0 + + iOXAudio.xcscheme + + orderHint + 1 + + + SuppressBuildableAutocreation + + DD4F7C0313C30F9F00825C6E + + primary + + + + + diff --git a/iOXAudio.xcworkspace/contents.xcworkspacedata b/iOXAudio.xcworkspace/contents.xcworkspacedata new file mode 100755 index 0000000..71b2903 --- /dev/null +++ b/iOXAudio.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/iOXAudio.xcworkspace/xcuserdata/sierenmusic.xcuserdatad/UserInterfaceState.xcuserstate b/iOXAudio.xcworkspace/xcuserdata/sierenmusic.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000..cda3c47 Binary files /dev/null and b/iOXAudio.xcworkspace/xcuserdata/sierenmusic.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/iOXAudio/ApplicationDelegate.h b/iOXAudio/ApplicationDelegate.h new file mode 100755 index 0000000..cb51ec5 --- /dev/null +++ b/iOXAudio/ApplicationDelegate.h @@ -0,0 +1,11 @@ +#import "MenubarController.h" +#import "PanelController.h" + +@interface ApplicationDelegate : NSObject + +@property (nonatomic, strong) MenubarController *menubarController; +@property (nonatomic, strong, readonly) PanelController *panelController; + +- (IBAction)togglePanel:(id)sender; + +@end diff --git a/iOXAudio/ApplicationDelegate.m b/iOXAudio/ApplicationDelegate.m new file mode 100755 index 0000000..d58540c --- /dev/null +++ b/iOXAudio/ApplicationDelegate.m @@ -0,0 +1,70 @@ +#import "ApplicationDelegate.h" + +@implementation ApplicationDelegate + +@synthesize panelController = _panelController; +@synthesize menubarController = _menubarController; + +#pragma mark - + +- (void)dealloc +{ + [_panelController removeObserver:self forKeyPath:@"hasActivePanel"]; +} + +#pragma mark - + +void *kContextActivePanel = &kContextActivePanel; + +- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context +{ + if (context == kContextActivePanel) { + self.menubarController.hasActiveIcon = self.panelController.hasActivePanel; + } + else { + [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; + } +} + +#pragma mark - NSApplicationDelegate + +- (void)applicationDidFinishLaunching:(NSNotification *)notification +{ + // Install icon into the menu bar + self.menubarController = [[MenubarController alloc] init]; +} + +- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender +{ + // Explicitly remove the icon from the menu bar + self.menubarController = nil; + return NSTerminateNow; +} + +#pragma mark - Actions + +- (IBAction)togglePanel:(id)sender +{ + self.menubarController.hasActiveIcon = !self.menubarController.hasActiveIcon; + self.panelController.hasActivePanel = self.menubarController.hasActiveIcon; +} + +#pragma mark - Public accessors + +- (PanelController *)panelController +{ + if (_panelController == nil) { + _panelController = [[PanelController alloc] initWithDelegate:self]; + [_panelController addObserver:self forKeyPath:@"hasActivePanel" options:0 context:kContextActivePanel]; + } + return _panelController; +} + +#pragma mark - PanelControllerDelegate + +- (StatusItemView *)statusItemViewForPanelController:(PanelController *)controller +{ + return self.menubarController.statusItemView; +} + +@end diff --git a/iOXAudio/BackgroundView.h b/iOXAudio/BackgroundView.h new file mode 100755 index 0000000..c93aedf --- /dev/null +++ b/iOXAudio/BackgroundView.h @@ -0,0 +1,11 @@ +#define ARROW_WIDTH 12 +#define ARROW_HEIGHT 8 + +@interface BackgroundView : NSView +{ + NSInteger _arrowX; +} + +@property (nonatomic, assign) NSInteger arrowX; + +@end diff --git a/iOXAudio/BackgroundView.m b/iOXAudio/BackgroundView.m new file mode 100755 index 0000000..f7e630a --- /dev/null +++ b/iOXAudio/BackgroundView.m @@ -0,0 +1,77 @@ +#import "BackgroundView.h" + +#define FILL_OPACITY 0.9f +#define STROKE_OPACITY 1.0f + +#define LINE_THICKNESS 1.0f +#define CORNER_RADIUS 6.0f + +#define SEARCH_INSET 10.0f + +#pragma mark - + +@implementation BackgroundView + +@synthesize arrowX = _arrowX; + +#pragma mark - + +- (void)drawRect:(NSRect)dirtyRect +{ + NSRect contentRect = NSInsetRect([self bounds], LINE_THICKNESS, LINE_THICKNESS); + NSBezierPath *path = [NSBezierPath bezierPath]; + + [path moveToPoint:NSMakePoint(_arrowX, NSMaxY(contentRect))]; + [path lineToPoint:NSMakePoint(_arrowX + ARROW_WIDTH / 2, NSMaxY(contentRect) - ARROW_HEIGHT)]; + [path lineToPoint:NSMakePoint(NSMaxX(contentRect) - CORNER_RADIUS, NSMaxY(contentRect) - ARROW_HEIGHT)]; + + NSPoint topRightCorner = NSMakePoint(NSMaxX(contentRect), NSMaxY(contentRect) - ARROW_HEIGHT); + [path curveToPoint:NSMakePoint(NSMaxX(contentRect), NSMaxY(contentRect) - ARROW_HEIGHT - CORNER_RADIUS) + controlPoint1:topRightCorner controlPoint2:topRightCorner]; + + [path lineToPoint:NSMakePoint(NSMaxX(contentRect), NSMinY(contentRect) + CORNER_RADIUS)]; + + NSPoint bottomRightCorner = NSMakePoint(NSMaxX(contentRect), NSMinY(contentRect)); + [path curveToPoint:NSMakePoint(NSMaxX(contentRect) - CORNER_RADIUS, NSMinY(contentRect)) + controlPoint1:bottomRightCorner controlPoint2:bottomRightCorner]; + + [path lineToPoint:NSMakePoint(NSMinX(contentRect) + CORNER_RADIUS, NSMinY(contentRect))]; + + [path curveToPoint:NSMakePoint(NSMinX(contentRect), NSMinY(contentRect) + CORNER_RADIUS) + controlPoint1:contentRect.origin controlPoint2:contentRect.origin]; + + [path lineToPoint:NSMakePoint(NSMinX(contentRect), NSMaxY(contentRect) - ARROW_HEIGHT - CORNER_RADIUS)]; + + NSPoint topLeftCorner = NSMakePoint(NSMinX(contentRect), NSMaxY(contentRect) - ARROW_HEIGHT); + [path curveToPoint:NSMakePoint(NSMinX(contentRect) + CORNER_RADIUS, NSMaxY(contentRect) - ARROW_HEIGHT) + controlPoint1:topLeftCorner controlPoint2:topLeftCorner]; + + [path lineToPoint:NSMakePoint(_arrowX - ARROW_WIDTH / 2, NSMaxY(contentRect) - ARROW_HEIGHT)]; + [path closePath]; + + [[NSColor colorWithDeviceWhite:1 alpha:FILL_OPACITY] setFill]; + [path fill]; + + [NSGraphicsContext saveGraphicsState]; + + NSBezierPath *clip = [NSBezierPath bezierPathWithRect:[self bounds]]; + [clip appendBezierPath:path]; + [clip addClip]; + + [path setLineWidth:LINE_THICKNESS * 2]; + [[NSColor whiteColor] setStroke]; + [path stroke]; + + [NSGraphicsContext restoreGraphicsState]; +} + +#pragma mark - +#pragma mark Public accessors + +- (void)setArrowX:(NSInteger)value +{ + _arrowX = value; + [self setNeedsDisplay:YES]; +} + +@end diff --git a/iOXAudio/Images.xcassets/AppIcon.appiconset/Contents.json b/iOXAudio/Images.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..9a9699a --- /dev/null +++ b/iOXAudio/Images.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,68 @@ +{ + "images" : [ + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "icon_16x16.png", + "scale" : "1x" + }, + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "icon_32x32.png", + "scale" : "2x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "icon_32x32-1.png", + "scale" : "1x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "icon_32x32@2x.png", + "scale" : "2x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "icon_128x128.png", + "scale" : "1x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "icon_256x256.png", + "scale" : "2x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "icon_256x256-1.png", + "scale" : "1x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "icon_512x512.png", + "scale" : "2x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "icon_512x512-1.png", + "scale" : "1x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "icon_512x512@2x.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/iOXAudio/Images.xcassets/AppIcon.appiconset/icon_128x128.png b/iOXAudio/Images.xcassets/AppIcon.appiconset/icon_128x128.png new file mode 100644 index 0000000..f3a0e6a Binary files /dev/null and b/iOXAudio/Images.xcassets/AppIcon.appiconset/icon_128x128.png differ diff --git a/iOXAudio/Images.xcassets/AppIcon.appiconset/icon_16x16.png b/iOXAudio/Images.xcassets/AppIcon.appiconset/icon_16x16.png new file mode 100644 index 0000000..6781f15 Binary files /dev/null and b/iOXAudio/Images.xcassets/AppIcon.appiconset/icon_16x16.png differ diff --git a/iOXAudio/Images.xcassets/AppIcon.appiconset/icon_256x256-1.png b/iOXAudio/Images.xcassets/AppIcon.appiconset/icon_256x256-1.png new file mode 100644 index 0000000..6cf5210 Binary files /dev/null and b/iOXAudio/Images.xcassets/AppIcon.appiconset/icon_256x256-1.png differ diff --git a/iOXAudio/Images.xcassets/AppIcon.appiconset/icon_256x256.png b/iOXAudio/Images.xcassets/AppIcon.appiconset/icon_256x256.png new file mode 100644 index 0000000..39d0a57 Binary files /dev/null and b/iOXAudio/Images.xcassets/AppIcon.appiconset/icon_256x256.png differ diff --git a/iOXAudio/Images.xcassets/AppIcon.appiconset/icon_32x32-1.png b/iOXAudio/Images.xcassets/AppIcon.appiconset/icon_32x32-1.png new file mode 100644 index 0000000..0be87c3 Binary files /dev/null and b/iOXAudio/Images.xcassets/AppIcon.appiconset/icon_32x32-1.png differ diff --git a/iOXAudio/Images.xcassets/AppIcon.appiconset/icon_32x32.png b/iOXAudio/Images.xcassets/AppIcon.appiconset/icon_32x32.png new file mode 100644 index 0000000..0caa43f Binary files /dev/null and b/iOXAudio/Images.xcassets/AppIcon.appiconset/icon_32x32.png differ diff --git a/iOXAudio/Images.xcassets/AppIcon.appiconset/icon_32x32@2x.png b/iOXAudio/Images.xcassets/AppIcon.appiconset/icon_32x32@2x.png new file mode 100644 index 0000000..3ce3c18 Binary files /dev/null and b/iOXAudio/Images.xcassets/AppIcon.appiconset/icon_32x32@2x.png differ diff --git a/iOXAudio/Images.xcassets/AppIcon.appiconset/icon_512x512-1.png b/iOXAudio/Images.xcassets/AppIcon.appiconset/icon_512x512-1.png new file mode 100644 index 0000000..145c245 Binary files /dev/null and b/iOXAudio/Images.xcassets/AppIcon.appiconset/icon_512x512-1.png differ diff --git a/iOXAudio/Images.xcassets/AppIcon.appiconset/icon_512x512.png b/iOXAudio/Images.xcassets/AppIcon.appiconset/icon_512x512.png new file mode 100644 index 0000000..ebdb623 Binary files /dev/null and b/iOXAudio/Images.xcassets/AppIcon.appiconset/icon_512x512.png differ diff --git a/iOXAudio/Images.xcassets/AppIcon.appiconset/icon_512x512@2x.png b/iOXAudio/Images.xcassets/AppIcon.appiconset/icon_512x512@2x.png new file mode 100644 index 0000000..c75a251 Binary files /dev/null and b/iOXAudio/Images.xcassets/AppIcon.appiconset/icon_512x512@2x.png differ diff --git a/iOXAudio/MenubarController.h b/iOXAudio/MenubarController.h new file mode 100755 index 0000000..22c912d --- /dev/null +++ b/iOXAudio/MenubarController.h @@ -0,0 +1,16 @@ +#define STATUS_ITEM_VIEW_WIDTH 24.0 + +#pragma mark - + +@class StatusItemView; + +@interface MenubarController : NSObject { +@private + StatusItemView *_statusItemView; +} + +@property (nonatomic) BOOL hasActiveIcon; +@property (nonatomic, strong, readonly) NSStatusItem *statusItem; +@property (nonatomic, strong, readonly) StatusItemView *statusItemView; + +@end diff --git a/iOXAudio/MenubarController.m b/iOXAudio/MenubarController.m new file mode 100755 index 0000000..4b7c4dc --- /dev/null +++ b/iOXAudio/MenubarController.m @@ -0,0 +1,50 @@ +#import "MenubarController.h" +#import "StatusItemView.h" + +@implementation MenubarController + +@synthesize statusItemView = _statusItemView; + +#pragma mark - + +- (id)init +{ + self = [super init]; + if (self != nil) + { + // Install status item into the menu bar + NSStatusItem *statusItem = [[NSStatusBar systemStatusBar] statusItemWithLength:STATUS_ITEM_VIEW_WIDTH]; + _statusItemView = [[StatusItemView alloc] initWithStatusItem:statusItem]; + _statusItemView.image = [NSImage imageNamed:@"Status"]; + _statusItemView.alternateImage = [NSImage imageNamed:@"StatusHighlighted"]; + _statusItemView.action = @selector(togglePanel:); + } + return self; +} + +- (void)dealloc +{ + [[NSStatusBar systemStatusBar] removeStatusItem:self.statusItem]; +} + +#pragma mark - +#pragma mark Public accessors + +- (NSStatusItem *)statusItem +{ + return self.statusItemView.statusItem; +} + +#pragma mark - + +- (BOOL)hasActiveIcon +{ + return self.statusItemView.isHighlighted; +} + +- (void)setHasActiveIcon:(BOOL)flag +{ + self.statusItemView.isHighlighted = flag; +} + +@end diff --git a/iOXAudio/Panel.h b/iOXAudio/Panel.h new file mode 100755 index 0000000..6439fae --- /dev/null +++ b/iOXAudio/Panel.h @@ -0,0 +1,2 @@ +@interface Panel : NSPanel +@end diff --git a/iOXAudio/Panel.m b/iOXAudio/Panel.m new file mode 100755 index 0000000..75c6257 --- /dev/null +++ b/iOXAudio/Panel.m @@ -0,0 +1,10 @@ +#import "Panel.h" + +@implementation Panel + +- (BOOL)canBecomeKeyWindow; +{ + return YES; // Allow Search field to become the first responder +} + +@end diff --git a/iOXAudio/Panel.xib b/iOXAudio/Panel.xib new file mode 100755 index 0000000..e10d139 --- /dev/null +++ b/iOXAudio/Panel.xib @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iOXAudio/PanelController.h b/iOXAudio/PanelController.h new file mode 100755 index 0000000..6b14e0b --- /dev/null +++ b/iOXAudio/PanelController.h @@ -0,0 +1,38 @@ +#import "BackgroundView.h" +#import "StatusItemView.h" +#import "CoreAudioKit/CoreAudioKit.h" +#import "AppKit/AppKit.h" +@class PanelController; + +@protocol PanelControllerDelegate + +@optional + +- (StatusItemView *)statusItemViewForPanelController:(PanelController *)controller; + +@end + +#pragma mark - + +@interface PanelController : NSWindowController +{ + BOOL _hasActivePanel; + __unsafe_unretained BackgroundView *_backgroundView; + __unsafe_unretained id _delegate; + CAInterDeviceAudioViewController *_audioDeviceViewController; +} + +@property (nonatomic, unsafe_unretained) IBOutlet BackgroundView *backgroundView; +@property (nonatomic, strong) IBOutlet CAInterDeviceAudioViewController* audioDeviceViewController; +@property (nonatomic, strong) IBOutlet NSView* audioDeviceView; + +@property (nonatomic) BOOL hasActivePanel; +@property (nonatomic, unsafe_unretained, readonly) id delegate; +@property (nonatomic, strong) IBOutlet NSTextField *copyrightField; + +- (id)initWithDelegate:(id)delegate; + +- (void)openPanel; +- (void)closePanel; + +@end diff --git a/iOXAudio/PanelController.m b/iOXAudio/PanelController.m new file mode 100755 index 0000000..c0fbbc6 --- /dev/null +++ b/iOXAudio/PanelController.m @@ -0,0 +1,192 @@ +#import "PanelController.h" +#import "BackgroundView.h" +#import "StatusItemView.h" +#import "MenubarController.h" + +#define OPEN_DURATION .0 +#define CLOSE_DURATION .1 + +#define SEARCH_INSET 0 + +#define POPUP_HEIGHT 220 +#define PANEL_WIDTH 562 +#define MENU_ANIMATION_DURATION .1 + +#pragma mark - + +@implementation PanelController + +@synthesize backgroundView = _backgroundView; +@synthesize delegate = _delegate; +@synthesize copyrightField = _copyrightField; + + +#pragma mark - + +- (id)initWithDelegate:(id)delegate +{ + self = [super initWithWindowNibName:@"Panel"]; + if (self != nil) + { + _delegate = delegate; + self.audioDeviceViewController = [CAInterDeviceAudioViewController new]; + } + return self; +} + +-(IBAction)quitApp:(id)sender +{ + [NSApp terminate:self]; +} + +#pragma mark - + +- (void)awakeFromNib +{ + [super awakeFromNib]; + [self.audioDeviceView addSubview:self.audioDeviceViewController.view]; + NSString *appVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"]; + NSString *appName = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleDisplayName"]; + self.copyrightField.stringValue = [NSString stringWithFormat:@"%@ %@ (c) Matthias Frick 2016", appName, appVersion]; + // Make a fully skinned panel + NSPanel *panel = (id)[self window]; + [panel setAcceptsMouseMovedEvents:YES]; + [panel setLevel:NSPopUpMenuWindowLevel]; + [panel setOpaque:NO]; + [panel setBackgroundColor:[NSColor clearColor]]; +} + +#pragma mark - Public accessors + +- (BOOL)hasActivePanel +{ + return _hasActivePanel; +} + +- (void)setHasActivePanel:(BOOL)flag +{ + if (_hasActivePanel != flag) + { + _hasActivePanel = flag; + + if (_hasActivePanel) + { + [self openPanel]; + } + else + { + [self closePanel]; + } + } +} + +- (IBAction)openLink:(id)sender +{ + [[NSWorkspace sharedWorkspace] openURL:[NSURL + URLWithString:@"https://github.com/sieren/ioxaudio"]]; +} + +#pragma mark - NSWindowDelegate + +- (void)windowWillClose:(NSNotification *)notification +{ + self.hasActivePanel = NO; +} + +- (void)windowDidResignKey:(NSNotification *)notification; +{ + if ([[self window] isVisible]) + { + self.hasActivePanel = NO; + } +} + + +#pragma mark - Public methods + +- (NSRect)statusRectForWindow:(NSWindow *)window +{ + NSRect screenRect = [[[NSScreen screens] objectAtIndex:0] frame]; + NSRect statusRect = NSZeroRect; + + StatusItemView *statusItemView = nil; + if ([self.delegate respondsToSelector:@selector(statusItemViewForPanelController:)]) + { + statusItemView = [self.delegate statusItemViewForPanelController:self]; + } + + if (statusItemView) + { + statusRect = statusItemView.globalRect; + statusRect.origin.y = NSMinY(statusRect) - NSHeight(statusRect); + } + else + { + statusRect.size = NSMakeSize(STATUS_ITEM_VIEW_WIDTH, [[NSStatusBar systemStatusBar] thickness]); + statusRect.origin.x = roundf((NSWidth(screenRect) - NSWidth(statusRect)) / 2); + statusRect.origin.y = NSHeight(screenRect) - NSHeight(statusRect) * 2; + } + return statusRect; +} + +- (void)openPanel +{ + NSWindow *panel = [self window]; + + NSRect screenRect = [[[NSScreen screens] objectAtIndex:0] frame]; + NSRect statusRect = [self statusRectForWindow:panel]; + + NSRect panelRect = [panel frame]; + panelRect.size.width = PANEL_WIDTH; + panelRect.size.height = POPUP_HEIGHT; + panelRect.origin.x = roundf(NSMidX(statusRect) - NSWidth(panelRect) / 2); + panelRect.origin.y = NSMaxY(statusRect) - NSHeight(panelRect); + + if (NSMaxX(panelRect) > (NSMaxX(screenRect) - ARROW_HEIGHT)) + panelRect.origin.x -= NSMaxX(panelRect) - (NSMaxX(screenRect) - ARROW_HEIGHT); + + [NSApp activateIgnoringOtherApps:NO]; + [panel setAlphaValue:0]; + [panel setFrame:statusRect display:YES]; + [panel makeKeyAndOrderFront:nil]; + + NSTimeInterval openDuration = OPEN_DURATION; + + NSEvent *currentEvent = [NSApp currentEvent]; + if ([currentEvent type] == NSLeftMouseDown) + { + NSUInteger clearFlags = ([currentEvent modifierFlags] & NSDeviceIndependentModifierFlagsMask); + BOOL shiftPressed = (clearFlags == NSShiftKeyMask); + BOOL shiftOptionPressed = (clearFlags == (NSShiftKeyMask | NSAlternateKeyMask)); + if (shiftPressed || shiftOptionPressed) + { + openDuration *= 10; + + if (shiftOptionPressed) + NSLog(@"Icon is at %@\n\tMenu is on screen %@\n\tWill be animated to %@", + NSStringFromRect(statusRect), NSStringFromRect(screenRect), NSStringFromRect(panelRect)); + } + } + + [NSAnimationContext beginGrouping]; + [[NSAnimationContext currentContext] setDuration:openDuration]; + [[panel animator] setFrame:panelRect display:YES]; + [[panel animator] setAlphaValue:1]; + [NSAnimationContext endGrouping]; + +} + +- (void)closePanel +{ + [NSAnimationContext beginGrouping]; + [[NSAnimationContext currentContext] setDuration:CLOSE_DURATION]; + [[[self window] animator] setAlphaValue:0]; + [NSAnimationContext endGrouping]; + + dispatch_after(dispatch_walltime(NULL, NSEC_PER_SEC * CLOSE_DURATION * 2), dispatch_get_main_queue(), ^{ + + [self.window orderOut:nil]; + }); +} + +@end diff --git a/iOXAudio/Status.png b/iOXAudio/Status.png new file mode 100755 index 0000000..ff6dd93 Binary files /dev/null and b/iOXAudio/Status.png differ diff --git a/iOXAudio/Status@2x.png b/iOXAudio/Status@2x.png new file mode 100755 index 0000000..e49a4c3 Binary files /dev/null and b/iOXAudio/Status@2x.png differ diff --git a/iOXAudio/StatusHighlighted.png b/iOXAudio/StatusHighlighted.png new file mode 100755 index 0000000..9994959 Binary files /dev/null and b/iOXAudio/StatusHighlighted.png differ diff --git a/iOXAudio/StatusHighlighted@2x.png b/iOXAudio/StatusHighlighted@2x.png new file mode 100755 index 0000000..ef28b39 Binary files /dev/null and b/iOXAudio/StatusHighlighted@2x.png differ diff --git a/iOXAudio/StatusItemView.h b/iOXAudio/StatusItemView.h new file mode 100755 index 0000000..c25fc62 --- /dev/null +++ b/iOXAudio/StatusItemView.h @@ -0,0 +1,21 @@ +@interface StatusItemView : NSView { +@private + NSImage *_image; + NSImage *_alternateImage; + NSStatusItem *_statusItem; + BOOL _isHighlighted; + SEL _action; + __unsafe_unretained id _target; +} + +- (id)initWithStatusItem:(NSStatusItem *)statusItem; + +@property (nonatomic, strong, readonly) NSStatusItem *statusItem; +@property (nonatomic, strong) NSImage *image; +@property (nonatomic, strong) NSImage *alternateImage; +@property (nonatomic, setter = setHighlighted:) BOOL isHighlighted; +@property (nonatomic, readonly) NSRect globalRect; +@property (nonatomic) SEL action; +@property (nonatomic, unsafe_unretained) id target; + +@end diff --git a/iOXAudio/StatusItemView.m b/iOXAudio/StatusItemView.m new file mode 100755 index 0000000..6e3a32e --- /dev/null +++ b/iOXAudio/StatusItemView.m @@ -0,0 +1,102 @@ +#import "StatusItemView.h" + +@implementation StatusItemView + +@synthesize statusItem = _statusItem; +@synthesize image = _image; +@synthesize alternateImage = _alternateImage; +@synthesize isHighlighted = _isHighlighted; +@synthesize action = _action; +@synthesize target = _target; + +#pragma mark - + +- (id)initWithStatusItem:(NSStatusItem *)statusItem +{ + CGFloat itemWidth = [statusItem length]; + CGFloat itemHeight = [[NSStatusBar systemStatusBar] thickness]; + NSRect itemRect = NSMakeRect(0.0, 0.0, itemWidth, itemHeight); + self = [super initWithFrame:itemRect]; + + if (self != nil) { + _statusItem = statusItem; + _statusItem.view = self; + } + return self; +} + + +#pragma mark - + +- (void)drawRect:(NSRect)dirtyRect +{ + // Set up dark mode for icon + if ([[[NSUserDefaults standardUserDefaults] stringForKey:@"AppleInterfaceStyle"] isEqual: @"Dark"]) + { + self.image = [NSImage imageNamed:@"StatusHighlighted"]; + } + else + { + if (self.isHighlighted) + self.image = [NSImage imageNamed:@"StatusHighlighted"]; + else + self.image = [NSImage imageNamed:@"Status"]; + } + [self.statusItem drawStatusBarBackgroundInRect:dirtyRect withHighlight:self.isHighlighted]; + + NSImage *icon = self.image; + NSSize iconSize = [icon size]; + NSRect bounds = self.bounds; + CGFloat iconX = roundf((NSWidth(bounds) - iconSize.width) / 2); + CGFloat iconY = roundf((NSHeight(bounds) - iconSize.height) / 2); + NSPoint iconPoint = NSMakePoint(iconX, iconY); + + [icon drawAtPoint:iconPoint fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0]; +} + +#pragma mark - +#pragma mark Mouse tracking + +- (void)mouseDown:(NSEvent *)theEvent +{ + [NSApp sendAction:self.action to:self.target from:self]; +} + +#pragma mark - +#pragma mark Accessors + +- (void)setHighlighted:(BOOL)newFlag +{ + if (_isHighlighted == newFlag) return; + _isHighlighted = newFlag; + [self setNeedsDisplay:YES]; +} + +#pragma mark - + +- (void)setImage:(NSImage *)newImage +{ + if (_image != newImage) { + _image = newImage; + [self setNeedsDisplay:YES]; + } +} + +- (void)setAlternateImage:(NSImage *)newImage +{ + if (_alternateImage != newImage) { + _alternateImage = newImage; + if (self.isHighlighted) { + [self setNeedsDisplay:YES]; + } + } +} + +#pragma mark - + +- (NSRect)globalRect +{ + NSRect frame = [self frame]; + return [self.window convertRectToScreen:frame]; +} +@end diff --git a/iOXAudio/en.lproj/MainMenu.xib b/iOXAudio/en.lproj/MainMenu.xib new file mode 100755 index 0000000..81e0361 --- /dev/null +++ b/iOXAudio/en.lproj/MainMenu.xib @@ -0,0 +1,3454 @@ + + + + 1070 + 11A511 + 1615 + 1138 + 566.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 1615 + + + YES + NSMenu + NSMenuItem + NSCustomObject + + + YES + com.apple.InterfaceBuilder.CocoaPlugin + + + YES + + YES + + + + + YES + + NSApplication + + + FirstResponder + + + NSApplication + + + AMainMenu + + YES + + + Popup + + 1048576 + 2147483647 + + NSImage + NSMenuCheckmark + + + NSImage + NSMenuMixedState + + submenuAction: + + Popup + + YES + + + About Popup + + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Preferences… + , + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Services + + 1048576 + 2147483647 + + + submenuAction: + + Services + + YES + + _NSServicesMenu + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Hide Popup + h + 1048576 + 2147483647 + + + + + + Hide Others + h + 1572864 + 2147483647 + + + + + + Show All + + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Quit Popup + q + 1048576 + 2147483647 + + + + + _NSAppleMenu + + + + + File + + 1048576 + 2147483647 + + + submenuAction: + + File + + YES + + + New + n + 1048576 + 2147483647 + + + + + + Open… + o + 1048576 + 2147483647 + + + + + + Open Recent + + 1048576 + 2147483647 + + + submenuAction: + + Open Recent + + YES + + + Clear Menu + + 1048576 + 2147483647 + + + + + _NSRecentDocumentsMenu + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Close + w + 1048576 + 2147483647 + + + + + + Save… + s + 1048576 + 2147483647 + + + + + + Revert to Saved + + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Page Setup... + P + 1179648 + 2147483647 + + + + + + + Print… + p + 1048576 + 2147483647 + + + + + + + + + Edit + + 1048576 + 2147483647 + + + submenuAction: + + Edit + + YES + + + Undo + z + 1048576 + 2147483647 + + + + + + Redo + Z + 1179648 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Cut + x + 1048576 + 2147483647 + + + + + + Copy + c + 1048576 + 2147483647 + + + + + + Paste + v + 1048576 + 2147483647 + + + + + + Paste and Match Style + V + 1572864 + 2147483647 + + + + + + Delete + + 1048576 + 2147483647 + + + + + + Select All + a + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Find + + 1048576 + 2147483647 + + + submenuAction: + + Find + + YES + + + Find… + f + 1048576 + 2147483647 + + + 1 + + + + Find and Replace… + f + 1572864 + 2147483647 + + + 12 + + + + Find Next + g + 1048576 + 2147483647 + + + 2 + + + + Find Previous + G + 1179648 + 2147483647 + + + 3 + + + + Use Selection for Find + e + 1048576 + 2147483647 + + + 7 + + + + Jump to Selection + j + 1048576 + 2147483647 + + + + + + + + + Spelling and Grammar + + 1048576 + 2147483647 + + + submenuAction: + + Spelling and Grammar + + YES + + + Show Spelling and Grammar + : + 1048576 + 2147483647 + + + + + + Check Document Now + ; + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Check Spelling While Typing + + 1048576 + 2147483647 + + + + + + Check Grammar With Spelling + + 1048576 + 2147483647 + + + + + + Correct Spelling Automatically + + 2147483647 + + + + + + + + + Substitutions + + 1048576 + 2147483647 + + + submenuAction: + + Substitutions + + YES + + + Show Substitutions + + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Smart Copy/Paste + f + 1048576 + 2147483647 + + + 1 + + + + Smart Quotes + g + 1048576 + 2147483647 + + + 2 + + + + Smart Dashes + + 2147483647 + + + + + + Smart Links + G + 1179648 + 2147483647 + + + 3 + + + + Text Replacement + + 2147483647 + + + + + + + + + Transformations + + 2147483647 + + + submenuAction: + + Transformations + + YES + + + Make Upper Case + + 2147483647 + + + + + + Make Lower Case + + 2147483647 + + + + + + Capitalize + + 2147483647 + + + + + + + + + Speech + + 1048576 + 2147483647 + + + submenuAction: + + Speech + + YES + + + Start Speaking + + 1048576 + 2147483647 + + + + + + Stop Speaking + + 1048576 + 2147483647 + + + + + + + + + + + + Format + + 2147483647 + + + submenuAction: + + Format + + YES + + + Font + + 2147483647 + + + submenuAction: + + Font + + YES + + + Show Fonts + t + 1048576 + 2147483647 + + + + + + Bold + b + 1048576 + 2147483647 + + + 2 + + + + Italic + i + 1048576 + 2147483647 + + + 1 + + + + Underline + u + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Bigger + + + 1048576 + 2147483647 + + + 3 + + + + Smaller + - + 1048576 + 2147483647 + + + 4 + + + + YES + YES + + + 2147483647 + + + + + + Kern + + 2147483647 + + + submenuAction: + + Kern + + YES + + + Use Default + + 2147483647 + + + + + + Use None + + 2147483647 + + + + + + Tighten + + 2147483647 + + + + + + Loosen + + 2147483647 + + + + + + + + + Ligature + + 2147483647 + + + submenuAction: + + Ligature + + YES + + + Use Default + + 2147483647 + + + + + + Use None + + 2147483647 + + + + + + Use All + + 2147483647 + + + + + + + + + Baseline + + 2147483647 + + + submenuAction: + + Baseline + + YES + + + Use Default + + 2147483647 + + + + + + Superscript + + 2147483647 + + + + + + Subscript + + 2147483647 + + + + + + Raise + + 2147483647 + + + + + + Lower + + 2147483647 + + + + + + + + + YES + YES + + + 2147483647 + + + + + + Show Colors + C + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Copy Style + c + 1572864 + 2147483647 + + + + + + Paste Style + v + 1572864 + 2147483647 + + + + + _NSFontMenu + + + + + Text + + 2147483647 + + + submenuAction: + + Text + + YES + + + Align Left + { + 1048576 + 2147483647 + + + + + + Center + | + 1048576 + 2147483647 + + + + + + Justify + + 2147483647 + + + + + + Align Right + } + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Writing Direction + + 2147483647 + + + submenuAction: + + Writing Direction + + YES + + + YES + Paragraph + + 2147483647 + + + + + + CURlZmF1bHQ + + 2147483647 + + + + + + CUxlZnQgdG8gUmlnaHQ + + 2147483647 + + + + + + CVJpZ2h0IHRvIExlZnQ + + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + YES + Selection + + 2147483647 + + + + + + CURlZmF1bHQ + + 2147483647 + + + + + + CUxlZnQgdG8gUmlnaHQ + + 2147483647 + + + + + + CVJpZ2h0IHRvIExlZnQ + + 2147483647 + + + + + + + + + YES + YES + + + 2147483647 + + + + + + Show Ruler + + 2147483647 + + + + + + Copy Ruler + c + 1310720 + 2147483647 + + + + + + Paste Ruler + v + 1310720 + 2147483647 + + + + + + + + + + + + View + + 1048576 + 2147483647 + + + submenuAction: + + View + + YES + + + Show Toolbar + t + 1572864 + 2147483647 + + + + + + Customize Toolbar… + + 1048576 + 2147483647 + + + + + + + + + Window + + 1048576 + 2147483647 + + + submenuAction: + + Window + + YES + + + Minimize + m + 1048576 + 2147483647 + + + + + + Zoom + + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Bring All to Front + + 1048576 + 2147483647 + + + + + _NSWindowsMenu + + + + + Help + + 2147483647 + + + submenuAction: + + Help + + YES + + + Popup Help + ? + 1048576 + 2147483647 + + + + + _NSHelpMenu + + + + _NSMainMenu + + + ApplicationDelegate + + + NSFontManager + + + + + YES + + + performMiniaturize: + + + + 37 + + + + arrangeInFront: + + + + 39 + + + + print: + + + + 86 + + + + runPageLayout: + + + + 87 + + + + clearRecentDocuments: + + + + 127 + + + + orderFrontStandardAboutPanel: + + + + 142 + + + + performClose: + + + + 193 + + + + toggleContinuousSpellChecking: + + + + 222 + + + + undo: + + + + 223 + + + + copy: + + + + 224 + + + + checkSpelling: + + + + 225 + + + + paste: + + + + 226 + + + + stopSpeaking: + + + + 227 + + + + cut: + + + + 228 + + + + showGuessPanel: + + + + 230 + + + + redo: + + + + 231 + + + + selectAll: + + + + 232 + + + + startSpeaking: + + + + 233 + + + + delete: + + + + 235 + + + + performZoom: + + + + 240 + + + + performFindPanelAction: + + + + 241 + + + + centerSelectionInVisibleArea: + + + + 245 + + + + toggleGrammarChecking: + + + + 347 + + + + toggleSmartInsertDelete: + + + + 355 + + + + toggleAutomaticQuoteSubstitution: + + + + 356 + + + + toggleAutomaticLinkDetection: + + + + 357 + + + + saveDocument: + + + + 362 + + + + revertDocumentToSaved: + + + + 364 + + + + runToolbarCustomizationPalette: + + + + 365 + + + + toggleToolbarShown: + + + + 366 + + + + hide: + + + + 367 + + + + hideOtherApplications: + + + + 368 + + + + unhideAllApplications: + + + + 370 + + + + newDocument: + + + + 373 + + + + openDocument: + + + + 374 + + + + addFontTrait: + + + + 421 + + + + addFontTrait: + + + + 422 + + + + modifyFont: + + + + 423 + + + + orderFrontFontPanel: + + + + 424 + + + + modifyFont: + + + + 425 + + + + raiseBaseline: + + + + 426 + + + + lowerBaseline: + + + + 427 + + + + copyFont: + + + + 428 + + + + subscript: + + + + 429 + + + + superscript: + + + + 430 + + + + tightenKerning: + + + + 431 + + + + underline: + + + + 432 + + + + orderFrontColorPanel: + + + + 433 + + + + useAllLigatures: + + + + 434 + + + + loosenKerning: + + + + 435 + + + + pasteFont: + + + + 436 + + + + unscript: + + + + 437 + + + + useStandardKerning: + + + + 438 + + + + useStandardLigatures: + + + + 439 + + + + turnOffLigatures: + + + + 440 + + + + turnOffKerning: + + + + 441 + + + + terminate: + + + + 449 + + + + toggleAutomaticSpellingCorrection: + + + + 456 + + + + orderFrontSubstitutionsPanel: + + + + 458 + + + + toggleAutomaticDashSubstitution: + + + + 461 + + + + toggleAutomaticTextReplacement: + + + + 463 + + + + uppercaseWord: + + + + 464 + + + + capitalizeWord: + + + + 467 + + + + lowercaseWord: + + + + 468 + + + + pasteAsPlainText: + + + + 486 + + + + performFindPanelAction: + + + + 487 + + + + performFindPanelAction: + + + + 488 + + + + performFindPanelAction: + + + + 489 + + + + showHelp: + + + + 493 + + + + delegate + + + + 495 + + + + alignCenter: + + + + 518 + + + + pasteRuler: + + + + 519 + + + + toggleRuler: + + + + 520 + + + + alignRight: + + + + 521 + + + + copyRuler: + + + + 522 + + + + alignJustified: + + + + 523 + + + + alignLeft: + + + + 524 + + + + makeBaseWritingDirectionNatural: + + + + 525 + + + + makeBaseWritingDirectionLeftToRight: + + + + 526 + + + + makeBaseWritingDirectionRightToLeft: + + + + 527 + + + + makeTextWritingDirectionNatural: + + + + 528 + + + + makeTextWritingDirectionLeftToRight: + + + + 529 + + + + makeTextWritingDirectionRightToLeft: + + + + 530 + + + + performFindPanelAction: + + + + 535 + + + + + YES + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 29 + + + YES + + + + + + + + + + + + 19 + + + YES + + + + + + 56 + + + YES + + + + + + 217 + + + YES + + + + + + 83 + + + YES + + + + + + 81 + + + YES + + + + + + + + + + + + + + + 75 + + + + + 78 + + + + + 72 + + + + + 82 + + + + + 124 + + + YES + + + + + + 77 + + + + + 73 + + + + + 79 + + + + + 112 + + + + + 74 + + + + + 125 + + + YES + + + + + + 126 + + + + + 205 + + + YES + + + + + + + + + + + + + + + + + + + + 202 + + + + + 198 + + + + + 207 + + + + + 214 + + + + + 199 + + + + + 203 + + + + + 197 + + + + + 206 + + + + + 215 + + + + + 218 + + + YES + + + + + + 216 + + + YES + + + + + + 200 + + + YES + + + + + + + + + + + 219 + + + + + 201 + + + + + 204 + + + + + 220 + + + YES + + + + + + + + + + + 213 + + + + + 210 + + + + + 221 + + + + + 208 + + + + + 209 + + + + + 57 + + + YES + + + + + + + + + + + + + + + + 58 + + + + + 134 + + + + + 150 + + + + + 136 + + + + + 144 + + + + + 129 + + + + + 143 + + + + + 236 + + + + + 131 + + + YES + + + + + + 149 + + + + + 145 + + + + + 130 + + + + + 24 + + + YES + + + + + + + + + 92 + + + + + 5 + + + + + 239 + + + + + 23 + + + + + 295 + + + YES + + + + + + 296 + + + YES + + + + + + + 297 + + + + + 298 + + + + + 211 + + + YES + + + + + + 212 + + + YES + + + + + + + 195 + + + + + 196 + + + + + 346 + + + + + 348 + + + YES + + + + + + 349 + + + YES + + + + + + + + + + + + 350 + + + + + 351 + + + + + 354 + + + + + 375 + + + YES + + + + + + 376 + + + YES + + + + + + + 377 + + + YES + + + + + + 388 + + + YES + + + + + + + + + + + + + + + + + + + + + 389 + + + + + 390 + + + + + 391 + + + + + 392 + + + + + 393 + + + + + 394 + + + + + 395 + + + + + 396 + + + + + 397 + + + YES + + + + + + 398 + + + YES + + + + + + 399 + + + YES + + + + + + 400 + + + + + 401 + + + + + 402 + + + + + 403 + + + + + 404 + + + + + 405 + + + YES + + + + + + + + + + 406 + + + + + 407 + + + + + 408 + + + + + 409 + + + + + 410 + + + + + 411 + + + YES + + + + + + + + 412 + + + + + 413 + + + + + 414 + + + + + 415 + + + YES + + + + + + + + + 416 + + + + + 417 + + + + + 418 + + + + + 419 + + + + + 420 + + + + + 450 + + + YES + + + + + + 451 + + + YES + + + + + + + + 452 + + + + + 453 + + + + + 454 + + + + + 457 + + + + + 459 + + + + + 460 + + + + + 462 + + + + + 465 + + + + + 466 + + + + + 485 + + + + + 490 + + + YES + + + + + + 491 + + + YES + + + + + + 492 + + + + + 494 + + + + + 496 + + + YES + + + + + + 497 + + + YES + + + + + + + + + + + + + + + 498 + + + + + 499 + + + + + 500 + + + + + 501 + + + + + 502 + + + + + 503 + + + YES + + + + + + 504 + + + + + 505 + + + + + 506 + + + + + 507 + + + + + 508 + + + YES + + + + + + + + + + + + + + 509 + + + + + 510 + + + + + 511 + + + + + 512 + + + + + 513 + + + + + 514 + + + + + 515 + + + + + 516 + + + + + 517 + + + + + 534 + + + + + + + YES + + YES + -1.IBPluginDependency + -2.IBPluginDependency + -3.IBPluginDependency + 112.IBPluginDependency + 124.IBPluginDependency + 125.IBPluginDependency + 126.IBPluginDependency + 129.IBPluginDependency + 130.IBPluginDependency + 131.IBPluginDependency + 134.IBPluginDependency + 136.IBPluginDependency + 143.IBPluginDependency + 144.IBPluginDependency + 145.IBPluginDependency + 149.IBPluginDependency + 150.IBPluginDependency + 19.IBPluginDependency + 195.IBPluginDependency + 196.IBPluginDependency + 197.IBPluginDependency + 198.IBPluginDependency + 199.IBPluginDependency + 200.IBPluginDependency + 201.IBPluginDependency + 202.IBPluginDependency + 203.IBPluginDependency + 204.IBPluginDependency + 205.IBPluginDependency + 206.IBPluginDependency + 207.IBPluginDependency + 208.IBPluginDependency + 209.IBPluginDependency + 210.IBPluginDependency + 211.IBPluginDependency + 212.IBPluginDependency + 213.IBPluginDependency + 214.IBPluginDependency + 215.IBPluginDependency + 216.IBPluginDependency + 217.IBPluginDependency + 218.IBPluginDependency + 219.IBPluginDependency + 220.IBPluginDependency + 221.IBPluginDependency + 23.IBPluginDependency + 236.IBPluginDependency + 239.IBPluginDependency + 24.IBPluginDependency + 29.IBPluginDependency + 295.IBPluginDependency + 296.IBPluginDependency + 297.IBPluginDependency + 298.IBPluginDependency + 346.IBPluginDependency + 348.IBPluginDependency + 349.IBPluginDependency + 350.IBPluginDependency + 351.IBPluginDependency + 354.IBPluginDependency + 375.IBPluginDependency + 376.IBPluginDependency + 377.IBPluginDependency + 388.IBPluginDependency + 389.IBPluginDependency + 390.IBPluginDependency + 391.IBPluginDependency + 392.IBPluginDependency + 393.IBPluginDependency + 394.IBPluginDependency + 395.IBPluginDependency + 396.IBPluginDependency + 397.IBPluginDependency + 398.IBPluginDependency + 399.IBPluginDependency + 400.IBPluginDependency + 401.IBPluginDependency + 402.IBPluginDependency + 403.IBPluginDependency + 404.IBPluginDependency + 405.IBPluginDependency + 406.IBPluginDependency + 407.IBPluginDependency + 408.IBPluginDependency + 409.IBPluginDependency + 410.IBPluginDependency + 411.IBPluginDependency + 412.IBPluginDependency + 413.IBPluginDependency + 414.IBPluginDependency + 415.IBPluginDependency + 416.IBPluginDependency + 417.IBPluginDependency + 418.IBPluginDependency + 419.IBPluginDependency + 420.IBPluginDependency + 450.IBPluginDependency + 451.IBPluginDependency + 452.IBPluginDependency + 453.IBPluginDependency + 454.IBPluginDependency + 457.IBPluginDependency + 459.IBPluginDependency + 460.IBPluginDependency + 462.IBPluginDependency + 465.IBPluginDependency + 466.IBPluginDependency + 485.IBPluginDependency + 490.IBPluginDependency + 491.IBPluginDependency + 492.IBPluginDependency + 494.IBPluginDependency + 496.IBPluginDependency + 497.IBPluginDependency + 498.IBPluginDependency + 499.IBPluginDependency + 5.IBPluginDependency + 500.IBPluginDependency + 501.IBPluginDependency + 502.IBPluginDependency + 503.IBPluginDependency + 504.IBPluginDependency + 505.IBPluginDependency + 506.IBPluginDependency + 507.IBPluginDependency + 508.IBPluginDependency + 509.IBPluginDependency + 510.IBPluginDependency + 511.IBPluginDependency + 512.IBPluginDependency + 513.IBPluginDependency + 514.IBPluginDependency + 515.IBPluginDependency + 516.IBPluginDependency + 517.IBPluginDependency + 534.IBPluginDependency + 56.IBPluginDependency + 57.IBPluginDependency + 58.IBPluginDependency + 72.IBPluginDependency + 73.IBPluginDependency + 74.IBPluginDependency + 75.IBPluginDependency + 77.IBPluginDependency + 78.IBPluginDependency + 79.IBPluginDependency + 81.IBPluginDependency + 82.IBPluginDependency + 83.IBPluginDependency + 92.IBPluginDependency + + + YES + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + YES + + + + + + YES + + + + + 535 + + + + YES + + ApplicationDelegate + NSObject + + IBProjectSource + ./Classes/ApplicationDelegate.h + + + + NSDocument + + YES + + YES + printDocument: + revertDocumentToSaved: + runPageLayout: + saveDocument: + saveDocumentAs: + saveDocumentTo: + + + YES + id + id + id + id + id + id + + + + YES + + YES + printDocument: + revertDocumentToSaved: + runPageLayout: + saveDocument: + saveDocumentAs: + saveDocumentTo: + + + YES + + printDocument: + id + + + revertDocumentToSaved: + id + + + runPageLayout: + id + + + saveDocument: + id + + + saveDocumentAs: + id + + + saveDocumentTo: + id + + + + + IBProjectSource + ./Classes/NSDocument.h + + + + + 0 + IBCocoaFramework + + com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 + + + YES + 3 + + YES + + YES + NSMenuCheckmark + NSMenuMixedState + + + YES + {9, 8} + {7, 2} + + + + diff --git a/iOXAudio/iOXAudio-Info.plist b/iOXAudio/iOXAudio-Info.plist new file mode 100755 index 0000000..f5bf508 --- /dev/null +++ b/iOXAudio/iOXAudio-Info.plist @@ -0,0 +1,38 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 8 + LSApplicationCategoryType + public.app-category.utilities + LSMinimumSystemVersion + ${MACOSX_DEPLOYMENT_TARGET} + LSUIElement + + NSHumanReadableCopyright + Copyright © 2011, 2012 Shpakovski + NSMainNibFile + MainMenu + CFBundleDisplayName + iOXAudio + NSPrincipalClass + NSApplication + + diff --git a/iOXAudio/iOXAudio-Prefix.pch b/iOXAudio/iOXAudio-Prefix.pch new file mode 100755 index 0000000..8515a30 --- /dev/null +++ b/iOXAudio/iOXAudio-Prefix.pch @@ -0,0 +1,9 @@ +// +// Prefix header for all source files of the 'Popup' target in the 'Popup' project +// + +#ifdef __OBJC__ + +#import + +#endif diff --git a/iOXAudio/icon_512x512.png b/iOXAudio/icon_512x512.png new file mode 100644 index 0000000..ebdb623 Binary files /dev/null and b/iOXAudio/icon_512x512.png differ diff --git a/iOXAudio/icons/icon_128x128.png b/iOXAudio/icons/icon_128x128.png new file mode 100644 index 0000000..ef58057 Binary files /dev/null and b/iOXAudio/icons/icon_128x128.png differ diff --git a/iOXAudio/icons/icon_16x16.png b/iOXAudio/icons/icon_16x16.png new file mode 100644 index 0000000..a7d87fb Binary files /dev/null and b/iOXAudio/icons/icon_16x16.png differ diff --git a/iOXAudio/icons/icon_256x256.png b/iOXAudio/icons/icon_256x256.png new file mode 100644 index 0000000..6cf5210 Binary files /dev/null and b/iOXAudio/icons/icon_256x256.png differ diff --git a/iOXAudio/icons/icon_32x32.png b/iOXAudio/icons/icon_32x32.png new file mode 100644 index 0000000..0be87c3 Binary files /dev/null and b/iOXAudio/icons/icon_32x32.png differ diff --git a/iOXAudio/icons/icon_32x32@2x.png b/iOXAudio/icons/icon_32x32@2x.png new file mode 100644 index 0000000..dbbfcb0 Binary files /dev/null and b/iOXAudio/icons/icon_32x32@2x.png differ diff --git a/iOXAudio/icons/icon_512x512.png b/iOXAudio/icons/icon_512x512.png new file mode 100644 index 0000000..145c245 Binary files /dev/null and b/iOXAudio/icons/icon_512x512.png differ diff --git a/iOXAudio/icons/icon_512x512@2x.png b/iOXAudio/icons/icon_512x512@2x.png new file mode 100644 index 0000000..baca30d Binary files /dev/null and b/iOXAudio/icons/icon_512x512@2x.png differ diff --git a/iOXAudio/icons/ioxaudio_19.png b/iOXAudio/icons/ioxaudio_19.png new file mode 100644 index 0000000..6b8042a Binary files /dev/null and b/iOXAudio/icons/ioxaudio_19.png differ diff --git a/iOXAudio/icons/ioxaudio_23.png b/iOXAudio/icons/ioxaudio_23.png new file mode 100644 index 0000000..0ea1e24 Binary files /dev/null and b/iOXAudio/icons/ioxaudio_23.png differ diff --git a/iOXAudio/main.m b/iOXAudio/main.m new file mode 100755 index 0000000..df0d443 --- /dev/null +++ b/iOXAudio/main.m @@ -0,0 +1,14 @@ +// +// main.m +// Popup +// +// Created by Vadim Shpakovski on 7/5/11. +// Copyright 2011 __MyCompanyName__. All rights reserved. +// + +#import + +int main(int argc, char *argv[]) +{ + return NSApplicationMain(argc, (const char **)argv); +}