Part 2 of removing PlatformString.h, remove PlatformString.h
[WebKit-https.git] / Source / WebCore / platform / wx / PasteboardWx.cpp
1 /*
2  * Copyright (C) 2007 Kevin Ollivier <kevino@theolliviers.com>
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 #include "config.h"
27
28 #include "Pasteboard.h"
29 #include "DocumentFragment.h"
30 #include "Editor.h"
31 #include "Frame.h"
32 #include "KURL.h"
33 #include "markup.h"
34 #include "NotImplemented.h"
35 #include <wtf/text/WTFString.h>
36
37 #include <wx/defs.h>
38 #include <wx/dataobj.h>
39 #include <wx/clipbrd.h>
40
41 namespace WebCore {
42
43 Pasteboard::Pasteboard()
44 {
45 }
46
47 Pasteboard* Pasteboard::generalPasteboard()
48 {
49     static Pasteboard* pasteboard = new Pasteboard();
50     return pasteboard;
51 }
52
53 void Pasteboard::writeSelection(Range* selectedRange, bool canSmartCopyOrDelete, Frame* frame)
54 {
55     if (wxTheClipboard->Open()) {
56 #if wxCHECK_VERSION(2, 9, 4)
57         wxTheClipboard->SetData(new wxHTMLDataObject(createMarkup(selectedRange, 0, AnnotateForInterchange)));
58 #endif
59         wxTheClipboard->SetData(new wxTextDataObject(frame->editor()->selectedText()));
60         wxTheClipboard->Close();
61     }
62 }
63
64 void Pasteboard::writePlainText(const String& text, SmartReplaceOption)
65 {
66     if (wxTheClipboard->Open()) {
67         wxTheClipboard->SetData( new wxTextDataObject(text) );
68         wxTheClipboard->Close();
69     }
70 }
71
72 bool Pasteboard::canSmartReplace()
73 {
74     notImplemented();
75     return false;
76 }
77
78 String Pasteboard::plainText(Frame* frame)
79 {
80     if (wxTheClipboard->Open()) {
81         if (wxTheClipboard->IsSupported(wxDF_TEXT)) {
82             wxTextDataObject data;
83             wxTheClipboard->GetData(data);
84             wxTheClipboard->Close();
85             return data.GetText();
86         }
87     }
88     
89     return String();
90 }
91
92 PassRefPtr<DocumentFragment> Pasteboard::documentFragment(Frame* frame, PassRefPtr<Range> context,
93                                                           bool allowPlainText, bool& chosePlainText)
94 {
95     RefPtr<DocumentFragment> fragment = 0;
96     if (wxTheClipboard->Open()) {
97 #if wxCHECK_VERSION(2, 9, 4)
98         if (wxTheClipboard->IsSupported(wxDF_HTML)) {
99             wxHTMLDataObject data;
100             wxTheClipboard->GetData(data);
101             chosePlainText = false;
102             fragment = createFragmentFromMarkup(frame->document(), data.GetHTML(), "", DisallowScriptingContent);
103         } else
104 #endif
105         {
106             if (allowPlainText && wxTheClipboard->IsSupported( wxDF_TEXT )) {
107                 wxTextDataObject data;
108                 wxTheClipboard->GetData( data );
109                 chosePlainText = true;
110                 fragment = createFragmentFromText(context.get(), data.GetText());
111             }
112         }
113         wxTheClipboard->Close();
114     }
115     if (fragment)
116         return fragment.release();
117     
118     return 0;
119 }
120
121 void Pasteboard::writeURL(const KURL& url, const String&, Frame*)
122 {
123     if (wxTheClipboard->Open()) {
124         wxTheClipboard->SetData( new wxTextDataObject( url.string() ) );
125         wxTheClipboard->Close();
126     }
127 }
128
129 void Pasteboard::writeClipboard(Clipboard*)
130 {
131     notImplemented();
132 }
133
134 void Pasteboard::clear()
135 {
136     wxTheClipboard->Clear();
137 }
138
139 void Pasteboard::writeImage(Node*, const KURL&, const String& title)
140 {
141     notImplemented();
142 }
143     
144 }