#include "mmimeData.h" #include "mmodel.h" #include "mmodelitem.h" #include "msizableitem.h" #include "mconnectionitem.h" #include "mimageitem.h" #include "globals.h" #include namespace mod { MMimeData::MMimeData(mod::MModel* model, bool selection) { m_formats << MOD_MIME_TYPE << "image/png" << "text/html" << "text/plain" ; QString data; model->saveToString(data, selection); QByteArray array; array += data; setData(MOD_MIME_TYPE, array.toBase64()); } QStringList MMimeData::formats() const { return m_formats; } QVariant MMimeData::retrieveData(const QString &format, QVariant::Type preferredType) const { if (format == MOD_MIME_TYPE) return QMimeData::retrieveData(format, preferredType); else if (format == "text/html") return asHtml(); else if (format == "text/plain") return asText(); else if (format == "image/png") return asPng(); else return QMimeData::retrieveData(format, preferredType); } mod::MModel* MMimeData::getModel() const { if (!hasFormat(MOD_MIME_TYPE)) return NULL; mod::MModel* model = new mod::MModel(NULL); QByteArray array = QByteArray::fromBase64(data(MOD_MIME_TYPE)); model->loadFromString(QString::fromUtf8(array), true); return model; } QVariant MMimeData::asHtml() const { std::auto_ptr model(getModel()); if (model.get() == NULL) return QVariant(); QString html; for (int i = 0; i < model->items().count(); i++) { mod::MSizableItem* mitem = dynamic_cast(model->items().at(i)); if (mitem) html += "
" + mitem->item().attributeValue("SYS_DESCRIPTION"); } return QVariant(html); } QVariant MMimeData::asPng() const { std::auto_ptr model(getModel()); if (model.get() == NULL) return QVariant(); QPixmap pixmap = model->image(true); return QVariant(pixmap); } QVariant MMimeData::asText() const { std::auto_ptr model(getModel()); if (model.get() == NULL) return QVariant(); QStringList lst; for (int i = 0; i < model->items().count(); i++) { mod::MSizableItem* mitem = dynamic_cast(model->items().at(i)); if (mitem) lst << mitem->item().attributeValue("SYS_DESCRIPTION"); } return QVariant(lst.join("\n")); } }