Skip to content
Snippets Groups Projects
qwt_plot_item.cpp 15.6 KiB
Newer Older
  • Learn to ignore specific revisions
  • pixhawk's avatar
    pixhawk committed
    /* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
     * Qwt Widget Library
     * Copyright (C) 1997   Josef Wilgen
     * Copyright (C) 2002   Uwe Rathmann
    
    pixhawk's avatar
    pixhawk committed
     * This library is free software; you can redistribute it and/or
     * modify it under the terms of the Qwt License, Version 1.0
     *****************************************************************************/
    
    
    Bryant's avatar
    Bryant committed
    #include "qwt_plot_item.h"
    
    pixhawk's avatar
    pixhawk committed
    #include "qwt_text.h"
    #include "qwt_plot.h"
    
    Bryant's avatar
    Bryant committed
    #include "qwt_legend_data.h"
    #include "qwt_scale_div.h"
    #include "qwt_graphic.h"
    #include <qpainter.h>
    
    pixhawk's avatar
    pixhawk committed
    
    class QwtPlotItem::PrivateData
    {
    public:
        PrivateData():
    
    Bryant's avatar
    Bryant committed
            plot( NULL ),
            isVisible( true ),
            attributes( 0 ),
            interests( 0 ),
            renderHints( 0 ),
            renderThreadCount( 1 ),
            z( 0.0 ),
            xAxis( QwtPlot::xBottom ),
            yAxis( QwtPlot::yLeft ),
            legendIconSize( 8, 8 )
        {
    
    pixhawk's avatar
    pixhawk committed
        }
    
        mutable QwtPlot *plot;
    
        bool isVisible;
    
    Bryant's avatar
    Bryant committed
    
        QwtPlotItem::ItemAttributes attributes;
        QwtPlotItem::ItemInterests interests;
    
        QwtPlotItem::RenderHints renderHints;
        uint renderThreadCount;
    
    
    pixhawk's avatar
    pixhawk committed
        double z;
    
        int xAxis;
        int yAxis;
    
        QwtText title;
    
    Bryant's avatar
    Bryant committed
        QSize legendIconSize;
    
    pixhawk's avatar
    pixhawk committed
    };
    
    
    Bryant's avatar
    Bryant committed
    /*!
       Constructor
       \param title Title of the item
    */
    QwtPlotItem::QwtPlotItem( const QwtText &title )
    
    pixhawk's avatar
    pixhawk committed
    {
        d_data = new PrivateData;
        d_data->title = title;
    }
    
    //! Destroy the QwtPlotItem
    QwtPlotItem::~QwtPlotItem()
    {
    
    Bryant's avatar
    Bryant committed
        attach( NULL );
    
    pixhawk's avatar
    pixhawk committed
        delete d_data;
    }
    
    
    pixhawk's avatar
    pixhawk committed
      \brief Attach the item to a plot.
    
      This method will attach a QwtPlotItem to the QwtPlot argument. It will first
      detach the QwtPlotItem from any plot from a previous call to attach (if
      necessary). If a NULL argument is passed, it will detach from any QwtPlot it
      was attached to.
    
    
    Bryant's avatar
    Bryant committed
      \param plot Plot widget
      \sa detach()
    
    pixhawk's avatar
    pixhawk committed
    */
    
    Bryant's avatar
    Bryant committed
    void QwtPlotItem::attach( QwtPlot *plot )
    
    pixhawk's avatar
    pixhawk committed
    {
        if ( plot == d_data->plot )
            return;
    
    
    Bryant's avatar
    Bryant committed
        if ( d_data->plot )
            d_data->plot->attachItem( this, false );
    
    pixhawk's avatar
    pixhawk committed
    
        d_data->plot = plot;
    
    
    Bryant's avatar
    Bryant committed
        if ( d_data->plot )
            d_data->plot->attachItem( this, true );
    }
    
    pixhawk's avatar
    pixhawk committed
    
    
    Bryant's avatar
    Bryant committed
    /*!
       \brief This method detaches a QwtPlotItem from any 
              QwtPlot it has been associated with.
    
       detach() is equivalent to calling attach( NULL )
       \sa attach()
    */
    void QwtPlotItem::detach()
    {
        attach( NULL );
    
    pixhawk's avatar
    pixhawk committed
    }
    
    
    pixhawk's avatar
    pixhawk committed
       Return rtti for the specific class represented. QwtPlotItem is simply
       a virtual interface class, and base classes will implement this method
       with specific rtti values so a user can differentiate them.
    
    
       The rtti value is useful for environments, where the
    
    pixhawk's avatar
    pixhawk committed
       runtime type information is disabled and it is not possible
       to do a dynamic_cast<...>.
    
    pixhawk's avatar
    pixhawk committed
       \return rtti value
       \sa RttiValues
    */
    int QwtPlotItem::rtti() const
    {
        return Rtti_PlotItem;
    }
    
    //! Return attached plot
    
    QwtPlot *QwtPlotItem::plot() const
    {
        return d_data->plot;
    
    pixhawk's avatar
    pixhawk committed
    }
    
    /*!
       Plot items are painted in increasing z-order.
    
       \return setZ(), QwtPlotDict::itemList()
    */
    
    double QwtPlotItem::z() const
    {
        return d_data->z;
    
    pixhawk's avatar
    pixhawk committed
    }
    
    /*!
       \brief Set the z value
    
       Plot items are painted in increasing z-order.
    
       \param z Z-value
       \sa z(), QwtPlotDict::itemList()
    */
    
    Bryant's avatar
    Bryant committed
    void QwtPlotItem::setZ( double z )
    
    Bryant's avatar
    Bryant committed
        if ( d_data->z != z )
        {
            if ( d_data->plot ) // update the z order
                d_data->plot->attachItem( this, false );
    
    
            d_data->z = z;
    
    Bryant's avatar
    Bryant committed
    
            if ( d_data->plot )
                d_data->plot->attachItem( this, true );
    
    
    pixhawk's avatar
    pixhawk committed
            itemChanged();
        }
    }
    
    
    pixhawk's avatar
    pixhawk committed
       Set a new title
    
       \param title Title
    
    Bryant's avatar
    Bryant committed
    void QwtPlotItem::setTitle( const QString &title )
    
    pixhawk's avatar
    pixhawk committed
    {
    
    Bryant's avatar
    Bryant committed
        setTitle( QwtText( title ) );
    
    pixhawk's avatar
    pixhawk committed
    }
    
    
    pixhawk's avatar
    pixhawk committed
       Set a new title
    
       \param title Title
    
    Bryant's avatar
    Bryant committed
    void QwtPlotItem::setTitle( const QwtText &title )
    
    pixhawk's avatar
    pixhawk committed
    {
    
    Bryant's avatar
    Bryant committed
        if ( d_data->title != title )
        {
    
            d_data->title = title;
    
    Bryant's avatar
    Bryant committed
    
            legendChanged();
    #if 0
    
    pixhawk's avatar
    pixhawk committed
            itemChanged();
    
    Bryant's avatar
    Bryant committed
    #endif
    
    pixhawk's avatar
    pixhawk committed
        }
    }
    
    /*!
       \return Title of the item
       \sa setTitle()
    */
    const QwtText &QwtPlotItem::title() const
    {
        return d_data->title;
    }
    
    /*!
       Toggle an item attribute
    
    pixhawk's avatar
    pixhawk committed
       \param attribute Attribute type
       \param on true/false
    
    
    Bryant's avatar
    Bryant committed
       \sa testItemAttribute(), ItemInterest
    
    pixhawk's avatar
    pixhawk committed
    */
    
    Bryant's avatar
    Bryant committed
    void QwtPlotItem::setItemAttribute( ItemAttribute attribute, bool on )
    
    pixhawk's avatar
    pixhawk committed
    {
    
    Bryant's avatar
    Bryant committed
        if ( d_data->attributes.testFlag( attribute ) != on )
        {
    
    pixhawk's avatar
    pixhawk committed
            if ( on )
                d_data->attributes |= attribute;
            else
                d_data->attributes &= ~attribute;
    
    
    Bryant's avatar
    Bryant committed
            if ( attribute == QwtPlotItem::Legend )
                legendChanged();
    
    
    pixhawk's avatar
    pixhawk committed
            itemChanged();
        }
    }
    
    /*!
       Test an item attribute
    
    
    Bryant's avatar
    Bryant committed
       \param attribute Attribute type
    
    pixhawk's avatar
    pixhawk committed
       \return true/false
    
    Bryant's avatar
    Bryant committed
       \sa setItemAttribute(), ItemInterest
    
    pixhawk's avatar
    pixhawk committed
    */
    
    Bryant's avatar
    Bryant committed
    bool QwtPlotItem::testItemAttribute( ItemAttribute attribute ) const
    
    pixhawk's avatar
    pixhawk committed
    {
    
    Bryant's avatar
    Bryant committed
        return d_data->attributes.testFlag( attribute );
    
    pixhawk's avatar
    pixhawk committed
    }
    
    
    Bryant's avatar
    Bryant committed
    /*!
       Toggle an item interest
    
       \param interest Interest type
       \param on true/false
    
       \sa testItemInterest(), ItemAttribute
    */
    void QwtPlotItem::setItemInterest( ItemInterest interest, bool on )
    {
        if ( d_data->interests.testFlag( interest ) != on )
        {
            if ( on )
                d_data->interests |= interest;
            else
                d_data->interests &= ~interest;
    
            itemChanged();
        }
    }
    
    /*!
       Test an item interest
    
       \param interest Interest type
       \return true/false
       \sa setItemInterest(), ItemAttribute
    */
    bool QwtPlotItem::testItemInterest( ItemInterest interest ) const
    {
        return d_data->interests.testFlag( interest );
    }
    
    pixhawk's avatar
    pixhawk committed
    
    /*!
       Toggle an render hint
    
    pixhawk's avatar
    pixhawk committed
       \param hint Render hint
       \param on true/false
    
       \sa testRenderHint(), RenderHint
    */
    
    Bryant's avatar
    Bryant committed
    void QwtPlotItem::setRenderHint( RenderHint hint, bool on )
    
    pixhawk's avatar
    pixhawk committed
    {
    
    Bryant's avatar
    Bryant committed
        if ( d_data->renderHints.testFlag( hint ) != on )
        {
    
    pixhawk's avatar
    pixhawk committed
            if ( on )
                d_data->renderHints |= hint;
            else
                d_data->renderHints &= ~hint;
    
            itemChanged();
        }
    }
    
    /*!
       Test a render hint
    
       \param hint Render hint
       \return true/false
       \sa setRenderHint(), RenderHint
    */
    
    Bryant's avatar
    Bryant committed
    bool QwtPlotItem::testRenderHint( RenderHint hint ) const
    
    pixhawk's avatar
    pixhawk committed
    {
    
    Bryant's avatar
    Bryant committed
        return d_data->renderHints.testFlag( hint );
    
    pixhawk's avatar
    pixhawk committed
    }
    
    
    Bryant's avatar
    Bryant committed
    /*!
       On multi core systems rendering of certain plot item 
       ( f.e QwtPlotRasterItem ) can be done in parallel in 
       several threads.
    
       The default setting is set to 1.
    
       \param numThreads Number of threads to be used for rendering.
                         If numThreads is set to 0, the system specific
                         ideal thread count is used.
    
       The default thread count is 1 ( = no additional threads )
    */
    void QwtPlotItem::setRenderThreadCount( uint numThreads )
    {
        d_data->renderThreadCount = numThreads;
    }
    
    /*!
       \return Number of threads to be used for rendering.
               If numThreads() is set to 0, the system specific
               ideal thread count is used.
    */
    uint QwtPlotItem::renderThreadCount() const
    {
        return d_data->renderThreadCount;
    }
    
    /*!
       Set the size of the legend icon
    
       The default setting is 8x8 pixels
    
       \param size Size
       \sa legendIconSize(), legendIcon()
    */
    void QwtPlotItem::setLegendIconSize( const QSize &size )
    {
        if ( d_data->legendIconSize != size )
        {
            d_data->legendIconSize = size;
            legendChanged();
        }
    }
    
    /*!
       \return Legend icon size
       \sa setLegendIconSize(), legendIcon()
    */
    QSize QwtPlotItem::legendIconSize() const
    {
        return d_data->legendIconSize;
    }
    
    /*!
       \return Icon representing the item on the legend
    
       The default implementation returns an invalid icon
    
       \param index Index of the legend entry 
                    ( usually there is only one )
       \param size Icon size
    
       \sa setLegendIconSize(), legendData()
     */
    QwtGraphic QwtPlotItem::legendIcon( 
        int index, const QSizeF &size ) const
    {
        Q_UNUSED( index )
        Q_UNUSED( size )
    
        return QwtGraphic();
    }
    
    /*!
       \brief Return a default icon from a brush
    
       The default icon is a filled rectangle used
       in several derived classes as legendIcon().
    
       \param brush Fill brush
       \param size Icon size
    
       \return A filled rectangle
     */
    QwtGraphic QwtPlotItem::defaultIcon( 
        const QBrush &brush, const QSizeF &size ) const
    {   
        QwtGraphic icon;
        if ( !size.isEmpty() )
        {
            icon.setDefaultSize( size );
            
            QRectF r( 0, 0, size.width(), size.height() );
            
            QPainter painter( &icon );
            painter.fillRect( r, brush );
        }   
        
        return icon;
    }   
    
    pixhawk's avatar
    pixhawk committed
    
    //! Show the item
    void QwtPlotItem::show()
    {
    
    Bryant's avatar
    Bryant committed
        setVisible( true );
    
    pixhawk's avatar
    pixhawk committed
    }
    
    //! Hide the item
    void QwtPlotItem::hide()
    {
    
    Bryant's avatar
    Bryant committed
        setVisible( false );
    
    pixhawk's avatar
    pixhawk committed
    }
    
    
    pixhawk's avatar
    pixhawk committed
        Show/Hide the item
    
        \param on Show if true, otherwise hide
        \sa isVisible(), show(), hide()
    */
    
    Bryant's avatar
    Bryant committed
    void QwtPlotItem::setVisible( bool on )
    
    Bryant's avatar
    Bryant committed
        if ( on != d_data->isVisible )
        {
    
            d_data->isVisible = on;
            itemChanged();
    
    pixhawk's avatar
    pixhawk committed
        }
    }
    
    
    pixhawk's avatar
    pixhawk committed
        \return true if visible
        \sa setVisible(), show(), hide()
    */
    bool QwtPlotItem::isVisible() const
    
    {
        return d_data->isVisible;
    
    pixhawk's avatar
    pixhawk committed
    }
    
    
    Bryant's avatar
    Bryant committed
       Update the legend and call QwtPlot::autoRefresh() for the
    
    pixhawk's avatar
    pixhawk committed
       parent plot.
    
    
    Bryant's avatar
    Bryant committed
       \sa QwtPlot::legendChanged(), QwtPlot::autoRefresh()
    
    pixhawk's avatar
    pixhawk committed
    */
    void QwtPlotItem::itemChanged()
    {
    
    Bryant's avatar
    Bryant committed
        if ( d_data->plot )
    
    pixhawk's avatar
    pixhawk committed
            d_data->plot->autoRefresh();
    
    Bryant's avatar
    Bryant committed
    }
    
    /*!
       Update the legend of the parent plot.
       \sa QwtPlot::updateLegend(), itemChanged()
    */
    void QwtPlotItem::legendChanged()
    {
        if ( testItemAttribute( QwtPlotItem::Legend ) && d_data->plot )
            d_data->plot->updateLegend( this );
    
    pixhawk's avatar
    pixhawk committed
    }
    
    
    pixhawk's avatar
    pixhawk committed
       Set X and Y axis
    
    
    Bryant's avatar
    Bryant committed
       The item will painted according to the coordinates of its Axes.
    
    pixhawk's avatar
    pixhawk committed
    
    
    Bryant's avatar
    Bryant committed
       \param xAxis X Axis ( QwtPlot::xBottom or QwtPlot::xTop )
       \param yAxis Y Axis ( QwtPlot::yLeft or QwtPlot::yRight )
    
    pixhawk's avatar
    pixhawk committed
    
    
    Bryant's avatar
    Bryant committed
       \sa setXAxis(), setYAxis(), xAxis(), yAxis(), QwtPlot::Axis
    
    pixhawk's avatar
    pixhawk committed
    */
    
    Bryant's avatar
    Bryant committed
    void QwtPlotItem::setAxes( int xAxis, int yAxis )
    
    pixhawk's avatar
    pixhawk committed
    {
    
    Bryant's avatar
    Bryant committed
        if ( xAxis == QwtPlot::xBottom || xAxis == QwtPlot::xTop )
    
            d_data->xAxis = xAxis;
    
    pixhawk's avatar
    pixhawk committed
    
    
    Bryant's avatar
    Bryant committed
        if ( yAxis == QwtPlot::yLeft || yAxis == QwtPlot::yRight )
    
            d_data->yAxis = yAxis;
    
    pixhawk's avatar
    pixhawk committed
    
    
        itemChanged();
    
    pixhawk's avatar
    pixhawk committed
    }
    
    
    pixhawk's avatar
    pixhawk committed
       Set the X axis
    
       The item will painted according to the coordinates its Axes.
    
    
    Bryant's avatar
    Bryant committed
       \param axis X Axis ( QwtPlot::xBottom or QwtPlot::xTop )
       \sa setAxes(), setYAxis(), xAxis(), QwtPlot::Axis
    
    pixhawk's avatar
    pixhawk committed
    */
    
    Bryant's avatar
    Bryant committed
    void QwtPlotItem::setXAxis( int axis )
    
    pixhawk's avatar
    pixhawk committed
    {
    
    Bryant's avatar
    Bryant committed
        if ( axis == QwtPlot::xBottom || axis == QwtPlot::xTop )
        {
    
            d_data->xAxis = axis;
            itemChanged();
    
    pixhawk's avatar
    pixhawk committed
        }
    }
    
    
    pixhawk's avatar
    pixhawk committed
       Set the Y axis
    
       The item will painted according to the coordinates its Axes.
    
    
    Bryant's avatar
    Bryant committed
       \param axis Y Axis ( QwtPlot::yLeft or QwtPlot::yRight )
       \sa setAxes(), setXAxis(), yAxis(), QwtPlot::Axis
    
    pixhawk's avatar
    pixhawk committed
    */
    
    Bryant's avatar
    Bryant committed
    void QwtPlotItem::setYAxis( int axis )
    
    pixhawk's avatar
    pixhawk committed
    {
    
    Bryant's avatar
    Bryant committed
        if ( axis == QwtPlot::yLeft || axis == QwtPlot::yRight )
        {
    
            d_data->yAxis = axis;
            itemChanged();
    
    pixhawk's avatar
    pixhawk committed
        }
    }
    
    //! Return xAxis
    
    int QwtPlotItem::xAxis() const
    {
        return d_data->xAxis;
    
    pixhawk's avatar
    pixhawk committed
    }
    
    //! Return yAxis
    
    int QwtPlotItem::yAxis() const
    {
        return d_data->yAxis;
    
    pixhawk's avatar
    pixhawk committed
    }
    
    /*!
    
    Bryant's avatar
    Bryant committed
       \return An invalid bounding rect: QRectF(1.0, 1.0, -2.0, -2.0)
       \note A width or height < 0.0 is ignored by the autoscaler
    
    pixhawk's avatar
    pixhawk committed
    */
    
    Bryant's avatar
    Bryant committed
    QRectF QwtPlotItem::boundingRect() const
    
    pixhawk's avatar
    pixhawk committed
    {
    
    Bryant's avatar
    Bryant committed
        return QRectF( 1.0, 1.0, -2.0, -2.0 ); // invalid
    
    pixhawk's avatar
    pixhawk committed
    }
    
    /*!
    
    Bryant's avatar
    Bryant committed
       \brief Calculate a hint for the canvas margin
    
    pixhawk's avatar
    pixhawk committed
    
    
    Bryant's avatar
    Bryant committed
       When the QwtPlotItem::Margins flag is enabled the plot item
       indicates, that it needs some margins at the borders of the canvas.
       This is f.e. used by bar charts to reserve space for displaying
       the bars.
    
    pixhawk's avatar
    pixhawk committed
    
    
    Bryant's avatar
    Bryant committed
       The margins are in target device coordinates ( pixels on screen )
    
    pixhawk's avatar
    pixhawk committed
    
    
    Bryant's avatar
    Bryant committed
       \param xMap Maps x-values into pixel coordinates.
       \param yMap Maps y-values into pixel coordinates.
       \param canvasRect Contents rectangle of the canvas in painter coordinates
       \param left Returns the left margin
       \param top Returns the top margin
       \param right Returns the right margin
       \param bottom Returns the bottom margin
    
    Bryant's avatar
    Bryant committed
       \return The default implementation returns 0 for all margins
    
    pixhawk's avatar
    pixhawk committed
    
    
    Bryant's avatar
    Bryant committed
       \sa QwtPlot::getCanvasMarginsHint(), QwtPlot::updateCanvasMargins()
     */
    void QwtPlotItem::getCanvasMarginHint( const QwtScaleMap &xMap, 
        const QwtScaleMap &yMap, const QRectF &canvasRect,
        double &left, double &top, double &right, double &bottom ) const
    
    pixhawk's avatar
    pixhawk committed
    {
    
    Bryant's avatar
    Bryant committed
        Q_UNUSED( xMap );
        Q_UNUSED( yMap );
        Q_UNUSED( canvasRect );
    
    pixhawk's avatar
    pixhawk committed
    
    
    Bryant's avatar
    Bryant committed
        // use QMargins, when we don't need to support Qt < 4.6 anymore
        left = top = right = bottom = 0.0;
    }
    
    /*!
       \brief Return all information, that is needed to represent
              the item on the legend
    
       Most items are represented by one entry on the legend
       showing an icon and a text, but f.e. QwtPlotMultiBarChart
       displays one entry for each bar.
    
       QwtLegendData is basically a list of QVariants that makes it
       possible to overload and reimplement legendData() to 
       return almost any type of information, that is understood
       by the receiver that acts as the legend.
    
       The default implementation returns one entry with 
       the title() of the item and the legendIcon().
    
       \return Data, that is needed to represent the item on the legend
       \sa title(), legendIcon(), QwtLegend, QwtPlotLegendItem
     */
    QList<QwtLegendData> QwtPlotItem::legendData() const
    {
        QwtLegendData data;
    
        QwtText label = title();
        label.setRenderFlags( label.renderFlags() & Qt::AlignLeft );
                
        QVariant titleValue;
        qVariantSetValue( titleValue, label );
        data.setValue( QwtLegendData::TitleRole, titleValue );
            
        const QwtGraphic graphic = legendIcon( 0, legendIconSize() );
        if ( !graphic.isNull() )
        {   
            QVariant iconValue;
            qVariantSetValue( iconValue, graphic );
            data.setValue( QwtLegendData::IconRole, iconValue );
        }   
            
        QList<QwtLegendData> list;
        list += data;
    
        return list;
    
    pixhawk's avatar
    pixhawk committed
    }
    
    /*!
       \brief Update the item to changes of the axes scale division
    
       Update the item, when the axes of plot have changed.
       The default implementation does nothing, but items that depend
       on the scale division (like QwtPlotGrid()) have to reimplement
       updateScaleDiv()
    
    
    Bryant's avatar
    Bryant committed
       updateScaleDiv() is only called when the ScaleInterest interest
       is enabled. The default implementation does nothing.
    
    
    pixhawk's avatar
    pixhawk committed
       \param xScaleDiv Scale division of the x-axis
       \param yScaleDiv Scale division of the y-axis
    
    
    Bryant's avatar
    Bryant committed
       \sa QwtPlot::updateAxes(), ScaleInterest
    
    pixhawk's avatar
    pixhawk committed
    */
    
    Bryant's avatar
    Bryant committed
    void QwtPlotItem::updateScaleDiv( const QwtScaleDiv &xScaleDiv,
        const QwtScaleDiv &yScaleDiv )
    
    Bryant's avatar
    Bryant committed
        Q_UNUSED( xScaleDiv );
        Q_UNUSED( yScaleDiv );
    
    pixhawk's avatar
    pixhawk committed
    }
    
    /*!
    
    Bryant's avatar
    Bryant committed
       \brief Update the item to changes of the legend info
    
    pixhawk's avatar
    pixhawk committed
    
    
    Bryant's avatar
    Bryant committed
       Plot items that want to display a legend ( not those, that want to
       be displayed on a legend ! ) will have to implement updateLegend().
    
    pixhawk's avatar
    pixhawk committed
    
    
    Bryant's avatar
    Bryant committed
       updateLegend() is only called when the LegendInterest interest
       is enabled. The default implementation does nothing.
    
    pixhawk's avatar
    pixhawk committed
    
    
    Bryant's avatar
    Bryant committed
       \param item Plot item to be displayed on a legend
       \param data Attributes how to display item on the legend
    
    pixhawk's avatar
    pixhawk committed
    
    
    Bryant's avatar
    Bryant committed
       \sa QwtPlotLegendItem
    
    pixhawk's avatar
    pixhawk committed
    
    
    Bryant's avatar
    Bryant committed
       \note Plot items, that want to be displayed on a legend
             need to enable the QwtPlotItem::Legend flag and to implement
             legendData() and legendIcon()
     */
    void QwtPlotItem::updateLegend( const QwtPlotItem *item, 
        const QList<QwtLegendData> &data )
    
    pixhawk's avatar
    pixhawk committed
    {
    
    Bryant's avatar
    Bryant committed
        Q_UNUSED( item );
        Q_UNUSED( data );
    
    pixhawk's avatar
    pixhawk committed
    }
    
    /*!
    
    Bryant's avatar
    Bryant committed
       \brief Calculate the bounding scale rectangle of 2 maps
    
    pixhawk's avatar
    pixhawk committed
    
    
    Bryant's avatar
    Bryant committed
       \param xMap Maps x-values into pixel coordinates.
       \param yMap Maps y-values into pixel coordinates.
    
    Bryant's avatar
    Bryant committed
       \return Bounding scale rect of the scale maps, not normalized
    
    pixhawk's avatar
    pixhawk committed
    */
    
    Bryant's avatar
    Bryant committed
    QRectF QwtPlotItem::scaleRect( const QwtScaleMap &xMap,
        const QwtScaleMap &yMap ) const
    
    pixhawk's avatar
    pixhawk committed
    {
    
    Bryant's avatar
    Bryant committed
        return QRectF( xMap.s1(), yMap.s1(),
            xMap.sDist(), yMap.sDist() );
    
    pixhawk's avatar
    pixhawk committed
    }
    
    /*!
    
    Bryant's avatar
    Bryant committed
       \brief Calculate the bounding paint rectangle of 2 maps
    
    pixhawk's avatar
    pixhawk committed
    
    
    Bryant's avatar
    Bryant committed
       \param xMap Maps x-values into pixel coordinates.
       \param yMap Maps y-values into pixel coordinates.
    
       \return Bounding paint rectangle of the scale maps, not normalized
    
    pixhawk's avatar
    pixhawk committed
    */
    
    Bryant's avatar
    Bryant committed
    QRectF QwtPlotItem::paintRect( const QwtScaleMap &xMap,
        const QwtScaleMap &yMap ) const
    
    pixhawk's avatar
    pixhawk committed
    {
    
    Bryant's avatar
    Bryant committed
        const QRectF rect( xMap.p1(), yMap.p1(),
            xMap.pDist(), yMap.pDist() );
    
    pixhawk's avatar
    pixhawk committed
    
    
    Bryant's avatar
    Bryant committed
        return rect;
    
    pixhawk's avatar
    pixhawk committed
    }