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

kio/kio

  • kio
  • kio
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 KIO_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 KIO_EXPORT KMimeTypeResolverHelper : public TQObject
50 {
51  Q_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, TQT_SIGNAL( timeout() ), TQT_SLOT( slotProcessMimeIcons() ));
60 
61  connect( view->horizontalScrollBar(), TQT_SIGNAL( sliderMoved(int) ),
62  TQT_SLOT( slotAdjust() ) );
63  connect( view->verticalScrollBar(), TQT_SIGNAL( sliderMoved(int) ),
64  TQT_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::slotProcessMimeIcons
virtual void slotProcessMimeIcons()
"Connected" to the timer
Definition: kmimetyperesolver.h:180
KMimeTypeResolver::m_lstPendingMimeIconItems
TQPtrList< IconItem > m_lstPendingMimeIconItems
The list of items to process.
Definition: kmimetyperesolver.h:152
KMimeTypeResolver
This class implements the "delayed-mimetype-determination" feature, for konqueror's directory views...
Definition: kmimetyperesolver.h:118
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

kio/kio

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

kio/kio

Skip menu "kio/kio"
  • arts
  • dcop
  • dnssd
  • interfaces
  •     interface
  •     library
  •   kspeech
  •   ktexteditor
  • kabc
  • kate
  • kcmshell
  • kdecore
  • kded
  • kdefx
  • kdeprint
  • kdesu
  • kdeui
  • kdoctools
  • khtml
  • kimgio
  • kinit
  • kio
  •   bookmarks
  •   httpfilter
  •   kfile
  •   kio
  •   kioexec
  •   kpasswdserver
  •   kssl
  • kioslave
  •   http
  • kjs
  • kmdi
  •   kmdi
  • knewstuff
  • kparts
  • krandr
  • kresources
  • kspell2
  • kunittest
  • kutils
  • kwallet
  • libkmid
  • libkscreensaver
Generated for kio/kio by doxygen 1.8.6
This website is maintained by Timothy Pearson.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. |