┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/panels/information/informationpanel.h
diff options
context:
space:
mode:
authorPeter Penz <[email protected]>2009-01-14 20:14:36 +0000
committerPeter Penz <[email protected]>2009-01-14 20:14:36 +0000
commitf37ecd6ecfab9bc1d2929504b4f6e4363f8137b9 (patch)
tree22489a861bec9c228b87a8c714b8850ec05b3aa0 /src/panels/information/informationpanel.h
parent307285e9635a4bf584d6e5d7478876b90ef870f0 (diff)
Cleanup panel related class names: The terms "sidebar"/"sidebarpage" are relicts from the KDE 3 version of Dolphin and are called "Panels" in the KDE 4 version of Dolphin. Yes, renaming classes may take more than 1 year ;-)
svn path=/trunk/KDE/kdebase/apps/; revision=911089
Diffstat (limited to 'src/panels/information/informationpanel.h')
-rw-r--r--src/panels/information/informationpanel.h194
1 files changed, 194 insertions, 0 deletions
diff --git a/src/panels/information/informationpanel.h b/src/panels/information/informationpanel.h
new file mode 100644
index 000000000..527148ae8
--- /dev/null
+++ b/src/panels/information/informationpanel.h
@@ -0,0 +1,194 @@
+/***************************************************************************
+ * Copyright (C) 2006 by Peter Penz <[email protected]> *
+ * *
+ * 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 *
+ ***************************************************************************/
+
+#ifndef INFORMATIONPANEL_H
+#define INFORMATIONPANEL_H
+
+#include <panels/panel.h>
+
+#include <QtGui/QPushButton>
+#include <QtGui/QPixmap>
+#include <QtCore/QEvent>
+#include <QtGui/QLabel>
+#include <QtCore/QList>
+
+#include <kurl.h>
+#include <kmimetype.h>
+#include <kdesktopfileactions.h>
+#include <kvbox.h>
+
+class QPixmap;
+class QString;
+class KFileItem;
+class QLabel;
+class PixmapViewer;
+class MetaDataWidget;
+class MetaTextLabel;
+
+/**
+ * @brief Panel for showing meta information of one ore more selected items.
+ */
+class InformationPanel : public Panel
+{
+ Q_OBJECT
+
+public:
+ explicit InformationPanel(QWidget* parent = 0);
+ virtual ~InformationPanel();
+
+ /** @see QWidget::sizeHint() */
+ virtual QSize sizeHint() const;
+
+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.
+ */
+ void setSelection(const KFileItemList& selection);
+
+ /**
+ * Does a delayed request of information for the item \a item.
+ * If within this delay InformationPanel::setUrl() or InformationPanel::setSelection()
+ * are invoked, then the request will be skipped. Requesting a delayed item information
+ * makes sense when hovering items.
+ */
+ void requestDelayedItemInfo(const KFileItem& item);
+
+protected:
+ /** @see QWidget::showEvent() */
+ virtual void showEvent(QShowEvent* event);
+
+ /** @see QWidget::resizeEvent() */
+ virtual void resizeEvent(QResizeEvent* event);
+
+private slots:
+ /**
+ * Shows the information for the item of the URL which has been provided by
+ * InformationPanel::requestItemInfo() 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.
+ */
+ void markOutdatedPreview();
+
+ /**
+ * Is invoked if no preview is available for the item. In this
+ * case the icon will be shown.
+ */
+ void showIcon(const KFileItem& item);
+
+ /**
+ * Is invoked if a preview is available for the item. The preview
+ * \a pixmap is shown inside the info page.
+ */
+ void showPreview(const KFileItem& item, const QPixmap& pixmap);
+
+ 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();
+ */
+ bool showMultipleSelectionInfo() const;
+
+ /**
+ * Returns true, if \a url is equal to the shown URL m_shownUrl.
+ */
+ bool isEqualToShownUrl(const KUrl& 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).
+ */
+ void setNameLabelText(const QString& text);
+
+ 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)
+ KFileItemList m_selection;
+
+ QLabel* m_nameLabel;
+ PixmapViewer* m_preview;
+ MetaDataWidget* m_metaDataWidget;
+ MetaTextLabel* m_metaTextLabel;
+};
+
+#endif // INFORMATIONPANEL_H