Esempio n. 1
0
void DragTool::mousePressEvent(QMouseEvent *event)
{
    if (event->button() == Qt::LeftButton) {
        const QMargins margins = contentsMargins();
        const QRect iconRect((width() - d->iconSize.width()) / 2, margins.top(),
                       d->iconSize.width(), d->iconSize.height());
        if (iconRect.contains(event->pos())) {
            auto drag = new QDrag(this);
            auto mimeData = new QMimeData;
            QByteArray data;
            QDataStream dataStream(&data, QIODevice::WriteOnly);
            dataStream << d->newElementId << d->title << d->stereotype;
            mimeData->setData(QLatin1String(qmt::MIME_TYPE_NEW_MODEL_ELEMENTS), data);
            drag->setMimeData(mimeData);

            QPixmap pixmap = d->icon.pixmap(d->iconSize, QIcon::Normal, QIcon::Off);
            QPainter painter(&pixmap);
            painter.setCompositionMode(QPainter::CompositionMode_DestinationIn);
            painter.fillRect(pixmap.rect(), QColor(0, 0, 0, 96));
            drag->setPixmap(pixmap);
            drag->setHotSpot(QPoint(drag->pixmap().width() / 2, drag->pixmap().height() / 2));

            d->disableFrame = true;
            update();
            Qt::DropAction dropAction = drag->exec();
            Q_UNUSED(dropAction);
            d->disableFrame = false;
            update();
        }
    }
}
Esempio n. 2
0
void BlockTreeWidget::mouseMoveEvent(QMouseEvent *event)
{
    if(!(event->buttons() & Qt::LeftButton))
    {
        QTreeWidget::mouseMoveEvent(event);
        return;
    }
    if((event->pos() - _dragStartPos).manhattanLength() < QApplication::startDragDistance())
    {
        QTreeWidget::mouseMoveEvent(event);
        return;
    }

    //get the block data
    auto blockItem = dynamic_cast<BlockTreeWidgetItem *>(itemAt(_dragStartPos));
    if (not blockItem->getBlockDesc()) return;

    //create a block object to render the image
    auto draw = dynamic_cast<GraphEditorTabs *>(getObjectMap()["editorTabs"])->getCurrentGraphEditor()->getCurrentGraphDraw();
    std::shared_ptr<GraphBlock> renderBlock(new GraphBlock(draw));
    renderBlock->setBlockDesc(blockItem->getBlockDesc());
    renderBlock->prerender(); //precalculate so we can get bounds
    const auto bounds = renderBlock->boundingRect();

    //draw the block's preview onto a mini pixmap
    QPixmap pixmap(bounds.size().toSize()+QSize(2,2));
    pixmap.fill(Qt::transparent);
    QPainter painter(&pixmap);
    painter.translate(-bounds.topLeft()+QPoint(1,1));
    //painter.scale(zoomScale, zoomScale); //TODO get zoomscale from draw
    painter.setRenderHint(QPainter::Antialiasing);
    painter.setRenderHint(QPainter::HighQualityAntialiasing);
    painter.setRenderHint(QPainter::SmoothPixmapTransform);
    renderBlock->render(painter);
    renderBlock.reset();
    painter.end();

    //create the drag object
    auto mimeData = new QMimeData();
    std::ostringstream oss; blockItem->getBlockDesc()->stringify(oss);
    QByteArray byteArray(oss.str().c_str(), oss.str().size());
    mimeData->setData("text/json/pothos_block", byteArray);
    auto drag = new QDrag(this);
    drag->setMimeData(mimeData);
    drag->setPixmap(pixmap);
    drag->setHotSpot(-bounds.topLeft().toPoint());
    drag->exec(Qt::CopyAction | Qt::MoveAction);
}
Esempio n. 3
0
void OSItem::mouseMoveEvent(QMouseEvent *event)
{
  if (!m_draggable){
    return;
  }

  if (!m_mouseDown){
    return;
  }

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

  if ((event->pos() - m_dragStartPosition).manhattanLength() < QApplication::startDragDistance()){
    return;
  }

  // start a drag
  m_mouseDown = false;

  QString mimeDataText = m_itemId.mimeDataText();

  auto mimeData = new QMimeData;
  mimeData->setText(mimeDataText);

  QWidget* parent = this->parentWidget();
  OS_ASSERT(parent);

  // parent the QDrag on this parent instead of this, in case this item is deleted during drag
  auto drag = new QDrag(parent);
  drag->setMimeData(mimeData);

  QPixmap _pixmap(size());
  _pixmap.fill(Qt::transparent);

  render(&_pixmap,QPoint(),QRegion(),RenderFlags(DrawChildren));

  drag->setPixmap(_pixmap);
  drag->setHotSpot(event->pos());

  drag->exec(Qt::CopyAction);
}
Esempio n. 4
0
int QGesture::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
{
    _id = QObject::qt_metacall(_c, _id, _a);
    if (_id < 0)
        return _id;
    
#ifndef QT_NO_PROPERTIES
     if (_c == QMetaObject::ReadProperty) {
        void *_v = _a[0];
        switch (_id) {
        case 0: *reinterpret_cast< Qt::GestureState*>(_v) = state(); break;
        case 1: *reinterpret_cast< Qt::GestureType*>(_v) = gestureType(); break;
        case 2: *reinterpret_cast< QGesture::GestureCancelPolicy*>(_v) = gestureCancelPolicy(); break;
        case 3: *reinterpret_cast< QPointF*>(_v) = hotSpot(); break;
        case 4: *reinterpret_cast< bool*>(_v) = hasHotSpot(); break;
        }
        _id -= 5;
    } else if (_c == QMetaObject::WriteProperty) {
        void *_v = _a[0];
        switch (_id) {
        case 2: setGestureCancelPolicy(*reinterpret_cast< QGesture::GestureCancelPolicy*>(_v)); break;
        case 3: setHotSpot(*reinterpret_cast< QPointF*>(_v)); break;
        }
        _id -= 5;
    } else if (_c == QMetaObject::ResetProperty) {
        switch (_id) {
        case 3: unsetHotSpot(); break;
        }
        _id -= 5;
    } else if (_c == QMetaObject::QueryPropertyDesignable) {
        _id -= 5;
    } else if (_c == QMetaObject::QueryPropertyScriptable) {
        _id -= 5;
    } else if (_c == QMetaObject::QueryPropertyStored) {
        _id -= 5;
    } else if (_c == QMetaObject::QueryPropertyEditable) {
        _id -= 5;
    } else if (_c == QMetaObject::QueryPropertyUser) {
        _id -= 5;
    }
#endif // QT_NO_PROPERTIES
    return _id;
}
Esempio n. 5
0
void MyItem::mouseMoveEvent(QGraphicsSceneMouseEvent *e)
{
    bool isDrag = QLineF(e->screenPos(), e->buttonDownScreenPos(Qt::LeftButton)).length() >= QApplication::startDragDistance();
    if (!isDrag) {
        return;
    }

    auto drag = new QDrag(e->widget());
    auto mime = new QMimeData;
    drag->setMimeData(mime);
    mime->setColorData(color);

    QPixmap pix(21, 21);
    pix.fill(Qt::transparent);
    QPainter painter(&pix);
    paint(&painter, nullptr, nullptr);
    drag->setPixmap(pix);

    drag->setHotSpot(QPoint(10, 15));
    drag->exec();
    setCursor(QCursor(Qt::OpenHandCursor));
}
Esempio n. 6
0
        void mousePressEvent(QMouseEvent* event) override
        {
            if (event->button() == Qt::LeftButton)
            {
                auto as = Engine::ossia_to_iscore::ToFullAddressSettings(m_node);

                auto drag = new QDrag(this);
                auto mimeData = new QMimeData;
                {
                    Mime<Device::FullAddressSettings>::Serializer s{*mimeData};
                    s.serialize(as);
                }
                {
                    Mime<State::MessageList>::Serializer s{*mimeData};
                    s.serialize({State::Message{State::AddressAccessor{as.address}, as.value}});
                }
                drag->setMimeData(mimeData);

                drag->setPixmap(grab());
                drag->setHotSpot(rect().center());

                drag->exec();
            }
        }
Esempio n. 7
0
void CursorShape::resetToEmpty()
{
  setDimension(&Dimension(0, 0));
  setHotSpot(0, 0);
}