diff options
Diffstat (limited to 'kio/kfile/kfileiconview.cpp')
-rw-r--r-- | kio/kfile/kfileiconview.cpp | 943 |
1 files changed, 0 insertions, 943 deletions
diff --git a/kio/kfile/kfileiconview.cpp b/kio/kfile/kfileiconview.cpp deleted file mode 100644 index f0ef11bfe..000000000 --- a/kio/kfile/kfileiconview.cpp +++ /dev/null @@ -1,943 +0,0 @@ -// -*- c++ -*- -/* This file is part of the KDE libraries - Copyright (C) 1997 Stephan Kulow <coolo@kde.org> - 2000,2001,2002 Carsten Pfeiffer <pfeiffer@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 <tqt.h> - -#include <tqfontmetrics.h> -#include <tqkeycode.h> -#include <tqlabel.h> -#include <tqpainter.h> -#include <tqpixmap.h> -#include <tqregexp.h> -#include <tqtimer.h> -#include <tqtooltip.h> - -#include <kaction.h> -#include <kapplication.h> -#include <klocale.h> -#include <kfileitem.h> -#include <kiconeffect.h> -#include <kglobalsettings.h> -#include <kurldrag.h> -#include <kio/previewjob.h> - -#include "kfileiconview.h" -#include "config-kfile.h" - -#define DEFAULT_PREVIEW_SIZE 60 -#define DEFAULT_SHOW_PREVIEWS false -#define DEFAULT_VIEW_MODE "SmallColumns" - -KFileIconViewItem::~KFileIconViewItem() -{ - fileInfo()->removeExtraData( iconView() ); -} - -class KFileIconView::KFileIconViewPrivate -{ -public: - KFileIconViewPrivate( KFileIconView *parent ) { - previewIconSize = 60; - job = 0; - dropItem = 0; - - noArrangement = false; - ignoreMaximumSize = false; - smallColumns = new KRadioAction( i18n("Small Icons"), 0, TQT_TQOBJECT(parent), - TQT_SLOT( slotSmallColumns() ), - parent->actionCollection(), - "small columns" ); - - largeRows = new KRadioAction( i18n("Large Icons"), 0, TQT_TQOBJECT(parent), - TQT_SLOT( slotLargeRows() ), - parent->actionCollection(), - "large rows" ); - - smallColumns->setExclusiveGroup(TQString::fromLatin1("IconView mode")); - largeRows->setExclusiveGroup(TQString::fromLatin1("IconView mode")); - - previews = new KToggleAction( i18n("Thumbnail Previews"), 0, - parent->actionCollection(), - "show previews" ); - zoomIn = KStdAction::zoomIn( TQT_TQOBJECT(parent), TQT_SLOT( zoomIn() ), - parent->actionCollection(), "zoomIn" ); - zoomOut = KStdAction::zoomOut( TQT_TQOBJECT(parent), TQT_SLOT( zoomOut() ), - parent->actionCollection(), "zoomOut" ); - - previews->setGroup("previews"); - zoomIn->setGroup("previews"); - zoomOut->setGroup("previews"); - - connect( previews, TQT_SIGNAL( toggled( bool )), - parent, TQT_SLOT( slotPreviewsToggled( bool ))); - - connect( &previewTimer, TQT_SIGNAL( timeout() ), - parent, TQT_SLOT( showPreviews() )); - connect( &autoOpenTimer, TQT_SIGNAL( timeout() ), - parent, TQT_SLOT( slotAutoOpen() )); - } - - ~KFileIconViewPrivate() { - if ( job ) - job->kill(); - } - - KRadioAction *smallColumns, *largeRows; - KAction *zoomIn, *zoomOut; - KToggleAction *previews; - TDEIO::PreviewJob *job; - KFileIconViewItem *dropItem; - TQTimer previewTimer; - TQTimer autoOpenTimer; - TQStringList previewMimeTypes; - int previewIconSize; - bool noArrangement :1; - bool ignoreMaximumSize :1; -}; - -KFileIconView::KFileIconView(TQWidget *parent, const char *name) - : KIconView(parent, name), KFileView() -{ - d = new KFileIconViewPrivate( this ); - - setViewName( i18n("Icon View") ); - - toolTip = 0; - setResizeMode( Adjust ); - setMaxItemWidth( 300 ); - setWordWrapIconText( false ); - setArrangement( TopToBottom ); - setAutoArrange( true ); - setItemsMovable( false ); - setMode( KIconView::Select ); - KIconView::setSorting( true ); - // as long as TQIconView only shows tooltips when the cursor is over the - // icon (and not the text), we have to create our own tooltips - setShowToolTips( false ); - slotSmallColumns(); - d->smallColumns->setChecked( true ); - - connect( this, TQT_SIGNAL( returnPressed(TQIconViewItem *) ), - TQT_SLOT( slotActivate( TQIconViewItem *) ) ); - - // we want single click _and_ double click (as convenience) - connect( this, TQT_SIGNAL( clicked(TQIconViewItem *, const TQPoint&) ), - TQT_SLOT( selected( TQIconViewItem *) ) ); - connect( this, TQT_SIGNAL( doubleClicked(TQIconViewItem *, const TQPoint&) ), - TQT_SLOT( slotActivate( TQIconViewItem *) ) ); - - connect( this, TQT_SIGNAL( onItem( TQIconViewItem * ) ), - TQT_SLOT( showToolTip( TQIconViewItem * ) ) ); - connect( this, TQT_SIGNAL( onViewport() ), - TQT_SLOT( removeToolTip() ) ); - connect( this, TQT_SIGNAL( contextMenuRequested(TQIconViewItem*,const TQPoint&)), - TQT_SLOT( slotActivateMenu( TQIconViewItem*, const TQPoint& ) ) ); - - KFile::SelectionMode sm = KFileView::selectionMode(); - switch ( sm ) { - case KFile::Multi: - TQIconView::setSelectionMode( TQIconView::Multi ); - break; - case KFile::Extended: - TQIconView::setSelectionMode( TQIconView::Extended ); - break; - case KFile::NoSelection: - TQIconView::setSelectionMode( TQIconView::NoSelection ); - break; - default: // fall through - case KFile::Single: - TQIconView::setSelectionMode( TQIconView::Single ); - break; - } - - if ( sm == KFile::Multi || sm == KFile::Extended ) - connect( this, TQT_SIGNAL( selectionChanged() ), - TQT_SLOT( slotSelectionChanged() )); - else - connect( this, TQT_SIGNAL( selectionChanged( TQIconViewItem * )), - TQT_SLOT( highlighted( TQIconViewItem * ))); - - viewport()->installEventFilter( this ); - - // for mimetype resolving - m_resolver = new KMimeTypeResolver<KFileIconViewItem,KFileIconView>(this); -} - -KFileIconView::~KFileIconView() -{ - delete m_resolver; - removeToolTip(); - delete d; -} - -void KFileIconView::readConfig( TDEConfig *kc, const TQString& group ) -{ - TQString gr = group.isEmpty() ? TQString("KFileIconView") : group; - TDEConfigGroupSaver cs( kc, gr ); - TQString small = TQString::fromLatin1("SmallColumns"); - d->previewIconSize = kc->readNumEntry( "Preview Size", DEFAULT_PREVIEW_SIZE ); - d->previews->setChecked( kc->readBoolEntry( "ShowPreviews", DEFAULT_SHOW_PREVIEWS ) ); - - if ( kc->readEntry("ViewMode", DEFAULT_VIEW_MODE ) == small ) { - d->smallColumns->setChecked( true ); - slotSmallColumns(); - } - else { - d->largeRows->setChecked( true ); - slotLargeRows(); - } - - if ( d->previews->isChecked() ) - showPreviews(); -} - -void KFileIconView::writeConfig( TDEConfig *kc, const TQString& group ) -{ - TQString gr = group.isEmpty() ? TQString("KFileIconView") : group; - TDEConfigGroupSaver cs( kc, gr ); - - TQString viewMode = d->smallColumns->isChecked() ? - TQString::fromLatin1("SmallColumns") : - TQString::fromLatin1("LargeRows"); - if(!kc->hasDefault( "ViewMode" ) && viewMode == DEFAULT_VIEW_MODE ) - kc->revertToDefault( "ViewMode" ); - else - kc->writeEntry( "ViewMode", viewMode ); - - int previewsIconSize = d->previewIconSize; - if(!kc->hasDefault( "Preview Size" ) && previewsIconSize == DEFAULT_PREVIEW_SIZE ) - kc->revertToDefault( "Preview Size" ); - else - kc->writeEntry( "Preview Size", previewsIconSize ); - - bool showPreviews = d->previews->isChecked(); - if(!kc->hasDefault( "ShowPreviews" ) && showPreviews == DEFAULT_SHOW_PREVIEWS ) - kc->revertToDefault( "ShowPreviews" ); - else - kc->writeEntry( "ShowPreviews", showPreviews ); -} - -void KFileIconView::removeToolTip() -{ - delete toolTip; - toolTip = 0; -} - -void KFileIconView::showToolTip( TQIconViewItem *item ) -{ - delete toolTip; - toolTip = 0; - - if ( !item ) - return; - - int w = maxItemWidth() - ( itemTextPos() == TQIconView::Bottom ? 0 : - item->pixmapRect().width() ) - 4; - if ( fontMetrics().width( item->text() ) >= w ) { - toolTip = new TQLabel( TQString::fromLatin1(" %1 ").arg(item->text()), 0, - "myToolTip", - (WFlags)(WStyle_StaysOnTop | WStyle_Customize | WStyle_NoBorder | WStyle_Tool | WX11BypassWM) ); - toolTip->setFrameStyle( TQFrame::Plain | TQFrame::Box ); - toolTip->setLineWidth( 1 ); - toolTip->setAlignment( AlignLeft | AlignTop ); - toolTip->move( TQCursor::pos() + TQPoint( 14, 14 ) ); - toolTip->adjustSize(); - TQRect screen = TQApplication::desktop()->screenGeometry( - TQApplication::desktop()->screenNumber(TQCursor::pos())); - if (toolTip->x()+toolTip->width() > screen.right()) { - toolTip->move(toolTip->x()+screen.right()-toolTip->x()-toolTip->width(), toolTip->y()); - } - if (toolTip->y()+toolTip->height() > screen.bottom()) { - toolTip->move(toolTip->x(), screen.bottom()-toolTip->y()-toolTip->height()+toolTip->y()); - } - toolTip->setFont( TQToolTip::font() ); - toolTip->setPalette( TQToolTip::palette(), true ); - toolTip->show(); - } -} - -void KFileIconView::slotActivateMenu( TQIconViewItem* item, const TQPoint& pos ) -{ - if ( !item ) { - sig->activateMenu( 0, pos ); - return; - } - KFileIconViewItem *i = (KFileIconViewItem*) item; - sig->activateMenu( i->fileInfo(), pos ); -} - -void KFileIconView::hideEvent( TQHideEvent *e ) -{ - removeToolTip(); - KIconView::hideEvent( e ); -} - -void KFileIconView::keyPressEvent( TQKeyEvent *e ) -{ - KIconView::keyPressEvent( e ); - - // ignore Ctrl-Return so that the dialog can catch it. - if ( (e->state() & ControlButton) && - (e->key() == Key_Return || e->key() == Key_Enter) ) - e->ignore(); -} - -void KFileIconView::setSelected( const KFileItem *info, bool enable ) -{ - KFileIconViewItem *item = viewItem( info ); - if ( item ) - KIconView::setSelected( item, enable, true ); -} - -void KFileIconView::selectAll() -{ - if (KFileView::selectionMode() == KFile::NoSelection || - KFileView::selectionMode() == KFile::Single) - return; - - KIconView::selectAll( true ); -} - -void KFileIconView::clearSelection() -{ - KIconView::clearSelection(); -} - -void KFileIconView::invertSelection() -{ - KIconView::invertSelection(); -} - -void KFileIconView::clearView() -{ - m_resolver->m_lstPendingMimeIconItems.clear(); - - KIconView::clear(); - stopPreview(); -} - -void KFileIconView::insertItem( KFileItem *i ) -{ - KFileView::insertItem( i ); - - TQIconView* qview = static_cast<TQIconView*>( this ); - // Since creating and initializing an item leads to a repaint, - // we disable updates on the IconView for a while. - qview->setUpdatesEnabled( false ); - KFileIconViewItem *item = new KFileIconViewItem( qview, i ); - initItem( item, i, true ); - qview->setUpdatesEnabled( true ); - - if ( !i->isMimeTypeKnown() ) - m_resolver->m_lstPendingMimeIconItems.append( item ); - - i->setExtraData( this, item ); -} - -void KFileIconView::slotActivate( TQIconViewItem *item ) -{ - if ( !item ) - return; - const KFileItem *fi = ( (KFileIconViewItem*)item )->fileInfo(); - if ( fi ) - sig->activate( fi ); -} - -void KFileIconView::selected( TQIconViewItem *item ) -{ - if ( !item || (TDEApplication::keyboardMouseState() & (ShiftButton | ControlButton)) != 0 ) - return; - - if ( TDEGlobalSettings::singleClick() ) { - const KFileItem *fi = ( (KFileIconViewItem*)item )->fileInfo(); - if ( fi && (fi->isDir() || !onlyDoubleClickSelectsFiles()) ) - sig->activate( fi ); - } -} - -void KFileIconView::setCurrentItem( const KFileItem *item ) -{ - KFileIconViewItem *it = viewItem( item ); - if ( it ) - KIconView::setCurrentItem( it ); -} - -KFileItem * KFileIconView::currentFileItem() const -{ - KFileIconViewItem *current = static_cast<KFileIconViewItem*>( currentItem() ); - if ( current ) - return current->fileInfo(); - - return 0L; -} - -void KFileIconView::highlighted( TQIconViewItem *item ) -{ - if ( !item ) - return; - const KFileItem *fi = ( (KFileIconViewItem*)item )->fileInfo(); - if ( fi ) - sig->highlightFile( fi ); -} - -void KFileIconView::setSelectionMode( KFile::SelectionMode sm ) -{ - disconnect( TQT_SIGNAL( selectionChanged() ), this ); - disconnect( TQT_SIGNAL( selectionChanged( TQIconViewItem * )), this ); - - KFileView::setSelectionMode( sm ); - switch ( KFileView::selectionMode() ) { - case KFile::Multi: - TQIconView::setSelectionMode( TQIconView::Multi ); - break; - case KFile::Extended: - TQIconView::setSelectionMode( TQIconView::Extended ); - break; - case KFile::NoSelection: - TQIconView::setSelectionMode( TQIconView::NoSelection ); - break; - default: // fall through - case KFile::Single: - TQIconView::setSelectionMode( TQIconView::Single ); - break; - } - - if ( sm == KFile::Multi || sm == KFile::Extended ) - connect( this, TQT_SIGNAL( selectionChanged() ), - TQT_SLOT( slotSelectionChanged() )); - else - connect( this, TQT_SIGNAL( selectionChanged( TQIconViewItem * )), - TQT_SLOT( highlighted( TQIconViewItem * ))); -} - -bool KFileIconView::isSelected( const KFileItem *i ) const -{ - KFileIconViewItem *item = viewItem( i ); - return (item && item->isSelected()); -} - -void KFileIconView::updateView( bool b ) -{ - if ( !b ) - return; // eh? - - KFileIconViewItem *item = static_cast<KFileIconViewItem*>(TQIconView::firstItem()); - if ( item ) { - do { - if ( d->previews->isChecked() ) { - if ( canPreview( item->fileInfo() ) ) - item->setPixmapSize( TQSize( d->previewIconSize, d->previewIconSize ) ); - } - else { - // unset pixmap size (used for previews) - if ( !item->pixmapSize().isNull() ) - item->setPixmapSize( TQSize( 0, 0 ) ); - } - // recalculate item parameters but avoid an in-place repaint - item->setPixmap( (item->fileInfo())->pixmap( myIconSize ), true, false ); - item = static_cast<KFileIconViewItem *>(item->nextItem()); - } while ( item != 0L ); - } -} - -void KFileIconView::updateView( const KFileItem *i ) -{ - KFileIconViewItem *item = viewItem( i ); - if ( item ) - initItem( item, i, true ); -} - -void KFileIconView::removeItem( const KFileItem *i ) -{ - if ( !i ) - return; - - if ( d->job ) - d->job->removeItem( i ); - - KFileIconViewItem *item = viewItem( i ); - m_resolver->m_lstPendingMimeIconItems.remove( item ); - delete item; - - KFileView::removeItem( i ); -} - -void KFileIconView::setIconSize( int size ) -{ - myIconSize = size; - updateIcons(); -} - -void KFileIconView::setPreviewSize( int size ) -{ - if ( size < 30 ) - size = 30; // minimum - - d->previewIconSize = size; - if ( d->previews->isChecked() ) - showPreviews(); -} - -void KFileIconView::setIgnoreMaximumSize(bool ignoreSize) -{ - d->ignoreMaximumSize = ignoreSize; -} - -void KFileIconView::updateIcons() -{ - updateView( true ); - arrangeItemsInGrid(); -} - -void KFileIconView::ensureItemVisible( const KFileItem *i ) -{ - KFileIconViewItem *item = viewItem( i ); - if ( item ) - KIconView::ensureItemVisible( item ); -} - -void KFileIconView::slotSelectionChanged() -{ - sig->highlightFile( 0L ); -} - -void KFileIconView::slotSmallColumns() -{ - // setItemTextPos(), setArrangement(), setWordWrapIconText() and - // setIconSize() all call arrangeItemsInGrid() :( Prevent this. - d->noArrangement = true; // stop arrangeItemsInGrid()! - - // Make sure to uncheck previews if selected - if ( d->previews->isChecked() ) - { - stopPreview(); - d->previews->setChecked( false ); - } - setGridX( -1 ); - setMaxItemWidth( 300 ); - setItemTextPos( Right ); - setArrangement( TopToBottom ); - setWordWrapIconText( false ); - setSpacing( 0 ); - - d->noArrangement = false; // now we can arrange - setIconSize( KIcon::SizeSmall ); -} - -void KFileIconView::slotLargeRows() -{ - // setItemTextPos(), setArrangement(), setWordWrapIconText() and - // setIconSize() all call arrangeItemsInGrid() :( Prevent this. - d->noArrangement = true; // stop arrangeItemsInGrid()! - - setGridX( TDEGlobal::iconLoader()->currentSize( KIcon::Desktop ) + 50 ); - setItemTextPos( Bottom ); - setArrangement( LeftToRight ); - setWordWrapIconText( true ); - setSpacing( 5 ); // default in QIconView - - d->noArrangement = false; // now we can arrange - setIconSize( KIcon::SizeMedium ); -} - -void KFileIconView::stopPreview() -{ - if ( d->job ) { - d->job->kill(); - d->job = 0L; - } -} - -void KFileIconView::slotPreviewsToggled( bool on ) -{ - if ( on ) - showPreviews(); - else { - stopPreview(); - slotLargeRows(); - } -} - -void KFileIconView::showPreviews() -{ - if ( d->previewMimeTypes.isEmpty() ) - d->previewMimeTypes = TDEIO::PreviewJob::supportedMimeTypes(); - - stopPreview(); - d->previews->setChecked( true ); - - if ( !d->largeRows->isChecked() ) { - d->largeRows->setChecked( true ); - slotLargeRows(); // also sets the icon size and updates the grid - } - else { - updateIcons(); - } - - d->job = TDEIO::filePreview(*items(), d->previewIconSize,d->previewIconSize); - d->job->setIgnoreMaximumSize(d->ignoreMaximumSize); - - connect( d->job, TQT_SIGNAL( result( TDEIO::Job * )), - this, TQT_SLOT( slotPreviewResult( TDEIO::Job * ))); - connect( d->job, TQT_SIGNAL( gotPreview( const KFileItem*, const TQPixmap& )), - TQT_SLOT( gotPreview( const KFileItem*, const TQPixmap& ) )); -// connect( d->job, TQT_SIGNAL( failed( const KFileItem* )), -// this, TQT_SLOT( slotFailed( const KFileItem* ) )); -} - -void KFileIconView::slotPreviewResult( TDEIO::Job *job ) -{ - if ( job == d->job ) - d->job = 0L; -} - -void KFileIconView::gotPreview( const KFileItem *item, const TQPixmap& pix ) -{ - KFileIconViewItem *it = viewItem( item ); - if ( it ) - if( item->overlays() & KIcon::HiddenOverlay ) - { - TQPixmap p( pix ); - - KIconEffect::semiTransparent( p ); - it->setPixmap( p ); - } - else - it->setPixmap( pix ); -} - -bool KFileIconView::canPreview( const KFileItem *item ) const -{ - TQStringList::Iterator it = d->previewMimeTypes.begin(); - TQRegExp r; - r.setWildcard( true ); - - for ( ; it != d->previewMimeTypes.end(); ++it ) { - TQString type = *it; - // the "mimetype" can be "image/*" - if ( type.at( type.length() - 1 ) == '*' ) { - r.setPattern( type ); - if ( r.search( item->mimetype() ) != -1 ) - return true; - } - else - if ( item->mimetype() == type ) - return true; - } - - return false; -} - -KFileItem * KFileIconView::firstFileItem() const -{ - KFileIconViewItem *item = static_cast<KFileIconViewItem*>( firstItem() ); - if ( item ) - return item->fileInfo(); - return 0L; -} - -KFileItem * KFileIconView::nextItem( const KFileItem *fileItem ) const -{ - if ( fileItem ) { - KFileIconViewItem *item = viewItem( fileItem ); - if ( item && item->nextItem() ) - return ((KFileIconViewItem*) item->nextItem())->fileInfo(); - } - return 0L; -} - -KFileItem * KFileIconView::prevItem( const KFileItem *fileItem ) const -{ - if ( fileItem ) { - KFileIconViewItem *item = viewItem( fileItem ); - if ( item && item->prevItem() ) - return ((KFileIconViewItem*) item->prevItem())->fileInfo(); - } - return 0L; -} - -void KFileIconView::setSorting( TQDir::SortSpec spec ) -{ - KFileView::setSorting( spec ); - KFileItemListIterator it( *items() ); - - KFileItem *item; - - if ( spec & TQDir::Time ) { - for ( ; (item = it.current()); ++it ) - // warning, time_t is often signed -> cast it - viewItem(item)->setKey( sortingKey( (unsigned long)item->time( TDEIO::UDS_MODIFICATION_TIME ), item->isDir(), spec )); - } - - else if ( spec & TQDir::Size ) { - for ( ; (item = it.current()); ++it ) - viewItem(item)->setKey( sortingKey( item->size(), item->isDir(), - spec )); - } - else { // Name or Unsorted - for ( ; (item = it.current()); ++it ) - viewItem(item)->setKey( sortingKey( item->text(), item->isDir(), - spec )); - } - - KIconView::setSorting( true, !isReversed() ); - sort( !isReversed() ); -} - -// -// mimetype determination on demand -// -void KFileIconView::mimeTypeDeterminationFinished() -{ - // anything to do? -} - -void KFileIconView::determineIcon( KFileIconViewItem *item ) -{ - (void) item->fileInfo()->determineMimeType(); - updateView( item->fileInfo() ); -} - -void KFileIconView::listingCompleted() -{ - arrangeItemsInGrid(); - - // TQIconView doesn't set the current item automatically, so we have to do - // that. We don't want to emit selectionChanged() tho. - if ( !currentItem() ) { - bool block = signalsBlocked(); - blockSignals( true ); - TQIconViewItem *item = viewItem( firstFileItem() ); - KIconView::setCurrentItem( item ); - KIconView::setSelected( item, false ); - blockSignals( block ); - } - - m_resolver->start( d->previews->isChecked() ? 0 : 10 ); -} - -// need to remove our tooltip, eventually -bool KFileIconView::eventFilter( TQObject *o, TQEvent *e ) -{ - if ( TQT_BASE_OBJECT(o) == TQT_BASE_OBJECT(viewport()) || TQT_BASE_OBJECT(o) == TQT_BASE_OBJECT(this) ) { - int type = e->type(); - if ( type == TQEvent::Leave || - type == TQEvent::FocusOut ) - removeToolTip(); - } - - return KIconView::eventFilter( o, e ); -} - -///////////////////////////////////////////////////////////////// - -// ### workaround for Qt3 Bug -void KFileIconView::showEvent( TQShowEvent *e ) -{ - KIconView::showEvent( e ); -} - - -void KFileIconView::initItem( KFileIconViewItem *item, const KFileItem *i, - bool updateTextAndPixmap ) -{ - if ( d->previews->isChecked() && canPreview( i ) ) - item->setPixmapSize( TQSize( d->previewIconSize, d->previewIconSize ) ); - - if ( updateTextAndPixmap ) - { - // this causes a repaint of the item, which we want to avoid during - // directory listing, when all items are created. We want to paint all - // items at once, not every single item in that case. - item->setText( i->text() , false, false ); - item->setPixmap( i->pixmap( myIconSize ) ); - } - - // see also setSorting() - TQDir::SortSpec spec = KFileView::sorting(); - - if ( spec & TQDir::Time ) - // warning, time_t is often signed -> cast it - item->setKey( sortingKey( (unsigned long) i->time( TDEIO::UDS_MODIFICATION_TIME ), - i->isDir(), spec )); - else if ( spec & TQDir::Size ) - item->setKey( sortingKey( i->size(), i->isDir(), spec )); - - else // Name or Unsorted - item->setKey( sortingKey( i->text(), i->isDir(), spec )); - - //tqDebug("** key for: %s: %s", i->text().latin1(), item->key().latin1()); - - if ( d->previews->isChecked() ) - d->previewTimer.start( 10, true ); -} - -void KFileIconView::arrangeItemsInGrid( bool update ) -{ - if ( d->noArrangement ) - return; - - KIconView::arrangeItemsInGrid( update ); -} - -void KFileIconView::zoomIn() -{ - setPreviewSize( d->previewIconSize + 30 ); -} - -void KFileIconView::zoomOut() -{ - setPreviewSize( d->previewIconSize - 30 ); -} - -TQDragObject *KFileIconView::dragObject() -{ - // create a list of the URL:s that we want to drag - KURL::List urls; - KFileItemListIterator it( * KFileView::selectedItems() ); - for ( ; it.current(); ++it ){ - urls.append( (*it)->url() ); - } - TQPixmap pixmap; - if( urls.count() > 1 ) - pixmap = DesktopIcon( "tdemultiple", iconSize() ); - if( pixmap.isNull() ) - pixmap = currentFileItem()->pixmap( iconSize() ); - - TQPoint hotspot; - hotspot.setX( pixmap.width() / 2 ); - hotspot.setY( pixmap.height() / 2 ); - TQDragObject* myDragObject = new KURLDrag( urls, widget() ); - myDragObject->setPixmap( pixmap, hotspot ); - return myDragObject; -} - -void KFileIconView::slotAutoOpen() -{ - d->autoOpenTimer.stop(); - if( !d->dropItem ) - return; - - KFileItem *fileItem = d->dropItem->fileInfo(); - if (!fileItem) - return; - - if( fileItem->isFile() ) - return; - - if ( fileItem->isDir() || fileItem->isLink()) - sig->activate( fileItem ); -} - -bool KFileIconView::acceptDrag(TQDropEvent* e) const -{ - return KURLDrag::canDecode( e ) && - (e->source()!=const_cast<KFileIconView*>(this)) && - ( e->action() == TQDropEvent::Copy - || e->action() == TQDropEvent::Move - || e->action() == TQDropEvent::Link ); -} - -void KFileIconView::contentsDragEnterEvent( TQDragEnterEvent *e ) -{ - if ( ! acceptDrag( e ) ) { // can we decode this ? - e->ignore(); // No - return; - } - e->acceptAction(); // Yes - - if ((dropOptions() & AutoOpenDirs) == 0) - return; - - KFileIconViewItem *item = dynamic_cast<KFileIconViewItem*>(findItem( contentsToViewport( e->pos() ) )); - if ( item ) { // are we over an item ? - d->dropItem = item; - d->autoOpenTimer.start( autoOpenDelay() ); // restart timer - } - else - { - d->dropItem = 0; - d->autoOpenTimer.stop(); - } -} - -void KFileIconView::contentsDragMoveEvent( TQDragMoveEvent *e ) -{ - if ( ! acceptDrag( e ) ) { // can we decode this ? - e->ignore(); // No - return; - } - e->acceptAction(); // Yes - - if ((dropOptions() & AutoOpenDirs) == 0) - return; - - KFileIconViewItem *item = dynamic_cast<KFileIconViewItem*>(findItem( contentsToViewport( e->pos() ) )); - if ( item ) { // are we over an item ? - if (d->dropItem != item) - { - d->dropItem = item; - d->autoOpenTimer.start( autoOpenDelay() ); // restart timer - } - } - else - { - d->dropItem = 0; - d->autoOpenTimer.stop(); - } -} - -void KFileIconView::contentsDragLeaveEvent( TQDragLeaveEvent * ) -{ - d->dropItem = 0; - d->autoOpenTimer.stop(); -} - -void KFileIconView::contentsDropEvent( TQDropEvent *e ) -{ - d->dropItem = 0; - d->autoOpenTimer.stop(); - - if ( ! acceptDrag( e ) ) { // can we decode this ? - e->ignore(); // No - return; - } - e->acceptAction(); // Yes - - KFileIconViewItem *item = dynamic_cast<KFileIconViewItem*>(findItem( contentsToViewport( e->pos() ) )); - KFileItem * fileItem = 0; - if (item) - fileItem = item->fileInfo(); - - emit dropped(e, fileItem); - - KURL::List urls; - if (KURLDrag::decode( e, urls ) && !urls.isEmpty()) - { - emit dropped(e, urls, fileItem ? fileItem->url() : KURL()); - sig->dropURLs(fileItem, e, urls); - } -} - -void KFileIconView::virtual_hook( int id, void* data ) -{ KIconView::virtual_hook( id, data ); - KFileView::virtual_hook( id, data ); } - -#include "kfileiconview.moc" |