diff options
author | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-01-20 01:29:50 +0000 |
---|---|---|
committer | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-01-20 01:29:50 +0000 |
commit | 8362bf63dea22bbf6736609b0f49c152f975eb63 (patch) | |
tree | 0eea3928e39e50fae91d4e68b21b1e6cbae25604 /kpresenter/KPrUtils.cpp | |
download | koffice-8362bf63dea22bbf6736609b0f49c152f975eb63.tar.gz koffice-8362bf63dea22bbf6736609b0f49c152f975eb63.zip |
Added old abandoned KDE3 version of koffice
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/koffice@1077364 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kpresenter/KPrUtils.cpp')
-rw-r--r-- | kpresenter/KPrUtils.cpp | 448 |
1 files changed, 448 insertions, 0 deletions
diff --git a/kpresenter/KPrUtils.cpp b/kpresenter/KPrUtils.cpp new file mode 100644 index 00000000..0387de48 --- /dev/null +++ b/kpresenter/KPrUtils.cpp @@ -0,0 +1,448 @@ +// -*- Mode: c++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4; -*- +/* This file is part of the KDE project + Copyright (C) 1998, 1999 Reginald Stadlbauer <[email protected]> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. +*/ + +#include "KPrUtils.h" + +#include "KPrObject.h" +#include "KPrGroupObject.h" +#include "KPrFreehandObject.h" +#include "KPrPolylineObject.h" +#include "KPrBezierCurveObject.h" +#include "KPrPieObject.h" + +#include <KoXmlNS.h> +#include <KoTextZoomHandler.h> +#include <KoPoint.h> + +#include <qpainter.h> +#include <qpointarray.h> +#include <qpoint.h> +#include <qcolor.h> +#include <qsize.h> +#include <qbitmap.h> +#include <qcursor.h> +#include <qdatetime.h> +#include <qdom.h> + +void drawFigure( LineEnd figure, QPainter* painter, const KoPoint &coord, const QColor &color, + int _w, float angle, KoZoomHandler* _zoomHandler) +{ + painter->save(); + painter->setPen( Qt::NoPen ); + painter->setBrush( Qt::NoBrush ); + + switch ( figure ) + { + case L_SQUARE: + { + int _h = _w; + if ( _h % 2 == 0 ) _h--; + painter->translate( _zoomHandler->zoomItX(coord.x()), _zoomHandler->zoomItY( coord.y()) ); + painter->rotate( angle ); + painter->scale( 1, 1 ); + painter->fillRect( _zoomHandler->zoomItX( -6 - _w ), + _zoomHandler->zoomItY( -3 - _h / 2), + _zoomHandler->zoomItX( 6 + _w), + _zoomHandler->zoomItY( 6 + _h), color ); + } break; + case L_CIRCLE: + { + painter->translate( _zoomHandler->zoomItX(coord.x()), _zoomHandler->zoomItY(coord.y()) ); + painter->rotate( angle ); + painter->setBrush( color ); + painter->drawEllipse( _zoomHandler->zoomItX( -6 - _w ), + _zoomHandler->zoomItY( -3 - _w / 2 ), + _zoomHandler->zoomItX( 6 + _w), + _zoomHandler->zoomItY(6 + _w) ); + } break; + case L_ARROW: + { + KoPoint p1( -10 - _w, -3 - _w / 2 ); + KoPoint p2( 0 , 0 ); + KoPoint p3( -10 - _w, 3 + _w / 2 ); + QPointArray pArray( 3 ); + pArray.setPoint( 0, _zoomHandler->zoomPoint(p1) ); + pArray.setPoint( 1, _zoomHandler->zoomPoint(p2) ); + pArray.setPoint( 2, _zoomHandler->zoomPoint(p3) ); + + painter->translate( _zoomHandler->zoomItX(coord.x()),_zoomHandler->zoomItY( coord.y()) ); + painter->rotate( angle ); + painter->scale( 1, 1 ); + painter->setBrush( color ); + painter->drawPolygon( pArray ); + } break; + case L_LINE_ARROW: + { + painter->translate( _zoomHandler->zoomItX(coord.x()),_zoomHandler->zoomItY( coord.y()) ); + painter->setPen( QPen(color , _zoomHandler->zoomItX( _w )) ); + painter->rotate( angle ); + painter->scale( 1, 1 ); + QPoint p1( _zoomHandler->zoomItX(-10 - _w), _zoomHandler->zoomItY(-3 - _w / 2) ); + QPoint p2( _zoomHandler->zoomItX(0), _zoomHandler->zoomItY(0) ); + QPoint p3( _zoomHandler->zoomItX(-10 - _w), _zoomHandler->zoomItY(3 + _w / 2) ); + painter->drawLine( p2, p1); + painter->drawLine( p2, p3); + }break; + case L_DIMENSION_LINE: + { + painter->translate( _zoomHandler->zoomItX(coord.x()),_zoomHandler->zoomItY( coord.y()) ); + painter->setPen( QPen(color , _zoomHandler->zoomItX( _w )) ); + painter->rotate( angle ); + painter->scale( 1, 1 ); + QPoint p1( _zoomHandler->zoomItX(- _w / 2), _zoomHandler->zoomItY(-5 - _w / 2) ); + QPoint p2( _zoomHandler->zoomItX(- _w / 2), _zoomHandler->zoomItY(5 + _w / 2 ) ); + painter->drawLine( p1, p2); + }break; + case L_DOUBLE_ARROW: + { + painter->translate( _zoomHandler->zoomItX(coord.x()),_zoomHandler->zoomItY( coord.y()) ); + painter->rotate( angle ); + painter->scale( 1, 1 ); + painter->setBrush( color ); + + KoPoint p1( -10 - _w , -3 - _w / 2 ); + KoPoint p2( 0, 0 ); + KoPoint p3( -10 - _w, 3 + _w / 2 ); + + KoPoint p4( -20 - _w, -3 - _w / 2 ); + KoPoint p5( -10, 0 ); + KoPoint p6( -20 - _w, 3 + _w / 2 ); + + QPointArray pArray( 3 ); + pArray.setPoint( 0, _zoomHandler->zoomPoint(p1) ); + pArray.setPoint( 1, _zoomHandler->zoomPoint(p2) ); + pArray.setPoint( 2, _zoomHandler->zoomPoint(p3) ); + painter->drawPolygon( pArray ); + pArray.setPoint( 0, _zoomHandler->zoomPoint(p4) ); + pArray.setPoint( 1, _zoomHandler->zoomPoint(p5) ); + pArray.setPoint( 2, _zoomHandler->zoomPoint(p6) ); + painter->drawPolygon( pArray ); + + }break; + case L_DOUBLE_LINE_ARROW: + { + painter->translate( _zoomHandler->zoomItX(coord.x()),_zoomHandler->zoomItY( coord.y()) ); + painter->setPen( QPen(color , _zoomHandler->zoomItX( _w )) ); + painter->rotate( angle ); + painter->scale( 1, 1 ); + QPoint p1( _zoomHandler->zoomItX(-10 - _w), _zoomHandler->zoomItY(-3 - _w / 2) ); + QPoint p2( _zoomHandler->zoomItX(0), _zoomHandler->zoomItY(0) ); + QPoint p3( _zoomHandler->zoomItX(-10 - _w), _zoomHandler->zoomItY(3 + _w / 2) ); + painter->drawLine( p2, p1); + painter->drawLine( p2, p3); + + p1.setX( _zoomHandler->zoomItX(-20 - _w)); + p2.setX( _zoomHandler->zoomItX(-10)); + p3.setX( _zoomHandler->zoomItX(-20 - _w)); + painter->drawLine( p2, p1); + painter->drawLine( p2, p3); + }break; + default: break; + } + painter->restore(); +} + +void drawFigureWithOffset( LineEnd figure, QPainter* painter, const QPoint &coord, const QColor &color, + int _w, float angle, KoZoomHandler*_zoomHandler) +{ + KoSize diff = getOffset( figure, _w, angle ); + KoPoint offsetPoint(diff.width(), diff.height()); + offsetPoint += _zoomHandler->unzoomPoint( coord ); + drawFigure( figure, painter, offsetPoint, color, _w, angle,_zoomHandler ); +} + +void drawFigureWithOffset( LineEnd figure, QPainter* painter, const KoPoint &coord, const QColor &color, + int w, float angle, KoZoomHandler*_zoomHandler, bool begin ) +{ + KoSize diff = getOffset( figure, w, angle ); + KoPoint offsetPoint(diff.width(), diff.height()); + double offsetAngle = angle + ( begin ? 90.0 : -90.0 ); + KoPoint lineOffset( w * cos( offsetAngle * M_PI / 180.0 ) / 2, + w * sin( offsetAngle * M_PI / 180.0 ) / 2 ); + offsetPoint += coord + lineOffset; + drawFigure( figure, painter, offsetPoint, color, w, angle,_zoomHandler ); +} + +KoSize getBoundingSize( LineEnd figure, int _w, const KoZoomHandler*_zoomHandler ) +{ + switch ( figure ) + { + case L_SQUARE: + { + int _h = (int)_w; + if ( _h % 2 == 0 ) _h--; + return KoSize( _zoomHandler->zoomItX( 10 + _w), _zoomHandler->zoomItY( 10 + _h) ); + } break; + case L_CIRCLE: + return KoSize( _zoomHandler->zoomItX(10 + _w), _zoomHandler->zoomItY(10 + _w) ); + break; + case L_ARROW: + return KoSize( _zoomHandler->zoomItX( 14 + _w),_zoomHandler->zoomItY( 14 + _w) ); + break; + case L_LINE_ARROW: + return KoSize( _zoomHandler->zoomItX( 14 + _w),_zoomHandler->zoomItY( 14 + _w) ); + break; + case L_DIMENSION_LINE: + return KoSize( _zoomHandler->zoomItX( 14 +_w),_zoomHandler->zoomItY( 14 + _w) ); + break; + case L_DOUBLE_ARROW: + return KoSize( _zoomHandler->zoomItX( 28 + _w),_zoomHandler->zoomItY( 14 + _w) ); + break; + case L_DOUBLE_LINE_ARROW: + return KoSize( _zoomHandler->zoomItX( 28 + _w),_zoomHandler->zoomItY( 14 + _w) ); + break; + default: break; + } + + return KoSize( 0, 0 ); +} + +KoSize getOffset( LineEnd figure, int _w, float angle ) +{ + double x = 0; + double y = 0; + switch ( figure ) + { + case L_ARROW: + case L_DOUBLE_ARROW: + { + x = _w * 2; + y = _w * 2; + break; + } + case L_SQUARE: + case L_CIRCLE: + { + x = _w + 3; + y = _w + 3; + break; + } + case L_LINE_ARROW: + case L_DOUBLE_LINE_ARROW: + { + x = _w + 1; + y = _w + 1; + break; + } + case L_DIMENSION_LINE: + { + x = _w / 2; + y = _w / 2; + break; + } + default: break; + } + + return KoSize( x * cos( angle * M_PI / 180.0 ), y * sin( angle * M_PI / 180 ) ); +} + +QString lineEndBeginName( LineEnd type ) +{ + switch(type) + { + case L_NORMAL: + return QString("NORMAL"); + case L_ARROW: + return QString("ARROW"); + case L_SQUARE: + return QString("SQUARE"); + case L_CIRCLE: + return QString("CIRCLE"); + case L_LINE_ARROW: + return QString("LINE_ARROW"); + case L_DIMENSION_LINE: + return QString("DIMENSION_LINE"); + case L_DOUBLE_ARROW: + return QString("DOUBLE_ARROW"); + case L_DOUBLE_LINE_ARROW: + return QString("DOUBLE_LINE_ARROW"); + } + return QString::null; +} + +LineEnd lineEndBeginFromString( const QString & type ) +{ + if(type=="NORMAL") + return L_NORMAL; + else if(type=="ARROW") + return L_ARROW; + else if(type=="SQUARE") + return L_SQUARE; + else if(type=="CIRCLE") + return L_CIRCLE; + else if(type=="LINE_ARROW") + return L_LINE_ARROW; + else if (type=="DIMENSION_LINE") + return L_DIMENSION_LINE; + else if (type=="DOUBLE_ARROW") + return L_DOUBLE_ARROW; + else if (type=="DOUBLE_LINE_ARROW") + return L_DOUBLE_LINE_ARROW; + else + kdDebug(33001)<<"Error in LineEnd lineEndBeginFromString( const QString & name )\n"; + return L_NORMAL; +} + +QString lineEndBeginSvg( LineEnd element ) +{ + QString str; + switch( element ) + { + case L_NORMAL: + //nothing + break; + case L_ARROW: + str = "m10 0-10 30h20z"; + break; + case L_SQUARE: + str = "m0 0h10v10h-10z"; + break; + case L_CIRCLE: + 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"; + break; + case L_LINE_ARROW: + 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"; + break; + case L_DIMENSION_LINE: + str = "m0 0h278 278 280v36 36 38h-278-278-280v-36-36z"; + break; + case L_DOUBLE_ARROW: + str = "m737 1131h394l-564-1131-567 1131h398l-398 787h1131z"; + break; + case L_DOUBLE_LINE_ARROW: + //this define is not good I don't know how to define it. + str = "m0 11h312 312h122z"; + break; + } + return str; +} + +QCursor KPrUtils::penCursor() +{ + static unsigned char pen_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x7d, + 0x00, 0x80, 0x7e, 0x00, 0x40, 0x7f, 0x00, 0xa0, 0x3f, 0x00, 0xd0, 0x1f, + 0x00, 0xe8, 0x0f, 0x00, 0xf4, 0x07, 0x00, 0xfa, 0x03, 0x00, 0xfd, 0x01, + 0x80, 0xfe, 0x00, 0x40, 0x7f, 0x00, 0xa0, 0x3f, 0x00, 0xf0, 0x1f, 0x00, + 0xd0, 0x0f, 0x00, 0x88, 0x07, 0x00, 0x88, 0x03, 0x00, 0xe4, 0x01, 0x00, + 0x7c, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00}; + + QBitmap pen_bitmap( 24, 24, pen_bits, true ); + QBitmap pen_mask( 24, 24 ); + QPixmap pix( pen_bitmap ); + pen_mask = pix.createHeuristicMask( false ); + pix.setMask( pen_mask ); + + return QCursor( pix, 1, 22 ); +} + +QCursor KPrUtils::rotateCursor() +{ + static unsigned char rotate_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0xc0, 0xf3, 0x00, 0xe0, 0xff, 0x01, + 0xf0, 0xe1, 0x03, 0x70, 0x80, 0x03, 0x78, 0x80, 0x07, 0x38, 0x00, 0x07, + 0x38, 0x00, 0x07, 0xff, 0xe1, 0x3f, 0xfa, 0xc4, 0x17, 0x74, 0x8c, 0x0b, + 0x28, 0x3a, 0x05, 0x10, 0x1f, 0x02, 0x00, 0x0c, 0x00, 0x00, 0x08, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + + QBitmap rotate_bitmap( 22, 22, rotate_bits, true ); + QBitmap rotate_mask( 22, 22 ); + QPixmap pix( rotate_bitmap ); + rotate_mask = pix.createHeuristicMask( false ); + pix.setMask( rotate_mask ); + + return QCursor( pix, 11, 13 ); +} + +QString saveOasisTimer( int second ) +{ + QTime time; + time = time.addSecs( second ); + QString hours( QString::number( time.hour() ).rightJustify( 2, '0' ) ); + QString ms( QString::number( time.minute() ).rightJustify( 2, '0' ) ); + QString sec( QString::number( time.second() ).rightJustify( 2, '0' ) ); + + + //ISO8601 chapter 5.5.3.2 + //QDate doesn't encode it as this format. + QString timeIso = QString( "PT%1H%2M%3S" ).arg( hours ).arg( ms ).arg( sec ); + return timeIso; +} + +int loadOasisTimer( const QString & timer ) +{ + QString str( timer ); + //convert date duration + int hour( str.mid( 2, 2 ).toInt() ); + int minute( str.mid( 5, 2 ).toInt() ); + int second( str.mid( 8, 2 ).toInt() ); + + return ( second + minute*60 + hour*60*60 ); +} + + +int readOasisSettingsInt( const QDomElement & element ) +{ + if ( element.hasAttributeNS( KoXmlNS::config, "type" ) ) + { + QString type = element.attributeNS( KoXmlNS::config, "type", QString::null ); + QString str = element.text(); + bool b; + int value = str.toInt( &b ); + return ( b ? value : 0 ); + } + return 0; +} + +double readOasisSettingsDouble( const QDomElement & element ) +{ + if ( element.hasAttributeNS( KoXmlNS::config, "type" ) ) + { + QString type = element.attributeNS( KoXmlNS::config, "type", QString::null ); + QString str = element.text(); + bool b; + double value = str.toDouble( &b ); + return ( b ? value : 0 ); + } + return 0.0; +} + +bool readOasisSettingsBool( const QDomElement & element ) +{ + if ( element.hasAttributeNS( KoXmlNS::config, "type" ) ) + { + QString type = element.attributeNS( KoXmlNS::config, "type", QString::null ); + QString str = element.text(); + return ( str == "true" ? true : false ); + } + return false; +} + +QString readOasisSettingsString( const QDomElement & element ) +{ + if ( element.hasAttributeNS( KoXmlNS::config, "type" ) ) + { + QString type = element.attributeNS( KoXmlNS::config, "type", QString::null ); + QString str = element.text(); + return str; + } + return QString::null; +} |