From 9e4aad6b3bc3c1b4781a3c1cef6968640d4f6e67 Mon Sep 17 00:00:00 2001 From: Timothy Pearson Date: Sat, 13 Apr 2013 22:41:07 -0500 Subject: Add initial media device free space overlay to Konqueror icon view --- konqueror/iconview/konq_iconview.cc | 76 +++++++++++++++++++++++++++++++++++++ konqueror/iconview/konq_iconview.h | 5 +++ konqueror/iconview/konq_iconview.rc | 1 + 3 files changed, 82 insertions(+) (limited to 'konqueror') diff --git a/konqueror/iconview/konq_iconview.cc b/konqueror/iconview/konq_iconview.cc index a7bb5a812..1ac7b2eb5 100644 --- a/konqueror/iconview/konq_iconview.cc +++ b/konqueror/iconview/konq_iconview.cc @@ -40,6 +40,7 @@ #include #include #include +#include #include #include @@ -217,6 +218,9 @@ KonqKfmIconView::KonqKfmIconView( TQWidget *parentWidget, TQObject *parent, cons m_paDirectoryOverlays = new TDEToggleAction( i18n( "&Folder Icons Reflect Contents" ), 0, this, TQT_SLOT( slotShowDirectoryOverlays() ), actionCollection(), "show_directory_overlays" ); + m_paFreeSpaceOverlays = new TDEToggleAction( i18n( "&Media Icons Reflect Free Space" ), 0, this, TQT_SLOT( slotShowFreeSpaceOverlays() ), + actionCollection(), "show_free_space_overlays" ); + m_pamPreview = new TDEActionMenu( i18n( "&Preview" ), actionCollection(), "iconview_preview" ); m_paEnablePreviews = new TDEToggleAction( i18n("Enable Previews"), 0, actionCollection(), "iconview_preview_all" ); @@ -517,6 +521,27 @@ void KonqKfmIconView::slotShowDirectoryOverlays() m_pIconView->updateContents(); } +void KonqKfmIconView::slotShowFreeSpaceOverlays() +{ + bool show = !m_pProps->isShowingFreeSpaceOverlays(); + + m_pProps->setShowingFreeSpaceOverlays( show ); + + for ( TQIconViewItem *item = m_pIconView->firstItem(); item; item = item->nextItem() ) + { + KFileIVI* kItem = static_cast(item); + if ( !kItem->item()->isDir() ) continue; + + if (show) { + showFreeSpaceOverlay(kItem); + } else { + kItem -> setShowFreeSpaceOverlay(false); + } + } + + m_pIconView->updateContents(); +} + void KonqKfmIconView::slotSelect() { bool ok; @@ -978,6 +1003,9 @@ void KonqKfmIconView::slotNewItems( const KFileItemList& entries ) if ( fileItem->isDir() && m_pProps->isShowingDirectoryOverlays() ) { showDirectoryOverlay(item); } + if ( fileItem->mimetype().startsWith("media/") && m_pProps->isShowingFreeSpaceOverlays() ) { + showFreeSpaceOverlay(item); + } TQString key; @@ -1074,6 +1102,25 @@ void KonqKfmIconView::showDirectoryOverlay(KFileIVI* item) } } +void KonqKfmIconView::showFreeSpaceOverlay(KFileIVI* item) +{ + KFileItem* fileItem = item->item(); + + if ( TDEGlobalSettings::showFilePreview( fileItem->url() ) ) { + m_paOutstandingOverlays.append(item); + if (m_paOutstandingOverlays.count() == 1) + { + if (!m_paOutstandingOverlaysTimer) + { + m_paOutstandingOverlaysTimer = new TQTimer(this); + connect(m_paOutstandingOverlaysTimer, TQT_SIGNAL(timeout()), + TQT_SLOT(slotFreeSpaceOverlayStart())); + } + m_paOutstandingOverlaysTimer->start(20, true); + } + } +} + void KonqKfmIconView::slotDirectoryOverlayStart() { do @@ -1094,6 +1141,26 @@ void KonqKfmIconView::slotDirectoryOverlayStart() } while (true); } +void KonqKfmIconView::slotFreeSpaceOverlayStart() +{ + do + { + KFileIVI* item = m_paOutstandingOverlays.first(); + if (!item) + return; // Nothing to do + + KIVFreeSpaceOverlay* overlay = item->setShowFreeSpaceOverlay( true ); + + if (overlay) + { + connect( overlay, TQT_SIGNAL( finished() ), this, TQT_SLOT( slotFreeSpaceOverlayFinished() ) ); + overlay->start(); // Watch out, may emit finished() immediately!! + return; // Let it run.... + } + m_paOutstandingOverlays.removeFirst(); + } while (true); +} + void KonqKfmIconView::slotDirectoryOverlayFinished() { m_paOutstandingOverlays.removeFirst(); @@ -1102,6 +1169,14 @@ void KonqKfmIconView::slotDirectoryOverlayFinished() m_paOutstandingOverlaysTimer->start(0, true); // Don't call directly to prevent deep recursion. } +void KonqKfmIconView::slotFreeSpaceOverlayFinished() +{ + m_paOutstandingOverlays.removeFirst(); + + if (m_paOutstandingOverlays.count() > 0) + m_paOutstandingOverlaysTimer->start(0, true); // Don't call directly to prevent deep recursion. +} + // see also KDesktop::slotRefreshItems void KonqKfmIconView::slotRefreshItems( const KFileItemList& entries ) { @@ -1302,6 +1377,7 @@ bool KonqKfmIconView::doOpenURL( const KURL & url ) { m_paDotFiles->setChecked( m_pProps->isShowingDotFiles() ); m_paDirectoryOverlays->setChecked( m_pProps->isShowingDirectoryOverlays() ); + m_paFreeSpaceOverlays->setChecked( m_pProps->isShowingFreeSpaceOverlays() ); m_paEnablePreviews->setChecked( m_pProps->isShowingPreview() ); for ( m_paPreviewPlugins.first(); m_paPreviewPlugins.current(); m_paPreviewPlugins.next() ) { diff --git a/konqueror/iconview/konq_iconview.h b/konqueror/iconview/konq_iconview.h index c05362b9d..d66cc4cc8 100644 --- a/konqueror/iconview/konq_iconview.h +++ b/konqueror/iconview/konq_iconview.h @@ -76,6 +76,7 @@ public: public slots: void slotPreview( bool toggle ); void slotShowDirectoryOverlays(); + void slotShowFreeSpaceOverlays(); void slotShowDot(); void slotSelect(); void slotUnselect(); @@ -120,7 +121,9 @@ protected slots: virtual void slotClear(); virtual void slotRedirection( const KURL & ); virtual void slotDirectoryOverlayStart(); + virtual void slotFreeSpaceOverlayStart(); virtual void slotDirectoryOverlayFinished(); + virtual void slotFreeSpaceOverlayFinished(); /** * This is the 'real' finished slot, where we emit the completed() signal @@ -196,6 +199,7 @@ protected: TDEToggleAction *m_paDotFiles; TDEToggleAction *m_paDirectoryOverlays; + TDEToggleAction *m_paFreeSpaceOverlays; TDEToggleAction *m_paEnablePreviews; TQPtrList m_paOutstandingOverlays; TQTimer *m_paOutstandingOverlaysTimer; @@ -226,6 +230,7 @@ protected: private: void showDirectoryOverlay(KFileIVI* item); + void showFreeSpaceOverlay(KFileIVI* item); }; class IconViewBrowserExtension : public KonqDirPartBrowserExtension diff --git a/konqueror/iconview/konq_iconview.rc b/konqueror/iconview/konq_iconview.rc index 20551e0a7..4c0f95c99 100644 --- a/konqueror/iconview/konq_iconview.rc +++ b/konqueror/iconview/konq_iconview.rc @@ -36,6 +36,7 @@ + -- cgit v1.2.1