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 "Document.h"
     30 #include "DocumentFragment.h"
     31 #include "Frame.h"
     32 #include "markup.h"
     33 
     34 #include <QColor>
     35 #include <QList>
     36 #include <QMimeData>
     37 #include <QUrl>
     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(Frame* frame) 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(frame, DoNotConvertFilenames, 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 bool DragData::containsCompatibleContent() const
    104 {
    105     if (!m_platformDragData)
    106         return false;
    107     return containsColor() || containsURL(0) || m_platformDragData->hasHtml() || m_platformDragData->hasText();
    108 }
    109 
    110 bool DragData::containsURL(Frame*, FilenameConversionPolicy filenamePolicy) const
    111 {
    112     // FIXME: Use filenamePolicy.
    113     if (!m_platformDragData)
    114         return false;
    115     return m_platformDragData->hasUrls();
    116 }
    117 
    118 String DragData::asURL(Frame*, FilenameConversionPolicy filenamePolicy, String*) const
    119 {
    120     // FIXME: Use filenamePolicy.
    121     if (!m_platformDragData)
    122         return String();
    123     QList<QUrl> urls = m_platformDragData->urls();
    124 
    125     if (urls.isEmpty())
    126         return String();
    127 
    128     QByteArray encodedUrl = urls.first().toEncoded();
    129     return String(encodedUrl.constData(), encodedUrl.length());
    130 }
    131 
    132 PassRefPtr<DocumentFragment> DragData::asFragment(Frame* frame, PassRefPtr<Range>, bool, bool&) const
    133 {
    134     if (m_platformDragData && m_platformDragData->hasHtml())
    135         return createFragmentFromMarkup(frame->document(), m_platformDragData->html(), "", FragmentScriptingNotAllowed);
    136 
    137     return 0;
    138 }
    139 
    140 }
    141 
    142