1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #import <Cocoa/Cocoa.h> 6 7 #include "base/file_path.h" 8 #include "base/memory/scoped_nsobject.h" 9 #include "base/memory/scoped_ptr.h" 10 #include "googleurl/src/gurl.h" 11 12 @class TabContentsViewCocoa; 13 struct WebDropData; 14 15 // A class that handles tracking and event processing for a drag and drop 16 // originating from the content area. 17 @interface WebDragSource : NSObject { 18 @private 19 // Our tab. Weak reference (owns or co-owns us). 20 TabContentsViewCocoa* contentsView_; 21 22 // Our drop data. Should only be initialized once. 23 scoped_ptr<WebDropData> dropData_; 24 25 // The image to show as drag image. Can be nil. 26 scoped_nsobject<NSImage> dragImage_; 27 28 // The offset to draw |dragImage_| at. 29 NSPoint imageOffset_; 30 31 // Our pasteboard. 32 scoped_nsobject<NSPasteboard> pasteboard_; 33 34 // A mask of the allowed drag operations. 35 NSDragOperation dragOperationMask_; 36 37 // The file name to be saved to for a drag-out download. 38 FilePath downloadFileName_; 39 40 // The URL to download from for a drag-out download. 41 GURL downloadURL_; 42 } 43 44 // Initialize a WebDragSource object for a drag (originating on the given 45 // contentsView and with the given dropData and pboard). Fill the pasteboard 46 // with data types appropriate for dropData. 47 - (id)initWithContentsView:(TabContentsViewCocoa*)contentsView 48 dropData:(const WebDropData*)dropData 49 image:(NSImage*)image 50 offset:(NSPoint)offset 51 pasteboard:(NSPasteboard*)pboard 52 dragOperationMask:(NSDragOperation)dragOperationMask; 53 54 // Returns a mask of the allowed drag operations. 55 - (NSDragOperation)draggingSourceOperationMaskForLocal:(BOOL)isLocal; 56 57 // Call when asked to do a lazy write to the pasteboard; hook up to 58 // -pasteboard:provideDataForType: (on the contentsView). 59 - (void)lazyWriteToPasteboard:(NSPasteboard*)pboard 60 forType:(NSString*)type; 61 62 // Start the drag (on the originally provided contentsView); can do this right 63 // after -initWithContentsView:.... 64 - (void)startDrag; 65 66 // End the drag and clear the pasteboard; hook up to 67 // -draggedImage:endedAt:operation:. 68 - (void)endDragAt:(NSPoint)screenPoint 69 operation:(NSDragOperation)operation; 70 71 // Drag moved; hook up to -draggedImage:movedTo:. 72 - (void)moveDragTo:(NSPoint)screenPoint; 73 74 // Call to drag a promised file to the given path (should be called before 75 // -endDragAt:...); hook up to -namesOfPromisedFilesDroppedAtDestination:. 76 // Returns the file name (not including path) of the file deposited (or which 77 // will be deposited). 78 - (NSString*)dragPromisedFileTo:(NSString*)path; 79 80 @end 81