subsurface/qt-ui/starwidget.cpp
Tomaz Canabrava c5e7a025e4 Added option to edit the selected dive.
Added option to edit the selected dive.
Now the user can click on 'Edit', and a nice box will
appear stating that the dive is in edit mode, and the user
can edit all of the 'Notes' tab fields, including the
rating. When the edition is finished, the user needs to
click on 'edit' again to mark as accepted, or in
reset to reset the fields to it's original state

Signed-off-by: Tomaz Canabrava <tcanabrava@kde.org>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2013-05-18 17:06:48 -07:00

111 lines
2.1 KiB
C++

#include "starwidget.h"
#include <QSvgRenderer>
#include <QPainter>
#include <QPaintEvent>
#include <QDebug>
#include <QMouseEvent>
#include <unistd.h>
QPixmap* StarWidget::activeStar = 0;
QPixmap* StarWidget::inactiveStar = 0;
QPixmap StarWidget::starActive()
{
return (*activeStar);
}
QPixmap StarWidget::starInactive()
{
return (*inactiveStar);
}
int StarWidget::currentStars() const
{
return current;
}
void StarWidget::mouseReleaseEvent(QMouseEvent* event)
{
if (readOnly){
return;
}
int starClicked = event->pos().x() / IMG_SIZE + 1;
if (starClicked > TOTALSTARS)
starClicked = TOTALSTARS;
if (current == starClicked)
current -= 1;
else
current = starClicked;
Q_EMIT valueChanged(current);
update();
}
void StarWidget::paintEvent(QPaintEvent* event)
{
QPainter p(this);
for(int i = 0; i < current; i++)
p.drawPixmap(i * IMG_SIZE + SPACING, 0, starActive());
for(int i = current; i < TOTALSTARS; i++)
p.drawPixmap(i * IMG_SIZE + SPACING, 0, starInactive());
}
void StarWidget::setCurrentStars(int value)
{
current = value;
update();
Q_EMIT valueChanged(current);
}
StarWidget::StarWidget(QWidget* parent, Qt::WindowFlags f):
QWidget(parent, f),
current(0)
{
if(!activeStar){
activeStar = new QPixmap();
QSvgRenderer render(QString(":star"));
QPixmap renderedStar(IMG_SIZE, IMG_SIZE);
renderedStar.fill(Qt::transparent);
QPainter painter(&renderedStar);
render.render(&painter, QRectF(0, 0, IMG_SIZE, IMG_SIZE));
(*activeStar) = renderedStar;
}
if(!inactiveStar){
inactiveStar = new QPixmap();
(*inactiveStar) = grayImage(activeStar);
}
}
QPixmap StarWidget::grayImage(QPixmap* coloredImg)
{
QImage img = coloredImg->toImage();
for (int i = 0; i < img.width(); ++i) {
for (int j = 0; j < img.height(); ++j) {
QRgb rgb = img.pixel(i, j);
if (!rgb)
continue;
QColor c(rgb);
int gray = (c.red() + c.green() + c.blue()) / 3;
img.setPixel(i, j, qRgb(gray, gray, gray));
}
}
return QPixmap::fromImage(img);
}
QSize StarWidget::sizeHint() const
{
return QSize(IMG_SIZE * TOTALSTARS + SPACING * (TOTALSTARS-1), IMG_SIZE);
}
void StarWidget::setReadOnly(bool r)
{
readOnly = r;
}