Source Code (Use browser search to find items of interest.)
Class Index
qt'QFileListBox (./qt-2.1.0/src/dialogs/qfiledialog.cpp:547)
class QFileListBox : public QListBox
{
friend class QFileDialog;
Q_OBJECT
private:
QFileListBox( QWidget *parent, QFileDialog *d );
void clear();
void show();
void startRename( bool check = TRUE );
void viewportMousePressEvent( QMouseEvent *e );
void viewportMouseReleaseEvent( QMouseEvent *e );
void viewportMouseDoubleClickEvent( QMouseEvent *e );
void viewportMouseMoveEvent( QMouseEvent *e );
void viewportDragEnterEvent( QDragEnterEvent *e );
void viewportDragMoveEvent( QDragMoveEvent *e );
void viewportDragLeaveEvent( QDragLeaveEvent *e );
void viewportDropEvent( QDropEvent *e );
bool acceptDrop( const QPoint &pnt, QWidget *source );
void setCurrentDropItem( const QPoint &pnt );
void keyPressEvent( QKeyEvent *e );
private slots:
void rename();
void cancelRename();
void doubleClickTimeout();
void changeDirDuringDrag();
void dragObjDestroyed();
void contentsMoved( int, int );
private:
QRenameEdit *lined;
QFileDialog *filedialog;
bool renaming;
QTimer* renameTimer;
QListBoxItem *renameItem, *dragItem;
QPoint pressPos, oldDragPos;
bool mousePressed;
int urls;
QString startDragDir;
QListBoxItem *currDropItem;
QTimer *changeDirTimer;
bool firstMousePressEvent;
QUrlOperator startDragUrl;
};
qt'QFileListBox::QFileListBox() (./qt-2.1.0/src/dialogs/qfiledialog.cpp:983)
QFileListBox::QFileListBox( QWidget *parent, QFileDialog *dlg )
: QListBox( parent, "filelistbox" ), filedialog( dlg ),
renaming( FALSE ), renameItem( 0 ), mousePressed( FALSE ),
firstMousePressEvent( TRUE )
{
changeDirTimer = new QTimer( this );
QVBox *box = new QVBox( viewport() );
box->setFrameStyle( QFrame::Box | QFrame::Plain );
lined = new QRenameEdit( box );
lined->setFixedHeight( lined->sizeHint().height() );
box->hide();
box->setBackgroundMode( PaletteBase );
renameTimer = new QTimer( this );
connect( lined, SIGNAL( returnPressed() ),
this, SLOT (rename() ) );
connect( lined, SIGNAL( escapePressed() ),
this, SLOT( cancelRename() ) );
connect( renameTimer, SIGNAL( timeout() ),
this, SLOT( doubleClickTimeout() ) );
connect( changeDirTimer, SIGNAL( timeout() ),
this, SLOT( changeDirDuringDrag() ) );
connect( this, SIGNAL( contentsMoving( int, int ) ),
this, SLOT( contentsMoved( int, int ) ) );
viewport()->setAcceptDrops( TRUE );
dragItem = 0;
}
qt'QFileListBox::show() (./qt-2.1.0/src/dialogs/qfiledialog.cpp:1010)
void QFileListBox::show()
{
setBackgroundMode( PaletteBase );
viewport()->setBackgroundMode( PaletteBase );
QListBox::show();
}
qt'QFileListBox::keyPressEvent() (./qt-2.1.0/src/dialogs/qfiledialog.cpp:1017)
void QFileListBox::keyPressEvent( QKeyEvent *e )
{
if ( ( e->key() == Key_Enter ||
e->key() == Key_Return ) &&
renaming )
return;
cancelRename();
QListBox::keyPressEvent( e );
}
qt'QFileListBox::viewportMousePressEvent() (./qt-2.1.0/src/dialogs/qfiledialog.cpp:1028)
void QFileListBox::viewportMousePressEvent( QMouseEvent *e )
{
pressPos = e->pos();
mousePressed = FALSE;
bool didRename = renaming;
cancelRename();
if ( !hasFocus() && !viewport()->hasFocus() )
setFocus();
if ( e->button() != LeftButton ) {
QListBox::viewportMousePressEvent( e );
firstMousePressEvent = FALSE;
return;
}
int i = currentItem();
bool wasSelected = FALSE;
if ( i != -1 )
wasSelected = item( i )->selected();
QListBox::viewportMousePressEvent( e );
QFileDialogPrivate::MCItem *i1 = (QFileDialogPrivate::MCItem*)item( currentItem() );
if ( i1 )
mousePressed = !( (QFileDialogPrivate::File*)i1->i )->info.isDir();
if ( itemAt( e->pos() ) != item( i ) ) {
firstMousePressEvent = FALSE;
return;
}
if ( !firstMousePressEvent && !didRename && i == currentItem() && currentItem() != -1 &&
wasSelected && filedialog->mode() != QFileDialog::ExistingFiles &&
QUrlInfo( filedialog->d->url, "." ).isWritable() && item( currentItem() )->text() != ".." ) {
renameTimer->start( QApplication::doubleClickInterval(), TRUE );
renameItem = item( i );
}
firstMousePressEvent = FALSE;
}
qt'QFileListBox::viewportMouseReleaseEvent() (./qt-2.1.0/src/dialogs/qfiledialog.cpp:1070)
void QFileListBox::viewportMouseReleaseEvent( QMouseEvent *e )
{
dragItem = 0;
QListBox::viewportMouseReleaseEvent( e );
mousePressed = FALSE;
}
qt'QFileListBox::viewportMouseDoubleClickEvent() (./qt-2.1.0/src/dialogs/qfiledialog.cpp:1077)
void QFileListBox::viewportMouseDoubleClickEvent( QMouseEvent *e )
{
renameTimer->stop();
QListBox::viewportMouseDoubleClickEvent( e );
}
qt'QFileListBox::viewportMouseMoveEvent() (./qt-2.1.0/src/dialogs/qfiledialog.cpp:1083)
void QFileListBox::viewportMouseMoveEvent( QMouseEvent *e )
{
if ( !dragItem )
dragItem = itemAt( e->pos() );
renameTimer->stop();
if ( ( pressPos - e->pos() ).manhattanLength() > QApplication::startDragDistance() && mousePressed ) {
QListBoxItem *item = dragItem;
dragItem = 0;
if ( item ) {
if ( !itemRect( item ).contains( e->pos() ) )
return;
QUriDrag* drag = new QUriDrag( viewport() );
drag->setUnicodeUris( filedialog->selectedFiles() );
if ( lined->parentWidget()->isVisible() )
cancelRename();
connect( drag, SIGNAL( destroyed() ),
this, SLOT( dragObjDestroyed() ) );
drag->drag();
mousePressed = FALSE;
}
} else {
QListBox::viewportMouseMoveEvent( e );
}
}
qt'QFileListBox::dragObjDestroyed() (./qt-2.1.0/src/dialogs/qfiledialog.cpp:1112)
void QFileListBox::dragObjDestroyed()
{
//#######
//filedialog->rereadDir();
}
qt'QFileListBox::viewportDragEnterEvent() (./qt-2.1.0/src/dialogs/qfiledialog.cpp:1118)
void QFileListBox::viewportDragEnterEvent( QDragEnterEvent *e )
{
startDragUrl = filedialog->d->url;
startDragDir = filedialog->dirPath();
currDropItem = 0;
if ( !QUriDrag::canDecode( e ) ) {
e->ignore();
return;
}
QStringList l;
QUriDrag::decodeLocalFiles( e, l );
urls = l.count();
if ( acceptDrop( e->pos(), e->source() ) ) {
e->accept();
setCurrentDropItem( e->pos() );
} else {
e->ignore();
setCurrentDropItem( QPoint( -1, -1 ) );
}
oldDragPos = e->pos();
}
qt'QFileListBox::viewportDragMoveEvent() (./qt-2.1.0/src/dialogs/qfiledialog.cpp:1144)
void QFileListBox::viewportDragMoveEvent( QDragMoveEvent *e )
{
if ( acceptDrop( e->pos(), e->source() ) ) {
switch ( e->action() ) {
case QDropEvent::Copy:
e->acceptAction();
break;
case QDropEvent::Move:
e->acceptAction();
break;
case QDropEvent::Link:
break;
default:
;
}
if ( oldDragPos != e->pos() )
setCurrentDropItem( e->pos() );
} else {
changeDirTimer->stop();
e->ignore();
setCurrentDropItem( QPoint( -1, -1 ) );
}
oldDragPos = e->pos();
}
qt'QFileListBox::viewportDragLeaveEvent() (./qt-2.1.0/src/dialogs/qfiledialog.cpp:1170)
void QFileListBox::viewportDragLeaveEvent( QDragLeaveEvent * )
{
changeDirTimer->stop();
setCurrentDropItem( QPoint( -1, -1 ) );
//########
// if ( startDragDir != filedialog->d->url )
// filedialog->setUrl( startDragUrl );
}
qt'QFileListBox::viewportDropEvent() (./qt-2.1.0/src/dialogs/qfiledialog.cpp:1179)
void QFileListBox::viewportDropEvent( QDropEvent *e )
{
changeDirTimer->stop();
if ( !QUriDrag::canDecode( e ) ) {
e->ignore();
return;
}
QStrList l;
QUrlDrag::decode( e, l );
bool move = FALSE;
bool supportAction = TRUE;
if ( e->action() == QDropEvent::Move )
move = TRUE;
else if ( e->action() == QDropEvent::Copy )
;
else
supportAction = FALSE;
QUrlOperator dest;
if ( currDropItem )
dest = QUrlOperator( filedialog->d->url, currDropItem->text() );
else
dest = filedialog->d->url;
QStringList lst;
for ( uint i = 0; i < l.count(); ++i ) {
lst << l.at( i );
}
filedialog->d->url.copy( lst, dest, move );
// ##### what is supportAction for?
e->acceptAction();
currDropItem = 0;
}
qt'QFileListBox::acceptDrop() (./qt-2.1.0/src/dialogs/qfiledialog.cpp:1217)
bool QFileListBox::acceptDrop( const QPoint &pnt, QWidget *source )
{
QListBoxItem *item = itemAt( pnt );
if ( !item || item && !itemRect( item ).contains( pnt ) ) {
if ( source == viewport() && startDragDir == filedialog->dirPath() )
return FALSE;
return TRUE;
}
QUrlInfo fi( filedialog->d->url, item->text() );
if ( fi.isDir() && itemRect( item ).contains( pnt ) )
return TRUE;
return FALSE;
}
qt'QFileListBox::setCurrentDropItem() (./qt-2.1.0/src/dialogs/qfiledialog.cpp:1233)
void QFileListBox::setCurrentDropItem( const QPoint &pnt )
{
changeDirTimer->stop();
QListBoxItem *item = itemAt( pnt );
if ( pnt == QPoint( -1, -1 ) )
item = 0;
if ( item && !QUrlInfo( filedialog->d->url, item->text() ).isDir() )
item = 0;
if ( item && !itemRect( item ).contains( pnt ) )
item = 0;
currDropItem = item;
if ( currDropItem )
setCurrentItem( currDropItem );
changeDirTimer->start( 750 );
}
qt'QFileListBox::changeDirDuringDrag() (./qt-2.1.0/src/dialogs/qfiledialog.cpp:1252)
void QFileListBox::changeDirDuringDrag()
{
if ( !currDropItem )
return;
changeDirTimer->stop();
QUrl u( filedialog->d->url, currDropItem->text() );
filedialog->setDir( u );
currDropItem = 0;
}
qt'QFileListBox::doubleClickTimeout() (./qt-2.1.0/src/dialogs/qfiledialog.cpp:1262)
void QFileListBox::doubleClickTimeout()
{
startRename();
renameTimer->stop();
}
qt'QFileListBox::startRename() (./qt-2.1.0/src/dialogs/qfiledialog.cpp:1268)
void QFileListBox::startRename( bool check )
{
if ( check && ( !renameItem || renameItem != item( currentItem() ) ) )
return;
int i = currentItem();
setSelected( i, TRUE );
QRect r = itemRect( item( i ) );
int bdr = item( i )->pixmap() ?
item( i )->pixmap()->width() : 16;
int x = r.x() + bdr;
int y = r.y();
int w = item( i )->width( this ) - bdr;
int h = QMAX( lined->height() + 2, r.height() );
y = y + r.height() / 2 - h / 2;
lined->parentWidget()->setGeometry( x, y, w + 6, h );
lined->setFocus();
lined->setText( item( i )->text() );
lined->selectAll();
lined->setFrame( FALSE );
lined->parentWidget()->show();
viewport()->setFocusProxy( lined );
renaming = TRUE;
}
qt'QFileListBox::clear() (./qt-2.1.0/src/dialogs/qfiledialog.cpp:1294)
void QFileListBox::clear()
{
cancelRename();
QListBox::clear();
}
qt'QFileListBox::rename() (./qt-2.1.0/src/dialogs/qfiledialog.cpp:1300)
void QFileListBox::rename()
{
if ( !lined->text().isEmpty() ) {
QString file = currentText();
if ( lined->text() != file )
filedialog->d->url.rename( file, lined->text() );
}
cancelRename();
}
qt'QFileListBox::cancelRename() (./qt-2.1.0/src/dialogs/qfiledialog.cpp:1311)
void QFileListBox::cancelRename()
{
renameItem = 0;
lined->parentWidget()->hide();
viewport()->setFocusProxy( this );
renaming = FALSE;
updateItem( currentItem() );
if ( lined->hasFocus() )
viewport()->setFocus();
}
qt'QFileListBox::contentsMoved() (./qt-2.1.0/src/dialogs/qfiledialog.cpp:1322)
void QFileListBox::contentsMoved( int, int )
{
changeDirTimer->stop();
setCurrentDropItem( QPoint( -1, -1 ) );
}
/************************************************************************
*
* Internal class QFileListView
*
************************************************************************/