Skip to content
Browse files

Add a gui for specifying the sender types

  • Loading branch information...
1 parent 946bd3d commit 77fcd5ad2db6586f996cb31021b39cc654ec8534 Jonathan del Strother committed Sep 9, 2009
Showing with 2,553 additions and 34 deletions.
  1. +40 −4 BBOSC.xcodeproj/project.pbxproj
  2. +12 −4 BBOSCPlugInSender.h
  3. +216 −26 BBOSCPlugInSender.m
  4. +947 −0 BBOSCSender.xib
  5. +14 −0 NSArrayExtensions.h
  6. +36 −0 NSArrayExtensions.m
  7. +1 −0 lib/BWToolkitFramework.framework/BWToolkitFramework
  8. +1 −0 lib/BWToolkitFramework.framework/Headers
  9. +1 −0 lib/BWToolkitFramework.framework/Resources
  10. BIN lib/BWToolkitFramework.framework/Versions/A/BWToolkitFramework
  11. +21 −0 lib/BWToolkitFramework.framework/Versions/A/Headers/BWAnchoredButton.h
  12. +27 −0 lib/BWToolkitFramework.framework/Versions/A/Headers/BWAnchoredButtonBar.h
  13. +16 −0 lib/BWToolkitFramework.framework/Versions/A/Headers/BWAnchoredButtonCell.h
  14. +21 −0 lib/BWToolkitFramework.framework/Versions/A/Headers/BWAnchoredPopUpButton.h
  15. +16 −0 lib/BWToolkitFramework.framework/Versions/A/Headers/BWAnchoredPopUpButtonCell.h
  16. +24 −0 lib/BWToolkitFramework.framework/Versions/A/Headers/BWGradientBox.h
  17. +18 −0 lib/BWToolkitFramework.framework/Versions/A/Headers/BWHyperlinkButton.h
  18. +16 −0 lib/BWToolkitFramework.framework/Versions/A/Headers/BWHyperlinkButtonCell.h
  19. +16 −0 lib/BWToolkitFramework.framework/Versions/A/Headers/BWInsetTextField.h
  20. +36 −0 lib/BWToolkitFramework.framework/Versions/A/Headers/BWSelectableToolbar.h
  21. +31 −0 lib/BWToolkitFramework.framework/Versions/A/Headers/BWSheetController.h
  22. +44 −0 lib/BWToolkitFramework.framework/Versions/A/Headers/BWSplitView.h
  23. +33 −0 lib/BWToolkitFramework.framework/Versions/A/Headers/BWStyledTextField.h
  24. +22 −0 lib/BWToolkitFramework.framework/Versions/A/Headers/BWStyledTextFieldCell.h
  25. +25 −0 lib/BWToolkitFramework.framework/Versions/A/Headers/BWTexturedSlider.h
  26. +19 −0 lib/BWToolkitFramework.framework/Versions/A/Headers/BWTexturedSliderCell.h
  27. +17 −0 lib/BWToolkitFramework.framework/Versions/A/Headers/BWTokenAttachmentCell.h
  28. +16 −0 lib/BWToolkitFramework.framework/Versions/A/Headers/BWTokenField.h
  29. +16 −0 lib/BWToolkitFramework.framework/Versions/A/Headers/BWTokenFieldCell.h
  30. +16 −0 lib/BWToolkitFramework.framework/Versions/A/Headers/BWToolbarItem.h
  31. +16 −0 lib/BWToolkitFramework.framework/Versions/A/Headers/BWToolbarShowColorsItem.h
  32. +16 −0 lib/BWToolkitFramework.framework/Versions/A/Headers/BWToolbarShowFontsItem.h
  33. +47 −0 lib/BWToolkitFramework.framework/Versions/A/Headers/BWToolkitFramework.h
  34. +16 −0 lib/BWToolkitFramework.framework/Versions/A/Headers/BWTransparentButton.h
  35. +17 −0 lib/BWToolkitFramework.framework/Versions/A/Headers/BWTransparentButtonCell.h
  36. +16 −0 lib/BWToolkitFramework.framework/Versions/A/Headers/BWTransparentCheckbox.h
  37. +17 −0 lib/BWToolkitFramework.framework/Versions/A/Headers/BWTransparentCheckboxCell.h
  38. +16 −0 lib/BWToolkitFramework.framework/Versions/A/Headers/BWTransparentPopUpButton.h
  39. +16 −0 lib/BWToolkitFramework.framework/Versions/A/Headers/BWTransparentPopUpButtonCell.h
  40. +16 −0 lib/BWToolkitFramework.framework/Versions/A/Headers/BWTransparentScrollView.h
  41. +16 −0 lib/BWToolkitFramework.framework/Versions/A/Headers/BWTransparentScroller.h
  42. +16 −0 lib/BWToolkitFramework.framework/Versions/A/Headers/BWTransparentSlider.h
  43. +16 −0 lib/BWToolkitFramework.framework/Versions/A/Headers/BWTransparentSliderCell.h
  44. +16 −0 lib/BWToolkitFramework.framework/Versions/A/Headers/BWTransparentTableView.h
  45. +16 −0 lib/BWToolkitFramework.framework/Versions/A/Headers/BWTransparentTableViewCell.h
  46. +16 −0 lib/BWToolkitFramework.framework/Versions/A/Headers/BWTransparentTextFieldCell.h
  47. +16 −0 lib/BWToolkitFramework.framework/Versions/A/Headers/BWUnanchoredButton.h
  48. +17 −0 lib/BWToolkitFramework.framework/Versions/A/Headers/BWUnanchoredButtonCell.h
  49. +15 −0 lib/BWToolkitFramework.framework/Versions/A/Headers/NSApplication+BWAdditions.h
  50. +16 −0 lib/BWToolkitFramework.framework/Versions/A/Headers/NSColor+BWAdditions.h
  51. +19 −0 lib/BWToolkitFramework.framework/Versions/A/Headers/NSImage+BWAdditions.h
  52. +22 −0 lib/BWToolkitFramework.framework/Versions/A/Headers/NSTokenAttachment.h
  53. +52 −0 lib/BWToolkitFramework.framework/Versions/A/Headers/NSTokenAttachmentCell.h
  54. +15 −0 lib/BWToolkitFramework.framework/Versions/A/Headers/NSView+BWAdditions.h
  55. +16 −0 lib/BWToolkitFramework.framework/Versions/A/Headers/NSWindow+BWAdditions.h
  56. BIN lib/BWToolkitFramework.framework/Versions/A/Resources/ButtonBarPullDownArrow.pdf
  57. BIN lib/BWToolkitFramework.framework/Versions/A/Resources/GradientSplitViewDimpleBitmap.tif
  58. BIN lib/BWToolkitFramework.framework/Versions/A/Resources/GradientSplitViewDimpleVector.pdf
  59. +22 −0 lib/BWToolkitFramework.framework/Versions/A/Resources/Info.plist
  60. BIN lib/BWToolkitFramework.framework/Versions/A/Resources/Library-SheetController.tif
  61. +16 −0 lib/BWToolkitFramework.framework/Versions/A/Resources/License.rtf
  62. +319 −0 lib/BWToolkitFramework.framework/Versions/A/Resources/Release Notes.rtf
  63. BIN lib/BWToolkitFramework.framework/Versions/A/Resources/TexturedSliderPhotoLarge.tif
  64. BIN lib/BWToolkitFramework.framework/Versions/A/Resources/TexturedSliderPhotoSmall.tif
  65. BIN lib/BWToolkitFramework.framework/Versions/A/Resources/TexturedSliderSpeakerLoud.png
  66. BIN lib/BWToolkitFramework.framework/Versions/A/Resources/TexturedSliderSpeakerQuiet.png
  67. BIN lib/BWToolkitFramework.framework/Versions/A/Resources/TexturedSliderThumbN.tiff
  68. BIN lib/BWToolkitFramework.framework/Versions/A/Resources/TexturedSliderThumbP.tiff
  69. BIN lib/BWToolkitFramework.framework/Versions/A/Resources/TexturedSliderTrackFill.tiff
  70. BIN lib/BWToolkitFramework.framework/Versions/A/Resources/TexturedSliderTrackLeft.tiff
  71. BIN lib/BWToolkitFramework.framework/Versions/A/Resources/TexturedSliderTrackRight.tiff
  72. BIN lib/BWToolkitFramework.framework/Versions/A/Resources/ToolbarItemColors.tiff
  73. BIN lib/BWToolkitFramework.framework/Versions/A/Resources/ToolbarItemFonts.tiff
  74. BIN lib/BWToolkitFramework.framework/Versions/A/Resources/TransparentButtonFillN.tiff
  75. BIN lib/BWToolkitFramework.framework/Versions/A/Resources/TransparentButtonFillP.tiff
  76. BIN lib/BWToolkitFramework.framework/Versions/A/Resources/TransparentButtonLeftN.tiff
  77. BIN lib/BWToolkitFramework.framework/Versions/A/Resources/TransparentButtonLeftP.tiff
  78. BIN lib/BWToolkitFramework.framework/Versions/A/Resources/TransparentButtonRightN.tiff
  79. BIN lib/BWToolkitFramework.framework/Versions/A/Resources/TransparentButtonRightP.tiff
  80. BIN lib/BWToolkitFramework.framework/Versions/A/Resources/TransparentCheckboxOffN.tiff
  81. BIN lib/BWToolkitFramework.framework/Versions/A/Resources/TransparentCheckboxOffP.tiff
  82. BIN lib/BWToolkitFramework.framework/Versions/A/Resources/TransparentCheckboxOnN.tiff
  83. BIN lib/BWToolkitFramework.framework/Versions/A/Resources/TransparentCheckboxOnP.tiff
  84. BIN lib/BWToolkitFramework.framework/Versions/A/Resources/TransparentPopUpFillN.tiff
  85. BIN lib/BWToolkitFramework.framework/Versions/A/Resources/TransparentPopUpFillP.tiff
  86. BIN lib/BWToolkitFramework.framework/Versions/A/Resources/TransparentPopUpLeftN.tiff
  87. BIN lib/BWToolkitFramework.framework/Versions/A/Resources/TransparentPopUpLeftP.tiff
  88. BIN lib/BWToolkitFramework.framework/Versions/A/Resources/TransparentPopUpPullDownRightN.tif
  89. BIN lib/BWToolkitFramework.framework/Versions/A/Resources/TransparentPopUpPullDownRightP.tif
  90. BIN lib/BWToolkitFramework.framework/Versions/A/Resources/TransparentPopUpRightN.tiff
  91. BIN lib/BWToolkitFramework.framework/Versions/A/Resources/TransparentPopUpRightP.tiff
  92. BIN lib/BWToolkitFramework.framework/Versions/A/Resources/TransparentScrollerKnobBottom.tif
  93. BIN lib/BWToolkitFramework.framework/Versions/A/Resources/TransparentScrollerKnobHorizontalFill.tif
  94. BIN lib/BWToolkitFramework.framework/Versions/A/Resources/TransparentScrollerKnobLeft.tif
  95. BIN lib/BWToolkitFramework.framework/Versions/A/Resources/TransparentScrollerKnobRight.tif
  96. BIN lib/BWToolkitFramework.framework/Versions/A/Resources/TransparentScrollerKnobTop.tif
  97. BIN lib/BWToolkitFramework.framework/Versions/A/Resources/TransparentScrollerKnobVerticalFill.tif
  98. BIN lib/BWToolkitFramework.framework/Versions/A/Resources/TransparentScrollerSlotBottom.tif
  99. BIN lib/BWToolkitFramework.framework/Versions/A/Resources/TransparentScrollerSlotHorizontalFill.tif
  100. BIN lib/BWToolkitFramework.framework/Versions/A/Resources/TransparentScrollerSlotLeft.tif
  101. BIN lib/BWToolkitFramework.framework/Versions/A/Resources/TransparentScrollerSlotRight.tif
  102. BIN lib/BWToolkitFramework.framework/Versions/A/Resources/TransparentScrollerSlotTop.tif
  103. BIN lib/BWToolkitFramework.framework/Versions/A/Resources/TransparentScrollerSlotVerticalFill.tif
  104. BIN lib/BWToolkitFramework.framework/Versions/A/Resources/TransparentSliderThumbN.tiff
  105. BIN lib/BWToolkitFramework.framework/Versions/A/Resources/TransparentSliderThumbP.tiff
  106. BIN lib/BWToolkitFramework.framework/Versions/A/Resources/TransparentSliderTrackFill.tiff
  107. BIN lib/BWToolkitFramework.framework/Versions/A/Resources/TransparentSliderTrackLeft.tiff
  108. BIN lib/BWToolkitFramework.framework/Versions/A/Resources/TransparentSliderTrackRight.tiff
  109. BIN lib/BWToolkitFramework.framework/Versions/A/Resources/TransparentSliderTriangleThumbN.tiff
  110. BIN lib/BWToolkitFramework.framework/Versions/A/Resources/TransparentSliderTriangleThumbP.tiff
  111. +1 −0 lib/BWToolkitFramework.framework/Versions/Current
View
44 BBOSC.xcodeproj/project.pbxproj
@@ -3,7 +3,7 @@
archiveVersion = 1;
classes = {
};
- objectVersion = 45;
+ objectVersion = 46;
objects = {
/* Begin PBXAggregateTarget section */
@@ -28,6 +28,10 @@
FC5208D710567C0500FE3004 /* VVOSC.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FC5208D010567BED00FE3004 /* VVOSC.framework */; };
FC52092410567D0300FE3004 /* VVOSC.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FC5208D010567BED00FE3004 /* VVOSC.framework */; };
FC5209AC1056853800FE3004 /* BBOSCPluginReceiver.m in Sources */ = {isa = PBXBuildFile; fileRef = FC5209AB1056853800FE3004 /* BBOSCPluginReceiver.m */; };
+ FC520AD61056B6F200FE3004 /* BWToolkitFramework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FC520AD51056B6F200FE3004 /* BWToolkitFramework.framework */; };
+ FC520AD91056B6FD00FE3004 /* BWToolkitFramework.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FC520AD51056B6F200FE3004 /* BWToolkitFramework.framework */; };
+ FC520B0A1056B90000FE3004 /* BBOSCSender.xib in Resources */ = {isa = PBXBuildFile; fileRef = FC520AC11056B56400FE3004 /* BBOSCSender.xib */; };
+ FC520BFC1057E69B00FE3004 /* NSArrayExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = FC520BFB1057E69B00FE3004 /* NSArrayExtensions.m */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@@ -89,6 +93,7 @@
dstPath = "";
dstSubfolderSpec = 10;
files = (
+ FC520AD91056B6FD00FE3004 /* BWToolkitFramework.framework in CopyFiles */,
FC52092410567D0300FE3004 /* VVOSC.framework in CopyFiles */,
);
runOnlyForDeploymentPostprocessing = 0;
@@ -111,6 +116,10 @@
FC52093910567D6200FE3004 /* Target-QCPlugin.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = "Target-QCPlugin.xcconfig"; path = "/Code/Config/Target-QCPlugin.xcconfig"; sourceTree = "<absolute>"; };
FC5209AA1056853800FE3004 /* BBOSCPluginReceiver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BBOSCPluginReceiver.h; sourceTree = "<group>"; };
FC5209AB1056853800FE3004 /* BBOSCPluginReceiver.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BBOSCPluginReceiver.m; sourceTree = "<group>"; };
+ FC520AC11056B56400FE3004 /* BBOSCSender.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = BBOSCSender.xib; sourceTree = "<group>"; };
+ FC520AD51056B6F200FE3004 /* BWToolkitFramework.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = BWToolkitFramework.framework; path = lib/BWToolkitFramework.framework; sourceTree = "<group>"; };
+ FC520BFA1057E69B00FE3004 /* NSArrayExtensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NSArrayExtensions.h; sourceTree = "<group>"; };
+ FC520BFB1057E69B00FE3004 /* NSArrayExtensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSArrayExtensions.m; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -121,6 +130,7 @@
FC5208D710567C0500FE3004 /* VVOSC.framework in Frameworks */,
8D5B49B4048680CD000E48DA /* Cocoa.framework in Frameworks */,
16BA96310A7EB9AC001E4983 /* Quartz.framework in Frameworks */,
+ FC520AD61056B6F200FE3004 /* BWToolkitFramework.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -144,6 +154,7 @@
089C1671FE841209C02AAC07 /* Frameworks */ = {
isa = PBXGroup;
children = (
+ FC520AD51056B6F200FE3004 /* BWToolkitFramework.framework */,
16BA96300A7EB9AC001E4983 /* Quartz.framework */,
1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */,
);
@@ -154,6 +165,7 @@
isa = PBXGroup;
children = (
8D5B49B7048680CD000E48DA /* Info.plist */,
+ FC520AC11056B56400FE3004 /* BBOSCSender.xib */,
);
name = Resources;
sourceTree = "<group>";
@@ -165,6 +177,8 @@
16BA95410A7EB2EB001E4983 /* BBOSCPlugInSender.m */,
FC5209AA1056853800FE3004 /* BBOSCPluginReceiver.h */,
FC5209AB1056853800FE3004 /* BBOSCPluginReceiver.m */,
+ FC520BFA1057E69B00FE3004 /* NSArrayExtensions.h */,
+ FC520BFB1057E69B00FE3004 /* NSArrayExtensions.m */,
);
name = Classes;
sourceTree = "<group>";
@@ -219,6 +233,7 @@
8D5B49B1048680CD000E48DA /* Sources */,
8D5B49B3048680CD000E48DA /* Frameworks */,
FC52092A10567D0600FE3004 /* CopyFiles */,
+ FC520B241056B97100FE3004 /* Resources */,
);
buildRules = (
);
@@ -237,7 +252,7 @@
089C1669FE841209C02AAC07 /* Project object */ = {
isa = PBXProject;
buildConfigurationList = 1DEB913E08733D840010E9CD /* Build configuration list for PBXProject "BBOSC" */;
- compatibilityVersion = "Xcode 3.1";
+ compatibilityVersion = "Xcode 3.2";
hasScannedForEncodings = 1;
mainGroup = 089C166AFE841209C02AAC07 /* Quartz Composer Plug In */;
projectDirPath = "";
@@ -293,6 +308,17 @@
};
/* End PBXReferenceProxy section */
+/* Begin PBXResourcesBuildPhase section */
+ FC520B241056B97100FE3004 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ FC520B0A1056B90000FE3004 /* BBOSCSender.xib in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
/* Begin PBXShellScriptBuildPhase section */
233E2C690A83C783005A62DF /* ShellScript */ = {
isa = PBXShellScriptBuildPhase;
@@ -316,6 +342,7 @@
files = (
16BA95420A7EB2EB001E4983 /* BBOSCPlugInSender.m in Sources */,
FC5209AC1056853800FE3004 /* BBOSCPluginReceiver.m in Sources */,
+ FC520BFC1057E69B00FE3004 /* NSArrayExtensions.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -340,6 +367,10 @@
baseConfigurationReference = FC52093910567D6200FE3004 /* Target-QCPlugin.xcconfig */;
buildSettings = {
COPY_PHASE_STRIP = NO;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "\"$(SRCROOT)/lib\"",
+ );
GCC_DYNAMIC_NO_PIC = NO;
GCC_ENABLE_FIX_AND_CONTINUE = YES;
GCC_ENABLE_OBJC_GC = supported;
@@ -360,6 +391,10 @@
baseConfigurationReference = FC52093910567D6200FE3004 /* Target-QCPlugin.xcconfig */;
buildSettings = {
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "\"$(SRCROOT)/lib\"",
+ );
GCC_ENABLE_OBJC_GC = supported;
GCC_MODEL_TUNING = G5;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
@@ -380,8 +415,9 @@
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
+ MACOSX_DEPLOYMENT_TARGET = 10.6;
ONLY_ACTIVE_ARCH = YES;
- SDKROOT = macosx10.5;
+ SDKROOT = macosx10.6;
};
name = Debug;
};
@@ -394,7 +430,7 @@
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- SDKROOT = macosx10.5;
+ SDKROOT = macosx10.6;
};
name = Release;
};
View
16 BBOSCPlugInSender.h
@@ -8,13 +8,21 @@
#import <Quartz/Quartz.h>
+@interface BBOSCPlugInSenderViewController : QCPlugInViewController {}
+@property (nonatomic, readonly, assign) IBOutlet NSPopUpButton* portTypeDropDown;
+@property (nonatomic, readonly, assign) IBOutlet NSArrayController* portArrayController;
+-(IBAction)addNewPort:(id)sender;
+@end
+
@class OSCManager, OSCOutPort;
-@interface BBOSCPlugInSender : QCPlugIn
-{
- OSCManager *oscManager;
- OSCOutPort *oscPort;
+@interface BBOSCPlugInSender : QCPlugIn {
+
}
+@property (nonatomic, readonly, retain) OSCManager *oscManager;
+@property (nonatomic, readonly, retain) OSCOutPort *oscPort;
+@property (nonatomic, readonly, retain) NSArray* oscParameters;
@property (nonatomic, readwrite, assign) NSUInteger inputBroadcastPort;
+@property (nonatomic, readwrite, assign) NSString* inputBroadcastPath;
@end
View
242 BBOSCPlugInSender.m
@@ -11,13 +11,128 @@
#import "vvosc/FrameworkSrc/VVOSC.h"
#import "BBOSCPlugInSender.h"
+#import "NSArrayExtensions.h"
#define kQCPlugIn_Name @"BBOSC Sender"
#define kQCPlugIn_Description @"Best Before Open Sound Control sender plugin"
+NSString* BBOSCTypeKey=@"BBOSCType";
+NSString* BBOSCPortKey=@"BBOSCPortKey";
+
+typedef enum {
+ BBOSCTypeInt,
+ BBOSCTypeFloat,
+ BBOSCTypeBool,
+ BBOSCTypeString,
+ BBOSCTypeArrayOfInt,
+ BBOSCTypeArrayOfFloat,
+ BBOSCTypeArrayOfBool,
+ BBOSCTypeCount
+} BBOSCType;
+
+@interface OSCMessage(BBExtensions)
+-(void)addNSValue:(id)newValue withBias:(BBOSCType)bias;
+@end
+@implementation OSCMessage(BBExtensions)
+-(void)addNSValue:(id)newValue withBias:(BBOSCType)bias {
+
+ if ([newValue isKindOfClass:[NSString class]]) {
+ [self addString:newValue];
+
+ } else if ([newValue isKindOfClass:[NSNumber class]]) {
+ switch(bias) {
+ case BBOSCTypeBool:
+ [self addBOOL:[newValue boolValue]];
+ break;
+ case BBOSCTypeInt:
+ [self addInt:[newValue intValue]];
+ break;
+ case BBOSCTypeFloat:
+ [self addFloat:[newValue floatValue]];
+ break;
+ default:
+ NSAssert2(NO, @"Bad type %d for %@", bias, newValue);
+ }
+
+ } else if ([newValue isKindOfClass:[NSArray class]]) {
+ NSAssert2(bias>=BBOSCTypeArrayOfInt && bias<=BBOSCTypeArrayOfBool, @"Unexpected value %@ for type %d", newValue, bias);
+ // We've got an array - add all the subvalues into the message, using the appropriate type (eg if we're using BBOSCTypeArrayOfFloat, subvalues should use BBOSCTypeFloat)
+ for(id subvalue in newValue) {
+ [self addNSValue:subvalue withBias:bias-4];
+ }
+
+ } else {
+ [self addBOOL:!!newValue];
+ }
+}
+@end
+
+@interface BBOSCTypeToStringTransformer : NSValueTransformer
++ (id) transformer;
+@end
+@implementation BBOSCTypeToStringTransformer
++ (id) transformer {
+ return [[[self alloc] init] autorelease];
+}
++ (Class)transformedValueClass { return [NSString class]; }
++ (BOOL)allowsReverseTransformation { return NO; }
+- (id)transformedValue:(id)value {
+ switch ([value intValue]) {
+ case BBOSCTypeInt: return @"Integer";
+ case BBOSCTypeFloat: return @"Float";
+ case BBOSCTypeBool: return @"Boolean";
+ case BBOSCTypeString: return @"String";
+ case BBOSCTypeArrayOfInt: return @"Array w/ Int bias";
+ case BBOSCTypeArrayOfFloat: return @"Array w/ Float bias";
+ case BBOSCTypeArrayOfBool: return @"Array w/ Bool bias";
+ }
+ NSAssert1(NO, @"Bad OSC type value %@", value);
+}
+@end
+
+@implementation BBOSCPlugInSenderViewController
+@synthesize portTypeDropDown, portArrayController;
+
+-(void)setPortTypeDropDown:(NSPopUpButton*)popup {
+ // Initialize the popup with all our port types
+ portTypeDropDown = popup;
+ [portTypeDropDown removeAllItems];
+ NSMutableArray* portTypes = [NSMutableArray array];
+ BBOSCTypeToStringTransformer* transformer = [BBOSCTypeToStringTransformer transformer];
+ for(int i=0; i<BBOSCTypeCount; i++) {
+ [portTypes addObject:[transformer transformedValue:[NSNumber numberWithInt:i]]];
+ }
+ [portTypeDropDown addItemsWithTitles:portTypes];
+}
+
+-(void)addNewPort:(id)sender {
+ NSMutableDictionary* newPort = [NSMutableDictionary dictionaryWithObjectsAndKeys:
+ [NSNumber numberWithInt:[portTypeDropDown indexOfSelectedItem]],BBOSCTypeKey,
+ [[NSProcessInfo processInfo] globallyUniqueString], BBOSCPortKey, nil
+ ];
+ [portArrayController addObject:newPort];
+}
+
+@end
+
+
+
+@interface BBOSCPlugInSender ()
+@property (nonatomic, readwrite, retain) OSCManager *oscManager;
+@property (nonatomic, readwrite, retain) OSCOutPort *oscPort;
+@property (nonatomic, readwrite, retain) NSArray* oscParameters;
+
+@end
+
@implementation BBOSCPlugInSender
+@synthesize oscManager, oscPort, oscParameters;
+@dynamic inputBroadcastPort, inputBroadcastPath;
-@dynamic inputStructure;
++(void)initialize {
+ if (self == [BBOSCPlugInSender class]) {
+ [NSValueTransformer setValueTransformer:[BBOSCTypeToStringTransformer transformer] forName:@"BBOSCTypeToStringTransformer"];
+ }
+}
+ (NSDictionary*) attributes
{
@@ -28,11 +143,15 @@ + (NSDictionary*) attributes
return [NSDictionary dictionaryWithObjectsAndKeys:kQCPlugIn_Name, QCPlugInAttributeNameKey, kQCPlugIn_Description, QCPlugInAttributeDescriptionKey, nil];
}
-+ (NSDictionary*) attributesForPropertyPortWithKey:(NSString*)key
-{
- /*
- Specify the optional attributes for property based ports (QCPortAttributeNameKey, QCPortAttributeDefaultValueKey...).
- */
++ (NSDictionary*) attributesForPropertyPortWithKey:(NSString*)key {
+ if ([key isEqualToString:@"inputBroadcastPort"]) {
+ return [NSDictionary dictionaryWithObjectsAndKeys:@"Broadcast Port", QCPortAttributeNameKey,
+ [NSNumber numberWithInt:60000], QCPortAttributeDefaultValueKey, nil];
+ }
+ if ([key isEqualToString:@"inputBroadcastPath"]) {
+ return [NSDictionary dictionaryWithObjectsAndKeys:@"Broadcast Path", QCPortAttributeNameKey,
+ @"/test", QCPortAttributeDefaultValueKey, nil];
+ }
return nil;
}
@@ -61,7 +180,9 @@ - (id) init
/*
Allocate any permanent resource required by the plug-in.
*/
- oscManager = [[OSCManager alloc] init];
+ self.oscManager = [[[OSCManager alloc] init] autorelease];
+
+ self.oscParameters = [NSArray array];
}
return self;
@@ -83,6 +204,61 @@ - (void) dealloc
[super dealloc];
}
+- (QCPlugInViewController*) createViewController
+{
+ return [[BBOSCPlugInSenderViewController alloc] initWithPlugIn:self
+ viewNibName:@"BBOSCSender"];
+}
+
++ (NSArray*) plugInKeys {
+ return [NSArray arrayWithObjects:@"oscParameters", nil];
+}
+
+-(void)setOscParameters:(NSArray*)params {
+ NSArray* originalPortKeys = [oscParameters map:^(id port){ return [port objectForKey:BBOSCPortKey]; }];
+
+ [self willChangeValueForKey:@"oscParameters"];
+ [oscParameters release];
+ oscParameters = [params retain];
+ [self didChangeValueForKey:@"oscParameters"];
+
+ // Bleh, just trash all the original input ports
+ for(NSString* portKey in originalPortKeys) {
+ [self removeInputPortForKey:portKey];
+ }
+
+ for(NSDictionary* port in oscParameters) {
+ NSString* key = [port objectForKey:BBOSCPortKey];
+ NSNumber* oscType = [port objectForKey:BBOSCTypeKey];
+ NSString* qcType;
+ switch([oscType intValue]) {
+ case BBOSCTypeBool:
+ qcType = QCPortTypeBoolean;
+ break;
+ case BBOSCTypeInt:
+ qcType = QCPortTypeIndex;
+ break;
+ case BBOSCTypeFloat:
+ qcType = QCPortTypeNumber;
+ break;
+ case BBOSCTypeString:
+ qcType = QCPortTypeString;
+ break;
+ default:
+ qcType = QCPortTypeStructure;
+ break;
+ }
+ NSString* name = [NSString stringWithFormat:@"OSC-%@", [[BBOSCTypeToStringTransformer transformer] transformedValue:oscType]];
+ NSDictionary* attributes = [NSDictionary dictionaryWithObjectsAndKeys:name, QCPortAttributeNameKey, nil];
+
+ [self addInputPortWithType:qcType forKey:key withAttributes:attributes];
+ }
+}
+
+-(NSArray*)oscParameters {
+ return oscParameters;
+}
+
@end
@implementation BBOSCPlugInSender (Execution)
@@ -92,8 +268,7 @@ - (BOOL) startExecution:(id<QCPlugInContext>)context
/*
Called by Quartz Composer when rendering of the composition starts: perform any required setup for the plug-in.
Return NO in case of fatal failure (this will prevent rendering of the composition to start).
- */
- oscPort = [[oscManager createNewOutputToAddress:@"127.0.0.1" atPort:60000 withLabel:@"BB OSC"] retain];
+ */
return YES;
}
@@ -116,21 +291,39 @@ Return NO in case of failure during the execution (this will prevent rendering o
CGLContextObj cgl_ctx = [context CGLContextObj];
*/
- OSCMessage* message = [OSCMessage createWithAddress:@"/test"];
- for(id object in self.inputStructure) {
- if ([object isKindOfClass:[NSString class]])
- [message addString:object];
- else if ([object isKindOfClass:[NSNumber class]]) {
- if (object==(id)kCFBooleanTrue)
- [message addBOOL:YES];
- else if (object==(id)kCFBooleanFalse)
- [message addBOOL:NO];
- else
- [message addFloat:[object floatValue]];
- } else
- NSLog(@"Don't recognise %@", object);
+ BOOL inputsChanged = NO;
+
+ if ([self didValueForInputKeyChange:@"inputBroadcastPort"]) {
+ if (self.oscPort)
+ [self.oscManager removeOutput:self.oscPort];
+ self.oscPort = [self.oscManager createNewOutputToAddress:@"0.0.0.0" atPort:self.inputBroadcastPort withLabel:@"BB OSC"];
+ inputsChanged = YES;
}
- [oscPort sendThisMessage:message];
+
+ for(NSDictionary* port in oscParameters) {
+ NSString* key = [port objectForKey:BBOSCPortKey];
+ if ([self didValueForInputKeyChange:key]) {
+ inputsChanged = YES;
+ break;
+ }
+ }
+ if ([self didValueForInputKeyChange:@"inputBroadcastPath"])
+ inputsChanged = YES;
+
+ if (!inputsChanged)
+ return YES;
+
+ OSCMessage* message = [OSCMessage createWithAddress:self.inputBroadcastPath];
+
+ for(NSDictionary* port in oscParameters) {
+ NSString* key = [port objectForKey:BBOSCPortKey];
+ id value = [self valueForInputKey:key];
+ BBOSCType oscType = [[port objectForKey:BBOSCTypeKey] intValue];
+
+ [message addNSValue:value withBias:oscType];
+ }
+
+ [self.oscPort sendThisMessage:message];
return YES;
}
@@ -147,9 +340,6 @@ - (void) stopExecution:(id<QCPlugInContext>)context
/*
Called by Quartz Composer when rendering of the composition stops: perform any required cleanup for the plug-in.
*/
- [oscManager removeOutput:oscPort];
- [oscPort release];
- oscPort = nil;
}
@end
View
947 BBOSCSender.xib
@@ -0,0 +1,947 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10">
+ <data>
+ <int key="IBDocument.SystemTarget">1060</int>
+ <string key="IBDocument.SystemVersion">10A432</string>
+ <string key="IBDocument.InterfaceBuilderVersion">732</string>
+ <string key="IBDocument.AppKitVersion">1038</string>
+ <string key="IBDocument.HIToolboxVersion">437.00</string>
+ <object class="NSMutableDictionary" key="IBDocument.PluginVersions">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.brandonwalkin.BWToolkit</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>732</string>
+ <string>1.2.2</string>
+ </object>
+ </object>
+ <object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <integer value="1"/>
+ </object>
+ <object class="NSArray" key="IBDocument.PluginDependencies">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.brandonwalkin.BWToolkit</string>
+ </object>
+ <object class="NSMutableDictionary" key="IBDocument.Metadata">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys" id="0">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ </object>
+ <object class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSCustomObject" id="1001">
+ <string key="NSClassName">BBOSCPlugInSenderViewController</string>
+ </object>
+ <object class="NSCustomObject" id="1003">
+ <string key="NSClassName">FirstResponder</string>
+ </object>
+ <object class="NSCustomObject" id="1004">
+ <string key="NSClassName">NSApplication</string>
+ </object>
+ <object class="NSCustomView" id="1005">
+ <reference key="NSNextResponder"/>
+ <int key="NSvFlags">256</int>
+ <object class="NSMutableArray" key="NSSubviews">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSTextField" id="113060800">
+ <reference key="NSNextResponder" ref="1005"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{10, 372}, {139, 14}}</string>
+ <reference key="NSSuperview" ref="1005"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="564631165">
+ <int key="NSCellFlags">68288064</int>
+ <int key="NSCellFlags2">272761856</int>
+ <string key="NSContents">OSC Message Parameters</string>
+ <object class="NSFont" key="NSSupport" id="26">
+ <string key="NSName">LucidaGrande</string>
+ <double key="NSSize">11</double>
+ <int key="NSfFlags">3100</int>
+ </object>
+ <reference key="NSControlView" ref="113060800"/>
+ <object class="NSColor" key="NSBackgroundColor">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">controlColor</string>
+ <object class="NSColor" key="NSColor" id="170912762">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
+ </object>
+ </object>
+ <object class="NSColor" key="NSTextColor" id="1023126884">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">controlTextColor</string>
+ <object class="NSColor" key="NSColor" id="1044585011">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MAA</bytes>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="NSPopUpButton" id="885544867">
+ <reference key="NSNextResponder" ref="1005"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{137, 12}, {100, 22}}</string>
+ <reference key="NSSuperview" ref="1005"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSPopUpButtonCell" key="NSCell" id="726370064">
+ <int key="NSCellFlags">-2076049856</int>
+ <int key="NSCellFlags2">133120</int>
+ <reference key="NSSupport" ref="26"/>
+ <reference key="NSControlView" ref="885544867"/>
+ <int key="NSButtonFlags">109199615</int>
+ <int key="NSButtonFlags2">129</int>
+ <string key="NSAlternateContents"/>
+ <string key="NSKeyEquivalent"/>
+ <int key="NSPeriodicDelay">400</int>
+ <int key="NSPeriodicInterval">75</int>
+ <object class="NSMenuItem" key="NSMenuItem" id="1029427772">
+ <reference key="NSMenu" ref="992308706"/>
+ <string key="NSTitle">Item 1</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <int key="NSState">1</int>
+ <object class="NSCustomResource" key="NSOnImage" id="1006803690">
+ <string key="NSClassName">NSImage</string>
+ <string key="NSResourceName">NSMenuCheckmark</string>
+ </object>
+ <object class="NSCustomResource" key="NSMixedImage" id="1051983310">
+ <string key="NSClassName">NSImage</string>
+ <string key="NSResourceName">NSMenuMixedState</string>
+ </object>
+ <string key="NSAction">_popUpItemAction:</string>
+ <reference key="NSTarget" ref="726370064"/>
+ </object>
+ <bool key="NSMenuItemRespectAlignment">YES</bool>
+ <object class="NSMenu" key="NSMenu" id="992308706">
+ <string key="NSTitle">OtherViews</string>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="1029427772"/>
+ <object class="NSMenuItem" id="995831310">
+ <reference key="NSMenu" ref="992308706"/>
+ <string key="NSTitle">Item 2</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="1006803690"/>
+ <reference key="NSMixedImage" ref="1051983310"/>
+ <string key="NSAction">_popUpItemAction:</string>
+ <reference key="NSTarget" ref="726370064"/>
+ </object>
+ <object class="NSMenuItem" id="789483862">
+ <reference key="NSMenu" ref="992308706"/>
+ <string key="NSTitle">Item 3</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="1006803690"/>
+ <reference key="NSMixedImage" ref="1051983310"/>
+ <string key="NSAction">_popUpItemAction:</string>
+ <reference key="NSTarget" ref="726370064"/>
+ </object>
+ </object>
+ <object class="NSFont" key="NSMenuFont" id="614375183">
+ <string key="NSName">LucidaGrande</string>
+ <double key="NSSize">13</double>
+ <int key="NSfFlags">1044</int>
+ </object>
+ </object>
+ <int key="NSPreferredEdge">1</int>
+ <bool key="NSUsesItemFromMenu">YES</bool>
+ <bool key="NSAltersState">YES</bool>
+ <int key="NSArrowPosition">2</int>
+ </object>
+ </object>
+ <object class="NSScrollView" id="714718643">
+ <reference key="NSNextResponder" ref="1005"/>
+ <int key="NSvFlags">256</int>
+ <object class="NSMutableArray" key="NSSubviews">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSClipView" id="196961943">
+ <reference key="NSNextResponder" ref="714718643"/>
+ <int key="NSvFlags">2304</int>
+ <object class="NSMutableArray" key="NSSubviews">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSTableView" id="170275704">
+ <reference key="NSNextResponder" ref="196961943"/>
+ <int key="NSvFlags">256</int>
+ <string key="NSFrameSize">{272, 310}</string>
+ <reference key="NSSuperview" ref="196961943"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTableHeaderView" key="NSHeaderView" id="815004616">
+ <reference key="NSNextResponder" ref="536796202"/>
+ <int key="NSvFlags">256</int>
+ <string key="NSFrameSize">{272, 17}</string>
+ <reference key="NSSuperview" ref="536796202"/>
+ <reference key="NSTableView" ref="170275704"/>
+ </object>
+ <object class="_NSCornerView" key="NSCornerView" id="894799279">
+ <reference key="NSNextResponder" ref="714718643"/>
+ <int key="NSvFlags">-2147483392</int>
+ <string key="NSFrame">{{224, 0}, {16, 17}}</string>
+ <reference key="NSSuperview" ref="714718643"/>
+ </object>
+ <object class="NSMutableArray" key="NSTableColumns">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSTableColumn" id="127950042">
+ <double key="NSWidth">269</double>
+ <double key="NSMinWidth">40</double>
+ <double key="NSMaxWidth">1000</double>
+ <object class="NSTableHeaderCell" key="NSHeaderCell">
+ <int key="NSCellFlags">75628096</int>
+ <int key="NSCellFlags2">2048</int>
+ <string key="NSContents"/>
+ <reference key="NSSupport" ref="26"/>
+ <object class="NSColor" key="NSBackgroundColor">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MC4zMzMzMzI5ODU2AA</bytes>
+ </object>
+ <object class="NSColor" key="NSTextColor">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">headerTextColor</string>
+ <reference key="NSColor" ref="1044585011"/>
+ </object>
+ </object>
+ <object class="NSTextFieldCell" key="NSDataCell" id="948747247">
+ <int key="NSCellFlags">337772096</int>
+ <int key="NSCellFlags2">2048</int>
+ <string key="NSContents">Text Cell</string>
+ <reference key="NSSupport" ref="614375183"/>
+ <reference key="NSControlView" ref="170275704"/>
+ <object class="NSColor" key="NSBackgroundColor" id="596022320">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">controlBackgroundColor</string>
+ <reference key="NSColor" ref="170912762"/>
+ </object>
+ <reference key="NSTextColor" ref="1023126884"/>
+ </object>
+ <int key="NSResizingMask">1</int>
+ <bool key="NSIsResizeable">YES</bool>
+ <reference key="NSTableView" ref="170275704"/>
+ </object>
+ </object>
+ <double key="NSIntercellSpacingWidth">3</double>
+ <double key="NSIntercellSpacingHeight">2</double>
+ <object class="NSColor" key="NSBackgroundColor">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MQA</bytes>
+ </object>
+ <object class="NSColor" key="NSGridColor">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">gridColor</string>
+ <object class="NSColor" key="NSColor">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MC41AA</bytes>
+ </object>
+ </object>
+ <double key="NSRowHeight">17</double>
+ <int key="NSTvFlags">-700448768</int>
+ <reference key="NSDelegate"/>
+ <reference key="NSDataSource"/>
+ <int key="NSColumnAutoresizingStyle">4</int>
+ <int key="NSDraggingSourceMaskForLocal">15</int>
+ <int key="NSDraggingSourceMaskForNonLocal">0</int>
+ <bool key="NSAllowsTypeSelect">YES</bool>
+ <int key="NSTableViewDraggingDestinationStyle">0</int>
+ </object>
+ </object>
+ <string key="NSFrame">{{1, 17}, {272, 310}}</string>
+ <reference key="NSSuperview" ref="714718643"/>
+ <reference key="NSNextKeyView" ref="170275704"/>
+ <reference key="NSDocView" ref="170275704"/>
+ <reference key="NSBGColor" ref="596022320"/>
+ <int key="NScvFlags">4</int>
+ </object>
+ <object class="NSScroller" id="943438497">
+ <reference key="NSNextResponder" ref="714718643"/>
+ <int key="NSvFlags">-2147483392</int>
+ <string key="NSFrame">{{224, 17}, {15, 102}}</string>
+ <reference key="NSSuperview" ref="714718643"/>
+ <reference key="NSTarget" ref="714718643"/>
+ <string key="NSAction">_doScroller:</string>
+ <double key="NSCurValue">37</double>
+ <double key="NSPercent">0.1947367936372757</double>
+ </object>
+ <object class="NSScroller" id="995178833">
+ <reference key="NSNextResponder" ref="714718643"/>
+ <int key="NSvFlags">-2147483392</int>
+ <string key="NSFrame">{{1, 119}, {223, 15}}</string>
+ <reference key="NSSuperview" ref="714718643"/>
+ <int key="NSsFlags">1</int>
+ <reference key="NSTarget" ref="714718643"/>
+ <string key="NSAction">_doScroller:</string>
+ <double key="NSPercent">0.57142859697341919</double>
+ </object>
+ <object class="NSClipView" id="536796202">
+ <reference key="NSNextResponder" ref="714718643"/>
+ <int key="NSvFlags">2304</int>
+ <object class="NSMutableArray" key="NSSubviews">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="815004616"/>
+ </object>
+ <string key="NSFrame">{{1, 0}, {272, 17}}</string>
+ <reference key="NSSuperview" ref="714718643"/>
+ <reference key="NSNextKeyView" ref="815004616"/>
+ <reference key="NSDocView" ref="815004616"/>
+ <reference key="NSBGColor" ref="596022320"/>
+ <int key="NScvFlags">4</int>
+ </object>
+ <reference ref="894799279"/>
+ </object>
+ <string key="NSFrame">{{13, 36}, {274, 328}}</string>
+ <reference key="NSSuperview" ref="1005"/>
+ <reference key="NSNextKeyView" ref="196961943"/>
+ <int key="NSsFlags">562</int>
+ <reference key="NSVScroller" ref="943438497"/>
+ <reference key="NSHScroller" ref="995178833"/>
+ <reference key="NSContentView" ref="196961943"/>
+ <reference key="NSHeaderClipView" ref="536796202"/>
+ <reference key="NSCornerView" ref="894799279"/>
+ <bytes key="NSScrollAmts">QSAAAEEgAABBmAAAQZgAAA</bytes>
+ </object>
+ <object class="BWUnanchoredButtonContainer" id="627072288">
+ <reference key="NSNextResponder" ref="1005"/>
+ <int key="NSvFlags">268</int>
+ <object class="NSMutableArray" key="NSSubviews">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="BWUnanchoredButton" id="678670272">
+ <reference key="NSNextResponder" ref="627072288"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{22, 0}, {23, 22}}</string>
+ <reference key="NSSuperview" ref="627072288"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="BWUnanchoredButtonCell" key="NSCell" id="717852107">
+ <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags2">134217728</int>
+ <string key="NSContents"/>
+ <reference key="NSSupport" ref="614375183"/>
+ <reference key="NSControlView" ref="678670272"/>
+ <int key="NSButtonFlags">-2033958657</int>
+ <int key="NSButtonFlags2">134</int>
+ <object class="NSCustomResource" key="NSNormalImage">
+ <string key="NSClassName">NSImage</string>
+ <string key="NSResourceName">NSRemoveTemplate</string>
+ </object>
+ <string key="NSAlternateContents"/>
+ <string key="NSKeyEquivalent"/>
+ <int key="NSPeriodicDelay">200</int>
+ <int key="NSPeriodicInterval">25</int>
+ </object>
+ </object>
+ <object class="BWUnanchoredButton" id="657265694">
+ <reference key="NSNextResponder" ref="627072288"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrameSize">{23, 22}</string>
+ <reference key="NSSuperview" ref="627072288"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="BWUnanchoredButtonCell" key="NSCell" id="136747097">
+ <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags2">134217728</int>
+ <string key="NSContents"/>
+ <reference key="NSSupport" ref="614375183"/>
+ <reference key="NSControlView" ref="657265694"/>
+ <int key="NSButtonFlags">-2033958657</int>
+ <int key="NSButtonFlags2">134</int>
+ <object class="NSCustomResource" key="NSNormalImage">
+ <string key="NSClassName">NSImage</string>
+ <string key="NSResourceName">NSAddTemplate</string>
+ </object>
+ <string key="NSAlternateContents"/>
+ <string key="NSKeyEquivalent"/>
+ <int key="NSPeriodicDelay">200</int>
+ <int key="NSPeriodicInterval">25</int>
+ </object>
+ </object>
+ </object>
+ <string key="NSFrame">{{242, 14}, {45, 22}}</string>
+ <reference key="NSSuperview" ref="1005"/>
+ </object>
+ </object>
+ <string key="NSFrameSize">{299, 406}</string>
+ <reference key="NSSuperview"/>
+ <string key="NSClassName">NSView</string>
+ </object>
+ <object class="NSArrayController" id="1043578470">
+ <object class="NSMutableArray" key="NSDeclaredKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>BBOSCType</string>
+ </object>
+ <object class="_NSManagedProxy" key="_NSManagedProxy"/>
+ <bool key="NSAvoidsEmptySelection">YES</bool>
+ <bool key="NSPreservesSelection">YES</bool>
+ <bool key="NSSelectsInsertedObjects">YES</bool>
+ <bool key="NSFilterRestrictsInsertion">YES</bool>
+ <bool key="NSClearsFilterPredicateOnInsertion">YES</bool>
+ </object>
+ </object>
+ <object class="IBObjectContainer" key="IBDocument.Objects">
+ <object class="NSMutableArray" key="connectionRecords">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">view</string>
+ <reference key="source" ref="1001"/>
+ <reference key="destination" ref="1005"/>
+ </object>
+ <int key="connectionID">17</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">remove:</string>
+ <reference key="source" ref="1043578470"/>
+ <reference key="destination" ref="678670272"/>
+ </object>
+ <int key="connectionID">25</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBBindingConnection" key="connection">
+ <string key="label">content: arrangedObjects</string>
+ <reference key="source" ref="170275704"/>
+ <reference key="destination" ref="1043578470"/>
+ <object class="NSNibBindingConnector" key="connector" id="640546485">
+ <reference key="NSSource" ref="170275704"/>
+ <reference key="NSDestination" ref="1043578470"/>
+ <string key="NSLabel">content: arrangedObjects</string>
+ <string key="NSBinding">content</string>
+ <string key="NSKeyPath">arrangedObjects</string>
+ <int key="NSNibBindingConnectorVersion">2</int>
+ </object>
+ </object>
+ <int key="connectionID">47</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBBindingConnection" key="connection">
+ <string key="label">selectionIndexes: selectionIndexes</string>
+ <reference key="source" ref="170275704"/>
+ <reference key="destination" ref="1043578470"/>
+ <object class="NSNibBindingConnector" key="connector">
+ <reference key="NSSource" ref="170275704"/>
+ <reference key="NSDestination" ref="1043578470"/>
+ <string key="NSLabel">selectionIndexes: selectionIndexes</string>
+ <string key="NSBinding">selectionIndexes</string>
+ <string key="NSKeyPath">selectionIndexes</string>
+ <reference key="NSPreviousConnector" ref="640546485"/>
+ <int key="NSNibBindingConnectorVersion">2</int>
+ </object>
+ </object>
+ <int key="connectionID">49</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBBindingConnection" key="connection">
+ <string key="label">value: arrangedObjects.BBOSCType</string>
+ <reference key="source" ref="127950042"/>
+ <reference key="destination" ref="1043578470"/>
+ <object class="NSNibBindingConnector" key="connector">
+ <reference key="NSSource" ref="127950042"/>
+ <reference key="NSDestination" ref="1043578470"/>
+ <string key="NSLabel">value: arrangedObjects.BBOSCType</string>
+ <string key="NSBinding">value</string>
+ <string key="NSKeyPath">arrangedObjects.BBOSCType</string>
+ <object class="NSDictionary" key="NSOptions">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>NSConditionallySetsEditable</string>
+ <string>NSValueTransformerName</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <boolean value="YES"/>
+ <string>BBOSCTypeToStringTransformer</string>
+ </object>
+ </object>
+ <int key="NSNibBindingConnectorVersion">2</int>
+ </object>
+ </object>
+ <int key="connectionID">55</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBBindingConnection" key="connection">
+ <string key="label">contentArray: plugIn.oscParameters</string>
+ <reference key="source" ref="1043578470"/>
+ <reference key="destination" ref="1001"/>
+ <object class="NSNibBindingConnector" key="connector">
+ <reference key="NSSource" ref="1043578470"/>
+ <reference key="NSDestination" ref="1001"/>
+ <string key="NSLabel">contentArray: plugIn.oscParameters</string>
+ <string key="NSBinding">contentArray</string>
+ <string key="NSKeyPath">plugIn.oscParameters</string>
+ <int key="NSNibBindingConnectorVersion">2</int>
+ </object>
+ </object>
+ <int key="connectionID">62</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">portArrayController</string>
+ <reference key="source" ref="1001"/>
+ <reference key="destination" ref="1043578470"/>
+ </object>
+ <int key="connectionID">63</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">portTypeDropDown</string>
+ <reference key="source" ref="1001"/>
+ <reference key="destination" ref="885544867"/>
+ </object>
+ <int key="connectionID">64</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">addNewPort:</string>
+ <reference key="source" ref="1001"/>
+ <reference key="destination" ref="657265694"/>
+ </object>
+ <int key="connectionID">65</int>
+ </object>
+ </object>
+ <object class="IBMutableOrderedSet" key="objectRecords">
+ <object class="NSArray" key="orderedObjects">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBObjectRecord">
+ <int key="objectID">0</int>
+ <reference key="object" ref="0"/>
+ <reference key="children" ref="1000"/>
+ <nil key="parent"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">-2</int>
+ <reference key="object" ref="1001"/>
+ <reference key="parent" ref="0"/>
+ <string key="objectName">File's Owner</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">-1</int>
+ <reference key="object" ref="1003"/>
+ <reference key="parent" ref="0"/>
+ <string key="objectName">First Responder</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">-3</int>
+ <reference key="object" ref="1004"/>
+ <reference key="parent" ref="0"/>
+ <string key="objectName">Application</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">1</int>
+ <reference key="object" ref="1005"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="627072288"/>
+ <reference ref="714718643"/>
+ <reference ref="885544867"/>
+ <reference ref="113060800"/>
+ </object>
+ <reference key="parent" ref="0"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">11</int>
+ <reference key="object" ref="627072288"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="678670272"/>
+ <reference ref="657265694"/>
+ </object>
+ <reference key="parent" ref="1005"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">12</int>
+ <reference key="object" ref="678670272"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="717852107"/>
+ </object>
+ <reference key="parent" ref="627072288"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">13</int>
+ <reference key="object" ref="657265694"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="136747097"/>
+ </object>
+ <reference key="parent" ref="627072288"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">14</int>
+ <reference key="object" ref="136747097"/>
+ <reference key="parent" ref="657265694"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">15</int>
+ <reference key="object" ref="717852107"/>
+ <reference key="parent" ref="678670272"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">16</int>
+ <reference key="object" ref="1043578470"/>
+ <reference key="parent" ref="0"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">38</int>
+ <reference key="object" ref="714718643"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="943438497"/>
+ <reference ref="995178833"/>
+ <reference ref="170275704"/>
+ <reference ref="815004616"/>
+ </object>
+ <reference key="parent" ref="1005"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">39</int>
+ <reference key="object" ref="943438497"/>
+ <reference key="parent" ref="714718643"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">40</int>
+ <reference key="object" ref="995178833"/>
+ <reference key="parent" ref="714718643"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">41</int>
+ <reference key="object" ref="170275704"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="127950042"/>
+ </object>
+ <reference key="parent" ref="714718643"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">42</int>
+ <reference key="object" ref="815004616"/>
+ <reference key="parent" ref="714718643"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">43</int>
+ <reference key="object" ref="127950042"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="948747247"/>
+ </object>
+ <reference key="parent" ref="170275704"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">46</int>
+ <reference key="object" ref="948747247"/>
+ <reference key="parent" ref="127950042"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">56</int>
+ <reference key="object" ref="885544867"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="726370064"/>
+ </object>
+ <reference key="parent" ref="1005"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">57</int>
+ <reference key="object" ref="726370064"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="992308706"/>
+ </object>
+ <reference key="parent" ref="885544867"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">58</int>
+ <reference key="object" ref="992308706"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="1029427772"/>
+ <reference ref="995831310"/>
+ <reference ref="789483862"/>
+ </object>
+ <reference key="parent" ref="726370064"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">59</int>
+ <reference key="object" ref="1029427772"/>
+ <reference key="parent" ref="992308706"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">60</int>
+ <reference key="object" ref="995831310"/>
+ <reference key="parent" ref="992308706"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">61</int>
+ <reference key="object" ref="789483862"/>
+ <reference key="parent" ref="992308706"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">66</int>
+ <reference key="object" ref="113060800"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="564631165"/>
+ </object>
+ <reference key="parent" ref="1005"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">67</int>
+ <reference key="object" ref="564631165"/>
+ <reference key="parent" ref="113060800"/>
+ </object>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="flattenedProperties">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>-2.IBAttributePlaceholdersKey</string>
+ <string>1.IBEditorWindowLastContentRect</string>
+ <string>1.IBPluginDependency</string>
+ <string>1.WindowOrigin</string>
+ <string>1.editorWindowContentRectSynchronizationRect</string>
+ <string>11.IBPluginDependency</string>
+ <string>12.IBPluginDependency</string>
+ <string>13.IBPluginDependency</string>
+ <string>14.IBPluginDependency</string>
+ <string>15.IBPluginDependency</string>
+ <string>16.IBPluginDependency</string>
+ <string>38.IBPluginDependency</string>
+ <string>39.IBPluginDependency</string>
+ <string>40.IBPluginDependency</string>
+ <string>41.IBPluginDependency</string>
+ <string>42.IBPluginDependency</string>
+ <string>43.IBPluginDependency</string>
+ <string>46.IBPluginDependency</string>
+ <string>56.IBPluginDependency</string>
+ <string>57.IBPluginDependency</string>
+ <string>58.IBPluginDependency</string>
+ <string>59.IBPluginDependency</string>
+ <string>60.IBPluginDependency</string>
+ <string>61.IBPluginDependency</string>
+ <string>66.IBPluginDependency</string>
+ <string>67.IBPluginDependency</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMutableDictionary">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference key="dict.sortedKeys" ref="0"/>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ </object>
+ <string>{{788, 421}, {299, 406}}</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>{628, 654}</string>
+ <string>{{217, 442}, {480, 272}}</string>
+ <string>com.brandonwalkin.BWToolkit</string>
+ <string>com.brandonwalkin.BWToolkit</string>
+ <string>com.brandonwalkin.BWToolkit</string>
+ <string>com.brandonwalkin.BWToolkit</string>
+ <string>com.brandonwalkin.BWToolkit</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="unlocalizedProperties">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference key="dict.sortedKeys" ref="0"/>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ </object>
+ <nil key="activeLocalization"/>
+ <object class="NSMutableDictionary" key="localizations">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference key="dict.sortedKeys" ref="0"/>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ </object>
+ <nil key="sourceID"/>
+ <int key="maxID">67</int>
+ </object>
+ <object class="IBClassDescriber" key="IBDocument.Classes">
+ <object class="NSMutableArray" key="referencedPartialClassDescriptions">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBPartialClassDescription">
+ <string key="className">BBOSCPlugInSenderViewController</string>
+ <string key="superclassName">QCPlugInViewController</string>
+ <object class="NSMutableDictionary" key="actions">
+ <string key="NS.key.0">addNewPort:</string>
+ <string key="NS.object.0">id</string>
+ </object>
+ <object class="NSMutableDictionary" key="outlets">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>portArrayController</string>
+ <string>portTypeDropDown</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>NSArrayController</string>
+ <string>NSPopUpButton</string>
+ </object>
+ </object>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBProjectSource</string>
+ <string key="minorKey">BBOSCPlugInSender.h</string>
+ </object>
+ </object>
+ </object>
+ <object class="NSMutableArray" key="referencedPartialClassDescriptionsV3.2+">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBPartialClassDescription">
+ <string key="className">BWAnchoredButtonCell</string>
+ <string key="superclassName">NSButtonCell</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">BWToolkitFramework.framework/Headers/BWAnchoredButtonCell.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">BWUnanchoredButton</string>
+ <string key="superclassName">NSButton</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">BWToolkitFramework.framework/Headers/BWUnanchoredButton.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">BWUnanchoredButtonCell</string>
+ <string key="superclassName">BWAnchoredButtonCell</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">BWToolkitFramework.framework/Headers/BWUnanchoredButtonCell.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSApplication</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">BWToolkitFramework.framework/Headers/NSApplication+BWAdditions.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">ImageKit.framework/Headers/IKImageBrowserView.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">ImageKit.framework/Headers/IKSaveOptions.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">ImageKit.framework/Headers/ImageKitDeprecated.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">PDFKit.framework/Headers/PDFDocument.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">PDFKit.framework/Headers/PDFView.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">QuartzComposer.framework/Headers/QCCompositionParameterView.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">QuartzComposer.framework/Headers/QCCompositionPickerView.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">QuartzFilters.framework/Headers/QuartzFilterManager.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">QuickLookUI.framework/Headers/QLPreviewPanel.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSView</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">BWToolkitFramework.framework/Headers/NSView+BWAdditions.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">QCPlugInViewController</string>
+ <string key="superclassName">NSViewController</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">QuartzComposer.framework/Headers/QCPlugInViewController.h</string>
+ </object>
+ </object>
+ </object>
+ </object>
+ <int key="IBDocument.localizationMode">0</int>
+ <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
+ <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
+ <integer value="1060" key="NS.object.0"/>
+ </object>
+ <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
+ <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string>
+ <integer value="3000" key="NS.object.0"/>
+ </object>
+ <bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
+ <string key="IBDocument.LastKnownRelativeProjectPath">BBOSC.xcodeproj</string>
+ <int key="IBDocument.defaultPropertyAccessControl">3</int>
+ </data>
+</archive>
View
14 NSArrayExtensions.h
@@ -0,0 +1,14 @@
+//
+// NSArrayExtensions.h
+// BBOSC
+//
+// Created by Jonathan del Strother on 09/09/2009.
+// Copyright 2009 Best Before Media Ltd. All rights reserved.
+//
+
+#import <Cocoa/Cocoa.h>
+
+
+@interface NSArray(BBExtensions)
+- (NSArray *)map: (id (^)(id obj))block;
+@end
View
36 NSArrayExtensions.m
@@ -0,0 +1,36 @@
+//
+// NSArrayExtensions.m
+// BBOSC
+//
+// Created by Jonathan del Strother on 09/09/2009.
+// Copyright 2009 Best Before Media Ltd. All rights reserved.
+//
+
+#import "NSArrayExtensions.h"
+
+
+@implementation NSArray(BBExtensions)
+- (NSArray *)map: (id (^)(id obj))block
+{
+ NSMutableArray *new = [NSMutableArray array];
+ for(id obj in self)
+ {
+ id newObj = block(obj);
+ [new addObject: newObj ? newObj : [NSNull null]];
+ }
+ return new;
+}
+
+
+- (NSArray *)select: (BOOL (^)(id obj))block
+{
+ NSMutableArray *new = [NSMutableArray array];
+ for(id obj in self)
+ {
+ BOOL selected = block(obj);
+ if (selected)
+ [new addObject:obj];
+ }
+ return new;
+}
+@end
View
1 lib/BWToolkitFramework.framework/BWToolkitFramework
View
1 lib/BWToolkitFramework.framework/Headers
View
1 lib/BWToolkitFramework.framework/Resources
View
BIN lib/BWToolkitFramework.framework/Versions/A/BWToolkitFramework
Binary file not shown.
View
21 lib/BWToolkitFramework.framework/Versions/A/Headers/BWAnchoredButton.h
@@ -0,0 +1,21 @@
+//
+// BWAnchoredButton.h
+// BWToolkit
+//
+// Created by Brandon Walkin (www.brandonwalkin.com)
+// All code is provided under the New BSD license.
+//
+
+#import <Cocoa/Cocoa.h>
+
+@interface BWAnchoredButton : NSButton
+{
+ BOOL isAtLeftEdgeOfBar;
+ BOOL isAtRightEdgeOfBar;
+ NSPoint topAndLeftInset;
+}
+
+@property BOOL isAtLeftEdgeOfBar;
+@property BOOL isAtRightEdgeOfBar;
+
+@end
View
27 lib/BWToolkitFramework.framework/Versions/A/Headers/BWAnchoredButtonBar.h
@@ -0,0 +1,27 @@
+//
+// BWAnchoredButtonBar.h
+// BWToolkit
+//
+// Created by Brandon Walkin (www.brandonwalkin.com)
+// All code is provided under the New BSD license.
+//
+
+#import <Cocoa/Cocoa.h>
+
+@interface BWAnchoredButtonBar : NSView
+{
+ BOOL isResizable, isAtBottom, handleIsRightAligned;
+ int selectedIndex;
+ id splitViewDelegate;
+}
+
+@property BOOL isResizable, isAtBottom, handleIsRightAligned;
+@property int selectedIndex;
+
+// The mode of this bar with a resize handle makes use of some NSSplitView delegate methods. Use the splitViewDelegate for any custom delegate implementations
+// you'd like to provide.
+@property (assign) id splitViewDelegate;
+
++ (BOOL)wasBorderedBar;
+
+@end
View
16 lib/BWToolkitFramework.framework/Versions/A/Headers/BWAnchoredButtonCell.h
@@ -0,0 +1,16 @@
+//
+// BWAnchoredButtonCell.h
+// BWToolkit
+//
+// Created by Brandon Walkin (www.brandonwalkin.com)
+// All code is provided under the New BSD license.
+//
+
+#import <Cocoa/Cocoa.h>
+
+@interface BWAnchoredButtonCell : NSButtonCell
+{
+
+}
+
+@end
View
21 lib/BWToolkitFramework.framework/Versions/A/Headers/BWAnchoredPopUpButton.h
@@ -0,0 +1,21 @@
+//
+// BWAnchoredPopUpButton.h
+// BWToolkit
+//
+// Created by Brandon Walkin (www.brandonwalkin.com)
+// All code is provided under the New BSD license.
+//
+
+#import <Cocoa/Cocoa.h>
+
+@interface BWAnchoredPopUpButton : NSPopUpButton
+{
+ BOOL isAtLeftEdgeOfBar;
+ BOOL isAtRightEdgeOfBar;
+ NSPoint topAndLeftInset;
+}
+
+@property BOOL isAtLeftEdgeOfBar;
+@property BOOL isAtRightEdgeOfBar;
+
+@end
View
16 lib/BWToolkitFramework.framework/Versions/A/Headers/BWAnchoredPopUpButtonCell.h
@@ -0,0 +1,16 @@
+//
+// BWAnchoredPopUpButtonCell.h
+// BWToolkit
+//
+// Created by Brandon Walkin (www.brandonwalkin.com)
+// All code is provided under the New BSD license.
+//
+
+#import <Cocoa/Cocoa.h>
+
+@interface BWAnchoredPopUpButtonCell : NSPopUpButtonCell
+{
+
+}
+
+@end
View
24 lib/BWToolkitFramework.framework/Versions/A/Headers/BWGradientBox.h
@@ -0,0 +1,24 @@
+//
+// BWGradientBox.h
+// BWToolkit
+//
+// Created by Brandon Walkin (www.brandonwalkin.com)
+// All code is provided under the New BSD license.
+//
+
+#import <Cocoa/Cocoa.h>
+
+@interface BWGradientBox : NSView
+{
+ NSColor *fillStartingColor, *fillEndingColor, *fillColor;
+ NSColor *topBorderColor, *bottomBorderColor;
+ float topInsetAlpha, bottomInsetAlpha;
+
+ BOOL hasTopBorder, hasBottomBorder, hasGradient;
+}
+
+@property (nonatomic, retain) NSColor *fillStartingColor, *fillEndingColor, *fillColor, *topBorderColor, *bottomBorderColor;
+@property float topInsetAlpha, bottomInsetAlpha;
+@property BOOL hasTopBorder, hasBottomBorder, hasGradient;
+
+@end
View
18 lib/BWToolkitFramework.framework/Versions/A/Headers/BWHyperlinkButton.h
@@ -0,0 +1,18 @@
+//
+// BWHyperlinkButton.h
+// BWToolkit
+//
+// Created by Brandon Walkin (www.brandonwalkin.com)
+// All code is provided under the New BSD license.
+//
+
+#import <Cocoa/Cocoa.h>
+
+@interface BWHyperlinkButton : NSButton
+{
+ NSString *urlString;
+}
+
+@property (copy, nonatomic) NSString *urlString;
+
+@end
View
16 lib/BWToolkitFramework.framework/Versions/A/Headers/BWHyperlinkButtonCell.h
@@ -0,0 +1,16 @@
+//
+// BWHyperlinkButtonCell.h
+// BWToolkit
+//
+// Created by Brandon Walkin (www.brandonwalkin.com)
+// All code is provided under the New BSD license.
+//
+
+#import <Cocoa/Cocoa.h>
+
+@interface BWHyperlinkButtonCell : NSButtonCell
+{
+
+}
+
+@end
View
16 lib/BWToolkitFramework.framework/Versions/A/Headers/BWInsetTextField.h
@@ -0,0 +1,16 @@
+//
+// BWInsetTextField.h
+// BWToolkit
+//
+// Created by Brandon Walkin (www.brandonwalkin.com)
+// All code is provided under the New BSD license.
+//
+
+#import <Cocoa/Cocoa.h>
+
+@interface BWInsetTextField : NSTextField
+{
+
+}
+
+@end
View
36 lib/BWToolkitFramework.framework/Versions/A/Headers/BWSelectableToolbar.h
@@ -0,0 +1,36 @@
+//
+// BWSelectableToolbar.h
+// BWToolkit
+//
+// Created by Brandon Walkin (www.brandonwalkin.com)
+// All code is provided under the New BSD license.
+//
+
+#import <Cocoa/Cocoa.h>
+
+@class BWSelectableToolbarHelper;
+
+// Notification that gets sent when a toolbar item has been clicked. You can get the button that was clicked by getting the object
+// for the key @"BWClickedItem" in the supplied userInfo dictionary.
+extern NSString * const BWSelectableToolbarItemClickedNotification;
+
+@interface BWSelectableToolbar : NSToolbar
+{
+ BWSelectableToolbarHelper *helper;
+ NSMutableArray *itemIdentifiers;
+ NSMutableDictionary *itemsByIdentifier, *enabledByIdentifier;
+ BOOL inIB;
+
+ // For the IB inspector
+ int selectedIndex;
+ BOOL isPreferencesToolbar;
+}
+
+// Call one of these methods to set the active tab.
+- (void)setSelectedItemIdentifier:(NSString *)itemIdentifier; // Use if you want an action in the tabbed window to change the tab.
+- (void)setSelectedItemIdentifierWithoutAnimation:(NSString *)itemIdentifier; // Use if you want to show the window with a certain item selected.
+
+// Programmatically disable or enable a toolbar item.
+- (void)setEnabled:(BOOL)flag forIdentifier:(NSString *)itemIdentifier;
+
+@end
View
31 lib/BWToolkitFramework.framework/Versions/A/Headers/BWSheetController.h
@@ -0,0 +1,31 @@
+//
+// BWSheetController.h
+// BWToolkit
+//
+// Created by Brandon Walkin (www.brandonwalkin.com)
+// All code is provided under the New BSD license.
+//
+
+#import <Cocoa/Cocoa.h>
+
+@interface BWSheetController : NSObject
+{
+ NSWindow *sheet;
+ NSWindow *parentWindow;
+ id delegate;
+}
+
+@property (nonatomic, retain) IBOutlet NSWindow *sheet, *parentWindow;
+@property (nonatomic, retain) IBOutlet id delegate;
+
+- (IBAction)openSheet:(id)sender;
+- (IBAction)closeSheet:(id)sender;
+- (IBAction)messageDelegateAndCloseSheet:(id)sender;
+
+// The optional delegate should implement the method:
+// - (BOOL)shouldCloseSheet:(id)sender
+// Return YES if you want the sheet to close after the button click, NO if it shouldn't close. The sender
+// object is the button that requested the close. This is helpful because in the event that there are multiple buttons
+// hooked up to the messageDelegateAndCloseSheet: method, you can distinguish which button called the method.
+
+@end
View
44 lib/BWToolkitFramework.framework/Versions/A/Headers/BWSplitView.h
@@ -0,0 +1,44 @@
+//
+// BWSplitView.h
+// BWToolkit
+//
+// Created by Brandon Walkin (www.brandonwalkin.com) and Fraser Kuyvenhoven.
+// All code is provided under the New BSD license.
+//
+
+#import <Cocoa/Cocoa.h>
+
+@interface BWSplitView : NSSplitView
+{
+ NSColor *color;
+ BOOL colorIsEnabled, checkboxIsEnabled, dividerCanCollapse, collapsibleSubviewCollapsed;
+ id secondaryDelegate;
+ NSMutableDictionary *minValues, *maxValues, *minUnits, *maxUnits;
+ NSMutableDictionary *resizableSubviewPreferredProportion, *nonresizableSubviewPreferredSize;
+ NSArray *stateForLastPreferredCalculations;
+ int collapsiblePopupSelection;
+ float uncollapsedSize;
+
+ // Collapse button
+ NSButton *toggleCollapseButton;
+ BOOL isAnimating;
+}
+
+@property (retain) NSMutableDictionary *minValues, *maxValues, *minUnits, *maxUnits;
+@property (retain) NSMutableDictionary *resizableSubviewPreferredProportion, *nonresizableSubviewPreferredSize;
+@property (retain) NSArray *stateForLastPreferredCalculations;
+@property (retain) NSButton *toggleCollapseButton;
+@property BOOL collapsibleSubviewCollapsed;
+@property int collapsiblePopupSelection;
+@property BOOL dividerCanCollapse;
+
+// The split view divider color
+@property (copy) NSColor *color;
+
+// Flag for whether a custom divider color is enabled. If not, the standard divider color is used.
+@property BOOL colorIsEnabled;
+
+// Call this method to collapse or expand a subview configured as collapsible in the IB inspector.
+- (IBAction)toggleCollapse:(id)sender;
+
+@end
View
33 lib/BWToolkitFramework.framework/Versions/A/Headers/BWStyledTextField.h
@@ -0,0 +1,33 @@
+//
+// BWStyledTextField.h
+// BWToolkit
+//
+// Created by Brandon Walkin (www.brandonwalkin.com)
+// All code is provided under the New BSD license.
+//
+
+#import <Cocoa/Cocoa.h>
+
+@interface BWStyledTextField : NSTextField
+{
+
+}
+