1// -*- c++ -*-
2/*
3 This file is part of the KDE libraries
4 SPDX-FileCopyrightText: 1999 Stephan Kulow <coolo@kde.org>
5 SPDX-FileCopyrightText: 2000, 2001 Carsten Pfeiffer <pfeiffer@kde.org>
6
7 SPDX-License-Identifier: LGPL-2.0-or-later
8*/
9#ifndef KDIROPERATOR_H_
10#define KDIROPERATOR_H_
11
12#include "kiofilewidgets_export.h"
13#include <kfile.h>
14
15#include <KFileItem>
16
17#include <QStyleOptionViewItem>
18#include <QUrl>
19#include <QWidget>
20
21class QAbstractItemView;
22class QMenu;
23class QModelIndex;
24class QProgressBar;
25
26class KActionCollection;
27class KActionMenu;
28class KCompletion;
29class KConfigGroup;
30class KDirLister;
31class KFileItemList;
32class KFilePreviewGenerator;
33class KPreviewWidgetBase;
34
35namespace KIO
36{
37class CopyJob;
38class DeleteJob;
39}
40
41class KDirOperatorPrivate;
42
43/*!
44 * \class KDirOperator
45 * \inmodule KIOFileWidgets
46 *
47 * \brief A widget for displaying files and browsing directories.
48 *
49 * This widget works as a network transparent filebrowser. You specify a URL
50 * to display and this url will be loaded via KDirLister. The user can
51 * browse through directories, highlight and select files, delete or rename
52 * files.
53 *
54 * It supports different views, e.g. a detailed view (see KFileDetailView),
55 * a simple icon view (see KFileIconView), a combination of two views,
56 * separating directories and files ( KCombiView).
57 *
58 * Additionally, a preview view is available (see KFilePreview), which can
59 * show either a simple or detailed view and additionally a preview widget
60 * (see setPreviewWidget()). KImageFilePreview is one implementation
61 * of a preview widget, that displays previews for all supported filetypes
62 * utilizing KIO::PreviewJob.
63 *
64 * Currently, those classes don't support Drag&Drop out of the box -- there
65 * you have to use your own view-classes. You can use some DnD-aware views
66 * from Björn Sahlström <bjorn@kbear.org> until they will be integrated
67 * into this library. See http://devel-home.kde.org/~pfeiffer/DnD-classes.tar.gz
68 *
69 * This widget is the one used in the KFileWidget.
70 *
71 * Basic usage is like this:
72 * \code
73 * KDirOperator *op = new KDirOperator(QUrl("file:///home/gis"), this);
74 * // some signals you might be interested in
75 * connect(op, &KDirOperator::urlEntered, this, [this](const QUrl &url) { slotUrlEntered(url); });
76 * connect(op, &KDirOperator::fileHighlighted, this, [this](const KFileItem &item) { slotFileHighlighted(item) });
77 * connect(op, &KDirOperator::fileSelected, this, [this](const KFileItem &item) { slotFileSelected(item) });
78 * connect(op, &KDirOperator::finishedLoading, this, [this]() { slotLoadingFinished(); };
79 *
80 * KConfigGroup grp(KSharedConfig::openConfig(),"Your KDiroperator ConfigGroup" );
81 * op->readConfig( &grp);
82 * op->setViewMode(KFile::Default);
83 * \endcode
84 *
85 * This will create a childwidget of 'this' showing the directory contents
86 * of /home/gis in the default-view. The view is determined by the readConfig()
87 * call, which will read the KDirOperator settings, the user left your program
88 * with (and which you saved with op->writeConfig()).
89 */
90class KIOFILEWIDGETS_EXPORT KDirOperator : public QWidget
91{
92 Q_OBJECT
93
94public:
95 /*!
96 * The various action types. These values can be or'd together
97 *
98 * \value SortActions
99 * \value ViewActions
100 * \value NavActions
101 * \value FileActions
102 * \value AllActions
103 */
104 enum ActionType {
105 SortActions = 1,
106 ViewActions = 2,
107 NavActions = 4,
108 FileActions = 8,
109 AllActions = 15,
110 };
111
112 /*!
113 * Actions provided by KDirOperator that can be accessed from the outside using action()
114 *
115 * \value PopupMenu An ActionMenu presenting a popupmenu with all actions
116 * \value Up Changes to the parent directory
117 * \value Back Goes back to the previous directory
118 * \value Forward Goes forward in the history
119 * \value Home Changes to the user's home directory
120 * \value Reload Reloads the current directory
121 * \value New A KNewFileMenu
122 * \value NewFolder Opens a dialog box to create a directory
123 * \value Rename
124 * \value Trash
125 * \value Delete Deletes the selected files/directories
126 * \value SortMenu An ActionMenu containing all sort-options
127 * \value SortByName Sorts by name
128 * \value SortBySize Sorts by size
129 * \value SortByDate Sorts by date
130 * \value SortByType Sorts by type
131 * \value SortAscending Changes sort order to ascending
132 * \value SortDescending Changes sort order to descending
133 * \value SortFoldersFirst Sorts folders before files
134 * \value SortHiddenFilesLast Sorts hidden files last
135 * \value ViewModeMenu an ActionMenu containing all actions concerning the view
136 * \value ViewIconsView
137 * \value ViewCompactView
138 * \value ViewDetailsView
139 * \value DecorationMenu
140 * \value DecorationAtTop
141 * \value DecorationAtLeft
142 * \value ShortView Shows a simple fileview
143 * \value DetailedView Shows a detailed fileview (dates, permissions ,...)
144 * \value TreeView
145 * \value DetailedTreeView
146 * \value AllowExpansionInDetailsView
147 * \value ShowHiddenFiles shows hidden files
148 * \value ShowPreviewPanel shows a preview next to the fileview
149 * \value ShowPreview
150 * \value OpenContainingFolder
151 * \value Properties Shows a KPropertiesDialog for the selected files
152 */
153 enum Action {
154 PopupMenu,
155 Up,
156 Back,
157 Forward,
158 Home,
159 Reload,
160 New,
161 NewFolder,
162 Rename,
163 Trash,
164 Delete,
165 SortMenu,
166 SortByName,
167 SortBySize,
168 SortByDate,
169 SortByType,
170 SortAscending,
171 SortDescending,
172 SortFoldersFirst,
173 SortHiddenFilesLast,
174 ViewModeMenu,
175 ViewIconsView,
176 ViewCompactView,
177 ViewDetailsView,
178 DecorationMenu,
179 DecorationAtTop,
180 DecorationAtLeft,
181 ShortView,
182 DetailedView,
183 TreeView,
184 DetailedTreeView,
185 AllowExpansionInDetailsView,
186 ShowHiddenFiles,
187 ShowPreviewPanel,
188 ShowPreview,
189 OpenContainingFolder,
190 Properties,
191 };
192
193 /*!
194 * Constructs the KDirOperator with no initial view. As the views are
195 * configurable, call readConfig() to load the user's configuration
196 * and then setView to explicitly set a view.
197 *
198 * This constructor doesn't start loading the url, setView will do it.
199 */
200 explicit KDirOperator(const QUrl &urlName = QUrl{}, QWidget *parent = nullptr);
201
202 ~KDirOperator() override;
203
204 /*!
205 * Enables/disables showing hidden files.
206 */
207 virtual void setShowHiddenFiles(bool s);
208
209 /*!
210 * Returns true when hidden files are shown or false otherwise.
211 */
212 bool showHiddenFiles() const;
213
214 /*!
215 * Stops loading immediately. You don't need to call this, usually.
216 */
217 void close();
218
219 /*!
220 * Sets a filter like "*.cpp *.h *.o". Only files matching that filter
221 * will be shown.
222 *
223 * \sa KDirLister::setNameFilter
224 * \sa nameFilter
225 */
226 void setNameFilter(const QString &filter);
227
228 /*!
229 * Returns the current namefilter.
230 * \sa setNameFilter
231 */
232 QString nameFilter() const;
233
234 /*!
235 * Sets a list of MIME types as filter. Only files of those MIME types
236 * will be shown.
237 *
238 * Example:
239 * \code
240 * QStringList filter;
241 * filter << "text/html" << "image/png" << "inode/directory";
242 * dirOperator->setMimefilter( filter );
243 * \endcode
244 *
245 * Node: Without the MIME type inode/directory, only files would be shown.
246 * Call updateDir() to apply it.
247 *
248 * \sa KDirLister::setMimeFilter
249 * \sa mimeFilter
250 */
251 void setMimeFilter(const QStringList &mimetypes);
252
253 /*!
254 * Returns the current MIME type filter.
255 */
256 QStringList mimeFilter() const;
257
258 /*!
259 * Only show the files in a given set of MIME types.
260 * This is useful in specialized applications (while file managers, on
261 * the other hand, want to show all MIME types). Internally uses
262 * KNewFileMenu::setSupportedMimeTypes
263 *
264 * Example:
265 * \code
266 * QStringList mimeTypes;
267 * mimeTypes << "text/html" << "inode/directory";
268 * dirOperator->setNewFileMenuSupportedMimeTypes(mimeTypes);
269 * \endcode
270 *
271 * Note: If the list is empty, all options will be shown. Otherwise,
272 * without the MIME type inode/directory, only file options will be shown.
273 *
274 * \sa KNewFileMenu::setSupportedMimeTypes
275 * \sa newFileMenuSupportedMimeTypes
276 */
277 void setNewFileMenuSupportedMimeTypes(const QStringList &mime);
278
279 /*!
280 * Returns the current Supported Mimes Types.
281 */
282 QStringList newFileMenuSupportedMimeTypes() const;
283
284 /*!
285 * Setting this to true will make a directory get selected when trying to create a new one that has the same name.
286 *
287 * \since 5.76
288 */
289 void setNewFileMenuSelectDirWhenAlreadyExist(bool selectOnDirExists);
290
291 /*!
292 * Clears both the namefilter and MIME type filter, so that all files and
293 * directories will be shown. Call updateDir() to apply it.
294 *
295 * \sa setMimeFilter
296 * \sa setNameFilter
297 */
298 void clearFilter();
299
300 /*!
301 * Returns the current url
302 */
303 QUrl url() const;
304
305 /*!
306 * Sets a new url to list.
307 *
308 * \a clearforward specifies whether the "forward" history should be cleared.
309 *
310 * \a url the URL to set
311 */
312 virtual void setUrl(const QUrl &url, bool clearforward);
313
314 /*!
315 * Clears the current selection and attempts to set \a url
316 * the current url file.
317 */
318 void setCurrentItem(const QUrl &url);
319
320 /*!
321 * Clears the current selection and attempts to set \a item
322 * as the current item.
323 */
324 void setCurrentItem(const KFileItem &item);
325
326 /*!
327 * Clears the current selection and attempts to set \a urls
328 * the current url files.
329 */
330 void setCurrentItems(const QList<QUrl> &urls);
331
332 /*!
333 * Clears the current selection and attempts to set \a items
334 * as the current items.
335 */
336 void setCurrentItems(const KFileItemList &items);
337
338 /*!
339 * Returns the currently used view.
340 * \sa setViewMode
341 */
342 QAbstractItemView *view() const;
343
344 /*!
345 * Set the view mode to one of the predefined modes.
346 * \sa KFile::FileView
347 *
348 * \since 5.100
349 */
350 void setViewMode(KFile::FileView viewKind);
351
352 /*!
353 * Returns the current view mode.
354 * \sa KFile::FileView
355 * \since 5.0
356 */
357 KFile::FileView viewMode() const;
358
359 /*!
360 * Sets the way to sort files and directories.
361 */
362 void setSorting(QDir::SortFlags);
363
364 /*!
365 * Returns the current way of sorting files and directories
366 */
367 QDir::SortFlags sorting() const;
368
369 /*!
370 * Returns true if we are displaying the root directory of the current url
371 */
372 bool isRoot() const;
373
374 /*!
375 * Returns the object listing the directory
376 */
377 KDirLister *dirLister() const;
378
379 /*!
380 * Returns the progress widget, that is shown during directory listing.
381 * You can for example reparent() it to put it into a statusbar.
382 */
383 QProgressBar *progressBar() const;
384
385 /*!
386 * Sets the listing/selection mode for the views, an OR'ed combination of
387 * \list
388 * \li File
389 * \li Directory
390 * \li Files
391 * \li ExistingOnly
392 * \li LocalOnly
393 * \endlist
394 *
395 * You cannot mix File and Files of course, as the former means
396 * single-selection mode, the latter multi-selection.
397 */
398 virtual void setMode(KFile::Modes m);
399 /*!
400 * Returns the listing/selection mode.
401 */
402 KFile::Modes mode() const;
403
404 /*!
405 * Sets a preview-widget to be shown next to the file-view.
406 *
407 * The ownership of \a w is transferred to KDirOperator, so don't
408 * delete it yourself!
409 */
410 virtual void setPreviewWidget(KPreviewWidgetBase *w);
411
412 /*!
413 * Returns a list of all currently selected items. If there is no view,
414 * or there are no selected items, an empty list is returned.
415 */
416 KFileItemList selectedItems() const;
417
418 /*!
419 * Returns true if \a item is currently selected, or false otherwise.
420 */
421 bool isSelected(const KFileItem &item) const;
422
423 /*!
424 * Returns the number of directories in the currently listed url.
425 * Returns 0 if there is no view.
426 */
427 int numDirs() const;
428
429 /*!
430 * Returns the number of files in the currently listed url.
431 * Returns 0 if there is no view.
432 */
433 int numFiles() const;
434
435 /*!
436 * Returns a KCompletion object, containing all filenames and
437 * directories of the current directory/URL.
438 * You can use it to insert it into a KLineEdit or KComboBox
439 * Note: it will only contain files, after prepareCompletionObjects()
440 * has been called. It will be implicitly called from makeCompletion()
441 * or makeDirCompletion()
442 */
443 KCompletion *completionObject() const;
444
445 /*!
446 * Returns a KCompletion object, containing only all directories of the
447 * current directory/URL.
448 * You can use it to insert it into a KLineEdit or KComboBox
449 * Note: it will only contain directories, after
450 * prepareCompletionObjects() has been called. It will be implicitly
451 * called from makeCompletion() or makeDirCompletion()
452 */
453 KCompletion *dirCompletionObject() const;
454
455 /*!
456 * Obtain a given action from the KDirOperator's set of actions.
457 *
458 * You can e.g. use
459 * \code
460 * dirOperator->action(KDirOperator::Up)->plug(someToolBar);
461 * \endcode
462 * to add a button into a toolbar, which makes the dirOperator change to
463 * its parent directory.
464 *
465 * \since 5.100
466 */
467 QAction *action(KDirOperator::Action action) const;
468
469 /*!
470 * A list of all actions for this KDirOperator.
471 *
472 * See action()
473 *
474 * \since 5.100
475 */
476 QList<QAction *> allActions() const;
477
478 /*!
479 * Sets the config object and the to be used group in KDirOperator. This
480 * will be used to store the view's configuration.
481 * If you don't set this, the views cannot save and restore their
482 * configuration.
483 *
484 * Usually you call this right after KDirOperator creation so that the view
485 * instantiation can make use of it already.
486 *
487 * Note that KDirOperator does NOT take ownership of that object (typically
488 * it's KSharedConfig::openConfig() anyway.
489 *
490 * You must not delete the KConfig or KConfigGroup object (and master config object) before
491 * either deleting the KDirOperator or calling setViewConfig(0); or something like that
492 *
493 * \sa viewConfigGroup
494 */
495 virtual void setViewConfig(KConfigGroup &configGroup);
496
497 /*!
498 * Returns the group set by setViewConfig configuration.
499 */
500 KConfigGroup *viewConfigGroup() const;
501
502 /*!
503 * Reads the default settings for a view, i.e.\ the default KFile::FileView.
504 * Also reads the sorting and whether hidden files should be shown.
505 * Note: the default view will not be set - you have to call
506 * \code
507 * setViewMode( KFile::Default )
508 * \endcode
509 * to apply it.
510 *
511 * \sa setViewMode
512 * \sa setViewConfig
513 * \sa writeConfig
514 */
515 virtual void readConfig(const KConfigGroup &configGroup);
516
517 /*!
518 * Saves the current settings like sorting, simple or detailed view.
519 *
520 * \sa readConfig
521 * \sa setViewConfig
522 */
523 virtual void writeConfig(KConfigGroup &configGroup);
524
525 /*!
526 * This toggles between double/single click file and directory selection mode.
527 * When argument is true, files and directories are highlighted with single click and
528 * selected (executed) with double click.
529 *
530 * NOTE: this currently has no effect.
531 *
532 * The default follows the single/double click system setting.
533 */
534 void setOnlyDoubleClickSelectsFiles(bool enable);
535
536 /*!
537 * Returns whether files (not directories) should only be select()ed by
538 * double-clicks.
539 * \sa setOnlyDoubleClickSelectsFiles
540 */
541 bool onlyDoubleClickSelectsFiles() const;
542
543 /*!
544 * Toggles whether setUrl is called on newly created directories.
545 * \since 5.62
546 */
547 void setFollowNewDirectories(bool enable);
548
549 /*!
550 * Returns true if setUrl is called on newly created directories, false
551 * otherwise. Enabled by default.
552 * \since 5.62
553 * \sa setFollowNewDirectories
554 */
555 bool followNewDirectories() const;
556
557 /*!
558 * Toggles whether setUrl is called on selected directories when a tree view
559 * is used.
560 * \since 5.62
561 */
562 void setFollowSelectedDirectories(bool enable);
563
564 /*!
565 * Returns whether setUrl is called on selected directories when a tree
566 * view is used. Enabled by default.
567 * \since 5.62
568 */
569 bool followSelectedDirectories() const;
570
571#if KIOFILEWIDGETS_ENABLE_DEPRECATED_SINCE(6, 15)
572 /*!
573 * Starts and returns a KIO::DeleteJob to delete the given \a items.
574 *
575 * \a items the list of items to be deleted
576 *
577 * \a parent the parent widget used for the confirmation dialog
578 *
579 * \a ask specifies whether a confirmation dialog should be shown
580 *
581 * \a showProgress passed to the DeleteJob to show a progress dialog
582 * \deprecated[6.15]
583 */
584 KIOFILEWIDGETS_DEPRECATED_VERSION(6, 15, "Use KIO::DeleteOrTrashJob instead")
585 virtual KIO::DeleteJob *del(const KFileItemList &items, QWidget *parent = nullptr, bool ask = true, bool showProgress = true);
586#endif
587
588 /*!
589 * Clears the forward and backward history.
590 */
591 void clearHistory();
592
593 /*!
594 * When using the up or back actions to navigate the directory hierarchy, KDirOperator
595 * can highlight the directory that was just left.
596 *
597 * For example:
598 * \list
599 * \li starting in /a/b/c/, going up to /a/b, "c" will be highlighted
600 * \li starting in /a/b/c, going up (twice) to /a, "b" will be highlighted;
601 * using the back action to go to /a/b/, "c" will be highlighted
602 * \li starting in /a, going to "b", then going to "c", using the back action
603 * to go to /a/b/, "c" will be highlighted; using the back action again to go
604 * to /a/, "b" will be highlighted
605 * \endlist
606 *
607 * \sa dirHighlighting.
608 * The default is to highlight directories when going back/up.
609 */
610 virtual void setEnableDirHighlighting(bool enable);
611
612 /*!
613 * Returns whether the last directory will be made the current item
614 * (and hence highlighted) when going up or back in the directory hierarchy
615 *
616 * Directories are highlighted by default.
617 */
618 bool dirHighlighting() const;
619
620 /*!
621 * Returns true if we are in directory-only mode, that is, no files are
622 * shown.
623 */
624 bool dirOnlyMode() const;
625
626 static bool dirOnlyMode(uint mode);
627
628 /*!
629 * Sets up the action menu.
630 *
631 * \a whichActions is an value of OR'd ActionTypes that controls which actions to show in the action menu
632 */
633 void setupMenu(int whichActions);
634
635 /*!
636 * Reimplemented - allow dropping of files if \a b is true, defaults to true since 5.59
637 *
638 * \a b true if the widget should allow dropping of files
639 */
640 virtual void setAcceptDrops(bool b);
641
642 /*!
643 * Sets the options for dropping files.
644 * CURRENTLY NOT IMPLEMENTED
645 */
646 virtual void setDropOptions(int options);
647
648#if KIOFILEWIDGETS_ENABLE_DEPRECATED_SINCE(6, 15)
649 /*!
650 * Starts and returns a KIO::CopyJob to trash the given \a items.
651 *
652 * \a items the list of items to be trashed
653 * \a parent the parent widget used for the confirmation dialog
654 * \a ask specifies whether a confirmation dialog should be shown
655 * \a showProgress passed to the CopyJob to show a progress dialog
656 */
657 KIOFILEWIDGETS_DEPRECATED_VERSION(6, 15, "Use KIO::DeleteOrTrashJob instead")
658 virtual KIO::CopyJob *trash(const KFileItemList &items, QWidget *parent, bool ask = true, bool showProgress = true);
659#endif
660
661 /*!
662 * Returns the preview generator for the current view.
663 */
664 KFilePreviewGenerator *previewGenerator() const;
665
666 /*!
667 * Forces the inline previews to be shown or hidden, depending on \a show.
668 *
669 * \a show Whether to show inline previews or not.
670 */
671 void setInlinePreviewShown(bool show);
672
673 /*!
674 * Returns the position where icons are shown relative to the labels
675 * of file items in the icon view.
676 * \since 4.2.3
677 */
678 QStyleOptionViewItem::Position decorationPosition() const;
679
680 /*!
681 * Sets the position where icons shall be shown relative to the labels
682 * of file items in the icon view.
683 * \since 4.2.3
684 */
685 void setDecorationPosition(QStyleOptionViewItem::Position position);
686
687 /*!
688 * Returns whether the inline previews are shown or not.
689 */
690 bool isInlinePreviewShown() const;
691
692 /*!
693 * Returns the icon size in pixels, ranged from KIconLoader::SizeSmall (16) to
694 * KIconLoader::SizeEnormous (128).
695 *
696 * \since 5.76
697 */
698 int iconSize() const;
699
700 /*!
701 * If the system is set up to trigger items on single click, if \a isSaving
702 * is true, we will force to double click to accept.
703 * \note this is false by default
704 */
705 void setIsSaving(bool isSaving);
706
707 /*!
708 * Returns whether KDirOperator will force a double click to accept.
709 * \note this is false by default
710 */
711 bool isSaving() const;
712
713 /*!
714 * Returns the URL schemes that the file widget should allow navigating to.
715 *
716 * If the returned list is empty, all schemes are supported.
717 *
718 * \sa QFileDialog::supportedSchemes
719 * \since 5.43
720 */
721 QStringList supportedSchemes() const;
722
723 /*!
724 * Call with \c true to add open-with actions to items in the view.
725 * This can be useful when you're attaching an image or text file to
726 * an email or uploading an image to some online service, and need to
727 * check the contents before going forward.
728 *
729 * \since 5.87
730 */
731 void showOpenWithActions(bool enable);
732
733 /*!
734 * @returns true if the user was using keys to navigate.
735 *
736 * \since 6.14
737 */
738 bool usingKeyNavigation();
739
740protected:
741 /*!
742 * A view factory for creating predefined fileviews. Called internally by setView,
743 * but you can also call it directly. Reimplement this if you depend on self defined fileviews.
744 *
745 * \a parent is the QWidget to be set as parent
746 *
747 * \a viewKind is the predefined view to be set, note: this can be several ones OR:ed together
748 *
749 * Returns the created view
750 *
751 * \sa KFile::FileView
752 * \sa setViewMode
753 */
754 virtual QAbstractItemView *createView(QWidget *parent, KFile::FileView viewKind);
755
756 /*!
757 * Sets a custom KDirLister to list directories.
758 * The KDirOperator takes ownership of the given KDirLister.
759 */
760 virtual void setDirLister(KDirLister *lister);
761
762 void resizeEvent(QResizeEvent *event) override;
763
764 /*!
765 * Sets up all the actions. Called from the constructor, you usually
766 * better not call this.
767 */
768 void setupActions();
769
770 /*!
771 * Updates the sorting-related actions to comply with the current sorting
772 * \sa sorting
773 */
774 void updateSortActions();
775
776 /*!
777 * Updates the view-related actions to comply with the current
778 * KFile::FileView
779 */
780 void updateViewActions();
781
782 /*!
783 * Sets up the context-menu with all the necessary actions. Called from the
784 * constructor, you usually don't need to call this.
785 */
786 void setupMenu();
787
788 /*!
789 * Synchronizes the completion objects with the entries of the
790 * currently listed url.
791 *
792 * Automatically called from makeCompletion() and
793 * makeDirCompletion()
794 */
795 void prepareCompletionObjects();
796
797 /*!
798 * Checks if there support from KIO::PreviewJob for the currently
799 * shown files, taking mimeFilter() and nameFilter() into account
800 * Enables/disables the preview-action accordingly.
801 */
802 bool checkPreviewSupport();
803
804 /*!
805 * Called upon right-click to activate the popupmenu.
806 */
807 virtual void activatedMenu(const KFileItem &item, const QPoint &pos);
808
809 void changeEvent(QEvent *event) override;
810
811 bool eventFilter(QObject *watched, QEvent *event) override;
812
813public Q_SLOTS:
814 /*!
815 * Goes one step back in the history and opens that url.
816 */
817 virtual void back();
818
819 /*!
820 * Goes one step forward in the history and opens that url.
821 */
822 virtual void forward();
823
824 /*!
825 * Enters the home directory.
826 */
827 virtual void home();
828
829 /*!
830 * Goes one directory up from the current url.
831 */
832 virtual void cdUp();
833
834 /*!
835 * to update the view after changing the settings
836 */
837 void updateDir();
838
839 /*!
840 * Re-reads the current url.
841 */
842 virtual void rereadDir();
843
844 /*!
845 * Opens a dialog to create a new directory.
846 */
847 virtual void mkdir();
848
849 /*!
850 * Deletes the currently selected files/directories.
851 */
852 virtual void deleteSelected();
853
854 /*!
855 * Enables/disables actions that are selection dependent. Call this e.g.
856 * when you are about to show a popup menu using some of KDirOperators
857 * actions.
858 */
859 void updateSelectionDependentActions();
860
861 /*!
862 * Tries to complete the given string (only completes files).
863 */
864 QString makeCompletion(const QString &);
865
866 /*!
867 * Tries to complete the given string (only completes directories).
868 */
869 QString makeDirCompletion(const QString &);
870
871 /*!
872 * Initiates a rename operation on the currently selected files/directories,
873 * prompting the user to choose a new name(s) for the currently selected items
874 * \sa renamingFinished
875 * \since 5.67
876 */
877 void renameSelected();
878
879 /*!
880 * Trashes the currently selected files/directories.
881 *
882 * This function used to take activation reason and keyboard modifiers,
883 * in order to call deleteSelected() if the user wanted to delete.
884 * Instead, call deleteSelected().
885 *
886 * FIXME KAction Port: link deleteSelected() up correctly
887 */
888 virtual void trashSelected();
889
890 /*!
891 * Notifies that the icons size should change. \a value is the icon size in pixels, ranged
892 * from KIconLoader::SizeSmall (16) to KIconLoader::SizeEnormous (128).
893 *
894 * \since 5.76
895 */
896 void setIconSize(int value);
897
898 /*!
899 * Set the URL schemes that the file widget should allow navigating to.
900 *
901 * If the returned list is empty, all schemes are supported. Examples for
902 * schemes are \c "file" or \c "ftp".
903 *
904 * \sa QFileDialog::setSupportedSchemes
905 * \since 5.43
906 */
907 void setSupportedSchemes(const QStringList &schemes);
908
909protected Q_SLOTS:
910 /*!
911 * Restores the normal cursor after showing the busy-cursor. Also hides
912 * the progressbar.
913 */
914 void resetCursor();
915
916 /*!
917 * Called after setUrl() to load the directory, update the history,
918 * etc.
919 */
920 void pathChanged();
921
922 /*!
923 * Enters the directory specified by the given \a item.
924 */
925 virtual void selectDir(const KFileItem &item);
926
927 /*!
928 * Emits fileSelected( item )
929 */
930 void selectFile(const KFileItem &item);
931
932 /*!
933 * Emits fileHighlighted(item)
934 */
935 void highlightFile(const KFileItem &item);
936
937 /*!
938 * Changes sorting to sort by name
939 */
940 void sortByName();
941
942 /*!
943 * Changes sorting to sort by size
944 */
945 void sortBySize();
946
947 /*!
948 * Changes sorting to sort by date
949 */
950 void sortByDate();
951
952 /*!
953 * Changes sorting to sort by date
954 */
955 void sortByType();
956
957 /*!
958 * Changes sorting to reverse sorting
959 */
960 void sortReversed();
961
962 /*!
963 * Toggles showing directories first / having them sorted like files.
964 */
965 void toggleDirsFirst();
966
967 /*!
968 * Toggles case sensitive / case insensitive sorting
969 */
970 void toggleIgnoreCase();
971
972 /*!
973 * Tries to make the given \a match as current item in the view and emits
974 * completion( match )
975 */
976 void slotCompletionMatch(const QString &match);
977
978Q_SIGNALS:
979 /*!
980 *
981 */
982 void urlEntered(const QUrl &);
983
984 /*!
985 *
986 */
987 void updateInformation(int files, int dirs);
988
989 /*!
990 *
991 */
992 void completion(const QString &);
993
994 /*!
995 *
996 */
997 void finishedLoading();
998
999 /*!
1000 * Emitted whenever the current fileview is changed, either by an explicit
1001 * call to setViewMode() or by the user selecting a different view thru
1002 * the GUI.
1003 */
1004 void viewChanged(QAbstractItemView *newView);
1005
1006 /*!
1007 * Emitted when a file is highlighted or generally the selection changes in
1008 * multiselection mode. In the latter case, \a item is a null KFileItem.
1009 * You can access the selected items with selectedItems().
1010 */
1011 void fileHighlighted(const KFileItem &item);
1012
1013 /*!
1014 *
1015 */
1016 void dirActivated(const KFileItem &item);
1017
1018 /*!
1019 *
1020 */
1021 void fileSelected(const KFileItem &item);
1022
1023 /*!
1024 * Emitted when files are dropped. Dropping files is disabled by
1025 * default. You need to enable it with setAcceptDrops()
1026 *
1027 * \a item the item on which the drop occurred or 0.
1028 *
1029 * \a event the drop event itself.
1030 *
1031 * \a urls the urls that where dropped.
1032 */
1033 void dropped(const KFileItem &item, QDropEvent *event, const QList<QUrl> &urls);
1034
1035 /*!
1036 * Emitted just before the context menu is shown, allows users to
1037 * extend the menu with custom actions.
1038 *
1039 * \a item the file on which the context menu was invoked
1040 *
1041 * \a menu the context menu, pre-populated with the file-management actions
1042 */
1043 void contextMenuAboutToShow(const KFileItem &item, QMenu *menu);
1044
1045 /*!
1046 * Will notify that the icon size has changed. Since we save the icon size depending
1047 * on the view type (list view or a different kind of view), a call to setViewMode() can
1048 * trigger this signal to be emitted.
1049 */
1050 void currentIconSizeChanged(int size);
1051
1052 /*!
1053 * Triggered when the user hit Enter/Return
1054 * \since 5.57
1055 */
1056 void keyEnterReturnPressed();
1057
1058 /*!
1059 * Emitted when renaming selected files has finished.
1060 *
1061 * \a urls URL list of the renamed files
1062 * \since 5.96
1063 */
1064 void renamingFinished(const QList<QUrl> &urls);
1065
1066private:
1067 KIOFILEWIDGETS_NO_EXPORT void setViewInternal(QAbstractItemView *view);
1068
1069 friend class KDirOperatorPrivate;
1070 friend class KFileWidgetTest; // For testing
1071 std::unique_ptr<KDirOperatorPrivate> d;
1072};
1073
1074#endif
1075

source code of kio/src/filewidgets/kdiroperator.h