1 /* 2 * Copyright (C) 2006 Apple Computer, 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 Pasteboard_h 27 #define Pasteboard_h 28 29 #include <wtf/Forward.h> 30 #include <wtf/HashSet.h> 31 #include <wtf/Noncopyable.h> 32 33 #if PLATFORM(MAC) 34 #include <wtf/RetainPtr.h> 35 #endif 36 37 #if PLATFORM(GTK) 38 #include <PasteboardHelper.h> 39 #endif 40 41 // FIXME: This class is too high-level to be in the platform directory, since it 42 // uses the DOM and makes calls to Editor. It should either be divested of its 43 // knowledge of the frame and editor or moved into the editing directory. 44 45 #if PLATFORM(MAC) 46 class NSFileWrapper; 47 class NSPasteboard; 48 class NSArray; 49 #endif 50 51 #if PLATFORM(WIN) 52 #include <windows.h> 53 typedef struct HWND__* HWND; 54 #endif 55 56 #if PLATFORM(CHROMIUM) 57 #include "PasteboardPrivate.h" 58 #endif 59 60 namespace WebCore { 61 62 #if PLATFORM(MAC) 63 extern NSString *WebArchivePboardType; 64 extern NSString *WebSmartPastePboardType; 65 extern NSString *WebURLNamePboardType; 66 extern NSString *WebURLPboardType; 67 extern NSString *WebURLsWithTitlesPboardType; 68 #endif 69 70 class CString; 71 class DocumentFragment; 72 class Frame; 73 class HitTestResult; 74 class KURL; 75 class Node; 76 class Range; 77 class String; 78 79 class Pasteboard : public Noncopyable { 80 public: 81 #if PLATFORM(MAC) 82 //Helper functions to allow Clipboard to share code 83 static void writeSelection(NSPasteboard* pasteboard, Range* selectedRange, bool canSmartCopyOrDelete, Frame* frame); 84 static void writeURL(NSPasteboard* pasteboard, NSArray* types, const KURL& url, const String& titleStr, Frame* frame); 85 static void writePlainText(NSPasteboard* pasteboard, const String& text); 86 #endif 87 88 static Pasteboard* generalPasteboard(); 89 void writeSelection(Range*, bool canSmartCopyOrDelete, Frame*); 90 void writePlainText(const String&); 91 void writeURL(const KURL&, const String&, Frame* = 0); 92 void writeImage(Node*, const KURL&, const String& title); 93 #if PLATFORM(MAC) 94 void writeFileWrapperAsRTFDAttachment(NSFileWrapper*); 95 #endif 96 void clear(); 97 bool canSmartReplace(); 98 PassRefPtr<DocumentFragment> documentFragment(Frame*, PassRefPtr<Range>, bool allowPlainText, bool& chosePlainText); 99 String plainText(Frame* = 0); 100 #if PLATFORM(QT) || PLATFORM(CHROMIUM) 101 bool isSelectionMode() const; 102 void setSelectionMode(bool selectionMode); 103 #endif 104 105 #if PLATFORM(GTK) 106 void setHelper(PasteboardHelper*); 107 PasteboardHelper* m_helper; 108 #endif 109 110 private: 111 Pasteboard(); 112 ~Pasteboard(); 113 114 #if PLATFORM(MAC) 115 Pasteboard(NSPasteboard *); 116 RetainPtr<NSPasteboard> m_pasteboard; 117 #endif 118 119 #if PLATFORM(WIN) 120 HWND m_owner; 121 #endif 122 123 #if PLATFORM(QT) || PLATFORM(CHROMIUM) 124 bool m_selectionMode; 125 #endif 126 127 #if PLATFORM(CHROMIUM) 128 PasteboardPrivate p; 129 #endif 130 }; 131 132 } // namespace WebCore 133 134 #endif // Pasteboard_h 135