10 #include "qwt_scale_widget.h"
11 #include "qwt_painter.h"
12 #include "qwt_color_map.h"
13 #include "qwt_scale_map.h"
15 #include "qwt_scale_div.h"
17 #include "qwt_interval.h"
18 #include "qwt_scale_engine.h"
23 #include <qstyleoption.h>
24 #include <qapplication.h>
27 class QwtScaleWidget::PrivateData
33 colorBar.colorMap = NULL;
39 delete colorBar.colorMap;
94 m_data =
new PrivateData;
99 m_data->borderDist[0] = 0;
100 m_data->borderDist[1] = 0;
101 m_data->minBorderDist[0] = 0;
102 m_data->minBorderDist[1] = 0;
104 m_data->titleOffset = 0;
108 m_data->scaleDraw->setAlignment( align );
109 m_data->scaleDraw->setLength( 10 );
111 m_data->scaleDraw->setScaleDiv(
115 m_data->colorBar.isEnabled =
false;
116 m_data->colorBar.width = 10;
118 const int flags = Qt::AlignHCenter
119 | Qt::TextExpandTabs | Qt::TextWordWrap;
120 m_data->title.setRenderFlags( flags );
121 m_data->title.setFont( font() );
123 QSizePolicy policy( QSizePolicy::MinimumExpanding,
124 QSizePolicy::Fixed );
125 if ( m_data->scaleDraw->orientation() == Qt::Vertical )
128 setSizePolicy( policy );
130 setAttribute( Qt::WA_WState_OwnSizePolicy,
false );
143 if ( ( ( m_data->layoutFlags & flag ) != 0 ) != on )
146 m_data->layoutFlags |= flag;
148 m_data->layoutFlags &= ~flag;
163 return ( m_data->layoutFlags & flag );
174 if ( m_data->title.text() !=
title )
176 m_data->title.setText(
title );
193 const int flags =
title.
renderFlags() & ~( Qt::AlignTop | Qt::AlignBottom );
196 if ( t != m_data->title )
211 if ( m_data->scaleDraw )
212 m_data->scaleDraw->setAlignment(
alignment );
214 if ( !testAttribute( Qt::WA_WState_OwnSizePolicy ) )
216 QSizePolicy policy( QSizePolicy::MinimumExpanding,
217 QSizePolicy::Fixed );
218 if ( m_data->scaleDraw->orientation() == Qt::Vertical )
221 setSizePolicy( policy );
223 setAttribute( Qt::WA_WState_OwnSizePolicy,
false );
252 if ( dist1 != m_data->borderDist[0] || dist2 != m_data->borderDist[1] )
254 m_data->borderDist[0] = dist1;
255 m_data->borderDist[1] = dist2;
268 if (
margin != m_data->margin )
283 if (
spacing != m_data->spacing )
297 m_data->scaleDraw->setLabelAlignment(
alignment );
310 m_data->scaleDraw->setLabelRotation( rotation );
343 delete m_data->scaleDraw;
355 return m_data->scaleDraw;
364 return m_data->scaleDraw;
373 return m_data->title;
382 return m_data->borderDist[0];
391 return m_data->borderDist[1];
400 return m_data->margin;
409 return m_data->spacing;
417 QPainter painter(
this );
418 painter.setClipRegion( event->region() );
422 style()->drawPrimitive(QStyle::PE_Widget, &opt, &painter,
this);
432 m_data->scaleDraw->draw( painter, palette() );
434 if ( m_data->colorBar.isEnabled && m_data->colorBar.width > 0 &&
435 m_data->colorBar.interval.isValid() )
440 QRect r = contentsRect();
441 if ( m_data->scaleDraw->orientation() == Qt::Horizontal )
443 r.setLeft( r.left() + m_data->borderDist[0] );
444 r.setWidth( r.width() - m_data->borderDist[1] );
448 r.setTop( r.top() + m_data->borderDist[0] );
449 r.setHeight( r.height() - m_data->borderDist[1] );
452 if ( !m_data->title.isEmpty() )
453 drawTitle( painter, m_data->scaleDraw->alignment(), r );
466 if ( m_data->scaleDraw->orientation() == Qt::Horizontal )
468 cr.setLeft( cr.left() + m_data->borderDist[0] );
469 cr.setWidth( cr.width() - m_data->borderDist[1] + 1 );
473 cr.setTop( cr.top() + m_data->borderDist[0] );
474 cr.setHeight( cr.height() - m_data->borderDist[1] + 1 );
477 switch ( m_data->scaleDraw->alignment() )
481 cr.setLeft( cr.right() - m_data->margin
482 - m_data->colorBar.width );
483 cr.setWidth( m_data->colorBar.width );
489 cr.setLeft( cr.left() + m_data->margin );
490 cr.setWidth( m_data->colorBar.width );
496 cr.setTop( cr.top() + m_data->margin );
497 cr.setHeight( m_data->colorBar.width );
503 cr.setTop( cr.bottom() - m_data->margin
504 - m_data->colorBar.width );
505 cr.setHeight( m_data->colorBar.width );
521 if ( event->type() == QEvent::LocaleChange )
523 m_data->scaleDraw->invalidateCache();
526 QWidget::changeEvent( event );
551 if ( m_data->borderDist[0] > bd0 )
552 bd0 = m_data->borderDist[0];
553 if ( m_data->borderDist[1] > bd1 )
554 bd1 = m_data->borderDist[1];
557 if ( m_data->colorBar.isEnabled && m_data->colorBar.interval.isValid() )
560 const QRectF r = contentsRect();
563 if ( m_data->scaleDraw->orientation() == Qt::Vertical )
566 length = r.height() - ( bd0 + bd1 );
576 length = r.width() - ( bd0 + bd1 );
584 m_data->scaleDraw->move( x, y );
585 m_data->scaleDraw->setLength( length );
587 const int extent = qwtCeil( m_data->scaleDraw->extent( font() ) );
589 m_data->titleOffset =
592 if ( update_geometry )
602 if ( QWidget* w = parentWidget() )
604 if ( !w->isVisible() && w->layout() == NULL )
606 if ( w->testAttribute( Qt::WA_WState_Polished ) )
607 QApplication::postEvent( w,
new QEvent( QEvent::LayoutRequest ) );
626 if ( !m_data->colorBar.interval.isValid() )
632 m_data->colorBar.interval.normalized(), sd->
scaleMap(),
649 int flags = m_data->title.renderFlags() &
650 ~( Qt::AlignTop | Qt::AlignBottom | Qt::AlignVCenter );
656 flags |= Qt::AlignTop;
657 r.setRect( r.left(), r.bottom(),
658 r.height(), r.width() - m_data->titleOffset );
663 flags |= Qt::AlignTop;
664 r.setRect( r.left() + m_data->titleOffset, r.bottom(),
665 r.height(), r.width() - m_data->titleOffset );
670 flags |= Qt::AlignBottom;
671 r.setTop( r.top() + m_data->titleOffset );
677 flags |= Qt::AlignTop;
678 r.setBottom( r.bottom() - m_data->titleOffset );
688 r.setRect( r.x() + r.height(), r.y() - r.width(),
689 r.width(), r.height() );
694 painter->setFont( font() );
695 painter->setPen( palette().color( QPalette::Text ) );
697 painter->translate( r.x(), r.y() );
699 painter->rotate( angle );
703 title.
draw( painter, QRectF( 0.0, 0.0, r.width(), r.height() ) );
734 const Qt::Orientation o = m_data->scaleDraw->orientation();
741 length += qMax( 0, m_data->borderDist[0] - mbd1 );
742 length += qMax( 0, m_data->borderDist[1] - mbd2 );
743 length += m_data->scaleDraw->minLength( font() );
753 QSize size( length + 2, dim );
754 if ( o == Qt::Vertical )
757 const QMargins m = contentsMargins();
758 return size + QSize( m.left() + m.right(), m.top() + m.bottom() );
769 return qwtCeil( m_data->title.heightForWidth( width, font() ) );
783 const int extent = qwtCeil( m_data->scaleDraw->extent( scaleFont ) );
785 int dim = m_data->margin + extent + 1;
787 if ( !m_data->title.isEmpty() )
790 if ( m_data->colorBar.isEnabled && m_data->colorBar.interval.isValid() )
791 dim += m_data->colorBar.width + m_data->spacing;
816 m_data->scaleDraw->getBorderDistHint( font(), start, end );
818 if ( start < m_data->minBorderDist[0] )
819 start = m_data->minBorderDist[0];
821 if ( end < m_data->minBorderDist[1] )
822 end = m_data->minBorderDist[1];
837 m_data->minBorderDist[0] = start;
838 m_data->minBorderDist[1] = end;
854 start = m_data->minBorderDist[0];
855 end = m_data->minBorderDist[1];
886 m_data->scaleDraw->setTransformation( transformation );
896 if ( on != m_data->colorBar.isEnabled )
898 m_data->colorBar.isEnabled = on;
909 return m_data->colorBar.isEnabled;
920 if ( width != m_data->colorBar.width )
922 m_data->colorBar.width = width;
934 return m_data->colorBar.width;
943 return m_data->colorBar.interval;
958 m_data->colorBar.interval = interval;
960 if (
colorMap != m_data->colorBar.colorMap )
962 delete m_data->colorBar.colorMap;
963 m_data->colorBar.colorMap =
colorMap;
976 return m_data->colorBar.colorMap;
980 #include "moc_qwt_scale_widget.cpp"
void setScaleDiv(const QwtScaleDiv &)
const QwtScaleMap & scaleMap() const
void setTransformation(QwtTransform *)
const QwtScaleDiv & scaleDiv() const
QwtColorMap is used to map values into colors.
A class representing an interval.
QwtLinearColorMap builds a color map from color stops.
A scale engine for linear scales.
static void drawColorBar(QPainter *, const QwtColorMap &, const QwtInterval &, const QwtScaleMap &, Qt::Orientation, const QRectF &)
A class representing a scale division.
A class for drawing scales.
void setAlignment(Alignment)
Alignment alignment() const
Qt::Orientation orientation() const
@ BottomScale
The scale is below.
@ TopScale
The scale is above.
@ RightScale
The scale is right.
@ LeftScale
The scale is left.
const QwtTransform * transformation() const
Get the transformation.
A class representing a text.
void draw(QPainter *painter, const QRectF &rect) const
void setRenderFlags(int)
Change the render flags.