• Skip to content
  • Skip to link menu
Trinity API Reference
  • Trinity API Reference
  • tdeio/tdefile
 

tdeio/tdefile

  • tdeio
  • tdefile
tdefileiconview.cpp
1/* This file is part of the KDE libraries
2 Copyright (C) 1997 Stephan Kulow <coolo@kde.org>
3 2000,2001,2002 Carsten Pfeiffer <pfeiffer@kde.org>
4
5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public
7 License as published by the Free Software Foundation; either
8 version 2 of the License, or (at your option) any later version.
9
10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details.
14
15 You should have received a copy of the GNU Library General Public License
16 along with this library; see the file COPYING.LIB. If not, write to
17 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18 Boston, MA 02110-1301, USA.
19*/
20#include <tqglobal.h>
21
22#include <tqfontmetrics.h>
23#include <tqkeycode.h>
24#include <tqlabel.h>
25#include <tqpainter.h>
26#include <tqpixmap.h>
27#include <tqregexp.h>
28#include <tqtimer.h>
29#include <tqtooltip.h>
30
31#include <tdeaction.h>
32#include <tdeapplication.h>
33#include <tdelocale.h>
34#include <tdefileitem.h>
35#include <kiconeffect.h>
36#include <tdeglobalsettings.h>
37#include <kurldrag.h>
38#include <tdeio/previewjob.h>
39
40#include "tdefileiconview.h"
41#include "config-tdefile.h"
42
43#define DEFAULT_PREVIEW_SIZE 60
44#define DEFAULT_SHOW_PREVIEWS false
45#define DEFAULT_VIEW_MODE "SmallColumns"
46
47KFileIconViewItem::~KFileIconViewItem()
48{
49 fileInfo()->removeExtraData( iconView() );
50}
51
52class KFileIconView::KFileIconViewPrivate
53{
54public:
55 KFileIconViewPrivate( KFileIconView *parent ) {
56 previewIconSize = 60;
57 job = 0;
58 dropItem = 0;
59
60 noArrangement = false;
61 ignoreMaximumSize = false;
62 smallColumns = new TDERadioAction( i18n("Small Icons"), 0, parent,
63 TQ_SLOT( slotSmallColumns() ),
64 parent->actionCollection(),
65 "small columns" );
66
67 largeRows = new TDERadioAction( i18n("Large Icons"), 0, parent,
68 TQ_SLOT( slotLargeRows() ),
69 parent->actionCollection(),
70 "large rows" );
71
72 smallColumns->setExclusiveGroup(TQString::fromLatin1("IconView mode"));
73 largeRows->setExclusiveGroup(TQString::fromLatin1("IconView mode"));
74
75 previews = new TDEToggleAction( i18n("Thumbnail Previews"), 0,
76 parent->actionCollection(),
77 "show previews" );
78 zoomIn = KStdAction::zoomIn( parent, TQ_SLOT( zoomIn() ),
79 parent->actionCollection(), "zoomIn" );
80 zoomOut = KStdAction::zoomOut( parent, TQ_SLOT( zoomOut() ),
81 parent->actionCollection(), "zoomOut" );
82
83 previews->setGroup("previews");
84 zoomIn->setGroup("previews");
85 zoomOut->setGroup("previews");
86
87 connect( previews, TQ_SIGNAL( toggled( bool )),
88 parent, TQ_SLOT( slotPreviewsToggled( bool )));
89
90 connect( &previewTimer, TQ_SIGNAL( timeout() ),
91 parent, TQ_SLOT( showPreviews() ));
92 connect( &autoOpenTimer, TQ_SIGNAL( timeout() ),
93 parent, TQ_SLOT( slotAutoOpen() ));
94 }
95
96 ~KFileIconViewPrivate() {
97 if ( job )
98 job->kill();
99 }
100
101 TDERadioAction *smallColumns, *largeRows;
102 TDEAction *zoomIn, *zoomOut;
103 TDEToggleAction *previews;
104 TDEIO::PreviewJob *job;
105 KFileIconViewItem *dropItem;
106 TQTimer previewTimer;
107 TQTimer autoOpenTimer;
108 TQStringList previewMimeTypes;
109 int previewIconSize;
110 bool noArrangement :1;
111 bool ignoreMaximumSize :1;
112};
113
114KFileIconView::KFileIconView(TQWidget *parent, const char *name)
115 : TDEIconView(parent, name), KFileView()
116{
117 d = new KFileIconViewPrivate( this );
118
119 setViewName( i18n("Icon View") );
120
121 toolTip = 0;
122 setResizeMode( Adjust );
123 setMaxItemWidth( 300 );
124 setWordWrapIconText( false );
125 setArrangement( TopToBottom );
126 setAutoArrange( true );
127 setItemsMovable( false );
128 setMode( TDEIconView::Select );
129 TDEIconView::setSorting( true );
130 // as long as TQIconView only shows tooltips when the cursor is over the
131 // icon (and not the text), we have to create our own tooltips
132 setShowToolTips( false );
133 slotSmallColumns();
134 d->smallColumns->setChecked( true );
135
136 connect( this, TQ_SIGNAL( returnPressed(TQIconViewItem *) ),
137 TQ_SLOT( slotActivate( TQIconViewItem *) ) );
138
139 // we want single click _and_ double click (as convenience)
140 connect( this, TQ_SIGNAL( clicked(TQIconViewItem *, const TQPoint&) ),
141 TQ_SLOT( selected( TQIconViewItem *) ) );
142 connect( this, TQ_SIGNAL( doubleClicked(TQIconViewItem *, const TQPoint&) ),
143 TQ_SLOT( slotActivate( TQIconViewItem *) ) );
144
145 connect( this, TQ_SIGNAL( onItem( TQIconViewItem * ) ),
146 TQ_SLOT( showToolTip( TQIconViewItem * ) ) );
147 connect( this, TQ_SIGNAL( onViewport() ),
148 TQ_SLOT( removeToolTip() ) );
149 connect( this, TQ_SIGNAL( contextMenuRequested(TQIconViewItem*,const TQPoint&)),
150 TQ_SLOT( slotActivateMenu( TQIconViewItem*, const TQPoint& ) ) );
151
152 KFile::SelectionMode sm = KFileView::selectionMode();
153 switch ( sm ) {
154 case KFile::Multi:
155 TQIconView::setSelectionMode( TQIconView::Multi );
156 break;
157 case KFile::Extended:
158 TQIconView::setSelectionMode( TQIconView::Extended );
159 break;
160 case KFile::NoSelection:
161 TQIconView::setSelectionMode( TQIconView::NoSelection );
162 break;
163 default: // fall through
164 case KFile::Single:
165 TQIconView::setSelectionMode( TQIconView::Single );
166 break;
167 }
168
169 if ( sm == KFile::Multi || sm == KFile::Extended )
170 connect( this, TQ_SIGNAL( selectionChanged() ),
171 TQ_SLOT( slotSelectionChanged() ));
172 else
173 connect( this, TQ_SIGNAL( selectionChanged( TQIconViewItem * )),
174 TQ_SLOT( highlighted( TQIconViewItem * )));
175
176 viewport()->installEventFilter( this );
177
178 // for mimetype resolving
179 m_resolver = new KMimeTypeResolver<KFileIconViewItem,KFileIconView>(this);
180}
181
182KFileIconView::~KFileIconView()
183{
184 delete m_resolver;
185 removeToolTip();
186 delete d;
187}
188
189void KFileIconView::readConfig( TDEConfig *kc, const TQString& group )
190{
191 TQString gr = group.isEmpty() ? TQString("KFileIconView") : group;
192 TDEConfigGroupSaver cs( kc, gr );
193 TQString small = TQString::fromLatin1("SmallColumns");
194 d->previewIconSize = kc->readNumEntry( "Preview Size", DEFAULT_PREVIEW_SIZE );
195 d->previews->setChecked( kc->readBoolEntry( "ShowPreviews", DEFAULT_SHOW_PREVIEWS ) );
196
197 if ( kc->readEntry("ViewMode", DEFAULT_VIEW_MODE ) == small ) {
198 d->smallColumns->setChecked( true );
199 slotSmallColumns();
200 }
201 else {
202 d->largeRows->setChecked( true );
203 slotLargeRows();
204 }
205
206 if ( d->previews->isChecked() )
207 showPreviews();
208}
209
210void KFileIconView::writeConfig( TDEConfig *kc, const TQString& group )
211{
212 TQString gr = group.isEmpty() ? TQString("KFileIconView") : group;
213 TDEConfigGroupSaver cs( kc, gr );
214
215 TQString viewMode = d->smallColumns->isChecked() ?
216 TQString::fromLatin1("SmallColumns") :
217 TQString::fromLatin1("LargeRows");
218 if(!kc->hasDefault( "ViewMode" ) && viewMode == DEFAULT_VIEW_MODE )
219 kc->revertToDefault( "ViewMode" );
220 else
221 kc->writeEntry( "ViewMode", viewMode );
222
223 int previewsIconSize = d->previewIconSize;
224 if(!kc->hasDefault( "Preview Size" ) && previewsIconSize == DEFAULT_PREVIEW_SIZE )
225 kc->revertToDefault( "Preview Size" );
226 else
227 kc->writeEntry( "Preview Size", previewsIconSize );
228
229 bool showPreviews = d->previews->isChecked();
230 if(!kc->hasDefault( "ShowPreviews" ) && showPreviews == DEFAULT_SHOW_PREVIEWS )
231 kc->revertToDefault( "ShowPreviews" );
232 else
233 kc->writeEntry( "ShowPreviews", showPreviews );
234}
235
236void KFileIconView::removeToolTip()
237{
238 delete toolTip;
239 toolTip = 0;
240}
241
242void KFileIconView::showToolTip( TQIconViewItem *item )
243{
244 delete toolTip;
245 toolTip = 0;
246
247 if ( !item )
248 return;
249
250 int w = maxItemWidth() - ( itemTextPos() == TQIconView::Bottom ? 0 :
251 item->pixmapRect().width() ) - 4;
252 if ( fontMetrics().width( item->text() ) >= w ) {
253 toolTip = new TQLabel( TQString::fromLatin1(" %1 ").arg(item->text()), 0,
254 "myToolTip",
255 (WFlags)(WStyle_StaysOnTop | WStyle_Customize | WStyle_NoBorder | WStyle_Tool | WX11BypassWM) );
256 toolTip->setFrameStyle( TQFrame::Plain | TQFrame::Box );
257 toolTip->setLineWidth( 1 );
258 toolTip->setAlignment( AlignLeft | AlignTop );
259 toolTip->move( TQCursor::pos() + TQPoint( 14, 14 ) );
260 toolTip->adjustSize();
261 TQRect screen = TQApplication::desktop()->screenGeometry(
262 TQApplication::desktop()->screenNumber(TQCursor::pos()));
263 if (toolTip->x()+toolTip->width() > screen.right()) {
264 toolTip->move(toolTip->x()+screen.right()-toolTip->x()-toolTip->width(), toolTip->y());
265 }
266 if (toolTip->y()+toolTip->height() > screen.bottom()) {
267 toolTip->move(toolTip->x(), screen.bottom()-toolTip->y()-toolTip->height()+toolTip->y());
268 }
269 toolTip->setFont( TQToolTip::font() );
270 toolTip->setPalette( TQToolTip::palette(), true );
271 toolTip->show();
272 }
273}
274
275void KFileIconView::slotActivateMenu( TQIconViewItem* item, const TQPoint& pos )
276{
277 if ( !item ) {
278 sig->activateMenu( 0, pos );
279 return;
280 }
281 KFileIconViewItem *i = (KFileIconViewItem*) item;
282 sig->activateMenu( i->fileInfo(), pos );
283}
284
285void KFileIconView::hideEvent( TQHideEvent *e )
286{
287 removeToolTip();
288 TDEIconView::hideEvent( e );
289}
290
291void KFileIconView::keyPressEvent( TQKeyEvent *e )
292{
293 TDEIconView::keyPressEvent( e );
294
295 // ignore Ctrl-Return so that the dialog can catch it.
296 if ( (e->state() & ControlButton) &&
297 (e->key() == Key_Return || e->key() == Key_Enter) )
298 e->ignore();
299}
300
301void KFileIconView::setSelected( const KFileItem *info, bool enable )
302{
303 KFileIconViewItem *item = viewItem( info );
304 if ( item )
305 TDEIconView::setSelected( item, enable, true );
306}
307
308void KFileIconView::selectAll()
309{
310 if (KFileView::selectionMode() == KFile::NoSelection ||
311 KFileView::selectionMode() == KFile::Single)
312 return;
313
314 TDEIconView::selectAll( true );
315}
316
317void KFileIconView::clearSelection()
318{
319 TDEIconView::clearSelection();
320}
321
322void KFileIconView::invertSelection()
323{
324 TDEIconView::invertSelection();
325}
326
327void KFileIconView::clearView()
328{
329 m_resolver->m_lstPendingMimeIconItems.clear();
330
331 TDEIconView::clear();
332 stopPreview();
333}
334
335void KFileIconView::insertItem( KFileItem *i )
336{
337 KFileView::insertItem( i );
338
339 TQIconView* qview = static_cast<TQIconView*>( this );
340 // Since creating and initializing an item leads to a repaint,
341 // we disable updates on the IconView for a while.
342 qview->setUpdatesEnabled( false );
343 KFileIconViewItem *item = new KFileIconViewItem( qview, i );
344 initItem( item, i, true );
345 qview->setUpdatesEnabled( true );
346
347 if ( !i->isMimeTypeKnown() )
348 m_resolver->m_lstPendingMimeIconItems.append( item );
349
350 i->setExtraData( this, item );
351}
352
353void KFileIconView::slotActivate( TQIconViewItem *item )
354{
355 if ( !item )
356 return;
357 const KFileItem *fi = ( (KFileIconViewItem*)item )->fileInfo();
358 if ( fi )
359 sig->activate( fi );
360}
361
362void KFileIconView::selected( TQIconViewItem *item )
363{
364 if ( !item || (TDEApplication::keyboardMouseState() & (ShiftButton | ControlButton)) != 0 )
365 return;
366
367 if ( TDEGlobalSettings::singleClick() ) {
368 const KFileItem *fi = ( (KFileIconViewItem*)item )->fileInfo();
369 if ( fi && (fi->isDir() || !onlyDoubleClickSelectsFiles()) )
370 sig->activate( fi );
371 }
372}
373
374void KFileIconView::setCurrentItem( const KFileItem *item )
375{
376 KFileIconViewItem *it = viewItem( item );
377 if ( it )
378 TDEIconView::setCurrentItem( it );
379}
380
381KFileItem * KFileIconView::currentFileItem() const
382{
383 KFileIconViewItem *current = static_cast<KFileIconViewItem*>( currentItem() );
384 if ( current )
385 return current->fileInfo();
386
387 return 0L;
388}
389
390void KFileIconView::highlighted( TQIconViewItem *item )
391{
392 if ( !item )
393 return;
394 const KFileItem *fi = ( (KFileIconViewItem*)item )->fileInfo();
395 if ( fi )
396 sig->highlightFile( fi );
397}
398
399void KFileIconView::setSelectionMode( KFile::SelectionMode sm )
400{
401 disconnect( TQ_SIGNAL( selectionChanged() ), this );
402 disconnect( TQ_SIGNAL( selectionChanged( TQIconViewItem * )), this );
403
404 KFileView::setSelectionMode( sm );
405 switch ( KFileView::selectionMode() ) {
406 case KFile::Multi:
407 TQIconView::setSelectionMode( TQIconView::Multi );
408 break;
409 case KFile::Extended:
410 TQIconView::setSelectionMode( TQIconView::Extended );
411 break;
412 case KFile::NoSelection:
413 TQIconView::setSelectionMode( TQIconView::NoSelection );
414 break;
415 default: // fall through
416 case KFile::Single:
417 TQIconView::setSelectionMode( TQIconView::Single );
418 break;
419 }
420
421 if ( sm == KFile::Multi || sm == KFile::Extended )
422 connect( this, TQ_SIGNAL( selectionChanged() ),
423 TQ_SLOT( slotSelectionChanged() ));
424 else
425 connect( this, TQ_SIGNAL( selectionChanged( TQIconViewItem * )),
426 TQ_SLOT( highlighted( TQIconViewItem * )));
427}
428
429bool KFileIconView::isSelected( const KFileItem *i ) const
430{
431 KFileIconViewItem *item = viewItem( i );
432 return (item && item->isSelected());
433}
434
435void KFileIconView::updateView( bool b )
436{
437 if ( !b )
438 return; // eh?
439
440 KFileIconViewItem *item = static_cast<KFileIconViewItem*>(TQIconView::firstItem());
441 if ( item ) {
442 do {
443 if ( d->previews->isChecked() ) {
444 if ( canPreview( item->fileInfo() ) )
445 item->setPixmapSize( TQSize( d->previewIconSize, d->previewIconSize ) );
446 }
447 else {
448 // unset pixmap size (used for previews)
449 if ( !item->pixmapSize().isNull() )
450 item->setPixmapSize( TQSize( 0, 0 ) );
451 }
452 // recalculate item parameters but avoid an in-place repaint
453 item->setPixmap( (item->fileInfo())->pixmap( myIconSize ), true, false );
454 item = static_cast<KFileIconViewItem *>(item->nextItem());
455 } while ( item != 0L );
456 }
457}
458
459void KFileIconView::updateView( const KFileItem *i )
460{
461 KFileIconViewItem *item = viewItem( i );
462 if ( item )
463 initItem( item, i, true );
464}
465
466void KFileIconView::removeItem( const KFileItem *i )
467{
468 if ( !i )
469 return;
470
471 if ( d->job )
472 d->job->removeItem( i );
473
474 KFileIconViewItem *item = viewItem( i );
475 m_resolver->m_lstPendingMimeIconItems.remove( item );
476 delete item;
477
478 KFileView::removeItem( i );
479}
480
481void KFileIconView::setIconSize( int size )
482{
483 myIconSize = size;
484 updateIcons();
485}
486
487void KFileIconView::setPreviewSize( int size )
488{
489 if ( size < 30 )
490 size = 30; // minimum
491
492 d->previewIconSize = size;
493 if ( d->previews->isChecked() )
494 showPreviews();
495}
496
497void KFileIconView::setIgnoreMaximumSize(bool ignoreSize)
498{
499 d->ignoreMaximumSize = ignoreSize;
500}
501
502void KFileIconView::updateIcons()
503{
504 updateView( true );
505 arrangeItemsInGrid();
506}
507
508void KFileIconView::ensureItemVisible( const KFileItem *i )
509{
510 KFileIconViewItem *item = viewItem( i );
511 if ( item )
512 TDEIconView::ensureItemVisible( item );
513}
514
515void KFileIconView::slotSelectionChanged()
516{
517 sig->highlightFile( 0L );
518}
519
520void KFileIconView::slotSmallColumns()
521{
522 // setItemTextPos(), setArrangement(), setWordWrapIconText() and
523 // setIconSize() all call arrangeItemsInGrid() :( Prevent this.
524 d->noArrangement = true; // stop arrangeItemsInGrid()!
525
526 // Make sure to uncheck previews if selected
527 if ( d->previews->isChecked() )
528 {
529 stopPreview();
530 d->previews->setChecked( false );
531 }
532 setGridX( -1 );
533 setMaxItemWidth( 300 );
534 setItemTextPos( Right );
535 setArrangement( TopToBottom );
536 setWordWrapIconText( false );
537 setSpacing( 0 );
538
539 d->noArrangement = false; // now we can arrange
540 setIconSize( TDEIcon::SizeSmall );
541}
542
543void KFileIconView::slotLargeRows()
544{
545 // setItemTextPos(), setArrangement(), setWordWrapIconText() and
546 // setIconSize() all call arrangeItemsInGrid() :( Prevent this.
547 d->noArrangement = true; // stop arrangeItemsInGrid()!
548
549 setGridX( TDEGlobal::iconLoader()->currentSize( TDEIcon::Desktop ) + 50 );
550 setItemTextPos( Bottom );
551 setArrangement( LeftToRight );
552 setWordWrapIconText( true );
553 setSpacing( 5 ); // default in QIconView
554
555 d->noArrangement = false; // now we can arrange
556 setIconSize( TDEIcon::SizeMedium );
557}
558
559void KFileIconView::stopPreview()
560{
561 if ( d->job ) {
562 d->job->kill();
563 d->job = 0L;
564 }
565}
566
567void KFileIconView::slotPreviewsToggled( bool on )
568{
569 if ( on )
570 showPreviews();
571 else {
572 stopPreview();
573 slotLargeRows();
574 }
575}
576
577void KFileIconView::showPreviews()
578{
579 if ( d->previewMimeTypes.isEmpty() )
580 d->previewMimeTypes = TDEIO::PreviewJob::supportedMimeTypes();
581
582 stopPreview();
583 d->previews->setChecked( true );
584
585 if ( !d->largeRows->isChecked() ) {
586 d->largeRows->setChecked( true );
587 slotLargeRows(); // also sets the icon size and updates the grid
588 }
589 else {
590 updateIcons();
591 }
592
593 d->job = TDEIO::filePreview(*items(), d->previewIconSize,d->previewIconSize);
594 d->job->setIgnoreMaximumSize(d->ignoreMaximumSize);
595
596 connect( d->job, TQ_SIGNAL( result( TDEIO::Job * )),
597 this, TQ_SLOT( slotPreviewResult( TDEIO::Job * )));
598 connect( d->job, TQ_SIGNAL( gotPreview( const KFileItem*, const TQPixmap& )),
599 TQ_SLOT( gotPreview( const KFileItem*, const TQPixmap& ) ));
600// connect( d->job, TQ_SIGNAL( failed( const KFileItem* )),
601// this, TQ_SLOT( slotFailed( const KFileItem* ) ));
602}
603
604void KFileIconView::slotPreviewResult( TDEIO::Job *job )
605{
606 if ( job == d->job )
607 d->job = 0L;
608}
609
610void KFileIconView::gotPreview( const KFileItem *item, const TQPixmap& pix )
611{
612 KFileIconViewItem *it = viewItem( item );
613 if ( it ) {
614 if( item->overlays() & TDEIcon::HiddenOverlay )
615 {
616 TQPixmap p( pix );
617
618 TDEIconEffect::semiTransparent( p );
619 it->setPixmap( p );
620 }
621 else {
622 it->setPixmap( pix );
623 }
624 }
625}
626
627bool KFileIconView::canPreview( const KFileItem *item ) const
628{
629 TQStringList::Iterator it = d->previewMimeTypes.begin();
630 TQRegExp r;
631 r.setWildcard( true );
632
633 for ( ; it != d->previewMimeTypes.end(); ++it ) {
634 TQString type = *it;
635 // the "mimetype" can be "image/*"
636 if ( type.at( type.length() - 1 ) == '*' ) {
637 r.setPattern( type );
638 if ( r.search( item->mimetype() ) != -1 )
639 return true;
640 }
641 else
642 if ( item->mimetype() == type )
643 return true;
644 }
645
646 return false;
647}
648
649KFileItem * KFileIconView::firstFileItem() const
650{
651 KFileIconViewItem *item = static_cast<KFileIconViewItem*>( firstItem() );
652 if ( item )
653 return item->fileInfo();
654 return 0L;
655}
656
657KFileItem * KFileIconView::nextItem( const KFileItem *fileItem ) const
658{
659 if ( fileItem ) {
660 KFileIconViewItem *item = viewItem( fileItem );
661 if ( item && item->nextItem() )
662 return ((KFileIconViewItem*) item->nextItem())->fileInfo();
663 }
664 return 0L;
665}
666
667KFileItem * KFileIconView::prevItem( const KFileItem *fileItem ) const
668{
669 if ( fileItem ) {
670 KFileIconViewItem *item = viewItem( fileItem );
671 if ( item && item->prevItem() )
672 return ((KFileIconViewItem*) item->prevItem())->fileInfo();
673 }
674 return 0L;
675}
676
677void KFileIconView::setSorting( TQDir::SortSpec spec )
678{
679 KFileView::setSorting( spec );
680 KFileItemListIterator it( *items() );
681
682 KFileItem *item;
683
684 if ( spec & TQDir::Time ) {
685 for ( ; (item = it.current()); ++it )
686 // warning, time_t is often signed -> cast it
687 viewItem(item)->setKey( sortingKey( (unsigned long)item->time( TDEIO::UDS_MODIFICATION_TIME ), item->isDir(), spec ));
688 }
689
690 else if ( spec & TQDir::Size ) {
691 for ( ; (item = it.current()); ++it )
692 viewItem(item)->setKey( sortingKey( item->size(), item->isDir(),
693 spec ));
694 }
695 else { // Name or Unsorted
696 for ( ; (item = it.current()); ++it )
697 viewItem(item)->setKey( sortingKey( item->text(), item->isDir(),
698 spec ));
699 }
700
701 TDEIconView::setSorting( true, !isReversed() );
702 sort( !isReversed() );
703}
704
705//
706// mimetype determination on demand
707//
708void KFileIconView::mimeTypeDeterminationFinished()
709{
710 // anything to do?
711}
712
713void KFileIconView::determineIcon( KFileIconViewItem *item )
714{
715 (void) item->fileInfo()->determineMimeType();
716 updateView( item->fileInfo() );
717}
718
719void KFileIconView::listingCompleted()
720{
721 arrangeItemsInGrid();
722
723 // TQIconView doesn't set the current item automatically, so we have to do
724 // that. We don't want to emit selectionChanged() tho.
725 if ( !currentItem() ) {
726 bool block = signalsBlocked();
727 blockSignals( true );
728 TQIconViewItem *item = viewItem( firstFileItem() );
729 TDEIconView::setCurrentItem( item );
730 TDEIconView::setSelected( item, false );
731 blockSignals( block );
732 }
733
734 m_resolver->start( d->previews->isChecked() ? 0 : 10 );
735}
736
737// need to remove our tooltip, eventually
738bool KFileIconView::eventFilter( TQObject *o, TQEvent *e )
739{
740 if ( o == viewport() || o == this ) {
741 int type = e->type();
742 if ( type == TQEvent::Leave ||
743 type == TQEvent::FocusOut )
744 removeToolTip();
745 }
746
747 return TDEIconView::eventFilter( o, e );
748}
749
751
752// ### workaround for Qt3 Bug
753void KFileIconView::showEvent( TQShowEvent *e )
754{
755 TDEIconView::showEvent( e );
756}
757
758
759void KFileIconView::initItem( KFileIconViewItem *item, const KFileItem *i,
760 bool updateTextAndPixmap )
761{
762 if ( d->previews->isChecked() && canPreview( i ) )
763 item->setPixmapSize( TQSize( d->previewIconSize, d->previewIconSize ) );
764
765 if ( updateTextAndPixmap )
766 {
767 // this causes a repaint of the item, which we want to avoid during
768 // directory listing, when all items are created. We want to paint all
769 // items at once, not every single item in that case.
770 item->setText( i->text() , false, false );
771 item->setPixmap( i->pixmap( myIconSize ) );
772 }
773
774 // see also setSorting()
775 TQDir::SortSpec spec = KFileView::sorting();
776
777 if ( spec & TQDir::Time )
778 // warning, time_t is often signed -> cast it
779 item->setKey( sortingKey( (unsigned long) i->time( TDEIO::UDS_MODIFICATION_TIME ),
780 i->isDir(), spec ));
781 else if ( spec & TQDir::Size )
782 item->setKey( sortingKey( i->size(), i->isDir(), spec ));
783
784 else // Name or Unsorted
785 item->setKey( sortingKey( i->text(), i->isDir(), spec ));
786
787 //tqDebug("** key for: %s: %s", i->text().latin1(), item->key().latin1());
788
789 if ( d->previews->isChecked() )
790 d->previewTimer.start( 10, true );
791}
792
793void KFileIconView::arrangeItemsInGrid( bool update )
794{
795 if ( d->noArrangement )
796 return;
797
798 TDEIconView::arrangeItemsInGrid( update );
799}
800
801void KFileIconView::zoomIn()
802{
803 setPreviewSize( d->previewIconSize + 30 );
804}
805
806void KFileIconView::zoomOut()
807{
808 setPreviewSize( d->previewIconSize - 30 );
809}
810
811TQDragObject *KFileIconView::dragObject()
812{
813 // create a list of the URL:s that we want to drag
814 KURL::List urls;
815 KFileItemListIterator it( * KFileView::selectedItems() );
816 for ( ; it.current(); ++it ){
817 urls.append( (*it)->url() );
818 }
819 TQPixmap pixmap;
820 if( urls.count() > 1 )
821 pixmap = DesktopIcon( "application-vnd.tde.tdemultiple", iconSize() );
822 if( pixmap.isNull() )
823 pixmap = currentFileItem()->pixmap( iconSize() );
824
825 TQPoint hotspot;
826 hotspot.setX( pixmap.width() / 2 );
827 hotspot.setY( pixmap.height() / 2 );
828 TQDragObject* myDragObject = new KURLDrag( urls, widget() );
829 myDragObject->setPixmap( pixmap, hotspot );
830 return myDragObject;
831}
832
833void KFileIconView::slotAutoOpen()
834{
835 d->autoOpenTimer.stop();
836 if( !d->dropItem )
837 return;
838
839 KFileItem *fileItem = d->dropItem->fileInfo();
840 if (!fileItem)
841 return;
842
843 if( fileItem->isFile() )
844 return;
845
846 if ( fileItem->isDir() || fileItem->isLink())
847 sig->activate( fileItem );
848}
849
850bool KFileIconView::acceptDrag(TQDropEvent* e) const
851{
852 return KURLDrag::canDecode( e ) &&
853 (e->source()!=const_cast<KFileIconView*>(this)) &&
854 ( e->action() == TQDropEvent::Copy
855 || e->action() == TQDropEvent::Move
856 || e->action() == TQDropEvent::Link );
857}
858
859void KFileIconView::contentsDragEnterEvent( TQDragEnterEvent *e )
860{
861 if ( ! acceptDrag( e ) ) { // can we decode this ?
862 e->ignore(); // No
863 return;
864 }
865 e->acceptAction(); // Yes
866
867 if ((dropOptions() & AutoOpenDirs) == 0)
868 return;
869
870 KFileIconViewItem *item = dynamic_cast<KFileIconViewItem*>(findItem( contentsToViewport( e->pos() ) ));
871 if ( item ) { // are we over an item ?
872 d->dropItem = item;
873 d->autoOpenTimer.start( autoOpenDelay() ); // restart timer
874 }
875 else
876 {
877 d->dropItem = 0;
878 d->autoOpenTimer.stop();
879 }
880}
881
882void KFileIconView::contentsDragMoveEvent( TQDragMoveEvent *e )
883{
884 if ( ! acceptDrag( e ) ) { // can we decode this ?
885 e->ignore(); // No
886 return;
887 }
888 e->acceptAction(); // Yes
889
890 if ((dropOptions() & AutoOpenDirs) == 0)
891 return;
892
893 KFileIconViewItem *item = dynamic_cast<KFileIconViewItem*>(findItem( contentsToViewport( e->pos() ) ));
894 if ( item ) { // are we over an item ?
895 if (d->dropItem != item)
896 {
897 d->dropItem = item;
898 d->autoOpenTimer.start( autoOpenDelay() ); // restart timer
899 }
900 }
901 else
902 {
903 d->dropItem = 0;
904 d->autoOpenTimer.stop();
905 }
906}
907
908void KFileIconView::contentsDragLeaveEvent( TQDragLeaveEvent * )
909{
910 d->dropItem = 0;
911 d->autoOpenTimer.stop();
912}
913
914void KFileIconView::contentsDropEvent( TQDropEvent *e )
915{
916 d->dropItem = 0;
917 d->autoOpenTimer.stop();
918
919 if ( ! acceptDrag( e ) ) { // can we decode this ?
920 e->ignore(); // No
921 return;
922 }
923 e->acceptAction(); // Yes
924
925 KFileIconViewItem *item = dynamic_cast<KFileIconViewItem*>(findItem( contentsToViewport( e->pos() ) ));
926 KFileItem * fileItem = 0;
927 if (item)
928 fileItem = item->fileInfo();
929
930 emit dropped(e, fileItem);
931
932 KURL::List urls;
933 if (KURLDrag::decode( e, urls ) && !urls.isEmpty())
934 {
935 emit dropped(e, urls, fileItem ? fileItem->url() : KURL());
936 sig->dropURLs(fileItem, e, urls);
937 }
938}
939
940void KFileIconView::virtual_hook( int id, void* data )
941{ TDEIconView::virtual_hook( id, data );
942 KFileView::virtual_hook( id, data ); }
943
944#include "tdefileiconview.moc"
KFileIconViewItem
An item for the iconview, that has a reference to its corresponding KFileItem.
Definition: tdefileiconview.h:40
KFileIconViewItem::fileInfo
KFileItem * fileInfo() const
Definition: tdefileiconview.h:57
KFileIconView
An icon-view capable of showing KFileItem's.
Definition: tdefileiconview.h:83
KFileIconView::insertItem
virtual void insertItem(KFileItem *i)
The derived view must implement this function to add the file in the widget.
Definition: tdefileiconview.cpp:335
KFileIconView::dropped
void dropped(TQDropEvent *event, KFileItem *fileItem)
The user dropped something.
KFileIconView::setIconSize
void setIconSize(int size)
Sets the size of the icons to show.
Definition: tdefileiconview.cpp:481
KFileIconView::ensureItemVisible
void ensureItemVisible(const KFileItem *)
pure virtual function, that should be implemented to make item i visible, i.e.
Definition: tdefileiconview.cpp:508
KFileIconView::hideEvent
virtual void hideEvent(TQHideEvent *)
Reimplemented to remove an eventual tooltip.
Definition: tdefileiconview.cpp:285
KFileIconView::keyPressEvent
virtual void keyPressEvent(TQKeyEvent *)
Reimplemented to not let TQIconView eat return-key events.
Definition: tdefileiconview.cpp:291
KFileIconView::showPreviews
void showPreviews()
Starts loading previews for all files shown and shows them.
Definition: tdefileiconview.cpp:577
KFileIconView::isSelected
virtual bool isSelected(const KFileItem *i) const
Definition: tdefileiconview.cpp:429
KFileIconView::setCurrentItem
virtual void setCurrentItem(const KFileItem *)
Reimplement this to set item the current item in the view, e.g.
Definition: tdefileiconview.cpp:374
KFileIconView::setIgnoreMaximumSize
void setIgnoreMaximumSize(bool ignoreSize=true)
Disables the "Maximum file size" configuration option for previews.
Definition: tdefileiconview.cpp:497
KFileIconView::setPreviewSize
void setPreviewSize(int size)
Sets the size of the previews.
Definition: tdefileiconview.cpp:487
KFileIconView::clearView
virtual void clearView()
pure virtual function, that should be implemented to clear the view.
Definition: tdefileiconview.cpp:327
KFileIconView::listingCompleted
virtual void listingCompleted()
This hook is called when all items of the currently listed directory are listed and inserted into the...
Definition: tdefileiconview.cpp:719
KFileIconView::removeItem
virtual void removeItem(const KFileItem *)
Removes an item from the list; has to be implemented by the view.
Definition: tdefileiconview.cpp:466
KFileIconView::clearSelection
virtual void clearSelection()
Clears any selection, unhighlights everything.
Definition: tdefileiconview.cpp:317
KFileIconView::setSorting
virtual void setSorting(TQDir::SortSpec sort)
Sets the sorting order of the view.
Definition: tdefileiconview.cpp:677
KFileIconView::updateView
virtual void updateView(bool)
does a repaint of the view.
Definition: tdefileiconview.cpp:435
KFileIconView::iconSize
int iconSize() const
Definition: tdefileiconview.h:137
KFileIconView::currentFileItem
virtual KFileItem * currentFileItem() const
Definition: tdefileiconview.cpp:381
KFileIconView::selectAll
virtual void selectAll()
Selects all items.
Definition: tdefileiconview.cpp:308
KFileIconView::setSelected
virtual void setSelected(const KFileItem *, bool)
Tells the view that it should highlight the item.
Definition: tdefileiconview.cpp:301
KFileIconView::arrangeItemsInGrid
virtual void arrangeItemsInGrid(bool updated=true)
Reimplemented for performance reasons.
Definition: tdefileiconview.cpp:793
KFileIconView::widget
virtual TQWidget * widget()
a pure virtual function to get a TQWidget, that can be added to other widgets.
Definition: tdefileiconview.h:90
KFileIconView::invertSelection
virtual void invertSelection()
Inverts the current selection, i.e.
Definition: tdefileiconview.cpp:322
KFileViewSignaler::activate
void activate(const KFileItem *item)
Call this method when an item is selected (depends on single click / double click configuration).
Definition: tdefileview.h:45
KFileViewSignaler::highlightFile
void highlightFile(const KFileItem *i)
emits the highlighted signal for item.
Definition: tdefileview.h:55
KFileView
This class defines an interface to all file views.
Definition: tdefileview.h:97
KFileView::onlyDoubleClickSelectsFiles
bool onlyDoubleClickSelectsFiles() const
Definition: tdefileview.h:329
KFileView::insertItem
virtual void insertItem(KFileItem *i)
The derived view must implement this function to add the file in the widget.
Definition: tdefileview.cpp:147
KFileView::items
const KFileItemList * items() const
Definition: tdefileview.cpp:283
KFileView::isReversed
bool isReversed() const
Tells whether the current items are in reversed order (shortcut to sorting() & TQDir::Reversed).
Definition: tdefileview.h:198
KFileView::selectedItems
const KFileItemList * selectedItems() const
Definition: tdefileview.cpp:296
KFileView::sorting
TQDir::SortSpec sorting() const
Returns the sorting order of the internal list.
Definition: tdefileview.h:176
KFileView::dropOptions
int dropOptions()
Returns the DND options in effect.
Definition: tdefileview.cpp:407
KFileView::removeItem
virtual void removeItem(const KFileItem *item)
Removes an item from the list; has to be implemented by the view.
Definition: tdefileview.cpp:346
KFileView::setSorting
virtual void setSorting(TQDir::SortSpec sort)
Sets the sorting order of the view.
Definition: tdefileview.cpp:151
KFileView::actionCollection
virtual TDEActionCollection * actionCollection() const
Definition: tdefileview.cpp:365
KFileView::sortingKey
static TQString sortingKey(const TQString &value, bool isDir, int sortSpec)
This method calculates a TQString from the given parameters, that is suitable for sorting with e....
Definition: tdefileview.cpp:380

tdeio/tdefile

Skip menu "tdeio/tdefile"
  • Main Page
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Class Members
  • Related Pages

tdeio/tdefile

Skip menu "tdeio/tdefile"
  • arts
  • dcop
  • dnssd
  • interfaces
  •   kspeech
  •     interface
  •     library
  •   tdetexteditor
  • kate
  • kded
  • kdoctools
  • kimgio
  • kjs
  • libtdemid
  • libtdescreensaver
  • tdeabc
  • tdecmshell
  • tdecore
  • tdefx
  • tdehtml
  • tdeinit
  • tdeio
  •   bookmarks
  •   httpfilter
  •   kpasswdserver
  •   kssl
  •   tdefile
  •   tdeio
  •   tdeioexec
  • tdeioslave
  •   http
  • tdemdi
  •   tdemdi
  • tdenewstuff
  • tdeparts
  • tdeprint
  • tderandr
  • tderesources
  • tdespell2
  • tdesu
  • tdeui
  • tdeunittest
  • tdeutils
  • tdewallet
Generated for tdeio/tdefile by doxygen 1.9.4
This website is maintained by Timothy Pearson.