Source Code (Use browser search to find items of interest.)

Class Index

khexedit'CDragLabel (./kdeutils/khexedit/draglabel.h:31)

class CDragLabel: public QLabel
{
  Q_OBJECT

  public:
    CDragLabel( QWidget *parent, const char *name = 0 );
    ~CDragLabel( void );

    void setUrl( const QString &url );
    void setDragMask( const QPixmap pix );

  protected:
    void mousePressEvent( QMouseEvent * );
    void mouseMoveEvent( QMouseEvent * );
    void mouseReleaseEvent( QMouseEvent * );

  private:
    void prepPixmap( QUriDrag &uriDrag );

  private:
    bool    mValid;
    QString mUrl;
    QBitmap mDragMask;
    bool    mDragPending;
    QPoint  mDragOrigin;

};



khexedit'CDragLabel::CDragLabel() (./kdeutils/khexedit/draglabel.cc:35)

CDragLabel::CDragLabel( QWidget *parent, const char *name )
  : QLabel( "draglabel", parent, name )
{
  mValid = true;
  mDragPending = false;
}



khexedit'CDragLabel::~CDragLabel() (./kdeutils/khexedit/draglabel.cc:43)

CDragLabel::~CDragLabel( void )
{
}



khexedit'CDragLabel::mousePressEvent() (./kdeutils/khexedit/draglabel.cc:48)

void CDragLabel::mousePressEvent( QMouseEvent *e )
{
  if( mValid == false || e->button() != LeftButton || mUrl.isEmpty() == true )
  {
    return;
  }
 
  mDragOrigin = e->pos();
  mDragPending = true;
}



khexedit'CDragLabel::mouseMoveEvent() (./kdeutils/khexedit/draglabel.cc:60)

void CDragLabel::mouseMoveEvent( QMouseEvent *e )
{
  if( mDragPending == true )
  {
    if( abs(e->x() - mDragOrigin.x()) + abs(e->y() - mDragOrigin.y()) > 5 )
    {
      mDragPending = false;

      QStringList list;
      list.append( mUrl );

      //
      // Make drag object, assign pixmap and grab keyboard. The grabbing
      // will allow ESC to abort the drag
      //
      QUriDrag *uriDrag = new  QUriDrag( this );
      if( uriDrag == 0 ) { return; }
      uriDrag->setUnicodeUris( list );
      prepPixmap( *uriDrag );
      grabKeyboard();
      uriDrag->drag();
      releaseKeyboard();
    }
  }
}


khexedit'CDragLabel::mouseReleaseEvent() (./kdeutils/khexedit/draglabel.cc:86)

void CDragLabel::mouseReleaseEvent( QMouseEvent * )
{
  mDragPending = false;
}



khexedit'CDragLabel::setUrl() (./kdeutils/khexedit/draglabel.cc:92)

void CDragLabel::setUrl( const QString &url )
{
  mUrl = url;
}



khexedit'CDragLabel::setDragMask() (./kdeutils/khexedit/draglabel.cc:98)

void CDragLabel::setDragMask( const QPixmap pix )
{
  mDragMask = pix;
}



khexedit'CDragLabel::prepPixmap() (./kdeutils/khexedit/draglabel.cc:104)

void CDragLabel::prepPixmap( QUriDrag &uriDrag )
{
  if( pixmap() == 0 )
  {
    return;
  }
  
  QString text;
  int index = mUrl.findRev( '/', mUrl.length() );
  if( index < 0 )
  {
    text = mUrl;
  }
  else
  {
    text = mUrl.right( mUrl.length() - index - 1 );
  }

  int sep = 2;
  QRect rect = fontMetrics().boundingRect(text);
  int w = pixmap()->width() + rect.width() + sep + 2;
  int h = fontMetrics().lineSpacing();
  if( pixmap()->height() > h ) { h = pixmap()->height(); }

  QBitmap mask( w, h, TRUE );
  QPixmap dragPixmap( w, h );
  dragPixmap.fill( black );

  QPainter p;
  p.begin( &mask );
  p.setPen( white );
  p.drawPixmap( 0, 0, mDragMask );
  p.drawText( pixmap()->width()+sep, 0, w-pixmap()->width()+sep, 
	      h, AlignVCenter|AlignLeft, text );
  p.end();
  
  p.begin( &dragPixmap );
  p.drawPixmap( 0, 0, *pixmap() );
  p.end();
 
  dragPixmap.setMask( mask );

  QPoint hotspot( pixmap()->width(), pixmap()->height()/2 );
  uriDrag.setPixmap( dragPixmap, hotspot ); 
}