]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/qt_helpers.cpp
Menus: Factor Toc code
[lyx.git] / src / frontends / qt4 / qt_helpers.cpp
index 71498e865cac312fd9240073ad4e6e7042da7fac..88c4ab9424e6b341b258583df99cbf721511ec52 100644 (file)
@@ -28,7 +28,6 @@
 
 #include "support/convert.h"
 #include "support/debug.h"
-#include "support/foreach.h"
 #include "support/gettext.h"
 #include "support/lstrings.h"
 #include "support/lyxalgo.h"
@@ -43,6 +42,9 @@
 #include <QLocale>
 #include <QPalette>
 #include <QSet>
+#include <QTextLayout>
+#include <QTextDocument>
+#include <QToolTip>
 
 #include <algorithm>
 #include <fstream>
@@ -547,7 +549,7 @@ FileFilterList::FileFilterList(docstring const & qt_style_filter)
 
                // Everything from the start of the input to
                // the start of the match.
-               parse_filter(string(what[-1].first, what[-1].second));
+               parse_filter(string(it, what[0].first));
 
                // Increment the iterator to the end of the match.
                it += distance(it, what[0].second);
@@ -648,4 +650,47 @@ QString guiName(string const & type, BufferParams const & bp)
 }
 
 
+QString formatToolTip(QString text, int em)
+{
+       // 1. QTooltip activates word wrapping only if mightBeRichText()
+       //    is true. So we convert the text to rich text.
+       //
+       // 2. The default width is way too small. Setting the width is tricky; first
+       //    one has to compute the ideal width, and then force it with special
+       //    html markup.
+
+       // do nothing if empty or already formatted
+       if (text.isEmpty() || text.startsWith(QString("<html>")))
+               return text;
+       // Convert to rich text if it is not already
+       if (!Qt::mightBeRichText(text))
+               text = Qt::convertFromPlainText(text, Qt::WhiteSpaceNormal);
+       // Compute desired width in pixels
+       QFont const font = QToolTip::font();
+       int const px_width = em * QFontMetrics(font).width("M");
+       // Determine the ideal width of the tooltip
+    QTextDocument td("");
+    td.setHtml(text);
+    td.setDefaultFont(QToolTip::font());
+    td.setTextWidth(px_width);
+    double best_width = td.idealWidth();
+       // Set the line wrapping with appropriate width
+       return QString("<html><body><table><tr>"
+                      "<td align=justify width=%1>%2</td>"
+                      "</tr></table></body></html>")
+               .arg(QString::number(int(best_width) + 1), text);
+       return text;
+}
+
+
+QString qtHtmlToPlainText(QString const & html)
+{
+       if (!Qt::mightBeRichText(html))
+               return html;
+       QTextDocument td;
+       td.setHtml(html);
+       return td.toPlainText();
+}
+
+
 } // namespace lyx