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();
160 frame->startOasisFrame( writer, context.mainStyles(),
name() );
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);
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 FrameSetType type() const
The type of frameset.
bool isDeleted() const
True if the frameset was deleted (but not destroyed, since it's in the undo/redo).
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
KWFrame * frame(unsigned int _num) const
get a frame by number
TQString name() const
get/set frameset name. For tables in particular, this must be unique
This class represents a single frame.
Abstract base class for KWCanvas's view modes.