┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/panels/information/informationpanelcontent.h
diff options
context:
space:
mode:
authorPeter Penz <[email protected]>2009-07-05 22:54:37 +0000
committerPeter Penz <[email protected]>2009-07-05 22:54:37 +0000
commitdc29afa688cf809f4506075107036f62fd139d31 (patch)
treefc667679e7261df935f378c8cf220cbf7038d560 /src/panels/information/informationpanelcontent.h
parentb4aacaf4d2a0f119176f491543261b62914d6be0 (diff)
The complexity of the class InformationPanel has grown a lot from KDE 4.0 to KDE 4.3. One main reason is that a lot of things are done now asynchronously with timers to prevent a blocking UI and unnecessary expensive operations.
To keep the Information Panel maintainable and prepared for future features a cleanup has been done. The whole user interface handling has been moved into the class InformationPanelContent that offers a straight forward interface: showItem(const KFileItem& item) and showItems(const KFileItemList& items). The class InformationPanel is responsible for calling those methods in a way that hovering items, changing directories, doing selections, rename and delete operations, ... don't result in calling showItem() 10 times per second. This cleanup won't be backported to KDE 4.3.x svn path=/trunk/KDE/kdebase/apps/; revision=991902
Diffstat (limited to 'src/panels/information/informationpanelcontent.h')
-rw-r--r--src/panels/information/informationpanelcontent.h139
1 files changed, 139 insertions, 0 deletions
diff --git a/src/panels/information/informationpanelcontent.h b/src/panels/information/informationpanelcontent.h
new file mode 100644
index 000000000..1277f31fa
--- /dev/null
+++ b/src/panels/information/informationpanelcontent.h
@@ -0,0 +1,139 @@
+/***************************************************************************
+ * Copyright (C) 2009 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 INFORMATIONPANELCONTENT_H
+#define INFORMATIONPANELCONTENT_H
+
+#include <panels/panel.h>
+
+#include <kconfig.h>
+#include <kurl.h>
+#include <kvbox.h>
+
+class PhononWidget;
+class PixmapViewer;
+class MetaDataWidget;
+class MetaTextLabel;
+class QPixmap;
+class QString;
+class KFileItem;
+class KSeparator;
+class QLabel;
+class QScrollArea;
+
+/**
+ * @brief Manages the widgets that display the meta information
+* for file items of the Information Panel.
+ */
+class InformationPanelContent : public Panel
+{
+ Q_OBJECT
+
+public:
+ explicit InformationPanelContent(QWidget* parent = 0);
+ virtual ~InformationPanelContent();
+
+ /**
+ * Shows the meta information for the item \p item.
+ * The preview of the item is generated asynchronously,
+ * the other meta informations are fetched synchronously.
+ */
+ void showItem(const KFileItem& item);
+
+ /**
+ * Shows the meta information for the items \p items.
+ */
+ void showItems(const KFileItemList& items);
+
+ /**
+ * Opens a menu which allows to configure which meta information
+ * should be shown.
+ */
+ void configureSettings();
+
+protected:
+ /** @see QObject::eventFilter() */
+ virtual bool eventFilter(QObject* obj, QEvent* event);
+
+private slots:
+ /**
+ * 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 slotPlayingStarted();
+ void slotPlayingStopped();
+
+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);
+
+ /**
+ * 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);
+
+ /**
+ * Assures that the settings for the meta information
+ * are initialized with proper default values.
+ */
+ void initMetaInfoSettings(KConfigGroup& group);
+
+ /**
+ * Temporary helper method for KDE 4.3 as we currently don't get
+ * translated labels for Nepmok literals: Replaces camelcase labels
+ * like "fileLocation" by "File Location:".
+ */
+ QString tunedLabel(const QString& label) const;
+
+ void init();
+
+private:
+ KFileItem m_item;
+
+ bool m_pendingPreview;
+ QTimer* m_outdatedPreviewTimer;
+ QLabel* m_nameLabel;
+
+ PixmapViewer* m_preview;
+ KSeparator* m_previewSeparator;
+ PhononWidget* m_phononWidget;
+ MetaDataWidget* m_metaDataWidget;
+ KSeparator* m_metaDataSeparator;
+
+ QScrollArea* m_metaTextArea;
+ MetaTextLabel* m_metaTextLabel;
+};
+
+#endif // INFORMATIONPANELCONTENT_H