1 /* 2 For general Scribus (>=1.3.2) copyright and licensing information please refer 3 to the COPYING file provided with the program. Following this notice may exist 4 a copyright and/or license notice that predates the release of Scribus 1.3.2 5 for which a new license (GPL+exception) is in place. 6 */ 7 /*************************************************************************** 8 * * 9 * This program is free software; you can redistribute it and/or modify * 10 * it under the terms of the GNU General Public License as published by * 11 * the Free Software Foundation; either version 2 of the License, or * 12 * (at your option) any later version. * 13 * * 14 ***************************************************************************/ 15 16 #include "scmimedata.h" 17 18 #include <QApplication> 19 #include <QClipboard> 20 #include <QMimeData> 21 22 // Define to 1 if you need to debug data contained in ScElemMimeData. 23 // This will have the effect of enabling the pasting of stored data 24 // in any text editor. Leave defined to 0 otherwise as this may trigger 25 // unwanted pasting of text in story editor (#15402). 26 #define DEBUG_SCELEMMIMEDATA 0 27 28 const QString ScMimeData::ScribusElemMimeType = "application/x-scribus-elem"; 29 const QString ScMimeData::ScribusFragmentMimeType = "application/x-scribus-fragment"; 30 const QString ScMimeData::ScribusTextMimeType = "application/x-scribus-text"; 31 clipboardHasScribusData()32bool ScMimeData::clipboardHasScribusData() 33 { 34 bool hasData = false; 35 const QMimeData* mimeData = QApplication::clipboard()->mimeData(); 36 if (mimeData) 37 { 38 hasData |= mimeData->hasFormat(ScMimeData::ScribusElemMimeType); 39 hasData |= mimeData->hasFormat(ScMimeData::ScribusFragmentMimeType); 40 hasData |= mimeData->hasFormat(ScMimeData::ScribusTextMimeType); 41 hasData |= mimeData->hasText(); 42 hasData |= mimeData->hasFormat("application/x-openoffice-gdimetafile;windows_formatname=\"GDIMetaFile\""); 43 hasData |= mimeData->hasFormat("image/svg+xml"); 44 hasData |= mimeData->hasFormat("image/x-inkscape-svg"); 45 hasData |= mimeData->hasFormat("application/vnd.oasis.opendocument.graphics"); 46 } 47 return hasData; 48 } 49 clipboardHasScribusElem()50bool ScMimeData::clipboardHasScribusElem() 51 { 52 const QMimeData* mimeData = QApplication::clipboard()->mimeData(); 53 if (mimeData) 54 return mimeData->hasFormat(ScMimeData::ScribusElemMimeType); 55 return false; 56 } 57 clipboardHasScribusFragment()58bool ScMimeData::clipboardHasScribusFragment() 59 { 60 const QMimeData* mimeData = QApplication::clipboard()->mimeData(); 61 if (mimeData) 62 return mimeData->hasFormat(ScMimeData::ScribusFragmentMimeType); 63 return false; 64 } 65 clipboardHasScribusText()66bool ScMimeData::clipboardHasScribusText() 67 { 68 const QMimeData* mimeData = QApplication::clipboard()->mimeData(); 69 if (mimeData) 70 return mimeData->hasFormat(ScMimeData::ScribusTextMimeType); 71 return false; 72 } 73 clipboardHasPlainText()74bool ScMimeData::clipboardHasPlainText() 75 { 76 const QMimeData* mimeData = QApplication::clipboard()->mimeData(); 77 if (mimeData) 78 return mimeData->hasText(); 79 return false; 80 } 81 clipboardHasKnownData()82bool ScMimeData::clipboardHasKnownData() 83 { 84 bool hasData = false; 85 const QMimeData* mimeData = QApplication::clipboard()->mimeData(); 86 if (mimeData) 87 { 88 hasData |= mimeData->hasFormat("application/x-openoffice-gdimetafile;windows_formatname=\"GDIMetaFile\""); 89 hasData |= mimeData->hasFormat("image/svg+xml"); 90 hasData |= mimeData->hasFormat("image/x-inkscape-svg"); 91 hasData |= mimeData->hasFormat("application/vnd.oasis.opendocument.graphics"); 92 } 93 return hasData; 94 } 95 clipboardKnownDataExt()96QString ScMimeData::clipboardKnownDataExt() 97 { 98 QString ext; 99 const QMimeData* mimeData = QApplication::clipboard()->mimeData(); 100 if (mimeData) 101 { 102 if (mimeData->hasFormat("application/x-openoffice-gdimetafile;windows_formatname=\"GDIMetaFile\"")) 103 ext = "svm"; 104 else if (mimeData->hasFormat("image/svg+xml") || mimeData->hasFormat("image/x-inkscape-svg")) 105 ext = "svg"; 106 else if (mimeData->hasFormat("application/vnd.oasis.opendocument.graphics")) 107 ext = "odg"; 108 } 109 return ext; 110 } 111 clipboardKnownDataData()112QByteArray ScMimeData::clipboardKnownDataData() 113 { 114 QByteArray data; 115 const QMimeData* mimeData = QApplication::clipboard()->mimeData(); 116 if (mimeData) 117 { 118 if (mimeData->hasFormat("application/x-openoffice-gdimetafile;windows_formatname=\"GDIMetaFile\"")) 119 data = mimeData->data("application/x-openoffice-gdimetafile;windows_formatname=\"GDIMetaFile\""); 120 else if (mimeData->hasFormat("image/svg+xml")) 121 data = mimeData->data("image/svg+xml"); 122 else if (mimeData->hasFormat("image/x-inkscape-svg")) 123 data = mimeData->data("image/x-inkscape-svg"); 124 else if (mimeData->hasFormat("application/vnd.oasis.opendocument.graphics")) 125 data = mimeData->data("application/vnd.oasis.opendocument.graphics"); 126 } 127 return data; 128 } 129 clipboardScribusElem()130QString ScMimeData::clipboardScribusElem() 131 { 132 const QMimeData* mimeData = QApplication::clipboard()->mimeData(); 133 const ScElemMimeData* elemData = qobject_cast<const ScElemMimeData*>(mimeData); 134 if (elemData) 135 return elemData->scribusElem(); 136 QByteArray data = QApplication::clipboard()->mimeData()->data(ScribusElemMimeType); 137 return QString::fromUtf8(data.data(), data.size()); 138 } 139 clipboardScribusFragment()140QByteArray ScMimeData::clipboardScribusFragment() 141 { 142 QByteArray data = QApplication::clipboard()->mimeData()->data(ScribusFragmentMimeType); 143 return data; 144 } 145 clipboardScribusText()146QByteArray ScMimeData::clipboardScribusText() 147 { 148 QByteArray data = QApplication::clipboard()->mimeData()->data(ScribusTextMimeType); 149 return data; 150 } 151 ScElemMimeData()152ScElemMimeData::ScElemMimeData() 153 { 154 m_formats << ScMimeData::ScribusElemMimeType; 155 #if DEBUG_SCELEMMIMEDATA 156 m_formats << "text/plain"; 157 #endif 158 } 159 hasFormat(const QString & mimeType) const160bool ScElemMimeData::hasFormat (const QString & mimeType) const 161 { 162 if (mimeType == ScMimeData::ScribusElemMimeType) 163 { 164 if (m_scribusElemData.isEmpty()) 165 return false; 166 QString elemtag = "SCRIBUSELEM"; 167 return (m_scribusElemData.lastIndexOf(elemtag, 50 + elemtag.length()) >= 0); 168 } 169 #if DEBUG_SCELEMMIMEDATA 170 if (mimeType == "text/plain") 171 return (!m_scribusElemData.isEmpty()); 172 #endif 173 return QMimeData::hasFormat(mimeType); 174 } 175 retrieveData(const QString & mimeType,QVariant::Type type) const176QVariant ScElemMimeData::retrieveData (const QString &mimeType, QVariant::Type type) const 177 { 178 if (mimeType == ScMimeData::ScribusElemMimeType) 179 { 180 if (m_scribusElemData.isEmpty()) 181 return QVariant(); 182 return QVariant(m_scribusElemData); 183 } 184 #if DEBUG_SCELEMMIMEDATA 185 if (mimeType == "text/plain") 186 return QVariant(m_scribusElemData); 187 #endif 188 return QVariant(); 189 } 190