web_contents_drag_source.h revision c407dc5cd9bdc5668497f21b26b09d988ab439de
1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright (c) 2010 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifndef CHROME_BROWSER_COCOA_WEB_CONTENTS_DRAG_SOURCE_H_ 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define CHROME_BROWSER_COCOA_WEB_CONTENTS_DRAG_SOURCE_H_ 7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#import <Cocoa/Cocoa.h> 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "app/download_file_interface.h" 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/file_path.h" 12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/scoped_nsobject.h" 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/scoped_ptr.h" 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/bookmarks/bookmark_drag_data.h" 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch@class TabContentsViewCocoa; 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// A class that handles tracking and event processing for a drag and drop 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// originating from the content area. Subclasses should implement 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// fillClipboard and dragImage. 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch@interface WebContentsDragSource : NSObject { 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch @private 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Our tab. Weak reference (owns or co-owns us). 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TabContentsViewCocoa* contentsView_; 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Our pasteboard. 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_nsobject<NSPasteboard> pasteboard_; 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // A mask of the allowed drag operations. 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NSDragOperation dragOperationMask_; 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Initialize a DragDataSource object for a drag (originating on the given 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// contentsView and with the given dropData and pboard). Fill the pasteboard 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// with data types appropriate for dropData. 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch- (id)initWithContentsView:(TabContentsViewCocoa*)contentsView 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch pasteboard:(NSPasteboard*)pboard 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch dragOperationMask:(NSDragOperation)dragOperationMask; 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Creates the drag image. Implemented by the subclass. 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch- (NSImage*)dragImage; 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Put the data being dragged onto the pasteboard. Implemented by the 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// subclass. 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch- (void)fillPasteboard; 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Returns a mask of the allowed drag operations. 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch- (NSDragOperation)draggingSourceOperationMaskForLocal:(BOOL)isLocal; 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Start the drag (on the originally provided contentsView); can do this right 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// after -initWithContentsView:.... 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch- (void)startDrag; 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// End the drag and clear the pasteboard; hook up to 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// -draggedImage:endedAt:operation:. 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch- (void)endDragAt:(NSPoint)screenPoint 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch operation:(NSDragOperation)operation; 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Drag moved; hook up to -draggedImage:movedTo:. 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch- (void)moveDragTo:(NSPoint)screenPoint; 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch@end 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif // define CHROME_BROWSER_COCOA_WEB_CONTENTS_DRAG_SOURCE_H_ 65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 66