X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2Fqt4%2Fqt_helpers.cpp;h=7f4c5d8fda1f8e1cccb18cc18553b97d3d58643c;hb=ee7dd4a11ea21851e7e32164c66b37d3bc8ac31d;hp=08b979d34dd7e902435a295c4b94209ffe10aed9;hpb=7c8a7ef67c54dc2920f24826012366c382f82229;p=lyx.git diff --git a/src/frontends/qt4/qt_helpers.cpp b/src/frontends/qt4/qt_helpers.cpp index 08b979d34d..7f4c5d8fda 100644 --- a/src/frontends/qt4/qt_helpers.cpp +++ b/src/frontends/qt4/qt_helpers.cpp @@ -4,7 +4,7 @@ * Licence details can be found in the file COPYING. * * \author Dekel Tsur - * \author Jürgen Spitzmüller + * \author Jürgen Spitzmüller * \author Richard Heck * * Full author contact details are available in file CREDITS. @@ -19,9 +19,13 @@ #include "frontends/alert.h" +#include "BufferParams.h" +#include "FloatList.h" #include "Language.h" #include "Length.h" +#include "TextClass.h" +#include "support/convert.h" #include "support/debug.h" #include "support/filetools.h" #include "support/foreach.h" @@ -36,6 +40,7 @@ #include #include #include +#include #include #include @@ -45,7 +50,7 @@ // for FileFilter. // FIXME: Remove -#include +#include "support/regex.h" #include @@ -54,12 +59,6 @@ using namespace lyx::support; namespace lyx { -LyXErr & operator<<(LyXErr & err, QString const & str) -{ - return err << fromqstr(str); -} - - FileName libFileSearch(QString const & dir, QString const & name, QString const & ext) { @@ -81,7 +80,7 @@ string widgetsToLength(QLineEdit const * input, LengthCombo const * combo) Length::UNIT const unit = combo->currentLengthItem(); - return Length(length.toDouble(), unit).asString(); + return Length(length.trimmed().toDouble(), unit).asString(); } @@ -95,9 +94,16 @@ Length widgetsToLength(QLineEdit const * input, QComboBox const * combo) if (isValidGlueLength(fromqstr(length))) return Length(fromqstr(length)); - Length::UNIT const unit = unitFromString(fromqstr(combo->currentText())); + Length::UNIT unit = Length::UNIT_NONE; + QString const item = combo->currentText(); + for (int i = 0; i < num_units; i++) { + if (qt_(lyx::unit_name_gui[i]) == item) { + unit = unitFromString(unit_name[i]); + break; + } + } - return Length(length.toDouble(), unit); + return Length(length.trimmed().toDouble(), unit); } @@ -105,7 +111,9 @@ void lengthToWidgets(QLineEdit * input, LengthCombo * combo, Length const & len, Length::UNIT /*defaultUnit*/) { combo->setCurrentItem(len.unit()); - input->setText(QString::number(Length(len).value())); + QLocale loc; + loc.setNumberOptions(QLocale::OmitGroupSeparator); + input->setText(loc.toString(Length(len).value())); } @@ -126,13 +134,44 @@ void lengthToWidgets(QLineEdit * input, LengthCombo * combo, } -void lengthAutoToWidgets(QLineEdit * input, LengthCombo * combo, - Length const & len, Length::UNIT defaultUnit) +void lengthToWidgets(QLineEdit * input, LengthCombo * combo, + docstring const & len, Length::UNIT defaultUnit) +{ + lengthToWidgets(input, combo, to_utf8(len), defaultUnit); +} + + +double widgetToDouble(QLineEdit const * input) +{ + QString const text = input->text(); + if (text.isEmpty()) + return 0.0; + + return text.trimmed().toDouble(); +} + + +string widgetToDoubleStr(QLineEdit const * input) { - if (len.value() == 0) - lengthToWidgets(input, combo, "auto", defaultUnit); - else - lengthToWidgets(input, combo, len, defaultUnit); + QString const text = input->text(); + if (text.isEmpty()) + return string(); + + return convert(text.trimmed().toDouble()); +} + + +void doubleToWidget(QLineEdit * input, double const & value, char f, int prec) +{ + QLocale loc; + loc.setNumberOptions(QLocale::OmitGroupSeparator); + input->setText(loc.toString(value, f, prec)); +} + + +void doubleToWidget(QLineEdit * input, string const & value, char f, int prec) +{ + doubleToWidget(input, convert(value), f, prec); } @@ -160,72 +199,6 @@ QString const qt_(string const & str) return toqstr(_(str)); } -namespace { - -class Sorter -{ -public: -#if !defined(USE_WCHAR_T) && defined(__GNUC__) - bool operator()(LanguagePair const & lhs, LanguagePair const & rhs) const - { - return lhs.first < rhs.first; - } -#else - Sorter() : loc_ok(true) - { - try { - loc_ = locale(""); - } catch (...) { - loc_ok = false; - } - } - - bool operator()(LanguagePair const & lhs, LanguagePair const & rhs) const - { - // FIXME: would that be "QString::localeAwareCompare()"? - if (loc_ok) - return loc_(fromqstr(lhs.first), fromqstr(rhs.first)); - else - return lhs.first < rhs.first; - } -private: - locale loc_; - bool loc_ok; -#endif -}; - - -} // namespace anon - - -QList languageData(bool character_dlg) -{ - size_t const offset = character_dlg ? 2 : 0; - vector langs(languages.size() + offset); - - if (character_dlg) { - langs[0].first = qt_("No change"); - langs[0].second = "ignore"; - langs[1].first = qt_("Reset"); - langs[1].second = "reset"; - } - - Languages::const_iterator it = languages.begin(); - for (size_t i = 0; i != languages.size(); ++i, ++it) { - langs[i + offset].first = qt_(it->second.display()); - langs[i + offset].second = toqstr(it->second.lang()); - } - - // Don't sort "ignore" and "reset" - vector::iterator begin = langs.begin() + offset; - sort(begin, langs.end(), Sorter()); - - QList list; - foreach (LanguagePair const & l, langs) - list.append(l); - return list; -} - void rescanTexStyles() { @@ -240,7 +213,7 @@ void rescanTexStyles() return; // FIXME UNICODE frontend::Alert::error(_("Could not update TeX information"), - bformat(_("The script `%s' failed."), from_utf8(command.absFilename()))); + bformat(_("The script `%1$s' failed."), from_utf8(command.absFileName()))); } @@ -270,6 +243,27 @@ QStringList texFileList(QString const & filename) return QList::fromSet(set); } +QString const externalLineEnding(docstring const & str) +{ +#ifdef Q_WS_MACX + // The MAC clipboard uses \r for lineendings, and we use \n + return toqstr(subst(str, '\n', '\r')); +#elif defined(Q_WS_WIN) + // Windows clipboard uses \r\n for lineendings, and we use \n + return toqstr(subst(str, from_ascii("\n"), from_ascii("\r\n"))); +#else + return toqstr(str); +#endif +} + + +docstring const internalLineEnding(QString const & str) +{ + docstring const s = subst(qstring_to_ucs4(str), + from_ascii("\r\n"), from_ascii("\n")); + return subst(s, '\r', '\n'); +} + QString internalPath(const QString & str) { @@ -277,9 +271,9 @@ QString internalPath(const QString & str) } -QString onlyFilename(const QString & str) +QString onlyFileName(const QString & str) { - return toqstr(support::onlyFilename(fromqstr(str))); + return toqstr(support::onlyFileName(fromqstr(str))); } @@ -324,7 +318,7 @@ QString getExtension(QString const & name) QString makeAbsPath(QString const & relpath, QString const & base) { return toqstr(support::makeAbsPath(fromqstr(relpath), - fromqstr(base)).absFilename()); + fromqstr(base)).absFileName()); } @@ -344,17 +338,17 @@ static string const convert_brace_glob(string const & glob) { // Matches " *.{abc,def,ghi}", storing "*." as group 1 and // "abc,def,ghi" as group 2. - static boost::regex const glob_re(" *([^ {]*)\\{([^ }]+)\\}"); + static lyx::regex const glob_re(" *([^ {]*)\\{([^ }]+)\\}"); // Matches "abc" and "abc,", storing "abc" as group 1. - static boost::regex const block_re("([^,}]+),?"); + static lyx::regex const block_re("([^,}]+),?"); string pattern; string::const_iterator it = glob.begin(); string::const_iterator const end = glob.end(); while (true) { - boost::match_results what; - if (!boost::regex_search(it, end, what, glob_re)) { + match_results what; + if (!regex_search(it, end, what, glob_re)) { // Ensure that no information is lost. pattern += string(it, end); break; @@ -371,7 +365,7 @@ static string const convert_brace_glob(string const & glob) // Split the ','-separated chunks of tail so that // $head{$chunk1,$chunk2} becomes "$head$chunk1 $head$chunk2". string const fmt = " " + head + "$1"; - pattern += boost::regex_merge(tail, block_re, fmt); + pattern += regex_replace(tail, block_re, fmt); // Increment the iterator to the end of the match. it += distance(it, what[0].second); @@ -480,14 +474,14 @@ FileFilterList::FileFilterList(docstring const & qt_style_filter) // Split data such as "TeX documents (*.tex);;LyX Documents (*.lyx)" // into individual filters. - static boost::regex const separator_re(";;"); + static lyx::regex const separator_re(";;"); string::const_iterator it = filter.begin(); string::const_iterator const end = filter.end(); while (true) { - boost::match_results what; + match_results what; - if (!boost::regex_search(it, end, what, separator_re)) { + if (!lyx::regex_search(it, end, what, separator_re)) { parse_filter(string(it, end)); break; } @@ -506,10 +500,10 @@ void FileFilterList::parse_filter(string const & filter) { // Matches "TeX documents (*.tex)", // storing "TeX documents " as group 1 and "*.tex" as group 2. - static boost::regex const filter_re("([^(]*)\\(([^)]+)\\) *$"); + static lyx::regex const filter_re("([^(]*)\\(([^)]+)\\) *$"); - boost::match_results what; - if (!boost::regex_search(filter, what, filter_re)) { + match_results what; + if (!lyx::regex_search(filter, what, filter_re)) { // Just a glob, no description. filters_.push_back(Filter(docstring(), trim(filter))); } else { @@ -530,14 +524,52 @@ QStringList fileFilters(QString const & desc) // we have: "*.{gif,png,jpg,bmp,pbm,ppm,tga,tif,xpm,xbm}" // but need: "*.cpp;*.cc;*.C;*.cxx;*.c++" FileFilterList filters(qstring_to_ucs4(desc)); - LYXERR0("DESC: " << desc); + //LYXERR0("DESC: " << desc); QStringList list; for (size_t i = 0; i != filters.filters_.size(); ++i) { QString f = filters.filters_[i].toString(); - LYXERR0("FILTER: " << f); + //LYXERR0("FILTER: " << f); list.append(f); } return list; } + +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_("List of Graphics"); + if (type == "equation") + return qt_("List of Equations"); + if (type == "footnote") + return qt_("List of Footnotes"); + if (type == "listing") + return qt_("List of Listings"); + if (type == "index") + return qt_("List of Indexes"); + if (type == "marginalnote") + return qt_("List of Marginal notes"); + if (type == "note") + return qt_("List of Notes"); + if (type == "citation") + return qt_("List of Citations"); + if (type == "label") + return qt_("Labels and References"); + if (type == "branch") + return qt_("List of Branches"); + if (type == "change") + return qt_("List of Changes"); + + FloatList const & floats = bp.documentClass().floats(); + if (floats.typeExist(type)) + return qt_(floats.getType(type).listName()); + + return qt_(type); +} + + } // namespace lyx