summaryrefslogtreecommitdiffstats
path: root/examples/dragdrop/dropsite.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'examples/dragdrop/dropsite.cpp')
-rw-r--r--examples/dragdrop/dropsite.cpp158
1 files changed, 158 insertions, 0 deletions
diff --git a/examples/dragdrop/dropsite.cpp b/examples/dragdrop/dropsite.cpp
new file mode 100644
index 000000000..a1df3de21
--- /dev/null
+++ b/examples/dragdrop/dropsite.cpp
@@ -0,0 +1,158 @@
+/****************************************************************************
+**
+** Drop site example implementation
+**
+** Created : 979899
+**
+** Copyright (C) 1997-2008 Trolltech ASA. All rights reserved.
+**
+** This file is part of an example program for TQt. This example
+** program may be used, distributed and modified without limitation.
+**
+*****************************************************************************/
+
+#include "dropsite.h"
+#include "secret.h"
+#include <qevent.h>
+#include <qpixmap.h>
+#include <qdragobject.h>
+#include <qimage.h>
+#include <qdir.h>
+
+
+DropSite::DropSite( TQWidget * parent, const char * name )
+ : TQLabel( parent, name )
+{
+ setAcceptDrops(TRUE);
+}
+
+
+DropSite::~DropSite()
+{
+ // nothing necessary
+}
+
+
+void DropSite::dragMoveEvent( TQDragMoveEvent *e )
+{
+ // Check if you want the drag at e->pos()...
+ // Give the user some feedback - only copy is possible
+ e->acceptAction( e->action() == TQDropEvent::Copy );
+}
+
+
+void DropSite::dragEnterEvent( TQDragEnterEvent *e )
+{
+ // Check if you want the drag...
+ if ( SecretDrag::canDecode( e )
+ || TQTextDrag::canDecode( e )
+ || TQImageDrag::canDecode( e )
+ || TQUriDrag::canDecode( e ) )
+ {
+ e->accept();
+ }
+
+
+ // Give the user some feedback...
+ TQString t;
+ const char *f;
+ for( int i=0; (f=e->format( i )); i++ ) {
+ if ( *(f) ) {
+ if ( !t.isEmpty() )
+ t += "\n";
+ t += f;
+ }
+ }
+ emit message( t );
+ setBackgroundColor(white);
+}
+
+void DropSite::dragLeaveEvent( TQDragLeaveEvent * )
+{
+ // Give the user some feedback...
+ emit message("");
+ setBackgroundColor(lightGray);
+}
+
+
+void DropSite::dropEvent( TQDropEvent * e )
+{
+ setBackgroundColor(lightGray);
+
+ // Try to decode to the data you understand...
+ TQStrList strings;
+ if ( TQUriDrag::decode( e, strings ) ) {
+ TQString m("Full URLs:\n");
+ for (const char* u=strings.first(); u; u=strings.next())
+ m = m + " " + u + '\n';
+ TQStringList files;
+ if ( TQUriDrag::decodeLocalFiles( e, files ) ) {
+ m += "Files:\n";
+ for (TQStringList::Iterator i=files.begin(); i!=files.end(); ++i)
+ m = m + " " + TQDir::convertSeparators(*i) + '\n';
+ }
+ setText( m );
+ setMinimumSize( minimumSize().expandedTo( sizeHint() ) );
+ return;
+ }
+
+ TQString str;
+ if ( TQTextDrag::decode( e, str ) ) {
+ setText( str );
+ setMinimumSize( minimumSize().expandedTo( sizeHint() ) );
+ return;
+ }
+
+ TQPixmap pm;
+ if ( TQImageDrag::decode( e, pm ) ) {
+ setPixmap( pm );
+ setMinimumSize( minimumSize().expandedTo( sizeHint() ) );
+ return;
+ }
+
+ if ( SecretDrag::decode( e, str ) ) {
+ setText( str );
+ setMinimumSize( minimumSize().expandedTo( sizeHint() ) );
+ return;
+ }
+}
+
+DragMoviePlayer::DragMoviePlayer( TQDragObject* p ) :
+ TQObject(p),
+ dobj(p),
+ movie("trolltech.gif" )
+{
+ movie.connectUpdate(this,SLOT(updatePixmap(const TQRect&)));
+}
+
+void DragMoviePlayer::updatePixmap( const TQRect& )
+{
+ dobj->setPixmap(movie.framePixmap());
+}
+
+void DropSite::mousePressEvent( TQMouseEvent * /*e*/ )
+{
+ TQDragObject *drobj;
+ if ( pixmap() ) {
+ drobj = new TQImageDrag( pixmap()->convertToImage(), this );
+#if 1
+ TQPixmap pm;
+ pm.convertFromImage(pixmap()->convertToImage().smoothScale(
+ pixmap()->width()/3,pixmap()->height()/3));
+ drobj->setPixmap(pm,TQPoint(-5,-7));
+#else
+ // Try it.
+ (void)new DragMoviePlayer(drobj);
+#endif
+ } else {
+ drobj = new TQTextDrag( text(), this );
+ }
+ drobj->dragCopy();
+}
+
+
+void DropSite::backgroundColorChange( const TQColor & )
+{
+ // Reduce flicker by using repaint() rather than update()
+ repaint();
+}