21 #include "kivdirectoryoverlay.h"
22 #include "konq_iconviewwidget.h"
23 #include "konq_operations.h"
24 #include "konq_settings.h"
26 #include <tqpainter.h>
29 #include <kiconeffect.h>
30 #include <kfileitem.h>
39 struct KFileIVI::Private
44 TQString m_animatedIcon;
46 KIVDirectoryOverlay* m_directoryOverlay;
48 TQString m_overlayName;
52 : KIconViewItem( iconview, fileitem->text() ),
53 m_size( size ), m_state( KIcon::DefaultState ),
54 m_bDisabled( false ), m_bThumbnail( false ), m_fileitem( fileitem )
56 d =
new KFileIVI::Private;
59 setPixmap( m_fileitem->pixmap( m_size, m_state ) );
60 setDropEnabled( S_ISDIR( m_fileitem->mode() ) );
63 d->icons.reset( *pixmap(), TQIconSet::Large );
64 d->m_animated =
false;
67 if ( fileitem->isMimeTypeKnown() )
69 TQString icon = fileitem->iconName();
70 if ( !icon.isEmpty() )
75 d->m_directoryOverlay = 0;
80 delete d->m_directoryOverlay;
89 case KIcon::DisabledState:
90 mode = TQIconSet::Disabled;
92 case KIcon::ActiveState:
93 mode = TQIconSet::Active;
95 case KIcon::DefaultState:
97 mode = TQIconSet::Normal;
100 d->icons = TQIconSet();
101 d->icons.setPixmap( KGlobal::iconLoader()->iconEffect()->
102 apply( d->thumb, KIcon::Desktop, state ),
103 TQIconSet::Large, mode );
106 TQIconViewItem::setPixmap( d->icons.pixmap( TQIconSet::Large, mode ),
113 m_bThumbnail =
false;
115 m_state = KIcon::DisabledState;
119 if ( d->m_overlayName.isNull() )
120 d->m_overlay = TQPixmap();
124 halfSize = IconSize(KIcon::Desktop) / 2;
126 halfSize = m_size / 2;
128 d->m_overlay = DesktopIcon(d->m_overlayName, halfSize);
131 setPixmapDirect(m_fileitem->pixmap( m_size, m_state ) , recalc, redraw );
136 d->m_overlayName = iconName;
143 if ( !m_fileitem->isDir() || m_fileitem->iconName() !=
"folder" )
147 if (!d->m_directoryOverlay)
148 d->m_directoryOverlay =
new KIVDirectoryOverlay(
this);
149 return d->m_directoryOverlay;
151 delete d->m_directoryOverlay;
152 d->m_directoryOverlay = 0;
158 bool KFileIVI::showDirectoryOverlay( )
160 return (
bool)d->m_directoryOverlay;
165 TQIconSet::Mode mode;
168 case KIcon::DisabledState:
169 mode = TQIconSet::Disabled;
171 case KIcon::ActiveState:
172 mode = TQIconSet::Active;
174 case KIcon::DefaultState:
176 mode = TQIconSet::Normal;
183 d->icons = TQIconSet();
184 d->icons.setPixmap( pixmap, TQIconSet::Large, mode );
187 TQIconViewItem::setPixmap( d->icons.pixmap( TQIconSet::Large, mode ),
193 if ( m_bDisabled != disabled )
195 m_bDisabled = disabled;
196 bool active = ( m_state == KIcon::ActiveState );
197 setEffect( m_bDisabled ? KIcon::DisabledState :
198 ( active ? KIcon::ActiveState : KIcon::DefaultState ) );
208 d->icons = TQIconSet();
209 d->icons.setPixmap( KGlobal::iconLoader()->iconEffect()->
210 apply( pixmap, KIcon::Desktop, KIcon::DefaultState ),
211 TQIconSet::Large, TQIconSet::Normal );
213 m_state = KIcon::DefaultState;
217 TQIconViewItem::setPixmap( d->icons.pixmap( TQIconSet::Large,
218 TQIconSet::Normal ), true );
226 setEffect( m_bDisabled ? KIcon::DisabledState : KIcon::DefaultState );
231 TQIconSet::Mode mode;
234 case KIcon::DisabledState:
235 mode = TQIconSet::Disabled;
237 case KIcon::ActiveState:
238 mode = TQIconSet::Active;
240 case KIcon::DefaultState:
242 mode = TQIconSet::Normal;
247 KIconEffect *effect = KGlobal::iconLoader()->iconEffect();
249 bool haveEffect = effect->hasEffect( KIcon::Desktop, m_state ) !=
250 effect->hasEffect( KIcon::Desktop, state );
260 effect->fingerprint( KIcon::Desktop, m_state ) !=
261 effect->fingerprint( KIcon::Desktop, state ) )
267 if( d->icons.isGenerated( TQIconSet::Large, mode ) )
268 d->icons.setPixmap( effect->apply( d->thumb, KIcon::Desktop, state ),
269 TQIconSet::Large, mode );
273 if( d->icons.isGenerated( TQIconSet::Large, mode ) )
274 d->icons.setPixmap( m_fileitem->pixmap( m_size, state ),
275 TQIconSet::Large, mode );
277 TQIconViewItem::setPixmap( d->icons.pixmap( TQIconSet::Large, mode ) );
285 setIcon( m_size, m_state,
true, redraw );
290 d->thumb = TQPixmap();
293 bool KFileIVI::isThumbnailInvalid()
const
295 return d->thumb.isNull();
300 if ( mime->provides(
"text/uri-list" ) )
302 if ( m_fileitem->acceptsDrops() )
310 KURL::List::Iterator it = uris.begin();
311 for ( ; it != uris.end() ; it++ )
313 if ( m_fileitem->url().equals( *it,
true ) )
320 void KFileIVI::setKey(
const TQString &key )
322 TQString theKey = key;
324 TQVariant sortDirProp = iconView()->property(
"sortDirectoriesFirst" );
326 bool isdir = ( S_ISDIR( m_fileitem->mode() ) && ( !sortDirProp.isValid() || ( sortDirProp.type() == TQVariant::Bool && sortDirProp.toBool() ) ) );
329 int sortChar = isdir ? 1 : 3;
330 if ( m_fileitem->text()[0] ==
'.' )
333 if ( !iconView()->sortDirection() )
334 sortChar = 3 - sortChar;
336 theKey.prepend( TQChar( sortChar +
'0' ) );
338 TQIconViewItem::setKey( theKey );
341 void KFileIVI::dropped( TQDropEvent *e,
const TQValueList<TQIconDragItem> & )
348 if ( static_cast<KonqIconViewWidget*>(iconView())->isDesktop() ) {
349 KURL url = m_fileitem->url();
352 if ( m_fileitem->isLink() && url.isLocalFile() )
353 url = KURL( url, m_fileitem->linkDest() );
355 (void)
new KRun( url, m_fileitem->mode(), m_fileitem->isLocalFile() );
383 if ( !d->m_overlay.isNull() ) {
384 TQRect rect = pixmapRect(
true);
385 p->drawPixmap(x() + rect.x() , y() + pixmapRect().height() - d->m_overlay.height(), d->m_overlay);
391 if ( m_fileitem->isLink() )
393 TQFont f( p->font() );
401 TQColorGroup cg( c );
402 cg.setColor( TQColorGroup::Text, static_cast<KonqIconViewWidget*>(iconView())->itemColor() );
406 bool KFileIVI::move(
int x,
int y )
408 if ( static_cast<KonqIconViewWidget*>(iconView())->isDesktop() ) {
411 if ( x > iconView()->viewport()->width() - ( width() + 5 ) )
412 x = iconView()->viewport()->width() - ( width() + 5 );
415 if ( y > iconView()->viewport()->height() - ( height() + 5 ) )
416 y = iconView()->viewport()->height() - ( height() + 5 );
418 return TQIconViewItem::move( x, y );
423 return !d->m_animatedIcon.isEmpty() && !m_bThumbnail;
428 if ( !movieFileName.isEmpty() )
431 d->m_animatedIcon = movieFileName;
435 TQString KFileIVI::mouseOverAnimation()
const
437 return d->m_animatedIcon;
442 return d->m_animated;
445 void KFileIVI::setAnimated(
bool a )
450 int KFileIVI::compare( TQIconViewItem *i )
const
453 if ( view->caseInsensitiveSort() )
454 return key().localeAwareCompare( i->key() );
456 return view->m_pSettings->caseSensitiveCompare( key(), i->key() );
459 void KFileIVI::updatePixmapSize()
461 int size = m_size ? m_size :
462 KGlobal::iconLoader()->currentSize( KIcon::Desktop );
466 if ( view && view->canPreview(
item() ) ) {
467 int previewSize = view->previewIconSize( size );
468 setPixmapSize( TQSize( previewSize, previewSize ) );
471 TQSize pixSize = TQSize( size, size );
472 if ( pixSize != pixmapSize() )
473 setPixmapSize( pixSize );