1/* 2 * Copyright (C) 2007 Apple Inc. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 1. Redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer. 9 * 2. Redistributions in binary form must reproduce the above copyright 10 * notice, this list of conditions and the following disclaimer in the 11 * documentation and/or other materials provided with the distribution. 12 * 13 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 */ 25 26#ifndef DragData_h 27#define DragData_h 28 29#include "Color.h" 30#include "DragActions.h" 31#include "IntPoint.h" 32 33#include <wtf/Forward.h> 34#include <wtf/HashMap.h> 35#include <wtf/Vector.h> 36 37#if PLATFORM(MAC) 38#include <wtf/RetainPtr.h> 39#ifdef __OBJC__ 40#import <Foundation/Foundation.h> 41#import <AppKit/NSDragging.h> 42typedef id <NSDraggingInfo> DragDataRef; 43@class NSPasteboard; 44#else 45typedef void* DragDataRef; 46class NSPasteboard; 47#endif 48#elif PLATFORM(QT) 49QT_BEGIN_NAMESPACE 50class QMimeData; 51QT_END_NAMESPACE 52typedef const QMimeData* DragDataRef; 53#elif PLATFORM(WIN) 54typedef struct IDataObject* DragDataRef; 55#include <wtf/text/WTFString.h> 56#elif PLATFORM(WX) 57typedef class wxDataObject* DragDataRef; 58#elif PLATFORM(GTK) 59namespace WebCore { 60class DataObjectGtk; 61} 62typedef WebCore::DataObjectGtk* DragDataRef; 63#elif defined ANDROID 64typedef void* DragDataRef; 65#elif PLATFORM(CHROMIUM) 66#include "DragDataRef.h" 67#elif PLATFORM(HAIKU) 68class BMessage; 69typedef class BMessage* DragDataRef; 70#elif PLATFORM(EFL) || PLATFORM(BREWMP) 71typedef void* DragDataRef; 72#endif 73 74 75namespace WebCore { 76 77class Frame; 78class DocumentFragment; 79class KURL; 80class Range; 81 82enum DragApplicationFlags { 83 DragApplicationNone = 0, 84 DragApplicationIsModal = 1, 85 DragApplicationIsSource = 2, 86 DragApplicationHasAttachedSheet = 4, 87 DragApplicationIsCopyKeyDown = 8 88}; 89 90#if PLATFORM(WIN) 91typedef HashMap<UINT, Vector<String> > DragDataMap; 92#endif 93 94class DragData { 95public: 96 enum FilenameConversionPolicy { DoNotConvertFilenames, ConvertFilenames }; 97 98 // clientPosition is taken to be the position of the drag event within the target window, with (0,0) at the top left 99 DragData(DragDataRef, const IntPoint& clientPosition, const IntPoint& globalPosition, DragOperation, DragApplicationFlags = DragApplicationNone); 100 DragData(const String& dragStorageName, const IntPoint& clientPosition, const IntPoint& globalPosition, DragOperation, DragApplicationFlags = DragApplicationNone); 101#if PLATFORM(WIN) 102 DragData(const DragDataMap&, const IntPoint& clientPosition, const IntPoint& globalPosition, DragOperation sourceOperationMask, DragApplicationFlags = DragApplicationNone); 103 const DragDataMap& dragDataMap(); 104#endif 105 const IntPoint& clientPosition() const { return m_clientPosition; } 106 const IntPoint& globalPosition() const { return m_globalPosition; } 107 DragApplicationFlags flags() { return m_applicationFlags; } 108 DragDataRef platformData() const { return m_platformDragData; } 109 DragOperation draggingSourceOperationMask() const { return m_draggingSourceOperationMask; } 110 bool containsURL(Frame*, FilenameConversionPolicy filenamePolicy = ConvertFilenames) const; 111 bool containsPlainText() const; 112 bool containsCompatibleContent() const; 113 String asURL(Frame*, FilenameConversionPolicy filenamePolicy = ConvertFilenames, String* title = 0) const; 114 String asPlainText(Frame*) const; 115 void asFilenames(Vector<String>&) const; 116 Color asColor() const; 117 PassRefPtr<DocumentFragment> asFragment(Frame*, PassRefPtr<Range> context, 118 bool allowPlainText, bool& chosePlainText) const; 119 bool canSmartReplace() const; 120 bool containsColor() const; 121 bool containsFiles() const; 122#if PLATFORM(MAC) 123 NSPasteboard *pasteboard() { return m_pasteboard.get(); } 124#endif 125private: 126 IntPoint m_clientPosition; 127 IntPoint m_globalPosition; 128 DragDataRef m_platformDragData; 129 DragOperation m_draggingSourceOperationMask; 130 DragApplicationFlags m_applicationFlags; 131#if PLATFORM(MAC) 132 RetainPtr<NSPasteboard> m_pasteboard; 133#endif 134#if PLATFORM(WIN) 135 DragDataMap m_dragDataMap; 136#endif 137}; 138 139} 140 141#endif // !DragData_h 142 143