/* This file is part of the KDE project
- Copyright (c) 2007 David Faure <faure@kde.org>
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
+ SPDX-FileCopyrightText: 2007 David Faure <faure@kde.org>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
*/
#ifndef DOLPHINPART_H
#define DOLPHINPART_H
-#include <kparts/part.h>
-#include <kparts/browserextension.h>
+#include <KParts/ReadOnlyPart>
+
+#include <QAction>
+#include <QUrl>
+
+class DolphinNewFileMenu;
class DolphinViewActionHandler;
class QActionGroup;
-class KAction;
class KFileItemList;
class KFileItem;
class DolphinPartBrowserExtension;
-class DolphinSortFilterProxyModel;
-class DolphinModel;
+class DolphinRemoteEncoding;
class KDirLister;
class DolphinView;
-class QLineEdit;
-class KAboutData;
+class DolphinRemoveAction;
class DolphinPart : public KParts::ReadOnlyPart
{
// Used by konqueror. Technically it means "we want undo enabled if
// there are things in the undo history and the current part is a dolphin part".
// Even though it's konqueror doing the undo...
- Q_PROPERTY( bool supportsUndo READ supportsUndo )
+ Q_PROPERTY(bool supportsUndo READ supportsUndo CONSTANT)
-public:
- explicit DolphinPart(QWidget* parentWidget, QObject* parent, const QStringList& args);
- ~DolphinPart();
+ Q_PROPERTY(QString currentViewMode READ currentViewMode WRITE setCurrentViewMode)
+
+ // Used by konqueror when typing something like /home/dfaure/*.diff in the location bar
+ Q_PROPERTY(QString nameFilter READ nameFilter WRITE setNameFilter)
- static KAboutData* createAboutData();
+ // Used by konqueror to implement the --select command-line option
+ Q_PROPERTY(QList<QUrl> filesToSelect READ filesToSelect WRITE setFilesToSelect)
- virtual bool openUrl(const KUrl& url);
+public:
+ explicit DolphinPart(QWidget *parentWidget, QObject *parent, const KPluginMetaData &metaData, const QVariantList &args);
+ ~DolphinPart() override;
+
+ /**
+ * Standard KParts::ReadOnlyPart openUrl method.
+ * Called by Konqueror to view a directory in DolphinPart.
+ */
+ bool openUrl(const QUrl &url) override;
/// see the supportsUndo property
- bool supportsUndo() const { return true; }
+ bool supportsUndo() const
+ {
+ return true;
+ }
- DolphinView* view() { return m_view; }
+ /**
+ * Used by konqueror for setting the view mode
+ * @param viewModeName internal name for the view mode, like "icons"
+ * Those names come from the Actions line in dolphinpart.desktop,
+ * and have to match the name of the KActions.
+ */
+ void setCurrentViewMode(const QString &viewModeName);
+
+ /**
+ * Used by konqueror for displaying the current view mode.
+ * @see setCurrentViewMode
+ */
+ QString currentViewMode() const;
+
+ /// Returns the view owned by this part; used by DolphinPartBrowserExtension
+ DolphinView *view()
+ {
+ return m_view;
+ }
+
+ /**
+ * Sets a name filter, like *.diff
+ */
+ void setNameFilter(const QString &nameFilter);
+
+ /**
+ * Returns the current name filter. Used by konqueror to show it in the URL.
+ */
+ QString nameFilter() const
+ {
+ return m_nameFilter;
+ }
+
+ /**
+ * Don't use this. Always @returns an empty list. It only exists to silence moc.
+ */
+ QList<QUrl> filesToSelect() const
+ {
+ return QList<QUrl>();
+ }
protected:
/**
* We reimplement openUrl so no need to implement openFile.
*/
- virtual bool openFile() { return true; }
+ bool openFile() override
+ {
+ return true;
+ }
+
+Q_SIGNALS:
+ /**
+ * Emitted when the view mode changes. Used by konqueror.
+ */
+ void viewModeChanged();
+
+ /**
+ * Emitted whenever the current URL is about to be changed.
+ */
+ void aboutToOpenURL();
private Q_SLOTS:
- void slotCompleted(const KUrl& url);
- void slotCanceled(const KUrl& url);
- void slotInfoMessage(const QString& msg);
- void slotErrorMessage(const QString& msg);
+ void slotMessage(const QString &msg);
+ void slotErrorMessage(const QString &msg);
/**
* Shows the information for the item \a item inside the statusbar. If the
* item is null, the default statusbar information is shown.
*/
- void slotRequestItemInfo(const KFileItem& item);
+ void slotRequestItemInfo(const KFileItem &item);
/**
* Handles clicking on an item
*/
- void slotItemTriggered(const KFileItem& item);
+ void slotItemActivated(const KFileItem &item);
/**
- * Opens the context menu on the current mouse position.
- * @item File item context. If item is 0, the context menu
- * should be applied to \a url.
- * @url URL which contains \a item.
+ * Handles activation of multiple items
*/
- void slotOpenContextMenu(const KFileItem& item, const KUrl& url);
+ void slotItemsActivated(const KFileItemList &items);
/**
- * Emitted when the user requested a change of view mode
+ * Creates a new window showing the content of \a url.
*/
- void slotViewModeActionTriggered(QAction*);
-
+ void createNewWindow(const QUrl &url);
/**
- * Asks the host to open the URL \a url if the current view has
- * a different URL.
+ * Opens the context menu on the current mouse position.
+ * @pos Position in screen coordinates.
+ * @item File item context. If item is null, the context menu
+ * should be applied to \a url.
+ * @selectedItems The selected items for which the context menu
+ * is opened. This list generally includes \a item.
+ * @url URL which contains \a item.
*/
- void slotUrlChanged(const KUrl& url);
+ void slotOpenContextMenu(const QPoint &pos, const KFileItem &_item, const KFileItemList &selectedItems, const QUrl &);
/**
- * Updates the state of the 'Edit' menu actions and emits
- * the signal selectionChanged().
+ * Informs the host that we are opening \a url (e.g. after a redirection
+ * coming from KDirLister).
+ * Testcase 1: fish://localhost
+ * Testcase 2: showing a directory that is being renamed by another window (#180156)
*/
- void slotSelectionChanged(const KFileItemList& selection);
+ void slotDirectoryRedirection(const QUrl &oldUrl, const QUrl &newUrl);
/**
- * Same as in DolphinMainWindow: updates the view menu actions
+ * Updates the state of the 'Edit' menu actions and emits
+ * the signal selectionChanged().
*/
- void updateViewActions();
+ void slotSelectionChanged(const KFileItemList &selection);
/**
* Updates the text of the paste action dependent from
/**
* Connected to all "Go" menu actions provided by DolphinPart
*/
- void slotGoTriggered(QAction* action);
+ void slotGoTriggered(QAction *action);
/**
* Connected to the "editMimeType" action
void slotEditMimeType();
/**
- * Connected to the "properties" action
+ * Connected to the "select_items_matching" action.
+ * Opens a dialog which permits to select all items matching a pattern like "*.jpg".
*/
- void slotProperties();
+ void slotSelectItemsMatchingPattern();
-private:
- void createActions();
- void createGoAction(const char* name, const char* iconName,
- const QString& text, const QString& url,
- QActionGroup* actionGroup);
+ /**
+ * Connected to the "unselect_items_matching" action.
+ * Opens a dialog which permits to unselect all items matching a pattern like "*.jpg".
+ */
+ void slotUnselectItemsMatchingPattern();
-private:
- DolphinView* m_view;
- DolphinViewActionHandler* m_actionHandler;
- KDirLister* m_dirLister;
- DolphinModel* m_dolphinModel;
- DolphinSortFilterProxyModel* m_proxyModel;
- DolphinPartBrowserExtension* m_extension;
- Q_DISABLE_COPY(DolphinPart)
-};
+ /**
+ * Open a terminal window, starting with the current directory.
+ */
+ void slotOpenTerminal();
-class DolphinPartBrowserExtension : public KParts::BrowserExtension
-{
- Q_OBJECT
-public:
- DolphinPartBrowserExtension( DolphinPart* part )
- : KParts::BrowserExtension( part ), m_part(part) {}
+ /**
+ * Open preferred search tool in the current directory to find files.
+ */
+ void slotFindFile();
+
+ /**
+ * Updates the 'Create New...' sub menu, just before it's shown.
+ */
+ void updateNewMenu();
-public Q_SLOTS:
- void cut();
- void copy();
- void paste();
+ /**
+ * Updates the number of items (= number of files + number of
+ * directories) in the statusbar. If files are selected, the number
+ * of selected files and the sum of the filesize is shown.
+ */
+ void updateStatusBar();
+
+ /**
+ * Notify container of folder loading progress.
+ */
+ void updateProgress(int percent);
+
+ void createDirectory();
+
+ /**
+ * Called by konqueror --select
+ */
+ void setFilesToSelect(const QList<QUrl> &files);
+
+ bool eventFilter(QObject *, QEvent *) override;
+
+private:
+ void createActions();
+ void createGoAction(const char *name, const char *iconName, const QString &text, const QString &url, QActionGroup *actionGroup);
+
+ void openSelectionDialog(const QString &title, const QString &text, bool selectItems);
+ QString urlToLocalFilePath(const QUrl &url);
+ QString localFilePathOrHome() const;
private:
- DolphinPart* m_part;
+ DolphinView *m_view;
+ DolphinViewActionHandler *m_actionHandler;
+ DolphinRemoteEncoding *m_remoteEncoding;
+ DolphinPartBrowserExtension *m_extension;
+ DolphinNewFileMenu *m_newFileMenu;
+ QAction *m_findFileAction;
+ QAction *m_openTerminalAction;
+ QString m_nameFilter;
+ DolphinRemoveAction *m_removeAction;
+ Q_DISABLE_COPY(DolphinPart)
};
#endif /* DOLPHINPART_H */