Quantum GIS API Documentation  1.8
src/core/qgsdiagram.h
Go to the documentation of this file.
00001 /***************************************************************************
00002     qgsdiagram.h
00003     ---------------------
00004     begin                : March 2011
00005     copyright            : (C) 2011 by Marco Hugentobler
00006     email                : marco dot hugentobler at sourcepole dot ch
00007  ***************************************************************************
00008  *                                                                         *
00009  *   This program is free software; you can redistribute it and/or modify  *
00010  *   it under the terms of the GNU General Public License as published by  *
00011  *   the Free Software Foundation; either version 2 of the License, or     *
00012  *   (at your option) any later version.                                   *
00013  *                                                                         *
00014  ***************************************************************************/
00015 #ifndef QGSDIAGRAM_H
00016 #define QGSDIAGRAM_H
00017 
00018 #include "qgsfeature.h"
00019 #include <QPen>
00020 #include <QBrush>
00021 
00022 class QPainter;
00023 class QPointF;
00024 struct QgsDiagramSettings;
00025 
00026 class QgsRenderContext;
00027 
00029 class CORE_EXPORT QgsDiagram
00030 {
00031   public:
00032     virtual ~QgsDiagram() {}
00034     virtual void renderDiagram( const QgsAttributeMap& att, QgsRenderContext& c, const QgsDiagramSettings& s, const QPointF& position ) = 0;
00035     virtual QString diagramName() const = 0;
00036 
00037   protected:
00038     void setPenWidth( QPen& pen, const QgsDiagramSettings& s, const QgsRenderContext& c );
00039     QSizeF sizePainterUnits( const QSizeF& size, const QgsDiagramSettings& s, const QgsRenderContext& c );
00040     QFont scaledFont( const QgsDiagramSettings& s, const QgsRenderContext& c );
00041 };
00042 
00043 class CORE_EXPORT QgsTextDiagram: public QgsDiagram
00044 {
00045   public:
00046     enum Shape
00047     {
00048       Circle = 0,
00049       Rectangle,
00050       Triangle
00051     };
00052 
00053     enum Orientation
00054     {
00055       Horizontal = 0,
00056       Vertical
00057     };
00058 
00059     QgsTextDiagram();
00060     ~QgsTextDiagram();
00061     void renderDiagram( const QgsAttributeMap& att, QgsRenderContext& c, const QgsDiagramSettings& s, const QPointF& position );
00062 
00063     QString diagramName() const { return "Text"; }
00064 
00065   private:
00066     Orientation mOrientation;
00067     Shape mShape;
00068     QBrush mBrush; //transparent brush
00069     QPen mPen;
00070 
00073     void lineEllipseIntersection( const QPointF& lineStart, const QPointF& lineEnd, const QPointF& ellipseMid, double r1, double r2, QList<QPointF>& result ) const;
00074 };
00075 
00076 class CORE_EXPORT QgsPieDiagram: public QgsDiagram
00077 {
00078   public:
00079     QgsPieDiagram();
00080     ~QgsPieDiagram();
00081 
00082     void renderDiagram( const QgsAttributeMap& att, QgsRenderContext& c, const QgsDiagramSettings& s, const QPointF& position );
00083     QString diagramName() const { return "Pie"; }
00084 
00085   private:
00086     QBrush mCategoryBrush;
00087     QPen mPen;
00088 };
00089 
00090 #endif // QGSDIAGRAM_H
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines