]>
cloud.milkyroute.net Git - dolphin.git/blob - src/panels/information/metatextlabel.cpp
1 /***************************************************************************
2 * Copyright (C) 2008 by Peter Penz <peter.penz@gmx.at> *
4 * This program is free software; you can redistribute it and/or modify *
5 * it under the terms of the GNU General Public License as published by *
6 * the Free Software Foundation; either version 2 of the License, or *
7 * (at your option) any later version. *
9 * This program is distributed in the hope that it will be useful, *
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
12 * GNU General Public License for more details. *
14 * You should have received a copy of the GNU General Public License *
15 * along with this program; if not, write to the *
16 * Free Software Foundation, Inc., *
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
18 ***************************************************************************/
20 #include "metatextlabel.h"
22 #include <kglobalsettings.h>
26 #include <QTextLayout>
30 MetaTextLabel::MetaTextLabel(QWidget
* parent
) :
34 setFont(KGlobalSettings::smallestReadableFont());
38 MetaTextLabel::~MetaTextLabel()
42 void MetaTextLabel::clear()
49 void MetaTextLabel::add(const QString
& labelText
, const QString
& infoText
)
52 metaInfo
.label
= labelText
;
53 metaInfo
.info
= infoText
;
54 m_metaInfos
.append(metaInfo
);
56 setMinimumHeight(minimumHeight() + requiredHeight(metaInfo
));
60 void MetaTextLabel::paintEvent(QPaintEvent
* event
)
62 QWidget::paintEvent(event
);
64 QPainter
painter(this);
66 const QColor infoColor
= palette().color(QPalette::Foreground
);
67 QColor labelColor
= infoColor
;
68 labelColor
.setAlpha(128);
71 const int infoWidth
= width() / 2;
72 const int labelWidth
= infoWidth
- 2 * Spacing
;
73 const int infoX
= infoWidth
;
74 const int maxHeight
= maxHeightPerLine();
76 foreach (const MetaInfo
& metaInfo
, m_metaInfos
) {
77 // draw label (e. g. "Date:")
78 painter
.setPen(labelColor
);
79 painter
.drawText(0, y
, labelWidth
, maxHeight
,
80 Qt::AlignTop
| Qt::AlignRight
| Qt::TextWordWrap
,
83 // draw information (e. g. "2008-11-09 20:12")
84 painter
.setPen(infoColor
);
85 painter
.drawText(infoX
, y
, infoWidth
, maxHeight
,
86 Qt::AlignTop
| Qt::AlignLeft
| Qt::TextWordWrap
,
89 y
+= requiredHeight(metaInfo
);
93 void MetaTextLabel::resizeEvent(QResizeEvent
* event
)
95 QWidget::resizeEvent(event
);
97 int minimumHeight
= 0;
98 foreach (const MetaInfo
& metaInfo
, m_metaInfos
) {
99 minimumHeight
+= requiredHeight(metaInfo
);
101 setMinimumHeight(minimumHeight
);
104 int MetaTextLabel::requiredHeight(const MetaInfo
& metaInfo
) const
106 QTextOption textOption
;
107 textOption
.setWrapMode(QTextOption::WordWrap
);
110 const int leading
= fontMetrics().leading();
111 const int availableWidth
= width() / 2;
113 QTextLayout
textLayout(metaInfo
.info
);
114 textLayout
.setFont(font());
115 textLayout
.setTextOption(textOption
);
117 textLayout
.beginLayout();
118 QTextLine line
= textLayout
.createLine();
119 while (line
.isValid()) {
120 line
.setLineWidth(availableWidth
);
122 height
+= line
.height();
123 line
= textLayout
.createLine();
125 textLayout
.endLayout();
127 int adjustedHeight
= static_cast<int>(height
);
128 if (adjustedHeight
> maxHeightPerLine()) {
129 adjustedHeight
= maxHeightPerLine();
132 return adjustedHeight
+ Spacing
;
135 int MetaTextLabel::maxHeightPerLine() const
137 return fontMetrics().height() * 100;
140 #include "metatextlabel.moc"