mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
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 <tomaz.canabrava@intel.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
131 lines
3.3 KiB
C++
131 lines
3.3 KiB
C++
#include "divepixmapitem.h"
|
|
#include "animationfunctions.h"
|
|
#include <divepicturewidget.h>
|
|
#include <preferences.h>
|
|
|
|
#include <QPen>
|
|
#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);
|
|
#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0)
|
|
setAcceptsHoverEvents(true);
|
|
#else
|
|
setAcceptHoverEvents(true);
|
|
#endif
|
|
rowOnModel = row;
|
|
setScale(0.2);
|
|
connect(PreferencesDialog::instance(), SIGNAL(settingsChanged()), this, SLOT(settingsChanged()));
|
|
setVisible(prefs.show_pictures_in_profile);
|
|
}
|
|
|
|
void DivePictureItem::settingsChanged()
|
|
{
|
|
setVisible(prefs.show_pictures_in_profile);
|
|
}
|
|
|
|
void DivePictureItem::setPixmap(const QPixmap &pix)
|
|
{
|
|
DivePixmapItem::setPixmap(pix);
|
|
QRectF r = boundingRect();
|
|
QGraphicsRectItem *rect = new QGraphicsRectItem(0 - 10, 0 -10, r.width() + 20, r.height() + 20, this);
|
|
rect->setPen(Qt::NoPen);
|
|
rect->setBrush(QColor(Qt::white));
|
|
rect->setFlag(ItemStacksBehindParent);
|
|
rect->setZValue(-1);
|
|
|
|
QGraphicsRectItem *shadow = new QGraphicsRectItem(rect->boundingRect(), this);
|
|
shadow->setPos(5,5);
|
|
shadow->setPen(Qt::NoPen);
|
|
shadow->setBrush(QColor(Qt::lightGray));
|
|
shadow->setFlag(ItemStacksBehindParent);
|
|
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();
|
|
}
|