/* * Copyright (C) 2001 Peter Kelly (pmk@post.com) * Copyright (C) 2001 Tobias Anton (anton@stud.fbi.fh-darmstadt.de) * Copyright (C) 2006 Samuel Weinig (sam.weinig@gmail.com) * Copyright (C) 2003, 2004, 2005, 2006, 2008, 2013 Apple Inc. All rights reserved. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public License * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. * */ #ifndef DataTransfer_h #define DataTransfer_h #include "CachedResourceHandle.h" #include "DataTransferAccessPolicy.h" #include "DragActions.h" #include "DragImage.h" #include "IntPoint.h" #include #include namespace WebCore { class CachedImage; class DataTransferItemList; class DragData; class DragImageLoader; class Element; class FileList; class Pasteboard; class DataTransfer : public RefCounted { public: static Ref createForCopyAndPaste(DataTransferAccessPolicy); WEBCORE_EXPORT ~DataTransfer(); String dropEffect() const; void setDropEffect(const String&); String effectAllowed() const; void setEffectAllowed(const String&); Vector types() const; FileList& files() const; void clearData(const String& type); void clearData(); String getData(const String& type) const; void setData(const String& type, const String& data); void setDragImage(Element*, int x, int y); #if ENABLE(DATA_TRANSFER_ITEMS) PassRefPtr items() = 0; #endif void setAccessPolicy(DataTransferAccessPolicy); bool canReadTypes() const; bool canReadData() const; bool canWriteData() const; bool hasFileOfType(const String&); bool hasStringOfType(const String&); Pasteboard& pasteboard() { return *m_pasteboard; } #if ENABLE(DRAG_SUPPORT) static Ref createForDragAndDrop(); static Ref createForDragAndDrop(DataTransferAccessPolicy, const DragData&); bool dropEffectIsUninitialized() const { return m_dropEffect == "uninitialized"; } DragOperation sourceOperation() const; DragOperation destinationOperation() const; void setSourceOperation(DragOperation); void setDestinationOperation(DragOperation); void setDragHasStarted() { m_shouldUpdateDragImage = true; } DragImageRef createDragImage(IntPoint& dragLocation) const; void updateDragImage(); #endif private: enum Type { CopyAndPaste, DragAndDrop }; DataTransfer(DataTransferAccessPolicy, std::unique_ptr, Type = CopyAndPaste, bool forFileDrag = false); #if ENABLE(DRAG_SUPPORT) bool canSetDragImage() const; #endif DataTransferAccessPolicy m_policy; std::unique_ptr m_pasteboard; mutable RefPtr m_fileList; #if ENABLE(DRAG_SUPPORT) bool m_forDrag; bool m_forFileDrag; String m_dropEffect; String m_effectAllowed; bool m_shouldUpdateDragImage; IntPoint m_dragLocation; CachedResourceHandle m_dragImage; RefPtr m_dragImageElement; std::unique_ptr m_dragImageLoader; #endif }; } // namespace WebCore #endif // DataTransfer_h