summaryrefslogtreecommitdiffstats
path: root/qt-ui
diff options
context:
space:
mode:
Diffstat (limited to 'qt-ui')
-rw-r--r--qt-ui/profile/divepixmapitem.cpp62
-rw-r--r--qt-ui/profile/divepixmapitem.h20
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