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

tdeio/tdeio

  • tdeio
  • tdeio
kmimetyperesolver.h
1/* This file is part of the KDE libraries
2 Copyright (C) 2000 David Faure <faure@kde.org>
3 Copyright (C) 2000 Rik Hemsley <rik@kde.org>
4 Copyright (C) 2002 Carsten Pfeiffer <pfeiffer@kde.org>
5
6 This library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Library General Public
8 License version 2 as published by the Free Software Foundation.
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
21#ifndef __kmimetyperesolver_h
22#define __kmimetyperesolver_h
23
24#include <tqscrollview.h>
25#include <tqptrlist.h>
26#include <tqtimer.h>
27#include <kdebug.h>
28
34class TDEIO_EXPORT KMimeTypeResolverBase
35{
36public:
37 virtual void slotViewportAdjusted() = 0;
38 virtual void slotProcessMimeIcons() = 0;
39protected:
40 virtual void virtual_hook( int, void* ) {}
41};
42
49class TDEIO_EXPORT KMimeTypeResolverHelper : public TQObject
50{
51 TQ_OBJECT
52
53public:
54 KMimeTypeResolverHelper( KMimeTypeResolverBase *resolver,
55 TQScrollView *view )
56 : m_resolver( resolver ),
57 m_timer( new TQTimer( this ) )
58 {
59 connect( m_timer, TQ_SIGNAL( timeout() ), TQ_SLOT( slotProcessMimeIcons() ));
60
61 connect( view->horizontalScrollBar(), TQ_SIGNAL( sliderMoved(int) ),
62 TQ_SLOT( slotAdjust() ) );
63 connect( view->verticalScrollBar(), TQ_SIGNAL( sliderMoved(int) ),
64 TQ_SLOT( slotAdjust() ) );
65
66 view->viewport()->installEventFilter( this );
67 }
68
69 void start( int delay, bool singleShot )
70 {
71 m_timer->start( delay, singleShot );
72 }
73
74protected:
75 virtual bool eventFilter( TQObject *o, TQEvent *e )
76 {
77 bool ret = TQObject::eventFilter( o, e );
78
79 if ( e->type() == TQEvent::Resize )
80 m_resolver->slotViewportAdjusted();
81
82 return ret;
83 }
84
85private slots:
86 void slotProcessMimeIcons()
87 {
88 m_resolver->slotProcessMimeIcons();
89 }
90
91 void slotAdjust()
92 {
93 m_resolver->slotViewportAdjusted();
94 }
95
96private:
97 KMimeTypeResolverBase *m_resolver;
98 TQTimer *m_timer;
99};
100
117template<class IconItem, class Parent>
118class KMimeTypeResolver : public KMimeTypeResolverBase // if only this could be a TQObject....
119{
120public:
125 KMimeTypeResolver( Parent * parent )
126 : m_parent(parent),
127 m_helper( new KMimeTypeResolverHelper(this, parent->scrollWidget())),
128 m_delayNonVisibleIcons(10)
129 {}
130
131 virtual ~KMimeTypeResolver() {
132 delete m_helper;
133 }
134
141 void start( uint delayNonVisibleIcons = 10 )
142 {
143 m_helper->start( 0, true /* single shot */ );
144 m_delayNonVisibleIcons = delayNonVisibleIcons;
145 }
146
152 TQPtrList<IconItem> m_lstPendingMimeIconItems;
153
157 virtual void slotViewportAdjusted();
158
162 virtual void slotProcessMimeIcons();
163
164private:
171 IconItem * findVisibleIcon();
172
173 Parent * m_parent;
174 KMimeTypeResolverHelper *m_helper;
175 uint m_delayNonVisibleIcons;
176};
177
178// The main slot
179template<class IconItem, class Parent>
180inline void KMimeTypeResolver<IconItem, Parent>::slotProcessMimeIcons()
181{
182 //kdDebug(1203) << "KMimeTypeResolver::slotProcessMimeIcons() "
183 // << m_lstPendingMimeIconItems.count() << endl;
184 IconItem * item = 0L;
185 int nextDelay = 0;
186
187 if ( m_lstPendingMimeIconItems.count() > 0 )
188 {
189 // We only find mimetypes for icons that are visible. When more
190 // of our viewport is exposed, we'll get a signal and then get
191 // the mimetypes for the newly visible icons. (Rikkus)
192 item = findVisibleIcon();
193 }
194
195 // No more visible items.
196 if (0 == item)
197 {
198 // Do the unvisible ones, then, but with a bigger delay, if so configured
199 if ( m_lstPendingMimeIconItems.count() > 0 )
200 {
201 item = m_lstPendingMimeIconItems.first();
202 nextDelay = m_delayNonVisibleIcons;
203 }
204 else
205 {
206 m_parent->mimeTypeDeterminationFinished();
207 return;
208 }
209 }
210
211 m_parent->determineIcon(item);
212 m_lstPendingMimeIconItems.remove(item);
213 m_helper->start( nextDelay, true /* single shot */ );
214}
215
216template<class IconItem, class Parent>
217inline void KMimeTypeResolver<IconItem, Parent>::slotViewportAdjusted()
218{
219 if (m_lstPendingMimeIconItems.isEmpty()) return;
220 IconItem * item = findVisibleIcon();
221 if (item)
222 {
223 m_parent->determineIcon( item );
224 m_lstPendingMimeIconItems.remove(item);
225 m_helper->start( 0, true /* single shot */ );
226 }
227}
228
229template<class IconItem, class Parent>
230inline IconItem * KMimeTypeResolver<IconItem, Parent>::findVisibleIcon()
231{
232 // Find an icon that's visible and whose mimetype we don't know.
233
234 TQPtrListIterator<IconItem> it(m_lstPendingMimeIconItems);
235 if ( m_lstPendingMimeIconItems.count()<20) // for few items, it's faster to not bother
236 return m_lstPendingMimeIconItems.first();
237
238 TQScrollView * view = m_parent->scrollWidget();
239 TQRect visibleContentsRect
240 (
241 view->viewportToContents(TQPoint(0, 0)),
242 view->viewportToContents
243 (
244 TQPoint(view->visibleWidth(), view->visibleHeight())
245 )
246 );
247
248 for (; it.current(); ++it)
249 if (visibleContentsRect.intersects(it.current()->rect()))
250 return it.current();
251
252 return 0L;
253}
254
255#endif
KMimeTypeResolver
This class implements the "delayed-mimetype-determination" feature, for konqueror's directory views (...
Definition: kmimetyperesolver.h:119
KMimeTypeResolver::slotViewportAdjusted
virtual void slotViewportAdjusted()
"Connected" to the viewportAdjusted signal of the scrollview
Definition: kmimetyperesolver.h:217
KMimeTypeResolver::KMimeTypeResolver
KMimeTypeResolver(Parent *parent)
Creates a new KMimeTypeResolver with the given parent.
Definition: kmimetyperesolver.h:125
KMimeTypeResolver::start
void start(uint delayNonVisibleIcons=10)
Start the mimetype-determination.
Definition: kmimetyperesolver.h:141
KMimeTypeResolver::m_lstPendingMimeIconItems
TQPtrList< IconItem > m_lstPendingMimeIconItems
The list of items to process.
Definition: kmimetyperesolver.h:152
KMimeTypeResolver::slotProcessMimeIcons
virtual void slotProcessMimeIcons()
"Connected" to the timer
Definition: kmimetyperesolver.h:180

tdeio/tdeio

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

tdeio/tdeio

Skip menu "tdeio/tdeio"
  • 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/tdeio by doxygen 1.9.4
This website is maintained by Timothy Pearson.