19#include "kivio_common.h"
20#include "kivio_fill_style.h"
21#include "kivio_line_style.h"
22#include "kivio_point.h"
23#include "kivio_shape_data.h"
24#include "kivio_text_style.h"
32struct KivioShapeTypeInfo
41static const int numShapeInfo = 12;
42static struct KivioShapeTypeInfo shapeInfo[] = {
43 {
"Arc", KivioShapeData::kstArc },
44 {
"Pie", KivioShapeData::kstPie },
45 {
"LineArray", KivioShapeData::kstLineArray },
46 {
"Polyline", KivioShapeData::kstPolyline },
47 {
"Polygon", KivioShapeData::kstPolygon },
48 {
"Bezier", KivioShapeData::kstBezier },
49 {
"Rectangle", KivioShapeData::kstRectangle },
50 {
"RoundRectangle", KivioShapeData::kstRoundRectangle },
51 {
"Ellipse", KivioShapeData::kstEllipse },
52 {
"OpenPath", KivioShapeData::kstOpenPath },
53 {
"ClosedPath", KivioShapeData::kstClosedPath },
54 {
"TextBox", KivioShapeData::kstTextBox }
65KivioTextShapeData::KivioTextShapeData()
68 m_textFont = TQFont(
"Times");
69 m_textColor = TQColor(0,0,0);
71 m_hTextAlign = TQt::AlignHCenter;
72 m_vTextAlign = TQt::AlignVCenter;
76KivioShapeData::KivioShapeData()
77 : m_pOriginalPointList(NULL),
80 m_pOriginalPointList =
new TQPtrList<KivioPoint>;
81 m_pOriginalPointList->setAutoDelete(
true);
83 m_pFillStyle =
new KivioFillStyle();
84 m_pLineStyle =
new KivioLineStyle();
87 m_shapeType = kstNone;
93 m_position.set( 0.0f, 0.0f );
94 m_dimensions.set( 72.0f, 72.0f );
98 : m_pOriginalPointList(NULL),
103 m_pOriginalPointList =
new TQPtrList<KivioPoint>;
104 m_pOriginalPointList->setAutoDelete(
true);
107 pPoint = source.m_pOriginalPointList->first();
110 m_pOriginalPointList->append(
new KivioPoint( *pPoint ) );
111 pPoint = source.m_pOriginalPointList->next();
115 m_pFillStyle =
new KivioFillStyle( *(source.m_pFillStyle) );
116 m_pLineStyle =
new KivioLineStyle( *(source.m_pLineStyle) );
122 m_shapeType = source.m_shapeType;
123 m_name = TQString(source.m_name);
127 source.m_position.copyInto( &m_position );
128 source.m_dimensions.copyInto( &m_dimensions );
131 if( m_shapeType == kstTextBox )
133 m_pTextData =
new KivioTextStyle();
135 source.m_pTextData->copyInto( m_pTextData );
151KivioShapeData::~KivioShapeData()
153 if( m_pOriginalPointList )
155 delete m_pOriginalPointList;
156 m_pOriginalPointList = NULL;
187 if( pTarget->m_pOriginalPointList )
189 delete pTarget->m_pOriginalPointList;
190 pTarget->m_pOriginalPointList = NULL;
194 pTarget->m_pOriginalPointList =
new TQPtrList<KivioPoint>;
195 pTarget->m_pOriginalPointList->setAutoDelete(
true);
196 pPoint = m_pOriginalPointList->first();
199 pTarget->m_pOriginalPointList->append(
new KivioPoint( *pPoint ) );
200 pPoint = m_pOriginalPointList->next();
204 m_pFillStyle->copyInto( pTarget->m_pFillStyle );
205 m_pLineStyle->copyInto( pTarget->m_pLineStyle );
211 pTarget->m_shapeType = m_shapeType;
212 pTarget->m_name = TQString(m_name);
215 m_position.copyInto( &(pTarget->m_position) );
216 m_dimensions.copyInto( &(pTarget->m_dimensions) );
220 if( m_shapeType == kstTextBox )
222 if( !pTarget->m_pTextData )
224 pTarget->m_pTextData =
new KivioTextStyle();
229 m_pTextData->copyInto( pTarget->m_pTextData );
233 kdWarning(43000) <<
"KivioShapeData::copyInto() - Shape is of type text-box, but our text data doens't exist." << endl;
234 pTarget->m_pTextData->setText(
"");
235 pTarget->m_pTextData->setIsHtml(
false);
236 pTarget->m_pTextData->setHTextAlign(TQt::AlignHCenter);
237 pTarget->m_pTextData->setVTextAlign(TQt::AlignVCenter);
238 pTarget->m_pTextData->setFont( TQFont(
"Times",12) );
239 pTarget->m_pTextData->setColor( TQColor(0,0,0) );
244 if( pTarget->m_pTextData )
246 delete pTarget->m_pTextData;
247 pTarget->m_pTextData = NULL;
264 m_pLineStyle->setColor( XmlReadColor( e,
"fgColor", TQColor(0,0,0) ) );
265 m_pLineStyle->setWidth( XmlReadFloat( e,
"lineWidth", 1.0f ) );
268 node = e.firstChild();
269 while( !node.isNull() )
271 TQString nodeName = node.nodeName();
272 ele = node.toElement();
274 if( nodeName ==
"KivioLineStyle" )
276 m_pLineStyle->loadXML( ele );
278 else if( nodeName ==
"KivioFillStyle" )
280 m_pFillStyle->loadXML( ele );
282 else if( nodeName ==
"KivioTextStyle" )
286 if( m_shapeType == kstTextBox )
290 m_pTextData =
new KivioTextStyle();
292 m_pTextData->loadXML( ele );
296 else if( nodeName ==
"KivioText" )
299 if( m_shapeType == kstTextBox )
301 KivioTextShapeData *pData =
new KivioTextShapeData;
303 pData->m_text = XmlReadString( ele,
"text",
"" );
304 pData->m_isHtml = (bool)XmlReadInt( ele,
"isHtml", (
int)false );
306 pData->m_hTextAlign = XmlReadInt( ele,
"hTextAlign", TQt::AlignHCenter );
307 pData->m_vTextAlign = XmlReadInt( ele,
"vTextAlign", TQt::AlignVCenter );
310 TQDomNode innerNode = ele.firstChild();
311 while( !innerNode.isNull() )
313 TQString innerName = innerNode.nodeName();
314 TQDomElement innerE = innerNode.toElement();
316 if( innerName ==
"TextFont" )
318 pData->m_textFont.setFamily( XmlReadString(innerE,
"family",
"times") );
319 pData->m_textFont.setPointSize( XmlReadInt(innerE,
"size", 12 ) );
320 pData->m_textFont.setBold( (
bool)XmlReadInt( innerE,
"bold", 12 ) );
321 pData->m_textFont.setItalic( (
bool)XmlReadInt( innerE,
"italic", 12 ) );
322 pData->m_textFont.setUnderline( (
bool)XmlReadInt( innerE,
"underline", 12 ) );
323 pData->m_textFont.setStrikeOut( (
bool)XmlReadInt( innerE,
"strikeOut", 12 ) );
324 pData->m_textFont.setFixedPitch( (
bool)XmlReadInt( innerE,
"fixedPitch",
false ) );
325 pData->m_textColor = XmlReadColor( innerE,
"color", TQColor(0,0,0) );
328 innerNode = innerNode.nextSibling();
333 m_pTextData =
new KivioTextStyle();
335 m_pTextData->setText( pData->m_text );
336 m_pTextData->setHTextAlign( pData->m_hTextAlign );
337 m_pTextData->setVTextAlign( pData->m_vTextAlign );
338 m_pTextData->setFont( pData->m_textFont );
339 m_pTextData->setColor( pData->m_textColor );
344 kdDebug(43000) <<
"KivioShapeData::loadXML() - Loading KivioText, but this is not a textbox!" << endl;
348 node = node.nextSibling();
360 TQDomElement e = doc.createElement(
"KivioShapeData");
367 TQDomElement posE = doc.createElement(
"Position");
368 XmlWriteFloat( posE,
"x", m_position.x() );
369 XmlWriteFloat( posE,
"y", m_position.y() );
370 e.appendChild( posE );
373 TQDomElement dimE = doc.createElement(
"Dimension");
374 XmlWriteFloat( dimE,
"w", m_dimensions.x() );
375 XmlWriteFloat( dimE,
"h", m_dimensions.y() );
376 e.appendChild( dimE );
383 TQDomElement foreE = m_pLineStyle->saveXML( doc );
384 e.appendChild( foreE );
388 if( m_shapeType == kstTextBox )
392 e.appendChild( m_pTextData->saveXML(doc) );
421 e.appendChild( m_pFillStyle->saveXML( doc ) );
434 for(
int i=0; i<numShapeInfo; i++ )
436 if( str.compare( shapeInfo[i].name )==0 )
437 return shapeInfo[i].type;
443void KivioShapeData::setShapeType( KivioShapeType st )
448 if( st == kstTextBox )
451 m_pTextData =
new KivioTextStyle();
464TQString KivioShapeData::text()
467 return m_pTextData->text();
472void KivioShapeData::setText(
const TQString &newText )
476 m_pTextData->setText(newText);
480bool KivioShapeData::isHtml()
const
483 return m_pTextData->isHtml();
488void KivioShapeData::setIsHtml(
bool b )
491 m_pTextData->setIsHtml(b);
494int KivioShapeData::hTextAlign()
const
497 return m_pTextData->hTextAlign();
499 return TQt::AlignHCenter;
502void KivioShapeData::setHTextAlign(
int i )
505 m_pTextData->setHTextAlign(i);
508int KivioShapeData::vTextAlign()
const
511 return m_pTextData->vTextAlign();
513 return TQt::AlignVCenter;
516void KivioShapeData::setVTextAlign(
int i )
519 m_pTextData->setVTextAlign(i);
522TQFont KivioShapeData::textFont()
525 return m_pTextData->font();
527 return TQFont(
"Times");
530void KivioShapeData::setTextFont(
const TQFont &f )
533 m_pTextData->setFont(f);
536TQColor KivioShapeData::textColor()
539 return m_pTextData->color();
541 return TQColor(0,0,0);
544void KivioShapeData::setTextColor( TQColor c )
547 m_pTextData->setColor(c);
550void KivioShapeData::setTextStyle( KivioTextStyle *pStyle )
554 pStyle->copyInto( m_pTextData );
558void KivioShapeData::setLineStyle(KivioLineStyle ls)
561 ls.copyInto(m_pLineStyle);
A class containing all the data for a KivioShape.
virtual bool loadXML(const TQDomElement &)
Load this object from an XML element.
KivioShapeType
The possible shape types.
virtual TQDomElement saveXML(TQDomDocument &)
Save this object to an XML element.