15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#ifndef UI_WM_PUBLIC_DRAG_DROP_DELEGATE_H_
6effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#define UI_WM_PUBLIC_DRAG_DROP_DELEGATE_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/aura/aura_export.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ui {
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DropTargetEvent;
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace aura {
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Window;
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace client {
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Delegate interface for drag and drop actions on aura::Window.
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AURA_EXPORT DragDropDelegate {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // OnDragEntered is invoked when the mouse enters this window during a drag &
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // drop session. This is immediately followed by an invocation of
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // OnDragUpdated, and eventually one of OnDragExited or OnPerformDrop.
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnDragEntered(const ui::DropTargetEvent& event) = 0;
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Invoked during a drag and drop session while the mouse is over the window.
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This should return a bitmask of the DragDropTypes::DragOperation supported
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // based on the location of the event. Return 0 to indicate the drop should
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // not be accepted.
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual int OnDragUpdated(const ui::DropTargetEvent& event) = 0;
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Invoked during a drag and drop session when the mouse exits the window, or
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // when the drag session was canceled and the mouse was over the window.
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnDragExited() = 0;
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Invoked during a drag and drop session when OnDragUpdated returns a valid
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // operation and the user release the mouse.
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual int OnPerformDrop(const ui::DropTargetEvent& event) = 0;
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~DragDropDelegate() {}
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AURA_EXPORT void SetDragDropDelegate(Window* window,
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                     DragDropDelegate* delegate);
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AURA_EXPORT DragDropDelegate* GetDragDropDelegate(Window* window);
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace client
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace aura
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
51effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#endif  // UI_WM_PUBLIC_DRAG_DROP_DELEGATE_H_
52