Added TextModifier class.
[situare] / src / ui / textmodifier.cpp
diff --git a/src/ui/textmodifier.cpp b/src/ui/textmodifier.cpp
new file mode 100644 (file)
index 0000000..40f4382
--- /dev/null
@@ -0,0 +1,58 @@
+#include <QDebug>
+#include <QFontMetrics>
+#include <QStringList>
+
+#include "textmodifier.h"
+
+QString TextModifier::shortenText(const QFontMetrics fontMetrics, const QString &text,
+                                  int textMaxWidth)
+{
+    qDebug() << __PRETTY_FUNCTION__;
+
+    QString copiedText = text;
+    int index = copiedText.indexOf('\n');
+
+    if (index >= 0) {
+        copiedText.truncate(index);
+        copiedText.append("...");
+    }
+
+    return fontMetrics.elidedText(copiedText, Qt::ElideRight, textMaxWidth);
+}
+
+QString TextModifier::splitWord(const QFontMetrics fontMetrics, const QString &word,
+                                int textMaxWidth)
+{
+    qDebug() << __PRETTY_FUNCTION__;
+
+    QString result;
+    QString temp;
+
+    for (int i = 0; i < word.length(); i++) {
+        if (fontMetrics.width(temp.append(word.at(i))) > textMaxWidth) {
+            result.append(temp.left(temp.length() - 1));
+            result.append(" ");
+            temp.remove(0, temp.length() - 1);
+        }
+    }
+
+    result.append(temp);
+
+    return result;
+}
+
+QString TextModifier::splitLongWords(const QFontMetrics fontMetrics, const QString &text,
+                                     int textMaxWidth)
+{
+    qDebug() << __PRETTY_FUNCTION__;
+
+    QStringList list;
+    list = text.split(' ');
+
+    for (int i = 0; i < list.count(); i++) {
+        if (fontMetrics.width(list.at(i)) > textMaxWidth)
+            list.replace(i, splitWord(fontMetrics, list.at(i), textMaxWidth));
+    }
+
+    return list.join(" ");
+}