]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/qt_helpers.cpp
Make a string translatable
[lyx.git] / src / frontends / qt4 / qt_helpers.cpp
index 593aa3b2ce28ed9c54358e2adefb63973c35b2e4..f7ec99b13169432163956b37b3e4402031e27710 100644 (file)
 
 #include "BufferParams.h"
 #include "FloatList.h"
-#include "IndicesList.h"
 #include "Language.h"
 #include "Length.h"
 #include "TextClass.h"
 
 #include "support/convert.h"
 #include "support/debug.h"
-#include "support/foreach.h"
 #include "support/gettext.h"
 #include "support/lstrings.h"
 #include "support/lyxalgo.h"
 #include "support/PathChanger.h"
 #include "support/Systemcall.h"
 
+#include <QApplication>
 #include <QCheckBox>
 #include <QComboBox>
 #include <QLineEdit>
 #include <QLocale>
 #include <QPalette>
 #include <QSet>
+#include <QTextLayout>
+#include <QTextDocument>
+#include <QToolTip>
 
 #include <algorithm>
 #include <fstream>
@@ -51,7 +53,6 @@
 // for FileFilter.
 // FIXME: Remove
 #include "support/regex.h"
-#include <boost/tokenizer.hpp>
 
 
 using namespace std;
@@ -213,6 +214,12 @@ QString formatLocFPNumber(double d)
 }
 
 
+bool ColorSorter(ColorCode lhs, ColorCode rhs)
+{
+       return compare_no_case(lcolor.getGUIName(lhs), lcolor.getGUIName(rhs)) < 0;
+}
+
+
 void setValid(QWidget * widget, bool valid)
 {
        if (valid) {
@@ -224,6 +231,27 @@ void setValid(QWidget * widget, bool valid)
        }
 }
 
+
+void focusAndHighlight(QAbstractItemView * w)
+{
+       w->setFocus();
+       w->setCurrentIndex(w->currentIndex());
+       w->scrollTo(w->currentIndex());
+}
+
+
+void setMessageColour(list<QWidget *> highlighted, list<QWidget *> plain)
+{
+       QPalette pal = QApplication::palette();
+       QPalette newpal(pal.color(QPalette::Active, QPalette::HighlightedText),
+                       pal.color(QPalette::Active, QPalette::Highlight));
+       for (QWidget * w : highlighted)
+               w->setPalette(newpal);
+       for (QWidget * w : plain)
+               w->setPalette(pal);
+}
+
+
 /// wrapper to hide the change of method name to setSectionResizeMode
 void setSectionResizeMode(QHeaderView * view,
     int logicalIndex, QHeaderView::ResizeMode mode) {
@@ -458,17 +486,12 @@ struct Filter
 Filter::Filter(docstring const & description, string const & globs)
        : desc_(description)
 {
-       typedef boost::tokenizer<boost::char_separator<char> > Tokenizer;
-       boost::char_separator<char> const separator(" ");
-
        // Given "<glob> <glob> ... *.{abc,def} <glob>", expand to
        //       "<glob> <glob> ... *.abc *.def <glob>"
        string const expanded_globs = convert_brace_glob(globs);
 
        // Split into individual globs.
-       vector<string> matches;
-       Tokenizer const tokens(expanded_globs, separator);
-       globs_ = vector<string>(tokens.begin(), tokens.end());
+       globs_ = getVectorFromString(expanded_globs, " ");
 }
 
 
@@ -483,11 +506,7 @@ QString Filter::toString() const
                s += " (";
        }
 
-       for (size_t i = 0; i != globs_.size(); ++i) {
-               if (i > 0)
-                       s += ' ';
-               s += toqstr(globs_[i]);
-       }
+       s += toqstr(getStringFromVector(globs_, " "));
 
        if (has_description)
                s += ')';
@@ -551,7 +570,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);
@@ -598,53 +617,45 @@ QStringList fileFilters(QString const & desc)
 }
 
 
-QString guiName(string const & type, BufferParams const & bp)
-{
-       if (type == "tableofcontents")
-               return qt_("Table of Contents");
-       if (type == "child")
-               return qt_("Child Documents");
-       if (type == "graphics")
-               return qt_("Graphics");
-       if (type == "equation")
-               return qt_("Equations");
-       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 == "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();
-               Index const * index = indiceslist.findShortcut(from_utf8(itype));
-               docstring indextype = _("unknown type!");
-               if (index)
-                       indextype = index->index();
-               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);
+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);
+}
+
+
+QString qtHtmlToPlainText(QString const & html)
+{
+       if (!Qt::mightBeRichText(html))
+               return html;
+       QTextDocument td;
+       td.setHtml(html);
+       return td.toPlainText();
 }