# KDChart::AbstractAreaWidget Class Reference

`#include <KDChartAbstractAreaWidget.h>`

Inheritance diagram for KDChart::AbstractAreaWidget:

[legend]
Collaboration diagram for KDChart::AbstractAreaWidget:
[legend]
List of all members.

## Detailed Description

An area in the chart with a background, a frame, etc.

AbstractAreaWidget is the base for all widget classes that have a set of background attributes and frame attributes, such as KDChart::Chart and KDChart::Legend.

Definition at line 51 of file KDChartAbstractAreaWidget.h.

## Public Member Functions

| AbstractAreaWidget (QWidget *parent=0)
void | alignToReferencePoint (const RelativePosition &position)
BackgroundAttributes | backgroundAttributes () const
bool | compare (const AbstractAreaBase *other) const
| Returns true if both areas have the same settings.
virtual void | forceRebuild ()
| Call this to trigger an unconditional re-building of the widget's internals.
FrameAttributes | frameAttributes () const
void | getFrameLeadings (int &left, int &top, int &right, int &bottom) const
virtual void | needSizeHint ()
| Call this to trigger an conditional re-building of the widget's internals.
virtual void | paint (QPainter *painter)=0
| Overwrite this to paint the inner contents of your widget.
void | paintAll (QPainter &painter)
| Call paintAll, if you want the background and the frame to be drawn before the normal paint() is invoked automatically.
virtual void | paintBackground (QPainter &painter, const QRect &rectangle)
virtual void | paintEvent (QPaintEvent *event)
| Draws the background and frame, then calls paint().
virtual void | paintFrame (QPainter &painter, const QRect &rectangle)
virtual void | paintIntoRect (QPainter &painter, const QRect &rect)
| Draws the background and frame, then calls paint().
virtual void | resizeLayout (const QSize &)
void | setBackgroundAttributes (const BackgroundAttributes &a)
void | setFrameAttributes (const FrameAttributes &a)

## Static Public Member Functions

void | paintBackgroundAttributes (QPainter &painter, const QRect &rectangle, const KDChart::BackgroundAttributes &attributes)
void | paintFrameAttributes (QPainter &painter, const QRect &rectangle, const KDChart::FrameAttributes &attributes)

## Public Attributes

Q_SIGNALS | __pad0__: void positionChanged( AbstractAreaWidget * )

## Protected Member Functions

virtual QRect | areaGeometry () const
QRect | innerRect () const
virtual void | positionHasChanged ()
virtual | ~AbstractAreaWidget ()

## Constructor & Destructor Documentation

AbstractAreaWidget::AbstractAreaWidget | ( | QWidget * | parent = 0 | ) | `[explicit]`

Definition at line 69 of file KDChartAbstractAreaWidget.cpp.

    00070     : QWidget( parent )
    00071     , AbstractAreaBase( new Private() )
    00072 {
    00073     init();
    00074 }

AbstractAreaWidget::~AbstractAreaWidget | ( |  | ) | `[protected, virtual]`

Definition at line 76 of file KDChartAbstractAreaWidget.cpp.

    00077 {
    00078     // this block left empty intentionally
    00079 }

## Member Function Documentation

void AbstractAreaBase::alignToReferencePoint | ( | const RelativePosition & | position | ) | `[inherited]`

Definition at line 90 of file KDChartAbstractAreaBase.cpp.

    00091 {
    00092     Q_UNUSED( position );
    00093     // PENDING(kalle) FIXME
    00094     qWarning( "Sorry, not implemented: void AbstractAreaBase::alignToReferencePoint( const RelativePosition& position )" );
    00095 }

QRect AbstractAreaWidget::areaGeometry | ( |  | ) | const`[protected, virtual]`

Implements KDChart::AbstractAreaBase.

Definition at line 186 of file KDChartAbstractAreaWidget.cpp.

    00187 {
    00188     return geometry();
    00189 }

BackgroundAttributes AbstractAreaBase::backgroundAttributes | ( |  | ) | const`[inherited]`

Definition at line 112 of file KDChartAbstractAreaBase.cpp.

References d.

Referenced by updateCommonBrush().

    00113 {
    00114     return d->backgroundAttributes;
    00115 }

bool AbstractAreaBase::compare | ( | const AbstractAreaBase * | other | ) | const`[inherited]`

Returns true if both areas have the same settings.

Definition at line 75 of file KDChartAbstractAreaBase.cpp.

    00076 {
    00077     if( other == this ) return true;
    00078     if( ! other ){
    00079         //qDebug() << "CartesianAxis::compare() cannot compare to Null pointer";
    00080         return false;
    00081     }
    00082     /*
    00083     qDebug() << "AbstractAreaBase:" << (frameAttributes() == other->frameAttributes())
    00084         << (backgroundAttributes() == other->backgroundAttributes()) << "\n";
    00085     */
    00086     return  (frameAttributes()      == other->frameAttributes()) &&
    00087             (backgroundAttributes() == other->backgroundAttributes());
    00088 }

void AbstractAreaWidget::forceRebuild | ( |  | ) | `[virtual]`

Call this to trigger an unconditional re-building of the widget's internals.

Reimplemented in KDChart::Legend.

Definition at line 140 of file KDChartAbstractAreaWidget.cpp.

    00141 {
    00142     //bloc left empty intentionally
    00143 }

FrameAttributes AbstractAreaBase::frameAttributes | ( |  | ) | const`[inherited]`

Definition at line 102 of file KDChartAbstractAreaBase.cpp.

References d.

Referenced by KDChart::Legend::clone(), and updateCommonBrush().

    00103 {
    00104     return d->frameAttributes;
    00105 }

void AbstractAreaBase::getFrameLeadings | ( | int & | left,
|  | int & | top,
|  | int & | right,
|  | int & | bottom
| ) | const`[inherited]`

Definition at line 204 of file KDChartAbstractAreaBase.cpp.

References d.

Referenced by KDChart::AbstractAreaBase::innerRect(), and paintAll().

    00205 {
    00206     if( d && d->frameAttributes.isVisible() ){
    00207         const int padding = qMax( d->frameAttributes.padding(), 0 );
    00208         left   = padding;
    00209         top    = padding;
    00210         right  = padding;
    00211         bottom = padding;
    00212     }else{
    00213         left   = 0;
    00214         top    = 0;
    00215         right  = 0;
    00216         bottom = 0;
    00217     }
    00218 }

QRect AbstractAreaBase::innerRect | ( |  | ) | const`[protected, inherited]`

Definition at line 220 of file KDChartAbstractAreaBase.cpp.

References KDChart::AbstractAreaBase::areaGeometry(), and KDChart::AbstractAreaBase::getFrameLeadings().

Referenced by KDChart::TextArea::paintAll(), and KDChart::AbstractArea::paintAll().

    00221 {
    00222     int left;
    00223     int top;
    00224     int right;
    00225     int bottom;
    00226     getFrameLeadings( left, top, right, bottom );
    00227     return
    00228         QRect( QPoint(0,0), areaGeometry().size() )
    00229             .adjusted( left, top, -right, -bottom );
    00230 }

void AbstractAreaWidget::needSizeHint | ( |  | ) | `[virtual]`

Call this to trigger an conditional re-building of the widget's internals.

e.g. AbstractAreaWidget call this, before calling layout()->setGeometry()

Reimplemented in KDChart::Legend.

Definition at line 86 of file KDChartAbstractAreaWidget.cpp.

    00087 {
    00088     // this block left empty intentionally
    00089 }

virtual void KDChart::AbstractAreaWidget::paint | ( | QPainter * | painter | ) | `[pure virtual]`

Overwrite this to paint the inner contents of your widget.

Note:
  When overriding this method, please let your widget draw itself at the top/left corner of the painter. You should call rect() (or width(), height(), resp.) to find the drawable area's size: While the paint() method is being executed the frame of the widget is outside of its rect(), so you can use all of rect() for your custom drawing!

See also:
  paint, paintIntoRect

Implemented in KDChart::Legend.

Referenced by paintAll().

void AbstractAreaWidget::paintAll | ( | QPainter & | painter | ) |

Call paintAll, if you want the background and the frame to be drawn before the normal paint() is invoked automatically.

Definition at line 145 of file KDChartAbstractAreaWidget.cpp.

References KDChart::AbstractAreaBase::getFrameLeadings(), paint(), KDChart::AbstractAreaBase::paintBackground(), and KDChart::AbstractAreaBase::paintFrame().

Referenced by paintEvent(), and paintIntoRect().

    00146 {
    00147     //qDebug() << "AbstractAreaWidget::paintAll() called";
    00148
    00149     // Paint the background and frame
    00150     paintBackground( painter, QRect(QPoint(0, 0), size() ) );
    00151     paintFrame(      painter, QRect(QPoint(0, 0), size() ) );
    00152
    00153 /*
    00154     we do not call setContentsMargins() now,
    00155     but we call resizeLayout() whenever the size or the frame has changed
    00156
    00157     // adjust the widget's content margins,
    00158     // to be sure all content gets calculated
    00159     // to fit into the inner rectangle
    00160     const QRect oldGeometry( areaGeometry()  );
    00161     const QRect inner( innerRect() );
    00162     //qDebug() << "areaGeometry():" << oldGeometry
    00163     //         << "  contentsRect():" << contentsRect() << "  inner:" << inner;
    00164     if( contentsRect() != inner ){
    00165         //qDebug() << "old contentsRect():" << contentsRect() << "  new innerRect:" << inner;
    00166         setContentsMargins(
    00167             inner.left(),
    00168             inner.top(),
    00169             oldGeometry.width() -inner.width()-1,
    00170             oldGeometry.height()-inner.height()-1 );
    00171         //forceRebuild();
    00172     }
    00173 */
    00174     int left;
    00175     int top;
    00176     int right;
    00177     int bottom;
    00178     getFrameLeadings( left, top, right, bottom );
    00179     const QPoint translation( left, top );
    00180     painter.translate( translation );
    00181     paint( &painter );
    00182     painter.translate( -translation.x(), -translation.y() );
    00183      //qDebug() << "AbstractAreaWidget::paintAll() done.";
    00184 }

void AbstractAreaBase::paintBackground | ( | QPainter & | painter,
|  | const QRect & | rectangle
| ) | `[virtual, inherited]`

Definition at line 188 of file KDChartAbstractAreaBase.cpp.

References d, and KDChart::AbstractAreaBase::paintBackgroundAttributes().

Referenced by KDChart::TextArea::paintAll(), paintAll(), and KDChart::AbstractArea::paintAll().

    00189 {
    00190     Q_ASSERT_X ( d != 0, "AbstractAreaBase::paintBackground()",
    00191                 "Private class was not initialized!" );
    00192     paintBackgroundAttributes( painter, rect, d->backgroundAttributes );
    00193 }

void AbstractAreaBase::paintBackgroundAttributes | ( | QPainter & | painter,
|  | const QRect & | rectangle,
|  | const KDChart::BackgroundAttributes & | attributes
| ) | `[static, inherited]`

Definition at line 119 of file KDChartAbstractAreaBase.cpp.

References KDChart::BackgroundAttributes::brush(), KDChart::BackgroundAttributes::isVisible(), KDChart::BackgroundAttributes::pixmap(), and KDChart::BackgroundAttributes::pixmapMode().

Referenced by KDChart::AbstractAreaBase::paintBackground().

    00121 {
    00122     if( !attributes.isVisible() ) return;
    00123
    00124     /* first draw the brush (may contain a pixmap)*/
    00125     if( Qt::NoBrush != attributes.brush().style() ) {
    00126         KDChart::PainterSaver painterSaver( &painter );
    00127         painter.setPen( Qt::NoPen );
    00128         const QPointF newTopLeft( painter.deviceMatrix().map( rect.topLeft() ) );
    00129         painter.setBrushOrigin( newTopLeft );
    00130         painter.setBrush( attributes.brush() );
    00131         painter.drawRect( rect.adjusted( 0, 0, -1, -1 ) );
    00132     }
    00133     /* next draw the backPixmap over the brush */
    00134     if( !attributes.pixmap().isNull() &&
    00135         attributes.pixmapMode() != BackgroundAttributes::BackgroundPixmapModeNone ) {
    00136         QPointF ol = rect.topLeft();
    00137         if( BackgroundAttributes::BackgroundPixmapModeCentered == attributes.pixmapMode() )
    00138         {
    00139             ol.setX( rect.center().x() - attributes.pixmap().width() / 2 );
    00140             ol.setY( rect.center().y() - attributes.pixmap().height()/ 2 );
    00141             painter.drawPixmap( ol, attributes.pixmap() );
    00142         } else {
    00143             QMatrix m;
    00144             double zW = (double)rect.width()  / (double)attributes.pixmap().width();
    00145             double zH = (double)rect.height() / (double)attributes.pixmap().height();
    00146             switch( attributes.pixmapMode() ) {
    00147             case BackgroundAttributes::BackgroundPixmapModeScaled:
    00148             {
    00149                 double z;
    00150                 z = qMin( zW, zH );
    00151                 m.scale( z, z );
    00152             }
    00153             break;
    00154             case BackgroundAttributes::BackgroundPixmapModeStretched:
    00155                 m.scale( zW, zH );
    00156                 break;
    00157             default:
    00158                 ; // Cannot happen, previously checked
    00159             }
    00160             QPixmap pm = attributes.pixmap().transformed( m );
    00161             ol.setX( rect.center().x() - pm.width() / 2 );
    00162             ol.setY( rect.center().y() - pm.height()/ 2 );
    00163             painter.drawPixmap( ol, pm );
    00164         }
    00165     }
    00166 }

void AbstractAreaWidget::paintEvent | ( | QPaintEvent * | event | ) | `[virtual]`

Draws the background and frame, then calls paint().

In most cases there is no need to overwrite this method in a derived class, but you would overwrite paint() instead.

See also:
  paint

Definition at line 99 of file KDChartAbstractAreaWidget.cpp.

References d, and paintAll().

    00100 {
    00101     Q_UNUSED( event );
    00102     QPainter painter( this );
    00103     if( size() != d->currentLayoutSize ){
    00104         d->resizeLayout( this, size() );
    00105     }
    00106     paintAll( painter );
    00107 }

void AbstractAreaBase::paintFrame | ( | QPainter & | painter,
|  | const QRect & | rectangle
| ) | `[virtual, inherited]`

Definition at line 196 of file KDChartAbstractAreaBase.cpp.

References d, and KDChart::AbstractAreaBase::paintFrameAttributes().

Referenced by KDChart::TextArea::paintAll(), paintAll(), and KDChart::AbstractArea::paintAll().

    00197 {
    00198     Q_ASSERT_X ( d != 0, "AbstractAreaBase::paintFrame()",
    00199                 "Private class was not initialized!" );
    00200     paintFrameAttributes( painter, rect, d->frameAttributes );
    00201 }

void AbstractAreaBase::paintFrameAttributes | ( | QPainter & | painter,
|  | const QRect & | rectangle,
|  | const KDChart::FrameAttributes & | attributes
| ) | `[static, inherited]`

Definition at line 169 of file KDChartAbstractAreaBase.cpp.

References KDChart::FrameAttributes::isVisible(), and KDChart::FrameAttributes::pen().

Referenced by KDChart::AbstractAreaBase::paintFrame().

    00171 {
    00172
    00173     if( !attributes.isVisible() ) return;
    00174
    00175     // Note: We set the brush to NoBrush explicitely here.
    00176     //       Otherwise we might get a filled rectangle, so any
    00177     //       previously drawn background would be overwritten by that area.
    00178
    00179     const QPen   oldPen(   painter.pen() );
    00180     const QBrush oldBrush( painter.brush() );
    00181     painter.setPen(   attributes.pen() );
    00182     painter.setBrush( Qt::NoBrush );
    00183     painter.drawRect( rect.adjusted( 0, 0, -1, -1 ) );
    00184     painter.setBrush( oldBrush );
    00185     painter.setPen(   oldPen );
    00186 }

void AbstractAreaWidget::paintIntoRect | ( | QPainter & | painter,
|  | const QRect & | rect
| ) | `[virtual]`

Draws the background and frame, then calls paint().

In most cases there is no need to overwrite this method in a derived class, but you would overwrite paint() instead.

Definition at line 109 of file KDChartAbstractAreaWidget.cpp.

References d, and paintAll().

Referenced by KDChart::Chart::paint().

    00110 {
    00111     //qDebug() << "AbstractAreaWidget::paintIntoRect() called rect=" << rect;
    00112
    00113     if( rect.isEmpty() ) return;
    00114
    00115     d->resizeLayout( this, rect.size() );
    00116
    00117     const QPoint translation( rect.topLeft() );
    00118     painter.translate( translation );
    00119     paintAll( painter );
    00120     painter.translate( -translation.x(), -translation.y() );
    00121
    00122 /*
    00123     // make sure, the contents of the widget have been set up,
    00124     // so we get a usefull geometry:
    00125     needSizeHint();
    00126
    00127     const QRect oldGeometry( layout()->geometry() );
    00128     const QRect newGeo( QPoint(0,0), rect.size() );
    00129     const bool mustChangeGeo = layout() && oldGeometry != newGeo;
    00130     if( mustChangeGeo )
    00131         layout()->setGeometry( newGeo );
    00132     painter.translate( rect.left(), rect.top() );
    00133     paintAll( painter );
    00134     painter.translate( -rect.left(), -rect.top() );
    00135     if( mustChangeGeo )
    00136         layout()->setGeometry( oldGeometry );
    00137 */
    00138 }

void AbstractAreaWidget::positionHasChanged | ( |  | ) | `[protected, virtual]`

Reimplemented from KDChart::AbstractAreaBase.

Definition at line 191 of file KDChartAbstractAreaWidget.cpp.

    00192 {
    00193     emit positionChanged( this );
    00194 }

void AbstractAreaWidget::resizeLayout | ( | const QSize & |  | ) | `[virtual]`

Reimplemented in KDChart::Legend.

Definition at line 93 of file KDChartAbstractAreaWidget.cpp.

    00094 {
    00095     Q_UNUSED( size );
    00096     // this block left empty intentionally
    00097 }

void AbstractAreaBase::setBackgroundAttributes | ( | const BackgroundAttributes & | a | ) | `[inherited]`

Definition at line 107 of file KDChartAbstractAreaBase.cpp.

References d.

    00108 {
    00109     d->backgroundAttributes = a;
    00110 }

void AbstractAreaBase::setFrameAttributes | ( | const FrameAttributes & | a | ) | `[inherited]`

Definition at line 97 of file KDChartAbstractAreaBase.cpp.

References d.

Referenced by KDChart::Legend::clone().

    00098 {
    00099     d->frameAttributes = a;
    00100 }

## Member Data Documentation

Q_SIGNALS KDChart::AbstractAreaWidget::__pad0__

| Reimplemented in KDChart::Legend. Definition at line 121 of file KDChartAbstractAreaWidget.h.

The documentation for this class was generated from the following files:

- KDChartAbstractAreaWidget.h
- KDChartAbstractAreaWidget.cpp