X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2Fqt4%2Fqt_helpers.h;h=dd284a8655099af9de1b77028d41ad0993e43911;hb=425d092204118ea6c24c28e85fdf03fcf2bb51a4;hp=463e4eb7c4f77f42b4b1c2a97757283f63f016dc;hpb=e04c134ec2a373376cfd29f2f6d22d3b1db7ae78;p=lyx.git diff --git a/src/frontends/qt4/qt_helpers.h b/src/frontends/qt4/qt_helpers.h index 463e4eb7c4..dd284a8655 100644 --- a/src/frontends/qt4/qt_helpers.h +++ b/src/frontends/qt4/qt_helpers.h @@ -5,6 +5,7 @@ * Licence details can be found in the file COPYING. * * \author Dekel Tsur + * \author Richard Heck * * Full author contact details are available in file CREDITS. */ @@ -12,160 +13,132 @@ #ifndef QTHELPERS_H #define QTHELPERS_H -#include "lyxlength.h" -#include "support/docstring.h" +#include "Length.h" +#include "support/qstring_helpers.h" +#include "qt_i18n.h" -#include #include -#include -#include -#include - class QComboBox; class QLineEdit; +class QCheckBox; +class QString; +class QWidget; +template class QList; class LengthCombo; namespace lyx { -std::string makeFontName(std::string const & family, std::string const & foundry); +namespace support { class FileName; } + +class BufferParams; -std::pair parseFontName(std::string const & name); +namespace frontend { -/// method to get a LyXLength from widgets (LengthCombo) +/// method to get a Length from widgets (LengthCombo) std::string widgetsToLength(QLineEdit const * input, LengthCombo const * combo); -/// method to get a LyXLength from widgets (QComboBox) -LyXLength widgetsToLength(QLineEdit const * input, QComboBox const * combo); +/// method to get a Length from widgets (QComboBox) +Length widgetsToLength(QLineEdit const * input, QComboBox const * combo); -/// method to set widgets from a LyXLength +//FIXME It would be nice if defaultUnit were a default argument +/// method to set widgets from a Length void lengthToWidgets(QLineEdit * input, LengthCombo * combo, - std::string const & len, LyXLength::UNIT default_unit); - -/// format a string to the given width -docstring const formatted(docstring const & text, int w = 80); - - -/** - * toqstr - convert a UTF8 encoded char * into a QString - * - * This should not be used, since all possibly non-ASCII stuff should be - * stored in a docstring. - */ -inline QString const toqstr(char const * str) -{ - return QString::fromUtf8(str); -} - - -/** - * toqstr - convert a UTF8 encoded std::string into a QString - * - * This should not be used, since all possibly non-ASCII stuff should be - * stored in a docstring. - */ -inline QString const toqstr(std::string const & str) -{ - return toqstr(str.c_str()); -} - +Length const & len, Length::UNIT default_unit); +/// method to set widgets from a string +void lengthToWidgets(QLineEdit * input, LengthCombo * combo, +std::string const & len, Length::UNIT default_unit); +/// method to set widgets from a docstring +void lengthToWidgets(QLineEdit * input, LengthCombo * combo, +docstring const & len, Length::UNIT default_unit); -/** - * Convert a QChar into a UCS4 character. - * This is a hack (it does only make sense for the common part of the UCS4 - * and UTF16 encodings) and should not be used. - * This does only exist because of performance reasons (a real conversion - * using iconv is too slow on windows). - */ -inline char_type const qchar_to_ucs4(QChar const & qchar) -{ - return static_cast(qchar.unicode()); -} +/// method to get a double value from a localized widget (QLineEdit) +double widgetToDouble(QLineEdit const * input); +/// method to get a double value from a localized widget (QLineEdit) +std::string widgetToDoubleStr(QLineEdit const * input); +/// method to set a (localized) double value in a widget (QLineEdit) +void doubleToWidget(QLineEdit * input, double const & value, + char f = 'g', int prec = 6); +/// 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); +/// colors a widget red if invalid +void setValid(QWidget * widget, bool valid); -/** - * Convert a UCS4 character into a QChar. - * This is a hack (it does only make sense for the common part of the UCS4 - * and UTF16 encodings) and should not be used. - * This does only exist because of performance reasons (a real conversion - * using iconv is too slow on windows). - */ -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)); -} +} // namespace frontend /** - * toqstr - convert a UCS4 encoded docstring into a QString + * qt_ - i18nize string and convert to QString * - * This is the preferred method of converting anything that possibly - * contains non-ASCII stuff to QString. + * Use this in qt4/ instead of _() */ -#if QT_VERSION >= 0x040200 -inline QString const toqstr(docstring const & ucs4) -{ - // If possible we let qt do the work, since this version does not - // need to be superfast. - return QString::fromUcs4(reinterpret_cast(ucs4.data()), ucs4.length()); -} -#else -QString const toqstr(docstring const & ucs4); -#endif - +QString const qt_(std::string const & str); -/** - * ucs4_to_qstring - convert a UCS4 encoded char_type * into a QString - * - * This is a hack for the painter and font metrics and should not be used - * elsewhere. Since it uses ucs4_to_qchar it has the same limitations. +/// +support::FileName libFileSearch(QString const & dir, QString const & name, + QString const & ext = QString()); + +/** Wrapper around browseFile which tries to provide a filename + relative to relpath. If the relative path is of the form "foo.txt" + or "bar/foo.txt", then it is returned as relative. OTOH, if it is + of the form "../baz/foo.txt", an absolute path is returned. This is + intended to be useful for insets which encapsulate files/ +*/ +QString browseRelFile(QString const & filename, + QString const & refpath, + QString const & title, + QStringList const & filters, + bool save = false, + QString const & label1 = QString(), + QString const & dir1 = QString(), + QString const & label2 = QString(), + QString const & dir2 = QString()); + + +/** Build filelists of all availabe bst/cls/sty-files. Done through +* kpsewhich and an external script, saved in *Files.lst. +*/ +void rescanTexStyles(); + +/** Fill \c contents from one of the three texfiles. + * Each entry in the file list is returned as a name_with_path */ -inline void ucs4_to_qstring(char_type const * str, size_t ls, QString & s) -{ - int i = static_cast(ls); - s.resize(i); - for (; --i >= 0;) - s[i] = ucs4_to_qchar(str[i]); -} +QStringList texFileList(QString const & filename); +/// Convert internal line endings to line endings as expected by the OS +QString const externalLineEnding(docstring const & str); -/** - * qstring_to_ucs4 - convert a QString into a UCS4 encoded docstring - * - * This is the preferred method of converting anything that possibly - * contains non-ASCII stuff to docstring. - */ -docstring const qstring_to_ucs4(QString const & qstr); +/// Convert line endings in any formnat to internal line endings +docstring const internalLineEnding(QString const & str); +// wrapper around the docstring versions +QString internalPath(QString const &); +QString onlyFilename(QString const & str); +QString onlyPath(QString const & str); +QStringList fileFilters(QString const & description); -/** - * qt_ - i18nize string and convert to QString - * - * Use this in qt4/ instead of _() - */ -QString const qt_(char const * str, const char * comment = 0); +QString changeExtension(QString const & oldname, QString const & extension); +/// Remove the extension from \p name +QString removeExtension(QString const & name); -/** - * qt_ - i18nize string and convert to QString - * - * Use this in qt4/ instead of _() +/** Add the extension \p ext to \p name. + Use this instead of changeExtension if you know that \p name is without + extension, because changeExtension would wrongly interpret \p name if it + contains a dot. */ -QString const qt_(std::string const & str); +QString addExtension(QString const & name, QString const & extension); +/// Return the extension of the file (not including the .) +QString getExtension(QString const & name); +QString makeAbsPath(QString const & relpath, QString const & base); +QString changeExtension(QString const & oldname, QString const & ext); -/** - * fromqstr - convert a QString into a UTF8 encoded std::string - * - * This should not be used except for output to lyxerr, since all possibly - * non-ASCII stuff should be stored in a docstring. - */ -std::string const fromqstr(QString const & str); +/// \return the display string associated with given type and buffer +/// parameter. +QString guiName(std::string const & type, BufferParams const & bp); } // namespace lyx