cocoa 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (401) hide show
  1. data/Gemfile +11 -0
  2. data/LICENSE +21 -0
  3. data/README.md +4 -0
  4. data/Rakefile +36 -0
  5. data/VERSION +1 -0
  6. data/cocoa.gemspec +457 -0
  7. data/examples/window.rb +41 -0
  8. data/lib/cocoa.rb +6722 -0
  9. data/lib/cocoa/bindings/CAAnimation.rb +15 -0
  10. data/lib/cocoa/bindings/CAAnimationGroup.rb +8 -0
  11. data/lib/cocoa/bindings/CABasicAnimation.rb +12 -0
  12. data/lib/cocoa/bindings/CAConstraint.rb +13 -0
  13. data/lib/cocoa/bindings/CAConstraintLayoutManager.rb +7 -0
  14. data/lib/cocoa/bindings/CAEmitterCell.rb +77 -0
  15. data/lib/cocoa/bindings/CAEmitterLayer.rb +36 -0
  16. data/lib/cocoa/bindings/CAGradientLayer.rb +16 -0
  17. data/lib/cocoa/bindings/CAKeyframeAnimation.rb +24 -0
  18. data/lib/cocoa/bindings/CALayer.rb +149 -0
  19. data/lib/cocoa/bindings/CAMediaTimingFunction.rb +10 -0
  20. data/lib/cocoa/bindings/CAOpenGLLayer.rb +14 -0
  21. data/lib/cocoa/bindings/CAPropertyAnimation.rb +15 -0
  22. data/lib/cocoa/bindings/CARemoteLayerClient.rb +11 -0
  23. data/lib/cocoa/bindings/CARemoteLayerServer.rb +8 -0
  24. data/lib/cocoa/bindings/CARenderer.rb +17 -0
  25. data/lib/cocoa/bindings/CAReplicatorLayer.rb +24 -0
  26. data/lib/cocoa/bindings/CAScrollLayer.rb +10 -0
  27. data/lib/cocoa/bindings/CAShapeLayer.rb +30 -0
  28. data/lib/cocoa/bindings/CATextLayer.rb +20 -0
  29. data/lib/cocoa/bindings/CATiledLayer.rb +13 -0
  30. data/lib/cocoa/bindings/CATransaction.rb +21 -0
  31. data/lib/cocoa/bindings/CATransition.rb +16 -0
  32. data/lib/cocoa/bindings/CAValueFunction.rb +8 -0
  33. data/lib/cocoa/bindings/CIColor.rb +7 -0
  34. data/lib/cocoa/bindings/CIFilter.rb +10 -0
  35. data/lib/cocoa/bindings/CIImage.rb +9 -0
  36. data/lib/cocoa/bindings/NSATSTypesetter.rb +51 -0
  37. data/lib/cocoa/bindings/NSActionCell.rb +12 -0
  38. data/lib/cocoa/bindings/NSAffineTransform.rb +23 -0
  39. data/lib/cocoa/bindings/NSAlert.rb +33 -0
  40. data/lib/cocoa/bindings/NSAnimation.rb +32 -0
  41. data/lib/cocoa/bindings/NSAnimationContext.rb +18 -0
  42. data/lib/cocoa/bindings/NSAppleEventDescriptor.rb +47 -0
  43. data/lib/cocoa/bindings/NSAppleEventManager.rb +17 -0
  44. data/lib/cocoa/bindings/NSAppleScript.rb +14 -0
  45. data/lib/cocoa/bindings/NSApplication.rb +105 -0
  46. data/lib/cocoa/bindings/NSArchiver.rb +15 -0
  47. data/lib/cocoa/bindings/NSArray.rb +59 -0
  48. data/lib/cocoa/bindings/NSArrayController.rb +53 -0
  49. data/lib/cocoa/bindings/NSAssertionHandler.rb +9 -0
  50. data/lib/cocoa/bindings/NSAttributedString.rb +54 -0
  51. data/lib/cocoa/bindings/NSAutoreleasePool.rb +10 -0
  52. data/lib/cocoa/bindings/NSBezierPath.rb +76 -0
  53. data/lib/cocoa/bindings/NSBitmapImageRep.rb +45 -0
  54. data/lib/cocoa/bindings/NSBlockOperation.rb +9 -0
  55. data/lib/cocoa/bindings/NSBox.rb +36 -0
  56. data/lib/cocoa/bindings/NSBrowser.rb +126 -0
  57. data/lib/cocoa/bindings/NSBrowserCell.rb +19 -0
  58. data/lib/cocoa/bindings/NSBundle.rb +66 -0
  59. data/lib/cocoa/bindings/NSButton.rb +45 -0
  60. data/lib/cocoa/bindings/NSButtonCell.rb +60 -0
  61. data/lib/cocoa/bindings/NSByteCountFormatter.rb +24 -0
  62. data/lib/cocoa/bindings/NSCIImageRep.rb +9 -0
  63. data/lib/cocoa/bindings/NSCache.rb +20 -0
  64. data/lib/cocoa/bindings/NSCachedImageRep.rb +10 -0
  65. data/lib/cocoa/bindings/NSCachedURLResponse.rb +11 -0
  66. data/lib/cocoa/bindings/NSCalendar.rb +25 -0
  67. data/lib/cocoa/bindings/NSCalendarDate.rb +28 -0
  68. data/lib/cocoa/bindings/NSCell.rb +157 -0
  69. data/lib/cocoa/bindings/NSCharacterSet.rb +31 -0
  70. data/lib/cocoa/bindings/NSClassDescription.rb +13 -0
  71. data/lib/cocoa/bindings/NSClipView.rb +23 -0
  72. data/lib/cocoa/bindings/NSCloneCommand.rb +8 -0
  73. data/lib/cocoa/bindings/NSCloseCommand.rb +7 -0
  74. data/lib/cocoa/bindings/NSCoder.rb +63 -0
  75. data/lib/cocoa/bindings/NSCollectionView.rb +34 -0
  76. data/lib/cocoa/bindings/NSCollectionViewItem.rb +14 -0
  77. data/lib/cocoa/bindings/NSColor.rb +110 -0
  78. data/lib/cocoa/bindings/NSColorList.rb +18 -0
  79. data/lib/cocoa/bindings/NSColorPanel.rb +26 -0
  80. data/lib/cocoa/bindings/NSColorPicker.rb +16 -0
  81. data/lib/cocoa/bindings/NSColorSpace.rb +25 -0
  82. data/lib/cocoa/bindings/NSColorWell.rb +15 -0
  83. data/lib/cocoa/bindings/NSComboBox.rb +43 -0
  84. data/lib/cocoa/bindings/NSComboBoxCell.rb +42 -0
  85. data/lib/cocoa/bindings/NSComparisonPredicate.rb +14 -0
  86. data/lib/cocoa/bindings/NSCompoundPredicate.rb +12 -0
  87. data/lib/cocoa/bindings/NSCondition.rb +12 -0
  88. data/lib/cocoa/bindings/NSConditionLock.rb +15 -0
  89. data/lib/cocoa/bindings/NSConnection.rb +42 -0
  90. data/lib/cocoa/bindings/NSControl.rb +74 -0
  91. data/lib/cocoa/bindings/NSController.rb +12 -0
  92. data/lib/cocoa/bindings/NSCountedSet.rb +13 -0
  93. data/lib/cocoa/bindings/NSCreateCommand.rb +8 -0
  94. data/lib/cocoa/bindings/NSCursor.rb +42 -0
  95. data/lib/cocoa/bindings/NSCustomImageRep.rb +11 -0
  96. data/lib/cocoa/bindings/NSData.rb +28 -0
  97. data/lib/cocoa/bindings/NSDataDetector.rb +9 -0
  98. data/lib/cocoa/bindings/NSDate.rb +36 -0
  99. data/lib/cocoa/bindings/NSDateComponents.rb +41 -0
  100. data/lib/cocoa/bindings/NSDateFormatter.rb +81 -0
  101. data/lib/cocoa/bindings/NSDatePicker.rb +38 -0
  102. data/lib/cocoa/bindings/NSDatePickerCell.rb +34 -0
  103. data/lib/cocoa/bindings/NSDecimalNumber.rb +31 -0
  104. data/lib/cocoa/bindings/NSDecimalNumberHandler.rb +9 -0
  105. data/lib/cocoa/bindings/NSDeleteCommand.rb +8 -0
  106. data/lib/cocoa/bindings/NSDictionary.rb +59 -0
  107. data/lib/cocoa/bindings/NSDictionaryController.rb +19 -0
  108. data/lib/cocoa/bindings/NSDirectoryEnumerator.rb +11 -0
  109. data/lib/cocoa/bindings/NSDistantObject.rb +12 -0
  110. data/lib/cocoa/bindings/NSDistantObjectRequest.rb +10 -0
  111. data/lib/cocoa/bindings/NSDistributedLock.rb +12 -0
  112. data/lib/cocoa/bindings/NSDistributedNotificationCenter.rb +13 -0
  113. data/lib/cocoa/bindings/NSDockTile.rb +15 -0
  114. data/lib/cocoa/bindings/NSDocument.rb +148 -0
  115. data/lib/cocoa/bindings/NSDocumentController.rb +56 -0
  116. data/lib/cocoa/bindings/NSDraggingImageComponent.rb +14 -0
  117. data/lib/cocoa/bindings/NSDraggingItem.rb +13 -0
  118. data/lib/cocoa/bindings/NSDraggingSession.rb +16 -0
  119. data/lib/cocoa/bindings/NSDrawer.rb +31 -0
  120. data/lib/cocoa/bindings/NSEPSImageRep.rb +11 -0
  121. data/lib/cocoa/bindings/NSEnumerator.rb +8 -0
  122. data/lib/cocoa/bindings/NSError.rb +17 -0
  123. data/lib/cocoa/bindings/NSEvent.rb +80 -0
  124. data/lib/cocoa/bindings/NSException.rb +15 -0
  125. data/lib/cocoa/bindings/NSExpression.rb +32 -0
  126. data/lib/cocoa/bindings/NSFileCoordinator.rb +15 -0
  127. data/lib/cocoa/bindings/NSFileHandle.rb +40 -0
  128. data/lib/cocoa/bindings/NSFileManager.rb +67 -0
  129. data/lib/cocoa/bindings/NSFileVersion.rb +25 -0
  130. data/lib/cocoa/bindings/NSFileWrapper.rb +41 -0
  131. data/lib/cocoa/bindings/NSFont.rb +60 -0
  132. data/lib/cocoa/bindings/NSFontCollection.rb +19 -0
  133. data/lib/cocoa/bindings/NSFontDescriptor.rb +23 -0
  134. data/lib/cocoa/bindings/NSFontManager.rb +52 -0
  135. data/lib/cocoa/bindings/NSFontPanel.rb +16 -0
  136. data/lib/cocoa/bindings/NSForm.rb +27 -0
  137. data/lib/cocoa/bindings/NSFormCell.rb +27 -0
  138. data/lib/cocoa/bindings/NSFormatter.rb +11 -0
  139. data/lib/cocoa/bindings/NSGarbageCollector.rb +16 -0
  140. data/lib/cocoa/bindings/NSGlyphGenerator.rb +8 -0
  141. data/lib/cocoa/bindings/NSGlyphInfo.rb +12 -0
  142. data/lib/cocoa/bindings/NSGradient.rb +17 -0
  143. data/lib/cocoa/bindings/NSGraphicsContext.rb +34 -0
  144. data/lib/cocoa/bindings/NSHTTPCookie.rb +23 -0
  145. data/lib/cocoa/bindings/NSHTTPCookieStorage.rb +15 -0
  146. data/lib/cocoa/bindings/NSHTTPURLResponse.rb +10 -0
  147. data/lib/cocoa/bindings/NSHashTable.rb +28 -0
  148. data/lib/cocoa/bindings/NSHelpManager.rb +16 -0
  149. data/lib/cocoa/bindings/NSHost.rb +18 -0
  150. data/lib/cocoa/bindings/NSImage.rb +83 -0
  151. data/lib/cocoa/bindings/NSImageCell.rb +12 -0
  152. data/lib/cocoa/bindings/NSImageRep.rb +45 -0
  153. data/lib/cocoa/bindings/NSImageView.rb +20 -0
  154. data/lib/cocoa/bindings/NSIndexPath.rb +16 -0
  155. data/lib/cocoa/bindings/NSIndexSet.rb +39 -0
  156. data/lib/cocoa/bindings/NSIndexSpecifier.rb +9 -0
  157. data/lib/cocoa/bindings/NSInputManager.rb +20 -0
  158. data/lib/cocoa/bindings/NSInputServer.rb +7 -0
  159. data/lib/cocoa/bindings/NSInputStream.rb +15 -0
  160. data/lib/cocoa/bindings/NSInvocation.rb +20 -0
  161. data/lib/cocoa/bindings/NSInvocationOperation.rb +10 -0
  162. data/lib/cocoa/bindings/NSJSONSerialization.rb +11 -0
  163. data/lib/cocoa/bindings/NSKeyedArchiver.rb +27 -0
  164. data/lib/cocoa/bindings/NSKeyedUnarchiver.rb +25 -0
  165. data/lib/cocoa/bindings/NSLayoutConstraint.rb +20 -0
  166. data/lib/cocoa/bindings/NSLayoutManager.rb +131 -0
  167. data/lib/cocoa/bindings/NSLevelIndicator.rb +22 -0
  168. data/lib/cocoa/bindings/NSLevelIndicatorCell.rb +26 -0
  169. data/lib/cocoa/bindings/NSLinguisticTagger.rb +19 -0
  170. data/lib/cocoa/bindings/NSLocale.rb +27 -0
  171. data/lib/cocoa/bindings/NSLock.rb +10 -0
  172. data/lib/cocoa/bindings/NSLogicalTest.rb +9 -0
  173. data/lib/cocoa/bindings/NSMachBootstrapServer.rb +10 -0
  174. data/lib/cocoa/bindings/NSMachPort.rb +13 -0
  175. data/lib/cocoa/bindings/NSMapTable.rb +27 -0
  176. data/lib/cocoa/bindings/NSMatrix.rb +97 -0
  177. data/lib/cocoa/bindings/NSMenu.rb +73 -0
  178. data/lib/cocoa/bindings/NSMenuItem.rb +62 -0
  179. data/lib/cocoa/bindings/NSMenuItemCell.rb +27 -0
  180. data/lib/cocoa/bindings/NSMessagePortNameServer.rb +8 -0
  181. data/lib/cocoa/bindings/NSMetadataItem.rb +9 -0
  182. data/lib/cocoa/bindings/NSMetadataQuery.rb +35 -0
  183. data/lib/cocoa/bindings/NSMetadataQueryAttributeValueTuple.rb +9 -0
  184. data/lib/cocoa/bindings/NSMetadataQueryResultGroup.rb +12 -0
  185. data/lib/cocoa/bindings/NSMethodSignature.rb +13 -0
  186. data/lib/cocoa/bindings/NSMoveCommand.rb +8 -0
  187. data/lib/cocoa/bindings/NSMovie.rb +8 -0
  188. data/lib/cocoa/bindings/NSMutableArray.rb +33 -0
  189. data/lib/cocoa/bindings/NSMutableAttributedString.rb +31 -0
  190. data/lib/cocoa/bindings/NSMutableCharacterSet.rb +13 -0
  191. data/lib/cocoa/bindings/NSMutableData.rb +18 -0
  192. data/lib/cocoa/bindings/NSMutableDictionary.rb +16 -0
  193. data/lib/cocoa/bindings/NSMutableFontCollection.rb +10 -0
  194. data/lib/cocoa/bindings/NSMutableIndexSet.rb +14 -0
  195. data/lib/cocoa/bindings/NSMutableOrderedSet.rb +34 -0
  196. data/lib/cocoa/bindings/NSMutableParagraphStyle.rb +28 -0
  197. data/lib/cocoa/bindings/NSMutableSet.rb +17 -0
  198. data/lib/cocoa/bindings/NSMutableString.rb +15 -0
  199. data/lib/cocoa/bindings/NSMutableURLRequest.rb +20 -0
  200. data/lib/cocoa/bindings/NSNameSpecifier.rb +9 -0
  201. data/lib/cocoa/bindings/NSNetService.rb +31 -0
  202. data/lib/cocoa/bindings/NSNetServiceBrowser.rb +16 -0
  203. data/lib/cocoa/bindings/NSNib.rb +12 -0
  204. data/lib/cocoa/bindings/NSNibConnector.rb +14 -0
  205. data/lib/cocoa/bindings/NSNibControlConnector.rb +7 -0
  206. data/lib/cocoa/bindings/NSNibOutletConnector.rb +7 -0
  207. data/lib/cocoa/bindings/NSNotification.rb +10 -0
  208. data/lib/cocoa/bindings/NSNotificationCenter.rb +12 -0
  209. data/lib/cocoa/bindings/NSNotificationQueue.rb +10 -0
  210. data/lib/cocoa/bindings/NSNull.rb +7 -0
  211. data/lib/cocoa/bindings/NSNumber.rb +56 -0
  212. data/lib/cocoa/bindings/NSNumberFormatter.rb +140 -0
  213. data/lib/cocoa/bindings/NSObject.rb +609 -0
  214. data/lib/cocoa/bindings/NSObjectController.rb +37 -0
  215. data/lib/cocoa/bindings/NSOpenGLContext.rb +30 -0
  216. data/lib/cocoa/bindings/NSOpenGLLayer.rb +16 -0
  217. data/lib/cocoa/bindings/NSOpenGLPixelBuffer.rb +14 -0
  218. data/lib/cocoa/bindings/NSOpenGLPixelFormat.rb +14 -0
  219. data/lib/cocoa/bindings/NSOpenGLView.rb +16 -0
  220. data/lib/cocoa/bindings/NSOpenPanel.rb +21 -0
  221. data/lib/cocoa/bindings/NSOperation.rb +25 -0
  222. data/lib/cocoa/bindings/NSOperationQueue.rb +21 -0
  223. data/lib/cocoa/bindings/NSOrderedSet.rb +53 -0
  224. data/lib/cocoa/bindings/NSOrthography.rb +15 -0
  225. data/lib/cocoa/bindings/NSOutlineView.rb +36 -0
  226. data/lib/cocoa/bindings/NSOutputStream.rb +16 -0
  227. data/lib/cocoa/bindings/NSPDFImageRep.rb +13 -0
  228. data/lib/cocoa/bindings/NSPICTImageRep.rb +10 -0
  229. data/lib/cocoa/bindings/NSPageController.rb +20 -0
  230. data/lib/cocoa/bindings/NSPageLayout.rb +18 -0
  231. data/lib/cocoa/bindings/NSPanel.rb +12 -0
  232. data/lib/cocoa/bindings/NSParagraphStyle.rb +27 -0
  233. data/lib/cocoa/bindings/NSPasteboard.rb +37 -0
  234. data/lib/cocoa/bindings/NSPasteboardItem.rb +15 -0
  235. data/lib/cocoa/bindings/NSPathCell.rb +32 -0
  236. data/lib/cocoa/bindings/NSPathComponentCell.rb +10 -0
  237. data/lib/cocoa/bindings/NSPathControl.rb +22 -0
  238. data/lib/cocoa/bindings/NSPersistentDocument.rb +14 -0
  239. data/lib/cocoa/bindings/NSPipe.rb +10 -0
  240. data/lib/cocoa/bindings/NSPointerArray.rb +24 -0
  241. data/lib/cocoa/bindings/NSPointerFunctions.rb +24 -0
  242. data/lib/cocoa/bindings/NSPopUpButton.rb +42 -0
  243. data/lib/cocoa/bindings/NSPopUpButtonCell.rb +53 -0
  244. data/lib/cocoa/bindings/NSPopover.rb +24 -0
  245. data/lib/cocoa/bindings/NSPort.rb +17 -0
  246. data/lib/cocoa/bindings/NSPortCoder.rb +14 -0
  247. data/lib/cocoa/bindings/NSPortMessage.rb +13 -0
  248. data/lib/cocoa/bindings/NSPortNameServer.rb +10 -0
  249. data/lib/cocoa/bindings/NSPositionalSpecifier.rb +15 -0
  250. data/lib/cocoa/bindings/NSPredicate.rb +12 -0
  251. data/lib/cocoa/bindings/NSPredicateEditor.rb +8 -0
  252. data/lib/cocoa/bindings/NSPredicateEditorRowTemplate.rb +21 -0
  253. data/lib/cocoa/bindings/NSPrintInfo.rb +52 -0
  254. data/lib/cocoa/bindings/NSPrintOperation.rb +43 -0
  255. data/lib/cocoa/bindings/NSPrintPanel.rb +26 -0
  256. data/lib/cocoa/bindings/NSPrinter.rb +32 -0
  257. data/lib/cocoa/bindings/NSProcessInfo.rb +27 -0
  258. data/lib/cocoa/bindings/NSProgressIndicator.rb +33 -0
  259. data/lib/cocoa/bindings/NSPropertyListSerialization.rb +13 -0
  260. data/lib/cocoa/bindings/NSProtocolChecker.rb +10 -0
  261. data/lib/cocoa/bindings/NSProxy.rb +15 -0
  262. data/lib/cocoa/bindings/NSQuitCommand.rb +7 -0
  263. data/lib/cocoa/bindings/NSRangeSpecifier.rb +11 -0
  264. data/lib/cocoa/bindings/NSRecursiveLock.rb +10 -0
  265. data/lib/cocoa/bindings/NSRegularExpression.rb +21 -0
  266. data/lib/cocoa/bindings/NSRelativeSpecifier.rb +11 -0
  267. data/lib/cocoa/bindings/NSResponder.rb +162 -0
  268. data/lib/cocoa/bindings/NSRuleEditor.rb +48 -0
  269. data/lib/cocoa/bindings/NSRulerMarker.rb +25 -0
  270. data/lib/cocoa/bindings/NSRulerView.rb +38 -0
  271. data/lib/cocoa/bindings/NSRunLoop.rb +22 -0
  272. data/lib/cocoa/bindings/NSRunningApplication.rb +29 -0
  273. data/lib/cocoa/bindings/NSSavePanel.rb +53 -0
  274. data/lib/cocoa/bindings/NSScanner.rb +33 -0
  275. data/lib/cocoa/bindings/NSScreen.rb +20 -0
  276. data/lib/cocoa/bindings/NSScriptClassDescription.rb +27 -0
  277. data/lib/cocoa/bindings/NSScriptCoercionHandler.rb +9 -0
  278. data/lib/cocoa/bindings/NSScriptCommand.rb +31 -0
  279. data/lib/cocoa/bindings/NSScriptCommandDescription.rb +20 -0
  280. data/lib/cocoa/bindings/NSScriptExecutionContext.rb +13 -0
  281. data/lib/cocoa/bindings/NSScriptObjectSpecifier.rb +29 -0
  282. data/lib/cocoa/bindings/NSScriptSuiteRegistry.rb +21 -0
  283. data/lib/cocoa/bindings/NSScriptWhoseTest.rb +7 -0
  284. data/lib/cocoa/bindings/NSScrollView.rb +83 -0
  285. data/lib/cocoa/bindings/NSScroller.rb +35 -0
  286. data/lib/cocoa/bindings/NSSearchField.rb +10 -0
  287. data/lib/cocoa/bindings/NSSearchFieldCell.rb +27 -0
  288. data/lib/cocoa/bindings/NSSecureTextFieldCell.rb +8 -0
  289. data/lib/cocoa/bindings/NSSegmentedCell.rb +37 -0
  290. data/lib/cocoa/bindings/NSSegmentedControl.rb +27 -0
  291. data/lib/cocoa/bindings/NSSet.rb +39 -0
  292. data/lib/cocoa/bindings/NSSetCommand.rb +8 -0
  293. data/lib/cocoa/bindings/NSShadow.rb +14 -0
  294. data/lib/cocoa/bindings/NSSharingService.rb +16 -0
  295. data/lib/cocoa/bindings/NSSharingServicePicker.rb +10 -0
  296. data/lib/cocoa/bindings/NSSlider.rb +36 -0
  297. data/lib/cocoa/bindings/NSSliderCell.rb +40 -0
  298. data/lib/cocoa/bindings/NSSocketPort.rb +16 -0
  299. data/lib/cocoa/bindings/NSSocketPortNameServer.rb +12 -0
  300. data/lib/cocoa/bindings/NSSortDescriptor.rb +14 -0
  301. data/lib/cocoa/bindings/NSSound.rb +36 -0
  302. data/lib/cocoa/bindings/NSSpecifierTest.rb +7 -0
  303. data/lib/cocoa/bindings/NSSpeechRecognizer.rb +19 -0
  304. data/lib/cocoa/bindings/NSSpeechSynthesizer.rb +31 -0
  305. data/lib/cocoa/bindings/NSSpellChecker.rb +51 -0
  306. data/lib/cocoa/bindings/NSSpellServer.rb +11 -0
  307. data/lib/cocoa/bindings/NSSplitView.rb +26 -0
  308. data/lib/cocoa/bindings/NSStatusBar.rb +11 -0
  309. data/lib/cocoa/bindings/NSStatusItem.rb +36 -0
  310. data/lib/cocoa/bindings/NSStepper.rb +16 -0
  311. data/lib/cocoa/bindings/NSStepperCell.rb +16 -0
  312. data/lib/cocoa/bindings/NSStream.rb +17 -0
  313. data/lib/cocoa/bindings/NSString.rb +126 -0
  314. data/lib/cocoa/bindings/NSTabView.rb +40 -0
  315. data/lib/cocoa/bindings/NSTabViewItem.rb +23 -0
  316. data/lib/cocoa/bindings/NSTableCellView.rb +17 -0
  317. data/lib/cocoa/bindings/NSTableColumn.rb +35 -0
  318. data/lib/cocoa/bindings/NSTableHeaderCell.rb +8 -0
  319. data/lib/cocoa/bindings/NSTableHeaderView.rb +13 -0
  320. data/lib/cocoa/bindings/NSTableRowView.rb +31 -0
  321. data/lib/cocoa/bindings/NSTableView.rb +147 -0
  322. data/lib/cocoa/bindings/NSTask.rb +34 -0
  323. data/lib/cocoa/bindings/NSText.rb +72 -0
  324. data/lib/cocoa/bindings/NSTextAlternatives.rb +10 -0
  325. data/lib/cocoa/bindings/NSTextAttachment.rb +11 -0
  326. data/lib/cocoa/bindings/NSTextBlock.rb +25 -0
  327. data/lib/cocoa/bindings/NSTextCheckingResult.rb +35 -0
  328. data/lib/cocoa/bindings/NSTextContainer.rb +23 -0
  329. data/lib/cocoa/bindings/NSTextField.rb +38 -0
  330. data/lib/cocoa/bindings/NSTextFieldCell.rb +22 -0
  331. data/lib/cocoa/bindings/NSTextFinder.rb +23 -0
  332. data/lib/cocoa/bindings/NSTextInputContext.rb +22 -0
  333. data/lib/cocoa/bindings/NSTextList.rb +12 -0
  334. data/lib/cocoa/bindings/NSTextStorage.rb +31 -0
  335. data/lib/cocoa/bindings/NSTextTab.rb +12 -0
  336. data/lib/cocoa/bindings/NSTextTable.rb +17 -0
  337. data/lib/cocoa/bindings/NSTextTableBlock.rb +12 -0
  338. data/lib/cocoa/bindings/NSTextView.rb +191 -0
  339. data/lib/cocoa/bindings/NSThread.rb +34 -0
  340. data/lib/cocoa/bindings/NSTimeZone.rb +34 -0
  341. data/lib/cocoa/bindings/NSTimer.rb +16 -0
  342. data/lib/cocoa/bindings/NSTokenField.rb +16 -0
  343. data/lib/cocoa/bindings/NSTokenFieldCell.rb +16 -0
  344. data/lib/cocoa/bindings/NSToolbar.rb +39 -0
  345. data/lib/cocoa/bindings/NSToolbarItem.rb +39 -0
  346. data/lib/cocoa/bindings/NSToolbarItemGroup.rb +8 -0
  347. data/lib/cocoa/bindings/NSTouch.rb +12 -0
  348. data/lib/cocoa/bindings/NSTrackingArea.rb +11 -0
  349. data/lib/cocoa/bindings/NSTreeController.rb +51 -0
  350. data/lib/cocoa/bindings/NSTreeNode.rb +16 -0
  351. data/lib/cocoa/bindings/NSTypesetter.rb +66 -0
  352. data/lib/cocoa/bindings/NSURL.rb +62 -0
  353. data/lib/cocoa/bindings/NSURLAuthenticationChallenge.rb +14 -0
  354. data/lib/cocoa/bindings/NSURLCache.rb +19 -0
  355. data/lib/cocoa/bindings/NSURLConnection.rb +18 -0
  356. data/lib/cocoa/bindings/NSURLCredential.rb +18 -0
  357. data/lib/cocoa/bindings/NSURLCredentialStorage.rb +13 -0
  358. data/lib/cocoa/bindings/NSURLDownload.rb +15 -0
  359. data/lib/cocoa/bindings/NSURLHandle.rb +30 -0
  360. data/lib/cocoa/bindings/NSURLProtectionSpace.rb +18 -0
  361. data/lib/cocoa/bindings/NSURLProtocol.rb +20 -0
  362. data/lib/cocoa/bindings/NSURLRequest.rb +21 -0
  363. data/lib/cocoa/bindings/NSURLResponse.rb +12 -0
  364. data/lib/cocoa/bindings/NSUUID.rb +12 -0
  365. data/lib/cocoa/bindings/NSUbiquitousKeyValueStore.rb +26 -0
  366. data/lib/cocoa/bindings/NSUnarchiver.rb +18 -0
  367. data/lib/cocoa/bindings/NSUndoManager.rb +39 -0
  368. data/lib/cocoa/bindings/NSUniqueIDSpecifier.rb +9 -0
  369. data/lib/cocoa/bindings/NSUserAppleScriptTask.rb +7 -0
  370. data/lib/cocoa/bindings/NSUserAutomatorTask.rb +9 -0
  371. data/lib/cocoa/bindings/NSUserDefaults.rb +42 -0
  372. data/lib/cocoa/bindings/NSUserDefaultsController.rb +18 -0
  373. data/lib/cocoa/bindings/NSUserNotification.rb +32 -0
  374. data/lib/cocoa/bindings/NSUserNotificationCenter.rb +17 -0
  375. data/lib/cocoa/bindings/NSUserScriptTask.rb +9 -0
  376. data/lib/cocoa/bindings/NSUserUnixTask.rb +13 -0
  377. data/lib/cocoa/bindings/NSValue.rb +26 -0
  378. data/lib/cocoa/bindings/NSValueTransformer.rb +13 -0
  379. data/lib/cocoa/bindings/NSView.rb +266 -0
  380. data/lib/cocoa/bindings/NSViewAnimation.rb +9 -0
  381. data/lib/cocoa/bindings/NSViewController.rb +19 -0
  382. data/lib/cocoa/bindings/NSWhoseSpecifier.rb +17 -0
  383. data/lib/cocoa/bindings/NSWindow.rb +283 -0
  384. data/lib/cocoa/bindings/NSWindowController.rb +31 -0
  385. data/lib/cocoa/bindings/NSWorkspace.rb +61 -0
  386. data/lib/cocoa/bindings/NSXMLDTD.rb +23 -0
  387. data/lib/cocoa/bindings/NSXMLDTDNode.rb +16 -0
  388. data/lib/cocoa/bindings/NSXMLDocument.rb +37 -0
  389. data/lib/cocoa/bindings/NSXMLElement.rb +32 -0
  390. data/lib/cocoa/bindings/NSXMLNode.rb +49 -0
  391. data/lib/cocoa/bindings/NSXMLParser.rb +24 -0
  392. data/lib/cocoa/bindings/NSXPCConnection.rb +30 -0
  393. data/lib/cocoa/bindings/NSXPCInterface.rb +13 -0
  394. data/lib/cocoa/bindings/NSXPCListener.rb +15 -0
  395. data/lib/cocoa/helpers.rb +787 -0
  396. data/spec/cocoa/cocoa_spec.rb +17 -0
  397. data/spec/cocoa/spec_helper.rb +38 -0
  398. data/tasks/bacon.rake +66 -0
  399. data/tasks/generate.rake +188 -0
  400. data/tasks/setup.rake +12 -0
  401. metadata +559 -0
@@ -0,0 +1,16 @@
1
+ # generated by 'rake generate'
2
+ require 'cocoa/bindings/NSXMLNode'
3
+ module Cocoa
4
+ class NSXMLDTDNode < Cocoa::NSXMLNode
5
+ attach_method :DTDKind, :args=>0, :names=>[], :types=>[], :retval=>"Q"
6
+ attach_method :initWithXMLString, :args=>1, :names=>[], :types=>["@"], :retval=>"@"
7
+ attach_method :isExternal, :args=>0, :names=>[], :types=>[], :retval=>"B"
8
+ attach_method :notationName, :args=>0, :names=>[], :types=>[], :retval=>"@"
9
+ attach_method :publicID, :args=>0, :names=>[], :types=>[], :retval=>"@"
10
+ attach_method :setDTDKind, :args=>1, :names=>[], :types=>["Q"], :retval=>"v"
11
+ attach_method :setNotationName, :args=>1, :names=>[], :types=>["@"], :retval=>"v"
12
+ attach_method :setPublicID, :args=>1, :names=>[], :types=>["@"], :retval=>"v"
13
+ attach_method :setSystemID, :args=>1, :names=>[], :types=>["@"], :retval=>"v"
14
+ attach_method :systemID, :args=>0, :names=>[], :types=>[], :retval=>"@"
15
+ end
16
+ end
@@ -0,0 +1,37 @@
1
+ # generated by 'rake generate'
2
+ require 'cocoa/bindings/NSXMLNode'
3
+ module Cocoa
4
+ class NSXMLDocument < Cocoa::NSXMLNode
5
+ attach_method :DTD, :args=>0, :names=>[], :types=>[], :retval=>"@"
6
+ attach_method :MIMEType, :args=>0, :names=>[], :types=>[], :retval=>"@"
7
+ attach_method :XMLData, :args=>0, :names=>[], :types=>[], :retval=>"@"
8
+ attach_method :XMLDataWithOptions, :args=>1, :names=>[], :types=>["Q"], :retval=>"@"
9
+ attach_method :addChild, :args=>1, :names=>[], :types=>["@"], :retval=>"v"
10
+ attach_method :characterEncoding, :args=>0, :names=>[], :types=>[], :retval=>"@"
11
+ attach_method :documentContentKind, :args=>0, :names=>[], :types=>[], :retval=>"Q"
12
+ attach_method :initWithContentsOfURL, :args=>3, :names=>["options", "error"], :types=>["@", "Q", "^@"], :retval=>"@"
13
+ attach_method :initWithData, :args=>3, :names=>["options", "error"], :types=>["@", "Q", "^@"], :retval=>"@"
14
+ attach_method :initWithRootElement, :args=>1, :names=>[], :types=>["@"], :retval=>"@"
15
+ attach_method :initWithXMLString, :args=>3, :names=>["options", "error"], :types=>["@", "Q", "^@"], :retval=>"@"
16
+ attach_method :insertChild, :args=>2, :names=>["atIndex"], :types=>["@", "Q"], :retval=>"v"
17
+ attach_method :insertChildren, :args=>2, :names=>["atIndex"], :types=>["@", "Q"], :retval=>"v"
18
+ attach_method :isStandalone, :args=>0, :names=>[], :types=>[], :retval=>"B"
19
+ attach_method :objectByApplyingXSLT, :args=>3, :names=>["arguments", "error"], :types=>["@", "@", "^@"], :retval=>"@"
20
+ attach_method :objectByApplyingXSLTAtURL, :args=>3, :names=>["arguments", "error"], :types=>["@", "@", "^@"], :retval=>"@"
21
+ attach_method :objectByApplyingXSLTString, :args=>3, :names=>["arguments", "error"], :types=>["@", "@", "^@"], :retval=>"@"
22
+ attach_method :removeChildAtIndex, :args=>1, :names=>[], :types=>["Q"], :retval=>"v"
23
+ attach_method :replaceChildAtIndex, :args=>2, :names=>["withNode"], :types=>["Q", "@"], :retval=>"v"
24
+ attach_singular_method :replacementClassForClass, :args=>1, :names=>[], :types=>["#"], :retval=>"#"
25
+ attach_method :rootElement, :args=>0, :names=>[], :types=>[], :retval=>"@"
26
+ attach_method :setCharacterEncoding, :args=>1, :names=>[], :types=>["@"], :retval=>"v"
27
+ attach_method :setChildren, :args=>1, :names=>[], :types=>["@"], :retval=>"v"
28
+ attach_method :setDTD, :args=>1, :names=>[], :types=>["@"], :retval=>"v"
29
+ attach_method :setDocumentContentKind, :args=>1, :names=>[], :types=>["Q"], :retval=>"v"
30
+ attach_method :setMIMEType, :args=>1, :names=>[], :types=>["@"], :retval=>"v"
31
+ attach_method :setRootElement, :args=>1, :names=>[], :types=>["@"], :retval=>"v"
32
+ attach_method :setStandalone, :args=>1, :names=>[], :types=>["B"], :retval=>"v"
33
+ attach_method :setVersion, :args=>1, :names=>[], :types=>["@"], :retval=>"v"
34
+ attach_method :validateAndReturnError, :args=>1, :names=>[], :types=>["^@"], :retval=>"B"
35
+ attach_method :version, :args=>0, :names=>[], :types=>[], :retval=>"@"
36
+ end
37
+ end
@@ -0,0 +1,32 @@
1
+ # generated by 'rake generate'
2
+ require 'cocoa/bindings/NSXMLNode'
3
+ module Cocoa
4
+ class NSXMLElement < Cocoa::NSXMLNode
5
+ attach_method :addAttribute, :args=>1, :names=>[], :types=>["@"], :retval=>"v"
6
+ attach_method :addChild, :args=>1, :names=>[], :types=>["@"], :retval=>"v"
7
+ attach_method :addNamespace, :args=>1, :names=>[], :types=>["@"], :retval=>"v"
8
+ attach_method :attributeForLocalName, :args=>2, :names=>["URI"], :types=>["@", "@"], :retval=>"@"
9
+ attach_method :attributeForName, :args=>1, :names=>[], :types=>["@"], :retval=>"@"
10
+ attach_method :attributes, :args=>0, :names=>[], :types=>[], :retval=>"@"
11
+ attach_method :elementsForLocalName, :args=>2, :names=>["URI"], :types=>["@", "@"], :retval=>"@"
12
+ attach_method :elementsForName, :args=>1, :names=>[], :types=>["@"], :retval=>"@"
13
+ attach_method :initWithName, [{:args=>1, :names=>[], :types=>["@"], :retval=>"@"}, {:args=>2, :names=>["URI"], :types=>["@", "@"], :retval=>"@"}, {:args=>2, :names=>["stringValue"], :types=>["@", "@"], :retval=>"@"}]
14
+ attach_method :initWithXMLString, :args=>2, :names=>["error"], :types=>["@", "^@"], :retval=>"@"
15
+ attach_method :insertChild, :args=>2, :names=>["atIndex"], :types=>["@", "Q"], :retval=>"v"
16
+ attach_method :insertChildren, :args=>2, :names=>["atIndex"], :types=>["@", "Q"], :retval=>"v"
17
+ attach_method :namespaceForPrefix, :args=>1, :names=>[], :types=>["@"], :retval=>"@"
18
+ attach_method :namespaces, :args=>0, :names=>[], :types=>[], :retval=>"@"
19
+ attach_method :normalizeAdjacentTextNodesPreservingCDATA, :args=>1, :names=>[], :types=>["B"], :retval=>"v"
20
+ attach_method :removeAttributeForName, :args=>1, :names=>[], :types=>["@"], :retval=>"v"
21
+ attach_method :removeChildAtIndex, :args=>1, :names=>[], :types=>["Q"], :retval=>"v"
22
+ attach_method :removeNamespaceForPrefix, :args=>1, :names=>[], :types=>["@"], :retval=>"v"
23
+ attach_method :replaceChildAtIndex, :args=>2, :names=>["withNode"], :types=>["Q", "@"], :retval=>"v"
24
+ attach_method :resolveNamespaceForName, :args=>1, :names=>[], :types=>["@"], :retval=>"@"
25
+ attach_method :resolvePrefixForNamespaceURI, :args=>1, :names=>[], :types=>["@"], :retval=>"@"
26
+ attach_method :setAttributes, :args=>1, :names=>[], :types=>["@"], :retval=>"v"
27
+ attach_method :setAttributesAsDictionary, :args=>1, :names=>[], :types=>["@"], :retval=>"v"
28
+ attach_method :setAttributesWithDictionary, :args=>1, :names=>[], :types=>["@"], :retval=>"v"
29
+ attach_method :setChildren, :args=>1, :names=>[], :types=>["@"], :retval=>"v"
30
+ attach_method :setNamespaces, :args=>1, :names=>[], :types=>["@"], :retval=>"v"
31
+ end
32
+ end
@@ -0,0 +1,49 @@
1
+ # generated by 'rake generate'
2
+ require 'cocoa/bindings/NSObject'
3
+ module Cocoa
4
+ class NSXMLNode < Cocoa::NSObject
5
+ attach_singular_method :DTDNodeWithXMLString, :args=>1, :names=>[], :types=>["@"], :retval=>"@"
6
+ attach_method :URI, :args=>0, :names=>[], :types=>[], :retval=>"@"
7
+ attach_method :XMLString, :args=>0, :names=>[], :types=>[], :retval=>"@"
8
+ attach_method :XMLStringWithOptions, :args=>1, :names=>[], :types=>["Q"], :retval=>"@"
9
+ attach_method :XPath, :args=>0, :names=>[], :types=>[], :retval=>"@"
10
+ attach_singular_method :attributeWithName, [{:args=>3, :names=>["URI", "stringValue"], :types=>["@", "@", "@"], :retval=>"@"}, {:args=>2, :names=>["stringValue"], :types=>["@", "@"], :retval=>"@"}]
11
+ attach_method :canonicalXMLStringPreservingComments, :args=>1, :names=>[], :types=>["B"], :retval=>"@"
12
+ attach_method :childAtIndex, :args=>1, :names=>[], :types=>["Q"], :retval=>"@"
13
+ attach_method :childCount, :args=>0, :names=>[], :types=>[], :retval=>"Q"
14
+ attach_method :children, :args=>0, :names=>[], :types=>[], :retval=>"@"
15
+ attach_singular_method :commentWithStringValue, :args=>1, :names=>[], :types=>["@"], :retval=>"@"
16
+ attach_method :description, :args=>0, :names=>[], :types=>[], :retval=>"@"
17
+ attach_method :detach, :args=>0, :names=>[], :types=>[], :retval=>"v"
18
+ attach_singular_method :document, :args=>0, :names=>[], :types=>[], :retval=>"@"
19
+ attach_singular_method :documentWithRootElement, :args=>1, :names=>[], :types=>["@"], :retval=>"@"
20
+ attach_singular_method :elementWithName, [{:args=>1, :names=>[], :types=>["@"], :retval=>"@"}, {:args=>2, :names=>["URI"], :types=>["@", "@"], :retval=>"@"}, {:args=>3, :names=>["children", "attributes"], :types=>["@", "@", "@"], :retval=>"@"}, {:args=>2, :names=>["stringValue"], :types=>["@", "@"], :retval=>"@"}]
21
+ attach_method :index, :args=>0, :names=>[], :types=>[], :retval=>"Q"
22
+ attach_method :initWithKind, [{:args=>1, :names=>[], :types=>["Q"], :retval=>"@"}, {:args=>2, :names=>["options"], :types=>["Q", "Q"], :retval=>"@"}]
23
+ attach_method :kind, :args=>0, :names=>[], :types=>[], :retval=>"Q"
24
+ attach_method :level, :args=>0, :names=>[], :types=>[], :retval=>"Q"
25
+ attach_method :localName, :args=>0, :names=>[], :types=>[], :retval=>"@"
26
+ attach_singular_method :localNameForName, :args=>1, :names=>[], :types=>["@"], :retval=>"@"
27
+ attach_method :name, :args=>0, :names=>[], :types=>[], :retval=>"@"
28
+ attach_singular_method :namespaceWithName, :args=>2, :names=>["stringValue"], :types=>["@", "@"], :retval=>"@"
29
+ attach_method :nextNode, :args=>0, :names=>[], :types=>[], :retval=>"@"
30
+ attach_method :nextSibling, :args=>0, :names=>[], :types=>[], :retval=>"@"
31
+ attach_method :nodesForXPath, :args=>2, :names=>["error"], :types=>["@", "^@"], :retval=>"@"
32
+ attach_method :objectValue, :args=>0, :names=>[], :types=>[], :retval=>"@"
33
+ attach_method :objectsForXQuery, [{:args=>3, :names=>["constants", "error"], :types=>["@", "@", "^@"], :retval=>"@"}, {:args=>2, :names=>["error"], :types=>["@", "^@"], :retval=>"@"}]
34
+ attach_method :parent, :args=>0, :names=>[], :types=>[], :retval=>"@"
35
+ attach_singular_method :predefinedNamespaceForPrefix, :args=>1, :names=>[], :types=>["@"], :retval=>"@"
36
+ attach_method :prefix, :args=>0, :names=>[], :types=>[], :retval=>"@"
37
+ attach_singular_method :prefixForName, :args=>1, :names=>[], :types=>["@"], :retval=>"@"
38
+ attach_method :previousNode, :args=>0, :names=>[], :types=>[], :retval=>"@"
39
+ attach_method :previousSibling, :args=>0, :names=>[], :types=>[], :retval=>"@"
40
+ attach_singular_method :processingInstructionWithName, :args=>2, :names=>["stringValue"], :types=>["@", "@"], :retval=>"@"
41
+ attach_method :rootDocument, :args=>0, :names=>[], :types=>[], :retval=>"@"
42
+ attach_method :setName, :args=>1, :names=>[], :types=>["@"], :retval=>"v"
43
+ attach_method :setObjectValue, :args=>1, :names=>[], :types=>["@"], :retval=>"v"
44
+ attach_method :setStringValue, [{:args=>1, :names=>[], :types=>["@"], :retval=>"v"}, {:args=>2, :names=>["resolvingEntities"], :types=>["@", "B"], :retval=>"v"}]
45
+ attach_method :setURI, :args=>1, :names=>[], :types=>["@"], :retval=>"v"
46
+ attach_method :stringValue, :args=>0, :names=>[], :types=>[], :retval=>"@"
47
+ attach_singular_method :textWithStringValue, :args=>1, :names=>[], :types=>["@"], :retval=>"@"
48
+ end
49
+ end
@@ -0,0 +1,24 @@
1
+ # generated by 'rake generate'
2
+ require 'cocoa/bindings/NSObject'
3
+ module Cocoa
4
+ class NSXMLParser < Cocoa::NSObject
5
+ attach_method :abortParsing, :args=>0, :names=>[], :types=>[], :retval=>"v"
6
+ attach_method :columnNumber, :args=>0, :names=>[], :types=>[], :retval=>"q"
7
+ attach_method :delegate, :args=>0, :names=>[], :types=>[], :retval=>"@"
8
+ attach_method :initWithContentsOfURL, :args=>1, :names=>[], :types=>["@"], :retval=>"@"
9
+ attach_method :initWithData, :args=>1, :names=>[], :types=>["@"], :retval=>"@"
10
+ attach_method :initWithStream, :args=>1, :names=>[], :types=>["@"], :retval=>"@"
11
+ attach_method :lineNumber, :args=>0, :names=>[], :types=>[], :retval=>"q"
12
+ attach_method :parse, :args=>0, :names=>[], :types=>[], :retval=>"B"
13
+ attach_method :parserError, :args=>0, :names=>[], :types=>[], :retval=>"@"
14
+ attach_method :publicID, :args=>0, :names=>[], :types=>[], :retval=>"@"
15
+ attach_method :setDelegate, :args=>1, :names=>[], :types=>["@"], :retval=>"v"
16
+ attach_method :setShouldProcessNamespaces, :args=>1, :names=>[], :types=>["B"], :retval=>"v"
17
+ attach_method :setShouldReportNamespacePrefixes, :args=>1, :names=>[], :types=>["B"], :retval=>"v"
18
+ attach_method :setShouldResolveExternalEntities, :args=>1, :names=>[], :types=>["B"], :retval=>"v"
19
+ attach_method :shouldProcessNamespaces, :args=>0, :names=>[], :types=>[], :retval=>"B"
20
+ attach_method :shouldReportNamespacePrefixes, :args=>0, :names=>[], :types=>[], :retval=>"B"
21
+ attach_method :shouldResolveExternalEntities, :args=>0, :names=>[], :types=>[], :retval=>"B"
22
+ attach_method :systemID, :args=>0, :names=>[], :types=>[], :retval=>"@"
23
+ end
24
+ end
@@ -0,0 +1,30 @@
1
+ # generated by 'rake generate'
2
+ require 'cocoa/bindings/NSObject'
3
+ module Cocoa
4
+ class NSXPCConnection < Cocoa::NSObject
5
+ attach_method :auditSessionIdentifier, :args=>0, :names=>[], :types=>[], :retval=>"i"
6
+ attach_method :effectiveGroupIdentifier, :args=>0, :names=>[], :types=>[], :retval=>"I"
7
+ attach_method :effectiveUserIdentifier, :args=>0, :names=>[], :types=>[], :retval=>"I"
8
+ attach_method :endpoint, :args=>0, :names=>[], :types=>[], :retval=>"@"
9
+ attach_method :exportedInterface, :args=>0, :names=>[], :types=>[], :retval=>"@"
10
+ attach_method :exportedObject, :args=>0, :names=>[], :types=>[], :retval=>"@"
11
+ attach_method :initWithListenerEndpoint, :args=>1, :names=>[], :types=>["@"], :retval=>"@"
12
+ attach_method :initWithMachServiceName, :args=>2, :names=>["options"], :types=>["@", "Q"], :retval=>"@"
13
+ attach_method :initWithServiceName, :args=>1, :names=>[], :types=>["@"], :retval=>"@"
14
+ attach_method :interruptionHandler, :args=>0, :names=>[], :types=>[], :retval=>"@?"
15
+ attach_method :invalidate, :args=>0, :names=>[], :types=>[], :retval=>"v"
16
+ attach_method :invalidationHandler, :args=>0, :names=>[], :types=>[], :retval=>"@?"
17
+ attach_method :processIdentifier, :args=>0, :names=>[], :types=>[], :retval=>"i"
18
+ attach_method :remoteObjectInterface, :args=>0, :names=>[], :types=>[], :retval=>"@"
19
+ attach_method :remoteObjectProxy, :args=>0, :names=>[], :types=>[], :retval=>"@"
20
+ attach_method :remoteObjectProxyWithErrorHandler, :args=>1, :names=>[], :types=>["@?"], :retval=>"@"
21
+ attach_method :resume, :args=>0, :names=>[], :types=>[], :retval=>"v"
22
+ attach_method :serviceName, :args=>0, :names=>[], :types=>[], :retval=>"@"
23
+ attach_method :setExportedInterface, :args=>1, :names=>[], :types=>["@"], :retval=>"v"
24
+ attach_method :setExportedObject, :args=>1, :names=>[], :types=>["@"], :retval=>"v"
25
+ attach_method :setInterruptionHandler, :args=>1, :names=>[], :types=>["@?"], :retval=>"v"
26
+ attach_method :setInvalidationHandler, :args=>1, :names=>[], :types=>["@?"], :retval=>"v"
27
+ attach_method :setRemoteObjectInterface, :args=>1, :names=>[], :types=>["@"], :retval=>"v"
28
+ attach_method :suspend, :args=>0, :names=>[], :types=>[], :retval=>"v"
29
+ end
30
+ end
@@ -0,0 +1,13 @@
1
+ # generated by 'rake generate'
2
+ require 'cocoa/bindings/NSObject'
3
+ module Cocoa
4
+ class NSXPCInterface < Cocoa::NSObject
5
+ attach_method :classesForSelector, :args=>3, :names=>["argumentIndex", "ofReply"], :types=>[":", "Q", "B"], :retval=>"@"
6
+ attach_method :interfaceForSelector, :args=>3, :names=>["argumentIndex", "ofReply"], :types=>[":", "Q", "B"], :retval=>"@"
7
+ attach_singular_method :interfaceWithProtocol, :args=>1, :names=>[], :types=>["@"], :retval=>"@"
8
+ attach_method :protocol, :args=>0, :names=>[], :types=>[], :retval=>"@"
9
+ attach_method :setClasses, :args=>4, :names=>["forSelector", "argumentIndex", "ofReply"], :types=>["@", ":", "Q", "B"], :retval=>"v"
10
+ attach_method :setInterface, :args=>4, :names=>["forSelector", "argumentIndex", "ofReply"], :types=>["@", ":", "Q", "B"], :retval=>"v"
11
+ attach_method :setProtocol, :args=>1, :names=>[], :types=>["@"], :retval=>"v"
12
+ end
13
+ end
@@ -0,0 +1,15 @@
1
+ # generated by 'rake generate'
2
+ require 'cocoa/bindings/NSObject'
3
+ module Cocoa
4
+ class NSXPCListener < Cocoa::NSObject
5
+ attach_singular_method :anonymousListener, :args=>0, :names=>[], :types=>[], :retval=>"@"
6
+ attach_method :delegate, :args=>0, :names=>[], :types=>[], :retval=>"@"
7
+ attach_method :endpoint, :args=>0, :names=>[], :types=>[], :retval=>"@"
8
+ attach_method :initWithMachServiceName, :args=>1, :names=>[], :types=>["@"], :retval=>"@"
9
+ attach_method :invalidate, :args=>0, :names=>[], :types=>[], :retval=>"v"
10
+ attach_method :resume, :args=>0, :names=>[], :types=>[], :retval=>"v"
11
+ attach_singular_method :serviceListener, :args=>0, :names=>[], :types=>[], :retval=>"@"
12
+ attach_method :setDelegate, :args=>1, :names=>[], :types=>["@"], :retval=>"v"
13
+ attach_method :suspend, :args=>0, :names=>[], :types=>[], :retval=>"v"
14
+ end
15
+ end
@@ -0,0 +1,787 @@
1
+ require 'active_support/inflector'
2
+ require 'ffi'
3
+
4
+ module ObjC
5
+ extend FFI::Library
6
+
7
+ # Load the 'libobjc' library.
8
+ ffi_lib 'objc'
9
+
10
+ # Bind the 'sel_registerName' function, which accepts a String and
11
+ # returns an equivalent Objective-C selector (i.e. message name).
12
+ attach_function :sel_registerName, [:string], :pointer
13
+
14
+ # Bind the 'objc_msgSend' function, which sends a message to an
15
+ # Objective-C object. It accepts a pointer to the object being sent
16
+ # the message, a pointer to a selector, and a varargs array of
17
+ # arguments to be sent with the message. It returns a pointer to the
18
+ # result of sending the message.
19
+ attach_function :objc_msgSend, [:pointer, :pointer, :varargs], :pointer
20
+ #attach_function :objc_msgSend_stret, [:pointer, :pointer, :varargs], CGRect.by_value
21
+
22
+ # A convenience method using objc_msgSend and sel_registerName to easily
23
+ # send Objective-C messages from Ruby.
24
+ def self.msgSend( id, selector, *args )
25
+ selector = sel_registerName(selector) if selector.is_a? String
26
+ objc_msgSend( id, selector, *args )
27
+ end
28
+
29
+ def self.msgSend_stret( return_type, id, selector, *args )
30
+ selector = sel_registerName(selector) if selector.is_a? String
31
+ method = "objc_msgSend_stret_for_#{return_type.name.underscore}".to_sym
32
+ unless respond_to? method
33
+ attach_function method, :objc_msgSend_stret, [:pointer, :pointer, :varargs], return_type.by_value
34
+ end
35
+ send(method, id, selector, *args )
36
+ end
37
+
38
+ # Bind the 'objc_getClass' function, which accepts the name of an
39
+ # Objective-C class, and returns a pointer to that class.
40
+ attach_function :objc_getClass, [:string], :pointer
41
+
42
+ attach_function :objc_allocateClassPair, [:pointer, :string, :int], :pointer
43
+ attach_function :objc_registerClassPair, [:pointer], :void
44
+ end
45
+
46
+ class CGPoint < FFI::Struct
47
+ def initialize *args
48
+ options = args.first
49
+ if options.is_a? Hash
50
+ self[:x] = options[:x]
51
+ self[:y] = options[:y]
52
+ else
53
+ super *args
54
+ end
55
+ end
56
+ layout :x, :double,
57
+ :y, :double
58
+ end
59
+
60
+ class CGSize < FFI::Struct
61
+ def initialize *args
62
+ options = args.first
63
+ if options.is_a? Hash
64
+ self[:width] = options[:width]
65
+ self[:height] = options[:height]
66
+ else
67
+ super *args
68
+ end
69
+ end
70
+ layout :width, :double,
71
+ :height, :double
72
+ end
73
+
74
+ class CGRect < FFI::Struct
75
+ def initialize *args
76
+ options = args.first
77
+ if options.is_a? Hash
78
+ self[:origin][:x] = options[:x]
79
+ self[:origin][:y] = options[:y]
80
+ self[:size][:width] = options[:width]
81
+ self[:size][:height] = options[:height]
82
+ else
83
+ super *args
84
+ end
85
+ end
86
+ layout :origin, CGPoint,
87
+ :size, CGSize
88
+ end
89
+
90
+ module Cocoa; end
91
+
92
+ class Cocoa::CFRange < FFI::Struct
93
+ def initialize *args
94
+ options = args.first
95
+ if options.is_a? Hash
96
+ self[:location] = options[:location]
97
+ self[:length] = options[:length]
98
+ else
99
+ super *args
100
+ end
101
+ end
102
+ def to_s
103
+ "<CFRange: #{self[:location]} #{self[:length]}>"
104
+ end
105
+ layout :location, :long_long, :length, :long_long
106
+ end
107
+
108
+ NSRect = CGRect
109
+ NSSize = CGSize
110
+ NSPoint = CGPoint
111
+
112
+ module Cocoa
113
+
114
+ def instances
115
+ @@instances ||= {}
116
+ end
117
+ def instance_for data
118
+ if data.is_a?(FFI::Pointer)
119
+ @@instances[data.address] ||= translate_retval nil,data,'@'
120
+ else
121
+ data
122
+ end
123
+ end
124
+
125
+ def NSMakeSize width,height
126
+ CGSize.new(width: width, height: height)
127
+ end
128
+ def NSMakePoint x,y
129
+ CGPoint.new(x: x, y: y)
130
+ end
131
+ def CGRectMake x,y,width,height
132
+ CGRect.new(x: x, y: y, width: width, height: height)
133
+ end
134
+ NSZeroPoint = CGPoint.new(x: 0, y: 0)
135
+ NSZeroRect = CGRect.new(x: 0, y: 0, width: 0, height: 0)
136
+
137
+ def CFRangeMake loc,len
138
+ CFRange.new(location: loc, length: len)
139
+ end
140
+
141
+ # Accepts a Ruby String and creates an equivalent NSString instance
142
+ # and returns a pointer to it.
143
+ def self.String_to_NSString( string )
144
+ nsstring_class = ObjC.objc_getClass("NSString")
145
+ ObjC.msgSend( nsstring_class, "stringWithUTF8String:",
146
+ :string, string )
147
+ end
148
+
149
+ # Accepts a pointer to an NSString object, and returns the string
150
+ # contents as a Ruby String.
151
+ def self.NSString_to_String( nsstring_pointer )
152
+ c_string_pointer = ObjC.msgSend( nsstring_pointer, "UTF8String" )
153
+ if c_string_pointer.null?
154
+ return "(NULL)"
155
+ else
156
+ return c_string_pointer.read_string()
157
+ end
158
+ end
159
+
160
+ def self.fixed_args args,options={}
161
+ ([args.first]+options.values).map do |arg|
162
+ case arg
163
+ when TrueClass
164
+ [:bool,arg]
165
+ when FalseClass
166
+ [:bool,arg]
167
+ when Fixnum
168
+ [:int,arg]
169
+ when String
170
+ [:pointer,Cocoa.String_to_NSString(arg)]
171
+ when NilClass
172
+ [:pointer,nil]
173
+ when Symbol
174
+ [:pointer,ObjC.sel_registerName("#{arg}:")]
175
+ when NSObject
176
+ [:pointer,arg.object]
177
+ when FFI::Struct
178
+ [arg.class.by_value,arg]
179
+ else
180
+ raise ArgumentError
181
+ end
182
+ end.flatten
183
+ end
184
+
185
+ def self.attach_nsstring_getter method
186
+ raw = "get_objc_#{method}".to_sym
187
+ attach_variable raw, method, :pointer
188
+ if /[A-Z]/ =~ method.to_s[0]
189
+ Cocoa.const_set(method,Cocoa::NSString_to_String(send(raw)))
190
+ else
191
+ define_singleton_method method do
192
+ Cocoa::NSString_to_String(send(raw))
193
+ end
194
+ end
195
+ end
196
+
197
+ def self.attach_singular_method method,*params
198
+ params = params.extract_options!
199
+ params.freeze
200
+ if params[:args] == 0
201
+ define_singleton_method method do
202
+ instance = new(true)
203
+ instance.object = ObjC.msgSend(instance.klass,method.to_s)
204
+ instance
205
+ end
206
+ else
207
+ define_singleton_method method do |*args|
208
+ raise "hell"
209
+ end
210
+ end
211
+ end
212
+
213
+ def self.apple_type_to_ffi type
214
+ # TODO: These are just stubbed on guess - check'em'all
215
+ case type
216
+ when 'C'
217
+ :uchar
218
+ when '@'
219
+ :pointer
220
+ when '#'
221
+ :pointer
222
+ when 'Q'
223
+ :int
224
+ when ':'
225
+ :pointer
226
+ when 'I'
227
+ :int
228
+ when 'L'
229
+ :int
230
+ when 'd'
231
+ :double
232
+ when 'f'
233
+ :float
234
+ when 'i'
235
+ :int
236
+ when 's'
237
+ :int
238
+ when 'q'
239
+ :long_long
240
+ when 'S'
241
+ :int
242
+ when /^\^/
243
+ :pointer
244
+ when 'B'
245
+ :bool
246
+ when 'v'
247
+ :void
248
+ when '[5*]'
249
+ :void
250
+ when /^{[^=]*=.*}$/
251
+ begin
252
+ /^{_*([^=]*)=.*}$/.match(type)[1].constantize.by_value
253
+ rescue => e
254
+ begin
255
+ "Cocoa::#{/^{_*([^=]*)=.*}$/.match(type)[1]}".constantize.by_value
256
+ rescue => e
257
+ match = /^{_*([^=]*)=(.*)}$/.match(type)
258
+ klass = begin
259
+ Cocoa.const_get(match[1])
260
+ rescue
261
+ # puts "defining struct Cocoa::#{match[1]} as #{match[2]}"
262
+ # this stuff doesnt work with jruby
263
+ klass = Class.new(FFI::Struct)
264
+ Cocoa.const_set(match[1], klass)
265
+ name = 'a'
266
+ layout = []
267
+ match[2].each_char do |c|
268
+ case c
269
+ when 'd'
270
+ layout << name.to_sym
271
+ name = name.next
272
+ layout << :double
273
+ end
274
+ end
275
+ klass = "Cocoa::#{match[1]}".constantize
276
+ klass.layout *layout
277
+ klass
278
+ end
279
+ klass.by_ref
280
+ end
281
+ end
282
+ when nil
283
+ :void
284
+ when '*' # character string
285
+ :pointer
286
+ when '@?'
287
+ :pointer
288
+ else
289
+ raise type.inspect
290
+ end
291
+ end
292
+
293
+ def self.translate_retval method,ret,type
294
+ case type
295
+ when '@'
296
+ return nil if ret.address == 0
297
+ return ret if method == :NSStringFromClass
298
+ klass_name = Cocoa::NSString_to_String(Cocoa::NSStringFromClass(ObjC.msgSend(ret,"class")))
299
+ return self if klass_name == '(NULL)'
300
+ instance = begin
301
+ ("Cocoa::"+klass_name).constantize.new(true)
302
+ rescue
303
+ klass_name = "FIX_#{klass_name}" if klass_name[0]=='_'
304
+ klass = begin
305
+ Cocoa.const_get(klass_name)
306
+ rescue => e
307
+ superclass_name = Cocoa::NSString_to_String(Cocoa::NSStringFromClass(ObjC.msgSend(ret,'superclass')))
308
+ superclass = "Cocoa::#{superclass_name}".constantize
309
+ proxy = Class.new(superclass)
310
+ Cocoa.const_set(klass_name, proxy)
311
+ klass = ("Cocoa::"+klass_name).constantize
312
+ superclass.inherited(klass)
313
+ klass
314
+ end
315
+ klass.new(true)
316
+ end
317
+ instance.object = ret
318
+ instance
319
+ when '#'
320
+ ret
321
+ when /^{([^=]*)=.*}$/
322
+ ret
323
+ when /^\^{[^=]*=.*}$/
324
+ return nil if ret.address == 0
325
+ klass_name = Cocoa::NSString_to_String(Cocoa::NSStringFromClass(ObjC.msgSend(ret,"class")))
326
+ return self if klass_name == '(NULL)'
327
+ instance = begin
328
+ ("Cocoa::"+klass_name).constantize.new(true)
329
+ rescue
330
+ klass_name = "FIX_#{klass_name}" if klass_name[0]=='_'
331
+ klass = begin
332
+ Cocoa.const_get(klass_name)
333
+ rescue => e
334
+ superclass_name = Cocoa::NSString_to_String(Cocoa::NSStringFromClass(ObjC.msgSend(ret,'superclass')))
335
+ superclass = "Cocoa::#{superclass_name}".constantize
336
+ proxy = Class.new(superclass)
337
+ Cocoa.const_set(klass_name, proxy)
338
+ klass = ("Cocoa::"+klass_name).constantize
339
+ superclass.inherited(klass)
340
+ klass
341
+ end
342
+ klass.new(true)
343
+ end
344
+ instance.object = ret
345
+ instance
346
+ else
347
+ raise type
348
+ end
349
+ end
350
+
351
+ def self.attach_method method,*params
352
+ if params.first.is_a? Array
353
+ params = params.last
354
+ end
355
+
356
+ params = params.extract_options!
357
+ params.freeze
358
+ if params[:args] == 0
359
+ begin
360
+ attach_function "call_#{method}".to_sym, method, [], apple_type_to_ffi(params[:retval])
361
+ define_method method do
362
+ case params[:retval]
363
+ when /^\^{[^=]*=.*}$/
364
+ Cocoa::translate_retval(method,send("call_#{method}".to_sym),params[:retval])
365
+ else
366
+ raise params.inspect
367
+ end
368
+ end
369
+ rescue FFI::NotFoundError => e
370
+ puts "method missing: #{e.message}"
371
+ end
372
+ else
373
+ begin
374
+ attach_function "call_#{method}".to_sym, method, params[:types].map{ |arg| apple_type_to_ffi(arg) }, apple_type_to_ffi(params[:retval])
375
+ define_method method do |*args|
376
+ raise ArgumentError.new("#{method} requires #{params[:args]} argument(s)") unless params[:args] == args.size
377
+ fixed_args = []
378
+ args.each_with_index do |arg,i|
379
+ case params[:types][i]
380
+ when '@'
381
+ fixed_args << arg
382
+ when 'd'
383
+ if arg.is_a?(Fixnum)
384
+ fixed_args << arg.to_f
385
+ else
386
+ raise ArgumentError.new("float expected, got #{arg.class.name}") unless arg.is_a?(Float)
387
+ fixed_args << arg
388
+ end
389
+ when 'I'
390
+ raise ArgumentError unless arg.is_a?(Fixnum)
391
+ fixed_args << arg
392
+ when 'Q'
393
+ raise ArgumentError.new(arg.inspect) unless arg.is_a?(Fixnum)
394
+ fixed_args << arg
395
+ when 'q'
396
+ raise ArgumentError unless arg.is_a?(Fixnum)
397
+ fixed_args << arg
398
+ when '#'
399
+ raise ArgumentError unless arg.is_a?(FFI::Pointer)
400
+ fixed_args << arg
401
+ when /^{[^=]*=.*}$/
402
+ raise ArgumentError.new(arg.inspect) unless arg.kind_of?(FFI::Struct)
403
+ fixed_args << arg
404
+ when /^\^{([^=]*)=.*}$/
405
+ case arg
406
+ when FFI::Pointer
407
+ fixed_args << arg
408
+ when Array
409
+ raise ArgumentError unless $1 == '__CFArray'
410
+ fixed_args << NSArray.arrayWithObjects(arg).object
411
+ else
412
+ match = $1
413
+ if arg.class.name =~ /^Cocoa::/ # "Cocoa::#{$1}".constantize
414
+ fixed_args << arg.object
415
+ elsif arg.is_a?(NilClass)
416
+ fixed_args << FFI::MemoryPointer::NULL
417
+ elsif arg.is_a?(String) && match == '__CFString'
418
+ fixed_args << Cocoa::String_to_NSString(arg)
419
+ else
420
+ raise ArgumentError.new("expected #{params[:types][i]} got #{arg.class.name} (#{match})")
421
+ end
422
+ end
423
+ when '^d'
424
+ raise ArgumentError unless arg.is_a?(Array)
425
+ arr = FFI::MemoryPointer.new(:double,arg.size)
426
+ arr.write_array_of_double(arg)
427
+ fixed_args << arr
428
+ when '^v'
429
+ raise ArgumentError unless arg.is_a?(NilClass)
430
+ fixed_args << FFI::MemoryPointer::NULL
431
+ else
432
+ raise params[:types][i]
433
+ end
434
+ end
435
+ ret = send("call_#{method}".to_sym,*fixed_args)
436
+ if params[:retval]=='v'
437
+ self
438
+ else
439
+ Cocoa::translate_retval(method,ret,params[:retval])
440
+ end
441
+ end
442
+ rescue FFI::NotFoundError => e
443
+ # puts "!!!"
444
+ # puts e.message
445
+ end
446
+ end
447
+ end
448
+ extend self
449
+
450
+ class NSObject
451
+
452
+ def self.inherited(parent)
453
+ if parent.name
454
+ puts "INHERITED #{parent.name}" if parent.name =~ /Timer/
455
+ klass = ObjC.objc_allocateClassPair(ObjC.objc_getClass(name.split('::').last),parent.name,0)
456
+ ObjC.objc_registerClassPair(klass)
457
+ end
458
+ end
459
+
460
+ def initialize allocated=false
461
+ @klass = ObjC.objc_getClass(self.class.name.split('::').last)
462
+ unless allocated
463
+ self.object = @klass
464
+ new
465
+ end
466
+ end
467
+ def self.alloc
468
+ new(true).alloc
469
+ end
470
+ def get_class
471
+ ObjC.objc_getClass(self.class.name.split('::').last)
472
+ end
473
+ def alloc
474
+ self.object = ObjC.msgSend(ObjC.objc_getClass(self.class.name.split('::').last),"alloc")
475
+ self
476
+ end
477
+ def init
478
+ self.object = ObjC.msgSend(@object,"init")
479
+ self
480
+ end
481
+ def new
482
+ self.object = ObjC.msgSend(@object,"new")
483
+ self
484
+ end
485
+ def autorelease
486
+ self.object = ObjC.msgSend(@object,"autorelease")
487
+ self
488
+ end
489
+ # protected
490
+ attr_accessor :klass
491
+ attr_reader :object
492
+
493
+ def self.fixed_args args,params={},types=[],options={}
494
+ if options[:variadic]
495
+ _types = (types.dup*args.size)
496
+ args
497
+ else
498
+ _types = types.dup
499
+ ([args.first]+params.values)
500
+ end.map do |arg|
501
+ type = _types.shift
502
+ case arg
503
+ when TrueClass, FalseClass
504
+ [:bool,arg]
505
+ when Fixnum, Bignum
506
+ case type
507
+ when 'q'
508
+ [:long_long,arg]
509
+ when 'Q'
510
+ [:ulong_long,arg]
511
+ when 'd'
512
+ [:double,arg]
513
+ else
514
+ raise type.inspect
515
+ end
516
+ when Float
517
+ [:double,arg]
518
+ when String
519
+ [:pointer,Cocoa.String_to_NSString(arg)]
520
+ when NilClass
521
+ [:pointer,nil]
522
+ when Symbol
523
+ [:pointer,ObjC.sel_registerName("#{arg}:")]
524
+ when NSObject
525
+ [:pointer,arg.object]
526
+ when FFI::Struct
527
+ [arg.class.by_value,arg]
528
+ when FFI::Pointer
529
+ [:pointer,arg]
530
+ else
531
+ raise ArgumentError.new("#{arg.class.name}: #{arg.inspect}")
532
+ end
533
+ end.flatten
534
+ end
535
+
536
+ def self.smart_constantize ret,klass_name
537
+ begin
538
+ Cocoa.const_get(klass_name)
539
+ rescue
540
+ _superclass = ObjC.msgSend(ret,'superclass')
541
+ superclass_name = Cocoa::NSString_to_String(Cocoa::NSStringFromClass(_superclass))
542
+ superclass = begin
543
+ "Cocoa::#{superclass_name}".constantize
544
+ rescue Exception => e
545
+ smart_constantize(_superclass,superclass_name)
546
+ end
547
+ proxy = Class.new(superclass)
548
+ Cocoa.const_set(klass_name, proxy)
549
+ klass = ("Cocoa::"+klass_name).constantize
550
+ superclass.inherited(klass)
551
+ klass
552
+ end
553
+ end
554
+
555
+ def self.attach_singular_method method,*__params
556
+ __params.freeze
557
+ return if method==:class
558
+ return if method==:new
559
+ if __params.first.is_a?(Hash) && __params.first[:args] == 0
560
+ define_singleton_method method do
561
+ instance = new(true)
562
+ instance.object = ObjC.msgSend(instance.klass,method.to_s)
563
+ instance
564
+ end
565
+ else
566
+ _params = [__params.dup].flatten
567
+ _params.freeze
568
+ define_singleton_method method do |*args|
569
+ # puts method
570
+ # puts args.inspect
571
+ # puts _params.inspect
572
+ par = if _params.size == 1 && _params.first[:variadic]
573
+ _params
574
+ else
575
+ _params.select{ |par| (par[:args] == 1 && args.size == 1) || (par[:args] == args.last.size+1 && par[:names].map(&:to_sym).sort == args.last.keys.sort) }
576
+ end
577
+ raise ArgumentError unless par.size == 1
578
+ params = par.dup.extract_options!
579
+
580
+ options = args.extract_options!
581
+ fixed_args = if params[:variadic]
582
+ raise "not yet supported" unless params[:types].size == 1
583
+ NSObject.fixed_args(args,options,params[:types],params)
584
+ else
585
+ NSObject.fixed_args(args,options,params[:types])
586
+ end
587
+ ret = ObjC.msgSend(ObjC.objc_getClass(name.split('::').last),"#{method}#{(['']+params[:names]).join(':')}:",*fixed_args)
588
+ case params[:retval]
589
+ when '@'
590
+ return nil if ret.address == 0
591
+ klass_name = Cocoa::NSString_to_String(Cocoa::NSStringFromClass(ObjC.msgSend(ret,"class")))
592
+ return self if klass_name == '(NULL)'
593
+ instance = begin
594
+ ("Cocoa::"+klass_name).constantize.new(true)
595
+ rescue
596
+ klass_name = klass_name.gsub(/^_*/,'') if klass_name[0]=='_'
597
+ klass = smart_constantize(ret,klass_name)
598
+ klass.new(true)
599
+ end
600
+ instance.object = ret
601
+ instance
602
+ when 'v'
603
+ self
604
+ else
605
+ raise params[:retval]
606
+ end
607
+ end
608
+ end
609
+ end
610
+
611
+ def self.attach_method method,*_params
612
+ return if method==:class
613
+ @@method_specs ||= {}
614
+ if _params.first.is_a? Array
615
+ _params = [_params].flatten
616
+ _params.freeze
617
+ define_method method do |*args|
618
+ if args.last.is_a? Hash
619
+ params = _params.select{ |par| par[:args] == args.last.size+1 && par[:names].map(&:to_sym).sort == args.last.keys.sort }
620
+ raise ArgumentError unless params.size == 1
621
+ params = params.extract_options!
622
+ @@method_specs[method] = params
623
+
624
+ options = args.extract_options!
625
+ fixed_args = NSObject.fixed_args(args,options,params[:types])
626
+ # puts "ObjC.msgSend(@object,\"#{method}:#{params[:names].join(':')}:\",#{fixed_args.inspect})"
627
+ ObjC.msgSend(@object,"#{method}#{(['']+params[:names]).join(':')}:",*fixed_args)
628
+ self
629
+ else
630
+ params = _params.select{ |par| par[:args] == 1 }
631
+ raise ArgumentError unless params.size == 1
632
+ @@method_specs[method] = params
633
+
634
+ fixed_args = NSObject.fixed_args(args)
635
+ # puts "ObjC.msgSend(#{@object.inspect},#{method},#{fixed_args.inspect})"
636
+ ObjC.msgSend(@object,"#{method}:",*fixed_args)
637
+ self
638
+ end
639
+ end
640
+ else
641
+ params = _params.extract_options!
642
+ @@method_specs[method] = params
643
+ if params[:args] == 0
644
+ params.freeze
645
+ define_method method do
646
+ case params[:retval]
647
+ when '@'
648
+ Cocoa::translate_retval(method,ObjC.msgSend(@object,method.to_s),params[:retval])
649
+ when 'v'
650
+ ObjC.msgSend(@object,method.to_s)
651
+ self
652
+ when '^v'
653
+ ObjC.msgSend(@object,method.to_s)
654
+ when 'Q'
655
+ ObjC.msgSend(@object,method.to_s).address
656
+ when 'B'
657
+ ret = ObjC.msgSend(@object,method.to_s)
658
+ ret.address ? true : false
659
+ when /^{([^=]*)=.*}$/
660
+ ObjC.msgSend_stret($1.constantize,@object,method.to_s)
661
+ when /^\^{([^=]*)=.*}$/
662
+ ret = ObjC.msgSend(@object,method.to_s)
663
+ klass_name = Cocoa::NSString_to_String(Cocoa::NSStringFromClass(ObjC.msgSend(ret,"class")))
664
+ if klass_name == '__NSCFType'
665
+ # dont know what the hell this is, experiment:
666
+ klass_name = $1
667
+ end
668
+ instance = begin
669
+ ("Cocoa::"+klass_name).constantize.new(true)
670
+ rescue
671
+ klass_name = "FIX_#{klass_name}" if klass_name[0]=='_'
672
+ # puts "TRYING #{klass_name}"
673
+ klass = begin
674
+ Cocoa.const_get(klass_name)
675
+ rescue => e
676
+ superclass_name = Cocoa::NSString_to_String(Cocoa::NSStringFromClass(ObjC.msgSend(ret,'superclass')))
677
+ superclass = "Cocoa::#{superclass_name}".constantize
678
+ proxy = Class.new(superclass)
679
+ Cocoa.const_set(klass_name, proxy)
680
+ klass = ("Cocoa::"+klass_name).constantize
681
+ superclass.inherited(klass)
682
+ klass
683
+ end
684
+ klass.new(true)
685
+ end
686
+ instance.object = ret
687
+ instance
688
+ when '*'
689
+ ObjC.msgSend(@object,method.to_s).read_string
690
+ else
691
+ puts params.inspect
692
+ raise params[:retval]
693
+ end
694
+ end
695
+ else
696
+ define_method method do |*args|
697
+ options = args.extract_options!
698
+ fixed_args = NSObject.fixed_args(args,options,params[:types])
699
+ case params[:retval]
700
+ when '@'
701
+ Cocoa::translate_retval(method,ObjC.msgSend(@object,"#{method}#{(['']+params[:names]).join(':')}:",*fixed_args),params[:retval])
702
+ else
703
+ ObjC.msgSend(@object,"#{method}#{(['']+params[:names]).join(':')}:",*fixed_args)
704
+ self
705
+ end
706
+ end
707
+ end
708
+ end
709
+ end
710
+
711
+ def object= obj
712
+ Cocoa::instances[obj.address] = self
713
+ @object = obj
714
+ end
715
+
716
+ def self.ffi_argument_types method
717
+ return [:pointer] unless @@method_specs[method] # own method probably TODO: return argument count * pointers
718
+ @@method_specs[method][:types].map do |type|
719
+ case type
720
+ when '@'
721
+ :pointer
722
+ when /^{([^=]*)=.*}$/
723
+ $1.constantize.by_value
724
+ else
725
+ raise type
726
+ end
727
+ end
728
+ end
729
+
730
+ def self.ffi_return_type method
731
+ return :void unless @@method_specs[method] # own method probably
732
+ case @@method_specs[method][:retval]
733
+ when nil
734
+ :void
735
+ when 'v'
736
+ :void
737
+ else
738
+ raise @@method_specs[method][:retval].inspect
739
+ end
740
+ end
741
+
742
+ def self.objc_type type,default='i'
743
+ case type
744
+ when nil
745
+ default
746
+ when '@'
747
+ type
748
+ when 'v'
749
+ type
750
+ when /^{([^=]*)=.*}$/
751
+ type
752
+ else
753
+ raise type.inspect
754
+ end
755
+ end
756
+
757
+ def self.objc_argument_types method
758
+ #"@:^{CGRect={CGPoint=dd}{CGSize=dd}}@"
759
+ return 'v@:@' unless @@method_specs[method] # own method probably TODO: @v: + @ times argument count
760
+ objc_type(@@method_specs[method][:retval],'v')+'@:'+@@method_specs[method][:types].map{ |type| objc_type(type) }.join
761
+ end
762
+
763
+ def self.method_added(name)
764
+ return if caller.first.split('`').last[0..-2] == 'define_method' # MRI
765
+ return if caller.first.split('`').last[0..-2] == 'attach_method' # Rubinius
766
+ method_definition = "#{self.name.underscore}_#{name.to_s.underscore}".to_sym
767
+ add_method = "add_#{self.name.underscore}_#{name.to_s.underscore}".to_sym
768
+
769
+ @method_callers ||= {}
770
+ raise "allready added" if @method_callers[method_definition]
771
+ @method_callers[method_definition] = Proc.new do |this,cmd,*args|
772
+ begin
773
+ instance = Cocoa.instances[this.address]
774
+ instance.send(name,*args.map{ |arg| Cocoa::instance_for(arg) })
775
+ rescue => e
776
+ puts e.message
777
+ puts e.backtrace
778
+ end
779
+ end
780
+
781
+ ObjC.callback method_definition, [:pointer, :pointer]+ffi_argument_types(name), ffi_return_type(name)
782
+ ObjC.attach_function add_method, :class_addMethod, [:pointer,:pointer,method_definition,:string], :void
783
+
784
+ ObjC.send(add_method,ObjC.objc_getClass(self.name.split('::').last),ObjC.sel_registerName("#{name}:"),@method_callers[method_definition],objc_argument_types(name))
785
+ end
786
+ end
787
+ end