21#include "kivio_common.h"
22#include "kivio_fill_style.h"
23#include "kivio_line_style.h"
24#include "kivio_point.h"
25#include "kivio_shape.h"
26#include "kivio_text_style.h"
33KivioShape::KivioShape()
45KivioShape::KivioShape(
const KivioShape &source )
47 source.m_shapeData.copyInto( &m_shapeData );
54KivioShape::~KivioShape()
66void KivioShape::copyInto( KivioShape *pTarget )
const
71 m_shapeData.copyInto( &(pTarget->m_shapeData) );
81bool KivioShape::loadXML(
const TQDomElement &e )
84 TQDomNode node = e.firstChild();
86 TQString name = XmlReadString( e,
"name",
"" );
87 m_shapeData.setName( name );
90 if( m_shapeData.name().isEmpty() ||
91 m_shapeData.shapeType() == -1 )
93 kdWarning(43000) <<
"-LOAD KivioShape::loadXML() - Unknown shape or bad name read. Shape load aborted." << endl;
97 while( !node.isNull() )
99 TQString nodeName = node.nodeName();
100 ele = node.toElement();
102 if( nodeName ==
"KivioShapeData" )
104 m_shapeData.loadXML( ele );
107 node = node.nextSibling();
119TQDomElement KivioShape::saveXML( TQDomDocument &doc )
121 TQDomElement e = doc.createElement(
"KivioShape");
123 XmlWriteString( e,
"name", m_shapeData.m_name );
124 XmlWriteInt( e,
"shapeType", m_shapeData.m_shapeType );
126 e.appendChild( m_shapeData.saveXML( doc ) );
140KivioShape *KivioShape::loadShapeArc(
const TQDomElement & )
152KivioShape *KivioShape::loadShapeClosedPath(
const TQDomElement &e )
154 KivioShape *pShape = NULL;
155 KivioPoint *pPoint = NULL;
161 pShape =
new KivioShape();
164 pShape->m_shapeData.m_shapeType = KivioShapeData::kstClosedPath;
165 pShape->m_shapeData.m_name = XmlReadString( e,
"name",
"" );
168 node = e.firstChild();
169 while( !node.isNull() )
171 nodeName = node.nodeName();
174 if( nodeName ==
"KivioPoint" )
177 pPoint =
new KivioPoint(0.0f, 0.0f, KivioPoint::kptBezier);
178 pPoint->loadXML( node.toElement() );
179 pShape->m_shapeData.m_pOriginalPointList->append( pPoint );
182 else if( nodeName ==
"KivioFillStyle" )
184 pShape->m_shapeData.m_pFillStyle->loadXML( node.toElement() );
186 else if( nodeName ==
"KivioLineStyle" )
188 pShape->m_shapeData.m_pLineStyle->loadXML( node.toElement() );
191 node = node.nextSibling();
204KivioShape *KivioShape::loadShapeBezier(
const TQDomElement &e )
206 KivioShape *pShape = NULL;
207 KivioPoint *pPoint = NULL;
213 pShape =
new KivioShape();
216 pShape->m_shapeData.m_shapeType = KivioShapeData::kstBezier;
217 pShape->m_shapeData.m_name = XmlReadString( e,
"name",
"" );
220 node = e.firstChild();
221 while( !node.isNull() )
223 nodeName = node.nodeName();
226 if( nodeName ==
"KivioPoint" )
229 pPoint =
new KivioPoint(0.0f, 0.0f, KivioPoint::kptBezier);
230 pPoint->loadXML( node.toElement() );
231 if( pPoint->pointType() != KivioPoint::kptBezier )
233 kdDebug(43000) <<
"KivioShape::loadShapeBezier() - Non-bezier point found. Aborting shape." << endl;
238 pShape->m_shapeData.m_pOriginalPointList->append( pPoint );
241 else if( nodeName ==
"KivioLineStyle" )
243 pShape->m_shapeData.m_pLineStyle->loadXML( node.toElement() );
246 node = node.nextSibling();
249 if( pShape->m_shapeData.m_pOriginalPointList->count() != 4 )
251 kdDebug(43000) <<
"KivioShape::loadShapeBezier() - Wrong number of points loaded, should be 4, shape aborted" << endl;
266KivioShape *KivioShape::loadShapeEllipse(
const TQDomElement &e )
268 KivioShape *pShape = NULL;
274 pShape =
new KivioShape();
277 pShape->m_shapeData.m_shapeType = KivioShapeData::kstEllipse;
278 pShape->m_shapeData.m_name = XmlReadString( e,
"name",
"" );
280 pShape->m_shapeData.m_position.set( XmlReadFloat( e,
"x", 0.0f ), XmlReadFloat( e,
"y", 0.0f ) );
281 pShape->m_shapeData.m_dimensions.set( XmlReadFloat( e,
"w", 0.0f ), XmlReadFloat( e,
"h", 0.0f ) );
284 node = e.firstChild();
285 while( !node.isNull() )
287 nodeName = node.nodeName();
289 if( nodeName ==
"KivioFillStyle" )
291 pShape->m_shapeData.m_pFillStyle->loadXML( node.toElement() );
293 else if( nodeName ==
"KivioLineStyle" )
295 pShape->m_shapeData.m_pLineStyle->loadXML( node.toElement() );
298 node = node.nextSibling();
311KivioShape *KivioShape::loadShapeLineArray(
const TQDomElement &e )
313 KivioShape *pShape = NULL;
314 KivioPoint *pPoint = NULL;
317 TQDomElement lineElement;
321 pShape =
new KivioShape();
324 pShape->m_shapeData.m_shapeType = KivioShapeData::kstLineArray;
325 pShape->m_shapeData.m_name = XmlReadString( e,
"name",
"" );
328 node = e.firstChild();
329 while( !node.isNull() )
331 nodeName = node.nodeName();
334 if( nodeName ==
"Line" )
336 lineElement = node.toElement();
339 pPoint =
new KivioPoint( XmlReadFloat( lineElement,
"x1", 0.0f ), XmlReadFloat( lineElement,
"y1", 0.0f ) );
340 pShape->m_shapeData.m_pOriginalPointList->append( pPoint );
341 pPoint =
new KivioPoint( XmlReadFloat( lineElement,
"x2", 0.0f ), XmlReadFloat( lineElement,
"y2", 0.0f ) );
342 pShape->m_shapeData.m_pOriginalPointList->append( pPoint );
345 else if( nodeName ==
"KivioLineStyle" )
347 pShape->m_shapeData.m_pLineStyle->loadXML( node.toElement() );
350 node = node.nextSibling();
363KivioShape *KivioShape::loadShapeOpenPath(
const TQDomElement &e )
365 KivioShape *pShape = NULL;
366 KivioPoint *pPoint = NULL;
372 pShape =
new KivioShape();
375 pShape->m_shapeData.m_shapeType = KivioShapeData::kstOpenPath;
376 pShape->m_shapeData.m_name = XmlReadString( e,
"name",
"" );
379 node = e.firstChild();
380 while( !node.isNull() )
382 nodeName = node.nodeName();
385 if( nodeName ==
"KivioPoint" )
388 pPoint =
new KivioPoint(0.0f, 0.0f, KivioPoint::kptBezier);
389 pPoint->loadXML( node.toElement() );
390 pShape->m_shapeData.m_pOriginalPointList->append( pPoint );
393 else if( nodeName ==
"KivioLineStyle" )
395 pShape->m_shapeData.m_pLineStyle->loadXML( node.toElement() );
398 node = node.nextSibling();
413KivioShape *KivioShape::loadShapePie(
const TQDomElement & )
425KivioShape *KivioShape::loadShapePolygon(
const TQDomElement &e )
427 KivioShape *pShape = NULL;
428 KivioPoint *pPoint = NULL;
434 pShape =
new KivioShape();
437 pShape->m_shapeData.m_shapeType = KivioShapeData::kstPolygon;
438 pShape->m_shapeData.m_name = XmlReadString( e,
"name",
"" );
441 node = e.firstChild();
442 while( !node.isNull() )
444 nodeName = node.nodeName();
447 if( nodeName ==
"KivioPoint" )
450 pPoint =
new KivioPoint();
451 pPoint->loadXML( node.toElement() );
452 pShape->m_shapeData.m_pOriginalPointList->append( pPoint );
455 else if( nodeName ==
"KivioFillStyle" )
457 pShape->m_shapeData.m_pFillStyle->loadXML( node.toElement() );
459 else if( nodeName ==
"KivioLineStyle" )
461 pShape->m_shapeData.m_pLineStyle->loadXML( node.toElement() );
464 node = node.nextSibling();
477KivioShape *KivioShape::loadShapePolyline(
const TQDomElement &e )
479 KivioShape *pShape = NULL;
480 KivioPoint *pPoint = NULL;
486 pShape =
new KivioShape();
489 pShape->m_shapeData.m_shapeType = KivioShapeData::kstPolyline;
490 pShape->m_shapeData.m_name = XmlReadString( e,
"name",
"" );
493 node = e.firstChild();
494 while( !node.isNull() )
496 nodeName = node.nodeName();
499 if( nodeName ==
"KivioPoint" )
502 pPoint =
new KivioPoint();
503 pPoint->loadXML( node.toElement() );
504 pShape->m_shapeData.m_pOriginalPointList->append( pPoint );
507 else if( nodeName ==
"KivioLineStyle" )
509 pShape->m_shapeData.m_pLineStyle->loadXML( node.toElement() );
512 node = node.nextSibling();
525KivioShape *KivioShape::loadShapeRectangle(
const TQDomElement &e )
527 KivioShape *pShape = NULL;
533 pShape =
new KivioShape();
536 pShape->m_shapeData.m_shapeType = KivioShapeData::kstRectangle;
537 pShape->m_shapeData.m_name = XmlReadString( e,
"name",
"" );
539 pShape->m_shapeData.m_position.set( XmlReadFloat( e,
"x", 0.0f ), XmlReadFloat( e,
"y", 0.0f ) );
540 pShape->m_shapeData.m_dimensions.set( XmlReadFloat( e,
"w", 72.0f ), XmlReadFloat( e,
"h", 72.0f ) );
543 node = e.firstChild();
544 while( !node.isNull() )
546 nodeName = node.nodeName();
549 if( nodeName ==
"KivioFillStyle" )
551 pShape->m_shapeData.m_pFillStyle->loadXML( node.toElement() );
553 else if( nodeName ==
"KivioLineStyle" )
555 pShape->m_shapeData.m_pLineStyle->loadXML( node.toElement() );
558 node = node.nextSibling();
572KivioShape *KivioShape::loadShapeRoundRectangle(
const TQDomElement &e )
574 KivioShape *pShape = NULL;
575 KivioPoint *pPoint = NULL;
581 pShape =
new KivioShape();
584 pShape->m_shapeData.m_shapeType = KivioShapeData::kstRoundRectangle;
585 pShape->m_shapeData.m_name = XmlReadString( e,
"name",
"" );
587 pShape->m_shapeData.m_position.set( XmlReadFloat( e,
"x", 0.0f ), XmlReadFloat( e,
"y", 0.0f ) );
588 pShape->m_shapeData.m_dimensions.set( XmlReadFloat( e,
"w", 72.0f ), XmlReadFloat( e,
"h", 72.0f ) );
591 pPoint =
new KivioPoint(0.0f, 0.0f);
592 pPoint->set( XmlReadFloat( e,
"r1", 1.0f ), XmlReadFloat( e,
"r2", 1.0f ) );
593 pShape->m_shapeData.m_pOriginalPointList->append( pPoint );
596 node = e.firstChild();
597 while( !node.isNull() )
599 nodeName = node.nodeName();
602 if( nodeName ==
"KivioFillStyle" )
604 pShape->m_shapeData.m_pFillStyle->loadXML( node.toElement() );
606 else if( nodeName ==
"KivioLineStyle" )
608 pShape->m_shapeData.m_pLineStyle->loadXML( node.toElement() );
611 node = node.nextSibling();
624KivioShape *KivioShape::loadShapeTextBox(
const TQDomElement &e )
626 KivioShape *pShape = NULL;
634 pShape =
new KivioShape();
637 pShape->m_shapeData.setShapeType(KivioShapeData::kstTextBox);
638 pShape->m_shapeData.setName( XmlReadString( e,
"name",
"" ) );
639 pShape->m_shapeData.setTextColor(XmlReadColor(e,
"color",TQColor(0,0,0)));
641 pShape->m_shapeData.m_position.set(
642 XmlReadFloat( e,
"x", 0.0f ), XmlReadFloat( e,
"y", 0.0f ) );
643 pShape->m_shapeData.m_dimensions.set(
644 XmlReadFloat( e,
"w", 72.0f ), XmlReadFloat( e,
"h", 72.0f ) );
647 node = e.firstChild();
648 while( !node.isNull() )
650 nodeName = node.nodeName();
651 if( nodeName ==
"KivioTextStyle" )
653 ts.loadXML( node.toElement() );
654 pShape->m_shapeData.setTextStyle( &ts );
657 node = node.nextSibling();
KivioShapeType
The possible shape types.