Home | History | Annotate | Download | only in gtk
      1 /*
      2  * Copyright (C) 2009, Martin Robinson
      3  *
      4  *  This library is free software; you can redistribute it and/or
      5  *  modify it under the terms of the GNU Lesser General Public
      6  *  License as published by the Free Software Foundation; either
      7  *  version 2 of the License, or (at your option) any later version.
      8  *
      9  *  This library is distributed in the hope that it will be useful,
     10  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
     11  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     12  *  Lesser General Public License for more details.
     13  *
     14  *  You should have received a copy of the GNU Lesser General Public
     15  *  License along with this library; if not, write to the Free Software
     16  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
     17  */
     18 
     19 #include "config.h"
     20 #include "DataObjectGtk.h"
     21 
     22 #include "markup.h"
     23 #include <gtk/gtk.h>
     24 
     25 namespace WebCore {
     26 
     27 String DataObjectGtk::text()
     28 {
     29     if (m_range)
     30         return m_range->text();
     31     return m_text;
     32 }
     33 
     34 String DataObjectGtk::markup()
     35 {
     36     if (m_range)
     37         createMarkup(m_range.get(), 0, AnnotateForInterchange);
     38     return m_markup;
     39 }
     40 
     41 void DataObjectGtk::setText(const String& newText)
     42 {
     43     m_range = 0;
     44     m_text = newText;
     45 }
     46 
     47 void DataObjectGtk::setMarkup(const String& newMarkup)
     48 {
     49     m_range = 0;
     50     m_markup = newMarkup;
     51 }
     52 
     53 Vector<String> DataObjectGtk::files()
     54 {
     55     Vector<KURL> uris(uriList());
     56     Vector<String> files;
     57 
     58     for (size_t i = 0; i < uris.size(); i++) {
     59         KURL& uri = uris[0];
     60         if (!uri.isValid() || !uri.isLocalFile())
     61             continue;
     62 
     63         files.append(uri.string());
     64     }
     65 
     66     return files;
     67 }
     68 
     69 String DataObjectGtk::url()
     70 {
     71     Vector<KURL> uris(uriList());
     72     for (size_t i = 0; i < uris.size(); i++) {
     73         KURL& uri = uris[0];
     74         if (uri.isValid())
     75             return uri;
     76     }
     77 
     78     return String();
     79 }
     80 
     81 String DataObjectGtk::urlLabel()
     82 {
     83     if (hasText())
     84         return text();
     85 
     86     if (hasURL())
     87         return url();
     88 
     89     return String();
     90 }
     91 
     92 bool DataObjectGtk::hasURL()
     93 {
     94     return !url().isEmpty();
     95 }
     96 
     97 void DataObjectGtk::clear()
     98 {
     99     m_text = "";
    100     m_markup = "";
    101     m_uriList.clear();
    102     m_image = 0;
    103     m_range = 0;
    104 }
    105 
    106 DataObjectGtk* DataObjectGtk::forClipboard(GtkClipboard* clipboard)
    107 {
    108     static HashMap<GtkClipboard*, RefPtr<DataObjectGtk> > objectMap;
    109 
    110     if (!objectMap.contains(clipboard)) {
    111         RefPtr<DataObjectGtk> dataObject = DataObjectGtk::create();
    112         objectMap.set(clipboard, dataObject);
    113         return dataObject.get();
    114     }
    115 
    116     HashMap<GtkClipboard*, RefPtr<DataObjectGtk> >::iterator it = objectMap.find(clipboard);
    117     return it->second.get();
    118 }
    119 
    120 }
    121