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

tdeio/tdefile

  • tdeio
  • tdefile
tdefilemetapreview.cpp
1/*
2 * This file is part of the KDE project.
3 * Copyright (C) 2003 Carsten Pfeiffer <pfeiffer@kde.org>
4 *
5 * You can Freely distribute this program under the GNU Library General Public
6 * License. See the file "COPYING" for the exact licensing terms.
7 */
8
9#include "tdefilemetapreview.h"
10
11#include <tqlayout.h>
12
13#include <tdeio/previewjob.h>
14#include <klibloader.h>
15#include <kimagefilepreview.h>
16#include <kmimetype.h>
17
18bool KFileMetaPreview::s_tryAudioPreview = true;
19
20KFileMetaPreview::KFileMetaPreview( TQWidget *parent, const char *name )
21 : KPreviewWidgetBase( parent, name ),
22 haveAudioPreview( false )
23{
24 TQHBoxLayout *layout = new TQHBoxLayout( this, 0, 0 );
25 m_stack = new TQWidgetStack( this );
26 layout->addWidget( m_stack );
27
28 // ###
29// m_previewProviders.setAutoDelete( true );
30 initPreviewProviders();
31}
32
33KFileMetaPreview::~KFileMetaPreview()
34{
35}
36
37void KFileMetaPreview::initPreviewProviders()
38{
39 m_previewProviders.clear();
40 // hardcoded so far
41
42 // image previews
43 KImageFilePreview *imagePreview = new KImageFilePreview( m_stack );
44 (void) m_stack->addWidget( imagePreview );
45 m_stack->raiseWidget( imagePreview );
46 resize( imagePreview->sizeHint() );
47
48 TQStringList mimeTypes = imagePreview->supportedMimeTypes();
49 TQStringList::ConstIterator it = mimeTypes.begin();
50 for ( ; it != mimeTypes.end(); ++it )
51 {
52// tqDebug(".... %s", (*it).latin1());
53 m_previewProviders.insert( *it, imagePreview );
54 }
55}
56
57KPreviewWidgetBase * KFileMetaPreview::previewProviderFor( const TQString& mimeType )
58{
59// tqDebug("### looking for: %s", mimeType.latin1());
60 // often the first highlighted item, where we can be sure, there is no plugin
61 // (this "folders reflect icons" is a konq-specific thing, right?)
62 if ( mimeType == "inode/directory" )
63 return 0L;
64
65 KPreviewWidgetBase *provider = m_previewProviders.find( mimeType );
66 if ( provider )
67 return provider;
68
69//tqDebug("#### didn't find anything for: %s", mimeType.latin1());
70
71 if ( s_tryAudioPreview &&
72 !mimeType.startsWith("text/") && !mimeType.startsWith("image/") )
73 {
74 if ( !haveAudioPreview )
75 {
76 KPreviewWidgetBase *audioPreview = createAudioPreview( m_stack );
77 if ( audioPreview )
78 {
79 haveAudioPreview = true;
80 (void) m_stack->addWidget( audioPreview );
81 TQStringList mimeTypes = audioPreview->supportedMimeTypes();
82 TQStringList::ConstIterator it = mimeTypes.begin();
83 for ( ; it != mimeTypes.end(); ++it )
84 m_previewProviders.insert( *it, audioPreview );
85 }
86 }
87 }
88
89 // with the new mimetypes from the audio-preview, try again
90 provider = m_previewProviders.find( mimeType );
91 if ( provider )
92 return provider;
93
94 // ### mimetype may be image/* for example, try that
95 int index = mimeType.find( '/' );
96 if ( index > 0 )
97 {
98 provider = m_previewProviders.find( mimeType.left( index + 1 ) + "*" );
99 if ( provider )
100 return provider;
101 }
102
103 KMimeType::Ptr mimeInfo = KMimeType::mimeType( mimeType );
104 if ( mimeInfo )
105 {
106 // check mime type inheritance
107 TQString parentMimeType = mimeInfo->parentMimeType();
108 while ( !parentMimeType.isEmpty() )
109 {
110 provider = m_previewProviders.find( parentMimeType );
111 if ( provider )
112 return provider;
113
114 KMimeType::Ptr parentMimeInfo = KMimeType::mimeType( parentMimeType );
115 if ( !parentMimeInfo ) break;
116
117 parentMimeType = parentMimeInfo->parentMimeType();
118 }
119
120 // check X-TDE-Text property
121 TQVariant textProperty = mimeInfo->property( "X-TDE-text" );
122 if ( textProperty.isValid() && textProperty.type() == TQVariant::Bool )
123 {
124 if ( textProperty.toBool() )
125 {
126 provider = m_previewProviders.find( "text/plain" );
127 if ( provider )
128 return provider;
129
130 provider = m_previewProviders.find( "text/*" );
131 if ( provider )
132 return provider;
133 }
134 }
135 }
136
137 return 0L;
138}
139
140void KFileMetaPreview::showPreview(const KURL &url)
141{
142 KMimeType::Ptr mt = KMimeType::findByURL( url );
143 KPreviewWidgetBase *provider = previewProviderFor( mt->name() );
144 if ( provider )
145 {
146 if ( provider != m_stack->visibleWidget() ) // stop the previous preview
147 clearPreview();
148
149 m_stack->setEnabled( true );
150 m_stack->raiseWidget( provider );
151 provider->showPreview( url );
152 }
153 else
154 {
155 clearPreview();
156 m_stack->setEnabled( false );
157 }
158}
159
160void KFileMetaPreview::clearPreview()
161{
162 if ( m_stack->visibleWidget() )
163 static_cast<KPreviewWidgetBase*>( m_stack->visibleWidget() )->clearPreview();
164}
165
166void KFileMetaPreview::addPreviewProvider( const TQString& mimeType,
167 KPreviewWidgetBase *provider )
168{
169 m_previewProviders.insert( mimeType, provider );
170}
171
172void KFileMetaPreview::clearPreviewProviders()
173{
174 TQDictIterator<KPreviewWidgetBase> it( m_previewProviders );
175 for ( ; it.current(); ++it )
176 m_stack->removeWidget( it.current() );
177
178 m_previewProviders.clear();
179}
180
181// static
182KPreviewWidgetBase * KFileMetaPreview::createAudioPreview( TQWidget *parent )
183{
184 KLibFactory *factory = KLibLoader::self()->factory( "tdefileaudiopreview" );
185 if ( !factory )
186 {
187 s_tryAudioPreview = false;
188 return 0L;
189 }
190
191 return dynamic_cast<KPreviewWidgetBase*>( factory->create( parent, "tdefileaudiopreview" ));
192}
193
194void KFileMetaPreview::virtual_hook( int, void* ) {}
195
196#include "tdefilemetapreview.moc"
KImageFilePreview
Image preview widget for the file dialog.
Definition: kimagefilepreview.h:32
KPreviewWidgetBase
Abstract baseclass for all preview widgets which shall be used via KFileDialog::setPreviewWidget(cons...
Definition: kpreviewwidgetbase.h:45
KPreviewWidgetBase::showPreview
virtual void showPreview(const KURL &url)=0
This slot is called every time the user selects another file in the file dialog.

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.