18#include <tqapplication.h>
19#include <tqclipboard.h>
22#include <tqmessagebox.h>
24#include <tdemultipledrag.h>
30#include "KoStoreDrag.h"
33#include "kis_paint_device.h"
34#include "kis_config.h"
35#include "kis_colorspace_factory_registry.h"
36#include "kis_factory.h"
37#include <kis_meta_registry.h>
38#include "kis_clipboard.h"
42KisClipboard::KisClipboard()
44 Q_ASSERT(KisClipboard::m_singleton == 0);
45 KisClipboard::m_singleton =
this;
47 m_pushedClipboard =
false;
52 clipboardDataChanged();
55 connect( TQApplication::clipboard(), TQ_SIGNAL( dataChanged() ),
56 this, TQ_SLOT( clipboardDataChanged() ) );
59KisClipboard::~KisClipboard()
65 if(KisClipboard::m_singleton == 0)
67 KisClipboard::m_singleton =
new KisClipboard();
68 TQ_CHECK_PTR(KisClipboard::m_singleton);
70 return KisClipboard::m_singleton;
84 TQCString mimeType(
"application/x-chalk-selection");
85 KoStore* store = KoStore::createStore( &buffer, KoStore::Write, mimeType );
87 Q_ASSERT( !store->bad() );
90 if (store->open(
"layerdata")) {
91 if (!selection->write(store)) {
92 selection->disconnect();
100 if (store->open(
"colorspace")) {
101 TQString csName = selection->colorSpace()->id().id();
102 store->write(csName.ascii(), strlen(csName.ascii()));
106 if (selection->colorSpace()->getProfile()) {
107 KisAnnotationSP annotation = selection->colorSpace()->getProfile()->annotation();
110 if (store->open(
"profile.icc")) {
111 store->write(annotation->annotation());
122 TQString monitorProfileName = cfg.monitorProfile();
123 KisProfile * monitorProfile = KisMetaRegistry::instance()->csRegistry()->getProfileByName(monitorProfileName);
124 qimg = selection->convertToTQImage(monitorProfile);
126 TQImageDrag *qimgDrag =
new TQImageDrag(qimg);
127 KMultipleDrag *multiDrag =
new KMultipleDrag();
128 if ( !qimg.isNull() )
129 multiDrag->addDragObject( qimgDrag );
130 KoStoreDrag* storeDrag =
new KoStoreDrag( mimeType, 0 );
131 storeDrag->setEncodedData( buffer.buffer() );
132 multiDrag->addDragObject( storeDrag );
135 TQClipboard *cb = TQApplication::clipboard();
136 cb->setData(multiDrag);
137 m_pushedClipboard =
true;
142 TQClipboard *cb = TQApplication::clipboard();
143 TQCString mimeType(
"application/x-chalk-selection");
144 TQMimeSource *cbData = cb->data();
146 if(cbData && cbData->provides(mimeType))
148 TQBuffer buffer(cbData->encodedData(mimeType));
149 KoStore* store = KoStore::createStore( &buffer, KoStore::Read, mimeType );
150 KisProfile *profile=0;
152 if (store->hasFile(
"profile.icc")) {
154 store->open(
"profile.icc");
155 data = store->read(store->size());
157 profile =
new KisProfile(data);
162 if (store->hasFile(
"colorspace")) {
163 store->open(
"colorspace");
164 csName = TQString(store->read(store->size()));
168 KisColorSpace *cs = KisMetaRegistry::instance()->csRegistry()->getColorSpace(
KisID(csName,
""), profile);
172 if (store->hasFile(
"layerdata")) {
173 store->open(
"layerdata");
181 TQImage qimg = cb->image();
188 TQ_UINT32 behaviour = cfg.pasteBehaviour();
193 behaviour = TQMessageBox::question(0,i18n(
"Pasting data from simple source"),i18n(
"The image data you are trying to paste has no colour profile information.\n\nOn the web and in simple applications the data are supposed to be in sRGB color format.\nImporting as web will show it as it is supposed to look.\nMost monitors are not perfect though so if you made the image yourself\nyou might want to import it as it looked on you monitor.\n\nHow do you want to interpret these data?"),i18n(
"As &Web"),i18n(
"As on &Monitor"));
197 TQString profileName(
"");
199 profileName = cfg.monitorProfile();
201 cs = KisMetaRegistry::instance()->csRegistry() ->getColorSpace(
KisID(
"RGBA",
""), profileName);
203 TQ_CHECK_PTR(m_clip);
204 m_clip->convertFromTQImage(qimg, profileName);
210void KisClipboard::clipboardDataChanged()
212 if (!m_pushedClipboard) {
214 TQClipboard *cb = TQApplication::clipboard();
215 TQImage qimg = cb->image();
216 TQMimeSource *cbData = cb->data();
217 TQCString mimeType(
"application/x-chalk-selection");
219 if(cbData && cbData->provides(mimeType))
226 m_pushedClipboard =
false;
230bool KisClipboard::hasClip()
235TQSize KisClipboard::clipSize()
238 TQClipboard *cb = TQApplication::clipboard();
239 TQCString mimeType(
"application/x-chalk-selection");
240 TQMimeSource *cbData = cb->data();
242 KisPaintDeviceSP
clip;
244 if(cbData && cbData->provides(mimeType)) {
246 TQBuffer buffer(cbData->encodedData(mimeType));
247 KoStore* store = KoStore::createStore( &buffer, KoStore::Read, mimeType );
248 KisProfile *profile=0;
250 if (store->hasFile(
"profile.icc")) {
252 store->open(
"profile.icc");
253 data = store->read(store->size());
255 profile =
new KisProfile(data);
260 if (store->hasFile(
"colorspace")) {
261 store->open(
"colorspace");
262 csName = TQString(store->read(store->size()));
266 KisColorSpace *cs = KisMetaRegistry::instance()->csRegistry()->
getColorSpace(KisID(csName,
""), profile);
268 clip =
new KisPaintDevice(cs,
"clip");
270 if (store->hasFile(
"layerdata")) {
271 store->open(
"layerdata");
277 return clip->exactBounds().size();
280 TQImage qimg = cb->image();
287#include "kis_clipboard.moc"
The Chalk clipboard is a clipboard that can store paint devices instead of just qimage's.
void setClip(KisPaintDeviceSP layer)
Sets the clipboard to the contents of the specified paint device; also set the system clipboard to a ...
KisPaintDeviceSP clip()
Get the contents of the clipboard in the form of a paint device.
KisColorSpace * getColorSpace(const KisID &csID, const TQString &profileName)
Return the colorspace + profile as named, or NULL if impossible combination.
A colorspace is the definition of a certain color model in Chalk.
Chalk has a large number of extensible resources.
A paint device contains the actual pixel data and offers methods to read and write pixels.