1 /* -*- mode: C++ ; c-file-style: "stroustrup" -*- ***************************** 2 * QwtPolar Widget Library 3 * Copyright (C) 2008 Uwe Rathmann 4 * 5 * This library is free software; you can redistribute it and/or 6 * modify it under the terms of the Qwt License, Version 1.0 7 *****************************************************************************/ 8 9 #ifndef QWT_POLAR_ITEM_H 10 #define QWT_POLAR_ITEM_H 11 12 #include "qwt_polar_global.h" 13 #include <qwt_text.h> 14 #include <qwt_legend_data.h> 15 #include <qwt_graphic.h> 16 #include <qwt_interval.h> 17 18 class QString; 19 class QRect; 20 class QPointF; 21 class QPainter; 22 class QwtPolarPlot; 23 class QwtScaleMap; 24 class QwtScaleDiv; 25 26 /*! 27 \brief Base class for items on a polar plot 28 29 A QwtPolarItem is "something that can be painted on the canvas". 30 It is connected to the QwtPolar framework by a couple of virtual 31 methods, that are individually implemented in derived item classes. 32 33 QwtPolar offers an implementation of the most common types of items, 34 but deriving from QwtPolarItem makes it easy to implement additional 35 types of items. 36 */ 37 class QWT_POLAR_EXPORT QwtPolarItem 38 { 39 public: 40 /*! 41 \brief Runtime type information 42 43 RttiValues is used to cast plot items, without 44 having to enable runtime type information of the compiler. 45 */ 46 enum RttiValues 47 { 48 //! Unspecific value, that can be used, when it doesn't matter 49 Rtti_PolarItem = 0, 50 51 //! For QwtPolarGrid 52 Rtti_PolarGrid, 53 54 //! For QwtPolarMarker 55 Rtti_PolarMarker, 56 57 //! For QwtPolarCurve 58 Rtti_PolarCurve, 59 60 //! For QwtPolarSpectrogram 61 Rtti_PolarSpectrogram, 62 63 /*! 64 Values >= Rtti_PolarUserItem are reserved for plot items 65 not implemented in the QwtPolar library. 66 */ 67 Rtti_PolarUserItem = 1000 68 }; 69 70 /*! 71 \brief Plot Item Attributes 72 \sa setItemAttribute(), testItemAttribute() 73 */ 74 enum ItemAttribute 75 { 76 //! The item is represented on the legend. 77 Legend = 0x01, 78 79 /*! 80 The boundingRect() of the item is included in the 81 autoscaling calculation. 82 */ 83 AutoScale = 0x02 84 }; 85 86 //! Item attributes 87 typedef QFlags<ItemAttribute> ItemAttributes; 88 89 /*! 90 \brief Render hints 91 \sa setRenderHint(), testRenderHint() 92 */ 93 enum RenderHint 94 { 95 //! Enable antialiasing 96 RenderAntialiased = 0x01 97 }; 98 99 //! Item attributes 100 typedef QFlags<RenderHint> RenderHints; 101 102 explicit QwtPolarItem( const QwtText &title = QwtText() ); 103 virtual ~QwtPolarItem(); 104 105 void attach( QwtPolarPlot *plot ); 106 void detach(); 107 108 QwtPolarPlot *plot() const; 109 110 void setTitle( const QString &title ); 111 void setTitle( const QwtText &title ); 112 const QwtText &title() const; 113 114 virtual int rtti() const; 115 116 void setItemAttribute( ItemAttribute, bool on = true ); 117 bool testItemAttribute( ItemAttribute ) const; 118 119 void setRenderHint( RenderHint, bool on = true ); 120 bool testRenderHint( RenderHint ) const; 121 122 void setRenderThreadCount( uint numThreads ); 123 uint renderThreadCount() const; 124 125 double z() const; 126 void setZ( double z ); 127 128 void show(); 129 void hide(); 130 virtual void setVisible( bool ); 131 bool isVisible () const; 132 133 virtual void itemChanged(); 134 virtual void legendChanged(); 135 136 /*! 137 \brief Draw the item 138 139 \param painter Painter 140 \param azimuthMap Maps azimuth values to values related to 0.0, M_2PI 141 \param radialMap Maps radius values into painter coordinates. 142 \param pole Position of the pole in painter coordinates 143 \param radius Radius of the complete plot area in painter coordinates 144 \param canvasRect Contents rect of the canvas in painter coordinates 145 */ 146 virtual void draw( QPainter *painter, 147 const QwtScaleMap &azimuthMap, const QwtScaleMap &radialMap, 148 const QPointF &pole, double radius, 149 const QRectF &canvasRect ) const = 0; 150 151 virtual QwtInterval boundingInterval( int scaleId ) const; 152 153 virtual void updateScaleDiv( const QwtScaleDiv &, 154 const QwtScaleDiv &, const QwtInterval & ); 155 156 virtual int marginHint() const; 157 158 void setLegendIconSize( const QSize & ); 159 QSize legendIconSize() const; 160 161 virtual QList<QwtLegendData> legendData() const; 162 virtual QwtGraphic legendIcon( int index, const QSizeF & ) const; 163 164 private: 165 // Disabled copy constructor and operator= 166 QwtPolarItem( const QwtPolarItem & ); 167 QwtPolarItem &operator=( const QwtPolarItem & ); 168 169 class PrivateData; 170 PrivateData *d_data; 171 }; 172 173 Q_DECLARE_OPERATORS_FOR_FLAGS( QwtPolarItem::ItemAttributes ) 174 Q_DECLARE_OPERATORS_FOR_FLAGS( QwtPolarItem::RenderHints ) 175 176 Q_DECLARE_METATYPE( QwtPolarItem * ) 177 178 #endif 179