19#include "kspread_object.h"
20#include "kspread_canvas.h"
21#include "kspread_doc.h"
22#include "kspread_sheet.h"
23#include "kspread_view.h"
26#include <tdeapplication.h>
28#include <kimageeffect.h>
29#include <tdeparts/partmanager.h>
36#include <tqfileinfo.h>
42#include <KoDocument.h>
43#include <KoDocumentChild.h>
45#include <KoXmlWriter.h>
46#include <KoZoomHandler.h>
58EmbeddedObject::EmbeddedObject( Sheet *_sheet,
const KoRect& _geometry )
59 : m_geometry( _geometry), m_sheet(_sheet), m_objectName(
""), m_selected(false), m_protect(false), m_keepRatio(false), pen( TQt::black, 1, TQt::SolidLine )
66EmbeddedObject::~EmbeddedObject()
69KoRect EmbeddedObject::geometry()
73void EmbeddedObject::setGeometry(
const KoRect &rect )
78void EmbeddedObject::moveBy(
const KoPoint &_point )
80 m_geometry.moveTopLeft( m_geometry.topLeft() + _point );
83void EmbeddedObject::moveBy(
double _dx,
double _dy )
85 m_geometry.moveTopLeft( m_geometry.topLeft() + KoPoint( _dx, _dy ) );
88void EmbeddedObject::resizeBy(
const KoSize & _size )
90 resizeBy( _size.width(), _size.height() );
93void EmbeddedObject::resizeBy(
double _dx,
double _dy)
95 m_geometry.setSize( KoSize( m_geometry.width()+_dx, m_geometry.height()+_dy) );
98bool EmbeddedObject::load(
const TQDomElement& )
100 kdDebug() <<
"Loading EmbeddedObject" << endl;
104void EmbeddedObject::loadOasis(
const TQDomElement &element, KoOasisLoadingContext & context )
106 if(element.hasAttributeNS( KoXmlNS::draw,
"name" ))
107 m_objectName = element.attributeNS( KoXmlNS::draw,
"name", TQString());
108 m_geometry.setX( KoUnit::parseValue( element.attributeNS( KoXmlNS::svg,
"x", TQString() ) ) );
109 m_geometry.setY( KoUnit::parseValue( element.attributeNS( KoXmlNS::svg,
"y", TQString() ) ) );
110 m_geometry.setWidth(KoUnit::parseValue( element.attributeNS( KoXmlNS::svg,
"width", TQString() )) );
111 m_geometry.setHeight(KoUnit::parseValue( element.attributeNS( KoXmlNS::svg,
"height", TQString() ) ) );
113 KoStyleStack &styleStack = context.styleStack();
115 styleStack.setTypeProperties(
"" );
119TQDomElement EmbeddedObject::save( TQDomDocument& )
121 kdDebug() <<
"Saving EmbeddedObject..." << endl;
122 return TQDomElement();
125void EmbeddedObject::saveOasisPosObject( KoXmlWriter &xmlWriter,
int indexObj )
const
127 xmlWriter.addAttribute(
"draw:id",
"object" + TQString::number( indexObj ) );
129 xmlWriter.addAttributePt(
"svg:x", sheet()->doc()->savingWholeDocument() ? m_geometry.x() : m_geometry.x() + 20.0 );
130 xmlWriter.addAttributePt(
"svg:y", sheet()->doc()->savingWholeDocument() ? m_geometry.y() : m_geometry.y() + 20.0 );
131 xmlWriter.addAttributePt(
"svg:width", m_geometry.width() );
132 xmlWriter.addAttributePt(
"svg:height", m_geometry.height() );
142bool EmbeddedObject::saveOasisObjectAttributes( KSpreadOasisSaveContext & )
const
144 kdDebug() <<
"bool saveOasisObjectAttributes not implemented";
148bool EmbeddedObject::saveOasisObject( KSpreadOasisSaveContext &sc )
const
152 saveOasisPosObject( sc.xmlWriter, sc.indexObj );
153 if( !getObjectName().isEmpty())
154 sc.xmlWriter.addAttribute(
"draw:name", getObjectName() );
156 saveOasisObjectAttributes( sc );
158 sc.xmlWriter.endElement();
162void EmbeddedObject::draw( TQPainter *_painter )
164 paintSelection(_painter, SM_MOVERESIZE );
190 TQSize actualSize = geometry().size().toTQSize();
192 xZoom = (double) desiredSize.width() / (double)actualSize.width();
193 yZoom = (double) desiredSize.height() / (double)actualSize.height();
196void EmbeddedObject::paintSelection( TQPainter *_painter, SelectionMode mode )
198 if ( !m_selected || mode == SM_NONE )
202 KoRect bound( geometry().left(), geometry().top(),
203 geometry().width() , geometry().height() );
204 TQRect zoomedBound = sheet()->doc()->zoomRect( bound ) ;
207 _painter->setPen( pen );
208 _painter->setBrush( kapp->palette().color( TQPalette::Active, TQColorGroup::Highlight ) );
211 KoRect r = ( bound );
212 int x = sheet()->doc()->zoomItX( r.left() );
213 int y = sheet()->doc()->zoomItY( r.top() );
216 int w = sheet()->doc()->zoomItX(r.width()) - 6;
217 int h = sheet()->doc()->zoomItY(r.height()) - 6;
219 if ( mode == SM_MOVERESIZE ) {
220 _painter->drawRect( x, y, zX6, zY6 );
221 _painter->drawRect( x, y + h / 2, zX6, zY6 );
222 _painter->drawRect( x, y + h, zX6, zY6 );
223 _painter->drawRect( x + w, y, zX6, zY6 );
224 _painter->drawRect( x + w, y + h / 2, zX6, zY6 );
225 _painter->drawRect( x + w, y + h, zX6, zY6 );
226 _painter->drawRect( x + w / 2, y,zX6, zY6 );
227 _painter->drawRect( x + w / 2, y + h, zX6, zY6 );
229 else if ( mode == SM_PROTECT) {
230 _painter->drawRect( x, y, zX6, zY6 );
231 _painter->drawRect( x, y + h / 2, zX6, zY6 );
232 _painter->drawRect( x, y + h, zX6, zY6 );
233 _painter->drawRect( x + w, y, zX6, zY6 );
234 _painter->drawRect( x + w, y + h / 2, zX6, zY6 );
235 _painter->drawRect( x + w, y + h, zX6, zY6 );
236 _painter->drawRect( x + w / 2, y,zX6, zY6 );
237 _painter->drawRect( x + w / 2, y + h, zX6, zY6 );
244 TQBrush brush=kapp->palette().color( TQPalette::Active,TQColorGroup::Base );
245 _painter->fillRect( x, y, zX6, zY6, brush );
246 _painter->fillRect( x, y + h / 2, zX6, zY6, brush);
247 _painter->fillRect( x, y + h, zX6, zY6, brush );
248 _painter->fillRect( x + w, y, zX6, zY6, brush );
249 _painter->fillRect( x + w, y + h / 2, zX6, zY6, brush );
250 _painter->fillRect( x + w , y + h , zX6 , zY6 , brush );
251 _painter->fillRect( x + w / 2 , y ,zX6 , zY6 , brush );
252 _painter->fillRect( x + w / 2, y + h , zX6 , zY6 , brush );
254 else if ( mode == SM_ROTATE ) {
255 _painter->drawEllipse( x, y, zX6, zY6 );
256 _painter->drawEllipse( x, y + h, zX6, zY6 );
257 _painter->drawEllipse( x + w, y, zX6, zY6 );
258 _painter->drawEllipse( x + w, y + h, zX6, zY6 );
264TQCursor EmbeddedObject::getCursor(
const TQPoint &_point, ModifyType &_modType, TQRect &geometry)
const
266 int px = (_point.x());
267 int py = (_point.y());
268 int ox = (geometry.x());
269 int oy = (geometry.y());
270 int ow = (geometry.width());
271 int oh = (geometry.height());
283 if ( px >= ox && py >= oy && px <= ox + TQMIN( ow / 3, sz ) && py <= oy + TQMIN( oh / 3, sz ) )
285 _modType = MT_RESIZE_LU;
287 return TQt::ForbiddenCursor;
288 return TQt::sizeFDiagCursor;
291 if ( px >= ox && py >= oy + oh / 2 - TQMIN( oh / 6, sz / 2 )
292 && px <= ox + TQMIN( ow / 3, sz)
293 && py <= oy + oh / 2 + TQMIN( oh / 6, sz / 2 ) )
295 _modType = MT_RESIZE_LF;
297 return TQt::ForbiddenCursor;
298 return TQt::sizeHorCursor;
301 if ( px >= ox && py >= oy + oh - TQMIN( oh / 3, sz ) && px <= ox + TQMIN( ow / 3, sz ) && py <= oy + oh )
303 _modType = MT_RESIZE_LD;
305 return TQt::ForbiddenCursor;
306 return TQt::sizeBDiagCursor;
309 if ( px >= ox + ow / 2 - TQMIN( ow / 6, sz / 2 ) && py >= oy
310 && px <= ox + ow / 2 + TQMIN( ow / 6, sz / 2 )
311 && py <= oy + TQMIN( oh / 3, sz ) )
313 _modType = MT_RESIZE_UP;
315 return TQt::ForbiddenCursor;
316 return TQt::sizeVerCursor;
319 if ( px >= ox + ow / 2 - TQMIN( ow / 6, sz / 2 ) && py >= oy + oh - TQMIN( oh / 3, sz )
320 && px <= ox + ow / 2 + TQMIN( ow / 6, sz / 2 ) && py <= oy + oh )
322 _modType = MT_RESIZE_DN;
324 return TQt::ForbiddenCursor;
325 return TQt::sizeVerCursor;
328 if ( px >= ox + ow - TQMIN( ow / 3, sz ) && py >= oy && px <= ox + ow && py <= oy + TQMIN( oh / 3, sz) )
330 _modType = MT_RESIZE_RU;
332 return TQt::ForbiddenCursor;
333 return TQt::sizeBDiagCursor;
336 if ( px >= ox + ow - TQMIN( ow / 3, sz ) && py >= oy + oh / 2 - TQMIN( oh / 6, sz / 2 )
337 && px <= ox + ow && py <= oy + oh / 2 + TQMIN( oh / 6, sz / 2) )
339 _modType = MT_RESIZE_RT;
341 return TQt::ForbiddenCursor;
342 return TQt::sizeHorCursor;
345 if ( px >= ox + ow - TQMIN( ow / 3, sz ) && py >= oy + oh - TQMIN( oh / 3, sz)
346 && px <= ox + ow && py <= oy + oh )
348 _modType = MT_RESIZE_RD;
350 return TQt::ForbiddenCursor;
351 return TQt::sizeFDiagCursor;
355 return TQt::sizeAllCursor;
359void EmbeddedObject::doDelete()
361 if ( cmds == 0 && !inObjList )
370EmbeddedKOfficeObject::EmbeddedKOfficeObject(
Doc *parent, Sheet *_sheet, KoDocument* doc,
const KoRect& geometry )
373 m_embeddedObject =
new KoDocumentChild(parent, doc, geometry.toTQRect() );
376EmbeddedKOfficeObject::EmbeddedKOfficeObject(
Doc *parent, Sheet *_sheet )
379 m_embeddedObject =
new KoDocumentChild( parent );
382EmbeddedKOfficeObject::~EmbeddedKOfficeObject()
384 delete m_embeddedObject;
387Doc* EmbeddedKOfficeObject::parent()
392KoDocumentChild* EmbeddedKOfficeObject::embeddedObject()
394 return m_embeddedObject;
397bool EmbeddedKOfficeObject::saveOasisObjectAttributes( KSpreadOasisSaveContext &sc )
const
399 kdDebug() <<
"EmbeddedKOfficeObject::saveOasisPart " << sc.partIndexObj << endl;
401 sc.xmlWriter.startElement(
"draw:object" );
402 const TQString name = TQString(
"Object_%1" ).arg( sc.partIndexObj + 1 );
404 m_embeddedObject->saveOasisAttributes( sc.xmlWriter, name );
406 if ( getType() != OBJECT_CHART )
407 sc.xmlWriter.endElement();
416bool EmbeddedKOfficeObject::load(
const TQDomElement& element )
418 kdDebug() <<
"Loading EmbeddedKOfficeObject" << endl;
419 bool result = embeddedObject()->load( element );
420 setGeometry( KoRect::fromTQRect( embeddedObject()->geometry() ) );
424void EmbeddedKOfficeObject::loadOasis(
const TQDomElement &element, KoOasisLoadingContext &context)
426 kdDebug()<<
"void EmbeddedKOfficeObject::loadOasis(const TQDomElement &element)******************\n";
427 EmbeddedObject::loadOasis( element, context );
429 TQDomElement objectElement = KoDom::namedItemNS( element, KoXmlNS::draw,
"object" );
430 m_embeddedObject->loadOasis( element, objectElement );
431 if( element.hasAttributeNS( KoXmlNS::draw,
"name" ) )
432 m_objectName = element.attributeNS( KoXmlNS::draw,
"name", TQString());
433 (void)m_embeddedObject->loadOasisDocument( context.store(), context.manifestDocument() );
436TQDomElement EmbeddedKOfficeObject::save( TQDomDocument& doc )
438 kdDebug() <<
"Saving EmbeddedKOfficeObject" << endl;
439 embeddedObject()->setGeometry( geometry().toTQRect() );
440 return m_embeddedObject->save( doc );
443void EmbeddedKOfficeObject::draw( TQPainter *_painter )
445 kdDebug() <<
"Painting..." << endl;
447 int const penw = pen.width() ;
449 geometry().width() - ( 2 * penw ), geometry().height() - ( 2 * penw ) );
450 TQRect
const zoomedBound = sheet()->doc()->zoomRect( bound );
453 int const xOffset = sheet()->doc()->zoomItX( geometry().left() + penw);
454 int const yOffset = sheet()->doc()->zoomItY( geometry().top() + penw );
456 TQRect new_geometry = zoomedBound;
460 _painter->translate( xOffset , yOffset );
462 new_geometry.moveBy( xOffset , yOffset );
463 new_geometry.moveBy( -_painter->window().x(), -_painter->window().y() );
466 _painter->setClipRect( zoomedBound, TQPainter::CoordPainter );
468 assert( embeddedObject()->document() != 0 );
470 double zoomX =
static_cast<double>( sheet()->doc()->zoom() ) / 100;
471 double zoomY =
static_cast<double>( sheet()->doc()->zoom() ) / 100;
472 embeddedObject()->document()->paintEverything( *_painter,
474 embeddedObject()->isTransparent(),
480 embeddedObject()->setGeometry( new_geometry );
483 EmbeddedObject::draw( _painter );
488 TQPixmap pixmap( (
int)( geometry().width()*xZoom ), (
int)( geometry().height()*yZoom ) );
490 TQPainter painter(&pixmap);
491 TQRect bound( 0,0,(
int)( geometry().width()*xZoom ), (
int)(geometry().height()*yZoom) );
492 embeddedObject()->document()->paintEverything(painter,bound,
493 embeddedObject()->isTransparent(),
500void EmbeddedKOfficeObject::activate(
View *_view,
Canvas* )
502 KoDocument* part = embeddedObject()->document();
505 kdDebug() <<
"Activating..." << endl;
507 _view->partManager()->addPart( part,
false );
508 _view->partManager()->setActivePart( part, _view );
511void EmbeddedKOfficeObject::deactivate()
516void EmbeddedKOfficeObject::updateChildGeometry()
540EmbeddedChart::EmbeddedChart(
Doc *_spread, Sheet *_sheet, KoDocument* doc,
const KoRect& geometry )
546EmbeddedChart::EmbeddedChart(
Doc *_spread, Sheet *_sheet )
552EmbeddedChart::~EmbeddedChart()
554 if ( m_embeddedObject->isDeleted() )
558void EmbeddedChart::setDataArea(
const TQRect& _data )
560 if ( m_pBinding == 0L )
561 m_pBinding =
new ChartBinding( m_sheet, _data,
this );
563 m_pBinding->setDataArea( _data );
566void EmbeddedChart::update()
569 m_pBinding->cellChanged( 0 );
577bool EmbeddedChart::load(
const TQDomElement& element )
579 kdDebug() <<
"Loading EmbeddedChart" << endl;
580 if ( !EmbeddedKOfficeObject::load( element ) )
583 if ( element.hasAttribute(
"left-cell" ) &&
584 element.hasAttribute(
"top-cell" ) &&
585 element.hasAttribute(
"right-cell" ) &&
586 element.hasAttribute(
"bottom-cell" ) )
589 r.setCoords( element.attribute(
"left-cell" ).toInt(),
590 element.attribute(
"top-cell" ).toInt(),
591 element.attribute(
"right-cell" ).toInt(),
592 element.attribute(
"bottom-cell" ).toInt() );
600void EmbeddedChart::loadOasis(
const TQDomElement &element, KoOasisLoadingContext &context)
602 kdDebug()<<
"void EmbeddedChart::loadOasis(const TQDomElement &element)******************\n";
603 EmbeddedKOfficeObject::loadOasis( element, context );
605 TQDomElement objectElement = KoDom::namedItemNS( element, KoXmlNS::draw,
"object" );
606 TQString str_range = objectElement.attributeNS( KoXmlNS::draw,
"notify-on-update-of-ranges", TQString());
608 if ( !str_range.isNull() )
610 str_range = Oasis::decodeFormula( str_range );
611 Range range( str_range );
612 if ( range.isValid() )
613 setDataArea( range.range() );
616 KoChart::Part* chartPart = chart();
618 chartPart->setCanChangeValue(
false );
622bool EmbeddedChart::saveOasisObjectAttributes( KSpreadOasisSaveContext &sc )
const
624 kdDebug() <<
"EmbeddedChart::saveOasisPart " << sc.partIndexObj << endl;
626 EmbeddedKOfficeObject::saveOasisObjectAttributes( sc );
629 TQRect dataArea = m_pBinding->dataArea();
630 TQString rangeName = util_rangeName( dataArea);
631 rangeName.insert( rangeName.find(
':') +1, sheet()->sheetName() +
"." );
632 rangeName.prepend( sheet()->sheetName() +
"." );
633 sc.xmlWriter.addAttribute(
"draw:notify-on-update-of-ranges", rangeName );
636 kdDebug() <<
"EmbeddedChart::saveOasisPart m_pBinding is NULL" << endl;
638 sc.xmlWriter.endElement();
643TQDomElement EmbeddedChart::save( TQDomDocument& doc )
645 kdDebug() <<
"Saving EmbeddedChart" << endl;
646 TQDomElement element = EmbeddedKOfficeObject::save( doc );
647 element.setTagName(
"chart" );
649 element.setAttribute(
"left-cell", m_pBinding->dataArea().left() );
650 element.setAttribute(
"right-cell", m_pBinding->dataArea().right() );
651 element.setAttribute(
"top-cell", m_pBinding->dataArea().top() );
652 element.setAttribute(
"bottom-cell", m_pBinding->dataArea().bottom() );
656void EmbeddedChart::draw( TQPainter *_painter )
658 EmbeddedKOfficeObject::draw( _painter );
663 bool res = m_embeddedObject->loadDocument( _store );
673 KoChart::Part* chartPart = chart();
675 chartPart->setCanChangeValue(
false );
679KoChart::Part* EmbeddedChart::chart()
682 return ::tqt_cast<KoChart::Part *>( m_embeddedObject->document() );
690EmbeddedPictureObject::EmbeddedPictureObject( Sheet *_sheet,
const KoRect& _geometry, KoPictureCollection *_imageCollection )
693 imageCollection = _imageCollection;
694 pen = KoPen( TQt::black, 1.0, TQt::NoPen );
695 mirrorType = PM_NORMAL;
701 m_ie_par1 = TQVariant();
702 m_ie_par2 = TQVariant();
703 m_ie_par3 = TQVariant();
705 m_cachedPixmap.setOptimization(TQPixmap::MemoryOptim);
709EmbeddedPictureObject::EmbeddedPictureObject( Sheet *_sheet,
const KoRect& _geometry, KoPictureCollection *_imageCollection,
const KoPictureKey & key )
712 imageCollection = _imageCollection;
715 pen = KoPen( TQt::black, 1.0, TQt::NoPen );
716 mirrorType = PM_NORMAL;
722 m_ie_par1 = TQVariant();
723 m_ie_par2 = TQVariant();
724 m_ie_par3 = TQVariant();
726 m_cachedPixmap.setOptimization(TQPixmap::MemoryOptim);
731EmbeddedPictureObject::EmbeddedPictureObject( Sheet *_sheet, KoPictureCollection *_imageCollection )
734 imageCollection = _imageCollection;
737 pen = KoPen( TQt::black, 1.0, TQt::NoPen );
738 mirrorType = PM_NORMAL;
744 m_ie_par1 = TQVariant();
745 m_ie_par2 = TQVariant();
746 m_ie_par3 = TQVariant();
748 m_cachedPixmap.setOptimization(TQPixmap::MemoryOptim);
751EmbeddedPictureObject::~EmbeddedPictureObject()
755bool EmbeddedPictureObject::load(
const TQDomElement& )
760TQDomElement EmbeddedPictureObject::save( TQDomDocument& )
762 kdDebug() <<
"Saving EmbeddedPictureObject" << endl;
763 return TQDomElement();
766TQString EmbeddedPictureObject::convertValueToPercent(
int val )
const
768 return TQString::number( val )+
"%";
771void EmbeddedPictureObject::saveOasisPictureElement( KoGenStyle &styleobjectauto )
const
776 styleobjectauto.addProperty(
"draw:luminance", convertValueToPercent( bright ) );
780 styleobjectauto.addProperty(
"draw:color-mode",
"greyscale" );
788 case IE_CHANNEL_INTENSITY:
791 TQString percent = convertValueToPercent( m_ie_par1.toInt() );
792 KImageEffect::RGBComponent channel =
static_cast<KImageEffect::RGBComponent
>( m_ie_par2.toInt() );
795 case KImageEffect::Red:
796 styleobjectauto.addProperty(
"draw:red", percent );
797 styleobjectauto.addProperty(
"draw:blue",
"0%" );
798 styleobjectauto.addProperty(
"draw:green",
"0%" );
800 case KImageEffect::Green:
801 styleobjectauto.addProperty(
"draw:green", percent );
802 styleobjectauto.addProperty(
"draw:red",
"0%" );
803 styleobjectauto.addProperty(
"draw:blue",
"0%" );
805 case KImageEffect::Blue:
806 styleobjectauto.addProperty(
"draw:blue", percent );
807 styleobjectauto.addProperty(
"draw:red",
"0%" );
808 styleobjectauto.addProperty(
"draw:green",
"0%" );
810 case KImageEffect::Gray:
812 case KImageEffect::All:
829 int val = m_ie_par1.toInt();
830 val = ( int )( (
double )val*100.0/255.0 );
831 styleobjectauto.addProperty(
"draw:contrast", convertValueToPercent( val ) );
871bool EmbeddedPictureObject::saveOasisObjectAttributes( KSpreadOasisSaveContext &sc )
const
873 sc.xmlWriter.startElement(
"draw:image" );
874 sc.xmlWriter.addAttribute(
"xlink:type",
"simple" );
875 sc.xmlWriter.addAttribute(
"xlink:show",
"embed" );
876 sc.xmlWriter.addAttribute(
"xlink:actuate",
"onLoad" );
877 sc.xmlWriter.addAttribute(
"xlink:href", imageCollection->getOasisFileName( image ) );
878 sc.xmlWriter.endElement();
889void EmbeddedPictureObject::loadPicture(
const TQString & fileName )
891 image = imageCollection->loadPicture( fileName );
899void EmbeddedPictureObject::setPicture(
const KoPictureKey & key )
901 image = imageCollection->findPicture( key );
904void EmbeddedPictureObject::reload(
void )
907 setPicture( image.getKey() );
942void EmbeddedPictureObject::loadOasisPictureEffect(KoOasisLoadingContext & context )
944 KoStyleStack &styleStack = context.styleStack();
945 styleStack.setTypeProperties(
"graphic" );
946 if ( styleStack.hasAttributeNS( KoXmlNS::draw,
"color-mode" ) && ( styleStack.attributeNS( KoXmlNS::draw,
"color-mode" )==
"greyscale" ) )
951 if ( styleStack.hasAttributeNS( KoXmlNS::draw,
"contrast" ) )
953 TQString str( styleStack.attributeNS( KoXmlNS::draw,
"contrast" ) );
954 str = str.remove(
'%' );
955 int val = str.toInt();
956 m_effect = IE_CONTRAST;
957 val = ( int )( 255.0 *val/100.0 );
958 m_ie_par1 = TQVariant(val);
960 if ( styleStack.hasAttributeNS( KoXmlNS::draw,
"red" ) && styleStack.attributeNS( KoXmlNS::draw,
"red" ) !=
"0%" )
962 TQString str( styleStack.attributeNS( KoXmlNS::draw,
"red" ) );
963 str = str.remove(
'%' );
964 int val = str.toInt();
965 m_effect = IE_CHANNEL_INTENSITY;
966 m_ie_par1 = TQVariant(val);
967 m_ie_par2 = TQVariant( (
int )KImageEffect::Red );
969 if ( styleStack.hasAttributeNS( KoXmlNS::draw,
"green" ) && styleStack.attributeNS( KoXmlNS::draw,
"green" ) !=
"0%" )
971 TQString str( styleStack.attributeNS( KoXmlNS::draw,
"green" ) );
972 str = str.remove(
'%' );
973 int val = str.toInt();
974 m_effect = IE_CHANNEL_INTENSITY;
975 m_ie_par1 = TQVariant(val);
976 m_ie_par2 = TQVariant( (
int )KImageEffect::Green );
978 if ( styleStack.hasAttributeNS( KoXmlNS::draw,
"blue" ) && styleStack.attributeNS( KoXmlNS::draw,
"blue" ) !=
"0%" )
980 TQString str( styleStack.attributeNS( KoXmlNS::draw,
"blue" ) );
981 str = str.remove(
'%' );
982 int val = str.toInt();
983 m_effect = IE_CHANNEL_INTENSITY;
984 m_ie_par1 = TQVariant(val);
985 m_ie_par2 = TQVariant( (
int )KImageEffect::Blue );
987 if ( styleStack.hasAttributeNS( KoXmlNS::draw,
"luminance" ) )
989 TQString str( styleStack.attributeNS( KoXmlNS::draw,
"luminance" ) );
990 str = str.remove(
'%' );
991 bright = str.toInt();
995void EmbeddedPictureObject::fillStyle( KoGenStyle& styleObjectAuto, KoGenStyles& )
const
998 saveOasisPictureElement( styleObjectAuto );
1001void EmbeddedPictureObject::loadOasis(
const TQDomElement &element, KoOasisLoadingContext & context)
1004 EmbeddedObject::loadOasis( element, context );
1005 loadOasisPictureEffect( context );
1006 TQDomNode imageBox = KoDom::namedItemNS( element, KoXmlNS::draw,
"image" );
1007 const TQString href( imageBox.toElement().attributeNS( KoXmlNS::xlink,
"href", TQString()) );
1008 kdDebug()<<
" href: "<<href<<endl;
1009 if ( !href.isEmpty() )
1011 TQString strExtension;
1012 const int result=href.findRev(
".");
1015 strExtension=href.mid(result+1);
1017 TQString filename(href);
1018 const KoPictureKey key(filename, TQDateTime::currentDateTime(TQt::UTC));
1021 KoStore* store = context.store();
1022 if ( store->open( filename ) )
1024 KoStoreDevice dev(store);
1025 if ( !image.load( &dev, strExtension ) )
1026 kdWarning() <<
"Cannot load picture: " << filename <<
" " << href << endl;
1029 imageCollection->insertPicture( key, image );
1150void EmbeddedPictureObject::drawShadow( TQPainter* , KoZoomHandler* )
1202 KoZoomHandler zoomHandler;
1203 zoomHandler.setZoomedResolution( xZoom , yZoom );
1204 return generatePixmap( &zoomHandler );
1207TQPixmap EmbeddedPictureObject::generatePixmap(KoZoomHandler*_zoomHandler)
1209 const double penw = _zoomHandler->zoomItX( ( ( pen.style() == TQt::NoPen ) ? 1 : pen.width() ) / 2.0 );
1211 TQSize size( _zoomHandler->zoomSize( m_geometry.size() ) );
1213 TQPixmap pixmap(size);
1216 paint.begin( &pixmap );
1217 pixmap.fill( TQt::white );
1220 paint.setPen( TQt::NoPen );
1221 paint.setBrush( getBrush() );
1223 TQRect rect( (
int)( penw ), (
int)( penw ),
1224 (
int)( _zoomHandler->zoomItX( m_geometry.width() ) - 2.0 * penw ),
1225 (
int)( _zoomHandler->zoomItY( m_geometry.height() ) - 2.0 * penw ) );
1228 paint.drawRect( rect );
1239 image.draw(paint, 0, 0, size.width(), size.height(), 0, 0, -1, -1,
false);
1251void EmbeddedPictureObject::draw( TQPainter *_painter
1254 bool drawContour =
false;
1255 KoZoomHandler*_zoomHandler = sheet()->doc();
1258 if ( image.isNull() )
return;
1263 const double ox = m_geometry.x();
1264 const double oy = m_geometry.y();
1265 const double ow = m_geometry.width();
1266 const double oh = m_geometry.height();
1271 _painter->translate( _zoomHandler->zoomItX( ox ), _zoomHandler->zoomItY( oy ) );
1273 if ( kAbs(angle)> DBL_EPSILON ) {
1274 TQSize bs = TQSize( _zoomHandler->zoomItX( ow ), _zoomHandler->zoomItY( oh ) );
1275 TQRect br = TQRect( 0, 0, bs.width(), bs.height() );
1276 int pw = br.width();
1277 int ph = br.height();
1279 int pixYPos = -rr.y();
1280 int pixXPos = -rr.x();
1281 br.moveTopLeft( TQPoint( -br.width() / 2, -br.height() / 2 ) );
1282 rr.moveTopLeft( TQPoint( -rr.width() / 2, -rr.height() / 2 ) );
1285 m.translate( pw / 2, ph / 2 );
1287 m.translate( rr.left() + pixXPos, rr.top() + pixYPos );
1288 _painter->setWorldMatrix( m,
true );
1293 TQRect rect( 0, 0, (
int)( _zoomHandler->zoomItX( ow ) ),
1294 (
int)( _zoomHandler->zoomItY( oh ) ) );
1297 if (m_ie_par1.isNull())
1298 variants1=m_cachedPar1.isNull();
1300 variants1=(m_ie_par1 == m_cachedPar1);
1302 if (m_ie_par2.isNull())
1303 variants2=m_cachedPar2.isNull();
1305 variants2=(m_ie_par2 == m_cachedPar2);
1307 if (m_ie_par3.isNull())
1308 variants3=m_cachedPar3.isNull();
1310 variants3=(m_ie_par3 == m_cachedPar3);
1312 if (m_cachedRect == rect
1314 && m_cachedMirrorType == mirrorType && m_cachedSwapRGB == swapRGB && m_cachedGrayscal == grayscal
1315 && m_cachedBright == bright && m_cachedEffect == m_effect
1317 && m_cachedDepth == depth
1319 && m_ie_par1 == m_cachedPar1 && m_ie_par2 == m_cachedPar2 && m_ie_par3 == m_cachedPar3
1321 && variants1 && variants2 && variants3
1329 if (mirrorType != PM_NORMAL || depth != 0 || swapRGB || grayscal || bright != 0 || m_effect!=IE_NONE)
1330 m_cachedPixmap = changePictureSettings( generatePixmap( _zoomHandler ) );
1332 m_cachedPixmap = generatePixmap( _zoomHandler );
1333 m_cachedRect = rect;
1334 m_cachedMirrorType = mirrorType;
1335 m_cachedSwapRGB = swapRGB;
1336 m_cachedGrayscal = grayscal;
1337 m_cachedBright = bright;
1338 m_cachedEffect = m_effect;
1339 m_cachedDepth = depth;
1340 m_cachedPar1 = m_ie_par1;
1341 m_cachedPar2 = m_ie_par2;
1342 m_cachedPar3 = m_ie_par3;
1345 _painter->eraseRect( rect );
1346 _painter->drawPixmap( rect, m_cachedPixmap);
1367 _painter->restore();
1370 EmbeddedObject::draw( _painter );
1373TQPixmap EmbeddedPictureObject::getOriginalPixmap()
1375 TQSize _pixSize = image.getOriginalSize();
1376 kdDebug(33001) <<
"EmbeddedPictureObject::getOriginalPixmap size= " << _pixSize << endl;
1377 TQPixmap _pixmap = image.generatePixmap( _pixSize,
true );
1383TQPixmap EmbeddedPictureObject::changePictureSettings( TQPixmap _tmpPixmap )
1385 TQImage _tmpImage = _tmpPixmap.convertToImage();
1387 if (_tmpImage.isNull())
1390 bool _horizontal =
false;
1391 bool _vertical =
false;
1392 if ( mirrorType == PM_HORIZONTAL )
1394 else if ( mirrorType == PM_VERTICAL )
1396 else if ( mirrorType == PM_HORIZONTALANDVERTICAL ) {
1401 _tmpImage = _tmpImage.mirror( _horizontal, _vertical );
1404 TQImage tmpImg = _tmpImage.convertDepth( depth );
1405 if ( !tmpImg.isNull() )
1410 _tmpImage = _tmpImage.swapRGB();
1413 if ( depth == 1 || depth == 8 ) {
1414 for (
int i = 0; i < _tmpImage.numColors(); ++i ) {
1415 TQRgb rgb = _tmpImage.color( i );
1416 int gray = tqGray( rgb );
1417 rgb = tqRgb( gray, gray, gray );
1418 _tmpImage.setColor( i, rgb );
1422 int _width = _tmpImage.width();
1423 int _height = _tmpImage.height();
1427 for ( _x = 0; _x < _width; ++_x ) {
1428 for ( _y = 0; _y < _height; ++_y ) {
1429 if ( _tmpImage.valid( _x, _y ) ) {
1430 TQRgb rgb = _tmpImage.pixel( _x, _y );
1431 int gray = tqGray( rgb );
1432 rgb = tqRgb( gray, gray, gray );
1433 _tmpImage.setPixel( _x, _y, rgb );
1440 if ( bright != 0 ) {
1441 if ( depth == 1 || depth == 8 ) {
1442 for (
int i = 0; i < _tmpImage.numColors(); ++i ) {
1443 TQRgb rgb = _tmpImage.color( i );
1447 rgb = c.light( 100 + bright ).rgb();
1449 rgb = c.dark( 100 + abs( bright ) ).rgb();
1451 _tmpImage.setColor( i, rgb );
1455 int _width = _tmpImage.width();
1456 int _height = _tmpImage.height();
1460 for ( _x = 0; _x < _width; ++_x ) {
1461 for ( _y = 0; _y < _height; ++_y ) {
1462 if ( _tmpImage.valid( _x, _y ) ) {
1463 TQRgb rgb = _tmpImage.pixel( _x, _y );
1467 rgb = c.light( 100 + bright ).rgb();
1469 rgb = c.dark( 100 + abs( bright ) ).rgb();
1471 _tmpImage.setPixel( _x, _y, rgb );
1479 case IE_CHANNEL_INTENSITY: {
1480 _tmpImage = KImageEffect::channelIntensity(_tmpImage, m_ie_par1.toDouble()/100.0,
1481 static_cast<KImageEffect::RGBComponent
>(m_ie_par2.toInt()));
1485 _tmpImage = KImageEffect::fade(_tmpImage, m_ie_par1.toDouble(), m_ie_par2.toColor());
1489 _tmpImage = KImageEffect::flatten(_tmpImage, m_ie_par1.toColor(), m_ie_par2.toColor());
1492 case IE_INTENSITY: {
1493 _tmpImage = KImageEffect::intensity(_tmpImage, m_ie_par1.toDouble()/100.0);
1496 case IE_DESATURATE: {
1497 _tmpImage = KImageEffect::desaturate(_tmpImage, m_ie_par1.toDouble());
1501 _tmpImage = KImageEffect::contrast(_tmpImage, m_ie_par1.toInt());
1504 case IE_NORMALIZE: {
1505 KImageEffect::normalize(_tmpImage);
1509 KImageEffect::equalize(_tmpImage);
1512 case IE_THRESHOLD: {
1513 KImageEffect::threshold(_tmpImage, m_ie_par1.toInt());
1517 KImageEffect::solarize(_tmpImage, m_ie_par1.toDouble());
1521 _tmpImage = KImageEffect::emboss(_tmpImage);
1524 case IE_DESPECKLE: {
1525 _tmpImage = KImageEffect::despeckle(_tmpImage);
1529 _tmpImage = KImageEffect::charcoal(_tmpImage, m_ie_par1.toDouble());
1533 _tmpImage = KImageEffect::addNoise(_tmpImage,
static_cast<KImageEffect::NoiseType
>(m_ie_par1.toInt()));
1537 _tmpImage = KImageEffect::blur(_tmpImage, m_ie_par1.toDouble());
1541 _tmpImage = KImageEffect::edge(_tmpImage, m_ie_par1.toDouble());
1545 _tmpImage = KImageEffect::implode(_tmpImage, m_ie_par1.toDouble());
1548 case IE_OIL_PAINT: {
1549 _tmpImage = KImageEffect::oilPaint(_tmpImage, m_ie_par1.toInt());
1553 _tmpImage = KImageEffect::sharpen(_tmpImage, m_ie_par1.toDouble());
1557 _tmpImage = KImageEffect::spread(_tmpImage, m_ie_par1.toInt());
1561 _tmpImage = KImageEffect::shade(_tmpImage, m_ie_par1.toBool(), m_ie_par2.toDouble(), m_ie_par3.toDouble());
1565 _tmpImage = KImageEffect::swirl(_tmpImage, m_ie_par1.toDouble());
1569 _tmpImage = KImageEffect::wave(_tmpImage, m_ie_par1.toDouble(), m_ie_par2.toDouble());
1577 _tmpPixmap.convertFromImage( _tmpImage );
1582void EmbeddedPictureObject::flip(
bool )
The canvas builds a part of the GUI of KSpread.
This class holds the data that makes up a spreadsheet.
virtual const char * getOasisElementName() const
Get the element name for saving the object.
bool loadDocument(KoStore *_store)
Holds an embedded koffice object.
virtual const char * getOasisElementName() const
Get the element name for saving the object.
Contains basic information for every object.
TQPixmap toPixmap()
Renders the embedded object to a pixmap at 100% scale.
virtual const char * getOasisElementName() const =0
Get the element name for saving the object.
void calculateRequiredZoom(TQSize desiredSize, double &xZoom, double &yZoom)
Calculates the X and Y zoom factors required to render the embedded object at the given size.
virtual const char * getOasisElementName() const
Get the element name for saving the object.
Represents a region within a workbook.
The View class displays a KSpread document.