[4271] | 1 | /* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
|
---|
| 2 | * Qwt Widget Library
|
---|
| 3 | * Copyright (C) 1997 Josef Wilgen
|
---|
| 4 | * Copyright (C) 2002 Uwe Rathmann
|
---|
| 5 | *
|
---|
| 6 | * This library is free software; you can redistribute it and/or
|
---|
| 7 | * modify it under the terms of the Qwt License, Version 1.0
|
---|
| 8 | *****************************************************************************/
|
---|
| 9 |
|
---|
| 10 | #include "qwt_plot_item.h"
|
---|
| 11 | #include "qwt_text.h"
|
---|
| 12 | #include "qwt_plot.h"
|
---|
[8127] | 13 | #include "qwt_legend_data.h"
|
---|
[4271] | 14 | #include "qwt_scale_div.h"
|
---|
[8127] | 15 | #include "qwt_graphic.h"
|
---|
[4271] | 16 | #include <qpainter.h>
|
---|
| 17 |
|
---|
| 18 | class QwtPlotItem::PrivateData
|
---|
| 19 | {
|
---|
| 20 | public:
|
---|
| 21 | PrivateData():
|
---|
| 22 | plot( NULL ),
|
---|
| 23 | isVisible( true ),
|
---|
| 24 | attributes( 0 ),
|
---|
[8127] | 25 | interests( 0 ),
|
---|
[4271] | 26 | renderHints( 0 ),
|
---|
[8127] | 27 | renderThreadCount( 1 ),
|
---|
[4271] | 28 | z( 0.0 ),
|
---|
| 29 | xAxis( QwtPlot::xBottom ),
|
---|
[8127] | 30 | yAxis( QwtPlot::yLeft ),
|
---|
| 31 | legendIconSize( 8, 8 )
|
---|
[4271] | 32 | {
|
---|
| 33 | }
|
---|
| 34 |
|
---|
| 35 | mutable QwtPlot *plot;
|
---|
| 36 |
|
---|
| 37 | bool isVisible;
|
---|
[8127] | 38 |
|
---|
[4271] | 39 | QwtPlotItem::ItemAttributes attributes;
|
---|
[8127] | 40 | QwtPlotItem::ItemInterests interests;
|
---|
| 41 |
|
---|
[4271] | 42 | QwtPlotItem::RenderHints renderHints;
|
---|
[8127] | 43 | uint renderThreadCount;
|
---|
| 44 |
|
---|
[4271] | 45 | double z;
|
---|
| 46 |
|
---|
| 47 | int xAxis;
|
---|
| 48 | int yAxis;
|
---|
| 49 |
|
---|
| 50 | QwtText title;
|
---|
[8127] | 51 | QSize legendIconSize;
|
---|
[4271] | 52 | };
|
---|
| 53 |
|
---|
| 54 | /*!
|
---|
| 55 | Constructor
|
---|
| 56 | \param title Title of the item
|
---|
| 57 | */
|
---|
| 58 | QwtPlotItem::QwtPlotItem( const QwtText &title )
|
---|
| 59 | {
|
---|
| 60 | d_data = new PrivateData;
|
---|
| 61 | d_data->title = title;
|
---|
| 62 | }
|
---|
| 63 |
|
---|
| 64 | //! Destroy the QwtPlotItem
|
---|
| 65 | QwtPlotItem::~QwtPlotItem()
|
---|
| 66 | {
|
---|
| 67 | attach( NULL );
|
---|
| 68 | delete d_data;
|
---|
| 69 | }
|
---|
| 70 |
|
---|
| 71 | /*!
|
---|
| 72 | \brief Attach the item to a plot.
|
---|
| 73 |
|
---|
| 74 | This method will attach a QwtPlotItem to the QwtPlot argument. It will first
|
---|
| 75 | detach the QwtPlotItem from any plot from a previous call to attach (if
|
---|
| 76 | necessary). If a NULL argument is passed, it will detach from any QwtPlot it
|
---|
| 77 | was attached to.
|
---|
| 78 |
|
---|
| 79 | \param plot Plot widget
|
---|
| 80 | \sa detach()
|
---|
| 81 | */
|
---|
| 82 | void QwtPlotItem::attach( QwtPlot *plot )
|
---|
| 83 | {
|
---|
| 84 | if ( plot == d_data->plot )
|
---|
| 85 | return;
|
---|
| 86 |
|
---|
| 87 | if ( d_data->plot )
|
---|
| 88 | d_data->plot->attachItem( this, false );
|
---|
| 89 |
|
---|
| 90 | d_data->plot = plot;
|
---|
| 91 |
|
---|
| 92 | if ( d_data->plot )
|
---|
| 93 | d_data->plot->attachItem( this, true );
|
---|
| 94 | }
|
---|
| 95 |
|
---|
| 96 | /*!
|
---|
[9383] | 97 | \brief This method detaches a QwtPlotItem from any
|
---|
[4271] | 98 | QwtPlot it has been associated with.
|
---|
| 99 |
|
---|
| 100 | detach() is equivalent to calling attach( NULL )
|
---|
| 101 | \sa attach()
|
---|
| 102 | */
|
---|
| 103 | void QwtPlotItem::detach()
|
---|
| 104 | {
|
---|
| 105 | attach( NULL );
|
---|
| 106 | }
|
---|
| 107 |
|
---|
| 108 | /*!
|
---|
| 109 | Return rtti for the specific class represented. QwtPlotItem is simply
|
---|
| 110 | a virtual interface class, and base classes will implement this method
|
---|
| 111 | with specific rtti values so a user can differentiate them.
|
---|
| 112 |
|
---|
| 113 | The rtti value is useful for environments, where the
|
---|
| 114 | runtime type information is disabled and it is not possible
|
---|
| 115 | to do a dynamic_cast<...>.
|
---|
| 116 |
|
---|
| 117 | \return rtti value
|
---|
| 118 | \sa RttiValues
|
---|
| 119 | */
|
---|
| 120 | int QwtPlotItem::rtti() const
|
---|
| 121 | {
|
---|
| 122 | return Rtti_PlotItem;
|
---|
| 123 | }
|
---|
| 124 |
|
---|
| 125 | //! Return attached plot
|
---|
| 126 | QwtPlot *QwtPlotItem::plot() const
|
---|
| 127 | {
|
---|
| 128 | return d_data->plot;
|
---|
| 129 | }
|
---|
| 130 |
|
---|
| 131 | /*!
|
---|
| 132 | Plot items are painted in increasing z-order.
|
---|
| 133 |
|
---|
| 134 | \return setZ(), QwtPlotDict::itemList()
|
---|
| 135 | */
|
---|
| 136 | double QwtPlotItem::z() const
|
---|
| 137 | {
|
---|
| 138 | return d_data->z;
|
---|
| 139 | }
|
---|
| 140 |
|
---|
| 141 | /*!
|
---|
| 142 | \brief Set the z value
|
---|
| 143 |
|
---|
| 144 | Plot items are painted in increasing z-order.
|
---|
| 145 |
|
---|
| 146 | \param z Z-value
|
---|
| 147 | \sa z(), QwtPlotDict::itemList()
|
---|
| 148 | */
|
---|
| 149 | void QwtPlotItem::setZ( double z )
|
---|
| 150 | {
|
---|
| 151 | if ( d_data->z != z )
|
---|
| 152 | {
|
---|
| 153 | if ( d_data->plot ) // update the z order
|
---|
| 154 | d_data->plot->attachItem( this, false );
|
---|
| 155 |
|
---|
| 156 | d_data->z = z;
|
---|
| 157 |
|
---|
| 158 | if ( d_data->plot )
|
---|
| 159 | d_data->plot->attachItem( this, true );
|
---|
| 160 |
|
---|
| 161 | itemChanged();
|
---|
| 162 | }
|
---|
| 163 | }
|
---|
| 164 |
|
---|
| 165 | /*!
|
---|
| 166 | Set a new title
|
---|
| 167 |
|
---|
| 168 | \param title Title
|
---|
| 169 | \sa title()
|
---|
| 170 | */
|
---|
| 171 | void QwtPlotItem::setTitle( const QString &title )
|
---|
| 172 | {
|
---|
| 173 | setTitle( QwtText( title ) );
|
---|
| 174 | }
|
---|
| 175 |
|
---|
| 176 | /*!
|
---|
| 177 | Set a new title
|
---|
| 178 |
|
---|
| 179 | \param title Title
|
---|
| 180 | \sa title()
|
---|
| 181 | */
|
---|
| 182 | void QwtPlotItem::setTitle( const QwtText &title )
|
---|
| 183 | {
|
---|
| 184 | if ( d_data->title != title )
|
---|
| 185 | {
|
---|
| 186 | d_data->title = title;
|
---|
[8127] | 187 |
|
---|
| 188 | legendChanged();
|
---|
| 189 | #if 0
|
---|
[4271] | 190 | itemChanged();
|
---|
[8127] | 191 | #endif
|
---|
[4271] | 192 | }
|
---|
| 193 | }
|
---|
| 194 |
|
---|
| 195 | /*!
|
---|
| 196 | \return Title of the item
|
---|
| 197 | \sa setTitle()
|
---|
| 198 | */
|
---|
| 199 | const QwtText &QwtPlotItem::title() const
|
---|
| 200 | {
|
---|
| 201 | return d_data->title;
|
---|
| 202 | }
|
---|
| 203 |
|
---|
| 204 | /*!
|
---|
| 205 | Toggle an item attribute
|
---|
| 206 |
|
---|
| 207 | \param attribute Attribute type
|
---|
| 208 | \param on true/false
|
---|
| 209 |
|
---|
[8127] | 210 | \sa testItemAttribute(), ItemInterest
|
---|
[4271] | 211 | */
|
---|
| 212 | void QwtPlotItem::setItemAttribute( ItemAttribute attribute, bool on )
|
---|
| 213 | {
|
---|
[8127] | 214 | if ( d_data->attributes.testFlag( attribute ) != on )
|
---|
[4271] | 215 | {
|
---|
| 216 | if ( on )
|
---|
| 217 | d_data->attributes |= attribute;
|
---|
| 218 | else
|
---|
| 219 | d_data->attributes &= ~attribute;
|
---|
| 220 |
|
---|
[8127] | 221 | if ( attribute == QwtPlotItem::Legend )
|
---|
| 222 | legendChanged();
|
---|
| 223 |
|
---|
[4271] | 224 | itemChanged();
|
---|
| 225 | }
|
---|
| 226 | }
|
---|
| 227 |
|
---|
| 228 | /*!
|
---|
| 229 | Test an item attribute
|
---|
| 230 |
|
---|
| 231 | \param attribute Attribute type
|
---|
| 232 | \return true/false
|
---|
[8127] | 233 | \sa setItemAttribute(), ItemInterest
|
---|
[4271] | 234 | */
|
---|
| 235 | bool QwtPlotItem::testItemAttribute( ItemAttribute attribute ) const
|
---|
| 236 | {
|
---|
[8127] | 237 | return d_data->attributes.testFlag( attribute );
|
---|
[4271] | 238 | }
|
---|
| 239 |
|
---|
| 240 | /*!
|
---|
[8127] | 241 | Toggle an item interest
|
---|
| 242 |
|
---|
| 243 | \param interest Interest type
|
---|
| 244 | \param on true/false
|
---|
| 245 |
|
---|
| 246 | \sa testItemInterest(), ItemAttribute
|
---|
| 247 | */
|
---|
| 248 | void QwtPlotItem::setItemInterest( ItemInterest interest, bool on )
|
---|
| 249 | {
|
---|
| 250 | if ( d_data->interests.testFlag( interest ) != on )
|
---|
| 251 | {
|
---|
| 252 | if ( on )
|
---|
| 253 | d_data->interests |= interest;
|
---|
| 254 | else
|
---|
| 255 | d_data->interests &= ~interest;
|
---|
| 256 |
|
---|
| 257 | itemChanged();
|
---|
| 258 | }
|
---|
| 259 | }
|
---|
| 260 |
|
---|
| 261 | /*!
|
---|
| 262 | Test an item interest
|
---|
| 263 |
|
---|
| 264 | \param interest Interest type
|
---|
| 265 | \return true/false
|
---|
| 266 | \sa setItemInterest(), ItemAttribute
|
---|
| 267 | */
|
---|
| 268 | bool QwtPlotItem::testItemInterest( ItemInterest interest ) const
|
---|
| 269 | {
|
---|
| 270 | return d_data->interests.testFlag( interest );
|
---|
| 271 | }
|
---|
| 272 |
|
---|
| 273 | /*!
|
---|
[4271] | 274 | Toggle an render hint
|
---|
| 275 |
|
---|
| 276 | \param hint Render hint
|
---|
| 277 | \param on true/false
|
---|
| 278 |
|
---|
| 279 | \sa testRenderHint(), RenderHint
|
---|
| 280 | */
|
---|
| 281 | void QwtPlotItem::setRenderHint( RenderHint hint, bool on )
|
---|
| 282 | {
|
---|
[8127] | 283 | if ( d_data->renderHints.testFlag( hint ) != on )
|
---|
[4271] | 284 | {
|
---|
| 285 | if ( on )
|
---|
| 286 | d_data->renderHints |= hint;
|
---|
| 287 | else
|
---|
| 288 | d_data->renderHints &= ~hint;
|
---|
| 289 |
|
---|
| 290 | itemChanged();
|
---|
| 291 | }
|
---|
| 292 | }
|
---|
| 293 |
|
---|
| 294 | /*!
|
---|
| 295 | Test a render hint
|
---|
| 296 |
|
---|
| 297 | \param hint Render hint
|
---|
| 298 | \return true/false
|
---|
| 299 | \sa setRenderHint(), RenderHint
|
---|
| 300 | */
|
---|
| 301 | bool QwtPlotItem::testRenderHint( RenderHint hint ) const
|
---|
| 302 | {
|
---|
[8127] | 303 | return d_data->renderHints.testFlag( hint );
|
---|
[4271] | 304 | }
|
---|
| 305 |
|
---|
[8127] | 306 | /*!
|
---|
[9383] | 307 | On multi core systems rendering of certain plot item
|
---|
| 308 | ( f.e QwtPlotRasterItem ) can be done in parallel in
|
---|
[8127] | 309 | several threads.
|
---|
| 310 |
|
---|
| 311 | The default setting is set to 1.
|
---|
| 312 |
|
---|
| 313 | \param numThreads Number of threads to be used for rendering.
|
---|
| 314 | If numThreads is set to 0, the system specific
|
---|
| 315 | ideal thread count is used.
|
---|
| 316 |
|
---|
| 317 | The default thread count is 1 ( = no additional threads )
|
---|
| 318 | */
|
---|
| 319 | void QwtPlotItem::setRenderThreadCount( uint numThreads )
|
---|
| 320 | {
|
---|
| 321 | d_data->renderThreadCount = numThreads;
|
---|
| 322 | }
|
---|
| 323 |
|
---|
| 324 | /*!
|
---|
| 325 | \return Number of threads to be used for rendering.
|
---|
| 326 | If numThreads() is set to 0, the system specific
|
---|
| 327 | ideal thread count is used.
|
---|
| 328 | */
|
---|
| 329 | uint QwtPlotItem::renderThreadCount() const
|
---|
| 330 | {
|
---|
| 331 | return d_data->renderThreadCount;
|
---|
| 332 | }
|
---|
| 333 |
|
---|
| 334 | /*!
|
---|
| 335 | Set the size of the legend icon
|
---|
| 336 |
|
---|
| 337 | The default setting is 8x8 pixels
|
---|
| 338 |
|
---|
| 339 | \param size Size
|
---|
| 340 | \sa legendIconSize(), legendIcon()
|
---|
| 341 | */
|
---|
| 342 | void QwtPlotItem::setLegendIconSize( const QSize &size )
|
---|
| 343 | {
|
---|
| 344 | if ( d_data->legendIconSize != size )
|
---|
| 345 | {
|
---|
| 346 | d_data->legendIconSize = size;
|
---|
| 347 | legendChanged();
|
---|
| 348 | }
|
---|
| 349 | }
|
---|
| 350 |
|
---|
| 351 | /*!
|
---|
| 352 | \return Legend icon size
|
---|
| 353 | \sa setLegendIconSize(), legendIcon()
|
---|
| 354 | */
|
---|
| 355 | QSize QwtPlotItem::legendIconSize() const
|
---|
| 356 | {
|
---|
| 357 | return d_data->legendIconSize;
|
---|
| 358 | }
|
---|
| 359 |
|
---|
| 360 | /*!
|
---|
| 361 | \return Icon representing the item on the legend
|
---|
| 362 |
|
---|
| 363 | The default implementation returns an invalid icon
|
---|
| 364 |
|
---|
[9383] | 365 | \param index Index of the legend entry
|
---|
[8127] | 366 | ( usually there is only one )
|
---|
| 367 | \param size Icon size
|
---|
| 368 |
|
---|
| 369 | \sa setLegendIconSize(), legendData()
|
---|
| 370 | */
|
---|
[9383] | 371 | QwtGraphic QwtPlotItem::legendIcon(
|
---|
[8127] | 372 | int index, const QSizeF &size ) const
|
---|
| 373 | {
|
---|
| 374 | Q_UNUSED( index )
|
---|
| 375 | Q_UNUSED( size )
|
---|
| 376 |
|
---|
| 377 | return QwtGraphic();
|
---|
| 378 | }
|
---|
| 379 |
|
---|
| 380 | /*!
|
---|
| 381 | \brief Return a default icon from a brush
|
---|
| 382 |
|
---|
| 383 | The default icon is a filled rectangle used
|
---|
| 384 | in several derived classes as legendIcon().
|
---|
| 385 |
|
---|
| 386 | \param brush Fill brush
|
---|
| 387 | \param size Icon size
|
---|
| 388 |
|
---|
| 389 | \return A filled rectangle
|
---|
| 390 | */
|
---|
[9383] | 391 | QwtGraphic QwtPlotItem::defaultIcon(
|
---|
[8127] | 392 | const QBrush &brush, const QSizeF &size ) const
|
---|
[9383] | 393 | {
|
---|
[8127] | 394 | QwtGraphic icon;
|
---|
| 395 | if ( !size.isEmpty() )
|
---|
| 396 | {
|
---|
| 397 | icon.setDefaultSize( size );
|
---|
[9383] | 398 |
|
---|
[8127] | 399 | QRectF r( 0, 0, size.width(), size.height() );
|
---|
[9383] | 400 |
|
---|
[8127] | 401 | QPainter painter( &icon );
|
---|
| 402 | painter.fillRect( r, brush );
|
---|
[9383] | 403 | }
|
---|
| 404 |
|
---|
[8127] | 405 | return icon;
|
---|
[9383] | 406 | }
|
---|
[8127] | 407 |
|
---|
[4271] | 408 | //! Show the item
|
---|
| 409 | void QwtPlotItem::show()
|
---|
| 410 | {
|
---|
| 411 | setVisible( true );
|
---|
| 412 | }
|
---|
| 413 |
|
---|
| 414 | //! Hide the item
|
---|
| 415 | void QwtPlotItem::hide()
|
---|
| 416 | {
|
---|
| 417 | setVisible( false );
|
---|
| 418 | }
|
---|
| 419 |
|
---|
| 420 | /*!
|
---|
| 421 | Show/Hide the item
|
---|
| 422 |
|
---|
| 423 | \param on Show if true, otherwise hide
|
---|
| 424 | \sa isVisible(), show(), hide()
|
---|
| 425 | */
|
---|
| 426 | void QwtPlotItem::setVisible( bool on )
|
---|
| 427 | {
|
---|
| 428 | if ( on != d_data->isVisible )
|
---|
| 429 | {
|
---|
| 430 | d_data->isVisible = on;
|
---|
| 431 | itemChanged();
|
---|
| 432 | }
|
---|
| 433 | }
|
---|
| 434 |
|
---|
| 435 | /*!
|
---|
| 436 | \return true if visible
|
---|
| 437 | \sa setVisible(), show(), hide()
|
---|
| 438 | */
|
---|
| 439 | bool QwtPlotItem::isVisible() const
|
---|
| 440 | {
|
---|
| 441 | return d_data->isVisible;
|
---|
| 442 | }
|
---|
| 443 |
|
---|
| 444 | /*!
|
---|
[8127] | 445 | Update the legend and call QwtPlot::autoRefresh() for the
|
---|
[4271] | 446 | parent plot.
|
---|
| 447 |
|
---|
[8127] | 448 | \sa QwtPlot::legendChanged(), QwtPlot::autoRefresh()
|
---|
[4271] | 449 | */
|
---|
| 450 | void QwtPlotItem::itemChanged()
|
---|
| 451 | {
|
---|
| 452 | if ( d_data->plot )
|
---|
| 453 | d_data->plot->autoRefresh();
|
---|
| 454 | }
|
---|
| 455 |
|
---|
| 456 | /*!
|
---|
[8127] | 457 | Update the legend of the parent plot.
|
---|
| 458 | \sa QwtPlot::updateLegend(), itemChanged()
|
---|
| 459 | */
|
---|
| 460 | void QwtPlotItem::legendChanged()
|
---|
| 461 | {
|
---|
| 462 | if ( testItemAttribute( QwtPlotItem::Legend ) && d_data->plot )
|
---|
| 463 | d_data->plot->updateLegend( this );
|
---|
| 464 | }
|
---|
| 465 |
|
---|
| 466 | /*!
|
---|
[4271] | 467 | Set X and Y axis
|
---|
| 468 |
|
---|
[8127] | 469 | The item will painted according to the coordinates of its Axes.
|
---|
[4271] | 470 |
|
---|
[8127] | 471 | \param xAxis X Axis ( QwtPlot::xBottom or QwtPlot::xTop )
|
---|
| 472 | \param yAxis Y Axis ( QwtPlot::yLeft or QwtPlot::yRight )
|
---|
[4271] | 473 |
|
---|
[8127] | 474 | \sa setXAxis(), setYAxis(), xAxis(), yAxis(), QwtPlot::Axis
|
---|
[4271] | 475 | */
|
---|
| 476 | void QwtPlotItem::setAxes( int xAxis, int yAxis )
|
---|
| 477 | {
|
---|
| 478 | if ( xAxis == QwtPlot::xBottom || xAxis == QwtPlot::xTop )
|
---|
| 479 | d_data->xAxis = xAxis;
|
---|
| 480 |
|
---|
| 481 | if ( yAxis == QwtPlot::yLeft || yAxis == QwtPlot::yRight )
|
---|
| 482 | d_data->yAxis = yAxis;
|
---|
| 483 |
|
---|
| 484 | itemChanged();
|
---|
| 485 | }
|
---|
| 486 |
|
---|
| 487 | /*!
|
---|
| 488 | Set the X axis
|
---|
| 489 |
|
---|
| 490 | The item will painted according to the coordinates its Axes.
|
---|
| 491 |
|
---|
[8127] | 492 | \param axis X Axis ( QwtPlot::xBottom or QwtPlot::xTop )
|
---|
| 493 | \sa setAxes(), setYAxis(), xAxis(), QwtPlot::Axis
|
---|
[4271] | 494 | */
|
---|
| 495 | void QwtPlotItem::setXAxis( int axis )
|
---|
| 496 | {
|
---|
| 497 | if ( axis == QwtPlot::xBottom || axis == QwtPlot::xTop )
|
---|
| 498 | {
|
---|
| 499 | d_data->xAxis = axis;
|
---|
| 500 | itemChanged();
|
---|
| 501 | }
|
---|
| 502 | }
|
---|
| 503 |
|
---|
| 504 | /*!
|
---|
| 505 | Set the Y axis
|
---|
| 506 |
|
---|
| 507 | The item will painted according to the coordinates its Axes.
|
---|
| 508 |
|
---|
[8127] | 509 | \param axis Y Axis ( QwtPlot::yLeft or QwtPlot::yRight )
|
---|
| 510 | \sa setAxes(), setXAxis(), yAxis(), QwtPlot::Axis
|
---|
[4271] | 511 | */
|
---|
| 512 | void QwtPlotItem::setYAxis( int axis )
|
---|
| 513 | {
|
---|
| 514 | if ( axis == QwtPlot::yLeft || axis == QwtPlot::yRight )
|
---|
| 515 | {
|
---|
| 516 | d_data->yAxis = axis;
|
---|
| 517 | itemChanged();
|
---|
| 518 | }
|
---|
| 519 | }
|
---|
| 520 |
|
---|
| 521 | //! Return xAxis
|
---|
| 522 | int QwtPlotItem::xAxis() const
|
---|
| 523 | {
|
---|
| 524 | return d_data->xAxis;
|
---|
| 525 | }
|
---|
| 526 |
|
---|
| 527 | //! Return yAxis
|
---|
| 528 | int QwtPlotItem::yAxis() const
|
---|
| 529 | {
|
---|
| 530 | return d_data->yAxis;
|
---|
| 531 | }
|
---|
| 532 |
|
---|
| 533 | /*!
|
---|
| 534 | \return An invalid bounding rect: QRectF(1.0, 1.0, -2.0, -2.0)
|
---|
[8127] | 535 | \note A width or height < 0.0 is ignored by the autoscaler
|
---|
[4271] | 536 | */
|
---|
| 537 | QRectF QwtPlotItem::boundingRect() const
|
---|
| 538 | {
|
---|
| 539 | return QRectF( 1.0, 1.0, -2.0, -2.0 ); // invalid
|
---|
| 540 | }
|
---|
| 541 |
|
---|
| 542 | /*!
|
---|
[8127] | 543 | \brief Calculate a hint for the canvas margin
|
---|
[4271] | 544 |
|
---|
[8127] | 545 | When the QwtPlotItem::Margins flag is enabled the plot item
|
---|
| 546 | indicates, that it needs some margins at the borders of the canvas.
|
---|
| 547 | This is f.e. used by bar charts to reserve space for displaying
|
---|
| 548 | the bars.
|
---|
[4271] | 549 |
|
---|
[8127] | 550 | The margins are in target device coordinates ( pixels on screen )
|
---|
[4271] | 551 |
|
---|
[8127] | 552 | \param xMap Maps x-values into pixel coordinates.
|
---|
| 553 | \param yMap Maps y-values into pixel coordinates.
|
---|
| 554 | \param canvasRect Contents rectangle of the canvas in painter coordinates
|
---|
| 555 | \param left Returns the left margin
|
---|
| 556 | \param top Returns the top margin
|
---|
| 557 | \param right Returns the right margin
|
---|
| 558 | \param bottom Returns the bottom margin
|
---|
[4271] | 559 |
|
---|
[9383] | 560 | The default implementation returns 0 for all margins
|
---|
[4271] | 561 |
|
---|
[8127] | 562 | \sa QwtPlot::getCanvasMarginsHint(), QwtPlot::updateCanvasMargins()
|
---|
| 563 | */
|
---|
[9383] | 564 | void QwtPlotItem::getCanvasMarginHint( const QwtScaleMap &xMap,
|
---|
[8127] | 565 | const QwtScaleMap &yMap, const QRectF &canvasRect,
|
---|
| 566 | double &left, double &top, double &right, double &bottom ) const
|
---|
[4271] | 567 | {
|
---|
[8127] | 568 | Q_UNUSED( xMap );
|
---|
| 569 | Q_UNUSED( yMap );
|
---|
| 570 | Q_UNUSED( canvasRect );
|
---|
[4271] | 571 |
|
---|
[8127] | 572 | // use QMargins, when we don't need to support Qt < 4.6 anymore
|
---|
| 573 | left = top = right = bottom = 0.0;
|
---|
| 574 | }
|
---|
[4271] | 575 |
|
---|
[8127] | 576 | /*!
|
---|
| 577 | \brief Return all information, that is needed to represent
|
---|
| 578 | the item on the legend
|
---|
[4271] | 579 |
|
---|
[8127] | 580 | Most items are represented by one entry on the legend
|
---|
| 581 | showing an icon and a text, but f.e. QwtPlotMultiBarChart
|
---|
| 582 | displays one entry for each bar.
|
---|
[4271] | 583 |
|
---|
[8127] | 584 | QwtLegendData is basically a list of QVariants that makes it
|
---|
[9383] | 585 | possible to overload and reimplement legendData() to
|
---|
[8127] | 586 | return almost any type of information, that is understood
|
---|
| 587 | by the receiver that acts as the legend.
|
---|
[4271] | 588 |
|
---|
[9383] | 589 | The default implementation returns one entry with
|
---|
[8127] | 590 | the title() of the item and the legendIcon().
|
---|
[4271] | 591 |
|
---|
[8127] | 592 | \return Data, that is needed to represent the item on the legend
|
---|
| 593 | \sa title(), legendIcon(), QwtLegend, QwtPlotLegendItem
|
---|
| 594 | */
|
---|
| 595 | QList<QwtLegendData> QwtPlotItem::legendData() const
|
---|
| 596 | {
|
---|
| 597 | QwtLegendData data;
|
---|
[4271] | 598 |
|
---|
[8127] | 599 | QwtText label = title();
|
---|
| 600 | label.setRenderFlags( label.renderFlags() & Qt::AlignLeft );
|
---|
[9383] | 601 |
|
---|
[8127] | 602 | QVariant titleValue;
|
---|
| 603 | qVariantSetValue( titleValue, label );
|
---|
| 604 | data.setValue( QwtLegendData::TitleRole, titleValue );
|
---|
[9383] | 605 |
|
---|
[8127] | 606 | const QwtGraphic graphic = legendIcon( 0, legendIconSize() );
|
---|
| 607 | if ( !graphic.isNull() )
|
---|
[9383] | 608 | {
|
---|
[8127] | 609 | QVariant iconValue;
|
---|
| 610 | qVariantSetValue( iconValue, graphic );
|
---|
| 611 | data.setValue( QwtLegendData::IconRole, iconValue );
|
---|
[9383] | 612 | }
|
---|
| 613 |
|
---|
[8127] | 614 | QList<QwtLegendData> list;
|
---|
| 615 | list += data;
|
---|
[4271] | 616 |
|
---|
[8127] | 617 | return list;
|
---|
[4271] | 618 | }
|
---|
| 619 |
|
---|
| 620 | /*!
|
---|
| 621 | \brief Update the item to changes of the axes scale division
|
---|
| 622 |
|
---|
| 623 | Update the item, when the axes of plot have changed.
|
---|
| 624 | The default implementation does nothing, but items that depend
|
---|
| 625 | on the scale division (like QwtPlotGrid()) have to reimplement
|
---|
| 626 | updateScaleDiv()
|
---|
| 627 |
|
---|
[8127] | 628 | updateScaleDiv() is only called when the ScaleInterest interest
|
---|
| 629 | is enabled. The default implementation does nothing.
|
---|
| 630 |
|
---|
[4271] | 631 | \param xScaleDiv Scale division of the x-axis
|
---|
| 632 | \param yScaleDiv Scale division of the y-axis
|
---|
| 633 |
|
---|
[8127] | 634 | \sa QwtPlot::updateAxes(), ScaleInterest
|
---|
[4271] | 635 | */
|
---|
| 636 | void QwtPlotItem::updateScaleDiv( const QwtScaleDiv &xScaleDiv,
|
---|
| 637 | const QwtScaleDiv &yScaleDiv )
|
---|
| 638 | {
|
---|
| 639 | Q_UNUSED( xScaleDiv );
|
---|
| 640 | Q_UNUSED( yScaleDiv );
|
---|
| 641 | }
|
---|
| 642 |
|
---|
| 643 | /*!
|
---|
[8127] | 644 | \brief Update the item to changes of the legend info
|
---|
[4271] | 645 |
|
---|
[8127] | 646 | Plot items that want to display a legend ( not those, that want to
|
---|
| 647 | be displayed on a legend ! ) will have to implement updateLegend().
|
---|
[4271] | 648 |
|
---|
[8127] | 649 | updateLegend() is only called when the LegendInterest interest
|
---|
| 650 | is enabled. The default implementation does nothing.
|
---|
| 651 |
|
---|
| 652 | \param item Plot item to be displayed on a legend
|
---|
| 653 | \param data Attributes how to display item on the legend
|
---|
| 654 |
|
---|
| 655 | \sa QwtPlotLegendItem
|
---|
| 656 |
|
---|
| 657 | \note Plot items, that want to be displayed on a legend
|
---|
| 658 | need to enable the QwtPlotItem::Legend flag and to implement
|
---|
| 659 | legendData() and legendIcon()
|
---|
| 660 | */
|
---|
[9383] | 661 | void QwtPlotItem::updateLegend( const QwtPlotItem *item,
|
---|
[8127] | 662 | const QList<QwtLegendData> &data )
|
---|
| 663 | {
|
---|
| 664 | Q_UNUSED( item );
|
---|
| 665 | Q_UNUSED( data );
|
---|
| 666 | }
|
---|
| 667 |
|
---|
| 668 | /*!
|
---|
| 669 | \brief Calculate the bounding scale rectangle of 2 maps
|
---|
| 670 |
|
---|
| 671 | \param xMap Maps x-values into pixel coordinates.
|
---|
| 672 | \param yMap Maps y-values into pixel coordinates.
|
---|
| 673 |
|
---|
| 674 | \return Bounding scale rect of the scale maps, not normalized
|
---|
[4271] | 675 | */
|
---|
| 676 | QRectF QwtPlotItem::scaleRect( const QwtScaleMap &xMap,
|
---|
| 677 | const QwtScaleMap &yMap ) const
|
---|
| 678 | {
|
---|
| 679 | return QRectF( xMap.s1(), yMap.s1(),
|
---|
| 680 | xMap.sDist(), yMap.sDist() );
|
---|
| 681 | }
|
---|
| 682 |
|
---|
| 683 | /*!
|
---|
[8127] | 684 | \brief Calculate the bounding paint rectangle of 2 maps
|
---|
[4271] | 685 |
|
---|
[8127] | 686 | \param xMap Maps x-values into pixel coordinates.
|
---|
| 687 | \param yMap Maps y-values into pixel coordinates.
|
---|
[4271] | 688 |
|
---|
[8127] | 689 | \return Bounding paint rectangle of the scale maps, not normalized
|
---|
[4271] | 690 | */
|
---|
| 691 | QRectF QwtPlotItem::paintRect( const QwtScaleMap &xMap,
|
---|
| 692 | const QwtScaleMap &yMap ) const
|
---|
| 693 | {
|
---|
| 694 | const QRectF rect( xMap.p1(), yMap.p1(),
|
---|
| 695 | xMap.pDist(), yMap.pDist() );
|
---|
| 696 |
|
---|
| 697 | return rect;
|
---|
| 698 | }
|
---|