cocoa 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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