X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2Fqt4%2Fqt_helpers.h;h=82a14383f396f51389a9b6e5a3da5272aaa548ee;hb=591d47a64b8ba894be5c793472397374d0496984;hp=9574965f41502f0ed97f69913cfe3312209e6764;hpb=9080c444582799a9967fb27a5eee08931bd3a323;p=lyx.git diff --git a/src/frontends/qt4/qt_helpers.h b/src/frontends/qt4/qt_helpers.h index 9574965f41..82a14383f3 100644 --- a/src/frontends/qt4/qt_helpers.h +++ b/src/frontends/qt4/qt_helpers.h @@ -12,20 +12,21 @@ #ifndef QTHELPERS_H #define QTHELPERS_H -#include - #include "lyxlength.h" -//#include "lengthcombo.h" - #include "support/docstring.h" +#include +#include + #include +#include -class LengthCombo; class QComboBox; class QLineEdit; -class QString; -class QChar; + +class LengthCombo; + +namespace lyx { std::string makeFontName(std::string const & family, std::string const & foundry); @@ -41,15 +42,18 @@ void lengthToWidgets(QLineEdit * input, LengthCombo * combo, std::string const & len, LyXLength::UNIT default_unit); /// format a string to the given width -lyx::docstring const formatted(lyx::docstring const & text, int w = 80); +docstring const formatted(docstring const & text, int w = 80); /** - * toqstr - convert char * into unicode + * toqstr - convert char * into Qt's unicode (UTF16) * * Use this whenever there's a user-visible string that is encoded * for the locale (menus, dialogs etc.) */ -QString const toqstr(char const * str); +inline QString const toqstr(char const * str) +{ + return QString::fromUtf8(str); +} /** @@ -58,33 +62,55 @@ QString const toqstr(char const * str); * Use this whenever there's a user-visible string that is encoded * for the locale (menus, dialogs etc.) */ -QString const toqstr(std::string const & str); +inline QString const toqstr(std::string const & str) +{ + return toqstr(str.c_str()); +} /** * toqstr - convert ucs4 into QString * - * QString uses ucs2 (a.k.a utf16) internally. + * QString uses utf16 internally. */ -QString const toqstr(lyx::docstring const & ucs4); +inline char_type const qchar_to_ucs4(QChar const & qchar) { + return static_cast(qchar.unicode()); +} + +inline QChar const ucs4_to_qchar(char_type const ucs4) { + // FIXME: The following cast is not a real conversion but it work + // for the ucs2 subrange of unicode. Instead of an assertion we should + // return some special characters that indicates that its display is + // not supported. + BOOST_ASSERT(ucs4 < 65536); + return QChar(static_cast(ucs4)); +} -QString const ucs4_to_qstring(lyx::char_type const * str, size_t ls); +QString const toqstr(docstring const & ucs4); -lyx::docstring const qstring_to_ucs4(QString const & qstr); +void ucs4_to_qstring(docstring const & str, QString & s); -void qstring_to_ucs4(QString const & qstr, std::vector & ucs4); +inline void ucs4_to_qstring(char_type const * str, size_t ls, QString & s) +{ + int i = static_cast(ls); + s.resize(i); + for (i ; --i >= 0; ) + s[i] = ucs4_to_qchar(str[i]); +} -lyx::char_type const qchar_to_ucs4(QChar const & qchar); -QChar const ucs4_to_qchar(lyx::char_type const & ucs4); +QString ucs4_to_qstring(docstring const & str); +docstring const qstring_to_ucs4(QString const & qstr); + +void qstring_to_ucs4(QString const & qstr, std::vector & ucs4); /** * qt_ - i18nize string and convert to unicode * * Use this in qt4/ instead of qt_() */ -QString const qt_(char const * str); +QString const qt_(char const * str, const char * comment); /** @@ -102,4 +128,7 @@ QString const qt_(std::string const & str); */ std::string const fromqstr(QString const & str); + +} // namespace lyx + #endif // QTHELPERS_H