REVIEW: 6622
[marble:marble.git] / src / plasmoid / worldclock.h
1 // Copyright 2008 Henry de Valence <hdevalence@gmail.com>
2 //
3 // This program is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License, or (at your option) any later version.
7 //
8 // This program is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11 // Lesser General Public License for more details.
12 //
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this program. If not, see <http://www.gnu.org/licenses/>.
15
16
17 #ifndef WORLDCLOCK_H
18 #define WORLDCLOCK_H
19
20
21 #include <Plasma/Applet>
22 #include <Plasma/DataEngine>
23 #include "ui_worldclockConfig.h"
24
25
26 class QGraphicsSceneHoverEvent;
27 class QStyleOptionGraphicsItem;
28 class QFont;
29 class QRect;
30 class QString;
31 class QPainter;
32 class QDateTime;
33 class QPointF;
34
35 class KTimeZone;
36
37 namespace Marble
38 {
39
40 class MarbleMap;
41 class SunLocator;
42
43 class WorldClock : public Plasma::Applet
44 {
45     Q_OBJECT
46     public:
47         WorldClock(QObject *parent, const QVariantList &args);
48         ~WorldClock();
49         void init();
50         void paintInterface(QPainter *painter,
51                     const QStyleOptionGraphicsItem *option,
52                     const QRect& contentsRect);
53     public slots:
54         void dataUpdated(const QString &source,
55                     const Plasma::DataEngine::Data &data);
56         void createConfigurationInterface(KConfigDialog *parent);
57         void hoverLeaveEvent(QGraphicsSceneHoverEvent *event);
58         void hoverEnterEvent(QGraphicsSceneHoverEvent *event);
59         void hoverMoveEvent(QGraphicsSceneHoverEvent *event);
60     protected slots:
61         void configAccepted();
62     private slots:
63         //connected to geometryChanged()
64         void resizeMap(bool changeAspect = false);
65         void slotRepaint();
66     private:
67         void connectToEngine();
68
69         //these are used for sizing & positioning text
70         void recalculatePoints();
71         void recalculateFonts();
72         QFont calculateFont(const QString &text, const QRect &boundingBox) const;
73         void recalculateTranslation();
74
75         //for changing zones based on mouse position
76         void setTz( QString newtz );
77         QString getZone();
78
79         //time in our selected timezone
80         QDateTime m_time;
81         //time in user's local zone
82         QDateTime m_localtime;
83         bool m_showDate;
84         //use custom zone list?
85         bool m_customTz;
86
87         //the translation
88         QPoint m_t;
89
90         //the map
91         MarbleMap  *m_map;
92         SunLocator *m_sun;
93
94         //hover stuff
95         bool m_isHovered;
96         QPointF m_hover;
97
98         //map of locations and key for accessing it.
99         QString m_locationkey;
100         QMap<QString, KTimeZone> m_locations;
101
102         //so we can check if the size has changed
103         QRect m_lastRect;
104
105         //Font sizing & positioning
106         QFont m_timeFont;
107         QFont m_locationFont;
108         QHash<QString, QPoint> m_points;
109
110         //engine
111         Plasma::DataEngine *m_timeEngine;
112
113         //config gui
114         Ui::worldclockConfig ui;
115 };
116
117 } //ns Marble
118
119 K_EXPORT_PLASMA_APPLET(worldclock, Marble::WorldClock)
120 #endif
121
122