diff options
Diffstat (limited to 'qtjava/javalib/examples/dragdrop/DropSite.java')
-rw-r--r-- | qtjava/javalib/examples/dragdrop/DropSite.java | 167 |
1 files changed, 167 insertions, 0 deletions
diff --git a/qtjava/javalib/examples/dragdrop/DropSite.java b/qtjava/javalib/examples/dragdrop/DropSite.java new file mode 100644 index 00000000..3584f1e4 --- /dev/null +++ b/qtjava/javalib/examples/dragdrop/DropSite.java @@ -0,0 +1,167 @@ +/*************************************************************************** +* $Id$ +** +* Drop site example implementation +** +* Created : 979899 +** +* Copyright (C) 1997 by Trolltech AS. All rights reserved. +** +* This file is part of an example program for Qt. This example +* program may be used, distributed and modified without limitation. +** +****************************************************************************/ +import org.kde.qt.*; +import java.util.*; + + +class DropSite extends QLabel +{ + SecretSource s; + +void setSecretSource(SecretSource source) +{ + s = source; +} + +DropSite( QWidget parent ) +{ + this(parent, null); +} + +DropSite( QWidget parent, String name ) +{ + super( parent, name ); + setAcceptDrops(true); +} + + +{ + // nothing necessary +} + + +protected void dragMoveEvent( QDragMoveEvent e ) +{ + // Check if you want the drag at e.pos()... + // Give the user some feedback... +} + + +protected void dragEnterEvent( QDragEnterEvent e ) +{ + // Check if you want the drag... + if ( SecretDrag.canDecode( e ) + || QTextDrag.canDecode( e ) + || QImageDrag.canDecode( e ) + || QUriDrag.canDecode( e ) ) { + e.accept(); + } + + // Give the user some feedback... + String t = ""; + for( int i=0; e.format( i ) != null; i++ ) { + t += "\n"; + t += e.format( i ); + } + emit("message", t ); + setBackgroundColor(white()); +} + +protected void dragLeaveEvent( QDragLeaveEvent e ) +{ + // Give the user some feedback... + emit("message", ""); + setBackgroundColor(lightGray()); +} + + +protected void dropEvent( QDropEvent e ) +{ + setBackgroundColor(lightGray()); + + // Try to decode to the data you understand... + + StringBuffer str = new StringBuffer(""); + if ( QTextDrag.decode( e, str ) ) { + setText( str.toString() ); + setMinimumSize( minimumSize().expandedTo( sizeHint() ) ); + return; + } + + QPixmap pm = new QPixmap(); + if ( QImageDrag.decode( e, pm ) ) { + setPixmap( pm ); + setMinimumSize( minimumSize().expandedTo( sizeHint() ) ); + return; + } + + ArrayList strings = new ArrayList(); + if ( QUriDrag.decode( e, strings ) ) { + String m = "Full URLs:\n"; + Iterator it = strings.iterator(); + while (it.hasNext()) + m += " " + (String) it.next() + "\n"; + ArrayList files = new ArrayList(); + if ( QUriDrag.decodeLocalFiles( e, files ) ) { + m = m + "Files:\n"; + Iterator i = strings.iterator(); + while (i.hasNext()) + m = m + " " + (String) i.next() + "\n"; + } + setText( m ); + setMinimumSize( minimumSize().expandedTo( sizeHint() ) ); + return; + } + + if ( SecretDrag.decode( e, str ) ) { + setText( str.toString() ); + setMinimumSize( minimumSize().expandedTo( sizeHint() ) ); + return; + } +} + +protected void mousePressEvent( QMouseEvent e ) +{ + QDragObject drobj; + if ( pixmap() != null ) { + drobj = new QImageDrag( pixmap().convertToImage(), this ); + QPixmap pm = new QPixmap(); + pm.convertFromImage(pixmap().convertToImage().smoothScale( + pixmap().width()/3,pixmap().height()/3)); + drobj.setPixmap(pm,new QPoint(-5,-7)); + // Try it. +// new DragMoviePlayer(drobj); + } else { + drobj = new QTextDrag( text(), this ); + } + drobj.dragCopy(); +} + +class DragMoviePlayer extends QObject { + QDragObject dobj; + QMovie movie; + +DragMoviePlayer( QDragObject p ) +{ +// QObject(p), + dobj = p; + movie = new QMovie("trolltech.gif" ); + movie.connectUpdate(this,SLOT("updatePixmap(QRect)")); +} + +void updatePixmap( QRect rect ) +{ + dobj.setPixmap(movie.framePixmap()); +} + + +} + +void backgroundColorChange( QColor color ) +{ + // Reduce flicker by using repaint() rather than update() + repaint(); +} + +} |