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

KDChart::AutoSpacerLayoutItem Class Reference

#include <KDChartLayoutItems.h>

Inheritance diagram for KDChart::AutoSpacerLayoutItem:

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

Public Member Functions

 AutoSpacerLayoutItem (bool layoutIsAtTopPosition, QHBoxLayout *rightLeftLayout, bool layoutIsAtLeftPosition, QVBoxLayout *topBottomLayout)
virtual Qt::Orientations expandingDirections () const
virtual QRect geometry () const
virtual bool isEmpty () const
virtual QSize maximumSize () const
virtual QSize minimumSize () const
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 ()
void removeFromParentLayout ()
virtual void setGeometry (const QRect &r)
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.

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


Protected Attributes

QWidgetmParent
QLayout * mParentLayout

Constructor & Destructor Documentation

KDChart::AutoSpacerLayoutItem::AutoSpacerLayoutItem bool  layoutIsAtTopPosition,
QHBoxLayout *  rightLeftLayout,
bool  layoutIsAtLeftPosition,
QVBoxLayout *  topBottomLayout
 

Definition at line 756 of file KDChartLayoutItems.cpp.

00759     : AbstractLayoutItem( Qt::AlignCenter )
00760     , mLayoutIsAtTopPosition(  layoutIsAtTopPosition )
00761     , mRightLeftLayout( rightLeftLayout )
00762     , mLayoutIsAtLeftPosition( layoutIsAtLeftPosition )
00763     , mTopBottomLayout( topBottomLayout )
00764 {
00765 }


Member Function Documentation

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

Definition at line 767 of file KDChartLayoutItems.cpp.

00768 {
00769     return 0; // Grow neither vertically nor horizontally
00770 }

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

Definition at line 772 of file KDChartLayoutItems.cpp.

00773 {
00774     return mRect;
00775 }

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

Definition at line 777 of file KDChartLayoutItems.cpp.

00778 {
00779     return true; // never empty, otherwise the layout item would not exist
00780 }

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

Definition at line 782 of file KDChartLayoutItems.cpp.

References sizeHint().

00783 {
00784     return sizeHint();
00785 }

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

Definition at line 787 of file KDChartLayoutItems.cpp.

References sizeHint().

00788 {
00789     return sizeHint();
00790 }

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

Implements KDChart::AbstractLayoutItem.

Definition at line 861 of file KDChartLayoutItems.cpp.

00862 {
00863     if( mParentLayout && mRect.isValid() && mCachedSize.isValid() &&
00864         mCommonBrush.style() != Qt::NoBrush )
00865     {
00866         QPoint p1( mRect.topLeft() );
00867         QPoint p2( mRect.bottomRight() );
00868         if( mLayoutIsAtLeftPosition )
00869             p1.rx() += mCachedSize.width() - mParentLayout->spacing();
00870         else
00871             p2.rx() -= mCachedSize.width() - mParentLayout->spacing();
00872         if( mLayoutIsAtTopPosition ){
00873             p1.ry() += mCachedSize.height() - mParentLayout->spacing() - 1;
00874             p2.ry() -= 1;
00875         }else
00876             p2.ry() -= mCachedSize.height() - mParentLayout->spacing() - 1;
00877         //qDebug() << mLayoutIsAtTopPosition << mLayoutIsAtLeftPosition;
00878         //qDebug() << mRect;
00879         //qDebug() << mParentLayout->margin();
00880         //qDebug() << QRect( p1, p2 );
00881         const QPoint oldBrushOrigin( painter->brushOrigin() );
00882         const QBrush oldBrush( painter->brush() );
00883         const QPen   oldPen(   painter->pen() );
00884         const QPointF newTopLeft( painter->deviceMatrix().map( p1 ) );
00885         painter->setBrushOrigin( newTopLeft );
00886         painter->setBrush( mCommonBrush );
00887         painter->setPen( Qt::NoPen );
00888         painter->drawRect( QRect( p1, p2 ) );
00889         painter->setBrushOrigin( oldBrushOrigin );
00890         painter->setBrush( oldBrush );
00891         painter->setPen( oldPen );
00892     }
00893     // debug code:
00894 #if 0
00895     //qDebug() << "KDChart::AutoSpacerLayoutItem::paint()";
00896     if( !mRect.isValid() )
00897         return;
00898 
00899     painter->drawRect( mRect );
00900     painter->drawLine( QPointF( mRect.x(), mRect.top() ),
00901                        QPointF( mRect.right(), mRect.bottom() ) );
00902     painter->drawLine( QPointF( mRect.right(), mRect.top() ),
00903                        QPointF( mRect.x(), mRect.bottom() ) );
00904 #endif
00905 }

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         }

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::AutoSpacerLayoutItem::setGeometry const QRect &  r  )  [virtual]
 

Definition at line 792 of file KDChartLayoutItems.cpp.

00793 {
00794     mRect = r;
00795 }

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 }

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

Definition at line 817 of file KDChartLayoutItems.cpp.

References KDChart::AbstractArea::bottomOverlap(), KDChart::AbstractArea::leftOverlap(), KDChart::AbstractArea::rightOverlap(), KDChart::AbstractArea::topOverlap(), and updateCommonBrush().

Referenced by maximumSize(), and minimumSize().

00818 {
00819     QBrush commonBrush;
00820     bool bStart=true;
00821     // calculate the maximal overlap of the top/bottom axes:
00822     int topBottomOverlap = 0;
00823     if( mTopBottomLayout ){
00824         for (int i = 0; i < mTopBottomLayout->count(); ++i){
00825             AbstractArea* area = dynamic_cast<AbstractArea*>(mTopBottomLayout->itemAt(i));
00826             if( area ){
00827                 //qDebug() << "AutoSpacerLayoutItem testing" << area;
00828                 topBottomOverlap =
00829                     mLayoutIsAtLeftPosition
00830                     ? qMax( topBottomOverlap, area->rightOverlap() )
00831                     : qMax( topBottomOverlap, area->leftOverlap() );
00832                 updateCommonBrush( commonBrush, bStart, *area );
00833             }
00834         }
00835     }
00836     // calculate the maximal overlap of the left/right axes:
00837     int leftRightOverlap = 0;
00838     if( mRightLeftLayout ){
00839         for (int i = 0; i < mRightLeftLayout->count(); ++i){
00840             AbstractArea* area = dynamic_cast<AbstractArea*>(mRightLeftLayout->itemAt(i));
00841             if( area ){
00842                 //qDebug() << "AutoSpacerLayoutItem testing" << area;
00843                 leftRightOverlap =
00844                         mLayoutIsAtTopPosition
00845                         ? qMax( leftRightOverlap, area->bottomOverlap() )
00846                         : qMax( leftRightOverlap, area->topOverlap() );
00847                 updateCommonBrush( commonBrush, bStart, *area );
00848             }
00849         }
00850     }
00851     if( topBottomOverlap > 0 && leftRightOverlap > 0 )
00852         mCommonBrush = commonBrush;
00853     else
00854         mCommonBrush = QBrush();
00855     mCachedSize = QSize( topBottomOverlap, leftRightOverlap );
00856     //qDebug() << mCachedSize;
00857     return mCachedSize;
00858 }

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 KDChart::TextLayoutItem::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 }


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:31 2007 for KD Chart 2 by doxygen 1.3.6