You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
162 lines
5.7 KiB
162 lines
5.7 KiB
/* This file is part of the KDE project
|
|
Copyright (C) 2001 David Faure <faure@kde.org>
|
|
|
|
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 <kdebug.h>
|
|
|
|
#include <KoPictureCollection.h>
|
|
|
|
#include "KWDocument.h"
|
|
#include "defs.h"
|
|
#include "KWTextFrameSet.h"
|
|
|
|
#include "KWTextImage.h"
|
|
|
|
KWTextImage::KWTextImage( KWTextDocument *textdoc, const TQString & filename )
|
|
: KoTextCustomItem( textdoc ), place( PlaceInline )
|
|
{
|
|
KWDocument * doc = textdoc->textFrameSet()->kWordDocument();
|
|
if ( !filename.isEmpty() )
|
|
{
|
|
m_image = doc->pictureCollection()->loadPicture( filename );
|
|
Q_ASSERT( !m_image.isNull() );
|
|
resize(); // Zoom if necessary
|
|
}
|
|
}
|
|
|
|
void KWTextImage::setImage( const KoPictureCollection & collection )
|
|
{
|
|
kdDebug(32001) << "Loading text image " << m_image.getKey().toString() << " (in KWTextImage::setImage)" << endl;
|
|
m_image=collection.findPicture( m_image.getKey() );
|
|
Q_ASSERT( !m_image.isNull() );
|
|
kdDebug(32001) << "size: " << m_image.getOriginalSize().width() << "x" << m_image.getOriginalSize().height() << endl;
|
|
resize();
|
|
}
|
|
|
|
void KWTextImage::resize()
|
|
{
|
|
if ( m_deleted )
|
|
return;
|
|
if ( !m_image.isNull() ) {
|
|
//KWDocument * doc = static_cast<KWTextDocument *>(parent)->textFrameSet()->kWordDocument();
|
|
width = m_image.getOriginalSize().width();
|
|
// width is a 100%-zoom pixel size. We want a LU pixel size -> we simply need 'to LU', i.e. ptToLayoutPt
|
|
width = KoTextZoomHandler::ptToLayoutUnitPt( width );
|
|
height = m_image.getOriginalSize().height();
|
|
height = KoTextZoomHandler::ptToLayoutUnitPt( height );
|
|
kdDebug() << "KWTextImage::resize: " << width << ", " << height << endl;
|
|
// no! m_image.setSize( TQSize( width, height ) );
|
|
}
|
|
}
|
|
|
|
void KWTextImage::drawCustomItem( TQPainter* p, int x, int y, int wpix, int hpix, int /*ascentpix*/, int cx, int cy, int cw, int ch, const TQColorGroup& cg, bool selected, int /*offset*/, bool drawingShadow)
|
|
{
|
|
if ( drawingShadow )
|
|
return;
|
|
|
|
// (x,y) is the position of the inline item (in pixels)
|
|
// (wpix,hpix) is the size of the inline item (in pixels)
|
|
// (cx,cy,cw,ch) is the rectangle to be painted, in pixels too
|
|
if ( m_image.isNull() ) {
|
|
kdDebug() << "KWTextImage::draw null image!" << endl;
|
|
p->fillRect( x, y, 50, 50, cg.dark() );
|
|
return;
|
|
}
|
|
|
|
TQSize imgSize( wpix, hpix );
|
|
|
|
TQRect rect( TQPoint(x, y), imgSize );
|
|
if ( !rect.intersects( TQRect( cx, cy, cw, ch ) ) )
|
|
return;
|
|
|
|
TQPixmap pixmap=m_image.generatePixmap( imgSize, true );
|
|
//if ( placement() == PlaceInline )
|
|
p->drawPixmap( x, y, pixmap );
|
|
//else
|
|
// p->drawPixmap( cx, cy, pixmap, cx - x, cy - y, cw, ch );
|
|
|
|
if ( selected && placement() == PlaceInline && p->device()->devType() != TQInternal::Printer ) {
|
|
p->fillRect( rect , TQBrush( cg.highlight(), TQBrush::Dense4Pattern) );
|
|
}
|
|
}
|
|
|
|
void KWTextImage::save( TQDomElement & parentElem )
|
|
{
|
|
// This code is similar to KWPictureFrameSet::save
|
|
KWDocument * doc = static_cast<KWTextDocument *>(parent)->textFrameSet()->kWordDocument();
|
|
|
|
TQDomElement imageElem = parentElem.ownerDocument().createElement( "PICTURE" );
|
|
parentElem.appendChild( imageElem );
|
|
//imageElem.setAttribute( "keepAspectRatio", "true" );
|
|
TQDomElement elem = parentElem.ownerDocument().createElement( "KEY" );
|
|
imageElem.appendChild( elem );
|
|
image().getKey().saveAttributes( elem );
|
|
// Now we must take care that a <KEY> element will be written as a child of <PICTURES>
|
|
doc->addTextImageRequest( this );
|
|
}
|
|
|
|
void KWTextImage::load( TQDomElement & parentElem )
|
|
{
|
|
// This code is similar to KWPictureFrameSet::load
|
|
KWDocument * doc = static_cast<KWTextDocument *>(parent)->textFrameSet()->kWordDocument();
|
|
|
|
// <IMAGE> (KOffice 1.0) or <PICTURE> (KWord 1.2)
|
|
TQDomNode node=parentElem.namedItem( "PICTURE" );
|
|
if ( node.isNull() )
|
|
{
|
|
node=parentElem.namedItem( "IMAGE" );
|
|
}
|
|
TQDomElement image = node.toElement();
|
|
if ( image.isNull() )
|
|
image = parentElem; // The data is directly child of <FORMAT>
|
|
// <KEY>
|
|
TQDomElement keyElement = image.namedItem( "KEY" ).toElement();
|
|
if ( !keyElement.isNull() )
|
|
{
|
|
KoPictureKey key;
|
|
key.loadAttributes( keyElement );
|
|
m_image.setKey(key);
|
|
doc->addTextImageRequest( this );
|
|
}
|
|
else
|
|
{
|
|
// <FILENAME> (old format, up to KWord-1.1-beta2)
|
|
TQDomElement filenameElement = image.namedItem( "FILENAME" ).toElement();
|
|
if ( !filenameElement.isNull() )
|
|
{
|
|
TQString filename = filenameElement.attribute( "value" );
|
|
m_image.setKey( KoPictureKey( filename ) );
|
|
doc->addTextImageRequest( this );
|
|
}
|
|
else
|
|
{
|
|
kdError(32001) << "Missing KEY or FILENAME tag in IMAGE (KWTextImage::load)" << endl;
|
|
}
|
|
}
|
|
}
|
|
|
|
KoPictureKey KWTextImage::getKey( void ) const
|
|
{
|
|
return m_image.getKey();
|
|
}
|
|
|
|
void KWTextImage::saveOasis( KoXmlWriter&, KoSavingContext& ) const
|
|
{
|
|
// Not implemented
|
|
}
|