subsurface/qt-ui/profile/divepixmapitem.cpp
Tomaz Canabrava 1e6986d870 Instead of holding the index, hold the URL.
Since the idea is to remove the picture in the future, we need
to not hold the row on the model, as when we delete one, the
other pictures will change the row. but the QUrl is unique.

Signed-off-by: Tomaz Canabrava <tomaz.canabrava@intel.com>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2014-07-30 12:34:43 -07:00

127 lines
3.1 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(QObject *parent): DivePixmapItem(parent)
{
setFlag(ItemIgnoresTransformations);
#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0)
setAcceptsHoverEvents(true);
#else
setAcceptHoverEvents(true);
#endif
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::setFileUrl(const QString &s)
{
fileUrl = s;
}
void DivePictureItem::hoverLeaveEvent(QGraphicsSceneHoverEvent *event)
{
Animations::scaleTo(this, 0.2);
setZValue(0);
if(button)
button->hide();
}
void DivePictureItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
QDesktopServices::openUrl(QUrl::fromLocalFile(fileUrl));
}
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();
}