/***************************************************************************
- * Copyright (C) 2007 by Peter Penz <peter.penz@gmx.at> *
+ * Copyright (C) 2007 by Peter Penz <peter.penz19@gmail.com> *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
***************************************************************************/
-
#ifndef DOLPHINVIEWCONTAINER_H
#define DOLPHINVIEWCONTAINER_H
-#include "dolphinview.h"
+#include "config-dolphin.h"
+#include "views/dolphinview.h"
-#include <kfileitem.h>
-#include <kfileitemdelegate.h>
-#include <kio/job.h>
+#include <KCompletion>
+#include <KFileItem>
+#include <KIO/Job>
+#include <KUrlNavigator>
-#include <kurlnavigator.h>
+#include <QElapsedTimer>
+#include <QPushButton>
+#include <QWidget>
-#include <QtGui/QKeyEvent>
-#include <QtCore/QLinkedList>
-#include <QtGui/QListView>
-#include <QtGui/QBoxLayout>
-#include <QtGui/QWidget>
+#ifdef KF5Activities_FOUND
+namespace KActivities {
+ class ResourceInstance;
+}
+#endif
class FilterBar;
-class KUrl;
-class DolphinModel;
+class KMessageWidget;
+class QUrl;
class KUrlNavigator;
-class DolphinDirLister;
-class DolphinMainWindow;
-class DolphinSortFilterProxyModel;
+class DolphinSearchBox;
class DolphinStatusBar;
-class QModelIndex;
/**
* @short Represents a view for the directory content
* including the navigation bar, filter bar and status bar.
*
- * View modes for icons, details and columns are supported. Currently
+ * View modes for icons, compact and details are supported. Currently
* Dolphin allows to have up to two views inside the main window.
*
* @see DolphinView
Q_OBJECT
public:
- DolphinViewContainer(DolphinMainWindow* mainwindow,
- QWidget *parent,
- const KUrl& url);
+ enum MessageType
+ {
+ Information,
+ Warning,
+ Error
+ };
- virtual ~DolphinViewContainer();
-
- /**
- * Sets the current active URL, where all actions are applied. The
- * URL navigator is synchronized with this URL. The signals
- * KUrlNavigator::urlChanged() and KUrlNavigator::historyChanged()
- * are emitted.
- * @see DolphinViewContainer::urlNavigator()
- */
- void setUrl(const KUrl& url);
+ DolphinViewContainer(const QUrl& url, QWidget* parent);
+ ~DolphinViewContainer() override;
/**
* Returns the current active URL, where all actions are applied.
* The URL navigator is synchronized with this URL.
*/
- const KUrl& url() const;
+ QUrl url() const;
/**
* If \a active is true, the view container will marked as active. The active
bool isActive() const;
/**
- * Triggers the renaming of the currently selected items, where
- * the user must input a new name for the items.
+ * If \a grab is set to true, the container automatically grabs the focus
+ * as soon as the URL has been changed. Per default the grabbing
+ * of the focus is enabled.
*/
- void renameSelectedItems();
+ void setAutoGrabFocus(bool grab);
+ bool autoGrabFocus() const;
+
+ QString currentSearchText() const;
- KFileItem fileItem(const QModelIndex& index) const;
+ const DolphinStatusBar* statusBar() const;
+ DolphinStatusBar* statusBar();
- inline const DolphinStatusBar* statusBar() const;
- inline DolphinStatusBar* statusBar();
+ const KUrlNavigator* urlNavigator() const;
+ KUrlNavigator* urlNavigator();
+
+ const DolphinView* view() const;
+ DolphinView* view();
/**
- * Returns true, if the URL shown by the navigation bar is editable.
- * @see KUrlNavigator
+ * Shows the message \msg with the given type non-modal above
+ * the view-content.
*/
- bool isUrlEditable() const;
-
- inline const KUrlNavigator* urlNavigator() const;
- inline KUrlNavigator* urlNavigator();
+ void showMessage(const QString& msg, MessageType type);
- inline const DolphinView* view() const;
- inline DolphinView* view();
+ /**
+ * Refreshes the view container to get synchronized with the (updated) Dolphin settings.
+ */
+ void readSettings();
/** Returns true, if the filter bar is visible. */
bool isFilterBarVisible() const;
/**
- * Return the DolphinMainWindow this View belongs to. It is guaranteed
- * that we have one.
+ * Enables the search mode, if \p enabled is true. In the search mode the URL navigator
+ * will be hidden and replaced by a line editor that allows to enter a search term.
+ */
+ void setSearchModeEnabled(bool enabled);
+ bool isSearchModeEnabled() const;
+
+ /**
+ * @return Text that should be used for the current URL when creating
+ * a new place.
+ */
+ QString placesText() const;
+
+ /**
+ * Reload the view of this container. This will also hide messages in a messagewidget.
*/
- inline const DolphinMainWindow* mainWindow() const;
+ void reload();
+
+ /**
+ * @return Returns a Caption suitable for display to the user. It is
+ * calculated depending on settings, if a search is active and other
+ * factors.
+ */
+ QString caption() const;
public slots:
/**
- * Popups the filter bar above the status bar if \a show is true.
+ * Sets the current active URL, where all actions are applied. The
+ * URL navigator is synchronized with this URL. The signals
+ * KUrlNavigator::urlChanged() and KUrlNavigator::historyChanged()
+ * are emitted.
+ * @see DolphinViewContainer::urlNavigator()
*/
- void showFilterBar(bool show);
+ void setUrl(const QUrl& url);
/**
- * 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.
+ * Popups the filter bar above the status bar if \a visible is true.
+ * It \a visible is true, it is assured that the filter bar gains
+ * the keyboard focus.
*/
- void updateStatusBar();
+ void setFilterBarVisible(bool visible);
signals:
/**
*/
void showFilterBarChanged(bool shown);
-private slots:
- void updateProgress(int percent);
+ /**
+ * Is emitted when the write state of the folder has been changed. The application
+ * should disable all actions like "Create New..." that depend on the write
+ * state.
+ */
+ void writeStateChanged(bool isFolderWritable);
+private slots:
/**
- * Updates the number of items (= number of directories + number of files)
- * and shows this information in the statusbar.
+ * 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. The update
+ * is done asynchronously, as getting the sum of the
+ * filesizes can be an expensive operation.
+ * Unless a previous OperationCompletedMessage was set very shortly before
+ * calling this method, it will be overwritten (see DolphinStatusBar::setMessage).
+ * Previous ErrorMessages however are always preserved.
*/
- void updateItemCount();
+ void delayedStatusBarUpdate();
/**
- * Handles clicking on an item
+ * Is invoked by DolphinViewContainer::delayedStatusBarUpdate() and
+ * updates the status bar synchronously.
*/
- void slotItemTriggered(const KFileItem& item);
+ void updateStatusBar();
+
+ void updateDirectoryLoadingProgress(int percent);
+
+ void updateDirectorySortingProgress(int percent);
/**
- * Shows the information for the item \a item inside the statusbar. If the
- * item is null, the default statusbar information is shown.
+ * Updates the statusbar to show an undetermined progress with the correct
+ * context information whether a searching or a directory loading is done.
*/
- void showItemInfo(const KFileItem& item);
+ void slotDirectoryLoadingStarted();
- /** Shows the information \a msg inside the statusbar. */
- void showInfoMessage(const QString& msg);
+ /**
+ * Assures that the viewport position is restored and updates the
+ * statusbar to reflect the current content.
+ */
+ void slotDirectoryLoadingCompleted();
- /** Shows the error message \a msg inside the statusbar. */
- void showErrorMessage(const QString& msg);
+ /**
+ * Updates the statusbar to show, that the directory loading has
+ * been canceled.
+ */
+ void slotDirectoryLoadingCanceled();
- void closeFilterBar();
+ /**
+ * Is called if the URL set by DolphinView::setUrl() represents
+ * a file and not a directory. Takes care to activate the file.
+ */
+ void slotUrlIsFileError(const QUrl& url);
/**
- * Filters the currently shown items by \a nameFilter. All items
- * which contain the given filter string will be shown.
+ * Handles clicking on an item. If the item is a directory, the
+ * directory is opened in the view. If the item is a file, the file
+ * gets started by the corresponding application.
*/
- void changeNameFilter(const QString& nameFilter);
+ 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 files. The files get started by
+ * the corresponding applications.
*/
- void openContextMenu(const KFileItem& item, const KUrl& url);
+ void slotItemsActivated(const KFileItemList& items);
/**
- * Saves the position of the contents to the
- * current history element.
+ * Shows the information for the item \a item inside the statusbar. If the
+ * item is null, the default statusbar information is shown.
*/
- void saveContentsPos(int x, int y);
+ void showItemInfo(const KFileItem& item);
+
+ void closeFilterBar();
/**
- * Restores the contents position of the view, if the view
- * is part of the history.
+ * Filters the currently shown items by \a nameFilter. All items
+ * which contain the given filter string will be shown.
*/
- void restoreContentsPos();
+ void setNameFilter(const QString& nameFilter);
/**
* Marks the view container as active
*/
void activate();
+ /**
+ * Is invoked if the signal urlAboutToBeChanged() from the URL navigator
+ * is emitted. Tries to save the view-state.
+ */
+ void slotUrlNavigatorLocationAboutToBeChanged(const QUrl& url);
+
/**
* Restores the current view to show \a url and assures
* that the root URL of the view is respected.
*/
- void restoreView(const KUrl& url);
+ void slotUrlNavigatorLocationChanged(const QUrl& url);
+
+ /**
+ * @see KUrlNavigator::urlSelectionRequested
+ */
+ void slotUrlSelectionRequested(const QUrl& url);
+
+ /**
+ * Is invoked when a redirection is done and changes the
+ * URL of the URL navigator to \a newUrl without triggering
+ * a reloading of the directory.
+ */
+ void redirect(const QUrl& oldUrl, const QUrl& newUrl);
+
+ /** Requests the focus for the view \a m_view. */
+ void requestFocus();
+
+ /**
+ * Saves the currently used URL completion mode of
+ * the URL navigator.
+ */
+ void saveUrlCompletionMode(KCompletion::CompletionMode completion);
+
+ void slotReturnPressed();
+
+ /**
+ * Gets the search URL from the searchbox and starts searching.
+ */
+ void startSearching();
+ void closeSearchBox();
-private:
/**
- * Returns the default text of the status bar, if no item is
- * selected.
+ * Stops the loading of a directory. Is connected with the "stopPressed" signal
+ * from the statusbar.
*/
- QString defaultStatusBarText() const;
+ void stopDirectoryLoading();
+
+ void slotStatusBarZoomLevelChanged(int zoomLevel);
/**
- * Returns the text for the status bar, if at least one item
- * is selected.
+ * Slot that calls showMessage(msg, Error).
*/
- QString selectionStatusBarText() const;
+ void showErrorMessage(const QString& msg);
private:
- bool m_showProgress;
+ /**
+ * @return True if the URL protocol is a search URL (e. g. baloosearch:// or filenamesearch://).
+ */
+ bool isSearchUrl(const QUrl& url) const;
- int m_iconSize;
- int m_folderCount;
- int m_fileCount;
+ /**
+ * Saves the state of the current view: contents position,
+ * root URL, ...
+ */
+ void saveViewState();
+
+ /**
+ * Restores the state of the current view iff the URL navigator contains a
+ * non-empty location state.
+ */
+ void tryRestoreViewState();
- DolphinMainWindow* m_mainWindow;
+private:
QVBoxLayout* m_topLayout;
+ QWidget* m_navigatorWidget;
KUrlNavigator* m_urlNavigator;
+ QPushButton* m_emptyTrashButton;
+ DolphinSearchBox* m_searchBox;
+ KMessageWidget* m_messageWidget;
DolphinView* m_view;
FilterBar* m_filterBar;
+
DolphinStatusBar* m_statusBar;
+ QTimer* m_statusBarTimer; // Triggers a delayed update
+ QElapsedTimer m_statusBarTimestamp; // Time in ms since last update
+ bool m_autoGrabFocus;
- DolphinModel* m_dolphinModel;
- DolphinDirLister* m_dirLister;
- DolphinSortFilterProxyModel* m_proxyModel;
+#ifdef KF5Activities_FOUND
+private:
+ KActivities::ResourceInstance * m_activityResourceInstance;
+#endif
};
-const DolphinStatusBar* DolphinViewContainer::statusBar() const
-{
- return m_statusBar;
-}
-
-DolphinStatusBar* DolphinViewContainer::statusBar()
-{
- return m_statusBar;
-}
-
-const KUrlNavigator* DolphinViewContainer::urlNavigator() const
-{
- return m_urlNavigator;
-}
-
-KUrlNavigator* DolphinViewContainer::urlNavigator()
-{
- return m_urlNavigator;
-}
-
-const DolphinView* DolphinViewContainer::view() const
-{
- return m_view;
-}
-
-DolphinView* DolphinViewContainer::view()
-{
- return m_view;
-}
-
-const DolphinMainWindow* DolphinViewContainer::mainWindow() const
-{
- return m_mainWindow;
-}
#endif // DOLPHINVIEWCONTAINER_H