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> 42 typedef id <NSDraggingInfo> DragDataRef; 43 @class NSPasteboard; 44 #else 45 typedef void* DragDataRef; 46 class NSPasteboard; 47 #endif 48 #elif PLATFORM(QT) 49 QT_BEGIN_NAMESPACE 50 class QMimeData; 51 QT_END_NAMESPACE 52 typedef const QMimeData* DragDataRef; 53 #elif PLATFORM(WIN) 54 typedef struct IDataObject* DragDataRef; 55 #include <wtf/text/WTFString.h> 56 #elif PLATFORM(WX) 57 typedef class wxDataObject* DragDataRef; 58 #elif PLATFORM(GTK) 59 namespace WebCore { 60 class DataObjectGtk; 61 } 62 typedef WebCore::DataObjectGtk* DragDataRef; 63 #elif defined ANDROID 64 typedef void* DragDataRef; 65 #elif PLATFORM(CHROMIUM) 66 #include "DragDataRef.h" 67 #elif PLATFORM(HAIKU) 68 class BMessage; 69 typedef class BMessage* DragDataRef; 70 #elif PLATFORM(EFL) || PLATFORM(BREWMP) 71 typedef void* DragDataRef; 72 #endif 73 74 75 namespace WebCore { 76 77 class Frame; 78 class DocumentFragment; 79 class KURL; 80 class Range; 81 82 enum DragApplicationFlags { 83 DragApplicationNone = 0, 84 DragApplicationIsModal = 1, 85 DragApplicationIsSource = 2, 86 DragApplicationHasAttachedSheet = 4, 87 DragApplicationIsCopyKeyDown = 8 88 }; 89 90 #if PLATFORM(WIN) 91 typedef HashMap<UINT, Vector<String> > DragDataMap; 92 #endif 93 94 class DragData { 95 public: 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 clientPosition()105 const IntPoint& clientPosition() const { return m_clientPosition; } globalPosition()106 const IntPoint& globalPosition() const { return m_globalPosition; } flags()107 DragApplicationFlags flags() { return m_applicationFlags; } platformData()108 DragDataRef platformData() const { return m_platformDragData; } draggingSourceOperationMask()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) pasteboard()123 NSPasteboard *pasteboard() { return m_pasteboard.get(); } 124 #endif 125 private: 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