# KDChart::Legend Class Reference

`#include <KDChartLegend.h>`

Inheritance diagram for KDChart::Legend:

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

## Detailed Description

Legend defines the interface for the legend drawing class.

Legend is the class for drawing legends for all kinds of diagrams ("chart types").

Legend is drawn on chart level, not per diagram, but you can have more than one legend per chart, using KDChart::Chart::addLegend().

Note:
  Legend is different from all other classes ofd KD Chart, since it can be displayed outside of the Chart's area. If you want to, you can embedd the legend into your own widget, or into another part of a bigger grid, into which you might have inserted the Chart.

On the other hand, please note that you MUST call Chart::addLegend to get your legend positioned into the correct place of your chart - if you want to have the legend shown inside of the chart (that's probably true for most cases).

Definition at line 62 of file KDChartLegend.h.

## Public Types

enum | LegendStyle { MarkersOnly = 0, LinesOnly = 1, MarkersAndLines = 2 }

## Public Member Functions

void | activateTheLayout ()
void | addDiagram (KDChart::AbstractDiagram *newDiagram)
| Add the given diagram to the legend.
Qt::Alignment | alignment () const
| Returns the alignment of a non-floating legend.
void | alignToReferencePoint (const RelativePosition &position)
BackgroundAttributes | backgroundAttributes () const
QBrush | brush (uint dataset) const
const QMap< uint, QBrush > | brushes () const
void | buildLegend ()
virtual Legend * | clone () const
bool | compare (const AbstractAreaBase *other) const
| Returns true if both areas have the same settings.
bool | compare (const Legend *other) const
| Returns true if both axes have the same settings.
ConstDiagramList | constDiagrams () const
uint | datasetCount () const
KDChart::AbstractDiagram * | diagram () const
| The first diagram of the legend or 0 if there was none added to the legend.
DiagramList | diagrams () const
| The list of all diagrams associated with the legend.
const RelativePosition | floatingPosition () const
| Returns the position of a floating legend.
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
| Legend (KDChart::AbstractDiagram *diagram, QWidget *parent)
| Legend (QWidget *parent=0)
LegendStyle | legendStyle () const
const QMap< uint, MarkerAttributes > | markerAttributes () const
MarkerAttributes | markerAttributes (uint dataset) const
virtual QSize | minimumSizeHint () const
virtual void | needSizeHint ()
| Call this to trigger an conditional re-building of the widget's internals.
Qt::Orientation | orientation () const
virtual void | paint (QPainter *painter)
| 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().
QPen | pen (uint dataset) const
const QMap< uint, QPen > | pens () const
Position | position () const
| Returns the position of a non-floating legend.
void | propertiesChanged ()
| Emitted upon change of a property of the Legend or any of its components.
const QWidget * | referenceArea () const
| Returns the reference area, that is used for font size of title text, and for font size of the item texts, IF automatic area detection is set.
void | removeDiagram (KDChart::AbstractDiagram *oldDiagram)
| Removes the diagram from the legend's list of diagrams.
void | removeDiagrams ()
| Removes all of the diagram from the legend's list of diagrams.
void | replaceDiagram (KDChart::AbstractDiagram *newDiagram, KDChart::AbstractDiagram *oldDiagram=0)
| Replaces the old diagram, or appends the new diagram, it there is none yet.
void | resetDiagram (AbstractDiagram *)
void | resetTexts ()
| Removes all legend texts that might have been set by setText.
virtual void | resizeEvent (QResizeEvent *event)
virtual void | resizeLayout (const QSize &size)
void | setAlignment (Qt::Alignment)
| Specify the alignment of a non-floating legend.
void | setBackgroundAttributes (const BackgroundAttributes &a)
void | setBrush (uint dataset, const QBrush &brush)
void | setBrushesFromDiagram (KDChart::AbstractDiagram *diagram)
void | setColor (uint dataset, const QColor &color)
| Note: there is no color() getter method, since setColor just sets a QBrush with the respective color, so the brush() getter method is sufficient.
void | setDefaultColors ()
void | setDiagram (KDChart::AbstractDiagram *newDiagram)
| A convenience method doing the same as replaceDiagram( newDiagram, 0 );.
void | setFloatingPosition (const RelativePosition &relativePosition)
| Specify the position and alignment of a floating legend.
void | setFrameAttributes (const FrameAttributes &a)
void | setLegendStyle (LegendStyle style)
void | setMarkerAttributes (uint dataset, const MarkerAttributes &)
| Note that any sizes specified via setMarkerAttributes are ignored, unless you disable the automatic size calculation, by saying setUseAutomaticMarkerSize( false ).
void | setNeedRebuild ()
void | setOrientation (Qt::Orientation orientation)
void | setPen (uint dataset, const QPen &pen)
void | setPosition (Position position)
| Specify the position of a non-floating legend.
void | setRainbowColors ()
void | setReferenceArea (const QWidget *area)
| Specifies the reference area for font size of title text, and for font size of the item texts, IF automatic area detection is set.
void | setShowLines (bool legendShowLines)
void | setSpacing (uint space)
void | setSubduedColors (bool ordered=false)
void | setText (uint dataset, const QString &text)
void | setTextAttributes (const TextAttributes &a)
void | setTitleText (const QString &text)
void | setTitleTextAttributes (const TextAttributes &a)
void | setUseAutomaticMarkerSize (bool useAutomaticMarkerSize)
| This option is on by default, it means that Marker sizes in the Legend will be the same as the font height used for their respective label texts.
virtual void | setVisible (bool visible)
bool | showLines () const
virtual QSize | sizeHint () const
uint | spacing () const
QString | text (uint dataset) const
TextAttributes | textAttributes () const
const QMap< uint, QString > | texts () const
QString | titleText () const
TextAttributes | titleTextAttributes () const
bool | useAutomaticMarkerSize () const
virtual | ~Legend ()

## 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 destroyedLegend( Legend* )
private | Q_SLOTS: void emitPositionChanged()

## Protected Member Functions

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

## Member Enumeration Documentation

enum KDChart::Legend::LegendStyle

Enumeration values:

  MarkersOnly |
  LinesOnly |
  MarkersAndLines |

Definition at line 75 of file KDChartLegend.h.

Referenced by buildLegend().

    00075                      { MarkersOnly     = 0,
    00076                        LinesOnly       = 1,
    00077                        MarkersAndLines = 2 };

## Constructor & Destructor Documentation

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

Definition at line 85 of file KDChartLegend.cpp.

References d.

Referenced by clone().

    00085                                 :
    00086     AbstractAreaWidget( new Private(), parent )
    00087 {
    00088     d->referenceArea = parent;
    00089     init();
    00090 }

Legend::Legend | ( | KDChart::AbstractDiagram * | diagram,
|  | QWidget * | parent
| ) | `[explicit]`

Definition at line 92 of file KDChartLegend.cpp.

References d, and setDiagram().

    00092                                                                  :
    00093     AbstractAreaWidget( new Private(), parent )
    00094 {
    00095     d->referenceArea = parent;
    00096     init();
    00097     setDiagram( diagram );
    00098 }

Legend::~Legend | ( |  | ) | `[virtual]`

Definition at line 100 of file KDChartLegend.cpp.

    00101 {
    00102     emit destroyedLegend( this );
    00103 }

## Member Function Documentation

void Legend::activateTheLayout | ( |  | ) |

Definition at line 182 of file KDChartLegend.cpp.

References d.

Referenced by buildLegend(), and resizeLayout().

    00183 {
    00184     if( d->layout && d->layout->parent() )
    00185         d->layout->activate();
    00186 }

void Legend::addDiagram | ( | KDChart::AbstractDiagram * | newDiagram | ) |

Add the given diagram to the legend.

Parameters:

  newDiagram | The diagram to add.

See also:
  diagram, diagrams, removeDiagram, removeDiagrams, replaceDiagram, setDiagram

Definition at line 334 of file KDChartLegend.cpp.

References d, resetDiagram(), and setNeedRebuild().

Referenced by replaceDiagram().

    00335 {
    00336     if ( newDiagram )
    00337     {
    00338         DiagramObserver* observer = new DiagramObserver( newDiagram, this );
    00339
    00340         DiagramObserver* oldObs = d->findObserverForDiagram( newDiagram );
    00341         if( oldObs ){
    00342             delete oldObs;
    00343             d->observers[ d->observers.indexOf( oldObs ) ] = observer;
    00344         }else{
    00345             d->observers.append( observer );
    00346         }
    00347         connect( observer, SIGNAL( diagramDestroyed(AbstractDiagram*) ),
    00348                         SLOT( resetDiagram(AbstractDiagram*) ));
    00349         connect( observer, SIGNAL( diagramDataChanged(AbstractDiagram*) ),
    00350                  SLOT( setNeedRebuild() ));
    00351         connect( observer, SIGNAL( diagramDataHidden(AbstractDiagram*) ),
    00352                  SLOT( setNeedRebuild() ));
    00353         connect( observer, SIGNAL( diagramAttributesChanged(AbstractDiagram*) ),
    00354                         SLOT( setNeedRebuild() ));
    00355         setNeedRebuild();
    00356     }
    00357 }

Qt::Alignment Legend::alignment | ( |  | ) | const

Returns the alignment of a non-floating legend.

See also:
  setAlignment

Definition at line 443 of file KDChartLegend.cpp.

References d.

Referenced by clone().

    00444 {
    00445     return d->alignment;
    00446 }

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, inherited]`

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 }

QBrush Legend::brush | ( | uint | dataset | ) | const

Definition at line 549 of file KDChartLegend.cpp.

References d.

Referenced by buildLegend(), and setRainbowColors().

    00550 {
    00551     if( d->brushes.find( dataset ) != d->brushes.end() )
    00552         return d->brushes[ dataset ];
    00553     else
    00554         return d->modelBrushes[ dataset ];
    00555 }

const QMap< uint, QBrush > Legend::brushes | ( |  | ) | const

Definition at line 557 of file KDChartLegend.cpp.

References d.

    00558 {
    00559     return d->brushes;
    00560 }

void Legend::buildLegend | ( |  | ) |

Definition at line 770 of file KDChartLegend.cpp.

References activateTheLayout(), brush(), KDChart::TextAttributes::calculatedFontSize(), d, KDChart::AbstractDiagram::datasetBrushes(), KDChart::AbstractDiagram::datasetLabels(), KDChart::AbstractDiagram::datasetMarkers(), KDChart::AbstractDiagram::datasetPens(), diagram(), KDChart::AbstractDiagram::isHidden(), KDChart::TextAttributes::isVisible(), legendStyle(), LegendStyle, LinesOnly, markerAttributes(), MarkersAndLines, MarkersOnly, orientation(), pen(), propertiesChanged(), referenceArea(), KDChart::AbstractLayoutItem::setParentWidget(), showLines(), spacing(), text(), textAttributes(), titleText(), titleTextAttributes(), and useAutomaticMarkerSize().

Referenced by forceRebuild(), needSizeHint(), and setNeedRebuild().

    00771 {
    00772     /*
    00773     if( !d->needRebuild ) {
    00774 #ifdef DEBUG_LEGEND_PAINT
    00775         qDebug() << "leaving Legend::buildLegend() with NO action (was already build)";
    00776 #endif
    00777         // Note: We do *not* need to send positionChanged here,
    00778         //       because we send it in the resizeEvent, so layouting
    00779         //       is done at the right time.
    00780         return;
    00781     }
    00782 #ifdef DEBUG_LEGEND_PAINT
    00783     qDebug() << "entering Legend::buildLegend() **********************************";
    00784 #endif
    00785     d->needRebuild = false;
    00786     */
    00787
    00788     Q_FOREACH( QLayoutItem* layoutItem, d->layoutItems ) {
    00789         d->layout->removeItem( layoutItem );
    00790     }
    00791     qDeleteAll( d->layoutItems );
    00792     d->layoutItems.clear();
    00793
    00794     if( orientation() == Qt::Vertical ) {
    00795         d->layout->setColumnStretch( 4, 1 );
    00796     } else {
    00797         d->layout->setColumnStretch( 4, 0 );
    00798     }
    00799
    00800     d->modelLabels.clear();
    00801     d->modelBrushes.clear();
    00802     d->modelPens.clear();
    00803     d->modelMarkers.clear();
    00804     // retrieve the diagrams' settings for all non-hidden datasets
    00805     for (int i = 0; i < d->observers.size(); ++i){
    00806         const AbstractDiagram* diagram = d->observers.at(i)->diagram();
    00807         if( diagram ){
    00808             //qDebug() << "accessing" << diagram;
    00809             const QStringList             diagramLabels(  diagram->datasetLabels()  );
    00810             const QList<QBrush>           diagramBrushes( diagram->datasetBrushes() );
    00811             const QList<QPen>             diagramPens(    diagram->datasetPens()    );
    00812             const QList<MarkerAttributes> diagramMarkers( diagram->datasetMarkers() );
    00813             for ( int dataset = 0; dataset < diagramLabels.count(); dataset++ ) {
    00814                 // only show the label if the diagrams is NOT having the dataset set to hidden
    00815                 if( ! diagram->isHidden( dataset ) ){
    00816                     d->modelLabels  += diagramLabels[   dataset ];
    00817                     d->modelBrushes += diagramBrushes[  dataset ];
    00818                     d->modelPens    += diagramPens[     dataset ];
    00819                     d->modelMarkers += diagramMarkers[  dataset ];
    00820                 }
    00821             }
    00822         }
    00823     }
    00824
    00825     Q_ASSERT( d->modelLabels.count() == d->modelBrushes.count() );
    00826
    00827     // legend caption
    00828     if( !titleText().isEmpty() && titleTextAttributes().isVisible() ) {
    00829         // PENDING(kalle) Other properties!
    00830         KDChart::TextLayoutItem* titleItem =
    00831             new KDChart::TextLayoutItem( titleText(),
    00832                 titleTextAttributes(),
    00833                 referenceArea(),
    00834                 (orientation() == Qt::Vertical)
    00835                 ? KDChartEnums::MeasureOrientationMinimum
    00836                 : KDChartEnums::MeasureOrientationHorizontal,
    00837                 Qt::AlignCenter );
    00838         titleItem->setParentWidget( this );
    00839
    00840         d->layoutItems << titleItem;
    00841         if( orientation() == Qt::Vertical )
    00842             d->layout->addItem( titleItem, 0, 0, 1, 5, Qt::AlignCenter );
    00843         else
    00844             d->layout->addItem( titleItem, 0, 0, 1, d->modelLabels.count() ? (d->modelLabels.count()*4) : 1, Qt::AlignCenter );
    00845
    00846         // The line between the title and the legend items, if any.
    00847         if( showLines() && d->modelLabels.count() ) {
    00848             KDChart::HorizontalLineLayoutItem* lineItem = new KDChart::HorizontalLineLayoutItem();
    00849             d->layoutItems << lineItem;
    00850             if( orientation() == Qt::Vertical )
    00851                 d->layout->addItem( lineItem, 1, 0, 1, 5, Qt::AlignCenter );
    00852             else
    00853                 d->layout->addItem( lineItem, 1, 0, 1, d->modelLabels.count()*4, Qt::AlignCenter );
    00854         }
    00855     }
    00856
    00857     const KDChartEnums::MeasureOrientation orient =
    00858             (orientation() == Qt::Vertical)
    00859             ? KDChartEnums::MeasureOrientationMinimum
    00860             : KDChartEnums::MeasureOrientationHorizontal;
    00861     const TextAttributes labelAttrs( textAttributes() );
    00862     const qreal fontHeight = labelAttrs.calculatedFontSize( referenceArea(), orient );
    00863     const LegendStyle style = legendStyle();
    00864     //qDebug() << "fontHeight:" << fontHeight;
    00865
    00866     const bool bShowMarkers = (style != LinesOnly);
    00867
    00868     QSizeF maxMarkersSize(1.0, 1.0);
    00869     QVector <MarkerAttributes> markerAttrs( d->modelLabels.count() );
    00870     if( bShowMarkers ){
    00871         for ( int dataset = 0; dataset < d->modelLabels.count(); ++dataset ) {
    00872             markerAttrs[dataset] = markerAttributes( dataset );
    00873             QSizeF siz;
    00874             if( useAutomaticMarkerSize() ||
    00875                 ! markerAttrs[dataset].markerSize().isValid() )
    00876             {
    00877                 siz = QSizeF(fontHeight, fontHeight);
    00878                 markerAttrs[dataset].setMarkerSize( siz );
    00879             }else{
    00880                 siz = markerAttrs[dataset].markerSize();
    00881             }
    00882             maxMarkersSize =
    00883                     QSizeF(qMax(maxMarkersSize.width(),  siz.width()),
    00884                            qMax(maxMarkersSize.height(), siz.height()));
    00885         }
    00886     }
    00887
    00888     // If we show a marker on a line, we paint it after 4 pixels
    00889     // of the line have been painted. This allows to see the line style
    00890     // at the right side of the marker without the line needing to
    00891     // be too long.
    00892     // (having the marker in the middle of the line would require longer lines)
    00893     const int markerOffsOnLine = 8;
    00894
    00895     int maxLineLength = 18;
    00896     {
    00897         bool hasComplexPenStyle = false;
    00898         for ( int dataset = 0; dataset < d->modelLabels.count(); ++dataset ){
    00899             const QPen pn = pen(dataset);
    00900             const Qt::PenStyle ps = pn.style();
    00901             if( ps != Qt::NoPen ){
    00902                 maxLineLength = qMax( pn.width() * 18, maxLineLength );
    00903                 if( ps != Qt::SolidLine )
    00904                     hasComplexPenStyle = true;
    00905             }
    00906         }
    00907         if( hasComplexPenStyle && bShowMarkers )
    00908             maxLineLength =
    00909                     maxLineLength + markerOffsOnLine +
    00910                     static_cast<int>(maxMarkersSize.width());
    00911     }
    00912
    00913     for ( int dataset = 0; dataset < d->modelLabels.count(); ++dataset ) {
    00914         KDChart::AbstractLayoutItem* markerLineItem = 0;
    00915         switch( style ){
    00916             case( MarkersOnly ):
    00917                 markerLineItem = new KDChart::MarkerLayoutItem(
    00918                         diagram(),
    00919                         markerAttrs[dataset],
    00920                         brush( dataset ),
    00921                         pen( dataset ),
    00922                         Qt::AlignLeft );
    00923                 break;
    00924             case( LinesOnly ):
    00925                 markerLineItem = new KDChart::LineLayoutItem(
    00926                         diagram(),
    00927                         maxLineLength,
    00928                         pen( dataset ),
    00929                         Qt::AlignCenter );
    00930                 break;
    00931             case( MarkersAndLines ):
    00932                 markerLineItem = new KDChart::LineWithMarkerLayoutItem(
    00933                         diagram(),
    00934                         maxLineLength,
    00935                         pen( dataset ),
    00936                         markerOffsOnLine,
    00937                         markerAttrs[dataset],
    00938                         brush( dataset ),
    00939                         pen( dataset ),
    00940                         Qt::AlignCenter );
    00941                 break;
    00942             default:
    00943                 Q_ASSERT( false ); // all styles need to be handled
    00944         }
    00945         if( markerLineItem ){
    00946             d->layoutItems << markerLineItem;
    00947             if( orientation() == Qt::Vertical )
    00948                 d->layout->addItem( markerLineItem,
    00949                                     dataset*2+2, // first row is title, second is line
    00950                                     1,
    00951                                     1, 1, Qt::AlignCenter );
    00952             else
    00953                 d->layout->addItem( markerLineItem,
    00954                                     2, // all in row two
    00955                                     dataset*4 );
    00956         }
    00957
    00958         // PENDING(kalle) Other properties!
    00959         KDChart::TextLayoutItem* labelItem =
    00960             new KDChart::TextLayoutItem( text( dataset ),
    00961                 labelAttrs,
    00962                 referenceArea(), orient,
    00963                 Qt::AlignLeft );
    00964         labelItem->setParentWidget( this );
    00965
    00966         d->layoutItems << labelItem;
    00967         if( orientation() == Qt::Vertical )
    00968             d->layout->addItem( labelItem,
    00969                                 dataset*2+2, // first row is title, second is line
    00970                                 3 );
    00971         else
    00972             d->layout->addItem( labelItem,
    00973                                 2, // all in row two
    00974                                 dataset*4+1 );
    00975
    00976         // horizontal lines (only in vertical mode, and not after the last item)
    00977         if( orientation() == Qt::Vertical && showLines() && dataset != d->modelLabels.count()-1 ) {
    00978             KDChart::HorizontalLineLayoutItem* lineItem = new KDChart::HorizontalLineLayoutItem();
    00979             d->layoutItems << lineItem;
    00980             d->layout->addItem( lineItem,
    00981                                 dataset*2+1+2,
    00982                                 0,
    00983                                 1, 5, Qt::AlignCenter );
    00984         }
    00985
    00986         // vertical lines (only in horizontal mode, and not after the last item)
    00987         if( orientation() == Qt::Horizontal && showLines() && dataset != d->modelLabels.count()-1 ) {
    00988             KDChart::VerticalLineLayoutItem* lineItem = new KDChart::VerticalLineLayoutItem();
    00989             d->layoutItems << lineItem;
    00990             d->layout->addItem( lineItem,
    00991                                 2, // all in row two
    00992                                 style == MarkersAndLines ? dataset*4+3 : dataset*4+2 ,
    00993                                 1, 1, Qt::AlignCenter );
    00994         }
    00995
    00996         if( orientation() != Qt::Vertical ) { // Horizontal needs a spacer
    00997             d->layout->addItem( new QSpacerItem( spacing(), 1 ),
    00998                                 2, // all in row two
    00999                                 dataset*4+3 );
    01000         }
    01001     }
    01002
    01003     // vertical line (only in vertical mode)
    01004     if( orientation() == Qt::Vertical && showLines() && d->modelLabels.count() ) {
    01005         KDChart::VerticalLineLayoutItem* lineItem = new KDChart::VerticalLineLayoutItem();
    01006         d->layoutItems << lineItem;
    01007         d->layout->addItem( lineItem, 2, 2, d->modelLabels.count()*2, 1 );
    01008     }
    01009
    01010     // This line is absolutely necessary, otherwise: #2516.
    01011     activateTheLayout();
    01012
    01013     emit propertiesChanged();
    01014     //emit positionChanged( this );
    01015     //emitPositionChanged();
    01016 #ifdef DEBUG_LEGEND_PAINT
    01017     qDebug() << "leaving Legend::buildLegend()";
    01018 #endif
    01019 }

Legend * Legend::clone | ( |  | ) | const`[virtual]`

Definition at line 201 of file KDChartLegend.cpp.

References alignment(), d, KDChart::AbstractAreaBase::frameAttributes(), Legend(), legendStyle(), position(), setAlignment(), KDChart::AbstractAreaBase::setFrameAttributes(), setLegendStyle(), setPosition(), setTextAttributes(), setTitleTextAttributes(), setUseAutomaticMarkerSize(), textAttributes(), titleTextAttributes(), and useAutomaticMarkerSize().

    00202 {
    00203     Legend* legend = new Legend( new Private( *d ), 0 );
    00204     legend->setTextAttributes( textAttributes() );
    00205     legend->setTitleTextAttributes( titleTextAttributes() );
    00206     legend->setFrameAttributes( frameAttributes() );
    00207     legend->setUseAutomaticMarkerSize( useAutomaticMarkerSize() );
    00208     legend->setPosition( position() );
    00209     legend->setAlignment( alignment() );
    00210     legend->setLegendStyle( legendStyle() );
    00211     return legend;
    00212 }

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 }

bool Legend::compare | ( | const Legend * | other | ) | const

Returns true if both axes have the same settings.

Definition at line 215 of file KDChartLegend.cpp.

    00216 {
    00217     if( other == this ) return true;
    00218     if( ! other ){
    00219         //qDebug() << "Legend::compare() cannot compare to Null pointer";
    00220         return false;
    00221     }
    00222     /*
    00223     qDebug() << ( static_cast<const AbstractAreaBase*>(this)->compare( other ) );
    00224     qDebug() << (isVisible()              == other->isVisible());
    00225     qDebug() << (position()               == other->position());
    00226     qDebug() << (alignment()              == other->alignment());
    00227     qDebug() << (floatingPosition()       == other->floatingPosition());
    00228     qDebug() << (orientation()            == other->orientation());
    00229     qDebug() << (showLines()              == other->showLines());
    00230     qDebug() << (texts()                  == other->texts());
    00231     qDebug() << (brushes()                == other->brushes());
    00232     qDebug() << (pens()                   == other->pens());
    00233     qDebug() << (markerAttributes()       == other->markerAttributes());
    00234     qDebug() << (useAutomaticMarkerSize() == other->useAutomaticMarkerSize());
    00235     qDebug() << (textAttributes()         == other->textAttributes());
    00236     qDebug() << (titleText()              == other->titleText());
    00237     qDebug() << (titleTextAttributes()    == other->titleTextAttributes());
    00238     qDebug() << (spacing()                == other->spacing());
    00239     qDebug() << (legendStyle()            == other->legendStyle());
    00240     */
    00241     return  ( static_cast<const AbstractAreaBase*>(this)->compare( other ) ) &&
    00242             (isVisible()              == other->isVisible()) &&
    00243             (position()               == other->position()) &&
    00244             (alignment()              == other->alignment())&&
    00245             (floatingPosition()       == other->floatingPosition()) &&
    00246             (orientation()            == other->orientation())&&
    00247             (showLines()              == other->showLines())&&
    00248             (texts()                  == other->texts())&&
    00249             (brushes()                == other->brushes())&&
    00250             (pens()                   == other->pens())&&
    00251             (markerAttributes()       == other->markerAttributes())&&
    00252             (useAutomaticMarkerSize() == other->useAutomaticMarkerSize()) &&
    00253             (textAttributes()         == other->textAttributes()) &&
    00254             (titleText()              == other->titleText())&&
    00255             (titleTextAttributes()    == other->titleTextAttributes()) &&
    00256             (spacing()                == other->spacing()) &&
    00257             (legendStyle()            == other->legendStyle());
    00258 }

ConstDiagramList Legend::constDiagrams | ( |  | ) | const

Returns:
  The list of diagrams associated with this coordinate plane.

Definition at line 326 of file KDChartLegend.cpp.

References KDChart::ConstDiagramList, and d.

    00327 {
    00328     ConstDiagramList list;
    00329     for (int i = 0; i < d->observers.size(); ++i)
    00330         list << d->observers.at(i)->diagram();
    00331     return list;
    00332 }

uint Legend::datasetCount | ( |  | ) | const

Definition at line 283 of file KDChartLegend.cpp.

References d, KDChart::AbstractDiagram::datasetBrushes(), KDChart::AbstractDiagram::datasetLabels(), and KDChart::DiagramObserver::diagram().

    00284 {
    00285     int modelLabelsCount = 0;
    00286     int modelBrushesCount = 0;
    00287     for (int i = 0; i < d->observers.size(); ++i) {
    00288         DiagramObserver * obs = d->observers.at(i);
    00289         modelLabelsCount  += obs->diagram()->datasetLabels().count();
    00290         modelBrushesCount += obs->diagram()->datasetBrushes().count();
    00291     }
    00292     Q_ASSERT( modelLabelsCount == modelBrushesCount );
    00293     return modelLabelsCount;
    00294 }

AbstractDiagram * Legend::diagram | ( |  | ) | const

The first diagram of the legend or 0 if there was none added to the legend.

Returns:
  The first diagram of the legend or 0.

See also:
  diagrams, addDiagram, removeDiagram, removeDiagrams, replaceDiagram, setDiagram

Definition at line 311 of file KDChartLegend.cpp.

References d.

Referenced by buildLegend(), and paint().

    00312 {
    00313     if( d->observers.isEmpty() )
    00314         return 0;
    00315     return d->observers.first()->diagram();
    00316 }

DiagramList Legend::diagrams | ( |  | ) | const

The list of all diagrams associated with the legend.

Returns:
  The list of all diagrams associated with the legend.

See also:
  diagram, addDiagram, removeDiagram, removeDiagrams, replaceDiagram, setDiagram

Definition at line 318 of file KDChartLegend.cpp.

References d, and KDChart::DiagramList.

    00319 {
    00320     DiagramList list;
    00321     for (int i = 0; i < d->observers.size(); ++i)
    00322         list << d->observers.at(i)->diagram();
    00323     return list;
    00324 }

const RelativePosition Legend::floatingPosition | ( |  | ) | const

Returns the position of a floating legend.

See also:
  setFloatingPosition

Definition at line 457 of file KDChartLegend.cpp.

References d.

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

    00458 {
    00459     return d->relativePosition;
    00460 }

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

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

Reimplemented from KDChart::AbstractAreaWidget.

Definition at line 657 of file KDChartLegend.cpp.

References buildLegend().

Referenced by resizeEvent().

    00658 {
    00659 #ifdef DEBUG_LEGEND_PAINT
    00660     qDebug() << "entering Legend::forceRebuild()";
    00661 #endif
    00662     //setSpacing(d->layout->spacing());
    00663     buildLegend();
    00664 #ifdef DEBUG_LEGEND_PAINT
    00665     qDebug() << "leaving Legend::forceRebuild()";
    00666 #endif
    00667 }

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

Definition at line 102 of file KDChartAbstractAreaBase.cpp.

References d.

Referenced by 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 KDChart::AbstractAreaWidget::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 }

Legend::LegendStyle Legend::legendStyle | ( |  | ) | const

Definition at line 196 of file KDChartLegend.cpp.

References d.

Referenced by buildLegend(), and clone().

    00197 {
    00198     return d->legendStyle;
    00199 }

const QMap< uint, MarkerAttributes > Legend::markerAttributes | ( |  | ) | const

Definition at line 615 of file KDChartLegend.cpp.

References d.

Referenced by buildLegend().

    00616 {
    00617     return d->markerAttributes;
    00618 }

MarkerAttributes Legend::markerAttributes | ( | uint | dataset | ) | const

Definition at line 606 of file KDChartLegend.cpp.

References d.

    00607 {
    00608     if( d->markerAttributes.find( dataset ) != d->markerAttributes.end() )
    00609         return d->markerAttributes[ dataset ];
    00610     else if ( static_cast<uint>( d->modelMarkers.count() ) > dataset )
    00611         return d->modelMarkers[ dataset ];
    00612     return MarkerAttributes();
    00613 }

QSize Legend::minimumSizeHint | ( |  | ) | const`[virtual]`

Definition at line 143 of file KDChartLegend.cpp.

References sizeHint().

    00144 {
    00145     return sizeHint();
    00146 }

void Legend::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 from KDChart::AbstractAreaWidget.

Definition at line 161 of file KDChartLegend.cpp.

References buildLegend().

    00162 {
    00163     // Re-build the Legend's content, if it has not been build yet,
    00164     // or if the Legend's geometry has changed, resp.
    00165     buildLegend();
    00166 }

Qt::Orientation Legend::orientation | ( |  | ) | const

Definition at line 470 of file KDChartLegend.cpp.

References d.

Referenced by buildLegend().

    00471 {
    00472     return d->orientation;
    00473 }

void Legend::paint | ( | QPainter * | painter | ) | `[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

Implements KDChart::AbstractAreaWidget.

Definition at line 261 of file KDChartLegend.cpp.

References d, diagram(), and KDChart::AbstractLayoutItem::paint().

    00262 {
    00263 #ifdef DEBUG_LEGEND_PAINT
    00264     qDebug() << "entering Legend::paint( QPainter* painter )";
    00265 #endif
    00266     // rule: We do not show a legend, if there is no diagram.
    00267     if( ! diagram() ) return;
    00268
    00269     // re-calculate/adjust the Legend's internal layout and contents, if needed:
    00270     //buildLegend();
    00271
    00272     // PENDING(kalle) Support palette
    00273
    00274     Q_FOREACH( KDChart::AbstractLayoutItem* layoutItem, d->layoutItems ) {
    00275         layoutItem->paint( painter );
    00276     }
    00277 #ifdef DEBUG_LEGEND_PAINT
    00278     qDebug() << "leaving Legend::paint( QPainter* painter )";
    00279 #endif
    00280 }

void AbstractAreaWidget::paintAll | ( | QPainter & | painter | ) | `[inherited]`

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(), KDChart::AbstractAreaWidget::paint(), KDChart::AbstractAreaBase::paintBackground(), and KDChart::AbstractAreaBase::paintFrame().

Referenced by KDChart::AbstractAreaWidget::paintEvent(), and KDChart::AbstractAreaWidget::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(), KDChart::AbstractAreaWidget::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, inherited]`

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 KDChart::AbstractAreaWidget::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(), KDChart::AbstractAreaWidget::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, inherited]`

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

QPen Legend::pen | ( | uint | dataset | ) | const

Definition at line 585 of file KDChartLegend.cpp.

References d.

Referenced by buildLegend().

    00586 {
    00587     if( d->pens.find( dataset ) != d->pens.end() )
    00588         return d->pens[dataset];
    00589     else
    00590         return d->modelPens[ dataset ];
    00591 }

const QMap< uint, QPen > Legend::pens | ( |  | ) | const

Definition at line 593 of file KDChartLegend.cpp.

References d.

    00594 {
    00595     return d->pens;
    00596 }

Position Legend::position | ( |  | ) | const

Returns the position of a non-floating legend.

See also:
  setPosition

Definition at line 432 of file KDChartLegend.cpp.

References d.

Referenced by clone(), and KDChart::Chart::reLayoutFloatingLegends().

    00433 {
    00434     return d->position;
    00435 }

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

Reimplemented from KDChart::AbstractAreaBase.

Definition at line 191 of file KDChartAbstractAreaWidget.cpp.

    00192 {
    00193     emit positionChanged( this );
    00194 }

void KDChart::Legend::propertiesChanged | ( |  | ) |

| Emitted upon change of a property of the Legend or any of its components. Referenced by buildLegend().

const QWidget * Legend::referenceArea | ( |  | ) | const

Returns the reference area, that is used for font size of title text, and for font size of the item texts, IF automatic area detection is set.

See also:
  setReferenceArea

Definition at line 304 of file KDChartLegend.cpp.

References d.

Referenced by buildLegend().

    00305 {
    00306     //qDebug() << d->referenceArea;
    00307     return (d->referenceArea ? d->referenceArea : static_cast<const QWidget*>(parent()));
    00308 }

void Legend::removeDiagram | ( | KDChart::AbstractDiagram * | oldDiagram | ) |

Removes the diagram from the legend's list of diagrams.

See also:
  diagram, diagrams, addDiagram, removeDiagrams, replaceDiagram, setDiagram

Definition at line 359 of file KDChartLegend.cpp.

References d, and setNeedRebuild().

Referenced by removeDiagrams(), replaceDiagram(), and resetDiagram().

    00360 {
    00361     if( oldDiagram ){
    00362         DiagramObserver* oldObs = d->findObserverForDiagram( oldDiagram );
    00363         if( oldObs ){
    00364             //qDebug() << "before delete oldObs;";
    00365             delete oldObs;
    00366             //qDebug() << "after delete oldObs;";
    00367             d->observers.removeAt( d->observers.indexOf( oldObs ) );
    00368             //qDebug() << "after d->observers.removeAt()";
    00369         }
    00370         setNeedRebuild();
    00371     }
    00372 }

void Legend::removeDiagrams | ( |  | ) |

Removes all of the diagram from the legend's list of diagrams.

See also:
  diagram, diagrams, addDiagram, removeDiagram, replaceDiagram, setDiagram

Definition at line 374 of file KDChartLegend.cpp.

References d, and removeDiagram().

    00375 {
    00376     for (int i = 0; i < d->observers.size(); ++i)
    00377         removeDiagram( d->observers.at(i)->diagram() );
    00378 }

void Legend::replaceDiagram | ( | KDChart::AbstractDiagram * | newDiagram,
|  | KDChart::AbstractDiagram * | oldDiagram = 0
| ) |

Replaces the old diagram, or appends the new diagram, it there is none yet.

Parameters:

  newDiagram | The diagram to be used instead of the old one. If this parameter is zero, the first diagram will just be removed.
  oldDiagram | The diagram to be removed by the new one. This diagram will be deleted automatically. If the parameter is omitted, the very first diagram will be replaced. In case, there was no diagram yet, the new diagram will just be added.

See also:
  diagram, diagrams, addDiagram, removeDiagram, removeDiagrams, setDiagram

Definition at line 380 of file KDChartLegend.cpp.

References addDiagram(), d, and removeDiagram().

Referenced by setDiagram().

    00382 {
    00383     KDChart::AbstractDiagram* old = oldDiagram;
    00384     if( ! d->observers.isEmpty() && ! old ){
    00385         old = d->observers.first()->diagram();
    00386         if( ! old )
    00387             d->observers.removeFirst(); // first entry had a 0 diagram
    00388     }
    00389     if( old )
    00390         removeDiagram( old );
    00391     if( newDiagram )
    00392         addDiagram( newDiagram );
    00393 }

void Legend::resetDiagram | ( | AbstractDiagram * |  | ) |

Definition at line 400 of file KDChartLegend.cpp.

References removeDiagram().

Referenced by addDiagram().

    00401 {
    00402     //qDebug() << oldDiagram;
    00403     removeDiagram( oldDiagram );
    00404 }

void Legend::resetTexts | ( |  | ) |

Removes all legend texts that might have been set by setText.

This resets the Legend to default behaviour: Texts are created automatically.

Definition at line 505 of file KDChartLegend.cpp.

References d, and setNeedRebuild().

    00506 {
    00507     if( ! d->texts.count() ) return;
    00508     d->texts.clear();
    00509     setNeedRebuild();
    00510 }

void Legend::resizeEvent | ( | QResizeEvent * | event | ) | `[virtual]`

Definition at line 760 of file KDChartLegend.cpp.

References forceRebuild(), and sizeHint().

    00761 {
    00762 #ifdef DEBUG_LEGEND_PAINT
    00763     qDebug() << "Legend::resizeEvent() called";
    00764 #endif
    00765     forceRebuild();
    00766     sizeHint();
    00767     QTimer::singleShot(0, this, SLOT(emitPositionChanged()));
    00768 }

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

Reimplemented from KDChart::AbstractAreaWidget.

Definition at line 168 of file KDChartLegend.cpp.

References activateTheLayout(), and d.

    00169 {
    00170 #ifdef DEBUG_LEGEND_PAINT
    00171     qDebug() << "Legend::resizeLayout started";
    00172 #endif
    00173     if( d->layout ){
    00174         d->layout->setGeometry( QRect(QPoint(0,0), size) );
    00175         activateTheLayout();
    00176     }
    00177 #ifdef DEBUG_LEGEND_PAINT
    00178     qDebug() << "Legend::resizeLayout done";
    00179 #endif
    00180 }

void Legend::setAlignment | ( | Qt::Alignment |  | ) |

Specify the alignment of a non-floating legend.

Use setFloatingPosition to set position and alignment if your legend is floating.

See also:
  alignment, setPosition, setFloatingPosition

Definition at line 437 of file KDChartLegend.cpp.

References d.

Referenced by clone().

    00438 {
    00439     d->alignment = alignment;
    00440     emitPositionChanged();
    00441 }

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

Definition at line 107 of file KDChartAbstractAreaBase.cpp.

References d.

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

void Legend::setBrush | ( | uint | dataset,
|  | const QBrush & | brush
| ) |

Definition at line 542 of file KDChartLegend.cpp.

References d, and setNeedRebuild().

    00543 {
    00544     if( d->brushes[ dataset ] == brush ) return;
    00545     d->brushes[ dataset ] = brush;
    00546     setNeedRebuild();
    00547 }

void Legend::setBrushesFromDiagram | ( | KDChart::AbstractDiagram * | diagram | ) |

Definition at line 563 of file KDChartLegend.cpp.

References d, KDChart::AbstractDiagram::datasetBrushes(), and setNeedRebuild().

    00564 {
    00565     bool bChangesDone = false;
    00566     QList<QBrush> datasetBrushes = diagram->datasetBrushes();
    00567     for( int i = 0; i < datasetBrushes.count(); i++ ){
    00568         if( d->brushes[ i ] != datasetBrushes[ i ] ){
    00569             d->brushes[ i ]  = datasetBrushes[ i ];
    00570             bChangesDone = true;
    00571         }
    00572     }
    00573     if( bChangesDone )
    00574         setNeedRebuild();
    00575 }

void Legend::setColor | ( | uint | dataset,
|  | const QColor & | color
| ) |

Note: there is no color() getter method, since setColor just sets a QBrush with the respective color, so the brush() getter method is sufficient.

Definition at line 535 of file KDChartLegend.cpp.

References d, and setNeedRebuild().

Referenced by setDefaultColors(), setRainbowColors(), and setSubduedColors().

    00536 {
    00537     if( d->brushes[ dataset ] == color ) return;
    00538     d->brushes[ dataset ] = color;
    00539     setNeedRebuild();
    00540 }

void Legend::setDefaultColors | ( |  | ) |

Definition at line 682 of file KDChartLegend.cpp.

References setColor().

    00683 {
    00684     setColor(  0, Qt::red );
    00685     setColor(  1, Qt::green );
    00686     setColor(  2, Qt::blue );
    00687     setColor(  3, Qt::cyan );
    00688     setColor(  4, Qt::magenta );
    00689     setColor(  5, Qt::yellow );
    00690     setColor(  6, Qt::darkRed );
    00691     setColor(  7, Qt::darkGreen );
    00692     setColor(  8, Qt::darkBlue );
    00693     setColor(  9, Qt::darkCyan );
    00694     setColor( 10, Qt::darkMagenta );
    00695     setColor( 11, Qt::darkYellow );
    00696 }

void Legend::setDiagram | ( | KDChart::AbstractDiagram * | newDiagram | ) |

A convenience method doing the same as replaceDiagram( newDiagram, 0 );.

Replaces the first diagram by the given diagram. If the legend's list of diagram is empty the given diagram is added to the list.

See also:
  diagram, diagrams, addDiagram, removeDiagram, removeDiagrams, replaceDiagram

Definition at line 395 of file KDChartLegend.cpp.

References replaceDiagram().

Referenced by KDChart::Widget::addLegend(), Legend(), and KDChart::Widget::replaceLegend().

    00396 {
    00397     replaceDiagram( newDiagram );
    00398 }

void Legend::setFloatingPosition | ( | const RelativePosition & | relativePosition | ) |

Specify the position and alignment of a floating legend.

Use setPosition and setAlignment to set position and alignment if your legend is non-floating.

Note:
  When setFloatingPosition is called, the Legend's position value is set to KDChart::Position::Floating automatically.

If your Chart is pointed to by m_chart, your could have the floating legend alligned exactly to the chart's coordinate plane's top-right corner with the following commands:

    KDChart::RelativePosition relativePosition;
    relativePosition.setReferenceArea( m_chart->coordinatePlane() );
    relativePosition.setReferencePosition( Position::NorthEast );
    relativePosition.setAlignment( Qt::AlignTop | Qt::AlignRight );
    relativePosition.setHorizontalPadding(
        KDChart::Measure( -1.0, KDChartEnums::MeasureCalculationModeAbsolute ) );
    relativePosition.setVerticalPadding(
        KDChart::Measure( 0.0, KDChartEnums::MeasureCalculationModeAbsolute ) );
    m_legend->setFloatingPosition( relativePosition );

To have the legend positioned at a fixed point, measured from the QPainter's top left corner, you could use the following code code:

    KDChart::RelativePosition relativePosition;
    relativePosition.setReferencePoints( PositionPoints( QPointF( 0.0, 0.0 ) ) );
    relativePosition.setReferencePosition( Position::NorthWest );
    relativePosition.setAlignment( Qt::AlignTop | Qt::AlignLeft );
    relativePosition.setHorizontalPadding(
        KDChart::Measure( 4.0, KDChartEnums::MeasureCalculationModeAbsolute ) );
    relativePosition.setVerticalPadding(
        KDChart::Measure( 4.0, KDChartEnums::MeasureCalculationModeAbsolute ) );
    m_legend->setFloatingPosition( relativePosition );

Actually that's exactly the code KD Chart is using as default position for any floating legends, so if you just say setPosition( KDChart::Position::Floating ) without calling setFloatingPosition your legend will be positioned at point 4/4.

See also:
  setPosition, setAlignment

Definition at line 448 of file KDChartLegend.cpp.

References d.

    00449 {
    00450     d->position = Position::Floating;
    00451     if( d->relativePosition != relativePosition ){
    00452         d->relativePosition  = relativePosition;
    00453         emitPositionChanged();
    00454     }
    00455 }

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

Definition at line 97 of file KDChartAbstractAreaBase.cpp.

References d.

Referenced by clone().

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

void Legend::setLegendStyle | ( | LegendStyle | style | ) |

Definition at line 189 of file KDChartLegend.cpp.

References d, and setNeedRebuild().

Referenced by clone().

    00190 {
    00191     if( d->legendStyle == style ) return;
    00192     d->legendStyle = style;
    00193     setNeedRebuild();
    00194 }

void Legend::setMarkerAttributes | ( | uint | dataset,
|  | const MarkerAttributes & |
| ) |

Note that any sizes specified via setMarkerAttributes are ignored, unless you disable the automatic size calculation, by saying setUseAutomaticMarkerSize( false ).

Definition at line 599 of file KDChartLegend.cpp.

References d, and setNeedRebuild().

    00600 {
    00601     if( d->markerAttributes[dataset] == markerAttributes ) return;
    00602     d->markerAttributes[ dataset ] = markerAttributes;
    00603     setNeedRebuild();
    00604 }

void Legend::setNeedRebuild | ( |  | ) |

Definition at line 412 of file KDChartLegend.cpp.

References buildLegend(), and sizeHint().

Referenced by addDiagram(), removeDiagram(), resetTexts(), setBrush(), setBrushesFromDiagram(), setColor(), setLegendStyle(), setMarkerAttributes(), setOrientation(), setPen(), setReferenceArea(), setShowLines(), setSpacing(), setText(), setTextAttributes(), setTitleText(), setTitleTextAttributes(), and setUseAutomaticMarkerSize().

    00413 {
    00414     //qDebug() << "setNeedRebuild()";
    00415     buildLegend();
    00416     sizeHint();
    00417 }

void Legend::setOrientation | ( | Qt::Orientation | orientation | ) |

Definition at line 462 of file KDChartLegend.cpp.

References d, and setNeedRebuild().

    00463 {
    00464     if( d->orientation == orientation ) return;
    00465     d->orientation = orientation;
    00466     setNeedRebuild();
    00467     emitPositionChanged();
    00468 }

void Legend::setPen | ( | uint | dataset,
|  | const QPen & | pen
| ) |

Definition at line 578 of file KDChartLegend.cpp.

References d, and setNeedRebuild().

    00579 {
    00580     if( d->pens[dataset] == pen ) return;
    00581     d->pens[dataset] = pen;
    00582     setNeedRebuild();
    00583 }

void Legend::setPosition | ( | Position | position | ) |

Specify the position of a non-floating legend.

Use setFloatingPosition to set position and alignment if your legend is floating.

See also:
  setAlignment, setFloatingPosition

Definition at line 419 of file KDChartLegend.cpp.

References d.

Referenced by KDChart::Widget::addLegend(), and clone().

    00420 {
    00421     d->position = position;
    00422     emitPositionChanged();
    00423 }

void Legend::setRainbowColors | ( |  | ) |

Definition at line 698 of file KDChartLegend.cpp.

References brush(), and setColor().

    00699 {
    00700     setColor(  0, QColor(255,  0,196) );
    00701     setColor(  1, QColor(255,  0, 96) );
    00702     setColor(  2, QColor(255, 128,64) );
    00703     setColor(  3, Qt::yellow );
    00704     setColor(  4, Qt::green );
    00705     setColor(  5, Qt::cyan );
    00706     setColor(  6, QColor( 96, 96,255) );
    00707     setColor(  7, QColor(160,  0,255) );
    00708     for( int i = 8; i < 16; ++i )
    00709         setColor( i, brush( i - 8 ).color().light() );
    00710 }

void Legend::setReferenceArea | ( | const QWidget * | area | ) |

Specifies the reference area for font size of title text, and for font size of the item texts, IF automatic area detection is set.

Note:
  This parameter is ignored, if the Measure given for setTitleTextAttributes (or setTextAttributes, resp.) is not specifying automatic area detection.

If no reference area is specified, but automatic area detection is set, then the size of the legend's parent widget will be used.

See also:
  KDChart::Measure, KDChartEnums::MeasureCalculationMode

Definition at line 297 of file KDChartLegend.cpp.

References d, and setNeedRebuild().

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

    00298 {
    00299     if( area == d->referenceArea ) return;
    00300     d->referenceArea = area;
    00301     setNeedRebuild();
    00302 }

void Legend::setShowLines | ( | bool | legendShowLines | ) |

Definition at line 475 of file KDChartLegend.cpp.

References d, and setNeedRebuild().

    00476 {
    00477     if( d->showLines == legendShowLines ) return;
    00478     d->showLines = legendShowLines;
    00479     setNeedRebuild();
    00480     emitPositionChanged();
    00481 }

void Legend::setSpacing | ( | uint | space | ) |

Definition at line 669 of file KDChartLegend.cpp.

References d, and setNeedRebuild().

    00670 {
    00671     if( d->spacing == space && d->layout->spacing() == static_cast<int>(space) ) return;
    00672     d->spacing = space;
    00673     d->layout->setSpacing( space );
    00674     setNeedRebuild();
    00675 }

void Legend::setSubduedColors | ( | bool | ordered = false | ) |

Definition at line 712 of file KDChartLegend.cpp.

References setColor().

    00713 {
    00714 static const int NUM_SUBDUEDCOLORS = 18;
    00715 static const QColor SUBDUEDCOLORS[ NUM_SUBDUEDCOLORS ] = {
    00716     QColor( 0xe0,0x7f,0x70 ),
    00717     QColor( 0xe2,0xa5,0x6f ),
    00718     QColor( 0xe0,0xc9,0x70 ),
    00719     QColor( 0xd1,0xe0,0x70 ),
    00720     QColor( 0xac,0xe0,0x70 ),
    00721     QColor( 0x86,0xe0,0x70 ),
    00722     QColor( 0x70,0xe0,0x7f ),
    00723     QColor( 0x70,0xe0,0xa4 ),
    00724     QColor( 0x70,0xe0,0xc9 ),
    00725     QColor( 0x70,0xd1,0xe0 ),
    00726     QColor( 0x70,0xac,0xe0 ),
    00727     QColor( 0x70,0x86,0xe0 ),
    00728     QColor( 0x7f,0x70,0xe0 ),
    00729     QColor( 0xa4,0x70,0xe0 ),
    00730     QColor( 0xc9,0x70,0xe0 ),
    00731     QColor( 0xe0,0x70,0xd1 ),
    00732     QColor( 0xe0,0x70,0xac ),
    00733     QColor( 0xe0,0x70,0x86 ),
    00734 };
    00735     if( ordered )
    00736         for(int i=0; i<NUM_SUBDUEDCOLORS; ++i)
    00737             setColor( i, SUBDUEDCOLORS[i] );
    00738     else{
    00739         setColor( 0, SUBDUEDCOLORS[ 0] );
    00740         setColor( 1, SUBDUEDCOLORS[ 5] );
    00741         setColor( 2, SUBDUEDCOLORS[10] );
    00742         setColor( 3, SUBDUEDCOLORS[15] );
    00743         setColor( 4, SUBDUEDCOLORS[ 2] );
    00744         setColor( 5, SUBDUEDCOLORS[ 7] );
    00745         setColor( 6, SUBDUEDCOLORS[12] );
    00746         setColor( 7, SUBDUEDCOLORS[17] );
    00747         setColor( 8, SUBDUEDCOLORS[ 4] );
    00748         setColor( 9, SUBDUEDCOLORS[ 9] );
    00749         setColor(10, SUBDUEDCOLORS[14] );
    00750         setColor(11, SUBDUEDCOLORS[ 1] );
    00751         setColor(12, SUBDUEDCOLORS[ 6] );
    00752         setColor(13, SUBDUEDCOLORS[11] );
    00753         setColor(14, SUBDUEDCOLORS[16] );
    00754         setColor(15, SUBDUEDCOLORS[ 3] );
    00755         setColor(16, SUBDUEDCOLORS[ 8] );
    00756         setColor(17, SUBDUEDCOLORS[13] );
    00757     }
    00758 }

void Legend::setText | ( | uint | dataset,
|  | const QString & | text
| ) |

Definition at line 512 of file KDChartLegend.cpp.

References d, and setNeedRebuild().

    00513 {
    00514     if( d->texts[ dataset ] == text ) return;
    00515     d->texts[ dataset ] = text;
    00516     setNeedRebuild();
    00517 }

void Legend::setTextAttributes | ( | const TextAttributes & | a | ) |

Definition at line 621 of file KDChartLegend.cpp.

References d, and setNeedRebuild().

Referenced by KDChart::Chart::addLegend(), and clone().

    00622 {
    00623     if( d->textAttributes == a ) return;
    00624     d->textAttributes = a;
    00625     setNeedRebuild();
    00626 }

void Legend::setTitleText | ( | const QString & | text | ) |

Definition at line 633 of file KDChartLegend.cpp.

References d, and setNeedRebuild().

    00634 {
    00635     if( d->titleText == text ) return;
    00636     d->titleText = text;
    00637     setNeedRebuild();
    00638 }

void Legend::setTitleTextAttributes | ( | const TextAttributes & | a | ) |

Definition at line 645 of file KDChartLegend.cpp.

References d, and setNeedRebuild().

Referenced by KDChart::Chart::addLegend(), and clone().

    00646 {
    00647     if( d->titleTextAttributes == a ) return;
    00648     d->titleTextAttributes = a;
    00649     setNeedRebuild();
    00650 }

void Legend::setUseAutomaticMarkerSize | ( | bool | useAutomaticMarkerSize | ) |

This option is on by default, it means that Marker sizes in the Legend will be the same as the font height used for their respective label texts.

Set this to false, if you want to specify the marker sizes via setMarkerAttributes or if you want the Legend to use the same marker sizes as they are used in the Diagrams.

Definition at line 488 of file KDChartLegend.cpp.

References d, and setNeedRebuild().

Referenced by clone().

    00489 {
    00490     d->useAutomaticMarkerSize = useAutomaticMarkerSize;
    00491     setNeedRebuild();
    00492     emitPositionChanged();
    00493 }

void Legend::setVisible | ( | bool | visible | ) | `[virtual]`

Definition at line 406 of file KDChartLegend.cpp.

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

    00407 {
    00408     QWidget::setVisible( visible );
    00409     emitPositionChanged();
    00410 }

bool Legend::showLines | ( |  | ) | const

Definition at line 483 of file KDChartLegend.cpp.

References d.

Referenced by buildLegend().

    00484 {
    00485     return d->showLines;
    00486 }

QSize Legend::sizeHint | ( |  | ) | const`[virtual]`

Definition at line 150 of file KDChartLegend.cpp.

References d.

Referenced by minimumSizeHint(), KDChart::Chart::reLayoutFloatingLegends(), resizeEvent(), and setNeedRebuild().

    00151 {
    00152 #ifdef DEBUG_LEGEND_PAINT
    00153     qDebug()  << "Legend::sizeHint() started";
    00154 #endif
    00155     Q_FOREACH( KDChart::AbstractLayoutItem* layoutItem, d->layoutItems ) {
    00156         layoutItem->sizeHint();
    00157     }
    00158     return AbstractAreaWidget::sizeHint();
    00159 }

uint Legend::spacing | ( |  | ) | const

Definition at line 677 of file KDChartLegend.cpp.

References d.

Referenced by buildLegend().

    00678 {
    00679     return d->spacing;
    00680 }

QString Legend::text | ( | uint | dataset | ) | const

Definition at line 519 of file KDChartLegend.cpp.

References d.

Referenced by buildLegend().

    00520 {
    00521     if( d->texts.find( dataset ) != d->texts.end() ){
    00522         //qDebug() << "Legend::text(" << dataset << ") returning d->texts[" << dataset << "] :" << d->texts[ dataset ];
    00523         return d->texts[ dataset ];
    00524     }else{
    00525         //qDebug() << "Legend::text(" << dataset << ") returning d->modelLabels[" << dataset << "] :" << d->modelLabels[ dataset ];
    00526         return d->modelLabels[ dataset ];
    00527     }
    00528 }

TextAttributes Legend::textAttributes | ( |  | ) | const

Definition at line 628 of file KDChartLegend.cpp.

References d.

Referenced by KDChart::Chart::addLegend(), buildLegend(), and clone().

    00629 {
    00630     return d->textAttributes;
    00631 }

const QMap< uint, QString > Legend::texts | ( |  | ) | const

Definition at line 530 of file KDChartLegend.cpp.

References d.

    00531 {
    00532     return d->texts;
    00533 }

QString Legend::titleText | ( |  | ) | const

Definition at line 640 of file KDChartLegend.cpp.

References d.

Referenced by buildLegend().

    00641 {
    00642     return d->titleText;
    00643 }

TextAttributes Legend::titleTextAttributes | ( |  | ) | const

Definition at line 652 of file KDChartLegend.cpp.

References d.

Referenced by KDChart::Chart::addLegend(), buildLegend(), and clone().

    00653 {
    00654     return d->titleTextAttributes;
    00655 }

bool Legend::useAutomaticMarkerSize | ( |  | ) | const

Definition at line 495 of file KDChartLegend.cpp.

References d.

Referenced by buildLegend(), and clone().

    00496 {
    00497     return d->useAutomaticMarkerSize;
    00498 }

## Member Data Documentation

Q_SIGNALS KDChart::Legend::__pad0__

| Reimplemented from KDChart::AbstractAreaWidget. Definition at line 354 of file KDChartLegend.h.

private KDChart::Legend::Q_SLOTS

| Definition at line 359 of file KDChartLegend.h.

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

- KDChartLegend.h
- KDChartLegend.cpp