00001 /**************************************************************************** 00002 ** Copyright (C) 2001-2011 Klaralvdalens Datakonsult AB. All rights reserved. 00003 ** 00004 ** This file is part of the KD Chart library. 00005 ** 00006 ** Licensees holding valid commercial KD Chart licenses may use this file in 00007 ** accordance with the KD Chart Commercial License Agreement provided with 00008 ** the Software. 00009 ** 00010 ** 00011 ** This file may be distributed and/or modified under the terms of the 00012 ** GNU General Public License version 2 and version 3 as published by the 00013 ** Free Software Foundation and appearing in the file LICENSE.GPL.txt included. 00014 ** 00015 ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 00016 ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 00017 ** 00018 ** Contact info@kdab.com if any conditions of this licensing are not 00019 ** clear to you. 00020 ** 00021 **********************************************************************/ 00022 00023 #include "KDChartHeaderFooter.h" 00024 #include "KDChartHeaderFooter_p.h" 00025 00026 #include "KDChartChart.h" 00027 #include <KDChartTextAttributes.h> 00028 #include <QFont> 00029 #include <QPainter> 00030 #include <QAbstractTextDocumentLayout> 00031 #include <QTextDocumentFragment> 00032 #include <QTextBlock> 00033 #include <QtDebug> 00034 #include <QLabel> 00035 #include "KDTextDocument.h" 00036 00037 #include <KDABLibFakes> 00038 00039 using namespace KDChart; 00040 00041 HeaderFooter::Private::Private() : 00042 type( Header ), 00043 position( Position::North ) 00044 { 00045 } 00046 00047 HeaderFooter::Private::~Private() 00048 { 00049 } 00050 00051 #define d d_func() 00052 00053 HeaderFooter::HeaderFooter( Chart* parent ) : 00054 TextArea( new Private() ) 00055 { 00056 setParent( parent ); 00057 init(); 00058 } 00059 00060 HeaderFooter::~HeaderFooter() 00061 { 00062 emit destroyedHeaderFooter( this ); 00063 } 00064 00065 void HeaderFooter::setParent( QObject* parent ) 00066 { 00067 QObject::setParent( parent ); 00068 setParentWidget( qobject_cast<QWidget*>( parent ) ); 00069 if( parent && ! autoReferenceArea() ) 00070 setAutoReferenceArea( parent ); 00071 } 00072 00073 void HeaderFooter::init() 00074 { 00075 TextAttributes ta; 00076 ta.setPen( QPen(Qt::black) ); 00077 ta.setFont( QFont( QLatin1String( "helvetica" ), 10, QFont::Bold, false ) ); 00078 00079 Measure m( 35.0 ); 00080 m.setRelativeMode( autoReferenceArea(), KDChartEnums::MeasureOrientationMinimum ); 00081 ta.setFontSize( m ); 00082 00083 m.setValue( 8.0 ); 00084 m.setCalculationMode( KDChartEnums::MeasureCalculationModeAbsolute ); 00085 ta.setMinimalFontSize( m ); 00086 00087 setTextAttributes( ta ); 00088 } 00089 00093 HeaderFooter * HeaderFooter::clone() const 00094 { 00095 HeaderFooter* headerFooter = new HeaderFooter( new Private( *d ), 0 ); 00096 headerFooter->setType( type() ); 00097 headerFooter->setPosition( position() ); 00098 headerFooter->setText( text() ); 00099 headerFooter->setTextAttributes( textAttributes() ); 00100 return headerFooter; 00101 } 00102 00103 bool HeaderFooter::compare( const HeaderFooter& other )const 00104 { 00105 return (type() == other.type()) && 00106 (position() == other.position()) && 00107 // also compare members inherited from the base class: 00108 (autoReferenceArea() == other.autoReferenceArea()) && 00109 (text() == other.text()) && 00110 (textAttributes() == other.textAttributes()); 00111 } 00112 00113 void HeaderFooter::setType( HeaderFooterType type ) 00114 { 00115 d->type = type; 00116 emit positionChanged( this ); 00117 } 00118 00119 HeaderFooter::HeaderFooterType HeaderFooter::type() const 00120 { 00121 return d->type; 00122 } 00123 00124 void HeaderFooter::setPosition( Position position ) 00125 { 00126 d->position = position; 00127 emit positionChanged( this ); 00128 } 00129 00130 Position HeaderFooter::position() const 00131 { 00132 return d->position; 00133 }