00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include "qgstextannotationitem.h"
00019 #include <QDomDocument>
00020 #include <QPainter>
00021
00022 QgsTextAnnotationItem::QgsTextAnnotationItem( QgsMapCanvas* canvas ): QgsAnnotationItem( canvas ), mDocument( new QTextDocument( QObject::tr( "QGIS rocks!" ) ) )
00023 {
00024 mDocument->setUseDesignMetrics( true );
00025 }
00026
00027 QgsTextAnnotationItem::~QgsTextAnnotationItem()
00028 {
00029 delete mDocument;
00030 }
00031
00032 QTextDocument* QgsTextAnnotationItem::document() const
00033 {
00034 if ( !mDocument )
00035 {
00036 return 0;
00037 }
00038
00039 return mDocument->clone();
00040 }
00041
00042 void QgsTextAnnotationItem::setDocument( const QTextDocument* doc )
00043 {
00044 delete mDocument;
00045 mDocument = doc->clone();
00046 }
00047
00048 void QgsTextAnnotationItem::paint( QPainter * painter )
00049 {
00050 if ( !painter || !mDocument )
00051 {
00052 return;
00053 }
00054
00055 drawFrame( painter );
00056 if ( mMapPositionFixed )
00057 {
00058 drawMarkerSymbol( painter );
00059 }
00060 double frameWidth = mFrameBorderWidth;
00061 mDocument->setTextWidth( mFrameSize.width() );
00062
00063 painter->save();
00064 painter->translate( mOffsetFromReferencePoint.x() + frameWidth / 2.0,
00065 mOffsetFromReferencePoint.y() + frameWidth / 2.0 );
00066
00067
00068 mDocument->drawContents( painter, QRectF( 0, 0, mFrameSize.width() - frameWidth / 2.0, mFrameSize.height() - frameWidth / 2.0 ) );
00069 painter->restore();
00070 if ( isSelected() )
00071 {
00072 drawSelectionBoxes( painter );
00073 }
00074 }
00075
00076 void QgsTextAnnotationItem::writeXML( QDomDocument& doc ) const
00077 {
00078 QDomElement documentElem = doc.documentElement();
00079 if ( documentElem.isNull() )
00080 {
00081 return;
00082 }
00083 QDomElement annotationElem = doc.createElement( "TextAnnotationItem" );
00084 if ( mDocument )
00085 {
00086 annotationElem.setAttribute( "document", mDocument->toHtml() );
00087 }
00088 _writeXML( doc, annotationElem );
00089 documentElem.appendChild( annotationElem );
00090 }
00091
00092 void QgsTextAnnotationItem::readXML( const QDomDocument& doc, const QDomElement& itemElem )
00093 {
00094 delete mDocument;
00095 mDocument = new QTextDocument;
00096 mDocument->setHtml( itemElem.attribute( "document", QObject::tr( "<html>QGIS rocks!</html>" ) ) );
00097 QDomElement annotationElem = itemElem.firstChildElement( "AnnotationItem" );
00098 if ( !annotationElem.isNull() )
00099 {
00100 _readXML( doc, annotationElem );
00101 }
00102 }