SVN checkout 11/12/2010
[monav:monav.git] / plugins / osmrenderer / rendererbase.h
1 /*
2 Copyright 2010  Christian Vetter veaac.fdirct@gmail.com
3
4 This file is part of MoNav.
5
6 MoNav is free software: you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation, either version 3 of the License, or
9 (at your option) any later version.
10
11 MoNav is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with MoNav.  If not, see <http://www.gnu.org/licenses/>.
18 */
19
20 #ifndef RENDERERBASE_H
21 #define RENDERERBASE_H
22
23 #include <QObject>
24 #include <QCache>
25 #include <vector>
26 #include "interfaces/irenderer.h"
27 #include "utils/coordinates.h"
28 #include "brsettingsdialog.h"
29
30 class RendererBase : public QObject, IRenderer
31 {
32         Q_OBJECT
33         Q_INTERFACES( IRenderer )
34
35 public:
36
37         RendererBase();
38         virtual ~RendererBase();
39         virtual QString GetName() = 0;
40         virtual void SetInputDirectory( const QString& dir );
41         virtual void ShowSettings();
42         virtual bool LoadData();
43         virtual int GetMaxZoom();
44         virtual ProjectedCoordinate Move( int shiftX, int shiftY, const PaintRequest& request );
45         virtual ProjectedCoordinate PointToCoordinate( int shiftX, int shiftY, const PaintRequest& request );
46         virtual bool Paint( QPainter* painter, const PaintRequest& request );
47         virtual void SetUpdateSlot( QObject* obj, const char* slot );
48
49 signals:
50         void changed();
51
52 protected:
53
54         virtual bool loadTile( int x, int y, int zoom, QPixmap** tile ) = 0;
55         virtual bool load() = 0;
56         virtual void unload() = 0;
57
58         long long tileID( int x, int y, int zoom );
59         void reset();
60         void setupPolygons();
61         void drawArrow( QPainter* painter, int x, int y, double rotation, QColor outer, QColor inner );
62         void drawIndicator( QPainter* painter, const QTransform& transform, const QTransform& inverseTransform, int x, int y, int sizeX, int sizeY, int virtualZoom, QColor outer, QColor inner );
63         void drawPolyline( QPainter* painter, const QRect& boundingBox, QVector< ProjectedCoordinate > line, QColor color );
64
65         int m_tileSize;
66         std::vector< int > m_zoomLevels;
67
68         QString m_directory;
69         QCache< long long, QPixmap > m_cache;
70         bool m_loaded;
71         QPolygonF m_arrow;
72
73         BRSettingsDialog::Settings m_settings;
74         BRSettingsDialog* m_settingsDialog;
75 };
76
77 #endif // RENDERERBASE_H