┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/panels/information/metatextlabel.cpp
diff options
context:
space:
mode:
authorPeter Penz <[email protected]>2009-01-14 19:26:23 +0000
committerPeter Penz <[email protected]>2009-01-14 19:26:23 +0000
commit307285e9635a4bf584d6e5d7478876b90ef870f0 (patch)
treedb36cbbdc7996ab86c38be8f96fe83597d350dfb /src/panels/information/metatextlabel.cpp
parent86d9c40ab71df5b8bd5063251337d5ca0c22380a (diff)
Group classes into folders, Dolphin is too big in the meantime for having a flat directory hierarchy. dolphin/src/CMakeLists.txt will be cleaned up later.
svn path=/trunk/KDE/kdebase/apps/; revision=911065
Diffstat (limited to 'src/panels/information/metatextlabel.cpp')
-rw-r--r--src/panels/information/metatextlabel.cpp135
1 files changed, 135 insertions, 0 deletions
diff --git a/src/panels/information/metatextlabel.cpp b/src/panels/information/metatextlabel.cpp
new file mode 100644
index 000000000..66f12db90
--- /dev/null
+++ b/src/panels/information/metatextlabel.cpp
@@ -0,0 +1,135 @@
+/***************************************************************************
+ * Copyright (C) 2008 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 *
+ ***************************************************************************/
+
+#include "metatextlabel.h"
+
+#include <kglobalsettings.h>
+#include <klocale.h>
+
+#include <QPainter>
+#include <QTextLayout>
+#include <QTextLine>
+#include <kdebug.h>
+
+MetaTextLabel::MetaTextLabel(QWidget* parent) :
+ QWidget(parent),
+ m_minimumHeight(0),
+ m_metaInfos()
+{
+ setFont(KGlobalSettings::smallestReadableFont());
+}
+
+MetaTextLabel::~MetaTextLabel()
+{
+}
+
+void MetaTextLabel::clear()
+{
+ m_minimumHeight = 0;
+ m_metaInfos.clear();
+ update();
+}
+
+void MetaTextLabel::add(const QString& labelText, const QString& infoText)
+{
+ MetaInfo metaInfo;
+ metaInfo.label = labelText;
+ metaInfo.info = infoText;
+
+ m_metaInfos.append(metaInfo);
+
+ m_minimumHeight += requiredHeight(metaInfo);
+ setMinimumHeight(m_minimumHeight);
+
+ update();
+}
+
+void MetaTextLabel::paintEvent(QPaintEvent* event)
+{
+ QWidget::paintEvent(event);
+
+ QPainter painter(this);
+
+ const QColor infoColor = palette().color(QPalette::Foreground);
+ QColor labelColor = infoColor;
+ labelColor.setAlpha(128);
+
+ int y = 0;
+ const int infoWidth = width() / 2;
+ const int labelWidth = infoWidth - 2 * Spacing;
+ const int infoX = infoWidth;
+ const int maxHeight = fontMetrics().height() * 5;
+
+ QRect boundingRect;
+ foreach (const MetaInfo& metaInfo, m_metaInfos) {
+ // draw label (e. g. "Date:")
+ painter.setPen(labelColor);
+ painter.drawText(0, y, labelWidth, maxHeight,
+ Qt::AlignTop | Qt::AlignRight | Qt::TextWordWrap,
+ metaInfo.label);
+
+ // draw information (e. g. "2008-11-09 20:12")
+ painter.setPen(infoColor);
+ painter.drawText(infoX, y, infoWidth, maxHeight,
+ Qt::AlignTop | Qt::AlignLeft | Qt::TextWordWrap,
+ metaInfo.info,
+ &boundingRect);
+
+ y += boundingRect.height() + Spacing;
+ }
+}
+
+void MetaTextLabel::resizeEvent(QResizeEvent* event)
+{
+ QWidget::resizeEvent(event);
+
+ m_minimumHeight = 0;
+ foreach (const MetaInfo& metaInfo, m_metaInfos) {
+ m_minimumHeight += requiredHeight(metaInfo);
+ }
+ setMinimumHeight(m_minimumHeight);
+}
+
+int MetaTextLabel::requiredHeight(const MetaInfo& metaInfo) const
+{
+ QTextOption textOption;
+ textOption.setWrapMode(QTextOption::WrapAtWordBoundaryOrAnywhere);
+
+ qreal height = 0;
+ const int leading = fontMetrics().leading();
+ const int availableWidth = width() / 2;
+
+ QTextLayout textLayout(metaInfo.info);
+ textLayout.setFont(font());
+ textLayout.setTextOption(textOption);
+
+ textLayout.beginLayout();
+ QTextLine line = textLayout.createLine();
+ while (line.isValid()) {
+ line.setLineWidth(availableWidth);
+ height += leading;
+ height += line.height();
+ line = textLayout.createLine();
+ }
+ textLayout.endLayout();
+
+ return static_cast<int>(height) + Spacing;
+}
+
+#include "metatextlabel.moc"