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.