Example #1
1
void Drop::dropEvent(QDropEvent *event)
{
    if (!m_data->widget)
        return;

    const std::string str = event->mimeData()->text().toStdString();

    try
    {
        TypeDescriptor_ptr descriptor =
            m_data->widget->getReflective();

        Holder holder = descriptor->create_holder();

        bool res = json::parse(descriptor, holder,
                               str.c_str(), str.size());

        if (res && m_data->widget)
        {
            m_data->widget->fromHolder(holder);

            event->acceptProposedAction();
        }
    }
    catch(...)
    {
        // parse exception: nothing to do
    }
}
Example #2
0
void Drag::mouseMoveEvent(QMouseEvent *event)
{
    if (!m_data->widget)
        return;

    if (!(event->buttons() & Qt::LeftButton))
        return;

    if ((event->globalPos() - m_data->dragStartPosition).manhattanLength()
            < QApplication::startDragDistance())
        return;

    TypeDescriptor_ptr descriptor =
        m_data->widget->getReflective();

    Holder holder (descriptor->create_holder());
    m_data->widget->toHolder(holder);

    if (core::utils::calculate_size(holder) < GSIM_DRAG_MAX_SIZE)
    {
        QDrag * drag = new QDrag(m_data->qwidget);
        QMimeData * mimeData = new QMimeData;

        std::ostringstream oss;

        json::write(oss, descriptor, holder);

        mimeData->setText(oss.str().c_str());
        drag->setMimeData(mimeData);

        /* Qt::DropAction dropAction = */ drag->exec(Qt::CopyAction);
    }
    else
    {
        QMessageBox::information(m_data->qwidget, "Information",
                                 "Drag events have been disabled for performance reasons.");
    }
}