23#include "KPrGroupObject.h"
24#include "KPrFreehandObject.h"
25#include "KPrPolylineObject.h"
26#include "KPrBezierCurveObject.h"
27#include "KPrPieObject.h"
30#include <KoTextZoomHandler.h>
34#include <tqpointarray.h>
40#include <tqdatetime.h>
43void drawFigure( LineEnd figure, TQPainter* painter,
const KoPoint &coord,
const TQColor &color,
44 int _w,
float angle, KoZoomHandler* _zoomHandler)
47 painter->setPen( TQt::NoPen );
48 painter->setBrush( TQt::NoBrush );
55 if ( _h % 2 == 0 ) _h--;
56 painter->translate( _zoomHandler->zoomItX(coord.x()), _zoomHandler->zoomItY( coord.y()) );
57 painter->rotate( angle );
58 painter->scale( 1, 1 );
59 painter->fillRect( _zoomHandler->zoomItX( -6 - _w ),
60 _zoomHandler->zoomItY( -3 - _h / 2),
61 _zoomHandler->zoomItX( 6 + _w),
62 _zoomHandler->zoomItY( 6 + _h), color );
66 painter->translate( _zoomHandler->zoomItX(coord.x()), _zoomHandler->zoomItY(coord.y()) );
67 painter->rotate( angle );
68 painter->setBrush( color );
69 painter->drawEllipse( _zoomHandler->zoomItX( -6 - _w ),
70 _zoomHandler->zoomItY( -3 - _w / 2 ),
71 _zoomHandler->zoomItX( 6 + _w),
72 _zoomHandler->zoomItY(6 + _w) );
76 KoPoint p1( -10 - _w, -3 - _w / 2 );
78 KoPoint p3( -10 - _w, 3 + _w / 2 );
79 TQPointArray pArray( 3 );
80 pArray.setPoint( 0, _zoomHandler->zoomPoint(p1) );
81 pArray.setPoint( 1, _zoomHandler->zoomPoint(p2) );
82 pArray.setPoint( 2, _zoomHandler->zoomPoint(p3) );
84 painter->translate( _zoomHandler->zoomItX(coord.x()),_zoomHandler->zoomItY( coord.y()) );
85 painter->rotate( angle );
86 painter->scale( 1, 1 );
87 painter->setBrush( color );
88 painter->drawPolygon( pArray );
92 painter->translate( _zoomHandler->zoomItX(coord.x()),_zoomHandler->zoomItY( coord.y()) );
93 painter->setPen( TQPen(color , _zoomHandler->zoomItX( _w )) );
94 painter->rotate( angle );
95 painter->scale( 1, 1 );
96 TQPoint p1( _zoomHandler->zoomItX(-10 - _w), _zoomHandler->zoomItY(-3 - _w / 2) );
97 TQPoint p2( _zoomHandler->zoomItX(0), _zoomHandler->zoomItY(0) );
98 TQPoint p3( _zoomHandler->zoomItX(-10 - _w), _zoomHandler->zoomItY(3 + _w / 2) );
99 painter->drawLine( p2, p1);
100 painter->drawLine( p2, p3);
102 case L_DIMENSION_LINE:
104 painter->translate( _zoomHandler->zoomItX(coord.x()),_zoomHandler->zoomItY( coord.y()) );
105 painter->setPen( TQPen(color , _zoomHandler->zoomItX( _w )) );
106 painter->rotate( angle );
107 painter->scale( 1, 1 );
108 TQPoint p1( _zoomHandler->zoomItX(- _w / 2), _zoomHandler->zoomItY(-5 - _w / 2) );
109 TQPoint p2( _zoomHandler->zoomItX(- _w / 2), _zoomHandler->zoomItY(5 + _w / 2 ) );
110 painter->drawLine( p1, p2);
114 painter->translate( _zoomHandler->zoomItX(coord.x()),_zoomHandler->zoomItY( coord.y()) );
115 painter->rotate( angle );
116 painter->scale( 1, 1 );
117 painter->setBrush( color );
119 KoPoint p1( -10 - _w , -3 - _w / 2 );
121 KoPoint p3( -10 - _w, 3 + _w / 2 );
123 KoPoint p4( -20 - _w, -3 - _w / 2 );
124 KoPoint p5( -10, 0 );
125 KoPoint p6( -20 - _w, 3 + _w / 2 );
127 TQPointArray pArray( 3 );
128 pArray.setPoint( 0, _zoomHandler->zoomPoint(p1) );
129 pArray.setPoint( 1, _zoomHandler->zoomPoint(p2) );
130 pArray.setPoint( 2, _zoomHandler->zoomPoint(p3) );
131 painter->drawPolygon( pArray );
132 pArray.setPoint( 0, _zoomHandler->zoomPoint(p4) );
133 pArray.setPoint( 1, _zoomHandler->zoomPoint(p5) );
134 pArray.setPoint( 2, _zoomHandler->zoomPoint(p6) );
135 painter->drawPolygon( pArray );
138 case L_DOUBLE_LINE_ARROW:
140 painter->translate( _zoomHandler->zoomItX(coord.x()),_zoomHandler->zoomItY( coord.y()) );
141 painter->setPen( TQPen(color , _zoomHandler->zoomItX( _w )) );
142 painter->rotate( angle );
143 painter->scale( 1, 1 );
144 TQPoint p1( _zoomHandler->zoomItX(-10 - _w), _zoomHandler->zoomItY(-3 - _w / 2) );
145 TQPoint p2( _zoomHandler->zoomItX(0), _zoomHandler->zoomItY(0) );
146 TQPoint p3( _zoomHandler->zoomItX(-10 - _w), _zoomHandler->zoomItY(3 + _w / 2) );
147 painter->drawLine( p2, p1);
148 painter->drawLine( p2, p3);
150 p1.setX( _zoomHandler->zoomItX(-20 - _w));
151 p2.setX( _zoomHandler->zoomItX(-10));
152 p3.setX( _zoomHandler->zoomItX(-20 - _w));
153 painter->drawLine( p2, p1);
154 painter->drawLine( p2, p3);
161void drawFigureWithOffset( LineEnd figure, TQPainter* painter,
const TQPoint &coord,
const TQColor &color,
162 int _w,
float angle, KoZoomHandler*_zoomHandler)
164 KoSize diff = getOffset( figure, _w, angle );
165 KoPoint offsetPoint(diff.width(), diff.height());
166 offsetPoint += _zoomHandler->unzoomPoint( coord );
167 drawFigure( figure, painter, offsetPoint, color, _w, angle,_zoomHandler );
170void drawFigureWithOffset( LineEnd figure, TQPainter* painter,
const KoPoint &coord,
const TQColor &color,
171 int w,
float angle, KoZoomHandler*_zoomHandler,
bool begin )
173 KoSize diff = getOffset( figure, w, angle );
174 KoPoint offsetPoint(diff.width(), diff.height());
175 double offsetAngle = angle + ( begin ? 90.0 : -90.0 );
176 KoPoint lineOffset( w * cos( offsetAngle * M_PI / 180.0 ) / 2,
177 w * sin( offsetAngle * M_PI / 180.0 ) / 2 );
178 offsetPoint += coord + lineOffset;
179 drawFigure( figure, painter, offsetPoint, color, w, angle,_zoomHandler );
182KoSize getBoundingSize( LineEnd figure,
int _w,
const KoZoomHandler*_zoomHandler )
189 if ( _h % 2 == 0 ) _h--;
190 return KoSize( _zoomHandler->zoomItX( 10 + _w), _zoomHandler->zoomItY( 10 + _h) );
193 return KoSize( _zoomHandler->zoomItX(10 + _w), _zoomHandler->zoomItY(10 + _w) );
196 return KoSize( _zoomHandler->zoomItX( 14 + _w),_zoomHandler->zoomItY( 14 + _w) );
199 return KoSize( _zoomHandler->zoomItX( 14 + _w),_zoomHandler->zoomItY( 14 + _w) );
201 case L_DIMENSION_LINE:
202 return KoSize( _zoomHandler->zoomItX( 14 +_w),_zoomHandler->zoomItY( 14 + _w) );
205 return KoSize( _zoomHandler->zoomItX( 28 + _w),_zoomHandler->zoomItY( 14 + _w) );
207 case L_DOUBLE_LINE_ARROW:
208 return KoSize( _zoomHandler->zoomItX( 28 + _w),_zoomHandler->zoomItY( 14 + _w) );
213 return KoSize( 0, 0 );
216KoSize getOffset( LineEnd figure,
int _w,
float angle )
237 case L_DOUBLE_LINE_ARROW:
243 case L_DIMENSION_LINE:
252 return KoSize( x * cos( angle * M_PI / 180.0 ), y * sin( angle * M_PI / 180 ) );
255TQString lineEndBeginName( LineEnd type )
260 return TQString(
"NORMAL");
262 return TQString(
"ARROW");
264 return TQString(
"SQUARE");
266 return TQString(
"CIRCLE");
268 return TQString(
"LINE_ARROW");
269 case L_DIMENSION_LINE:
270 return TQString(
"DIMENSION_LINE");
272 return TQString(
"DOUBLE_ARROW");
273 case L_DOUBLE_LINE_ARROW:
274 return TQString(
"DOUBLE_LINE_ARROW");
279LineEnd lineEndBeginFromString(
const TQString & type )
283 else if(type==
"ARROW")
285 else if(type==
"SQUARE")
287 else if(type==
"CIRCLE")
289 else if(type==
"LINE_ARROW")
291 else if (type==
"DIMENSION_LINE")
292 return L_DIMENSION_LINE;
293 else if (type==
"DOUBLE_ARROW")
294 return L_DOUBLE_ARROW;
295 else if (type==
"DOUBLE_LINE_ARROW")
296 return L_DOUBLE_LINE_ARROW;
298 kdDebug(33001)<<
"Error in LineEnd lineEndBeginFromString( const TQString & name )\n";
302TQString lineEndBeginSvg( LineEnd element )
311 str =
"m10 0-10 30h20z";
314 str =
"m0 0h10v10h-10z";
317 str =
"m462 1118-102-29-102-51-93-72-72-93-51-102-29-102-13-105 13-102 29-106 51-102 72-89 93-72 102-50 102-34 106-9 101 9 106 34 98 50 93 72 72 89 51 102 29 106 13 102-13 105-29 102-51 102-72 93-93 72-98 51-106 29-101 13z";
320 str =
"m0 2108v17 17l12 42 30 34 38 21 43 4 29-8 30-21 25-26 13-34 343-1532 339 1520 13 42 29 34 39 21 42 4 42-12 34-30 21-42v-39-12l-4 4-440-1998-9-42-25-39-38-25-43-8-42 8-38 25-26 39-8 42z";
322 case L_DIMENSION_LINE:
323 str =
"m0 0h278 278 280v36 36 38h-278-278-280v-36-36z";
326 str =
"m737 1131h394l-564-1131-567 1131h398l-398 787h1131z";
328 case L_DOUBLE_LINE_ARROW:
330 str =
"m0 11h312 312h122z";
336TQCursor KPrUtils::penCursor()
338 static unsigned char pen_bits[] = {
339 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x7d,
340 0x00, 0x80, 0x7e, 0x00, 0x40, 0x7f, 0x00, 0xa0, 0x3f, 0x00, 0xd0, 0x1f,
341 0x00, 0xe8, 0x0f, 0x00, 0xf4, 0x07, 0x00, 0xfa, 0x03, 0x00, 0xfd, 0x01,
342 0x80, 0xfe, 0x00, 0x40, 0x7f, 0x00, 0xa0, 0x3f, 0x00, 0xf0, 0x1f, 0x00,
343 0xd0, 0x0f, 0x00, 0x88, 0x07, 0x00, 0x88, 0x03, 0x00, 0xe4, 0x01, 0x00,
344 0x7c, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00};
346 TQBitmap pen_bitmap( 24, 24, pen_bits,
true );
347 TQBitmap pen_mask( 24, 24 );
348 TQPixmap pix( pen_bitmap );
349 pen_mask = pix.createHeuristicMask(
false );
350 pix.setMask( pen_mask );
352 return TQCursor( pix, 1, 22 );
355TQCursor KPrUtils::rotateCursor()
357 static unsigned char rotate_bits[] = {
358 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0xc0, 0xf3, 0x00, 0xe0, 0xff, 0x01,
359 0xf0, 0xe1, 0x03, 0x70, 0x80, 0x03, 0x78, 0x80, 0x07, 0x38, 0x00, 0x07,
360 0x38, 0x00, 0x07, 0xff, 0xe1, 0x3f, 0xfa, 0xc4, 0x17, 0x74, 0x8c, 0x0b,
361 0x28, 0x3a, 0x05, 0x10, 0x1f, 0x02, 0x00, 0x0c, 0x00, 0x00, 0x08, 0x00,
362 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
363 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
365 TQBitmap rotate_bitmap( 22, 22, rotate_bits,
true );
366 TQBitmap rotate_mask( 22, 22 );
367 TQPixmap pix( rotate_bitmap );
368 rotate_mask = pix.createHeuristicMask(
false );
369 pix.setMask( rotate_mask );
371 return TQCursor( pix, 11, 13 );
374TQString saveOasisTimer(
int second )
377 time = time.addSecs( second );
378 TQString hours( TQString::number( time.hour() ).rightJustify( 2,
'0' ) );
379 TQString ms( TQString::number( time.minute() ).rightJustify( 2,
'0' ) );
380 TQString sec( TQString::number( time.second() ).rightJustify( 2,
'0' ) );
385 TQString timeIso = TQString(
"PT%1H%2M%3S" ).arg( hours ).arg( ms ).arg( sec );
389int loadOasisTimer(
const TQString & timer )
391 TQString str( timer );
393 int hour( str.mid( 2, 2 ).toInt() );
394 int minute( str.mid( 5, 2 ).toInt() );
395 int second( str.mid( 8, 2 ).toInt() );
397 return ( second + minute*60 + hour*60*60 );
401int readOasisSettingsInt(
const TQDomElement & element )
403 if ( element.hasAttributeNS( KoXmlNS::config,
"type" ) )
405 TQString type = element.attributeNS( KoXmlNS::config,
"type", TQString() );
406 TQString str = element.text();
408 int value = str.toInt( &b );
409 return ( b ? value : 0 );
414double readOasisSettingsDouble(
const TQDomElement & element )
416 if ( element.hasAttributeNS( KoXmlNS::config,
"type" ) )
418 TQString type = element.attributeNS( KoXmlNS::config,
"type", TQString() );
419 TQString str = element.text();
421 double value = str.toDouble( &b );
422 return ( b ? value : 0 );
427bool readOasisSettingsBool(
const TQDomElement & element )
429 if ( element.hasAttributeNS( KoXmlNS::config,
"type" ) )
431 TQString type = element.attributeNS( KoXmlNS::config,
"type", TQString() );
432 TQString str = element.text();
433 return ( str ==
"true" ?
true :
false );
438TQString readOasisSettingsString(
const TQDomElement & element )
440 if ( element.hasAttributeNS( KoXmlNS::config,
"type" ) )
442 TQString type = element.attributeNS( KoXmlNS::config,
"type", TQString() );
443 TQString str = element.text();