Mailing Lists: Apple Mailing Lists

Image of Mac OS face in stamp
 
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: NSFilePromisePboardType



I should have read it before just copy/pasting but I cleaned up the
first method to make it easier to read:

- (BOOL) outlineView:(NSOutlineView *)inOutlineView
writeItems:(NSArray *)inItems toPasteboard:(NSPasteboard
*)inPasteboard {
       NSLog ( @"Array - %@\nPasteboard - %@", inItems, inPasteboard );
//inItems is an Array of FileNames
       NSMutableArray *fileTypes = [NSMutableArray
arrayWithCapacity:[inItems count]];
       NSEnumerator *typeEnum = [inItems objectEnumerator];
       id filename = nil;

       while ( filename = [typeEnum nextObject] ) {
               NSString *type = [file pathExtension];
               if ( [type length] == 0 /* type is a directory */ )
type = NSFileTypeForHFSTypeCode( 'fold' );
               [fileTypes addObject:type];
       }

       [inPasteboard declareTypes:[NSArray
arrayWithObjects:NSFilesPromisePboardType, nil] owner:self];
       [inPasteboard setPropertyList:fileTypes
forType:NSFilesPromisePboardType];

       return YES;
}

The remaining bit is to actually implement this method in your dragSource
- (NSArray *) namesOfPromisedFilesDroppedAtDestination:(NSURL
*)inDropDestination {
	NSLog( @"We got this far to put stuff at %@", inDropDestination );
//this is also where you should create the files, they will appear on
the desktop where you let go of the mouse
#warning deliver something for the files Promise
	return [NSArray array];
}

On Wed, 15 Dec 2004 01:44:09 -0500, The Karl Adam <email@hidden> wrote:
> You can put the files on the pasteboard and declare the
> NSFilesPBoardType IF you read the docs correctly, but here is some
> code that works in one of my apps. The first part puts the "files" on
> the pasteboard the second set override some of the default drag
> handling, if you find bugs/make improvements feel free to drop me an
> email. This code was orignally written to add support for these
> features to Table/OutlineViews so you'll have to copy/paste the
> innards of the first method.
> 
> - (BOOL) outlineView:(NSOutlineView *)inOutlineView
> writeItems:(NSArray *)inItems toPasteboard:(NSPasteboard
> *)inPasteboard {
>         NSLog ( @"Array - %@\nPasteboard - %@", inItems, inPasteboard );
>         NSMutableArray *fileTypes = [NSMutableArray arrayWithCapacity:[inItems count]];
>         NSEnumerator *typeEnum = [inItems objectEnumerator];
>         id filename = nil;
> 
>         while ( filename = [typeEnum nextObject] ) {
>                 if ( [filename isKindOfClass:[NSArray class]] ) filename = [filename
> objectAtIndex:0];
>                 NSString *type = [[(DCSearchResponse *)filename filename] pathExtension];
>                 if ( [type length] == 0 ) type = NSFileTypeForHFSTypeCode( 'fold' );
>                 [fileTypes addObject:type];
>         }
> 
>         [inPasteboard declareTypes:[NSArray
> arrayWithObjects:NSFilesPromisePboardType, nil] owner:self];
>         [inPasteboard setPropertyList:fileTypes forType:NSFilesPromisePboardType];
> 
>         return YES;
> }
> 
> ----- This is from the View subclass I have
> 
> #pragma mark Dragging Overloads to support interapp drops and File Promises
> 
> - (unsigned int) draggingSourceOperationMaskForLocal:(BOOL)isLocal {
>         return NSDragOperationNone|NSDragOperationCopy|NSDragOperationLink|NSDragOperationGeneric;
> }
> 
> - (void)dragImage:(NSImage *)anImage at:(NSPoint)imageLoc
> offset:(NSSize)mouseOffset event:(NSEvent *)theEvent
> pasteboard:(NSPasteboard *)pboard source:(id)sourceObject
> slideBack:(BOOL)slideBack {
> 
>         // FINALLY!!
>         // Okay HFS File promises work through a bit of black magic,
>         // I have h4x0red into it without revealing too much of it's workings here
>         // I should edit this later to maintain whatever other info was on the pboard
>         if ( [[pboard types] containsObject:NSFilesPromisePboardType] ) {
>                 NSArray *promisedTypes = [[pboard
> propertyListForType:NSFilesPromisePboardType] retain];;
> 
>                 NSFilePromiseDragSource *aFSource = [[[NSFilePromiseDragSource
> alloc] initWithSource:sourceObject] autorelease];
>                 [pboard declareTypes:[NSArray
> arrayWithObjects:NSFilesPromisePboardType, @"CorePasteboardFlavorType
> 0x70686673", @"CorePasteboardFlavorType 0x66737350",
> @"NSPromiseContentsPboardType", nil] owner:aFSource];
> 
>                 // Construct the HFS Flavor for the Finder to use on Drop
>                 PromiseHFSFlavor aFlavor;
>                 memset( &aFlavor, 0, sizeof(aFlavor) );
>                 if ( [promisedTypes containsObject:@"'fold'"] ) aFlavor.fileType = 'fold';
>                 aFlavor.fileCreator = '????';
>                 aFlavor.promisedFlavor = 'fssP';
>                 NSData *flavorData = [NSData dataWithBytes:&aFlavor length:14];
>                 [pboard setPropertyList:promisedTypes forType:NSFilesPromisePboardType];
>                 [pboard setData:flavorData forType:@"CorePasteboardFlavorType 0x70686673"];
> 
>                 // Cleanup
>                 [promisedTypes release];
>         }
> 
>         //NSLog( @"data from CFPBTypes: %@, %@, %@", [pboard
> dataForType:@"CorePasteboardFlavorType 0x70686673"], [pboard
> dataForType:@"CorePasteboardFlavorType 0x66737350"],
> NSStringFromClass( [[pboard
> dataForType:@"NSPromiseContentsPboardType"] class] ) );
>         [super dragImage:anImage at:imageLoc offset:mouseOffset
> event:theEvent pasteboard:pboard source:sourceObject
> slideBack:slideBack];
> }
> 
> 
> -Karl
> 
> On Tue, 14 Dec 2004 18:43:10 -0700, Nick Zitzmann <email@hidden> wrote:
> >
> > On Dec 14, 2004, at 6:23 PM, Fredrik Olsson wrote:
> >
> > > 1. Finder do not not accept drops at all, that goes for other targets
> > > as well that should accepts simple string drops.
> > > 2. namesOfPromisedFilesDroppedAtDestination: i never invoked.
> > >
> > > Is there sample code anywhere where NSFilePromisePboardType is used?
> >
> > Not that I'm aware of. Are you trying to set a pasteboard to use the
> > NSFilePromisePboardType as one of its declared types? If so, that won't
> > work; you _must_ use the -dragPromisedFilesOfTypes:... method provided
> > by NSView to initiate a file-promise drag. I hope you're not using a
> > table view as a drag source...
> >
> > Can you show us what you're trying to do?
> >
> > Nick Zitzmann
> > <http://www.chronosnet.com/>
> >
> >  _______________________________________________
> > Do not post admin requests to the list. They will be ignored.
> > Cocoa-dev mailing list      (email@hidden)
> > Help/Unsubscribe/Update your Subscription:
> > http://lists.apple.com/mailman/options/cocoa-dev/email@hidden
> >
> > This email sent to email@hidden
> >
>
 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Cocoa-dev mailing list      (email@hidden)
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/email@hidden

This email sent to email@hidden

References: 
 >NSFilePromisePboardType (From: Fredrik Olsson <email@hidden>)
 >Re: NSFilePromisePboardType (From: Nick Zitzmann <email@hidden>)
 >Re: NSFilePromisePboardType (From: The Karl Adam <email@hidden>)



Visit the Apple Store online or at retail locations.
1-800-MY-APPLE

Contact Apple | Terms of Use | Privacy Policy

Copyright © 2007 Apple Inc. All rights reserved.