diff options
Diffstat (limited to 'qt-ui')
-rw-r--r-- | qt-ui/profile/divepixmapitem.cpp | 62 | ||||
-rw-r--r-- | qt-ui/profile/divepixmapitem.h | 20 |
2 files changed, 82 insertions, 0 deletions
diff --git a/qt-ui/profile/divepixmapitem.cpp b/qt-ui/profile/divepixmapitem.cpp index dd002e5f1..372cbd169 100644 --- a/qt-ui/profile/divepixmapitem.cpp +++ b/qt-ui/profile/divepixmapitem.cpp @@ -7,12 +7,44 @@ #include <QBrush> #include <QGraphicsDropShadowEffect> #include <QDesktopServices> +#include <QGraphicsScene> +#include <QGraphicsSceneMouseEvent> +#include <QGraphicsView> #include <QUrl> DivePixmapItem::DivePixmapItem(QObject *parent) : QObject(parent), QGraphicsPixmapItem() { } +DiveButtonItem::DiveButtonItem(QObject *parent): DivePixmapItem(parent) +{ +} + +void DiveButtonItem::mousePressEvent(QGraphicsSceneMouseEvent *event) +{ + QGraphicsItem::mousePressEvent(event); + emit clicked(); +} + +// If we have many many pictures on screen, maybe a shared-pixmap would be better to +// paint on screen, but for now, this. +CloseButtonItem::CloseButtonItem(QObject *parent): DiveButtonItem(parent) +{ + static QPixmap p = QPixmap(":trash"); + setPixmap(p); + setFlag(ItemIgnoresTransformations); +} + +void CloseButtonItem::hide() +{ + DiveButtonItem::hide(); +} + +void CloseButtonItem::show() +{ + DiveButtonItem::show(); +} + DivePictureItem::DivePictureItem(int row, QObject *parent): DivePixmapItem(parent) { setFlag(ItemIgnoresTransformations); @@ -50,20 +82,50 @@ void DivePictureItem::setPixmap(const QPixmap &pix) shadow->setZValue(-2); } +CloseButtonItem *button = NULL; void DivePictureItem::hoverEnterEvent(QGraphicsSceneHoverEvent *event) { Animations::scaleTo(this, 1.0); setZValue(5); + + if(!button) { + button = new CloseButtonItem(); + button->setScale(0.2); + button->setZValue(7); + scene()->addItem(button); + } + button->setPos(mapToScene(0,0)); + button->show(); + button->disconnect(); + connect(button, SIGNAL(clicked()), this, SLOT(removePicture())); } void DivePictureItem::hoverLeaveEvent(QGraphicsSceneHoverEvent *event) { Animations::scaleTo(this, 0.2); setZValue(0); + if(button) + button->hide(); } void DivePictureItem::mousePressEvent(QGraphicsSceneMouseEvent *event) { + QGraphicsView *view = scene()->views().first(); + QList<QGraphicsItem*> items = view->items(view->mapFromScene(event->scenePos())); + Q_FOREACH(QGraphicsItem *item, items){ + if (dynamic_cast<CloseButtonItem*>(item)){ + return; + } + } QString filePath = DivePictureModel::instance()->index(rowOnModel,0).data(Qt::ToolTipRole).toString(); QDesktopServices::openUrl(QUrl::fromLocalFile(filePath)); } + +void DivePictureItem::removePicture() +{ + /* this is a WIP, it doesn't really *removes* anything, merely hides it. + * good workaround, I still need to figure out how to activelly remove + * it from the model. */ + button->hide(); + hide(); +} diff --git a/qt-ui/profile/divepixmapitem.h b/qt-ui/profile/divepixmapitem.h index 950b211d2..b5bed37ce 100644 --- a/qt-ui/profile/divepixmapitem.h +++ b/qt-ui/profile/divepixmapitem.h @@ -22,6 +22,7 @@ public: void setPixmap(const QPixmap& pix); public slots: void settingsChanged(); + void removePicture(); protected: void hoverEnterEvent(QGraphicsSceneHoverEvent *event); void hoverLeaveEvent(QGraphicsSceneHoverEvent *event); @@ -30,4 +31,23 @@ private: int rowOnModel; }; +class DiveButtonItem : public DivePixmapItem { + Q_OBJECT +public: + DiveButtonItem(QObject *parent = 0); +protected: + virtual void mousePressEvent(QGraphicsSceneMouseEvent *event); +signals: + void clicked(); +}; + +class CloseButtonItem : public DiveButtonItem { + Q_OBJECT +public: + CloseButtonItem(QObject *parent = 0); +public slots: + void hide(); + void show(); +}; + #endif // DIVEPIXMAPITEM_H |