• Skip to content
  • Skip to link menu
  • KDE API Reference
  • kdelibs-4.14.38 API Reference
  • KDE Home
  • Contact Us
 

KDE3Support

  • kde3support
  • kio
  • kfile
k3fileview.cpp
Go to the documentation of this file.
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 "k3fileview.h"
23#include <config-kfile.h>
24
25#include <kaction.h>
26#include <kactioncollection.h>
27#include <kapplication.h>
28#include <kdebug.h>
29#include <kglobal.h>
30#include <klocale.h>
31#include <kstandarddirs.h>
32
33#include <QtCore/QPointer>
34
35#include <assert.h>
36#include <stdlib.h>
37
38#ifdef Unsorted // the "I hate X.h" modus
39#undef Unsorted
40#endif
41
42void K3FileViewSignaler::activate( const KFileItem &item )
43{
44 if ( item.isDir() )
45 dirActivated( item );
46 else
47 fileSelected( item );
48}
49
50void K3FileViewSignaler::highlightFile( const KFileItem &item )
51{
52 fileHighlighted( item );
53}
54
55void K3FileViewSignaler::activateMenu( const KFileItem &item, const QPoint& pos )
56{
57 activatedMenu( item, pos );
58}
59
60void K3FileViewSignaler::changeSorting( QDir::SortFlags sorting )
61{
62 sortingChanged( sorting );
63}
64
65void K3FileViewSignaler::dropURLs( const KFileItem &item, QDropEvent *event, const KUrl::List &urls )
66{
67 dropped( item, event, urls );
68}
69
70class K3FileView::K3FileViewPrivate
71{
72public:
73 K3FileViewPrivate()
74 {
75 actions = 0;
76 dropOptions = 0;
77 }
78
79 ~K3FileViewPrivate()
80 {
81 if( actions ) {
82 actions->clear(); // so that the removed() signal is emitted!
83 delete actions;
84 }
85 }
86
87 QPointer<KActionCollection> actions;
88 int dropOptions;
89
90 const static QDir::SortFlags defaultSortFlags;
91 QDir::SortFlags m_sorting;
92 QString m_viewName;
93
97 uint filesNumber;
98 uint dirsNumber;
99
100 ViewMode view_mode;
101 KFile::SelectionMode selection_mode;
102
103 bool myOnlyDoubleClickSelectsFiles;
104
105};
106
107const QDir::SortFlags K3FileView::K3FileViewPrivate::defaultSortFlags = (QDir::Name | QDir::IgnoreCase | QDir::DirsFirst);
108
109
110K3FileView::K3FileView()
111 :d(new K3FileViewPrivate())
112{
113 d->m_sorting = K3FileView::K3FileViewPrivate::defaultSortFlags;
114
115 sig = new K3FileViewSignaler();
116 sig->setObjectName("view-signaller");
117
118 d->filesNumber = 0;
119 d->dirsNumber = 0;
120
121 d->view_mode = All;
122 d->selection_mode = KFile::Single;
123 d->m_viewName = i18n("Unknown View");
124
125 d->myOnlyDoubleClickSelectsFiles = false;
126}
127
128K3FileView::~K3FileView()
129{
130 delete d;
131 delete sig;
132}
133
134void K3FileView::setParentView(K3FileView *parent)
135{
136 if ( parent ) { // pass all signals right to our parent
137 QObject::connect(sig, SIGNAL( activatedMenu(const KFileItem &,
138 const QPoint& ) ),
139 parent->sig, SIGNAL( activatedMenu(const KFileItem &,
140 const QPoint& )));
141 QObject::connect(sig, SIGNAL(dirActivated(KFileItem)),
142 parent->sig, SIGNAL(dirActivated(KFileItem)));
143 QObject::connect(sig, SIGNAL(fileSelected(KFileItem)),
144 parent->sig, SIGNAL(fileSelected(KFileItem)));
145 QObject::connect(sig, SIGNAL(fileHighlighted(KFileItem)),
146 parent->sig,SIGNAL(fileHighlighted(KFileItem)));
147 QObject::connect(sig, SIGNAL(sortingChanged(QDir::SortFlags)),
148 parent->sig, SIGNAL(sortingChanged(QDir::SortFlags)));
149 QObject::connect(sig, SIGNAL(dropped(KFileItem,QDropEvent*,KUrl::List)),
150 parent->sig, SIGNAL(dropped(KFileItem,QDropEvent*,KUrl::List)));
151 }
152}
153
154bool K3FileView::updateNumbers(const KFileItem &i)
155{
156 if (!( viewMode() & Files ) && i.isFile())
157 return false;
158
159 if (!( viewMode() & Directories ) && i.isDir())
160 return false;
161
162 if (i.isDir())
163 d->dirsNumber++;
164 else
165 d->filesNumber++;
166
167 return true;
168}
169
170// filter out files if we're in directory mode and count files/directories
171// and insert into the view
172void K3FileView::addItemList(const KFileItemList& list)
173{
174 KFileItemList::const_iterator kit = list.begin();
175 const KFileItemList::const_iterator kend = list.end();
176 for ( ; kit != kend; ++kit ) {
177 const KFileItem item = *kit;
178 if (!updateNumbers(item))
179 continue;
180 insertItem(item);
181 }
182}
183
184void K3FileView::insertItem( const KFileItem& )
185{
186}
187
188QWidget* K3FileView::widget() const
189{
190 return const_cast<K3FileView*>(this)->widget();
191}
192
193QDir::SortFlags K3FileView::sorting() const
194{
195 return d->m_sorting;
196}
197
198void K3FileView::setSorting(QDir::SortFlags new_sort)
199{
200 d->m_sorting = new_sort;
201}
202
203void K3FileView::clear()
204{
205 d->filesNumber = 0;
206 d->dirsNumber = 0;
207 clearView();
208}
209
210bool K3FileView::isReversed() const
211{
212 return (d->m_sorting & QDir::Reversed);
213}
214
215void K3FileView::sortReversed()
216{
217 int spec = sorting();
218
219 setSorting( QDir::SortFlags( spec ^ QDir::Reversed ) );
220}
221
222uint K3FileView::count() const
223{
224 return d->filesNumber + d->dirsNumber;
225}
226
227uint K3FileView::numFiles() const
228{
229 return d->filesNumber;
230}
231
232uint K3FileView::numDirs() const
233{
234 return d->dirsNumber;
235}
236
237#if 0
238int K3FileView::compareItems(const KFileItem *fi1, const KFileItem *fi2) const
239{
240 static const QString &dirup = KGlobal::staticQString("..");
241 bool bigger = true;
242 bool keepFirst = false;
243 bool dirsFirst = ((m_sorting & QDir::DirsFirst) == QDir::DirsFirst);
244
245 if (fi1 == fi2)
246 return 0;
247
248 // .. is always bigger, independent of the sort criteria
249 if ( fi1->name() == dirup ) {
250 bigger = false;
251 keepFirst = dirsFirst;
252 }
253 else if ( fi2->name() == dirup ) {
254 bigger = true;
255 keepFirst = dirsFirst;
256 }
257
258 else {
259 if ( fi1->isDir() != fi2->isDir() && dirsFirst ) {
260 bigger = fi2->isDir();
261 keepFirst = true;
262 }
263 else {
264
265 QDir::SortFlags sort = static_cast<QDir::SortFlags>(m_sorting & QDir::SortByMask);
266
267 //if (fi1->isDir() || fi2->isDir())
268 // sort = static_cast<QDir::SortFlags>(K3FileView::defaultSortSpec & QDir::SortByMask);
269
270 switch (sort) {
271 case QDir::Name:
272 default:
273sort_by_name:
274 if ( (m_sorting & QDir::IgnoreCase) == QDir::IgnoreCase )
275 bigger = (fi1->name( true ) > fi2->name( true ));
276 else
277 bigger = (fi1->name() > fi2->name());
278 break;
279 case QDir::Time:
280 {
281 time_t t1 = fi1->time( KIO::UDSEntry::UDS_MODIFICATION_TIME );
282 time_t t2 = fi2->time( KIO::UDSEntry::UDS_MODIFICATION_TIME );
283 if ( t1 != t2 ) {
284 bigger = (t1 > t2);
285 break;
286 }
287
288 // Sort by name if both items have the same timestamp.
289 // Don't honor the reverse flag tho.
290 else {
291 keepFirst = true;
292 goto sort_by_name;
293 }
294 }
295 case QDir::Size:
296 {
297 KIO::filesize_t s1 = fi1->size();
298 KIO::filesize_t s2 = fi2->size();
299 if ( s1 != s2 ) {
300 bigger = (s1 > s2);
301 break;
302 }
303
304 // Sort by name if both items have the same size.
305 // Don't honor the reverse flag tho.
306 else {
307 keepFirst = true;
308 goto sort_by_name;
309 }
310 }
311 case QDir::Unsorted:
312 bigger = true; // nothing
313 break;
314 }
315 }
316 }
317
318 if (reversed && !keepFirst ) // don't reverse dirs to the end!
319 bigger = !bigger;
320
321 return (bigger ? 1 : -1);
322}
323#endif
324
325void K3FileView::updateView(bool)
326{
327 widget()->repaint();
328}
329
330void K3FileView::updateView(const KFileItem &)
331{
332}
333
334void K3FileView::setCurrentItem(const QString &filename )
335{
336 if (!filename.isNull()) {
337 KFileItem item;
338 for ( (item = firstFileItem()); !item.isNull(); item = nextItem( item ) ) {
339 if (item.name() == filename) {
340 setCurrentItem( item );
341 return;
342 }
343 }
344 }
345
346 kDebug(kfile_area) << "setCurrentItem: no match found: " << filename;
347}
348
349KFileItemList K3FileView::items() const
350{
351 KFileItemList list;
352
353 for ( KFileItem item = firstFileItem(); !item.isNull(); item = nextItem( item ) )
354 list.append( item );
355
356 return list;
357}
358
359void K3FileView::setOnlyDoubleClickSelectsFiles( bool enable ) {
360 d->myOnlyDoubleClickSelectsFiles = enable;
361}
362
363bool K3FileView::onlyDoubleClickSelectsFiles() const {
364 return d->myOnlyDoubleClickSelectsFiles;
365}
366
367
368KFileItemList K3FileView::selectedItems() const
369{
370 KFileItemList list;
371
372 for ( KFileItem item = firstFileItem(); !item.isNull(); item = nextItem( item ) ) {
373 if ( isSelected( item ) )
374 list.append( item );
375 }
376
377 return list;
378}
379
380void K3FileView::selectAll()
381{
382 if (d->selection_mode == KFile::NoSelection || d->selection_mode== KFile::Single)
383 return;
384
385 for ( KFileItem item = firstFileItem(); !item.isNull(); item = nextItem( item ) )
386 setSelected( item, true );
387}
388
389
390void K3FileView::invertSelection()
391{
392 for ( KFileItem item = firstFileItem(); !item.isNull(); item = nextItem( item ) )
393 setSelected( item, !isSelected( item ) );
394}
395
396
397void K3FileView::setSelectionMode( KFile::SelectionMode sm )
398{
399 d->selection_mode = sm;
400}
401
402KFile::SelectionMode K3FileView::selectionMode() const
403{
404 return d->selection_mode;
405}
406
407void K3FileView::setViewMode( K3FileView::ViewMode vm )
408{
409 d->view_mode = vm;
410}
411
412K3FileView::ViewMode K3FileView::viewMode() const
413{
414 return d->view_mode;
415}
416
417QString K3FileView::viewName() const
418{
419 return d->m_viewName;
420}
421
422void K3FileView::setViewName( const QString& name )
423{
424 d->m_viewName = name;
425}
426
427void K3FileView::removeItem( const KFileItem &item )
428{
429 if ( item.isNull() )
430 return;
431
432 if ( item.isDir() )
433 d->dirsNumber--;
434 else
435 d->filesNumber--;
436}
437
438void K3FileView::listingCompleted()
439{
440 // empty default impl.
441}
442
443KActionCollection * K3FileView::actionCollection() const
444{
445 if ( !d->actions ) {
446 d->actions = new KActionCollection( widget() );
447 d->actions->setObjectName( "K3FileView::d->actions" );
448 }
449 return d->actions;
450}
451
452K3FileViewSignaler * K3FileView::signaler() const
453{
454 return sig;
455}
456
457void K3FileView::readConfig( KConfigGroup *)
458{
459}
460
461void K3FileView::writeConfig( KConfigGroup *)
462{
463}
464
465QString K3FileView::sortingKey( const QString& value, bool isDir, QDir::SortFlags SortFlags )
466{
467 bool reverse = SortFlags & QDir::Reversed;
468 bool dirsFirst = SortFlags & QDir::DirsFirst;
469 char start = (isDir && dirsFirst) ? (reverse ? '2' : '0') : '1';
470 QString result = (SortFlags & QDir::IgnoreCase) ? value.toLower() : value;
471 return result.prepend( QLatin1Char(start) );
472}
473
474QString K3FileView::sortingKey( KIO::filesize_t value, bool isDir, QDir::SortFlags SortFlags)
475{
476 bool reverse = SortFlags & QDir::Reversed;
477 bool dirsFirst = SortFlags & QDir::DirsFirst;
478 char start = (isDir && dirsFirst) ? (reverse ? '2' : '0') : '1';
479 return KIO::number( value ).rightJustified( 24, '0' ).prepend( QLatin1Char(start) );
480}
481
482void K3FileView::setDropOptions(int options)
483{
484 d->dropOptions = options;
485}
486
487int K3FileView::dropOptions()
488{
489 return d->dropOptions;
490}
491
492int K3FileView::autoOpenDelay()
493{
494 return (QApplication::startDragTime() * 3) / 2;
495}
496
497#include "k3fileview.moc"
K3FileViewSignaler
internal class to make easier to use signals possible
Definition: k3fileview.h:39
K3FileViewSignaler::sortingChanged
void sortingChanged(QDir::SortFlags)
K3FileViewSignaler::activateMenu
void activateMenu(const KFileItem &item, const QPoint &pos)
Definition: k3fileview.cpp:55
K3FileViewSignaler::fileSelected
void fileSelected(const KFileItem &item)
K3FileViewSignaler::activate
void activate(const KFileItem &item)
Call this method when an item is selected (depends on single click / double click configuration).
Definition: k3fileview.cpp:42
K3FileViewSignaler::highlightFile
void highlightFile(const KFileItem &item)
emits the highlighted signal for item.
Definition: k3fileview.cpp:50
K3FileViewSignaler::dropURLs
void dropURLs(const KFileItem &item, QDropEvent *event, const KUrl::List &urls)
Definition: k3fileview.cpp:65
K3FileViewSignaler::activatedMenu
void activatedMenu(const KFileItem &item, const QPoint &pos)
K3FileViewSignaler::dirActivated
void dirActivated(const KFileItem &item)
K3FileViewSignaler::changeSorting
void changeSorting(QDir::SortFlags sorting)
Definition: k3fileview.cpp:60
K3FileViewSignaler::fileHighlighted
void fileHighlighted(const KFileItem &item)
the item maybe be a null item, indicating that we're in multiselection mode and the selection has cha...
K3FileViewSignaler::dropped
void dropped(const KFileItem &item, QDropEvent *event, const KUrl::List &urls)
K3FileView
This class defines an interface to all file views.
Definition: k3fileview.h:89
K3FileView::insertItem
virtual void insertItem(const KFileItem &i)
The derived view must implement this function to add the file in the widget.
Definition: k3fileview.cpp:184
K3FileView::autoOpenDelay
static int autoOpenDelay()
Definition: k3fileview.cpp:492
K3FileView::selectAll
virtual void selectAll()
Selects all items.
Definition: k3fileview.cpp:380
K3FileView::listingCompleted
virtual void listingCompleted()
This hook is called when all items of the currently listed directory are listed and inserted into the...
Definition: k3fileview.cpp:438
K3FileView::nextItem
virtual KFileItem nextItem(const KFileItem &) const =0
K3FileView::onlyDoubleClickSelectsFiles
bool onlyDoubleClickSelectsFiles() const
Definition: k3fileview.cpp:363
K3FileView::invertSelection
virtual void invertSelection()
Inverts the current selection, i.e.
Definition: k3fileview.cpp:390
K3FileView::setViewMode
virtual void setViewMode(ViewMode vm)
Definition: k3fileview.cpp:407
K3FileView::sortingKey
static QString sortingKey(const QString &value, bool isDir, QDir::SortFlags SortFlags)
This method calculates a QString from the given parameters, that is suitable for sorting with e....
Definition: k3fileview.cpp:465
K3FileView::setOnlyDoubleClickSelectsFiles
void setOnlyDoubleClickSelectsFiles(bool enable)
This is a KFileDialog specific hack: we want to select directories with single click,...
Definition: k3fileview.cpp:359
K3FileView::sig
K3FileViewSignaler * sig
Definition: k3fileview.h:397
K3FileView::updateNumbers
bool updateNumbers(const KFileItem &i)
increases the number of dirs and files.
Definition: k3fileview.cpp:154
K3FileView::viewName
QString viewName() const
Definition: k3fileview.cpp:417
K3FileView::setViewName
void setViewName(const QString &name)
Sets the name of the view, which could be displayed somewhere.
Definition: k3fileview.cpp:422
K3FileView::dropOptions
int dropOptions()
Returns the DND options in effect.
Definition: k3fileview.cpp:487
K3FileView::selectedItems
KFileItemList selectedItems() const
Definition: k3fileview.cpp:368
K3FileView::sortReversed
void sortReversed()
Definition: k3fileview.cpp:215
K3FileView::setDropOptions
virtual void setDropOptions(int options)
Specify DND options.
Definition: k3fileview.cpp:482
K3FileView::clearView
virtual void clearView()=0
pure virtual function, that should be implemented to clear the view.
K3FileView::count
uint count() const
Definition: k3fileview.cpp:222
K3FileView::setSelected
virtual void setSelected(const KFileItem &, bool enable)=0
Tells the view that it should highlight the item.
K3FileView::firstFileItem
virtual KFileItem firstFileItem() const =0
K3FileView::setSelectionMode
virtual void setSelectionMode(KFile::SelectionMode sm)
Definition: k3fileview.cpp:397
K3FileView::isReversed
bool isReversed() const
Tells whether the current items are in reversed order (shortcut to sorting() & QDir::Reversed).
Definition: k3fileview.cpp:210
K3FileView::numDirs
uint numDirs() const
Definition: k3fileview.cpp:232
K3FileView::removeItem
virtual void removeItem(const KFileItem &item)
Removes an item from the list; has to be implemented by the view.
Definition: k3fileview.cpp:427
K3FileView::viewMode
virtual ViewMode viewMode() const
Definition: k3fileview.cpp:412
K3FileView::signaler
K3FileViewSignaler * signaler() const
Definition: k3fileview.cpp:452
K3FileView::isSelected
virtual bool isSelected(const KFileItem &) const =0
K3FileView::updateView
virtual void updateView(bool f=true)
does a repaint of the view.
Definition: k3fileview.cpp:325
K3FileView::sorting
QDir::SortFlags sorting() const
Returns the sorting order of the internal list.
Definition: k3fileview.cpp:193
K3FileView::K3FileView
K3FileView()
Creates a new file view.
Definition: k3fileview.cpp:110
K3FileView::widget
virtual QWidget * widget()=0
a pure virtual function to get a QWidget, that can be added to other widgets.
K3FileView::setParentView
virtual void setParentView(K3FileView *parent)
Definition: k3fileview.cpp:134
K3FileView::items
KFileItemList items() const
Definition: k3fileview.cpp:349
K3FileView::clear
virtual void clear()
Clears the view and all item lists.
Definition: k3fileview.cpp:203
K3FileView::selectionMode
virtual KFile::SelectionMode selectionMode() const
Definition: k3fileview.cpp:402
K3FileView::numFiles
uint numFiles() const
Definition: k3fileview.cpp:227
K3FileView::setSorting
virtual void setSorting(QDir::SortFlags sort)
Sets the sorting order of the view.
Definition: k3fileview.cpp:198
K3FileView::~K3FileView
virtual ~K3FileView()
Destroys the file view.
Definition: k3fileview.cpp:128
K3FileView::writeConfig
virtual void writeConfig(KConfigGroup *)
Definition: k3fileview.cpp:461
K3FileView::setCurrentItem
void setCurrentItem(const QString &filename)
Sets filename the current item in the view, if available.
Definition: k3fileview.cpp:334
K3FileView::addItemList
void addItemList(const KFileItemList &list)
Inserts a list of items.
Definition: k3fileview.cpp:172
K3FileView::readConfig
virtual void readConfig(KConfigGroup *)
Definition: k3fileview.cpp:457
K3FileView::ViewMode
ViewMode
Definition: k3fileview.h:215
K3FileView::All
@ All
Definition: k3fileview.h:218
K3FileView::Files
@ Files
Definition: k3fileview.h:216
K3FileView::Directories
@ Directories
Definition: k3fileview.h:217
K3FileView::actionCollection
virtual KActionCollection * actionCollection() const
Definition: k3fileview.cpp:443
KActionCollection
KConfigGroup
KFileItemList
KFileItem
KFileItem::time
KDateTime time(FileTimes which) const
KFileItem::size
KIO::filesize_t size() const
KFileItem::isFile
bool isFile() const
KFileItem::isDir
bool isDir() const
KFileItem::isNull
bool isNull() const
KFileItem::name
QString name(bool lowerCase=false) const
KFile::SelectionMode
SelectionMode
KFile::NoSelection
NoSelection
KFile::Single
Single
KIO::UDSEntry::UDS_MODIFICATION_TIME
UDS_MODIFICATION_TIME
KUrl::List
QWidget
config-kfile.h
kfile_area
const int kfile_area
kDebug
#define kDebug
k3fileview.h
kaction.h
kactioncollection.h
kapplication.h
kdebug.h
kglobal.h
klocale.h
i18n
QString i18n(const char *text)
kstandarddirs.h
KGlobal::staticQString
const QString & staticQString(const char *str)
KIO::filesize_t
qulonglong filesize_t
KIO::number
QString number(KIO::filesize_t size)
list
QStringList list(const QString &fileClass)
name
const char * name(StandardAction id)
This file is part of the KDE documentation.
Documentation copyright © 1996-2023 The KDE developers.
Generated on Mon Feb 20 2023 00:00:00 by doxygen 1.9.6 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

KDE3Support

Skip menu "KDE3Support"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdelibs-4.14.38 API Reference

Skip menu "kdelibs-4.14.38 API Reference"
  • DNSSD
  • Interfaces
  •   KHexEdit
  •   KMediaPlayer
  •   KSpeech
  •   KTextEditor
  • kconf_update
  • KDE3Support
  •   KUnitTest
  • KDECore
  • KDED
  • KDEsu
  • KDEUI
  • KDEWebKit
  • KDocTools
  • KFile
  • KHTML
  • KImgIO
  • KInit
  • kio
  • KIOSlave
  • KJS
  •   KJS-API
  •   WTF
  • kjsembed
  • KNewStuff
  • KParts
  • KPty
  • Kross
  • KUnitConversion
  • KUtils
  • Nepomuk
  • Plasma
  • Solid
  • Sonnet
  • ThreadWeaver
Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal