]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/qt_helpers.h
Use <cstdint> instead of <boost/cstdint.hpp>
[lyx.git] / src / frontends / qt4 / qt_helpers.h
index 4b4796777b51d01858f4f02b2d938e95813d6771..52057fc494af2f7d38ec65a90a7fcaf8e87771b5 100644 (file)
 
 #include "ColorSet.h"
 #include "Length.h"
-#include "support/lstrings.h"
 #include "support/qstring_helpers.h"
 #include "support/filetools.h"
 #include "qt_i18n.h"
 
+#include <list>
+
 #include <QHeaderView>
 
 class QComboBox;
@@ -34,17 +35,11 @@ namespace lyx {
 namespace support { class FileName; }
 
 class BufferParams;
+
 namespace frontend {
 
 class LengthCombo;
 
-struct ColorSorter {
-       bool operator()(ColorCode lhs, ColorCode rhs) const {
-               return  support::compare_no_case(lcolor.getGUIName(lhs), lcolor.getGUIName(rhs)) < 0;
-       }
-};
-
 /// method to get a Length from widgets (LengthCombo)
 std::string widgetsToLength(QLineEdit const * input, LengthCombo const * combo);
 /// method to get a Length from widgets (QComboBox)
@@ -55,11 +50,11 @@ Length widgetsToLength(QLineEdit const * input, QComboBox const * combo);
 // all the code to remove default_unit argument when equal to the
 // default.
 void lengthToWidgets(QLineEdit * input, LengthCombo * combo,
-                    Length const & len, 
+                    Length const & len,
                     Length::UNIT default_unit = Length::defaultUnit());
 /// method to set widgets from a string
 void lengthToWidgets(QLineEdit * input, LengthCombo * combo,
-                    std::string const & len, 
+                    std::string const & len,
                     Length::UNIT default_unit = Length::defaultUnit());
 /// method to set widgets from a docstring
 void lengthToWidgets(QLineEdit * input, LengthCombo * combo,
@@ -75,10 +70,29 @@ void doubleToWidget(QLineEdit * input, double const & value,
 /// method to set a (localized) double value in a widget (QLineEdit)
 void doubleToWidget(QLineEdit * input, std::string const & value,
        char f = 'g', int prec = 6);
+/**
+ * method to format localized floating point numbers without
+ * ever using scientific notation
+ */
+QString formatLocFPNumber(double d);
+
+/// Method to sort QStrings locale-aware (e.g. in combo widgets)
+bool SortLocaleAware(QString const & lhs, QString const & rhs);
+
+/// Method to sort colors by GUI name in combo widgets
+bool ColorSorter(ColorCode lhs, ColorCode rhs);
 
 /// colors a widget red if invalid
 void setValid(QWidget * widget, bool valid);
 
+// set focus and highlight the current item if there is no selection already
+void focusAndHighlight(QAbstractItemView * w);
+
+// Sets all widget in highlighted in highlighted colour, and their children in
+// plain in standard colours.
+void setMessageColour(std::list<QWidget *> highlighted,
+                      std::list<QWidget *> plain);
+
 /// Qt5 changed setSectionMode to setSectionResizeMode
 /// These wrappers work for Qt4 and Qt5
 void setSectionResizeMode(QHeaderView * view,
@@ -112,18 +126,18 @@ support::FileName imageLibFileSearch(QString & dir, QString const & name,
        relative to relpath.
 
 \param title: title for dialog
-       
+
 \param filters: *.ps, etc
 
 \param save: whether to save dialog info (current path, etc) for next use.
 
-The \param labelN and \param dirN arguments provide for extra buttons 
+The \param labelN and \param dirN arguments provide for extra buttons
 in the dialog (e.g., "Templates" and a path to that directory).
 
-The difference between the functions concerns when we think we have a 
-relative path. 
+The difference between the functions concerns when we think we have a
+relative path.
 
-In \c browseRelToParent, we return a relative path only if it IS NOT of 
+In \c browseRelToParent, we return a relative path only if it IS NOT of
        the form "../../foo.txt".
 
 In \c browseRelToSub, we return a relative path only if it IS of the
@@ -190,9 +204,46 @@ QString getExtension(QString const & name);
 QString makeAbsPath(QString const & relpath, QString const & base);
 QString changeExtension(QString const & oldname, QString const & ext);
 
-/// \return the display string associated with given type and buffer
-/// parameter.
-QString guiName(std::string const & type, BufferParams const & bp);
+/// Format \param text for display as a ToolTip, breaking at lines of \param
+/// width ems. Note: this function is expensive. Better call it in a delayed
+/// manner, i.e. not to fill in a model (see for instance the function
+/// ToolTipFormatter::eventFilter).
+///
+/// When is it called automatically? Whenever the tooltip is not already rich
+/// text beginning with <html>, and is defined by the following functions:
+///  - QWidget::setToolTip(),
+///  - QAbstractItemModel::setData(..., Qt::ToolTipRole),
+///  - Inset::toolTip()
+///
+/// In other words, tooltips can use Qt html, and the tooltip will still be
+/// correctly broken. Moreover, it is possible to specify an entirely custom
+/// tooltip (not subject to automatic formatting) by giving it in its entirety,
+/// i.e. starting with <html>.
+QString formatToolTip(QString text, int width = 30);
+
+
+#if QT_VERSION < 0x050300
+// Very partial implementation of QSignalBlocker for archaic qt versions.
+class QSignalBlocker {
+public:
+       explicit QSignalBlocker(QObject * o)
+               : obj(o), init_state(obj && obj->blockSignals(true)) {}
+
+       ~QSignalBlocker() {
+               if (obj)
+                       obj->blockSignals(init_state);
+       }
+private:
+       QObject * obj;
+       bool init_state;
+};
+#endif
+
+
+// Check if qstr is understood as rich text (Qt HTML) and if so, produce a
+// rendering in plain text.
+QString qtHtmlToPlainText(QString const & qstr);
+
 
 } // namespace lyx