SVN checkout 11/12/2010
[monav:monav.git] / interfaces / irenderer.h
1 #ifndef IRENDERER_H
2 #define IRENDERER_H
3
4 #include "utils/coordinates.h"
5 #include "interfaces/irouter.h"
6 #include <QtPlugin>
7 #include <QPainter>
8
9 class IRenderer
10 {
11 public:
12
13         struct PaintRequest {
14                 ProjectedCoordinate center; // center of the image
15                 int zoom; // required zoom level; in most rendering plugins the zoom level z will zoom in by faktor 2^z
16                 int virtualZoom; // scale the whole image -> neccessary for high DPI devices
17                 double rotation; // rotation in degrees [0,360]
18                 UnsignedCoordinate position; // position of the source indicator
19                 double heading; // heading of the source indicator
20                 UnsignedCoordinate target; // position of the target indicator
21                 QVector< UnsignedCoordinate > POIs; // a list of points of interest to highlight
22                 QVector< int > edgeSegments; // a list of edge segments to draw; each segment only stores the length of the segment
23                 QVector< UnsignedCoordinate > edges; // the sorted list of the edge segments' paths
24                 QVector< IRouter::Node > route; // the current route
25
26                 PaintRequest() {
27                         zoom = 0;
28                         virtualZoom = 1;
29                         rotation = 0;
30                         heading = 0;
31                 }
32         };
33
34         virtual QString GetName() = 0;
35         virtual void SetInputDirectory( const QString& dir ) = 0;
36         virtual void ShowSettings() = 0;
37         virtual bool IsCompatible( int fileFormatVersion ) = 0;
38         virtual bool LoadData() = 0;
39         // get the maximal zoom level; possible zoom levels are: [0,GetMaxZoom()]
40         virtual int GetMaxZoom() = 0;
41         // modify the request to respond to a mouse movement
42         virtual ProjectedCoordinate Move( int shiftX, int shiftY, const PaintRequest& request ) = 0;
43         // transform a position in the image into a coordinate
44         virtual ProjectedCoordinate PointToCoordinate( int shiftX, int shiftY, const PaintRequest& request ) = 0;
45         // paint onto a QPainter
46         virtual bool Paint( QPainter* painter, const PaintRequest& request ) = 0;
47         // connect an object to the update slot; a update is emitted whenever IRenderer would render an image differently ( e.g., after fetching a tile from the internet )
48         virtual void SetUpdateSlot( QObject* obj, const char* slot ) = 0;
49         virtual ~IRenderer() {}
50 };
51
52 Q_DECLARE_INTERFACE( IRenderer, "monav.IRenderer/1.2" )
53
54 #endif // IRENDERER_H