From 084b6bb674002dddd9839248c3cc6b7d6c6dc4c7 Mon Sep 17 00:00:00 2001 From: "varunjain@chromium.org" Date: Thu, 17 Nov 2011 05:18:16 +0000 Subject: First shot at implementing drag&drop for Aura BUG=97845 TEST=none Review URL: http://codereview.chromium.org/8450018 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@110437 0039d316-1c4b-4281-b951-d872f2087c98 --- ui/aura/client/aura_constants.cc | 2 ++ ui/aura/client/aura_constants.h | 7 +++++ ui/aura/client/drag_drop_client.h | 41 +++++++++++++++++++++++++ ui/aura/client/window_drag_drop_delegate.h | 48 ++++++++++++++++++++++++++++++ 4 files changed, 98 insertions(+) create mode 100644 ui/aura/client/drag_drop_client.h create mode 100644 ui/aura/client/window_drag_drop_delegate.h (limited to 'ui/aura/client') diff --git a/ui/aura/client/aura_constants.cc b/ui/aura/client/aura_constants.cc index 31c0566..32c8284 100644 --- a/ui/aura/client/aura_constants.cc +++ b/ui/aura/client/aura_constants.cc @@ -11,5 +11,7 @@ const char kRestoreBoundsKey[] = "RestoreBoundsKey"; const char kShowStateKey[] = "ShowStateKey"; const char kTooltipTextKey[] = "TooltipTextKey"; const char kModalKey[] = "ModalKey"; +const char kDesktopDragDropClientKey[] = "DesktopDragDropClientKey"; +const char kDragDropDelegateKey[] = "DragDropDelegateKey"; } // namespace aura diff --git a/ui/aura/client/aura_constants.h b/ui/aura/client/aura_constants.h index 4f13103..180d0e8 100644 --- a/ui/aura/client/aura_constants.h +++ b/ui/aura/client/aura_constants.h @@ -29,6 +29,13 @@ AURA_EXPORT extern const char kTooltipTextKey[]; // A property key to store the boolean property of window modality. AURA_EXPORT extern const char kModalKey[]; +// A property key to store the drag and drop client for the desktop. The type of +// the value is |aura::DragDropClient*|. +AURA_EXPORT extern const char kDesktopDragDropClientKey[]; + +// A property key to store the drag and drop delegate for a window. The type of +// the value is |aura::WindowDragDropDelegate*|. +AURA_EXPORT extern const char kDragDropDelegateKey[]; } // namespace aura #endif // UI_AURA_CLIENT_AURA_CONSTANTS_H_ diff --git a/ui/aura/client/drag_drop_client.h b/ui/aura/client/drag_drop_client.h new file mode 100644 index 0000000..68ed6ea --- /dev/null +++ b/ui/aura/client/drag_drop_client.h @@ -0,0 +1,41 @@ +// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef UI_AURA_CLIENT_DRAG_DROP_CLIENT_H_ +#define UI_AURA_CLIENT_DRAG_DROP_CLIENT_H_ +#pragma once + +#include "ui/aura/aura_export.h" +#include "ui/aura/event.h" + +namespace ui { +class OSExchangeData; +} + +namespace aura { + +class Window; + +// An interface implemented by an object that controls a drag and drop session. +class AURA_EXPORT DragDropClient { + public: + virtual ~DragDropClient() {} + + // Initiates a drag and drop session + virtual void StartDragAndDrop(const ui::OSExchangeData& data, + int operation) = 0; + + // Called when mouse is dragged during a drag and drop. + virtual void DragUpdate(aura::Window* target, const MouseEvent& event) = 0; + + // Called when mouse is released during a drag and drop. + virtual void Drop(aura::Window* target, const MouseEvent& event) = 0; + + // Called when a drag and drop session is cancelled. + virtual void DragCancel() = 0; +}; + +} // namespace aura + +#endif // UI_AURA_CLIENT_DRAG_DROP_CLIENT_H_ diff --git a/ui/aura/client/window_drag_drop_delegate.h b/ui/aura/client/window_drag_drop_delegate.h new file mode 100644 index 0000000..866035b --- /dev/null +++ b/ui/aura/client/window_drag_drop_delegate.h @@ -0,0 +1,48 @@ +// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef UI_AURA_CLIENT_WINDOW_DRAG_DROP_DELEGATE_H_ +#define UI_AURA_CLIENT_WINDOW_DRAG_DROP_DELEGATE_H_ +#pragma once + +#include "ui/aura/aura_export.h" + +namespace aura { + +class DropTargetEvent; + +// Delegate interface for drag and drop actions on aura::Window. +class AURA_EXPORT WindowDragDropDelegate { + public: + // A window that supports drag and drop must override this and return true if + // data contains a type that may be dropped on this window. + virtual bool CanDrop(const DropTargetEvent& event) = 0; + + // OnDragEntered is invoked when the mouse enters this window during a drag & + // drop session and CanDrop returns true. This is immediately + // followed by an invocation of OnDragUpdated, and eventually one of + // OnDragExited or OnPerformDrop. + virtual void OnDragEntered(const DropTargetEvent& event) = 0; + + // Invoked during a drag and drop session while the mouse is over the window. + // This should return a bitmask of the DragDropTypes::DragOperation supported + // based on the location of the event. Return 0 to indicate the drop should + // not be accepted. + virtual int OnDragUpdated(const DropTargetEvent& event) = 0; + + // Invoked during a drag and drop session when the mouse exits the window, or + // when the drag session was canceled and the mouse was over the window. + virtual void OnDragExited() = 0; + + // Invoked during a drag and drop session when OnDragUpdated returns a valid + // operation and the user release the mouse. + virtual int OnPerformDrop(const DropTargetEvent& event) = 0; + + protected: + virtual ~WindowDragDropDelegate() {} +}; + +} // namespace aura + +#endif // UI_AURA_CLIENT_WINDOW_DRAG_DROP_DELEGATE_H_ -- cgit v1.1