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