delegateImage property

This commit is contained in:
Marco Martin 2012-03-02 15:07:29 +01:00
parent a299c18ddc
commit 9e5451a1df
2 changed files with 33 additions and 1 deletions

View File

@ -126,6 +126,27 @@ void DeclarativeDragArea::setStartDragDistance(int distance)
emit startDragDistanceChanged();
}
// delegateImage
QVariant DeclarativeDragArea::delegateImage() const
{
return m_delegateImage;
}
void DeclarativeDragArea::setDelegateImage(const QVariant &image)
{
if (image.canConvert<QImage>() && image.value<QImage>() == m_delegateImage) {
return;
}
if (image.canConvert<QImage>()) {
m_delegateImage = image.value<QImage>();
} else {
m_delegateImage = image.value<QIcon>().pixmap(QSize(48, 48)).toImage();
}
emit delegateImageChanged();
}
// enabled
bool DeclarativeDragArea::isEnabled() const
{
@ -177,7 +198,9 @@ void DeclarativeDragArea::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
DeclarativeMimeData* dataCopy = new DeclarativeMimeData(m_data); //Qt will take ownership of this copy and delete it.
drag->setMimeData(dataCopy);
if (m_delegate) {
if (!m_delegateImage.isNull()) {
drag->setPixmap(QPixmap::fromImage(m_delegateImage));
} else if (m_delegate) {
// Render the delegate to a Pixmap

View File

@ -80,6 +80,11 @@ class DeclarativeDragArea : public QDeclarativeItem
*/
Q_PROPERTY(int startDragDistance READ startDragDistance WRITE setStartDragDistance NOTIFY startDragDistanceChanged)
/**
* an image to be used as delegate. if present overrides the delegate property. in can be either a QImage or a QIcon
*/
Q_PROPERTY(QVariant delegateImage READ delegateImage WRITE setDelegateImage NOTIFY delegateImageChanged)
public:
DeclarativeDragArea(QDeclarativeItem *parent=0);
~DeclarativeDragArea();
@ -88,6 +93,8 @@ public:
void setDelegate(QDeclarativeComponent* delegate);
void resetDelegate();
QVariant delegateImage() const;
void setDelegateImage(const QVariant &image);
QDeclarativeItem* target() const;
QDeclarativeItem* source() const;
void setSource(QDeclarativeItem* source);
@ -119,6 +126,7 @@ signals:
void supportedActionsChanged();
void defaultActionChanged();
void startDragDistanceChanged();
void delegateImageChanged();
protected:
void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
@ -134,6 +142,7 @@ private:
Qt::DropActions m_supportedActions;
Qt::DropAction m_defaultAction;
DeclarativeMimeData* const m_data;
QImage m_delegateImage;
int m_startDragDistance;
};