Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members | Related Pages

KDChart::TextLayoutItem Class Reference

#include <KDChartLayoutItems.h>

Inheritance diagram for KDChart::TextLayoutItem:

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

Public Member Functions

const QObjectautoReferenceArea () const
virtual Qt::Orientations expandingDirections () const
 pure virtual in QLayoutItem

virtual QRect geometry () const
 pure virtual in QLayoutItem

virtual bool intersects (const TextLayoutItem &other, const QPoint &myPos, const QPoint &otherPos) const
virtual bool intersects (const TextLayoutItem &other, const QPointF &myPos, const QPointF &otherPos) const
virtual bool isEmpty () const
 pure virtual in QLayoutItem

virtual QSize maximumSize () const
 pure virtual in QLayoutItem

virtual QSize minimumSize () const
 pure virtual in QLayoutItem

virtual void paint (QPainter *)
virtual void paintAll (QPainter &painter)
 Default impl: just call paint.

virtual void paintCtx (PaintContext *context)
 Default impl: Paint the complete item using its layouted position and size.

QLayout * parentLayout ()
virtual QFont realFont () const
virtual qreal realFontSize () const
void removeFromParentLayout ()
void setAutoReferenceArea (const QObject *area)
virtual void setGeometry (const QRect &r)
 pure virtual in QLayoutItem

void setParentLayout (QLayout *lay)
virtual void setParentWidget (QWidget *widget)
 Inform the item about its widget: This enables the item, to trigger that widget's update, whenever the size of the item's contents has changed.

void setText (const QString &text)
void setTextAttributes (const TextAttributes &a)
 Use this to specify the text attributes to be used for this item.

virtual QSize sizeHint () const
 pure virtual in QLayoutItem

virtual void sizeHintChanged () const
 Report changed size hint: ask the parent widget to recalculate the layout.

QString text () const
TextAttributes textAttributes () const
 Returns the text attributes to be used for this item.

 TextLayoutItem (const QString &text, const TextAttributes &attributes, const QObject *autoReferenceArea, KDChartEnums::MeasureOrientation autoReferenceOrientation, Qt::Alignment alignment=0)
 TextLayoutItem ()

Protected Attributes

QWidgetmParent
QLayout * mParentLayout

Constructor & Destructor Documentation

KDChart::TextLayoutItem::TextLayoutItem  ) 
 

Definition at line 115 of file KDChartLayoutItems.cpp.

00116     : AbstractLayoutItem( Qt::AlignLeft )
00117     , mText()
00118     , mAttributes()
00119     , mAutoReferenceArea( 0 )
00120     , mAutoReferenceOrientation( KDChartEnums::MeasureOrientationHorizontal )
00121     , cachedSizeHint() // default this to invalid to force just-in-time calculation before first use of sizeHint()
00122     , cachedFontSize( 0.0 )
00123     , cachedFont( mAttributes.font() )
00124 {
00125 
00126 }

KDChart::TextLayoutItem::TextLayoutItem const QString &  text,
const TextAttributes attributes,
const QObject autoReferenceArea,
KDChartEnums::MeasureOrientation  autoReferenceOrientation,
Qt::Alignment  alignment = 0
 

Definition at line 99 of file KDChartLayoutItems.cpp.

00104     : AbstractLayoutItem( alignment )
00105     , mText( text )
00106     , mAttributes( attributes )
00107     , mAutoReferenceArea( area )
00108     , mAutoReferenceOrientation( orientation )
00109     , cachedSizeHint() // default this to invalid to force just-in-time calculation before first use of sizeHint()
00110     , cachedFontSize( 0.0 )
00111     , cachedFont( mAttributes.font() )
00112 {
00113 }


Member Function Documentation

const QObject * KDChart::TextLayoutItem::autoReferenceArea  )  const
 

Definition at line 135 of file KDChartLayoutItems.cpp.

Referenced by KDChart::HeaderFooter::setParent().

00136 {
00137     return mAutoReferenceArea;
00138 }

Qt::Orientations KDChart::TextLayoutItem::expandingDirections  )  const [virtual]
 

pure virtual in QLayoutItem

Definition at line 175 of file KDChartLayoutItems.cpp.

00176 {
00177     return 0; // Grow neither vertically nor horizontally
00178 }

QRect KDChart::TextLayoutItem::geometry  )  const [virtual]
 

pure virtual in QLayoutItem

Definition at line 180 of file KDChartLayoutItems.cpp.

Referenced by KDChart::TextArea::areaGeometry(), paint(), KDChart::TextArea::paintAll(), KDChart::CartesianAxis::paintCtx(), and KDChart::TextArea::paintIntoRect().

00181 {
00182     return mRect;
00183 }

bool KDChart::TextLayoutItem::intersects const TextLayoutItem other,
const QPoint &  myPos,
const QPoint &  otherPos
const [virtual]
 

Definition at line 254 of file KDChartLayoutItems.cpp.

References mAttributes, PI, rotatedCorners(), KDChart::TextAttributes::rotation(), and unrotatedSizeHint().

00255 {
00256     if ( mAttributes.rotation() != other.mAttributes.rotation() )
00257     {
00258         // that's the code for the common case: the rotation angles don't need to match here
00259         QPolygon myPolygon(          rotatedCorners() );
00260         QPolygon otherPolygon( other.rotatedCorners() );
00261 
00262         // move the polygons to their positions
00263         myPolygon.translate( myPos );
00264         otherPolygon.translate( otherPos );
00265 
00266         // create regions out of it
00267         QRegion myRegion( myPolygon );
00268         QRegion otherRegion( otherPolygon );
00269 
00270         // now the question - do they intersect or not?
00271         return ! myRegion.intersect( otherRegion ).isEmpty();
00272 
00273     } else {
00274         // and that's the code for the special case: the rotation angles match, which is less time consuming in calculation
00275         const qreal angle = mAttributes.rotation() * PI / 180.0;
00276         // both sizes
00277         const QSizeF mySize(          unrotatedSizeHint() );
00278         const QSizeF otherSize( other.unrotatedSizeHint() );
00279 
00280         // that's myP1 relative to myPos
00281         QPointF myP1( mySize.height() * sin( angle ), 0.0 );
00282         // that's otherP1 to myPos
00283         QPointF otherP1 = QPointF( otherSize.height() * sin( angle ), 0.0 ) + otherPos - myPos;
00284 
00285         // now rotate both points the negative angle around myPos
00286         myP1 = QPointF( myP1.x() * cos( -angle ), myP1.x() * sin( -angle ) );
00287         qreal r = sqrt( otherP1.x() * otherP1.x() + otherP1.y() * otherP1.y() );
00288         otherP1 = QPointF( r * cos( -angle ), r * sin( -angle ) );
00289 
00290         // finally we look, whether both rectangles intersect or even not
00291         return QRectF( myP1, mySize ).intersects( QRectF( otherP1, otherSize ) );
00292     }
00293 }

bool KDChart::TextLayoutItem::intersects const TextLayoutItem other,
const QPointF &  myPos,
const QPointF &  otherPos
const [virtual]
 

Definition at line 249 of file KDChartLayoutItems.cpp.

Referenced by KDChart::CartesianAxis::paintCtx().

00250 {
00251     return intersects( other, myPos.toPoint(), otherPos.toPoint() );
00252 }

bool KDChart::TextLayoutItem::isEmpty  )  const [virtual]
 

pure virtual in QLayoutItem

Definition at line 185 of file KDChartLayoutItems.cpp.

00186 {
00187     return false; // never empty, otherwise the layout item would not exist
00188 }

QSize KDChart::TextLayoutItem::maximumSize  )  const [virtual]
 

pure virtual in QLayoutItem

Definition at line 190 of file KDChartLayoutItems.cpp.

References sizeHint().

00191 {
00192     return sizeHint(); // PENDING(kalle) Review, quite inflexible
00193 }

QSize KDChart::TextLayoutItem::minimumSize  )  const [virtual]
 

pure virtual in QLayoutItem

Definition at line 195 of file KDChartLayoutItems.cpp.

References sizeHint().

00196 {
00197     return sizeHint(); // PENDING(kalle) Review, quite inflexible
00198 }

void KDChart::TextLayoutItem::paint QPainter *   )  [virtual]
 

Implements KDChart::AbstractLayoutItem.

Definition at line 382 of file KDChartLayoutItems.cpp.

References geometry(), KDChart::TextAttributes::pen(), rotatedRect(), and KDChart::TextAttributes::rotation().

Referenced by KDChart::TextArea::paintAll(), and KDChart::CartesianAxis::paintCtx().

00383 {
00384     // make sure, cached font is updated, if needed:
00385     // sizeHint();
00386 
00387     if( !mRect.isValid() )
00388         return;
00389 
00390     PainterSaver painterSaver( painter );
00391     painter->setFont( cachedFont );
00392     QRectF rect( geometry() );
00393 
00394 // #ifdef DEBUG_ITEMS_PAINT
00395 //     painter->setPen( Qt::black );
00396 //     painter->drawRect( rect );
00397 // #endif
00398     painter->translate( rect.center() );
00399     rect.moveTopLeft( QPointF( - rect.width() / 2, - rect.height() / 2 ) );
00400 #ifdef DEBUG_ITEMS_PAINT
00401     painter->setPen( Qt::blue );
00402     painter->drawRect( rect );
00403 #endif
00404     painter->rotate( mAttributes.rotation() );
00405     rect = rotatedRect( rect, mAttributes.rotation() );
00406 #ifdef DEBUG_ITEMS_PAINT
00407     painter->setPen( Qt::red );
00408     painter->drawRect( rect );
00409 #endif
00410     painter->setPen( mAttributes.pen() );
00411     painter->drawText( rect, Qt::AlignHCenter | Qt::AlignVCenter, mText );
00412 //    if (  calcSizeHint( cachedFont ).width() > rect.width() )
00413 //        qDebug() << "rect.width()" << rect.width() << "text.width()" << calcSizeHint( cachedFont ).width();
00414 //
00415 //    //painter->drawText( rect, Qt::AlignHCenter | Qt::AlignVCenter, mText );
00416 }

void KDChart::AbstractLayoutItem::paintAll QPainter &  painter  )  [virtual, inherited]
 

Default impl: just call paint.

Derived classes like KDChart::AbstractArea are providing additional action here.

Reimplemented in KDChart::AbstractArea, and KDChart::TextArea.

Definition at line 69 of file KDChartLayoutItems.cpp.

References KDChart::AbstractLayoutItem::paint().

00070 {
00071     paint( &painter );
00072 }

void KDChart::AbstractLayoutItem::paintCtx PaintContext context  )  [virtual, inherited]
 

Default impl: Paint the complete item using its layouted position and size.

Reimplemented in KDChart::CartesianAxis.

Definition at line 77 of file KDChartLayoutItems.cpp.

References KDChart::AbstractLayoutItem::paint(), and KDChart::PaintContext::painter().

00078 {
00079     if( context )
00080         paint( context->painter() );
00081 }

QLayout* KDChart::AbstractLayoutItem::parentLayout  )  [inherited]
 

Definition at line 74 of file KDChartLayoutItems.h.

00075         {
00076             return mParentLayout;
00077         }

QFont KDChart::TextLayoutItem::realFont  )  const [virtual]
 

Definition at line 226 of file KDChartLayoutItems.cpp.

Referenced by KDChart::CartesianAxis::maximumSize(), and KDChart::CartesianAxis::paintCtx().

00227 {
00228     realFontWasRecalculated(); // we can safely ignore the boolean return value
00229     return cachedFont;
00230 }

qreal KDChart::TextLayoutItem::realFontSize  )  const [virtual]
 

Definition at line 206 of file KDChartLayoutItems.cpp.

References KDChart::TextAttributes::calculatedFontSize().

00207 {
00208     return mAttributes.calculatedFontSize( mAutoReferenceArea, mAutoReferenceOrientation );
00209 }

void KDChart::AbstractLayoutItem::removeFromParentLayout  )  [inherited]
 

Definition at line 78 of file KDChartLayoutItems.h.

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

00079         {
00080             if( mParentLayout ){
00081                 if( widget() )
00082                     mParentLayout->removeWidget( widget() );
00083                 else
00084                     mParentLayout->removeItem( this );
00085             }
00086         }

void KDChart::TextLayoutItem::setAutoReferenceArea const QObject area  ) 
 

Definition at line 128 of file KDChartLayoutItems.cpp.

References sizeHint().

Referenced by KDChart::HeaderFooter::setParent().

00129 {
00130     mAutoReferenceArea = area;
00131     cachedSizeHint = QSize();
00132     sizeHint();
00133 }

void KDChart::TextLayoutItem::setGeometry const QRect &  r  )  [virtual]
 

pure virtual in QLayoutItem

Definition at line 200 of file KDChartLayoutItems.cpp.

Referenced by KDChart::TextArea::paintAll(), KDChart::CartesianAxis::paintCtx(), and KDChart::TextArea::paintIntoRect().

00201 {
00202     mRect = r;
00203 }

void KDChart::AbstractLayoutItem::setParentLayout QLayout *  lay  )  [inherited]
 

Definition at line 70 of file KDChartLayoutItems.h.

00071         {
00072             mParentLayout = lay;
00073         }

void KDChart::AbstractLayoutItem::setParentWidget QWidget widget  )  [virtual, inherited]
 

Inform the item about its widget: This enables the item, to trigger that widget's update, whenever the size of the item's contents has changed.

Thus, you need to call setParentWidget on every item, that has a non-fixed size.

Definition at line 64 of file KDChartLayoutItems.cpp.

References KDChart::AbstractLayoutItem::mParent.

Referenced by KDChart::Legend::buildLegend(), and KDChart::AbstractCartesianDiagram::takeAxis().

00065 {
00066     mParent = widget;
00067 }

void KDChart::TextLayoutItem::setText const QString &  text  ) 
 

Definition at line 140 of file KDChartLayoutItems.cpp.

References sizeHint().

Referenced by KDChart::Widget::addHeaderFooter(), KDChart::CartesianAxis::maximumSize(), and KDChart::CartesianAxis::paintCtx().

00141 {
00142     mText = text;
00143     cachedSizeHint = QSize();
00144     sizeHint();
00145 }

void KDChart::TextLayoutItem::setTextAttributes const TextAttributes a  ) 
 

Use this to specify the text attributes to be used for this item.

See also:
textAttributes

Definition at line 157 of file KDChartLayoutItems.cpp.

References sizeHint().

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

00158 {
00159     mAttributes = a;
00160     cachedSizeHint = QSize(); // invalidate size hint
00161     sizeHint();
00162 }

QSize KDChart::TextLayoutItem::sizeHint  )  const [virtual]
 

pure virtual in QLayoutItem

Definition at line 295 of file KDChartLayoutItems.cpp.

References KDChart::AbstractLayoutItem::sizeHintChanged().

Referenced by maximumSize(), KDChart::CartesianAxis::maximumSize(), minimumSize(), KDChart::CartesianAxis::paintCtx(), setAutoReferenceArea(), setText(), and setTextAttributes().

00296 {
00297     if( realFontWasRecalculated() )
00298     {
00299         const QSize newSizeHint( calcSizeHint( cachedFont ) );
00300         if( newSizeHint != cachedSizeHint ){
00301             cachedSizeHint = newSizeHint;
00302             sizeHintChanged();
00303         }
00304     }
00305     //qDebug() << "-------- KDChart::TextLayoutItem::sizeHint() returns:"<<cachedSizeHint<<" ----------";
00306     return cachedSizeHint;
00307 }

void KDChart::AbstractLayoutItem::sizeHintChanged  )  const [virtual, inherited]
 

Report changed size hint: ask the parent widget to recalculate the layout.

Definition at line 86 of file KDChartLayoutItems.cpp.

Referenced by sizeHint().

00087 {
00088     // This is exactly like what QWidget::updateGeometry does.
00089 //  qDebug("KDChart::AbstractLayoutItem::sizeHintChanged() called");
00090     if( mParent ) {
00091         if ( mParent->layout() )
00092             mParent->layout()->invalidate();
00093         else
00094             QApplication::postEvent( mParent, new QEvent( QEvent::LayoutRequest ) );
00095     }
00096 }

QString KDChart::TextLayoutItem::text  )  const
 

Definition at line 147 of file KDChartLayoutItems.cpp.

Referenced by KDChart::CartesianAxis::paintCtx().

00148 {
00149     return mText;
00150 }

KDChart::TextAttributes KDChart::TextLayoutItem::textAttributes  )  const
 

Returns the text attributes to be used for this item.

See also:
setTextAttributes

Definition at line 169 of file KDChartLayoutItems.cpp.

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

00170 {
00171     return mAttributes;
00172 }


Member Data Documentation

QWidget* KDChart::AbstractLayoutItem::mParent [protected, inherited]
 

Definition at line 88 of file KDChartLayoutItems.h.

Referenced by KDChart::AbstractLayoutItem::setParentWidget().

QLayout* KDChart::AbstractLayoutItem::mParentLayout [protected, inherited]
 

Definition at line 89 of file KDChartLayoutItems.h.


The documentation for this class was generated from the following files:
Generated on Thu May 10 11:06:35 2007 for KD Chart 2 by doxygen 1.3.6