Added TextModifier class.
[situare] / src / ui / textmodifier.cpp
1 #include <QDebug>
2 #include <QFontMetrics>
3 #include <QStringList>
4
5 #include "textmodifier.h"
6
7 QString TextModifier::shortenText(const QFontMetrics fontMetrics, const QString &text,
8                                   int textMaxWidth)
9 {
10     qDebug() << __PRETTY_FUNCTION__;
11
12     QString copiedText = text;
13     int index = copiedText.indexOf('\n');
14
15     if (index >= 0) {
16         copiedText.truncate(index);
17         copiedText.append("...");
18     }
19
20     return fontMetrics.elidedText(copiedText, Qt::ElideRight, textMaxWidth);
21 }
22
23 QString TextModifier::splitWord(const QFontMetrics fontMetrics, const QString &word,
24                                 int textMaxWidth)
25 {
26     qDebug() << __PRETTY_FUNCTION__;
27
28     QString result;
29     QString temp;
30
31     for (int i = 0; i < word.length(); i++) {
32         if (fontMetrics.width(temp.append(word.at(i))) > textMaxWidth) {
33             result.append(temp.left(temp.length() - 1));
34             result.append(" ");
35             temp.remove(0, temp.length() - 1);
36         }
37     }
38
39     result.append(temp);
40
41     return result;
42 }
43
44 QString TextModifier::splitLongWords(const QFontMetrics fontMetrics, const QString &text,
45                                      int textMaxWidth)
46 {
47     qDebug() << __PRETTY_FUNCTION__;
48
49     QStringList list;
50     list = text.split(' ');
51
52     for (int i = 0; i < list.count(); i++) {
53         if (fontMetrics.width(list.at(i)) > textMaxWidth)
54             list.replace(i, splitWord(fontMetrics, list.at(i), textMaxWidth));
55     }
56
57     return list.join(" ");
58 }