cocoa 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +11 -0
- data/LICENSE +21 -0
- data/README.md +4 -0
- data/Rakefile +36 -0
- data/VERSION +1 -0
- data/cocoa.gemspec +457 -0
- data/examples/window.rb +41 -0
- data/lib/cocoa.rb +6722 -0
- data/lib/cocoa/bindings/CAAnimation.rb +15 -0
- data/lib/cocoa/bindings/CAAnimationGroup.rb +8 -0
- data/lib/cocoa/bindings/CABasicAnimation.rb +12 -0
- data/lib/cocoa/bindings/CAConstraint.rb +13 -0
- data/lib/cocoa/bindings/CAConstraintLayoutManager.rb +7 -0
- data/lib/cocoa/bindings/CAEmitterCell.rb +77 -0
- data/lib/cocoa/bindings/CAEmitterLayer.rb +36 -0
- data/lib/cocoa/bindings/CAGradientLayer.rb +16 -0
- data/lib/cocoa/bindings/CAKeyframeAnimation.rb +24 -0
- data/lib/cocoa/bindings/CALayer.rb +149 -0
- data/lib/cocoa/bindings/CAMediaTimingFunction.rb +10 -0
- data/lib/cocoa/bindings/CAOpenGLLayer.rb +14 -0
- data/lib/cocoa/bindings/CAPropertyAnimation.rb +15 -0
- data/lib/cocoa/bindings/CARemoteLayerClient.rb +11 -0
- data/lib/cocoa/bindings/CARemoteLayerServer.rb +8 -0
- data/lib/cocoa/bindings/CARenderer.rb +17 -0
- data/lib/cocoa/bindings/CAReplicatorLayer.rb +24 -0
- data/lib/cocoa/bindings/CAScrollLayer.rb +10 -0
- data/lib/cocoa/bindings/CAShapeLayer.rb +30 -0
- data/lib/cocoa/bindings/CATextLayer.rb +20 -0
- data/lib/cocoa/bindings/CATiledLayer.rb +13 -0
- data/lib/cocoa/bindings/CATransaction.rb +21 -0
- data/lib/cocoa/bindings/CATransition.rb +16 -0
- data/lib/cocoa/bindings/CAValueFunction.rb +8 -0
- data/lib/cocoa/bindings/CIColor.rb +7 -0
- data/lib/cocoa/bindings/CIFilter.rb +10 -0
- data/lib/cocoa/bindings/CIImage.rb +9 -0
- data/lib/cocoa/bindings/NSATSTypesetter.rb +51 -0
- data/lib/cocoa/bindings/NSActionCell.rb +12 -0
- data/lib/cocoa/bindings/NSAffineTransform.rb +23 -0
- data/lib/cocoa/bindings/NSAlert.rb +33 -0
- data/lib/cocoa/bindings/NSAnimation.rb +32 -0
- data/lib/cocoa/bindings/NSAnimationContext.rb +18 -0
- data/lib/cocoa/bindings/NSAppleEventDescriptor.rb +47 -0
- data/lib/cocoa/bindings/NSAppleEventManager.rb +17 -0
- data/lib/cocoa/bindings/NSAppleScript.rb +14 -0
- data/lib/cocoa/bindings/NSApplication.rb +105 -0
- data/lib/cocoa/bindings/NSArchiver.rb +15 -0
- data/lib/cocoa/bindings/NSArray.rb +59 -0
- data/lib/cocoa/bindings/NSArrayController.rb +53 -0
- data/lib/cocoa/bindings/NSAssertionHandler.rb +9 -0
- data/lib/cocoa/bindings/NSAttributedString.rb +54 -0
- data/lib/cocoa/bindings/NSAutoreleasePool.rb +10 -0
- data/lib/cocoa/bindings/NSBezierPath.rb +76 -0
- data/lib/cocoa/bindings/NSBitmapImageRep.rb +45 -0
- data/lib/cocoa/bindings/NSBlockOperation.rb +9 -0
- data/lib/cocoa/bindings/NSBox.rb +36 -0
- data/lib/cocoa/bindings/NSBrowser.rb +126 -0
- data/lib/cocoa/bindings/NSBrowserCell.rb +19 -0
- data/lib/cocoa/bindings/NSBundle.rb +66 -0
- data/lib/cocoa/bindings/NSButton.rb +45 -0
- data/lib/cocoa/bindings/NSButtonCell.rb +60 -0
- data/lib/cocoa/bindings/NSByteCountFormatter.rb +24 -0
- data/lib/cocoa/bindings/NSCIImageRep.rb +9 -0
- data/lib/cocoa/bindings/NSCache.rb +20 -0
- data/lib/cocoa/bindings/NSCachedImageRep.rb +10 -0
- data/lib/cocoa/bindings/NSCachedURLResponse.rb +11 -0
- data/lib/cocoa/bindings/NSCalendar.rb +25 -0
- data/lib/cocoa/bindings/NSCalendarDate.rb +28 -0
- data/lib/cocoa/bindings/NSCell.rb +157 -0
- data/lib/cocoa/bindings/NSCharacterSet.rb +31 -0
- data/lib/cocoa/bindings/NSClassDescription.rb +13 -0
- data/lib/cocoa/bindings/NSClipView.rb +23 -0
- data/lib/cocoa/bindings/NSCloneCommand.rb +8 -0
- data/lib/cocoa/bindings/NSCloseCommand.rb +7 -0
- data/lib/cocoa/bindings/NSCoder.rb +63 -0
- data/lib/cocoa/bindings/NSCollectionView.rb +34 -0
- data/lib/cocoa/bindings/NSCollectionViewItem.rb +14 -0
- data/lib/cocoa/bindings/NSColor.rb +110 -0
- data/lib/cocoa/bindings/NSColorList.rb +18 -0
- data/lib/cocoa/bindings/NSColorPanel.rb +26 -0
- data/lib/cocoa/bindings/NSColorPicker.rb +16 -0
- data/lib/cocoa/bindings/NSColorSpace.rb +25 -0
- data/lib/cocoa/bindings/NSColorWell.rb +15 -0
- data/lib/cocoa/bindings/NSComboBox.rb +43 -0
- data/lib/cocoa/bindings/NSComboBoxCell.rb +42 -0
- data/lib/cocoa/bindings/NSComparisonPredicate.rb +14 -0
- data/lib/cocoa/bindings/NSCompoundPredicate.rb +12 -0
- data/lib/cocoa/bindings/NSCondition.rb +12 -0
- data/lib/cocoa/bindings/NSConditionLock.rb +15 -0
- data/lib/cocoa/bindings/NSConnection.rb +42 -0
- data/lib/cocoa/bindings/NSControl.rb +74 -0
- data/lib/cocoa/bindings/NSController.rb +12 -0
- data/lib/cocoa/bindings/NSCountedSet.rb +13 -0
- data/lib/cocoa/bindings/NSCreateCommand.rb +8 -0
- data/lib/cocoa/bindings/NSCursor.rb +42 -0
- data/lib/cocoa/bindings/NSCustomImageRep.rb +11 -0
- data/lib/cocoa/bindings/NSData.rb +28 -0
- data/lib/cocoa/bindings/NSDataDetector.rb +9 -0
- data/lib/cocoa/bindings/NSDate.rb +36 -0
- data/lib/cocoa/bindings/NSDateComponents.rb +41 -0
- data/lib/cocoa/bindings/NSDateFormatter.rb +81 -0
- data/lib/cocoa/bindings/NSDatePicker.rb +38 -0
- data/lib/cocoa/bindings/NSDatePickerCell.rb +34 -0
- data/lib/cocoa/bindings/NSDecimalNumber.rb +31 -0
- data/lib/cocoa/bindings/NSDecimalNumberHandler.rb +9 -0
- data/lib/cocoa/bindings/NSDeleteCommand.rb +8 -0
- data/lib/cocoa/bindings/NSDictionary.rb +59 -0
- data/lib/cocoa/bindings/NSDictionaryController.rb +19 -0
- data/lib/cocoa/bindings/NSDirectoryEnumerator.rb +11 -0
- data/lib/cocoa/bindings/NSDistantObject.rb +12 -0
- data/lib/cocoa/bindings/NSDistantObjectRequest.rb +10 -0
- data/lib/cocoa/bindings/NSDistributedLock.rb +12 -0
- data/lib/cocoa/bindings/NSDistributedNotificationCenter.rb +13 -0
- data/lib/cocoa/bindings/NSDockTile.rb +15 -0
- data/lib/cocoa/bindings/NSDocument.rb +148 -0
- data/lib/cocoa/bindings/NSDocumentController.rb +56 -0
- data/lib/cocoa/bindings/NSDraggingImageComponent.rb +14 -0
- data/lib/cocoa/bindings/NSDraggingItem.rb +13 -0
- data/lib/cocoa/bindings/NSDraggingSession.rb +16 -0
- data/lib/cocoa/bindings/NSDrawer.rb +31 -0
- data/lib/cocoa/bindings/NSEPSImageRep.rb +11 -0
- data/lib/cocoa/bindings/NSEnumerator.rb +8 -0
- data/lib/cocoa/bindings/NSError.rb +17 -0
- data/lib/cocoa/bindings/NSEvent.rb +80 -0
- data/lib/cocoa/bindings/NSException.rb +15 -0
- data/lib/cocoa/bindings/NSExpression.rb +32 -0
- data/lib/cocoa/bindings/NSFileCoordinator.rb +15 -0
- data/lib/cocoa/bindings/NSFileHandle.rb +40 -0
- data/lib/cocoa/bindings/NSFileManager.rb +67 -0
- data/lib/cocoa/bindings/NSFileVersion.rb +25 -0
- data/lib/cocoa/bindings/NSFileWrapper.rb +41 -0
- data/lib/cocoa/bindings/NSFont.rb +60 -0
- data/lib/cocoa/bindings/NSFontCollection.rb +19 -0
- data/lib/cocoa/bindings/NSFontDescriptor.rb +23 -0
- data/lib/cocoa/bindings/NSFontManager.rb +52 -0
- data/lib/cocoa/bindings/NSFontPanel.rb +16 -0
- data/lib/cocoa/bindings/NSForm.rb +27 -0
- data/lib/cocoa/bindings/NSFormCell.rb +27 -0
- data/lib/cocoa/bindings/NSFormatter.rb +11 -0
- data/lib/cocoa/bindings/NSGarbageCollector.rb +16 -0
- data/lib/cocoa/bindings/NSGlyphGenerator.rb +8 -0
- data/lib/cocoa/bindings/NSGlyphInfo.rb +12 -0
- data/lib/cocoa/bindings/NSGradient.rb +17 -0
- data/lib/cocoa/bindings/NSGraphicsContext.rb +34 -0
- data/lib/cocoa/bindings/NSHTTPCookie.rb +23 -0
- data/lib/cocoa/bindings/NSHTTPCookieStorage.rb +15 -0
- data/lib/cocoa/bindings/NSHTTPURLResponse.rb +10 -0
- data/lib/cocoa/bindings/NSHashTable.rb +28 -0
- data/lib/cocoa/bindings/NSHelpManager.rb +16 -0
- data/lib/cocoa/bindings/NSHost.rb +18 -0
- data/lib/cocoa/bindings/NSImage.rb +83 -0
- data/lib/cocoa/bindings/NSImageCell.rb +12 -0
- data/lib/cocoa/bindings/NSImageRep.rb +45 -0
- data/lib/cocoa/bindings/NSImageView.rb +20 -0
- data/lib/cocoa/bindings/NSIndexPath.rb +16 -0
- data/lib/cocoa/bindings/NSIndexSet.rb +39 -0
- data/lib/cocoa/bindings/NSIndexSpecifier.rb +9 -0
- data/lib/cocoa/bindings/NSInputManager.rb +20 -0
- data/lib/cocoa/bindings/NSInputServer.rb +7 -0
- data/lib/cocoa/bindings/NSInputStream.rb +15 -0
- data/lib/cocoa/bindings/NSInvocation.rb +20 -0
- data/lib/cocoa/bindings/NSInvocationOperation.rb +10 -0
- data/lib/cocoa/bindings/NSJSONSerialization.rb +11 -0
- data/lib/cocoa/bindings/NSKeyedArchiver.rb +27 -0
- data/lib/cocoa/bindings/NSKeyedUnarchiver.rb +25 -0
- data/lib/cocoa/bindings/NSLayoutConstraint.rb +20 -0
- data/lib/cocoa/bindings/NSLayoutManager.rb +131 -0
- data/lib/cocoa/bindings/NSLevelIndicator.rb +22 -0
- data/lib/cocoa/bindings/NSLevelIndicatorCell.rb +26 -0
- data/lib/cocoa/bindings/NSLinguisticTagger.rb +19 -0
- data/lib/cocoa/bindings/NSLocale.rb +27 -0
- data/lib/cocoa/bindings/NSLock.rb +10 -0
- data/lib/cocoa/bindings/NSLogicalTest.rb +9 -0
- data/lib/cocoa/bindings/NSMachBootstrapServer.rb +10 -0
- data/lib/cocoa/bindings/NSMachPort.rb +13 -0
- data/lib/cocoa/bindings/NSMapTable.rb +27 -0
- data/lib/cocoa/bindings/NSMatrix.rb +97 -0
- data/lib/cocoa/bindings/NSMenu.rb +73 -0
- data/lib/cocoa/bindings/NSMenuItem.rb +62 -0
- data/lib/cocoa/bindings/NSMenuItemCell.rb +27 -0
- data/lib/cocoa/bindings/NSMessagePortNameServer.rb +8 -0
- data/lib/cocoa/bindings/NSMetadataItem.rb +9 -0
- data/lib/cocoa/bindings/NSMetadataQuery.rb +35 -0
- data/lib/cocoa/bindings/NSMetadataQueryAttributeValueTuple.rb +9 -0
- data/lib/cocoa/bindings/NSMetadataQueryResultGroup.rb +12 -0
- data/lib/cocoa/bindings/NSMethodSignature.rb +13 -0
- data/lib/cocoa/bindings/NSMoveCommand.rb +8 -0
- data/lib/cocoa/bindings/NSMovie.rb +8 -0
- data/lib/cocoa/bindings/NSMutableArray.rb +33 -0
- data/lib/cocoa/bindings/NSMutableAttributedString.rb +31 -0
- data/lib/cocoa/bindings/NSMutableCharacterSet.rb +13 -0
- data/lib/cocoa/bindings/NSMutableData.rb +18 -0
- data/lib/cocoa/bindings/NSMutableDictionary.rb +16 -0
- data/lib/cocoa/bindings/NSMutableFontCollection.rb +10 -0
- data/lib/cocoa/bindings/NSMutableIndexSet.rb +14 -0
- data/lib/cocoa/bindings/NSMutableOrderedSet.rb +34 -0
- data/lib/cocoa/bindings/NSMutableParagraphStyle.rb +28 -0
- data/lib/cocoa/bindings/NSMutableSet.rb +17 -0
- data/lib/cocoa/bindings/NSMutableString.rb +15 -0
- data/lib/cocoa/bindings/NSMutableURLRequest.rb +20 -0
- data/lib/cocoa/bindings/NSNameSpecifier.rb +9 -0
- data/lib/cocoa/bindings/NSNetService.rb +31 -0
- data/lib/cocoa/bindings/NSNetServiceBrowser.rb +16 -0
- data/lib/cocoa/bindings/NSNib.rb +12 -0
- data/lib/cocoa/bindings/NSNibConnector.rb +14 -0
- data/lib/cocoa/bindings/NSNibControlConnector.rb +7 -0
- data/lib/cocoa/bindings/NSNibOutletConnector.rb +7 -0
- data/lib/cocoa/bindings/NSNotification.rb +10 -0
- data/lib/cocoa/bindings/NSNotificationCenter.rb +12 -0
- data/lib/cocoa/bindings/NSNotificationQueue.rb +10 -0
- data/lib/cocoa/bindings/NSNull.rb +7 -0
- data/lib/cocoa/bindings/NSNumber.rb +56 -0
- data/lib/cocoa/bindings/NSNumberFormatter.rb +140 -0
- data/lib/cocoa/bindings/NSObject.rb +609 -0
- data/lib/cocoa/bindings/NSObjectController.rb +37 -0
- data/lib/cocoa/bindings/NSOpenGLContext.rb +30 -0
- data/lib/cocoa/bindings/NSOpenGLLayer.rb +16 -0
- data/lib/cocoa/bindings/NSOpenGLPixelBuffer.rb +14 -0
- data/lib/cocoa/bindings/NSOpenGLPixelFormat.rb +14 -0
- data/lib/cocoa/bindings/NSOpenGLView.rb +16 -0
- data/lib/cocoa/bindings/NSOpenPanel.rb +21 -0
- data/lib/cocoa/bindings/NSOperation.rb +25 -0
- data/lib/cocoa/bindings/NSOperationQueue.rb +21 -0
- data/lib/cocoa/bindings/NSOrderedSet.rb +53 -0
- data/lib/cocoa/bindings/NSOrthography.rb +15 -0
- data/lib/cocoa/bindings/NSOutlineView.rb +36 -0
- data/lib/cocoa/bindings/NSOutputStream.rb +16 -0
- data/lib/cocoa/bindings/NSPDFImageRep.rb +13 -0
- data/lib/cocoa/bindings/NSPICTImageRep.rb +10 -0
- data/lib/cocoa/bindings/NSPageController.rb +20 -0
- data/lib/cocoa/bindings/NSPageLayout.rb +18 -0
- data/lib/cocoa/bindings/NSPanel.rb +12 -0
- data/lib/cocoa/bindings/NSParagraphStyle.rb +27 -0
- data/lib/cocoa/bindings/NSPasteboard.rb +37 -0
- data/lib/cocoa/bindings/NSPasteboardItem.rb +15 -0
- data/lib/cocoa/bindings/NSPathCell.rb +32 -0
- data/lib/cocoa/bindings/NSPathComponentCell.rb +10 -0
- data/lib/cocoa/bindings/NSPathControl.rb +22 -0
- data/lib/cocoa/bindings/NSPersistentDocument.rb +14 -0
- data/lib/cocoa/bindings/NSPipe.rb +10 -0
- data/lib/cocoa/bindings/NSPointerArray.rb +24 -0
- data/lib/cocoa/bindings/NSPointerFunctions.rb +24 -0
- data/lib/cocoa/bindings/NSPopUpButton.rb +42 -0
- data/lib/cocoa/bindings/NSPopUpButtonCell.rb +53 -0
- data/lib/cocoa/bindings/NSPopover.rb +24 -0
- data/lib/cocoa/bindings/NSPort.rb +17 -0
- data/lib/cocoa/bindings/NSPortCoder.rb +14 -0
- data/lib/cocoa/bindings/NSPortMessage.rb +13 -0
- data/lib/cocoa/bindings/NSPortNameServer.rb +10 -0
- data/lib/cocoa/bindings/NSPositionalSpecifier.rb +15 -0
- data/lib/cocoa/bindings/NSPredicate.rb +12 -0
- data/lib/cocoa/bindings/NSPredicateEditor.rb +8 -0
- data/lib/cocoa/bindings/NSPredicateEditorRowTemplate.rb +21 -0
- data/lib/cocoa/bindings/NSPrintInfo.rb +52 -0
- data/lib/cocoa/bindings/NSPrintOperation.rb +43 -0
- data/lib/cocoa/bindings/NSPrintPanel.rb +26 -0
- data/lib/cocoa/bindings/NSPrinter.rb +32 -0
- data/lib/cocoa/bindings/NSProcessInfo.rb +27 -0
- data/lib/cocoa/bindings/NSProgressIndicator.rb +33 -0
- data/lib/cocoa/bindings/NSPropertyListSerialization.rb +13 -0
- data/lib/cocoa/bindings/NSProtocolChecker.rb +10 -0
- data/lib/cocoa/bindings/NSProxy.rb +15 -0
- data/lib/cocoa/bindings/NSQuitCommand.rb +7 -0
- data/lib/cocoa/bindings/NSRangeSpecifier.rb +11 -0
- data/lib/cocoa/bindings/NSRecursiveLock.rb +10 -0
- data/lib/cocoa/bindings/NSRegularExpression.rb +21 -0
- data/lib/cocoa/bindings/NSRelativeSpecifier.rb +11 -0
- data/lib/cocoa/bindings/NSResponder.rb +162 -0
- data/lib/cocoa/bindings/NSRuleEditor.rb +48 -0
- data/lib/cocoa/bindings/NSRulerMarker.rb +25 -0
- data/lib/cocoa/bindings/NSRulerView.rb +38 -0
- data/lib/cocoa/bindings/NSRunLoop.rb +22 -0
- data/lib/cocoa/bindings/NSRunningApplication.rb +29 -0
- data/lib/cocoa/bindings/NSSavePanel.rb +53 -0
- data/lib/cocoa/bindings/NSScanner.rb +33 -0
- data/lib/cocoa/bindings/NSScreen.rb +20 -0
- data/lib/cocoa/bindings/NSScriptClassDescription.rb +27 -0
- data/lib/cocoa/bindings/NSScriptCoercionHandler.rb +9 -0
- data/lib/cocoa/bindings/NSScriptCommand.rb +31 -0
- data/lib/cocoa/bindings/NSScriptCommandDescription.rb +20 -0
- data/lib/cocoa/bindings/NSScriptExecutionContext.rb +13 -0
- data/lib/cocoa/bindings/NSScriptObjectSpecifier.rb +29 -0
- data/lib/cocoa/bindings/NSScriptSuiteRegistry.rb +21 -0
- data/lib/cocoa/bindings/NSScriptWhoseTest.rb +7 -0
- data/lib/cocoa/bindings/NSScrollView.rb +83 -0
- data/lib/cocoa/bindings/NSScroller.rb +35 -0
- data/lib/cocoa/bindings/NSSearchField.rb +10 -0
- data/lib/cocoa/bindings/NSSearchFieldCell.rb +27 -0
- data/lib/cocoa/bindings/NSSecureTextFieldCell.rb +8 -0
- data/lib/cocoa/bindings/NSSegmentedCell.rb +37 -0
- data/lib/cocoa/bindings/NSSegmentedControl.rb +27 -0
- data/lib/cocoa/bindings/NSSet.rb +39 -0
- data/lib/cocoa/bindings/NSSetCommand.rb +8 -0
- data/lib/cocoa/bindings/NSShadow.rb +14 -0
- data/lib/cocoa/bindings/NSSharingService.rb +16 -0
- data/lib/cocoa/bindings/NSSharingServicePicker.rb +10 -0
- data/lib/cocoa/bindings/NSSlider.rb +36 -0
- data/lib/cocoa/bindings/NSSliderCell.rb +40 -0
- data/lib/cocoa/bindings/NSSocketPort.rb +16 -0
- data/lib/cocoa/bindings/NSSocketPortNameServer.rb +12 -0
- data/lib/cocoa/bindings/NSSortDescriptor.rb +14 -0
- data/lib/cocoa/bindings/NSSound.rb +36 -0
- data/lib/cocoa/bindings/NSSpecifierTest.rb +7 -0
- data/lib/cocoa/bindings/NSSpeechRecognizer.rb +19 -0
- data/lib/cocoa/bindings/NSSpeechSynthesizer.rb +31 -0
- data/lib/cocoa/bindings/NSSpellChecker.rb +51 -0
- data/lib/cocoa/bindings/NSSpellServer.rb +11 -0
- data/lib/cocoa/bindings/NSSplitView.rb +26 -0
- data/lib/cocoa/bindings/NSStatusBar.rb +11 -0
- data/lib/cocoa/bindings/NSStatusItem.rb +36 -0
- data/lib/cocoa/bindings/NSStepper.rb +16 -0
- data/lib/cocoa/bindings/NSStepperCell.rb +16 -0
- data/lib/cocoa/bindings/NSStream.rb +17 -0
- data/lib/cocoa/bindings/NSString.rb +126 -0
- data/lib/cocoa/bindings/NSTabView.rb +40 -0
- data/lib/cocoa/bindings/NSTabViewItem.rb +23 -0
- data/lib/cocoa/bindings/NSTableCellView.rb +17 -0
- data/lib/cocoa/bindings/NSTableColumn.rb +35 -0
- data/lib/cocoa/bindings/NSTableHeaderCell.rb +8 -0
- data/lib/cocoa/bindings/NSTableHeaderView.rb +13 -0
- data/lib/cocoa/bindings/NSTableRowView.rb +31 -0
- data/lib/cocoa/bindings/NSTableView.rb +147 -0
- data/lib/cocoa/bindings/NSTask.rb +34 -0
- data/lib/cocoa/bindings/NSText.rb +72 -0
- data/lib/cocoa/bindings/NSTextAlternatives.rb +10 -0
- data/lib/cocoa/bindings/NSTextAttachment.rb +11 -0
- data/lib/cocoa/bindings/NSTextBlock.rb +25 -0
- data/lib/cocoa/bindings/NSTextCheckingResult.rb +35 -0
- data/lib/cocoa/bindings/NSTextContainer.rb +23 -0
- data/lib/cocoa/bindings/NSTextField.rb +38 -0
- data/lib/cocoa/bindings/NSTextFieldCell.rb +22 -0
- data/lib/cocoa/bindings/NSTextFinder.rb +23 -0
- data/lib/cocoa/bindings/NSTextInputContext.rb +22 -0
- data/lib/cocoa/bindings/NSTextList.rb +12 -0
- data/lib/cocoa/bindings/NSTextStorage.rb +31 -0
- data/lib/cocoa/bindings/NSTextTab.rb +12 -0
- data/lib/cocoa/bindings/NSTextTable.rb +17 -0
- data/lib/cocoa/bindings/NSTextTableBlock.rb +12 -0
- data/lib/cocoa/bindings/NSTextView.rb +191 -0
- data/lib/cocoa/bindings/NSThread.rb +34 -0
- data/lib/cocoa/bindings/NSTimeZone.rb +34 -0
- data/lib/cocoa/bindings/NSTimer.rb +16 -0
- data/lib/cocoa/bindings/NSTokenField.rb +16 -0
- data/lib/cocoa/bindings/NSTokenFieldCell.rb +16 -0
- data/lib/cocoa/bindings/NSToolbar.rb +39 -0
- data/lib/cocoa/bindings/NSToolbarItem.rb +39 -0
- data/lib/cocoa/bindings/NSToolbarItemGroup.rb +8 -0
- data/lib/cocoa/bindings/NSTouch.rb +12 -0
- data/lib/cocoa/bindings/NSTrackingArea.rb +11 -0
- data/lib/cocoa/bindings/NSTreeController.rb +51 -0
- data/lib/cocoa/bindings/NSTreeNode.rb +16 -0
- data/lib/cocoa/bindings/NSTypesetter.rb +66 -0
- data/lib/cocoa/bindings/NSURL.rb +62 -0
- data/lib/cocoa/bindings/NSURLAuthenticationChallenge.rb +14 -0
- data/lib/cocoa/bindings/NSURLCache.rb +19 -0
- data/lib/cocoa/bindings/NSURLConnection.rb +18 -0
- data/lib/cocoa/bindings/NSURLCredential.rb +18 -0
- data/lib/cocoa/bindings/NSURLCredentialStorage.rb +13 -0
- data/lib/cocoa/bindings/NSURLDownload.rb +15 -0
- data/lib/cocoa/bindings/NSURLHandle.rb +30 -0
- data/lib/cocoa/bindings/NSURLProtectionSpace.rb +18 -0
- data/lib/cocoa/bindings/NSURLProtocol.rb +20 -0
- data/lib/cocoa/bindings/NSURLRequest.rb +21 -0
- data/lib/cocoa/bindings/NSURLResponse.rb +12 -0
- data/lib/cocoa/bindings/NSUUID.rb +12 -0
- data/lib/cocoa/bindings/NSUbiquitousKeyValueStore.rb +26 -0
- data/lib/cocoa/bindings/NSUnarchiver.rb +18 -0
- data/lib/cocoa/bindings/NSUndoManager.rb +39 -0
- data/lib/cocoa/bindings/NSUniqueIDSpecifier.rb +9 -0
- data/lib/cocoa/bindings/NSUserAppleScriptTask.rb +7 -0
- data/lib/cocoa/bindings/NSUserAutomatorTask.rb +9 -0
- data/lib/cocoa/bindings/NSUserDefaults.rb +42 -0
- data/lib/cocoa/bindings/NSUserDefaultsController.rb +18 -0
- data/lib/cocoa/bindings/NSUserNotification.rb +32 -0
- data/lib/cocoa/bindings/NSUserNotificationCenter.rb +17 -0
- data/lib/cocoa/bindings/NSUserScriptTask.rb +9 -0
- data/lib/cocoa/bindings/NSUserUnixTask.rb +13 -0
- data/lib/cocoa/bindings/NSValue.rb +26 -0
- data/lib/cocoa/bindings/NSValueTransformer.rb +13 -0
- data/lib/cocoa/bindings/NSView.rb +266 -0
- data/lib/cocoa/bindings/NSViewAnimation.rb +9 -0
- data/lib/cocoa/bindings/NSViewController.rb +19 -0
- data/lib/cocoa/bindings/NSWhoseSpecifier.rb +17 -0
- data/lib/cocoa/bindings/NSWindow.rb +283 -0
- data/lib/cocoa/bindings/NSWindowController.rb +31 -0
- data/lib/cocoa/bindings/NSWorkspace.rb +61 -0
- data/lib/cocoa/bindings/NSXMLDTD.rb +23 -0
- data/lib/cocoa/bindings/NSXMLDTDNode.rb +16 -0
- data/lib/cocoa/bindings/NSXMLDocument.rb +37 -0
- data/lib/cocoa/bindings/NSXMLElement.rb +32 -0
- data/lib/cocoa/bindings/NSXMLNode.rb +49 -0
- data/lib/cocoa/bindings/NSXMLParser.rb +24 -0
- data/lib/cocoa/bindings/NSXPCConnection.rb +30 -0
- data/lib/cocoa/bindings/NSXPCInterface.rb +13 -0
- data/lib/cocoa/bindings/NSXPCListener.rb +15 -0
- data/lib/cocoa/helpers.rb +787 -0
- data/spec/cocoa/cocoa_spec.rb +17 -0
- data/spec/cocoa/spec_helper.rb +38 -0
- data/tasks/bacon.rake +66 -0
- data/tasks/generate.rake +188 -0
- data/tasks/setup.rake +12 -0
- 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
|