• 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 <tdestandarddirs.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
39TQDir::SortSpec KFileView::defaultSortSpec = static_cast<TQDir::SortSpec>(TQDir::Name | TQDir::IgnoreCase | TQDir::DirsFirst);
40
41class KFileView::KFileViewPrivate
42{
43public:
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
63KFileView::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
83KFileView::~KFileView()
84{
85 delete d;
86 delete sig;
87 delete m_selectedList;
88}
89
90void KFileView::setParentView(KFileView *parent)
91{
92 if ( parent ) { // pass all signals right to our parent
93 TQObject::connect(sig, TQ_SIGNAL( activatedMenu(const KFileItem *,
94 const TQPoint& ) ),
95 parent->sig, TQ_SIGNAL( activatedMenu(const KFileItem *,
96 const TQPoint& )));
97 TQObject::connect(sig, TQ_SIGNAL( dirActivated(const KFileItem *)),
98 parent->sig, TQ_SIGNAL( dirActivated(const KFileItem*)));
99 TQObject::connect(sig, TQ_SIGNAL( fileSelected(const KFileItem *)),
100 parent->sig, TQ_SIGNAL( fileSelected(const KFileItem*)));
101 TQObject::connect(sig, TQ_SIGNAL( fileHighlighted(const KFileItem *) ),
102 parent->sig,TQ_SIGNAL(fileHighlighted(const KFileItem*)));
103 TQObject::connect(sig, TQ_SIGNAL( sortingChanged( TQDir::SortSpec ) ),
104 parent->sig, TQ_SIGNAL(sortingChanged( TQDir::SortSpec)));
105 TQObject::connect(sig, TQ_SIGNAL( dropped(const KFileItem *, TQDropEvent*, const KURL::List&) ),
106 parent->sig, TQ_SIGNAL(dropped(const KFileItem *, TQDropEvent*, const KURL::List&)));
107 }
108}
109
110bool 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
126void qt_qstring_stats();
127
128// filter out files if we're in directory mode and count files/directories
129// and insert into the view
130void 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
147void KFileView::insertItem( KFileItem * )
148{
149}
150
151void KFileView::setSorting(TQDir::SortSpec new_sort)
152{
153 m_sorting = new_sort;
154}
155
156void KFileView::clear()
157{
158 m_itemList.clear();
159 filesNumber = 0;
160 dirsNumber = 0;
161 clearView();
162}
163
164void KFileView::sortReversed()
165{
166 int spec = sorting();
167
168 setSorting( static_cast<TQDir::SortSpec>( spec ^ TQDir::Reversed ) );
169}
170
171#if 0
172int 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:
207sort_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
259void KFileView::updateView(bool f)
260{
261 widget()->repaint(f);
262}
263
264void KFileView::updateView(const KFileItem *)
265{
266}
267
268void 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
283const 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
296const 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
312void 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
323void KFileView::invertSelection()
324{
325 KFileItem *item = 0L;
326 for ( (item = firstFileItem()); item; item = nextItem( item ) )
327 setSelected( item, !isSelected( item ) );
328}
329
330
331void KFileView::setSelectionMode( KFile::SelectionMode sm )
332{
333 selection_mode = sm;
334}
335
336KFile::SelectionMode KFileView::selectionMode() const
337{
338 return selection_mode;
339}
340
341void KFileView::setViewMode( ViewMode vm )
342{
343 view_mode = vm;
344}
345
346void 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
360void KFileView::listingCompleted()
361{
362 // empty default impl.
363}
364
365TDEActionCollection * KFileView::actionCollection() const
366{
367 if ( !d->actions )
368 d->actions = new TDEActionCollection( widget(), "KFileView::d->actions" );
369 return d->actions;
370}
371
372void KFileView::readConfig( TDEConfig *, const TQString& )
373{
374}
375
376void KFileView::writeConfig( TDEConfig *, const TQString& )
377{
378}
379
380TQString 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
389TQString 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
397void KFileView::setDropOptions(int options)
398{
399 virtual_hook(VIRTUAL_SET_DROP_OPTIONS, &options); // Virtual call
400}
401
402void KFileView::setDropOptions_impl(int options)
403{
404 d->dropOptions = options;
405}
406
407int KFileView::dropOptions()
408{
409 return d->dropOptions;
410}
411
412int KFileView::autoOpenDelay()
413{
414 return (TQApplication::startDragTime() * 3) / 2;
415}
416
417void 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"
KFileViewSignaler
internal class to make easier to use signals possible
Definition: tdefileview.h:37
KFileView
This class defines an interface to all file views.
Definition: tdefileview.h:97
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::~KFileView
virtual ~KFileView()
Destructor.
Definition: tdefileview.cpp:83
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
KFileView::items
const KFileItemList * items() const
Definition: tdefileview.cpp:283
KFileView::setCurrentItem
void setCurrentItem(const TQString &filename)
Sets filename the current item in the view, if available.
Definition: tdefileview.cpp:268
KFileView::selectedItems
const KFileItemList * selectedItems() const
Definition: tdefileview.cpp:296
KFileView::sorting
TQDir::SortSpec sorting() const
Returns the sorting order of the internal list.
Definition: tdefileview.h:176
KFileView::updateView
virtual void updateView(bool f=true)
does a repaint of the view.
Definition: tdefileview.cpp:259
KFileView::setDropOptions
void setDropOptions(int options)
Specify DND options.
Definition: tdefileview.cpp:397
KFileView::widget
virtual TQWidget * widget()=0
a pure virtual function to get a TQWidget, that can be added to other widgets.
KFileView::updateNumbers
bool updateNumbers(const KFileItem *i)
increases the number of dirs and files.
Definition: tdefileview.cpp:110
KFileView::dropOptions
int dropOptions()
Returns the DND options in effect.
Definition: tdefileview.cpp:407
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::setSorting
virtual void setSorting(TQDir::SortSpec sort)
Sets the sorting order of the view.
Definition: tdefileview.cpp:151
KFileView::actionCollection
virtual TDEActionCollection * actionCollection() const
Definition: tdefileview.cpp:365
KFileView::clear
virtual void clear()
Clears the view and all item lists.
Definition: tdefileview.cpp:156
KFileView::selectAll
virtual void selectAll()
Selects all items.
Definition: tdefileview.cpp:312
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::addItemList
void addItemList(const KFileItemList &list)
inserts a list of items.
Definition: tdefileview.cpp:130
KFileView::setSelected
virtual void setSelected(const KFileItem *, bool enable)=0
Tells the view that it should highlight the item.
KFileView::isSelected
virtual bool isSelected(const KFileItem *) const =0
KFileView::clearView
virtual void clearView()=0
pure virtual function, that should be implemented to clear the view.
KFileView::invertSelection
virtual void invertSelection()
Inverts the current selection, i.e.
Definition: tdefileview.cpp:323

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.