summaryrefslogtreecommitdiffstats
path: root/weather
diff options
context:
space:
mode:
authorLuiz Agostini <luiz.agostini@openbossa.org>2009-10-31 18:30:58 -0300
committerLuiz Agostini <luiz.agostini@openbossa.org>2009-11-05 00:42:09 -0300
commit811d314901d68ee14eedda6369201a978a2db666 (patch)
tree9da864f39e875b295da5ba63b98ec199b60aab38 /weather
parentb4e03add970492ffc6dbd15552601216f9122d1e (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.cpp2
-rw-r--r--weather/cityinfodisplay.cpp55
-rw-r--r--weather/cityinfodisplay.h13
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();