diff options
author | Luiz Agostini <luiz.agostini@openbossa.org> | 2009-10-31 18:30:58 -0300 |
---|---|---|
committer | Luiz Agostini <luiz.agostini@openbossa.org> | 2009-11-05 00:42:09 -0300 |
commit | 811d314901d68ee14eedda6369201a978a2db666 (patch) | |
tree | 9da864f39e875b295da5ba63b98ec199b60aab38 /weather | |
parent | b4e03add970492ffc6dbd15552601216f9122d1e (diff) |
Weather: cityinfodysplay
* now using pixmaploader.
* city name click signal.
Signed-off-by: Luiz Agostini <luiz.agostini@openbossa.org>
Diffstat (limited to 'weather')
-rw-r--r-- | weather/bootmanager.cpp | 2 | ||||
-rw-r--r-- | weather/cityinfodisplay.cpp | 55 | ||||
-rw-r--r-- | weather/cityinfodisplay.h | 13 |
3 files changed, 55 insertions, 15 deletions
diff --git a/weather/bootmanager.cpp b/weather/bootmanager.cpp index 6a19fbf..aa60b01 100644 --- a/weather/bootmanager.cpp +++ b/weather/bootmanager.cpp @@ -6,6 +6,7 @@ #include "forecastrain.h" #include "forecastsnow.h" #include "forecaststars.h" +#include "cityinfodisplay.h" #include <QDebug> @@ -28,6 +29,7 @@ void BootManager::run() count += ForecastRain::loadImages(); count += ForecastSnow::loadImages(); count += ForecastStars::loadImages(); + count += CityInfoDisplay::loadImages(); m_imagesLoaded = count == 0; diff --git a/weather/cityinfodisplay.cpp b/weather/cityinfodisplay.cpp index 953a61f..ba50bd5 100644 --- a/weather/cityinfodisplay.cpp +++ b/weather/cityinfodisplay.cpp @@ -31,25 +31,33 @@ #include "cityinfodisplay.h" #include "settings.h" +#include "pixmaploader.h" #include <QFont> #include <QPen> #include <QFontMetrics> #include <QDebug> #include <QPainter> +#include <QGraphicsSceneMouseEvent> + +#define CURRENT_TEMP_FONT_SIZE (Settings::scaleHeight(170.0)) +#define TEMP_BOUND_FONT_SIZE (Settings::scaleHeight(40.0)) +#define CITY_NAME_FONT_SIZE (Settings::scaleHeight(50.0)) +#define MAX_CITY_NAME_WIDTH (Settings::scaleWidth(440.0)) +#define CITY_NAME_TOP (Settings::scaleHeight(235.0)) // CurrentTemperatureDisplay CurrentTemperatureDisplay::CurrentTemperatureDisplay() : m_brush(Qt::white) - , m_sign(Settings::getScaledPic("minus_sign")) - , m_unit(Settings::getScaledPic("centigrades")) + , m_sign(PixmapLoader::getPic("minus_sign")) + , m_unit(PixmapLoader::getPic("centigrades")) , m_value(-1) , m_pos(0.0, 0.0) { m_font.setFamily("Nokia Sans"); m_font.setBold(true); - m_font.setPixelSize(Settings::scaleHeight(170.0)); + m_font.setPixelSize(CURRENT_TEMP_FONT_SIZE); m_font.setStyleStrategy(QFont::PreferAntialias); m_pen.setColor(Qt::white); @@ -109,13 +117,13 @@ void CurrentTemperatureDisplay::setTemperature(int value) TemperatureBoundDisplay::TemperatureBoundDisplay(bool lowerBound) : m_brush(Qt::white) - , m_icon(Settings::getScaledPic(lowerBound ? "icon_min" : "icon_max")) + , m_icon(PixmapLoader::getPic(lowerBound ? "icon_min" : "icon_max")) , m_value(-1) , m_lowerBound(lowerBound) , m_pos(0.0, 0.0) { m_font.setFamily("Nokia Sans"); - m_font.setPixelSize(Settings::scaleHeight(40.0)); + m_font.setPixelSize(TEMP_BOUND_FONT_SIZE); m_font.setStyleStrategy(QFont::PreferAntialias); QColor color(255, 255, 255, 178); @@ -165,7 +173,7 @@ void TemperatureBoundDisplay::setValue(int value) // TemperatureDisplay TemperatureDisplay::TemperatureDisplay() - : m_line(Settings::getScaledPic("division_line")) + : m_line(PixmapLoader::getPic("division_line")) , m_lowerBound(true) , m_upperBound(false) , m_pos(0.0, 0.0) @@ -229,7 +237,7 @@ CityInfoDisplay::CityInfoDisplay(QGraphicsItem *parent) m_temperature.setPos(0.0, 0.0); m_font.setFamily("Nokia Sans"); - m_font.setPixelSize(Settings::scaleHeight(50.0)); + m_font.setPixelSize(CITY_NAME_FONT_SIZE); m_font.setStyleStrategy(QFont::PreferAntialias); m_pen.setColor(Qt::white); @@ -243,7 +251,7 @@ void CityInfoDisplay::updateBoundingRect() { const qreal right = qMax(m_temperature.boundingRect().right(), -m_textPos.x()); const qreal left = qMin(m_temperature.boundingRect().left(), m_textPos.x()); - m_boundingRect = QRectF(left, 0.0, right - left, m_textPos.y()); + m_boundingRect = QRectF(left, 0.0, right - left, m_nameRect.bottom()); } void CityInfoDisplay::setTemperature(int lowerBound, int upperBound, int current) @@ -258,9 +266,14 @@ void CityInfoDisplay::setCityName(const QString &name) { prepareGeometryChange(); QFontMetrics metrics(m_font); - m_text = metrics.elidedText(name, Qt::ElideRight, Settings::scaleWidth(440.0)); - m_textPos = QPointF(-(metrics.width(m_text) >> 1), - Settings::scaleHeight(235.0) + metrics.height()); + m_text = metrics.elidedText(name, Qt::ElideRight, MAX_CITY_NAME_WIDTH); + + int width = metrics.width(m_text); + int right = width >> 1; + qreal top = CITY_NAME_TOP; + m_textPos = QPointF(-right, top + metrics.height()); + m_nameRect = QRectF(-right, top, 2 * right, metrics.height() + metrics.descent()); + updateBoundingRect(); update(); } @@ -275,8 +288,6 @@ void CityInfoDisplay::paint(QPainter *painter, const QStyleOptionGraphicsItem *o Q_UNUSED(opt); Q_UNUSED(widget); - painter->save(); - painter->setPen(m_pen); painter->setBrush(m_brush); painter->setFont(m_font); @@ -284,6 +295,22 @@ void CityInfoDisplay::paint(QPainter *painter, const QStyleOptionGraphicsItem *o painter->translate(m_temperature.pos()); m_temperature.paint(painter); +} - painter->restore(); +void CityInfoDisplay::mousePressEvent(QGraphicsSceneMouseEvent *event) +{ + if (m_nameRect.contains(event->pos())) { + emit nameClicked(); + } else + event->ignore(); +} + +int CityInfoDisplay::loadImages() +{ + PixmapLoader::load("minus_sign"); + PixmapLoader::load("centigrades"); + PixmapLoader::load("icon_min"); + PixmapLoader::load("icon_max"); + PixmapLoader::load("division_line"); + return 5; } diff --git a/weather/cityinfodisplay.h b/weather/cityinfodisplay.h index 921a334..6b6dc3b 100644 --- a/weather/cityinfodisplay.h +++ b/weather/cityinfodisplay.h @@ -125,17 +125,27 @@ private: }; -class CityInfoDisplay : public QGraphicsItem +class CityInfoDisplay : public QObject, public QGraphicsItem { + Q_OBJECT + Q_INTERFACES(QGraphicsItem) public: CityInfoDisplay(QGraphicsItem *parent = 0); + static int loadImages(); + void setTemperature(int lowerBound, int upperBound, int current); void setCityName(const QString &name); QRectF boundingRect () const; void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0); +signals: + void nameClicked(); + +protected: + void mousePressEvent(QGraphicsSceneMouseEvent *event); + private: QRectF m_boundingRect; TemperatureDisplay m_temperature; @@ -144,6 +154,7 @@ private: QFont m_font; QString m_text; QPointF m_textPos; + QRectF m_nameRect; void updateBoundingRect(); |