Home | History | Annotate | Download | only in qt
      1 /*
      2  * Copyright (C) 2007, 2008, 2009 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 #include "config.h"
     27 #include "DragData.h"
     28 
     29 #include "ClipboardQt.h"
     30 #include "Document.h"
     31 #include "DocumentFragment.h"
     32 #include "markup.h"
     33 
     34 #include <QList>
     35 #include <QMimeData>
     36 #include <QUrl>
     37 #include <QColor>
     38 
     39 namespace WebCore {
     40 
     41 bool DragData::canSmartReplace() const
     42 {
     43     return false;
     44 }
     45 
     46 bool DragData::containsColor() const
     47 {
     48     if (!m_platformDragData)
     49         return false;
     50     return m_platformDragData->hasColor();
     51 }
     52 
     53 bool DragData::containsFiles() const
     54 {
     55     if (!m_platformDragData)
     56         return false;
     57     QList<QUrl> urls = m_platformDragData->urls();
     58     foreach (const QUrl &url, urls) {
     59         if (!url.toLocalFile().isEmpty())
     60             return true;
     61     }
     62     return false;
     63 }
     64 
     65 void DragData::asFilenames(Vector<String>& result) const
     66 {
     67     if (!m_platformDragData)
     68         return;
     69     QList<QUrl> urls = m_platformDragData->urls();
     70     foreach (const QUrl &url, urls) {
     71         QString file = url.toLocalFile();
     72         if (!file.isEmpty())
     73             result.append(file);
     74     }
     75 }
     76 
     77 bool DragData::containsPlainText() const
     78 {
     79     if (!m_platformDragData)
     80         return false;
     81     return m_platformDragData->hasText() || m_platformDragData->hasUrls();
     82 }
     83 
     84 String DragData::asPlainText() const
     85 {
     86     if (!m_platformDragData)
     87         return String();
     88     String text = m_platformDragData->text();
     89     if (!text.isEmpty())
     90         return text;
     91 
     92     // FIXME: Should handle rich text here
     93     return asURL(0);
     94 }
     95 
     96 Color DragData::asColor() const
     97 {
     98     if (!m_platformDragData)
     99         return Color();
    100     return qvariant_cast<QColor>(m_platformDragData->colorData());
    101 }
    102 
    103 PassRefPtr<Clipboard> DragData::createClipboard(ClipboardAccessPolicy policy) const
    104 {
    105     return ClipboardQt::create(policy, m_platformDragData);
    106 }
    107 
    108 bool DragData::containsCompatibleContent() const
    109 {
    110     if (!m_platformDragData)
    111         return false;
    112     return containsColor() || containsURL() || m_platformDragData->hasHtml() || m_platformDragData->hasText();
    113 }
    114 
    115 bool DragData::containsURL() const
    116 {
    117     if (!m_platformDragData)
    118         return false;
    119     return m_platformDragData->hasUrls();
    120 }
    121 
    122 String DragData::asURL(String*) const
    123 {
    124     if (!m_platformDragData)
    125         return String();
    126     QList<QUrl> urls = m_platformDragData->urls();
    127 
    128     if (urls.isEmpty())
    129         return String();
    130 
    131     return encodeWithURLEscapeSequences(urls.first().toString());
    132 }
    133 
    134 PassRefPtr<DocumentFragment> DragData::asFragment(Document* doc) const
    135 {
    136     if (m_platformDragData && m_platformDragData->hasHtml())
    137         return createFragmentFromMarkup(doc, m_platformDragData->html(), "", FragmentScriptingNotAllowed);
    138 
    139     return 0;
    140 }
    141 
    142 }
    143 
    144