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_CLIENT_H_
6effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#define UI_WM_PUBLIC_DRAG_DROP_CLIENT_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/aura/aura_export.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/dragdrop/drag_drop_types.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/native_widget_types.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gfx {
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Point;
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ui {
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class LocatedEvent;
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class OSExchangeData;
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace aura {
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Window;
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace client {
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// An interface implemented by an object that controls a drag and drop session.
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AURA_EXPORT DragDropClient {
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~DragDropClient() {}
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Initiates a drag and drop session. Returns the drag operation that was
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // applied at the end of the drag drop session. |root_location| is in the
321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // root Window's coordinate system.
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual int StartDragAndDrop(const ui::OSExchangeData& data,
341e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)                               aura::Window* root_window,
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                               aura::Window* source_window,
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                               const gfx::Point& root_location,
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                               int operation,
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                               ui::DragDropTypes::DragEventSource source) = 0;
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Called when mouse is dragged during a drag and drop.
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void DragUpdate(aura::Window* target,
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                          const ui::LocatedEvent& event) = 0;
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Called when mouse is released during a drag and drop.
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Drop(aura::Window* target,
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    const ui::LocatedEvent& event) = 0;
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Called when a drag and drop session is cancelled.
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void DragCancel() = 0;
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns true if a drag and drop session is in progress.
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool IsDragDropInProgress() = 0;
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
551e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)AURA_EXPORT void SetDragDropClient(Window* root_window,
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                   DragDropClient* client);
571e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)AURA_EXPORT DragDropClient* GetDragDropClient(Window* root_window);
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace client
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace aura
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
62effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#endif  // UI_WM_PUBLIC_DRAG_DROP_CLIENT_H_
63