summaryrefslogtreecommitdiffstats
path: root/kdeui/kcolordrag.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kdeui/kcolordrag.cpp')
-rw-r--r--kdeui/kcolordrag.cpp112
1 files changed, 112 insertions, 0 deletions
diff --git a/kdeui/kcolordrag.cpp b/kdeui/kcolordrag.cpp
new file mode 100644
index 000000000..61eb15ba1
--- /dev/null
+++ b/kdeui/kcolordrag.cpp
@@ -0,0 +1,112 @@
+/* This file is part of the KDE libraries
+ Copyright (C) 1999 Steffen Hansen (hansen@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 <qpainter.h>
+#include "kcolordrag.h"
+
+static const char * const color_mime_string = "application/x-color";
+static const char * const text_mime_string = "text/plain";
+
+KColorDrag::KColorDrag( const QColor &color, QWidget *dragsource,
+ const char *name)
+ : QStoredDrag( color_mime_string, dragsource, name)
+{
+ setColor( color);
+}
+
+KColorDrag::KColorDrag( QWidget *dragsource, const char *name)
+ : QStoredDrag( color_mime_string, dragsource, name)
+{
+ setColor( white );
+}
+
+void
+KColorDrag::setColor( const QColor &color)
+{
+ QColorDrag tmp(color, 0, 0);
+ setEncodedData(tmp.encodedData(color_mime_string));
+
+ QPixmap colorpix( 25, 20);
+ colorpix.fill( color);
+ QPainter p( &colorpix );
+ p.setPen( black );
+ p.drawRect(0,0,25,20);
+ p.end();
+ setPixmap(colorpix, QPoint(-5,-7));
+}
+
+const char *KColorDrag::format(int i) const
+{
+ if (i==1)
+ return text_mime_string;
+ else
+ return QStoredDrag::format(i);
+}
+
+QByteArray KColorDrag::encodedData ( const char * m ) const
+{
+ if (!qstrcmp(m, text_mime_string) )
+ {
+ QColor color;
+ QColorDrag::decode(const_cast<KColorDrag *>(this), color);
+ QCString result = color.name().latin1();
+ ((QByteArray&)result).resize(result.length());
+ return result;
+ }
+ return QStoredDrag::encodedData(m);
+}
+
+bool
+KColorDrag::canDecode( QMimeSource *e)
+{
+ if (e->provides(color_mime_string))
+ return true;
+ if (e->provides(text_mime_string))
+ {
+ QColor dummy;
+ return decode(e, dummy);
+ }
+ return false;
+}
+
+bool
+KColorDrag::decode( QMimeSource *e, QColor &color)
+{
+ if (QColorDrag::decode(e, color))
+ return true;
+
+ QByteArray data = e->encodedData( text_mime_string);
+ QString colorName = QString::fromLatin1(data.data(), data.size());
+ if ((colorName.length() < 4) || (colorName[0] != '#'))
+ return false;
+ color.setNamedColor(colorName);
+ return color.isValid();
+}
+
+
+KColorDrag*
+KColorDrag::makeDrag( const QColor &color,QWidget *dragsource)
+{
+ return new KColorDrag( color, dragsource);
+}
+
+void KColorDrag::virtual_hook( int, void* )
+{ /*BASE::virtual_hook( id, data );*/ }
+
+#include "kcolordrag.moc"