kfilemetapreview.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009 #include "kfilemetapreview.h"
00010
00011 #include <qlayout.h>
00012
00013 #include <kio/previewjob.h>
00014 #include <klibloader.h>
00015 #include <kimagefilepreview.h>
00016 #include <kmimetype.h>
00017
00018 bool KFileMetaPreview::s_tryAudioPreview = true;
00019
00020 KFileMetaPreview::KFileMetaPreview( QWidget *parent, const char *name )
00021 : KPreviewWidgetBase( parent, name ),
00022 haveAudioPreview( false )
00023 {
00024 QHBoxLayout *layout = new QHBoxLayout( this, 0, 0 );
00025 m_stack = new QWidgetStack( this );
00026 layout->addWidget( m_stack );
00027
00028
00029
00030 initPreviewProviders();
00031 }
00032
00033 KFileMetaPreview::~KFileMetaPreview()
00034 {
00035 }
00036
00037 void KFileMetaPreview::initPreviewProviders()
00038 {
00039 m_previewProviders.clear();
00040
00041
00042
00043 KImageFilePreview *imagePreview = new KImageFilePreview( m_stack );
00044 (void) m_stack->addWidget( imagePreview );
00045 m_stack->raiseWidget( imagePreview );
00046 resize( imagePreview->sizeHint() );
00047
00048 QStringList mimeTypes = imagePreview->supportedMimeTypes();
00049 QStringList::ConstIterator it = mimeTypes.begin();
00050 for ( ; it != mimeTypes.end(); ++it )
00051 {
00052
00053 m_previewProviders.insert( *it, imagePreview );
00054 }
00055 }
00056
00057 KPreviewWidgetBase * KFileMetaPreview::previewProviderFor( const QString& mimeType )
00058 {
00059
00060
00061
00062 if ( mimeType == "inode/directory" )
00063 return 0L;
00064
00065 KPreviewWidgetBase *provider = m_previewProviders.find( mimeType );
00066 if ( provider )
00067 return provider;
00068
00069
00070
00071 if ( s_tryAudioPreview &&
00072 !mimeType.startsWith("text/") && !mimeType.startsWith("image/") )
00073 {
00074 if ( !haveAudioPreview )
00075 {
00076 KPreviewWidgetBase *audioPreview = createAudioPreview( m_stack );
00077 if ( audioPreview )
00078 {
00079 haveAudioPreview = true;
00080 (void) m_stack->addWidget( audioPreview );
00081 QStringList mimeTypes = audioPreview->supportedMimeTypes();
00082 QStringList::ConstIterator it = mimeTypes.begin();
00083 for ( ; it != mimeTypes.end(); ++it )
00084 m_previewProviders.insert( *it, audioPreview );
00085 }
00086 }
00087 }
00088
00089
00090 provider = m_previewProviders.find( mimeType );
00091 if ( provider )
00092 return provider;
00093
00094
00095 int index = mimeType.find( '/' );
00096 if ( index > 0 )
00097 {
00098 provider = m_previewProviders.find( mimeType.left( index + 1 ) + "*" );
00099 if ( provider )
00100 return provider;
00101 }
00102
00103 return 0L;
00104 }
00105
00106 void KFileMetaPreview::showPreview(const KURL &url)
00107 {
00108 KMimeType::Ptr mt = KMimeType::findByURL( url );
00109 KPreviewWidgetBase *provider = previewProviderFor( mt->name() );
00110 if ( provider )
00111 {
00112 if ( provider != m_stack->visibleWidget() )
00113 clearPreview();
00114
00115 m_stack->setEnabled( true );
00116 m_stack->raiseWidget( provider );
00117 provider->showPreview( url );
00118 }
00119 else
00120 {
00121 clearPreview();
00122 m_stack->setEnabled( false );
00123 }
00124 }
00125
00126 void KFileMetaPreview::clearPreview()
00127 {
00128 if ( m_stack->visibleWidget() )
00129 static_cast<KPreviewWidgetBase*>( m_stack->visibleWidget() )->clearPreview();
00130 }
00131
00132 void KFileMetaPreview::addPreviewProvider( const QString& mimeType,
00133 KPreviewWidgetBase *provider )
00134 {
00135 m_previewProviders.insert( mimeType, provider );
00136 }
00137
00138 void KFileMetaPreview::clearPreviewProviders()
00139 {
00140 QDictIterator<KPreviewWidgetBase> it( m_previewProviders );
00141 for ( ; it.current(); ++it )
00142 m_stack->removeWidget( it.current() );
00143
00144 m_previewProviders.clear();
00145 }
00146
00147
00148 KPreviewWidgetBase * KFileMetaPreview::createAudioPreview( QWidget *parent )
00149 {
00150 KLibFactory *factory = KLibLoader::self()->factory( "kfileaudiopreview" );
00151 if ( !factory )
00152 {
00153 s_tryAudioPreview = false;
00154 return 0L;
00155 }
00156
00157 return dynamic_cast<KPreviewWidgetBase*>( factory->create( parent, "kfileaudiopreview" ));
00158 }
00159
00160 void KFileMetaPreview::virtual_hook( int, void* ) {}
00161
00162 #include "kfilemetapreview.moc"
This file is part of the documentation for kio Library Version 3.2.0.