Home | History | Annotate | Download | only in platform
      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 #ifdef __OBJC__
     47 @class NSFileWrapper;
     48 @class NSPasteboard;
     49 @class NSArray;
     50 #else
     51 class NSFileWrapper;
     52 class NSPasteboard;
     53 class NSArray;
     54 #endif
     55 #endif
     56 
     57 #if PLATFORM(WIN)
     58 #include <windows.h>
     59 typedef struct HWND__* HWND;
     60 #endif
     61 
     62 #if PLATFORM(CHROMIUM)
     63 #include "PasteboardPrivate.h"
     64 #endif
     65 
     66 namespace WebCore {
     67 
     68 #if PLATFORM(MAC)
     69 extern NSString *WebArchivePboardType;
     70 extern NSString *WebSmartPastePboardType;
     71 extern NSString *WebURLNamePboardType;
     72 extern NSString *WebURLPboardType;
     73 extern NSString *WebURLsWithTitlesPboardType;
     74 #endif
     75 
     76 class DocumentFragment;
     77 class Frame;
     78 class HitTestResult;
     79 class KURL;
     80 class Node;
     81 class Range;
     82 class ArchiveResource;
     83 
     84 class Pasteboard {
     85     WTF_MAKE_NONCOPYABLE(Pasteboard); WTF_MAKE_FAST_ALLOCATED;
     86 public:
     87 #if PLATFORM(MAC)
     88     //Helper functions to allow Clipboard to share code
     89     static void writeSelection(NSPasteboard*, NSArray* pasteboardTypes, Range* selectedRange, bool canSmartCopyOrDelete, Frame*);
     90     static void writeURL(NSPasteboard* pasteboard, NSArray* types, const KURL& url, const String& titleStr, Frame* frame);
     91     static void writePlainText(NSPasteboard* pasteboard, const String& text);
     92 
     93     Pasteboard(NSPasteboard *);
     94 #endif
     95 
     96     static Pasteboard* generalPasteboard();
     97     void writeSelection(Range*, bool canSmartCopyOrDelete, Frame*);
     98     void writePlainText(const String&);
     99     void writeURL(const KURL&, const String&, Frame* = 0);
    100     void writeImage(Node*, const KURL&, const String& title);
    101 #if PLATFORM(MAC)
    102     void writeFileWrapperAsRTFDAttachment(NSFileWrapper*);
    103     String asURL(Frame*);
    104 #endif
    105     void clear();
    106     bool canSmartReplace();
    107     PassRefPtr<DocumentFragment> documentFragment(Frame*, PassRefPtr<Range>, bool allowPlainText, bool& chosePlainText);
    108     String plainText(Frame* = 0);
    109 
    110 #if PLATFORM(QT) || PLATFORM(CHROMIUM)
    111     bool isSelectionMode() const;
    112     void setSelectionMode(bool selectionMode);
    113 #endif
    114 
    115 #if PLATFORM(GTK)
    116     void setHelper(PasteboardHelper*);
    117     PasteboardHelper* helper();
    118     ~Pasteboard();
    119 #endif
    120 
    121 private:
    122     Pasteboard();
    123 
    124 #if PLATFORM(MAC)
    125     RetainPtr<NSPasteboard> m_pasteboard;
    126     PassRefPtr<DocumentFragment> documentFragmentWithImageResource(Frame* frame, PassRefPtr<ArchiveResource> resource);
    127     PassRefPtr<DocumentFragment> documentFragmentWithRtf(Frame* frame, NSString* pboardType);
    128     NSURL *getBestURL(Frame *);
    129 #endif
    130 
    131 #if PLATFORM(WIN)
    132     HWND m_owner;
    133 #endif
    134 
    135 #if PLATFORM(QT) || PLATFORM(CHROMIUM)
    136     bool m_selectionMode;
    137 #endif
    138 
    139 #if PLATFORM(CHROMIUM)
    140     PasteboardPrivate p;
    141 #endif
    142 
    143 #if PLATFORM(GTK)
    144     PasteboardHelper* m_helper;
    145 #endif
    146 };
    147 
    148 } // namespace WebCore
    149 
    150 #endif // Pasteboard_h
    151