21#include "KWPictureFrameSet.h"
22#include "KWDocument.h"
23#include "KWordPictureFrameSetIface.h"
24#include <KoStoreDevice.h>
25#include <KoOasisContext.h>
26#include <KoPictureCollection.h>
29#include <KoXmlWriter.h>
35KWPictureFrameSet::KWPictureFrameSet( KWDocument *_doc,
const TQString & name )
36 :
KWFrameSet( _doc ), m_keepAspectRatio( true ), m_finalSize( false )
39 m_name = _doc->generateFramesetName( i18n(
"Picture %1" ) );
44KWPictureFrameSet::KWPictureFrameSet( KWDocument* doc,
const TQDomElement& frame,
const TQDomElement& imageTag, KoOasisContext& context )
45 :
KWFrameSet( doc ), m_keepAspectRatio( true ), m_finalSize( false )
47 m_name = frame.attributeNS( KoXmlNS::draw,
"name", TQString() );
48 if ( doc->frameSetByName( m_name ) )
49 m_name = doc->generateFramesetName( m_name +
" %1" );
50 loadOasis( frame, imageTag, context );
53KWPictureFrameSet::~KWPictureFrameSet() {
56KWordFrameSetIface* KWPictureFrameSet::dcopObject()
59 m_dcop =
new KWordPictureFrameSetIface(
this );
64void KWPictureFrameSet::loadPicture(
const TQString & fileName )
66 KoPictureCollection *collection = m_doc->pictureCollection();
68 m_picture = collection->loadPicture( fileName );
71void KWPictureFrameSet::insertPicture(
const KoPicture& picture )
73 KoPictureCollection *collection = m_doc->pictureCollection();
75 m_picture = collection->insertPicture( picture.getKey(), picture );
78void KWPictureFrameSet::reloadPicture(
const KoPictureKey& key )
80 KoPictureCollection *collection = m_doc->pictureCollection();
82 m_picture = collection->insertPicture( key, KoPicture() );
85TQDomElement KWPictureFrameSet::save( TQDomElement & parentElem,
bool saveFrames )
87 if ( m_frames.isEmpty() )
88 return TQDomElement();
89 TQDomElement framesetElem = parentElem.ownerDocument().createElement(
"FRAMESET" );
90 parentElem.appendChild( framesetElem );
94 TQDomElement imageElem = parentElem.ownerDocument().createElement(
"PICTURE" );
95 framesetElem.appendChild( imageElem );
96 imageElem.setAttribute(
"keepAspectRatio", m_keepAspectRatio ?
"true" :
"false" );
98 TQDomElement elem = parentElem.ownerDocument().createElement(
"KEY" );
99 imageElem.appendChild( elem );
100 m_picture.getKey().saveAttributes( elem );
104void KWPictureFrameSet::load( TQDomElement &attributes,
bool loadFrames )
108 TQString defaultRatio=
"true";
110 TQDomNode node=attributes.namedItem(
"PICTURE" );
113 node=attributes.namedItem(
"IMAGE" );
116 node=attributes.namedItem(
"CLIPART" );
117 defaultRatio=
"false";
121 TQDomElement image = node.toElement();
122 if ( !image.isNull() ) {
123 m_keepAspectRatio = image.attribute(
"keepAspectRatio", defaultRatio ) ==
"true";
125 TQDomElement keyElement = image.namedItem(
"KEY" ).toElement();
126 if ( !keyElement.isNull() )
129 key.loadAttributes( keyElement );
131 m_picture.setKey( key );
132 m_doc->addPictureRequest(
this );
137 TQDomElement filenameElement = image.namedItem(
"FILENAME" ).toElement();
138 if ( !filenameElement.isNull() )
140 TQString filename = filenameElement.attribute(
"value" );
142 m_picture.setKey( KoPictureKey( filename ) );
143 m_doc->addPictureRequest(
this );
147 kdError(32001) <<
"Missing KEY tag in IMAGE" << endl;
151 kdError(32001) <<
"Missing PICTURE/IMAGE/CLIPART tag in FRAMESET" << endl;
155void KWPictureFrameSet::saveOasis( KoXmlWriter& writer, KoSavingContext& context,
bool )
const
157 if( m_frames.isEmpty() )
159 KWFrame* frame = m_frames.getFirst();
161 writer.startElement(
"draw:image" );
162 writer.addAttribute(
"xlink:type",
"simple" );
163 writer.addAttribute(
"xlink:show",
"embed" );
164 writer.addAttribute(
"xlink:actuate",
"onLoad" );
165 if ( context.savingMode() == KoSavingContext::Store )
166 writer.addAttribute(
"xlink:href", m_doc->pictureCollection()->getOasisFileName(m_picture) );
168 writer.startElement(
"office:binary-data" );
169 m_picture.saveAsBase64( writer );
178void KWPictureFrameSet::loadOasis(
const TQDomElement& frame,
const TQDomElement& tag, KoOasisContext& context )
180 kdDebug() << k_funcinfo << endl;
182 TQDomNode binaryData = KoDom::namedItemNS( tag, KoXmlNS::office,
"binary-data" );
183 if ( !binaryData.isNull() )
185 TQCString data = binaryData.toElement().text().latin1();
186 m_picture.loadFromBase64( data );
187 key = KoPictureKey(
"nofile", TQDateTime::currentDateTime(TQt::UTC));
188 m_picture.setKey(key);
192 const TQString href( tag.attributeNS( KoXmlNS::xlink,
"href", TQString()) );
193 if ( !href.isEmpty() )
195 TQString strExtension;
196 const int result=href.findRev(
".");
199 strExtension=href.mid(result+1);
201 TQString filename(href);
202 key = KoPictureKey(filename, TQDateTime::currentDateTime(TQt::UTC));
203 m_picture.setKey(key);
205 KoStore* store = context.store();
207 if ( store->open( filename ) )
209 KoStoreDevice dev(store);
210 if ( !m_picture.load( &dev, strExtension ) )
211 kdWarning(32001) <<
"Cannot load picture: " << filename <<
" " << href << endl;
217 m_doc->pictureCollection()->insertPicture( key, m_picture );
218 context.styleStack().save();
219 context.fillStyleStack( frame, KoXmlNS::draw,
"style-name",
"graphic" );
220 loadOasisFrame( frame, context );
221 context.styleStack().restore();
224void KWPictureFrameSet::drawFrameContents(
KWFrame *frame, TQPainter *painter,
const TQRect &crect,
228 kdDebug(32001) <<
"KWPictureFrameSet::drawFrameContents crect=" << crect <<
" size=" << kWordDocument()->zoomItX( frame->innerWidth() ) <<
"x" << kWordDocument()->zoomItY( frame->innerHeight() ) << endl;
230 m_picture.draw( *painter, 0, 0, kWordDocument()->zoomItX( frame->innerWidth() ), kWordDocument()->zoomItY( frame->innerHeight() ),
231 crect.x(), crect.y(), crect.width(), crect.height(), !m_finalSize);
234FrameSetType KWPictureFrameSet::type()
const
239bool KWPictureFrameSet::keepAspectRatio()
const
241 return m_keepAspectRatio;
244void KWPictureFrameSet::setKeepAspectRatio(
bool b )
246 m_keepAspectRatio = b;
250void KWPictureFrameSet::printDebug(
KWFrame *frame )
252 KWFrameSet::printDebug( frame );
255 kdDebug(32001) <<
"Image: key=" << m_picture.getKey().toString() << endl;
This object is created to edit a particular frameset in a particular view The view's canvas creates i...
Class: KWFrameSet Base type, a frameset holds content as well as frames to show that content.
virtual void load(TQDomElement &framesetElem, bool loadFrames=true)
load from XML - when loading
void saveCommon(TQDomElement &parentElem, bool saveFrames)
save the common attributes for the frameset
This class represents a single frame.
void startOasisFrame(KoXmlWriter &xmlWriter, KoGenStyles &mainStyles, const TQString &name, const TQString &lastFrameName=TQString()) const
Write out a draw:frame element and its style.
Abstract base class for KWCanvas's view modes.