You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
307 lines
8.2 KiB
307 lines
8.2 KiB
/* -*- mode: C++ ; c-file-style: "stroustrup" -*- ***************************** |
|
* Qwt Widget Library |
|
* Copyright (C) 1997 Josef Wilgen |
|
* Copyright (C) 2002 Uwe Rathmann |
|
* |
|
* This library is free software; you can redistribute it and/or |
|
* modify it under the terms of the Qwt License, Version 1.0 |
|
*****************************************************************************/ |
|
|
|
#ifndef QWT_PLOT_ITEM_H |
|
#define QWT_PLOT_ITEM_H |
|
|
|
#include "qwt_global.h" |
|
#include "qwt_text.h" |
|
#include "qwt_legend_data.h" |
|
#include "qwt_graphic.h" |
|
#include <qrect.h> |
|
#include <qlist.h> |
|
#include <qmetatype.h> |
|
|
|
class QPainter; |
|
class QwtScaleMap; |
|
class QwtScaleDiv; |
|
class QwtPlot; |
|
|
|
/*! |
|
\brief Base class for items on the plot canvas |
|
|
|
A plot item is "something", that can be painted on the plot canvas, |
|
or only affects the scales of the plot widget. They can be categorized as: |
|
|
|
- Representator\n |
|
A "Representator" is an item that represents some sort of data |
|
on the plot canvas. The different representator classes are organized |
|
according to the characteristics of the data: |
|
- QwtPlotMarker |
|
Represents a point or a horizontal/vertical coordinate |
|
- QwtPlotCurve |
|
Represents a series of points |
|
- QwtPlotSpectrogram ( QwtPlotRasterItem ) |
|
Represents raster data |
|
- ... |
|
|
|
- Decorators\n |
|
A "Decorator" is an item, that displays additional information, that |
|
is not related to any data: |
|
- QwtPlotGrid |
|
- QwtPlotScaleItem |
|
- QwtPlotSvgItem |
|
- ... |
|
|
|
Depending on the QwtPlotItem::ItemAttribute flags, an item is included |
|
into autoscaling or has an entry on the legend. |
|
|
|
Before misusing the existing item classes it might be better to |
|
implement a new type of plot item |
|
( don't implement a watermark as spectrogram ). |
|
Deriving a new type of QwtPlotItem primarily means to implement |
|
the YourPlotItem::draw() method. |
|
|
|
\sa The cpuplot example shows the implementation of additional plot items. |
|
*/ |
|
|
|
class QWT_EXPORT QwtPlotItem |
|
{ |
|
public: |
|
/*! |
|
\brief Runtime type information |
|
|
|
RttiValues is used to cast plot items, without |
|
having to enable runtime type information of the compiler. |
|
*/ |
|
enum RttiValues |
|
{ |
|
//! Unspecific value, that can be used, when it doesn't matter |
|
Rtti_PlotItem = 0, |
|
|
|
//! For QwtPlotGrid |
|
Rtti_PlotGrid, |
|
|
|
//! For QwtPlotScaleItem |
|
Rtti_PlotScale, |
|
|
|
//! For QwtPlotLegendItem |
|
Rtti_PlotLegend, |
|
|
|
//! For QwtPlotMarker |
|
Rtti_PlotMarker, |
|
|
|
//! For QwtPlotCurve |
|
Rtti_PlotCurve, |
|
|
|
//! For QwtPlotSpectroCurve |
|
Rtti_PlotSpectroCurve, |
|
|
|
//! For QwtPlotIntervalCurve |
|
Rtti_PlotIntervalCurve, |
|
|
|
//! For QwtPlotHistogram |
|
Rtti_PlotHistogram, |
|
|
|
//! For QwtPlotSpectrogram |
|
Rtti_PlotSpectrogram, |
|
|
|
//! For QwtPlotSvgItem |
|
Rtti_PlotSVG, |
|
|
|
//! For QwtPlotTradingCurve |
|
Rtti_PlotTradingCurve, |
|
|
|
//! For QwtPlotBarChart |
|
Rtti_PlotBarChart, |
|
|
|
//! For QwtPlotMultiBarChart |
|
Rtti_PlotMultiBarChart, |
|
|
|
//! For QwtPlotShapeItem |
|
Rtti_PlotShape, |
|
|
|
//! For QwtPlotTextLabel |
|
Rtti_PlotTextLabel, |
|
|
|
//! For QwtPlotZoneItem |
|
Rtti_PlotZone, |
|
|
|
/*! |
|
Values >= Rtti_PlotUserItem are reserved for plot items |
|
not implemented in the Qwt library. |
|
*/ |
|
Rtti_PlotUserItem = 1000 |
|
}; |
|
|
|
/*! |
|
\brief Plot Item Attributes |
|
|
|
Various aspects of a plot widget depend on the attributes of |
|
the attached plot items. If and how a single plot item |
|
participates in these updates depends on its attributes. |
|
|
|
\sa setItemAttribute(), testItemAttribute(), ItemInterest |
|
*/ |
|
enum ItemAttribute |
|
{ |
|
//! The item is represented on the legend. |
|
Legend = 0x01, |
|
|
|
/*! |
|
The boundingRect() of the item is included in the |
|
autoscaling calculation as long as its width or height |
|
is >= 0.0. |
|
*/ |
|
AutoScale = 0x02, |
|
|
|
/*! |
|
The item needs extra space to display something outside |
|
its bounding rectangle. |
|
\sa getCanvasMarginHint() |
|
*/ |
|
Margins = 0x04 |
|
}; |
|
|
|
//! Plot Item Attributes |
|
typedef QFlags<ItemAttribute> ItemAttributes; |
|
|
|
/*! |
|
\brief Plot Item Interests |
|
|
|
Plot items might depend on the situation of the corresponding |
|
plot widget. By enabling an interest the plot item will be |
|
notified, when the corresponding attribute of the plot widgets |
|
has changed. |
|
|
|
\sa setItemAttribute(), testItemAttribute(), ItemInterest |
|
*/ |
|
enum ItemInterest |
|
{ |
|
/*! |
|
The item is interested in updates of the scales |
|
\sa updateScaleDiv() |
|
*/ |
|
ScaleInterest = 0x01, |
|
|
|
/*! |
|
The item is interested in updates of the legend ( of other items ) |
|
This flag is intended for items, that want to implement a legend |
|
for displaying entries of other plot item. |
|
|
|
\note If the plot item wants to be represented on a legend |
|
enable QwtPlotItem::Legend instead. |
|
|
|
\sa updateLegend() |
|
*/ |
|
LegendInterest = 0x02 |
|
}; |
|
|
|
//! Plot Item Interests |
|
typedef QFlags<ItemInterest> ItemInterests; |
|
|
|
//! Render hints |
|
enum RenderHint |
|
{ |
|
//! Enable antialiasing |
|
RenderAntialiased = 0x1 |
|
}; |
|
|
|
//! Render hints |
|
typedef QFlags<RenderHint> RenderHints; |
|
|
|
explicit QwtPlotItem( const QwtText &title = QwtText() ); |
|
virtual ~QwtPlotItem(); |
|
|
|
void attach( QwtPlot *plot ); |
|
void detach(); |
|
|
|
QwtPlot *plot() const; |
|
|
|
void setTitle( const QString &title ); |
|
void setTitle( const QwtText &title ); |
|
const QwtText &title() const; |
|
|
|
virtual int rtti() const; |
|
|
|
void setItemAttribute( ItemAttribute, bool on = true ); |
|
bool testItemAttribute( ItemAttribute ) const; |
|
|
|
void setItemInterest( ItemInterest, bool on = true ); |
|
bool testItemInterest( ItemInterest ) const; |
|
|
|
void setRenderHint( RenderHint, bool on = true ); |
|
bool testRenderHint( RenderHint ) const; |
|
|
|
void setRenderThreadCount( uint numThreads ); |
|
uint renderThreadCount() const; |
|
|
|
void setLegendIconSize( const QSize & ); |
|
QSize legendIconSize() const; |
|
|
|
double z() const; |
|
void setZ( double z ); |
|
|
|
void show(); |
|
void hide(); |
|
virtual void setVisible( bool ); |
|
bool isVisible () const; |
|
|
|
void setAxes( int xAxis, int yAxis ); |
|
|
|
void setXAxis( int axis ); |
|
int xAxis() const; |
|
|
|
void setYAxis( int axis ); |
|
int yAxis() const; |
|
|
|
virtual void itemChanged(); |
|
virtual void legendChanged(); |
|
|
|
/*! |
|
\brief Draw the item |
|
|
|
\param painter Painter |
|
\param xMap Maps x-values into pixel coordinates. |
|
\param yMap Maps y-values into pixel coordinates. |
|
\param canvasRect Contents rect of the canvas in painter coordinates |
|
*/ |
|
virtual void draw( QPainter *painter, |
|
const QwtScaleMap &xMap, const QwtScaleMap &yMap, |
|
const QRectF &canvasRect ) const = 0; |
|
|
|
virtual QRectF boundingRect() const; |
|
|
|
virtual void getCanvasMarginHint( |
|
const QwtScaleMap &xMap, const QwtScaleMap &yMap, |
|
const QRectF &canvasSize, |
|
double &left, double &top, double &right, double &bottom) const; |
|
|
|
virtual void updateScaleDiv( |
|
const QwtScaleDiv&, const QwtScaleDiv& ); |
|
|
|
virtual void updateLegend( const QwtPlotItem *, |
|
const QList<QwtLegendData> & ); |
|
|
|
QRectF scaleRect( const QwtScaleMap &, const QwtScaleMap & ) const; |
|
QRectF paintRect( const QwtScaleMap &, const QwtScaleMap & ) const; |
|
|
|
virtual QList<QwtLegendData> legendData() const; |
|
|
|
virtual QwtGraphic legendIcon( int index, const QSizeF & ) const; |
|
|
|
protected: |
|
QwtGraphic defaultIcon( const QBrush &, const QSizeF & ) const; |
|
|
|
private: |
|
// Disabled copy constructor and operator= |
|
QwtPlotItem( const QwtPlotItem & ); |
|
QwtPlotItem &operator=( const QwtPlotItem & ); |
|
|
|
class PrivateData; |
|
PrivateData *d_data; |
|
}; |
|
|
|
Q_DECLARE_OPERATORS_FOR_FLAGS( QwtPlotItem::ItemAttributes ) |
|
Q_DECLARE_OPERATORS_FOR_FLAGS( QwtPlotItem::ItemInterests ) |
|
Q_DECLARE_OPERATORS_FOR_FLAGS( QwtPlotItem::RenderHints ) |
|
|
|
Q_DECLARE_METATYPE( QwtPlotItem * ) |
|
|
|
#endif
|
|
|