X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/aed1525abcc82dc32852d2f875e49fc7e2fe0aac..87e8d0ba:/src/panels/information/informationpanel.h diff --git a/src/panels/information/informationpanel.h b/src/panels/information/informationpanel.h index bc37f812a..89a1bc3d2 100644 --- a/src/panels/information/informationpanel.h +++ b/src/panels/information/informationpanel.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2006 by Peter Penz * + * Copyright (C) 2006-2009 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 * @@ -21,30 +21,12 @@ #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 +class InformationPanelContent; +namespace KIO +{ + class Job; +} /** * @brief Panel for showing meta information of one ore more selected items. @@ -54,16 +36,13 @@ 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; +signals: + void urlActivated(const QUrl& url); public slots: - /** @see Panel::setUrl() */ - virtual void setUrl(const KUrl& url); - /** * This is invoked to inform the panel that the user has selected a new * set of items. @@ -79,17 +58,17 @@ public slots: void requestDelayedItemInfo(const KFileItem& item); 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: /** @@ -99,28 +78,23 @@ private slots: 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,14 +104,6 @@ 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(); @@ -147,41 +113,18 @@ private: */ 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); - - /** - * Resets the information panel to show the current - * URL (InformationPanel::url()). - */ - void reset(); + void markUrlAsInvalid(); void init(); @@ -189,21 +132,28 @@ 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; }; #endif // INFORMATIONPANEL_H