X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/f37ecd6ecfab9bc1d2929504b4f6e4363f8137b9..cebcf8db:/src/panels/information/informationpanel.h diff --git a/src/panels/information/informationpanel.h b/src/panels/information/informationpanel.h index 527148ae8..eda70759a 100644 --- a/src/panels/information/informationpanel.h +++ b/src/panels/information/informationpanel.h @@ -1,45 +1,21 @@ -/*************************************************************************** - * Copyright (C) 2006 by Peter Penz * - * * - * 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 * - * the Free Software Foundation; either version 2 of the License, or * - * (at your option) any later version. * - * * - * This program 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 General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * - ***************************************************************************/ +/* + * SPDX-FileCopyrightText: 2006-2009 Peter Penz + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ #ifndef INFORMATIONPANEL_H #define INFORMATIONPANEL_H -#include - -#include -#include -#include -#include -#include +#include "panels/panel.h" -#include -#include -#include -#include +#include -class QPixmap; -class QString; -class KFileItem; -class QLabel; -class PixmapViewer; -class MetaDataWidget; -class MetaTextLabel; +class InformationPanelContent; +namespace KIO +{ +class Job; +} /** * @brief Panel for showing meta information of one ore more selected items. @@ -49,21 +25,24 @@ class InformationPanel : public Panel Q_OBJECT public: - explicit InformationPanel(QWidget* parent = 0); - virtual ~InformationPanel(); + explicit InformationPanel(QWidget *parent = nullptr); + ~InformationPanel() override; - /** @see QWidget::sizeHint() */ - virtual QSize sizeHint() const; + /** + * Refreshes the view to get synchronized with the settings (e.g. icons size, + * font, ...). + */ + void readSettings() override; -public slots: - /** @see Panel::setUrl() */ - virtual void setUrl(const KUrl& url); +Q_SIGNALS: + void urlActivated(const QUrl &url); +public Q_SLOTS: /** * This is invoked to inform the panel that the user has selected a new * set of items. */ - void setSelection(const KFileItemList& selection); + void setSelection(const KFileItemList &selection); /** * Does a delayed request of information for the item \a item. @@ -71,124 +50,107 @@ public slots: * are invoked, then the request will be skipped. Requesting a delayed item information * makes sense when hovering items. */ - void requestDelayedItemInfo(const KFileItem& item); + void requestDelayedItemInfo(const KFileItem &item); + + void slotFilesItemChanged(const KFileItemList &changedFileItems); protected: + /** @see Panel::urlChanged() */ + bool urlChanged() override; + /** @see QWidget::showEvent() */ - virtual void showEvent(QShowEvent* event); + void showEvent(QShowEvent *event) override; /** @see QWidget::resizeEvent() */ - virtual void resizeEvent(QResizeEvent* event); + void resizeEvent(QResizeEvent *event) override; -private slots: + /** @see QWidget::contextMenuEvent() */ + void contextMenuEvent(QContextMenuEvent *event) override; + +private Q_SLOTS: /** * Shows the information for the item of the URL which has been provided by - * InformationPanel::requestItemInfo() and provides default actions. + * InformationPanel::requestDelayedItemInfo() and provides default actions. */ void showItemInfo(); /** - * Triggered if the request for item information has timed out. - * @see InformationPanel::requestDelayedItemInfo() - */ - void slotInfoTimeout(); - - /** - * Marks the currently shown preview as outdated - * by greying the content. + * Shows the information for the currently displayed folder as a result from + * a stat job issued in showItemInfo(). */ - void markOutdatedPreview(); + void slotFolderStatFinished(KJob *job); /** - * Is invoked if no preview is available for the item. In this - * case the icon will be shown. + * Triggered if the request for item information has timed out. + * @see InformationPanel::requestDelayedItemInfo() */ - void showIcon(const KFileItem& item); + void slotInfoTimeout(); /** - * Is invoked if a preview is available for the item. The preview - * \a pixmap is shown inside the info page. + * Resets the information panel to show the current + * URL (InformationPanel::url()). Is called by + * DolphinInformationPanel::markUrlAsInvalid(). */ - void showPreview(const KFileItem& item, const QPixmap& pixmap); + void reset(); - void slotFileRenamed(const QString& source, const QString& dest); - void slotFilesAdded(const QString& directory); - void slotFilesChanged(const QStringList& files); - void slotFilesRemoved(const QStringList& files); - void slotEnteredDirectory(const QString& directory); - void slotLeftDirectory(const QString& directory); + void slotFileRenamed(const QString &source, const QString &dest); + void slotFilesAdded(const QString &directory); + void slotFilesChanged(const QStringList &files); + void slotFilesRemoved(const QStringList &files); + void slotEnteredDirectory(const QString &directory); + void slotLeftDirectory(const QString &directory); private: - /** - * Checks whether the an URL is repesented by a place. If yes, - * then the place icon and name are shown instead of a preview. - * @return True, if the URL represents exactly a place. - * @param url The url to check. - */ - bool applyPlace(const KUrl& url); - /** Assures that any pending item information request is cancelled. */ void cancelRequest(); /** - * Shows the meta information for the current shown item inside - * a label. - */ - void showMetaInfo(); - - /** - * Converts the meta key \a key to a readable format into \a text. - * Returns true, if the string \a key represents a meta information - * that should be shown. If false is returned, \a text is not modified. - */ - bool convertMetaInfo(const QString& key, QString& text) const; - - /** - * Returns the item for file where the preview and meta information - * should be received, if InformationPanel::showMultipleSelectionInfo() - * returns false. - */ - KFileItem fileItem() const; - - /** - * Returns true, if the meta information should be shown for - * the multiple selected items that are stored in - * m_selection. If true is returned, it is assured that - * m_selection.count() > 1. If false is returned, the meta - * information should be shown for the file - * InformationPanel::fileUrl(); + * Returns true, if \a url is equal to the shown URL m_shownUrl. */ - bool showMultipleSelectionInfo() const; + bool isEqualToShownUrl(const QUrl &url) const; /** - * Returns true, if \a url is equal to the shown URL m_shownUrl. + * Marks the URL as invalid and will reset the Information Panel + * after a short delay. The reset is not done synchronously to + * prevent expensive updates during temporary invalid URLs by + * e. g. changing the directory. */ - bool isEqualToShownUrl(const KUrl& url) const; + void markUrlAsInvalid(); /** - * Sets the text for the label \a m_nameLabel and assures that the - * text is split in a way that it can be wrapped within the - * label width (QLabel::setWordWrap() does not work if the - * text represents one extremely long word). + * Opens a menu which allows to configure which meta information + * should be shown. */ - void setNameLabelText(const QString& text); + void showContextMenu(const QPoint &point); void init(); private: bool m_initialized; - bool m_pendingPreview; - QTimer* m_infoTimer; - QTimer* m_outdatedPreviewTimer; - KUrl m_shownUrl; // URL that is shown as info - KUrl m_urlCandidate; // URL candidate that will replace m_shownURL after a delay - KFileItem m_fileItem; // file item for m_shownUrl if available (otherwise null) + QTimer *m_infoTimer; + QTimer *m_urlChangedTimer; + QTimer *m_resetUrlTimer; + + // URL that is currently shown in the Information Panel. + QUrl m_shownUrl; + + // URL candidate that will replace m_shownURL after a delay. + // Used to remember URLs when hovering items. + QUrl m_urlCandidate; + + // URL candidate that is marked as invalid (e. g. because the directory + // has been deleted or the shown item has been renamed). The Information + // Panel will be reset asynchronously to prevent unnecessary resets when + // a directory has been changed. + QUrl m_invalidUrlCandidate; + + KFileItem m_hoveredItem; KFileItemList m_selection; - QLabel* m_nameLabel; - PixmapViewer* m_preview; - MetaDataWidget* m_metaDataWidget; - MetaTextLabel* m_metaTextLabel; + KIO::Job *m_folderStatJob; + + InformationPanelContent *m_content; + bool m_inConfigurationMode = false; }; #endif // INFORMATIONPANEL_H