diff options
author | Tomaz Canabrava <tcanabrava@kde.org> | 2013-04-22 16:00:27 -0700 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2013-04-22 16:09:21 -0700 |
commit | 9ffb707d9d9d478b7538a8cd9ef9ef7c6edae25c (patch) | |
tree | 72c88c133b82a5190e4a5099dbc96335c89fae7d /qt-ui/starwidget.cpp | |
parent | a0280ae7d2cdd483bc53c7bc91a8aa438f9234de (diff) | |
download | subsurface-9ffb707d9d9d478b7538a8cd9ef9ef7c6edae25c.tar.gz |
Initial version of the Star Picker Widget.
A very simple to use widget:
StarWidget *stars = new StarWidget( windowParent);
stars->setMaximumStars(10);
stars->setCurrentStars( rand()%10);
stars->show();
connect(stars, SIGNAL(valueChanged(int)), someObj, SLOT(starsChangedValue(int)));
It currently uses a 'star.svg' file on the same folder as the binary.
Signed-off-by: Tomaz Canabrava <tcanabrava@kde.org>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'qt-ui/starwidget.cpp')
-rw-r--r-- | qt-ui/starwidget.cpp | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/qt-ui/starwidget.cpp b/qt-ui/starwidget.cpp new file mode 100644 index 000000000..457946feb --- /dev/null +++ b/qt-ui/starwidget.cpp @@ -0,0 +1,102 @@ +#include "starwidget.h" +#include <QSvgRenderer> +#include <QPainter> +#include <QPaintEvent> +#include <QDebug> +#include <QMouseEvent> + +int StarWidget::currentStars() const +{ + return current; +} + +void StarWidget::enableHalfStars(bool enabled) +{ + halfStar = enabled; + update(); +} + +bool StarWidget::halfStarsEnabled() const +{ + return halfStar; +} + +int StarWidget::maxStars() const +{ + return stars; +} + +void StarWidget::mouseReleaseEvent(QMouseEvent* event) +{ + int starClicked = event->pos().x() / IMG_SIZE + 1; + if (starClicked > stars) + starClicked = stars; + + if (current == starClicked) + current -= 1; + else + current = starClicked; + + update(); +} + +void StarWidget::paintEvent(QPaintEvent* event) +{ + QPainter p(this); + + for(int i = 0; i < current; i++) + p.drawPixmap(i * IMG_SIZE + SPACING, 0, activeStar); + + for(int i = current; i < stars; i++) + p.drawPixmap(i * IMG_SIZE + SPACING, 0, inactiveStar); +} + +void StarWidget::setCurrentStars(int value) +{ + current = value; + update(); + Q_EMIT valueChanged(current); +} + +void StarWidget::setMaximumStars(int maximum) +{ + stars = maximum; + update(); +} + +StarWidget::StarWidget(QWidget* parent, Qt::WindowFlags f): + QWidget(parent, f), + stars(5), + current(0), + halfStar(false) +{ + QSvgRenderer render(QString("star.svg")); + 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; + inactiveStar = grayImage(&renderedStar); +} + +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 col = img.pixel(i, j); + if (!col) + continue; + int gray = QColor(Qt::darkGray).rgb(); + img.setPixel(i, j, qRgb(gray, gray, gray)); + } + } + return QPixmap::fromImage(img); +} + +QSize StarWidget::sizeHint() const +{ + return QSize(IMG_SIZE * stars + SPACING * (stars-1), IMG_SIZE); +} |