From 75aafdc7152747f423e0dacc524c61c5619382e8 Mon Sep 17 00:00:00 2001 From: Tomaz Canabrava Date: Tue, 29 Jul 2014 21:56:45 -0300 Subject: Added a button to hide a picture from the dive. This patch hides a picture from the dive, it should actually remove it, but because I didn't found a quick way to remove a picture from the dive yet, it just hides it. To remove a picture from the dive, the DivePictureItem has to remember the QUrl of the original file, to remove that from the model, and currently it only has the QPixmap. this can be for 4.2.1 or we can postpone 4.2 a tiny bit since this is a important feature. Signed-off-by: Tomaz Canabrava Signed-off-by: Dirk Hohndel --- qt-ui/profile/divepixmapitem.cpp | 62 ++++++++++++++++++++++++++++++++++++++++ qt-ui/profile/divepixmapitem.h | 20 +++++++++++++ 2 files changed, 82 insertions(+) (limited to 'qt-ui') 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 #include #include +#include +#include +#include #include 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 items = view->items(view->mapFromScene(event->scenePos())); + Q_FOREACH(QGraphicsItem *item, items){ + if (dynamic_cast(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 -- cgit v1.2.3-70-g09d2