20#include "kiviodragobject.h"
23#include <tqstringlist.h>
25#include <tqtextstream.h>
31#include <KoZoomHandler.h>
33#include "kivio_layer.h"
34#include "kivio_page.h"
35#include "kivio_screen_painter.h"
36#include "kivio_intra_stencil_data.h"
38#include "kivio_stencil_spawner.h"
40KivioDragObject::KivioDragObject(TQWidget* dragSource,
const char* name)
41 : TQDragObject(dragSource, name)
43 m_encodeMimeList[0] =
"application/vnd.kde.kivio";
44 m_encodeMimeList[1] =
"text/xml";
45 m_stencilList.setAutoDelete(
true);
48const char* KivioDragObject::format(
int i)
const
50 if(i < NumEncodeFormats) {
51 return m_encodeMimeList[i];
55 id.setImage(TQImage());
56 return id.format(i - NumEncodeFormats);
59TQByteArray KivioDragObject::encodedData(
const char* mimetype)
const
61 if((m_encodeMimeList[0] == mimetype) ||
62 (m_encodeMimeList[1] == mimetype))
64 return kivioEncoded();
65 }
else if(tqstrnicmp(mimetype,
"image/", 6) == 0) {
66 return imageEncoded(mimetype);
72bool KivioDragObject::canDecode(TQMimeSource* e)
74 TQValueList<TQCString> decodeMimeList;
75 decodeMimeList.append(
"application/vnd.kde.kivio");
76 decodeMimeList.append(
"text/plain");
78 for(TQValueList<TQCString>::Iterator it = decodeMimeList.begin(); it != decodeMimeList.end(); ++it) {
79 if(e->provides(*it)) {
87bool KivioDragObject::decode(TQMimeSource* e, TQPtrList<KivioStencil>& sl, KivioPage* page)
91 if(e->provides(
"application/vnd.kde.kivio")) {
92 TQDomDocument doc(
"KivioSelection");
93 TQByteArray data = e->encodedData(
"application/vnd.kde.kivio");
94 doc.setContent( TQCString( data, data.size()+1 ) );
96 ok = l.loadXML(doc.documentElement());
97 KivioStencil* stencil = l.stencilList()->first();
101 sl.append(stencil->duplicate());
102 stencil = l.stencilList()->next();
104 }
else if(e->provides(
"text/plain")) {
106 ok = TQTextDrag::decode(e, str);
107 KivioStencilSpawner* ss = page->doc()->findInternalStencilSpawner(
"Dave Marotti - Text");
108 KivioStencil* stencil = ss->newStencil();
109 stencil->setPosition(0, 0);
110 stencil->setDimensions(100, 100);
111 stencil->setText(str);
112 stencil->setTextFont(page->doc()->defaultFont());
120void KivioDragObject::setStencilList(TQPtrList<KivioStencil> l)
122 KivioStencil* stencil = l.first();
123 m_stencilList.clear();
126 m_stencilList.append(stencil->duplicate());
131void KivioDragObject::setStencilRect(KoRect r)
136TQByteArray KivioDragObject::kivioEncoded()
const
138 if(m_stencilList.count() <= 0)
139 return TQByteArray();
141 TQDomDocument doc(
"KivioSelection");
142 TQDomElement elem = doc.createElement(
"KivioSelection" );
143 doc.appendChild(elem);
144 KivioStencil *stencil = 0;
145 TQPtrListIterator<KivioStencil> it(m_stencilList);
147 while((stencil = it.current()) != 0) {
149 kdDebug() <<
"Stencil: " << stencil->type() << endl;
150 elem.appendChild(stencil->saveXML(doc));
153 return doc.toCString();
156TQByteArray KivioDragObject::imageEncoded(
const char* mimetype)
const
158 KoZoomHandler zoomHandler;
159 zoomHandler.setZoomAndResolution(100, KoGlobal::dpiX(), KoGlobal::dpiY());
160 TQPixmap buffer(zoomHandler.zoomItX(m_stencilRect.width()), zoomHandler.zoomItY(m_stencilRect.height()));
161 buffer.fill(TQt::white);
162 KivioScreenPainter p;
164 p.setTranslation(-zoomHandler.zoomItX(m_stencilRect.x()), -zoomHandler.zoomItY(m_stencilRect.y()));
165 KivioIntraStencilData data;
167 data.zoomHandler = &zoomHandler;
168 data.printing =
true;
169 KivioStencil *stencil = 0;
170 TQPtrListIterator<KivioStencil> it(m_stencilList);
172 while((stencil = it.current()) != 0) {
174 stencil->paint(&data);
180 id.setImage(buffer.convertToImage());
181 return id.encodedData(mimetype);
184#include "kiviodragobject.moc"