From 6308ce38ab63bbc0d457f2129a301051e83aab43 Mon Sep 17 00:00:00 2001 From: sekelsenmat Date: Mon, 10 Mar 2008 11:01:03 +0000 Subject: [PATCH] The statusitem example now works. Adds NSImage. git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@373 8e941d3f-bd1b-0410-a28a-d453659cc2b4 --- bindings/pascocoa/appkit/AppKit.inc | 4 +- bindings/pascocoa/appkit/NSImage.inc | 189 ++++++++++++++++++ bindings/pascocoa/appkit/NSStatusItem.inc | 31 ++- .../pascocoa/examples/statusitem/actions.pas | 13 ++ .../pascocoa/examples/statusitem/icon.ico | Bin 0 -> 478 bytes .../examples/statusitem/statusitem.lpi | 146 ++++++++------ bindings/pascocoa/foundation/NSObject.inc | 140 +++++++------ 7 files changed, 395 insertions(+), 128 deletions(-) create mode 100644 bindings/pascocoa/appkit/NSImage.inc create mode 100644 bindings/pascocoa/examples/statusitem/icon.ico diff --git a/bindings/pascocoa/appkit/AppKit.inc b/bindings/pascocoa/appkit/AppKit.inc index 645565968..be00db1a0 100644 --- a/bindings/pascocoa/appkit/AppKit.inc +++ b/bindings/pascocoa/appkit/AppKit.inc @@ -53,8 +53,8 @@ #import #import } {$include NSGraphics.inc} -{#import -#import +{$include NSImage.inc} +{#import #import #import #import diff --git a/bindings/pascocoa/appkit/NSImage.inc b/bindings/pascocoa/appkit/NSImage.inc new file mode 100644 index 000000000..1a3b2af76 --- /dev/null +++ b/bindings/pascocoa/appkit/NSImage.inc @@ -0,0 +1,189 @@ +{%mainunit appkit.pas} +{ + NSImage.h + Application Kit + Copyright (c) 1994-2005, Apple Computer, Inc. + All rights reserved. +} + +{$ifdef HEADER} +{$ifndef NSIMAGE_PAS_H} +{$define NSIMAGE_PAS_H} + +{#import +#import } + +//#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_2 + +type + NSImageLoadStatus = ( + NSImageLoadStatusCompleted, + NSImageLoadStatusCancelled, + NSImageLoadStatusInvalidData, + NSImageLoadStatusUnexpectedEOF, + NSImageLoadStatusReadError + ); + + NSImageCacheMode = ( + NSImageCacheDefault, // unspecified. use image rep's default + NSImageCacheAlways, // always generate a cache when drawing + NSImageCacheBySize, // cache if cache size is smaller than original data + NSImageCacheNever // never cache, always draw direct + ); + +//#endif + +{ Class and method name strings } +const + Str_NSImage = 'NSImage'; + + Str_initWithContentsOfFile = 'initWithContentsOfFile:'; + +{$endif} +{$endif} +{$ifdef CLASSES} +{$ifndef NSIMAGE_PAS_C} +{$define NSIMAGE_PAS_C} + +{#import +#import } + +//@class NSArray, NSColor, NSImageRep, NSPasteboard, NSURL; + + NSImage = class(NSObject) // + public + { Extra binding functions } + function getClass: objc.id; override; + public +{ ++ (id)imageNamed:(NSString *)name; /* If this finds & creates the image, only name is saved when archived */ + +- (id)initWithSize:(NSSize)aSize; +- (id)initWithData:(NSData *)data; /* When archived, saves contents */} + constructor initWithContentsOfFile(fileName: CFStringRef); { When archived, saves contents } +{- (id)initWithContentsOfURL:(NSURL *)url; /* When archived, saves contents */ +- (id)initByReferencingFile:(NSString *)fileName; /* When archived, saves fileName */ +#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_2 +- (id)initByReferencingURL:(NSURL *)url; /* When archived, saves url, supports progressive loading */ +#endif +- (id)initWithPasteboard:(NSPasteboard *)pasteboard; + +- (void)setSize:(NSSize)aSize; +- (NSSize)size; +- (BOOL)setName:(NSString *)string; +- (NSString *)name; +- (void)setScalesWhenResized:(BOOL)flag; +- (BOOL)scalesWhenResized; +- (void)setDataRetained:(BOOL)flag; +- (BOOL)isDataRetained; +- (void)setCachedSeparately:(BOOL)flag; +- (BOOL)isCachedSeparately; +- (void)setCacheDepthMatchesImageDepth:(BOOL)flag; +- (BOOL)cacheDepthMatchesImageDepth; +- (void)setBackgroundColor:(NSColor *)aColor; +- (NSColor *)backgroundColor; +- (void)setUsesEPSOnResolutionMismatch:(BOOL)flag; +- (BOOL)usesEPSOnResolutionMismatch; +- (void)setPrefersColorMatch:(BOOL)flag; +- (BOOL)prefersColorMatch; +- (void)setMatchesOnMultipleResolution:(BOOL)flag; +- (BOOL)matchesOnMultipleResolution; +- (void)dissolveToPoint:(NSPoint)point fraction:(float)aFloat; +- (void)dissolveToPoint:(NSPoint)point fromRect:(NSRect)rect fraction:(float)aFloat; +- (void)compositeToPoint:(NSPoint)point operation:(NSCompositingOperation)op; +- (void)compositeToPoint:(NSPoint)point fromRect:(NSRect)rect operation:(NSCompositingOperation)op; +- (void)compositeToPoint:(NSPoint)point operation:(NSCompositingOperation)op fraction:(float)delta; +- (void)compositeToPoint:(NSPoint)point fromRect:(NSRect)rect operation:(NSCompositingOperation)op fraction:(float)delta; +- (void)drawAtPoint:(NSPoint)point fromRect:(NSRect)fromRect operation:(NSCompositingOperation)op fraction:(float)delta; +- (void)drawInRect:(NSRect)rect fromRect:(NSRect)fromRect operation:(NSCompositingOperation)op fraction:(float)delta; +- (BOOL)drawRepresentation:(NSImageRep *)imageRep inRect:(NSRect)rect; +- (void)recache; +- (NSData *)TIFFRepresentation; +- (NSData *)TIFFRepresentationUsingCompression:(NSTIFFCompression)comp factor:(float)aFloat; + +- (NSArray *)representations; +- (void)addRepresentations:(NSArray *)imageReps; +- (void)addRepresentation:(NSImageRep *)imageRep; +- (void)removeRepresentation:(NSImageRep *)imageRep; + +- (BOOL)isValid; +- (void)lockFocus; +- (void)lockFocusOnRepresentation:(NSImageRep *)imageRepresentation; +- (void)unlockFocus; + +- (NSImageRep *)bestRepresentationForDevice:(NSDictionary *)deviceDescription; + +- (void)setDelegate:(id)anObject; +- (id)delegate; + +/* These return union of all the types registered with NSImageRep. +*/ ++ (NSArray *)imageUnfilteredFileTypes; ++ (NSArray *)imageUnfilteredPasteboardTypes; ++ (NSArray *)imageFileTypes; ++ (NSArray *)imagePasteboardTypes; + ++ (BOOL)canInitWithPasteboard:(NSPasteboard *)pasteboard; + +- (void)setFlipped:(BOOL)flag; +- (BOOL)isFlipped; + +#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_2 +- (void)cancelIncrementalLoad; + +-(void)setCacheMode:(NSImageCacheMode)mode; +-(NSImageCacheMode)cacheMode; +#endif + +@end + +#ifdef WIN32 + +@interface NSImage (NSWindowsExtensions) +- (id)initWithIconHandle:(void * /* HICON */)icon; +- (id)initWithBitmapHandle:(void * /* HBITMAP */)bitmap; +@end + +#endif + +@interface NSObject(NSImageDelegate) +- (NSImage *)imageDidNotDraw:(id)sender inRect:(NSRect)aRect; + +#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_2 +- (void)image:(NSImage*)image willLoadRepresentation:(NSImageRep*)rep; +- (void)image:(NSImage*)image didLoadRepresentationHeader:(NSImageRep*)rep; +- (void)image:(NSImage*)image didLoadPartOfRepresentation:(NSImageRep*)rep withValidRows:(int)rows; +- (void)image:(NSImage*)image didLoadRepresentation:(NSImageRep*)rep withStatus:(NSImageLoadStatus)status; +#endif +@end + +@interface NSBundle(NSBundleImageExtension) +- (NSString *)pathForImageResource:(NSString *)name; /* May return nil if no file found */ +@end} + + end; + +{$endif} +{$endif} +{$ifdef IMPLEMENTATION} + +function NSImage.getClass: objc.id; +begin + Result := objc_getClass(Str_NSImage); +end; + +constructor NSImage.initWithContentsOfFile(fileName: CFStringRef); +type + initWithContentsOfFile_t = function (param1: objc.id; param2: SEL; + param3: CFStringRef): objc.id; cdecl; +var + vinit: initWithContentsOfFile_t; +begin + ClassId := getClass(); + allocbuf := objc_msgSend(ClassId, sel_registerName(PChar(Str_alloc)), []); + vinit := initWithContentsOfFile_t(@objc_msgSend); + Handle := vinit(allocbuf, sel_registerName(PChar(Str_initWithContentsOfFile)), fileName); +end; + +{$endif} + diff --git a/bindings/pascocoa/appkit/NSStatusItem.inc b/bindings/pascocoa/appkit/NSStatusItem.inc index 030b50489..cd55fac39 100644 --- a/bindings/pascocoa/appkit/NSStatusItem.inc +++ b/bindings/pascocoa/appkit/NSStatusItem.inc @@ -20,6 +20,12 @@ unsigned int reserved:29; } _SBIFlags; *) +{ Class and method name strings } +const + Str_NSStatusItem = 'NSStatusItem'; + + Str_setImage = 'setImage:'; + {$endif} {$endif} {$ifdef CLASSES} @@ -36,6 +42,9 @@ NSStatusItem = class(NSObject) public + { Extra binding functions } + function getClass: objc.id; override; + public {- (NSStatusBar*) statusBar; @@ -63,10 +72,10 @@ - (NSAttributedString*) attributedTitle; - (void) setAttributedTitle:(NSAttributedString*)title; -- (NSImage*) image; -- (void) setImage:(NSImage*)image; +- (NSImage*) image;} + procedure setImage(image: NSImage); -#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_3 +{#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_3 - (NSImage *)alternateImage; - (void)setAlternateImage:(NSImage*)image; #endif @@ -103,5 +112,21 @@ {$endif} {$ifdef IMPLEMENTATION} +function NSStatusItem.getClass: objc.id; +begin + Result := objc_getClass(Str_NSStatusItem); +end; + +procedure NSStatusItem.setImage(image: NSImage); +type + setImage_t = procedure (param1: objc.id; param2: SEL; + param3: objc.id); cdecl; +var + vmethod: setImage_t; +begin + vmethod := setImage_t(@objc_msgSend); + vmethod(Handle, sel_registerName(PChar(Str_setImage)), image.Handle); +end; + {$endif} diff --git a/bindings/pascocoa/examples/statusitem/actions.pas b/bindings/pascocoa/examples/statusitem/actions.pas index 4861cd49e..804c13ab8 100644 --- a/bindings/pascocoa/examples/statusitem/actions.pas +++ b/bindings/pascocoa/examples/statusitem/actions.pas @@ -26,6 +26,7 @@ type { Fields } bar: NSStatusBar; item: NSStatusItem; + image: NSImage; end; { Objective-c Methods } @@ -57,12 +58,18 @@ begin end; constructor TMyActionList.Create; +var + fileName: CFStringRef; begin inherited Create; AddMethods(); bar := NSStatusBar.systemStatusBar(); + + fileName := CFStringCreateWithPascalString(nil, + ExtractFilePath(ParamStr(0)) + 'icon.ico', kCFStringEncodingUTF8); + image := NSImage.initWithContentsOfFile(fileName); end; { Objective-c Methods } @@ -70,6 +77,12 @@ end; procedure doShowStatusitem(param1: objc.id; param2: SEL; param3: objc.id); cdecl; begin actionList.item := actionList.bar.statusItemWithLength(NSSquareStatusItemLength); + + if actionList.item = nil then WriteLn('The item is nil!'); + if actionList.image = nil then WriteLn('The image is nil!'); + + actionList.item.retain(); + actionList.item.setImage(actionList.image); end; end. diff --git a/bindings/pascocoa/examples/statusitem/icon.ico b/bindings/pascocoa/examples/statusitem/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..3fe34ad0842d726e411413d9aa48862e37c25efc GIT binary patch literal 478 zcmb_Y!3uyN6r0iq)Wv)6)FJ4X`e>W(bW-R3O8N9B J55JcG;{>6H7&ia_ literal 0 HcmV?d00001 diff --git a/bindings/pascocoa/examples/statusitem/statusitem.lpi b/bindings/pascocoa/examples/statusitem/statusitem.lpi index a5ae09980..9639d0a9c 100644 --- a/bindings/pascocoa/examples/statusitem/statusitem.lpi +++ b/bindings/pascocoa/examples/statusitem/statusitem.lpi @@ -7,7 +7,7 @@ - + @@ -26,15 +26,15 @@ - + - - + + - + @@ -60,20 +60,24 @@ - + - - - + + + + + - - - + + + + + @@ -123,11 +127,9 @@ - - - + + - @@ -159,17 +161,17 @@ - - - + + + - - - - + + + + @@ -218,18 +220,18 @@ - - - - + + + + - + - - + + @@ -254,74 +256,92 @@ - - + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - + + - - + + - - + + - - + + - - + + - + - + - + - + - - + + - + - - + + - - + + - - - - - - - - diff --git a/bindings/pascocoa/foundation/NSObject.inc b/bindings/pascocoa/foundation/NSObject.inc index eb8783b27..21aa833e3 100644 --- a/bindings/pascocoa/foundation/NSObject.inc +++ b/bindings/pascocoa/foundation/NSObject.inc @@ -9,68 +9,18 @@ //#import //#import -//@class NSInvocation, NSMethodSignature, NSCoder, NSString, NSEnumerator; -//@class Protocol; - -{*************** Basic protocols ***************} - -{@protocol NSObject - -- (BOOL)isEqual:(id)object; -- (unsigned)hash; - -- (Class)superclass; -- (Class)class; -- (id)self; -- (NSZone *)zone; - -- (id)performSelector:(SEL)aSelector; -- (id)performSelector:(SEL)aSelector withObject:(id)object; -- (id)performSelector:(SEL)aSelector withObject:(id)object1 withObject:(id)object2; - -- (BOOL)isProxy; - -- (BOOL)isKindOfClass:(Class)aClass; -- (BOOL)isMemberOfClass:(Class)aClass; -- (BOOL)conformsToProtocol:(Protocol *)aProtocol; - -- (BOOL)respondsToSelector:(SEL)aSelector; - -- (id)retain; -- (oneway void)release; -- (id)autorelease; -- (unsigned)retainCount; - -- (NSString *)description; - -@end - -@protocol NSCopying - -- (id)copyWithZone:(NSZone *)zone; - -@end - -@protocol NSMutableCopying - -- (id)mutableCopyWithZone:(NSZone *)zone; - -@end - -@protocol NSCoding - -- (void)encodeWithCoder:(NSCoder *)aCoder; -- (id)initWithCoder:(NSCoder *)aDecoder; - -@end } - -{*********** Base class ***********} - +{ Class and method name strings } const + {*********** Base class ***********} + Str_NSObject = 'NSObject'; Str_alloc = 'alloc'; Str_init = 'init'; + + {*************** Basic protocols ***************} + + Str_retain = 'retain'; Str_release = 'release'; {*********** Object Allocation / Deallocation *******} @@ -95,6 +45,8 @@ FOUNDATION_EXPORT unsigned NSExtraRefCount(id object);} {$ifndef NSOBJECT_PAS_C} {$define NSOBJECT_PAS_C} +{*********** Base class ***********} + NSObject = class public { class id } @@ -153,12 +105,69 @@ FOUNDATION_EXPORT unsigned NSExtraRefCount(id object);} - (id)replacementObjectForCoder:(NSCoder *)aCoder; - (id)awakeAfterUsingCoder:(NSCoder *)aDecoder;} +//@class NSInvocation, NSMethodSignature, NSCoder, NSString, NSEnumerator; +//@class Protocol; + +{*************** Basic protocols ***************} + +{@protocol NSObject + +- (BOOL)isEqual:(id)object; +- (unsigned)hash; + +- (Class)superclass; +- (Class)class; +- (id)self; +- (NSZone *)zone; + +- (id)performSelector:(SEL)aSelector; +- (id)performSelector:(SEL)aSelector withObject:(id)object; +- (id)performSelector:(SEL)aSelector withObject:(id)object1 withObject:(id)object2; + +- (BOOL)isProxy; + +- (BOOL)isKindOfClass:(Class)aClass; +- (BOOL)isMemberOfClass:(Class)aClass; +- (BOOL)conformsToProtocol:(Protocol *)aProtocol; + +- (BOOL)respondsToSelector:(SEL)aSelector;} + + function retain: objc.id; + procedure release; +{- (id)autorelease; +- (unsigned)retainCount; + +- (NSString *)description; + +@end + +@protocol NSCopying + +- (id)copyWithZone:(NSZone *)zone; + +@end + +@protocol NSMutableCopying + +- (id)mutableCopyWithZone:(NSZone *)zone; + +@end + +@protocol NSCoding + +- (void)encodeWithCoder:(NSCoder *)aCoder; +- (id)initWithCoder:(NSCoder *)aDecoder; + +@end } + end; {$endif} {$endif} {$ifdef IMPLEMENTATION} +{*********** Base class ***********} + constructor NSObject.Create; begin ClassId := getClass(); @@ -168,14 +177,13 @@ end; constructor NSObject.CreateWithHandle(aHandle: objc.id); begin + ClassId := getClass(); Handle := aHandle; - - inherited Create; end; destructor NSObject.Destroy; begin - objc_msgSend(Handle, sel_registerName(PChar(Str_release)), []); + release; end; function NSObject.getClass: objc.id; @@ -183,5 +191,17 @@ begin Result := objc_getClass(Str_NSObject); end; +{*************** Basic protocols ***************} + +function NSObject.retain: objc.id; +begin + Result := objc_msgSend(Handle, sel_registerName(PChar(Str_retain)), []); +end; + +procedure NSObject.release; +begin + objc_msgSend(Handle, sel_registerName(PChar(Str_release)), []); +end; + {$endif}