X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/aed1525abcc82dc32852d2f875e49fc7e2fe0aac..e9bd295b:/src/panels/information/informationpanel.h diff --git a/src/panels/information/informationpanel.h b/src/panels/information/informationpanel.h index bc37f812a..d7f89bc9c 100644 --- a/src/panels/information/informationpanel.h +++ b/src/panels/information/informationpanel.h @@ -1,50 +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 -#include - -#include -#include -#include -#include - -class InformationPanelDialog; -class PhononWidget; -class PixmapViewer; -class MetaDataWidget; -class MetaTextLabel; -class QPixmap; -class QString; -class KFileItem; -class QLabel; -class QScrollArea; +#include "panels/panel.h" + +#include + +class InformationPanelContent; +namespace KIO +{ + class Job; +} /** * @brief Panel for showing meta information of one ore more selected items. @@ -54,16 +25,13 @@ class InformationPanel : public Panel Q_OBJECT public: - explicit InformationPanel(QWidget* parent = 0); - virtual ~InformationPanel(); - - /** @see QWidget::sizeHint() */ - virtual QSize sizeHint() const; + explicit InformationPanel(QWidget* parent = nullptr); + ~InformationPanel() 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. @@ -78,49 +46,46 @@ public slots: */ 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); - - /** @see QObject::eventFilter() */ - virtual bool eventFilter(QObject* obj, QEvent* event); + void resizeEvent(QResizeEvent* event) override; /** @see QWidget::contextMenuEvent() */ - virtual void contextMenuEvent(QContextMenuEvent* event); + void contextMenuEvent(QContextMenuEvent* event) override; -private slots: +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() + * Shows the information for the currently displayed folder as a result from + * a stat job issued in showItemInfo(). */ - void slotInfoTimeout(); + void slotFolderStatFinished(KJob* job); /** - * Marks the currently shown preview as outdated - * by greying the content. - */ - void markOutdatedPreview(); - - /** - * 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); @@ -130,80 +95,56 @@ private slots: 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(); - - /** - * 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(); - */ - bool showMultipleSelectionInfo() const; - /** * Returns true, if \a url is equal to the shown URL m_shownUrl. */ - bool isEqualToShownUrl(const KUrl& url) const; + bool isEqualToShownUrl(const QUrl& url) const; /** - * 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). + * 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. */ - void setNameLabelText(const QString& text); + void markUrlAsInvalid(); /** - * Resets the information panel to show the current - * URL (InformationPanel::url()). + * Opens a menu which allows to configure which meta information + * should be shown. */ - void reset(); + 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 + 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_fileItem; // file item for m_shownUrl if available (otherwise null) KFileItemList m_selection; - QLabel* m_nameLabel; - PixmapViewer* m_preview; - PhononWidget* m_phononWidget; - MetaDataWidget* m_metaDataWidget; - - QScrollArea* m_metaTextArea; - MetaTextLabel* m_metaTextLabel; + KIO::Job* m_folderStatJob; - QPointer m_dialog; + InformationPanelContent* m_content; + bool m_inConfigurationMode = false; }; #endif // INFORMATIONPANEL_H