• 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 
34 class TDEIO_EXPORT KMimeTypeResolverBase
35 {
36 public:
37  virtual void slotViewportAdjusted() = 0;
38  virtual void slotProcessMimeIcons() = 0;
39 protected:
40  virtual void virtual_hook( int, void* ) {}
41 };
42 
49 class TDEIO_EXPORT KMimeTypeResolverHelper : public TQObject
50 {
51  TQ_OBJECT
52 
53 public:
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 
74 protected:
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 
85 private slots:
86  void slotProcessMimeIcons()
87  {
88  m_resolver->slotProcessMimeIcons();
89  }
90 
91  void slotAdjust()
92  {
93  m_resolver->slotViewportAdjusted();
94  }
95 
96 private:
97  KMimeTypeResolverBase *m_resolver;
98  TQTimer *m_timer;
99 };
100 
117 template<class IconItem, class Parent>
118 class KMimeTypeResolver : public KMimeTypeResolverBase // if only this could be a TQObject....
119 {
120 public:
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 
164 private:
171  IconItem * findVisibleIcon();
172 
173  Parent * m_parent;
174  KMimeTypeResolverHelper *m_helper;
175  uint m_delayNonVisibleIcons;
176 };
177 
178 // The main slot
179 template<class IconItem, class Parent>
180 inline 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 
216 template<class IconItem, class Parent>
217 inline 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 
229 template<class IconItem, class Parent>
230 inline 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.1
This website is maintained by Timothy Pearson.