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

tdeio/tdefile

  • tdeio
  • tdefile
tdefileview.cpp
1 /* This file is part of the KDE libraries
2  Copyright (C) 1998 Stephan Kulow <coolo@kde.org>
3  1998 Daniel Grana <grana@ie.iwi.unibe.ch>
4  2001 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 as published by the Free Software Foundation; either
9  version 2 of the License, or (at your option) any later version.
10 
11  This library is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  Library General Public License for more details.
15 
16  You should have received a copy of the GNU Library General Public License
17  along with this library; see the file COPYING.LIB. If not, write to
18  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
19  Boston, MA 02110-1301, USA.
20 */
21 
22 #include <assert.h>
23 #include <stdlib.h>
24 
25 #include <tdeaction.h>
26 #include <tdeapplication.h>
27 #include <kdebug.h>
28 #include <tdeglobal.h>
29 #include <tdelocale.h>
30 #include <kstandarddirs.h>
31 
32 #include "config-tdefile.h"
33 #include "tdefileview.h"
34 
35 #ifdef Unsorted // the "I hate X.h" modus
36 #undef Unsorted
37 #endif
38 
39 TQDir::SortSpec KFileView::defaultSortSpec = static_cast<TQDir::SortSpec>(TQDir::Name | TQDir::IgnoreCase | TQDir::DirsFirst);
40 
41 class KFileView::KFileViewPrivate
42 {
43 public:
44  KFileViewPrivate()
45  {
46  actions = 0;
47  dropOptions = 0;
48  }
49 
50  ~KFileViewPrivate()
51  {
52  if( actions ) {
53  actions->clear(); // so that the removed() signal is emitted!
54  delete actions;
55  }
56  }
57 
58  TQGuardedPtr<TDEActionCollection> actions;
59  int dropOptions;
60 };
61 
62 
63 KFileView::KFileView()
64 {
65  d = new KFileViewPrivate();
66  m_sorting = KFileView::defaultSortSpec;
67 
68  sig = new KFileViewSignaler();
69  sig->setName("view-signaller");
70 
71  m_selectedList = 0L;
72  filesNumber = 0;
73  dirsNumber = 0;
74 
75  view_mode = All;
76  selection_mode = KFile::Single;
77  m_viewName = i18n("Unknown View");
78 
79  myOnlyDoubleClickSelectsFiles = false;
80  m_itemList.setAutoDelete( false ); // just references
81 }
82 
83 KFileView::~KFileView()
84 {
85  delete d;
86  delete sig;
87  delete m_selectedList;
88 }
89 
90 void KFileView::setParentView(KFileView *parent)
91 {
92  if ( parent ) { // pass all signals right to our parent
93  TQObject::connect(sig, TQT_SIGNAL( activatedMenu(const KFileItem *,
94  const TQPoint& ) ),
95  parent->sig, TQT_SIGNAL( activatedMenu(const KFileItem *,
96  const TQPoint& )));
97  TQObject::connect(sig, TQT_SIGNAL( dirActivated(const KFileItem *)),
98  parent->sig, TQT_SIGNAL( dirActivated(const KFileItem*)));
99  TQObject::connect(sig, TQT_SIGNAL( fileSelected(const KFileItem *)),
100  parent->sig, TQT_SIGNAL( fileSelected(const KFileItem*)));
101  TQObject::connect(sig, TQT_SIGNAL( fileHighlighted(const KFileItem *) ),
102  parent->sig,TQT_SIGNAL(fileHighlighted(const KFileItem*)));
103  TQObject::connect(sig, TQT_SIGNAL( sortingChanged( TQDir::SortSpec ) ),
104  parent->sig, TQT_SIGNAL(sortingChanged( TQDir::SortSpec)));
105  TQObject::connect(sig, TQT_SIGNAL( dropped(const KFileItem *, TQDropEvent*, const KURL::List&) ),
106  parent->sig, TQT_SIGNAL(dropped(const KFileItem *, TQDropEvent*, const KURL::List&)));
107  }
108 }
109 
110 bool KFileView::updateNumbers(const KFileItem *i)
111 {
112  if (!( viewMode() & Files ) && i->isFile())
113  return false;
114 
115  if (!( viewMode() & Directories ) && i->isDir())
116  return false;
117 
118  if (i->isDir())
119  dirsNumber++;
120  else
121  filesNumber++;
122 
123  return true;
124 }
125 
126 void qt_qstring_stats();
127 
128 // filter out files if we're in directory mode and count files/directories
129 // and insert into the view
130 void KFileView::addItemList(const KFileItemList& list)
131 {
132  KFileItem *tmp;
133 
134  for (KFileItemListIterator it(list); (tmp = it.current()); ++it)
135  {
136  if (!updateNumbers(tmp))
137  continue;
138 
139  insertItem( tmp );
140  }
141 
142 #ifdef Q2HELPER
143  qt_qstring_stats();
144 #endif
145 }
146 
147 void KFileView::insertItem( KFileItem * )
148 {
149 }
150 
151 void KFileView::setSorting(TQDir::SortSpec new_sort)
152 {
153  m_sorting = new_sort;
154 }
155 
156 void KFileView::clear()
157 {
158  m_itemList.clear();
159  filesNumber = 0;
160  dirsNumber = 0;
161  clearView();
162 }
163 
164 void KFileView::sortReversed()
165 {
166  int spec = sorting();
167 
168  setSorting( static_cast<TQDir::SortSpec>( spec ^ TQDir::Reversed ) );
169 }
170 
171 #if 0
172 int KFileView::compareItems(const KFileItem *fi1, const KFileItem *fi2) const
173 {
174  static const TQString &dirup = TDEGlobal::staticQString("..");
175  bool bigger = true;
176  bool keepFirst = false;
177  bool dirsFirst = ((m_sorting & TQDir::DirsFirst) == TQDir::DirsFirst);
178 
179  if (fi1 == fi2)
180  return 0;
181 
182  // .. is always bigger, independent of the sort criteria
183  if ( fi1->name() == dirup ) {
184  bigger = false;
185  keepFirst = dirsFirst;
186  }
187  else if ( fi2->name() == dirup ) {
188  bigger = true;
189  keepFirst = dirsFirst;
190  }
191 
192  else {
193  if ( fi1->isDir() != fi2->isDir() && dirsFirst ) {
194  bigger = fi2->isDir();
195  keepFirst = true;
196  }
197  else {
198 
199  TQDir::SortSpec sort = static_cast<TQDir::SortSpec>(m_sorting & TQDir::SortByMask);
200 
201  //if (fi1->isDir() || fi2->isDir())
202  // sort = static_cast<TQDir::SortSpec>(KFileView::defaultSortSpec & TQDir::SortByMask);
203 
204  switch (sort) {
205  case TQDir::Name:
206  default:
207 sort_by_name:
208  if ( (m_sorting & TQDir::IgnoreCase) == TQDir::IgnoreCase )
209  bigger = (fi1->name( true ) > fi2->name( true ));
210  else
211  bigger = (fi1->name() > fi2->name());
212  break;
213  case TQDir::Time:
214  {
215  time_t t1 = fi1->time( TDEIO::UDS_MODIFICATION_TIME );
216  time_t t2 = fi2->time( TDEIO::UDS_MODIFICATION_TIME );
217  if ( t1 != t2 ) {
218  bigger = (t1 > t2);
219  break;
220  }
221 
222  // Sort by name if both items have the same timestamp.
223  // Don't honor the reverse flag tho.
224  else {
225  keepFirst = true;
226  goto sort_by_name;
227  }
228  }
229  case TQDir::Size:
230  {
231  TDEIO::filesize_t s1 = fi1->size();
232  TDEIO::filesize_t s2 = fi2->size();
233  if ( s1 != s2 ) {
234  bigger = (s1 > s2);
235  break;
236  }
237 
238  // Sort by name if both items have the same size.
239  // Don't honor the reverse flag tho.
240  else {
241  keepFirst = true;
242  goto sort_by_name;
243  }
244  }
245  case TQDir::Unsorted:
246  bigger = true; // nothing
247  break;
248  }
249  }
250  }
251 
252  if (reversed && !keepFirst ) // don't reverse dirs to the end!
253  bigger = !bigger;
254 
255  return (bigger ? 1 : -1);
256 }
257 #endif
258 
259 void KFileView::updateView(bool f)
260 {
261  widget()->repaint(f);
262 }
263 
264 void KFileView::updateView(const KFileItem *)
265 {
266 }
267 
268 void KFileView::setCurrentItem(const TQString &filename )
269 {
270  if (!filename.isNull()) {
271  KFileItem *item;
272  for ( (item = firstFileItem()); item; item = nextItem( item ) ) {
273  if (item->name() == filename) {
274  setCurrentItem( item );
275  return;
276  }
277  }
278  }
279 
280  kdDebug(tdefile_area) << "setCurrentItem: no match found: " << filename << endl;
281 }
282 
283 const KFileItemList * KFileView::items() const
284 {
285  KFileItem *item = 0L;
286 
287  // only ever use m_itemList in this method!
288  m_itemList.clear();
289  for ( (item = firstFileItem()); item; item = nextItem( item ) )
290  m_itemList.append( item );
291 
292  return &m_itemList;
293 }
294 
295 
296 const KFileItemList * KFileView::selectedItems() const
297 {
298  if ( !m_selectedList )
299  m_selectedList = new KFileItemList;
300 
301  m_selectedList->clear();
302 
303  KFileItem *item;
304  for ( (item = firstFileItem()); item; item = nextItem( item ) ) {
305  if ( isSelected( item ) )
306  m_selectedList->append( item );
307  }
308 
309  return m_selectedList;
310 }
311 
312 void KFileView::selectAll()
313 {
314  if (selection_mode == KFile::NoSelection || selection_mode== KFile::Single)
315  return;
316 
317  KFileItem *item = 0L;
318  for ( (item = firstFileItem()); item; item = nextItem( item ) )
319  setSelected( item, true );
320 }
321 
322 
323 void KFileView::invertSelection()
324 {
325  KFileItem *item = 0L;
326  for ( (item = firstFileItem()); item; item = nextItem( item ) )
327  setSelected( item, !isSelected( item ) );
328 }
329 
330 
331 void KFileView::setSelectionMode( KFile::SelectionMode sm )
332 {
333  selection_mode = sm;
334 }
335 
336 KFile::SelectionMode KFileView::selectionMode() const
337 {
338  return selection_mode;
339 }
340 
341 void KFileView::setViewMode( ViewMode vm )
342 {
343  view_mode = vm;
344 }
345 
346 void KFileView::removeItem( const KFileItem *item )
347 {
348  if ( !item )
349  return;
350 
351  if ( item->isDir() )
352  dirsNumber--;
353  else
354  filesNumber--;
355 
356  if ( m_selectedList )
357  m_selectedList->removeRef( item );
358 }
359 
360 void KFileView::listingCompleted()
361 {
362  // empty default impl.
363 }
364 
365 TDEActionCollection * KFileView::actionCollection() const
366 {
367  if ( !d->actions )
368  d->actions = new TDEActionCollection( widget(), "KFileView::d->actions" );
369  return d->actions;
370 }
371 
372 void KFileView::readConfig( TDEConfig *, const TQString& )
373 {
374 }
375 
376 void KFileView::writeConfig( TDEConfig *, const TQString& )
377 {
378 }
379 
380 TQString KFileView::sortingKey( const TQString& value, bool isDir, int sortSpec )
381 {
382  bool reverse = sortSpec & TQDir::Reversed;
383  bool dirsFirst = sortSpec & TQDir::DirsFirst;
384  char start = (isDir && dirsFirst) ? (reverse ? '2' : '0') : '1';
385  TQString result = (sortSpec & TQDir::IgnoreCase) ? value.lower() : value;
386  return result.prepend( start );
387 }
388 
389 TQString KFileView::sortingKey( TDEIO::filesize_t value, bool isDir, int sortSpec)
390 {
391  bool reverse = sortSpec & TQDir::Reversed;
392  bool dirsFirst = sortSpec & TQDir::DirsFirst;
393  char start = (isDir && dirsFirst) ? (reverse ? '2' : '0') : '1';
394  return TDEIO::number( value ).rightJustify( 24, '0' ).prepend( start );
395 }
396 
397 void KFileView::setDropOptions(int options)
398 {
399  virtual_hook(VIRTUAL_SET_DROP_OPTIONS, &options); // Virtual call
400 }
401 
402 void KFileView::setDropOptions_impl(int options)
403 {
404  d->dropOptions = options;
405 }
406 
407 int KFileView::dropOptions()
408 {
409  return d->dropOptions;
410 }
411 
412 int KFileView::autoOpenDelay()
413 {
414  return (TQApplication::startDragTime() * 3) / 2;
415 }
416 
417 void KFileView::virtual_hook( int id, void* data)
418 {
419  switch(id) {
420  case VIRTUAL_SET_DROP_OPTIONS:
421  setDropOptions_impl(*(int *)data);
422  break;
423  default:
424  /*BASE::virtual_hook( id, data );*/
425  break;
426  }
427 }
428 
429 #include "tdefileview.moc"
KFileView::setCurrentItem
void setCurrentItem(const TQString &filename)
Sets filename the current item in the view, if available.
Definition: tdefileview.cpp:268
KFileView::setDropOptions
void setDropOptions(int options)
Specify DND options.
Definition: tdefileview.cpp:397
KFileView::items
const KFileItemList * items() const
Definition: tdefileview.cpp:283
KFileView::actionCollection
virtual TDEActionCollection * actionCollection() const
Definition: tdefileview.cpp:365
KFileView::insertItem
virtual void insertItem(KFileItem *i)
The derived view must implement this function to add the file in the widget.
Definition: tdefileview.cpp:147
KFileView
This class defines an interface to all file views.
Definition: tdefileview.h:97
KFileView::clear
virtual void clear()
Clears the view and all item lists.
Definition: tdefileview.cpp:156
KFileView::sorting
TQDir::SortSpec sorting() const
Returns the sorting order of the internal list.
Definition: tdefileview.h:176
KFileView::selectedItems
const KFileItemList * selectedItems() const
Definition: tdefileview.cpp:296
KFileView::selectAll
virtual void selectAll()
Selects all items.
Definition: tdefileview.cpp:312
KFileView::setSelected
virtual void setSelected(const KFileItem *, bool enable)=0
Tells the view that it should highlight the item.
KFileView::dropOptions
int dropOptions()
Returns the DND options in effect.
Definition: tdefileview.cpp:407
KFileView::widget
virtual TQWidget * widget()=0
a pure virtual function to get a TQWidget, that can be added to other widgets.
KFileView::addItemList
void addItemList(const KFileItemList &list)
inserts a list of items.
Definition: tdefileview.cpp:130
KFileView::~KFileView
virtual ~KFileView()
Destructor.
Definition: tdefileview.cpp:83
KFileView::isSelected
virtual bool isSelected(const KFileItem *) const =0
KFileView::removeItem
virtual void removeItem(const KFileItem *item)
Removes an item from the list; has to be implemented by the view.
Definition: tdefileview.cpp:346
KFileView::invertSelection
virtual void invertSelection()
Inverts the current selection, i.e.
Definition: tdefileview.cpp:323
KFileView::setSorting
virtual void setSorting(TQDir::SortSpec sort)
Sets the sorting order of the view.
Definition: tdefileview.cpp:151
KFileView::updateView
virtual void updateView(bool f=true)
does a repaint of the view.
Definition: tdefileview.cpp:259
KFileViewSignaler
internal class to make easier to use signals possible
Definition: tdefileview.h:36
KFileView::clearView
virtual void clearView()=0
pure virtual function, that should be implemented to clear the view.
KFileView::sortingKey
static TQString sortingKey(const TQString &value, bool isDir, int sortSpec)
This method calculates a TQString from the given parameters, that is suitable for sorting with e...
Definition: tdefileview.cpp:380
KFileView::updateNumbers
bool updateNumbers(const KFileItem *i)
increases the number of dirs and files.
Definition: tdefileview.cpp:110
KFileView::listingCompleted
virtual void listingCompleted()
This hook is called when all items of the currently listed directory are listed and inserted into the...
Definition: tdefileview.cpp:360

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
  •     tdecore
  • tdeabc
  • tdecmshell
  • tdecore
  • tdefx
  • tdehtml
  • tdeinit
  • tdeio
  •   bookmarks
  •   httpfilter
  •   kpasswdserver
  •   kssl
  • tdeioslave
  •   http
  •   tdefile
  •   tdeio
  •   tdeioexec
  • tdemdi
  •   tdemdi
  • tdenewstuff
  • tdeparts
  • tdeprint
  • tderandr
  • tderesources
  • tdespell2
  • tdesu
  • tdeui
  • tdeunittest
  • tdeutils
  • tdewallet
Generated for tdeio/tdefile by doxygen 1.8.8
This website is maintained by Timothy Pearson.