labelColor.setAlpha(128);
int y = 0;
- const int infoWidth = width() / 2;
- const int labelWidth = infoWidth - 2 * Spacing;
+ const int infoWidth = infoTextWidth();
+ const int labelWidth = labelTextWidth();
const int infoX = infoWidth;
const int maxHeight = maxHeightPerLine();
setMinimumHeight(minimumHeight);
}
-int MetaTextLabel::requiredHeight(const MetaInfo& metaInfo) const
+int MetaTextLabel::requiredHeight(const MetaInfo& info) const
+{
+ const int labelTextHeight = requiredHeight(info.label, labelTextWidth());
+ const int infoTextHeight = requiredHeight(info.info, infoTextWidth());
+ return qMax(labelTextHeight, infoTextHeight);
+}
+
+int MetaTextLabel::requiredHeight(const QString& text, int width) const
{
QTextOption textOption;
textOption.setWrapMode(QTextOption::WordWrap);
qreal height = 0;
const int leading = fontMetrics().leading();
- const int availableWidth = width() / 2;
- QTextLayout textLayout(metaInfo.info);
+ QTextLayout textLayout(text);
textLayout.setFont(font());
textLayout.setTextOption(textOption);
textLayout.beginLayout();
QTextLine line = textLayout.createLine();
while (line.isValid()) {
- line.setLineWidth(availableWidth);
+ line.setLineWidth(width);
height += leading;
height += line.height();
line = textLayout.createLine();
QList<MetaInfo> m_metaInfos;
/**
- * Returns the required height in pixels for \a metaInfo to
- * fit into the available width of the widget.
+ * Returns the required height in pixels for the
+ * label text and information text provided by \a info.
*/
- int requiredHeight(const MetaInfo& metaInfo) const;
+ int requiredHeight(const MetaInfo& info) const;
+
+ /** Helper method for requiredHeight(const MetaInfo& info). */
+ int requiredHeight(const QString& text, int width) const;
+ int labelTextWidth() const;
+ int infoTextWidth() const;
/**
* Returns the maximum height in pixels for the text of
int maxHeightPerLine() const;
};
+inline int MetaTextLabel::labelTextWidth() const
+{
+ return width() / 2 - 2 * Spacing;
+}
+
+inline int MetaTextLabel::infoTextWidth() const
+{
+ return width() / 2;
+}
+
#endif