]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/qt_helpers.cpp
Two separators collapse into one
[lyx.git] / src / frontends / qt4 / qt_helpers.cpp
index 5515af57c511a51b996b54d51160a934fbe58e28..2237d7d50711dfcb74d28f1749b23cee805b387b 100644 (file)
@@ -42,6 +42,9 @@
 #include <QLocale>
 #include <QPalette>
 #include <QSet>
+#include <QTextLayout>
+#include <QTextDocument>
+#include <QToolTip>
 
 #include <algorithm>
 #include <fstream>
@@ -546,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);
@@ -595,8 +598,18 @@ QStringList fileFilters(QString const & desc)
 
 QString guiName(string const & type, BufferParams const & bp)
 {
+       // Hardcoded types
        if (type == "tableofcontents")
                return qt_("Table of Contents");
+       if (type == "change")
+               return qt_("Changes");
+       if (type == "senseless")
+               return qt_("Senseless");
+       if (type == "citation")
+               return qt_("Citations");
+       if (type == "label")
+               return qt_("Labels and References");
+       // Customizable, but the corresponding insets have no layout definition
        if (type == "child")
                return qt_("Child Documents");
        if (type == "graphics")
@@ -605,30 +618,11 @@ QString guiName(string const & type, BufferParams const & bp)
                return qt_("Equations");
        if (type == "external")
                return qt_("External material");
-       if (type == "footnote")
-               return qt_("Footnotes");
-       if (type == "listing")
-               return qt_("Listings");
-       if (type == "index")
-               return qt_("Index Entries");
-       if (type == "marginalnote")
-               return qt_("Marginal notes");
        if (type == "math-macro")
                return qt_("Math macros");
        if (type == "nomencl")
                return qt_("Nomenclature Entries");
-       if (type == "note")
-               return qt_("Notes");
-       if (type == "citation")
-               return qt_("Citations");
-       if (type == "label")
-               return qt_("Labels and References");
-       if (type == "branch")
-               return qt_("Branches");
-       if (type == "change")
-               return qt_("Changes");
-       if (type == "senseless")
-               return qt_("Senseless");
+
        if (prefixIs(type, "index:")) {
                string const itype = split(type, ':');
                IndicesList const & indiceslist = bp.indiceslist();
@@ -639,11 +633,50 @@ QString guiName(string const & type, BufferParams const & bp)
                return toqstr(bformat(_("Index Entries (%1$s)"), indextype));
        }
 
-       FloatList const & floats = bp.documentClass().floats();
-       if (floats.typeExist(type))
-               return qt_(floats.getType(type).listName());
-
-       return qt_(type);
+       return toqstr(bp.documentClass().outlinerName(type));
+}
+
+
+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();
 }