From: André Pönitz Date: Sat, 8 Mar 2008 07:59:47 +0000 (+0000) Subject: less string conversions as long as we stay in the frontend X-Git-Tag: 1.6.10~5797 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=be624b3de0df348047ac2db05d27dbf16ec56e07;p=features.git less string conversions as long as we stay in the frontend git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@23552 a592a061-630c-0410-9148-cb99ea01b6c8 --- diff --git a/src/frontends/qt4/GuiBibtex.cpp b/src/frontends/qt4/GuiBibtex.cpp index 15d84ea45c..946490c59d 100644 --- a/src/frontends/qt4/GuiBibtex.cpp +++ b/src/frontends/qt4/GuiBibtex.cpp @@ -133,8 +133,7 @@ void GuiBibtex::browsePressed() if (file.isEmpty()) return; - // FIXME UNICODE - QString const filen = toqstr(changeExtension(fromqstr(file), "")); + QString const filen = changeExtension(file, ""); bool present = false; unsigned int pres = 0; @@ -160,7 +159,7 @@ void GuiBibtex::browseBibPressed() if (file.isEmpty()) return; - QString const f = toqstr(changeExtension(fromqstr(file), "")); + QString const f = changeExtension(file, ""); bool present = false; for (int i = 0; i < add_->bibLW->count(); ++i) { @@ -213,7 +212,7 @@ void GuiBibtex::addDatabase() if (!file.isEmpty()) { add_->bibED->clear(); - QString const f = toqstr(changeExtension(fromqstr(file), "")); + QString const f = changeExtension(file, ""); QList matches = databaseLW->findItems(f, Qt::MatchExactly); if (matches.empty()) { @@ -304,15 +303,11 @@ void GuiBibtex::updateContents() add_->bibLW->clear(); - vector bib_str; - getBibFiles(bib_str); - for (vector::const_iterator it = bib_str.begin(); - it != bib_str.end(); ++it) { - string bibItem(changeExtension(*it, "")); - add_->bibLW->addItem(toqstr(bibItem)); - } + QStringList bibfiles = bibFiles(); + for (int i = 0; i != bibfiles.count(); ++i) + add_->bibLW->addItem(changeExtension(bibfiles[i], "")); - string bibstyle = getStylefile(); + QString bibstyle = styleFile(); bibtocCB->setChecked(bibtotoc() && !bibtopic); bibtocCB->setEnabled(!bibtopic); @@ -334,20 +329,18 @@ void GuiBibtex::updateContents() styleCB->clear(); - int item_nr(-1); + int item_nr = -1; - vector str; - getBibStyles(str); - for (vector::const_iterator it = str.begin(); - it != str.end(); ++it) { - string item(changeExtension(*it, "")); + QStringList str = bibStyles(); + for (int i = 0; i != str.count(); ++i) { + QString item = changeExtension(str[i], ""); if (item == bibstyle) - item_nr = int(it - str.begin()); - styleCB->addItem(toqstr(item)); + item_nr = i; + styleCB->addItem(item); } - if (item_nr == -1 && !bibstyle.empty()) { - styleCB->addItem(toqstr(bibstyle)); + if (item_nr == -1 && !bibstyle.isEmpty()) { + styleCB->addItem(bibstyle); item_nr = styleCB->count() - 1; } @@ -448,41 +441,35 @@ QString GuiBibtex::browseBst(QString const & in_name) const } -void GuiBibtex::getBibStyles(vector & data) const +QStringList GuiBibtex::bibStyles() const { - data.clear(); - - getTexFileList("bstFiles.lst", data); - // test, if we have a valid list, otherwise run rescan - if (data.empty()) { + QStringList data = texFileList("bstFiles.lst"); + // test whether we have a valid list, otherwise run rescan + if (data.isEmpty()) { rescanBibStyles(); - getTexFileList("bstFiles.lst", data); + data = texFileList("bstFiles.lst"); } - vector::iterator it = data.begin(); - vector::iterator end = data.end(); - for (; it != end; ++it) - *it = support::onlyFilename(*it); + for (int i = 0; i != data.size(); ++i) + data[i] = onlyFilename(data[i]); // sort on filename only (no path) - sort(data.begin(), data.end()); + data.sort(); + return data; } -void GuiBibtex::getBibFiles(vector & data) const +QStringList GuiBibtex::bibFiles() const { - data.clear(); - - getTexFileList("bibFiles.lst", data); - // test, if we have a valid list, otherwise run rescan - if (data.empty()) { + QStringList data = texFileList("bibFiles.lst"); + // test whether we have a valid list, otherwise run rescan + if (data.isEmpty()) { rescanBibStyles(); - getTexFileList("bibFiles.lst", data); + data = texFileList("bibFiles.lst"); } - vector::iterator it = data.begin(); - vector::iterator end = data.end(); - for (; it != end; ++it) - *it = support::onlyFilename(*it); + for (int i = 0; i != data.size(); ++i) + data[i] = onlyFilename(data[i]); // sort on filename only (no path) - sort(data.begin(), data.end()); + data.sort(); + return data; } @@ -504,45 +491,48 @@ bool GuiBibtex::bibtotoc() const } -string const GuiBibtex::getStylefile() const +QString GuiBibtex::styleFile() const { // the different bibtex packages have (and need) their // own "plain" stylefiles biblio::CiteEngine const engine = buffer().params().getEngine(); - docstring defaultstyle; + QString defaultstyle; switch (engine) { case biblio::ENGINE_BASIC: - defaultstyle = from_ascii("plain"); + defaultstyle = "plain"; break; case biblio::ENGINE_NATBIB_AUTHORYEAR: - defaultstyle = from_ascii("plainnat"); + defaultstyle = "plainnat"; break; case biblio::ENGINE_NATBIB_NUMERICAL: - defaultstyle = from_ascii("plainnat"); + defaultstyle = "plainnat"; break; case biblio::ENGINE_JURABIB: - defaultstyle = from_ascii("jurabib"); + defaultstyle = "jurabib"; break; } - docstring bst = params_["options"]; + QString bst = toqstr(params_["options"]); if (bibtotoc()){ // bibstyle exists? - if (contains(bst, ',')) { - docstring bibtotoc = from_ascii("bibtotoc"); - bst = split(bst, bibtotoc, ','); - } else - bst.erase(); + int pos = bst.indexOf(','); + if (pos != -1) { + // FIXME: check + // docstring bibtotoc = from_ascii("bibtotoc"); + // bst = split(bst, bibtotoc, ','); + bst = bst.mid(pos); + } else { + bst.clear(); + } } // propose default style file for new insets // existing insets might have (legally) no bst files // (if the class already provides a style) - if (bst.empty() && params_["bibfiles"].empty()) + if (bst.isEmpty() && params_["bibfiles"].empty()) bst = defaultstyle; - // FIXME UNICODE - return to_utf8(bst); + return bst; } diff --git a/src/frontends/qt4/GuiBibtex.h b/src/frontends/qt4/GuiBibtex.h index e9d5b0b4fe..4eb11d744b 100644 --- a/src/frontends/qt4/GuiBibtex.h +++ b/src/frontends/qt4/GuiBibtex.h @@ -18,13 +18,8 @@ #include "ui_BibtexUi.h" #include "ui_BibtexAddUi.h" -#include -#include namespace lyx { - -namespace support { class FileFilterList; } - namespace frontend { class GuiBibtexAddDialog : public QDialog, public Ui::BibtexAddUi @@ -43,7 +38,7 @@ class GuiBibtex : public GuiCommand, public Ui::BibtexUi Q_OBJECT public: - GuiBibtex(GuiView & lv); + explicit GuiBibtex(GuiView & lv); private Q_SLOTS: void change_adaptor(); @@ -68,14 +63,12 @@ private: /// Browse for a .bib file QString browseBib(QString const & in_name) const; - /// Browse for a .bst file QString browseBst(QString const & in_name) const; - /// get the list of bst files - void getBibStyles(std::vector & data) const; + QStringList bibStyles() const; /// get the list of bib files - void getBibFiles(std::vector & data) const; + QStringList bibFiles() const; /// build filelists of all availabe bib/bst/cls/sty-files. done through /// kpsewhich and an external script, saved in *Files.lst void rescanBibStyles() const; @@ -84,7 +77,7 @@ private: /// should we put the bibliography to the TOC? bool bibtotoc() const; /// which stylefile do we use? - std::string const getStylefile() const; + QString styleFile() const; /// GuiBibtexAddDialog * add_; diff --git a/src/frontends/qt4/GuiCharacter.cpp b/src/frontends/qt4/GuiCharacter.cpp index a5bf25cbe7..afbc526860 100644 --- a/src/frontends/qt4/GuiCharacter.cpp +++ b/src/frontends/qt4/GuiCharacter.cpp @@ -27,243 +27,90 @@ using namespace std; namespace lyx { namespace frontend { -static vector const getShapeData() +static QList shapeData() { - vector shape(6); - - ShapePair pr; - - pr.first = qt_("No change"); - pr.second = IGNORE_SHAPE; - shape[0] = pr; - - pr.first = qt_("Upright"); - pr.second = UP_SHAPE; - shape[1] = pr; - - pr.first = qt_("Italic"); - pr.second = ITALIC_SHAPE; - shape[2] = pr; - - pr.first = qt_("Slanted"); - pr.second = SLANTED_SHAPE; - shape[3] = pr; - - pr.first = qt_("Small Caps"); - pr.second = SMALLCAPS_SHAPE; - shape[4] = pr; - - pr.first = qt_("Reset"); - pr.second = INHERIT_SHAPE; - shape[5] = pr; - - return shape; + QList shapes; + shapes << ShapePair(qt_("No change"), IGNORE_SHAPE); + shapes << ShapePair(qt_("Upright"), UP_SHAPE); + shapes << ShapePair(qt_("Italic"), ITALIC_SHAPE); + shapes << ShapePair(qt_("Slanted"), SLANTED_SHAPE); + shapes << ShapePair(qt_("Small Caps"), SMALLCAPS_SHAPE); + shapes << ShapePair(qt_("Reset"), INHERIT_SHAPE); + return shapes; } -static vector const getSizeData() +static QList sizeData() { - vector size(14); - - SizePair pr; - - pr.first = qt_("No change"); - pr.second = FONT_SIZE_IGNORE; - size[0] = pr; - - pr.first = qt_("Tiny"); - pr.second = FONT_SIZE_TINY; - size[1] = pr; - - pr.first = qt_("Smallest"); - pr.second = FONT_SIZE_SCRIPT; - size[2] = pr; - - pr.first = qt_("Smaller"); - pr.second = FONT_SIZE_FOOTNOTE; - size[3] = pr; - - pr.first = qt_("Small"); - pr.second = FONT_SIZE_SMALL; - size[4] = pr; - - pr.first = qt_("Normal"); - pr.second = FONT_SIZE_NORMAL; - size[5] = pr; - - pr.first = qt_("Large"); - pr.second = FONT_SIZE_LARGE; - size[6] = pr; - - pr.first = qt_("Larger"); - pr.second = FONT_SIZE_LARGER; - size[7] = pr; - - pr.first = qt_("Largest"); - pr.second = FONT_SIZE_LARGEST; - size[8] = pr; - - pr.first = qt_("Huge"); - pr.second = FONT_SIZE_HUGE; - size[9] = pr; - - pr.first = qt_("Huger"); - pr.second = FONT_SIZE_HUGER; - size[10] = pr; - - pr.first = qt_("Increase"); - pr.second = FONT_SIZE_INCREASE; - size[11] = pr; - - pr.first = qt_("Decrease"); - pr.second = FONT_SIZE_DECREASE; - size[12] = pr; - - pr.first = qt_("Reset"); - pr.second = FONT_SIZE_INHERIT; - size[13] = pr; - - return size; + QList sizes; + sizes << SizePair(qt_("No change"), FONT_SIZE_IGNORE); + sizes << SizePair(qt_("Tiny"), FONT_SIZE_TINY); + sizes << SizePair(qt_("Smallest"), FONT_SIZE_SCRIPT); + sizes << SizePair(qt_("Smaller"), FONT_SIZE_FOOTNOTE); + sizes << SizePair(qt_("Small"), FONT_SIZE_SMALL); + sizes << SizePair(qt_("Normal"), FONT_SIZE_NORMAL); + sizes << SizePair(qt_("Large"), FONT_SIZE_LARGE); + sizes << SizePair(qt_("Larger"), FONT_SIZE_LARGER); + sizes << SizePair(qt_("Largest"), FONT_SIZE_LARGEST); + sizes << SizePair(qt_("Huge"), FONT_SIZE_HUGE); + sizes << SizePair(qt_("Huger"), FONT_SIZE_HUGER); + sizes << SizePair(qt_("Increase"), FONT_SIZE_INCREASE); + sizes << SizePair(qt_("Decrease"), FONT_SIZE_DECREASE); + sizes << SizePair(qt_("Reset"), FONT_SIZE_INHERIT); + return sizes; } -static vector const getBarData() +static QList barData() { - vector bar(5); - - BarPair pr; - - pr.first = qt_("No change"); - pr.second = IGNORE; - bar[0] = pr; - - pr.first = qt_("Emph"); - pr.second = EMPH_TOGGLE; - bar[1] = pr; - - pr.first = qt_("Underbar"); - pr.second = UNDERBAR_TOGGLE; - bar[2] = pr; - - pr.first = qt_("Noun"); - pr.second = NOUN_TOGGLE; - bar[3] = pr; - - pr.first = qt_("Reset"); - pr.second = INHERIT; - bar[4] = pr; - - return bar; + QList bars; + bars << BarPair(qt_("No change"), IGNORE); + bars << BarPair(qt_("Emph"), EMPH_TOGGLE); + bars << BarPair(qt_("Underbar"), UNDERBAR_TOGGLE); + bars << BarPair(qt_("Noun"), NOUN_TOGGLE); + bars << BarPair(qt_("Reset"), INHERIT); + return bars; } -static vector const getColorData() +static QList colorData() { - vector color(11); - - ColorPair pr; - - pr.first = qt_("No change"); - pr.second = Color_ignore; - color[0] = pr; - - pr.first = qt_("No color"); - pr.second = Color_none; - color[1] = pr; - - pr.first = qt_("Black"); - pr.second = Color_black; - color[2] = pr; - - pr.first = qt_("White"); - pr.second = Color_white; - color[3] = pr; - - pr.first = qt_("Red"); - pr.second = Color_red; - color[4] = pr; - - pr.first = qt_("Green"); - pr.second = Color_green; - color[5] = pr; - - pr.first = qt_("Blue"); - pr.second = Color_blue; - color[6] = pr; - - pr.first = qt_("Cyan"); - pr.second = Color_cyan; - color[7] = pr; - - pr.first = qt_("Magenta"); - pr.second = Color_magenta; - color[8] = pr; - - pr.first = qt_("Yellow"); - pr.second = Color_yellow; - color[9] = pr; - - pr.first = qt_("Reset"); - pr.second = Color_inherit; - color[10] = pr; - - return color; + QList colors; + colors << ColorPair(qt_("No change"), Color_ignore); + colors << ColorPair(qt_("No color"), Color_none); + colors << ColorPair(qt_("Black"), Color_black); + colors << ColorPair(qt_("White"), Color_white); + colors << ColorPair(qt_("Red"), Color_red); + colors << ColorPair(qt_("Green"), Color_green); + colors << ColorPair(qt_("Blue"), Color_blue); + colors << ColorPair(qt_("Cyan"), Color_cyan); + colors << ColorPair(qt_("Magenta"), Color_magenta); + colors << ColorPair(qt_("Yellow"), Color_yellow); + colors << ColorPair(qt_("Reset"), Color_inherit); + return colors; } -static vector const getSeriesData() +static QList seriesData() { - vector series(4); - - SeriesPair pr; - - pr.first = qt_("No change"); - pr.second = IGNORE_SERIES; - series[0] = pr; - - pr.first = qt_("Medium"); - pr.second = MEDIUM_SERIES; - series[1] = pr; - - pr.first = qt_("Bold"); - pr.second = BOLD_SERIES; - series[2] = pr; - - pr.first = qt_("Reset"); - pr.second = INHERIT_SERIES; - series[3] = pr; - + QList series; + series << SeriesPair(qt_("No change"), IGNORE_SERIES); + series << SeriesPair(qt_("Medium"), MEDIUM_SERIES); + series << SeriesPair(qt_("Bold"), BOLD_SERIES); + series << SeriesPair(qt_("Reset"), INHERIT_SERIES); return series; } -static vector const getFamilyData() +static QList familyData() { - vector family(5); - - FamilyPair pr; - - pr.first = qt_("No change"); - pr.second = IGNORE_FAMILY; - family[0] = pr; - - pr.first = qt_("Roman"); - pr.second = ROMAN_FAMILY; - family[1] = pr; - - pr.first = qt_("Sans Serif"); - pr.second = SANS_FAMILY; - family[2] = pr; - - pr.first = qt_("Typewriter"); - pr.second = TYPEWRITER_FAMILY; - family[3] = pr; - - pr.first = qt_("Reset"); - pr.second = INHERIT_FAMILY; - family[4] = pr; - - return family; + QList families; + families << FamilyPair(qt_("No change"), IGNORE_FAMILY); + families << FamilyPair(qt_("Roman"), ROMAN_FAMILY); + families << FamilyPair(qt_("Sans Serif"), SANS_FAMILY); + families << FamilyPair(qt_("Typewriter"), TYPEWRITER_FAMILY); + families << FamilyPair(qt_("Reset"), INHERIT_FAMILY); + return families; } @@ -293,42 +140,42 @@ GuiCharacter::GuiCharacter(GuiView & lv) autoapplyCB->setChecked(true); #endif - family = getFamilyData(); - series = getSeriesData(); - shape = getShapeData(); - size = getSizeData(); - bar = getBarData(); - color = getColorData(); - language = getLanguageData(true); + family = familyData(); + series = seriesData(); + shape = shapeData(); + size = sizeData(); + bar = barData(); + color = colorData(); + language = languageData(true); - for (vector::const_iterator cit = family.begin(); + for (QList::const_iterator cit = family.begin(); cit != family.end(); ++cit) { familyCO->addItem(cit->first); } - for (vector::const_iterator cit = series.begin(); + for (QList::const_iterator cit = series.begin(); cit != series.end(); ++cit) { seriesCO->addItem(cit->first); } - for (vector::const_iterator cit = shape.begin(); + for (QList::const_iterator cit = shape.begin(); cit != shape.end(); ++cit) { shapeCO->addItem(cit->first); } - for (vector::const_iterator cit = size.begin(); + for (QList::const_iterator cit = size.begin(); cit != size.end(); ++cit) { sizeCO->addItem(cit->first); } - for (vector::const_iterator cit = bar.begin(); + for (QList::const_iterator cit = bar.begin(); cit != bar.end(); ++cit) { miscCO->addItem(cit->first); } - for (vector::const_iterator cit = color.begin(); + for (QList::const_iterator cit = color.begin(); cit != color.end(); ++cit) { colorCO->addItem(cit->first); } - for (vector::const_iterator cit = language.begin(); + for (QList::const_iterator cit = language.begin(); cit != language.end(); ++cit) { - langCO->addItem(toqstr(cit->first)); + langCO->addItem(cit->first); } bc().setPolicy(ButtonPolicy::OkApplyCancelReadOnlyPolicy); @@ -376,16 +223,12 @@ void GuiCharacter::change_adaptor() } -template -static int findPos2nd(vector > const & vec, B const & val) +template +static int findPos2nd(QList > const & vec, B const & val) { - typedef typename vector >::const_iterator - const_iterator; - - for (const_iterator cit = vec.begin(); cit != vec.end(); ++cit) - if (cit->second == val) - return int(cit - vec.begin()); - + for (int i = 0; i != vec.size(); ++i) + if (vec[i].second == val) + return i; return 0; } @@ -566,17 +409,17 @@ void GuiCharacter::setColor(ColorCode val) } -string GuiCharacter::getLanguage() const +QString GuiCharacter::getLanguage() const { if (reset_lang_) return "reset"; if (font_.language()) - return font_.language()->lang(); + return toqstr(font_.language()->lang()); return "ignore"; } -void GuiCharacter::setLanguage(string const & val) +void GuiCharacter::setLanguage(QString const & val) { if (val == "ignore") font_.setLanguage(ignore_language); @@ -585,7 +428,7 @@ void GuiCharacter::setLanguage(string const & val) // Ignored in getLanguage, but needed for dispatchParams font_.setLanguage(buffer().params().language); } else { - font_.setLanguage(languages.getLanguage(val)); + font_.setLanguage(languages.getLanguage(fromqstr(val))); } } diff --git a/src/frontends/qt4/GuiCharacter.h b/src/frontends/qt4/GuiCharacter.h index bf5d92fb90..405d8db83d 100644 --- a/src/frontends/qt4/GuiCharacter.h +++ b/src/frontends/qt4/GuiCharacter.h @@ -19,11 +19,8 @@ #include "qt_helpers.h" // for LanguagePair #include "Font.h" -#include - namespace lyx { - namespace frontend { enum FontState { @@ -39,12 +36,13 @@ enum FontState { INHERIT }; +typedef std::pair FamilyPair; typedef std::pair FamilyPair; typedef std::pair SeriesPair; typedef std::pair ShapePair; typedef std::pair SizePair; -typedef std::pair BarPair; -typedef std::pair ColorPair; +typedef std::pair BarPair; +typedef std::pair ColorPair; class GuiCharacter : public GuiDialog, public Ui::CharacterUi { @@ -62,13 +60,13 @@ private: /// update void updateContents(); - std::vector family; - std::vector series; - std::vector shape; - std::vector size; - std::vector bar; - std::vector color; - std::vector language; + QList family; + QList series; + QList shape; + QList size; + QList bar; + QList color; + QList language; /// bool initialiseParams(std::string const & data); @@ -94,7 +92,7 @@ private: /// void setColor(ColorCode); /// - void setLanguage(std::string const &); + void setLanguage(QString const &); /// FontFamily getFamily() const; @@ -109,7 +107,7 @@ private: /// ColorCode getColor() const; /// - std::string getLanguage() const; + QString getLanguage() const; private: /// diff --git a/src/frontends/qt4/GuiDocument.cpp b/src/frontends/qt4/GuiDocument.cpp index 395bb056cc..99b5fbaaaa 100644 --- a/src/frontends/qt4/GuiDocument.cpp +++ b/src/frontends/qt4/GuiDocument.cpp @@ -49,13 +49,10 @@ #include "frontends/alert.h" -#include - #include #include #include -#include #include using namespace std; @@ -63,17 +60,6 @@ using namespace lyx::support; namespace { -/// -template -vector const -getSecond(vector const & pr) -{ - vector tmp(pr.size()); - transform(pr.begin(), pr.end(), tmp.begin(), - boost::bind(&Pair::second, _1)); - return tmp; -} - char const * const tex_graphics[] = { @@ -519,8 +505,10 @@ GuiDocument::GuiDocument(GuiView & lv) : GuiDialog(lv, "document", qt_("Document Settings")), current_id_(0) { setupUi(this); - - lang_ = getSecond(getLanguageData(false)); + + QList langs = languageData(false); + for (int i = 0; i != langs.size(); ++i) + lang_.append(langs[i].second); connect(okPB, SIGNAL(clicked()), this, SLOT(slotOK())); connect(applyPB, SIGNAL(clicked()), this, SLOT(slotApply())); @@ -797,12 +785,11 @@ GuiDocument::GuiDocument(GuiView & lv) connect(langModule->quoteStyleCO, SIGNAL(activated(int)), this, SLOT(change_adaptor())); // language & quotes - vector const langs = getLanguageData(false); - vector::const_iterator lit = langs.begin(); - vector::const_iterator lend = langs.end(); - for (; lit != lend; ++lit) { - langModule->languageCO->addItem(toqstr(lit->first)); - } + + QList::const_iterator lit = langs.begin(); + QList::const_iterator lend = langs.end(); + for (; lit != lend; ++lit) + langModule->languageCO->addItem(lit->first); // Always put the default encoding in the first position. // It is special because the displayed text is translated. @@ -820,7 +807,6 @@ GuiDocument::GuiDocument(GuiView & lv) langModule->quoteStyleCO->addItem(qt_(">>text<<")); - numberingModule = new UiWidget; // numbering connect(numberingModule->depthSL, SIGNAL(valueChanged(int)), @@ -1486,7 +1472,7 @@ void GuiDocument::apply(BufferParams & params) params.quotes_language = lga; int const pos = langModule->languageCO->currentIndex(); - params.language = lyx::languages.getLanguage(lang_[pos]); + params.language = lyx::languages.getLanguage(fromqstr(lang_[pos])); // numbering if (params.documentClass().hasTocLevels()) { @@ -1659,11 +1645,10 @@ void GuiDocument::apply(BufferParams & params) params.orientation = ORIENTATION_PORTRAIT; // margins - params.use_geometry = - (!marginsModule->marginCB->isChecked() - || geom_papersize); + params.use_geometry = !marginsModule->marginCB->isChecked() + || geom_papersize; - Ui::MarginsUi const * m(marginsModule); + Ui::MarginsUi const * m = marginsModule; params.leftmargin = widgetsToLength(m->innerLE, m->innerUnit); params.topmargin = widgetsToLength(m->topLE, m->topUnit); @@ -1707,17 +1692,12 @@ void GuiDocument::apply(BufferParams & params) } -/** Return the position of val in the vector if found. - If not found, return 0. - */ -template -static size_t findPos(vector const & vec, A const & val) -{ - typename vector::const_iterator it = - find(vec.begin(), vec.end(), val); - if (it == vec.end()) - return 0; - return distance(vec.begin(), it); +static int findPos(QStringList const & vec, QString const & val) +{ + for (int i = 0; i != vec.size(); ++i) + if (vec[i] == val) + return i; + return 0; } @@ -1773,8 +1753,7 @@ void GuiDocument::updateParams(BufferParams const & params) params.use_bibtopic); // language & quotes - int const pos = int(findPos(lang_, - params.language->lang())); + int const pos = findPos(lang_, toqstr(params.language->lang())); langModule->languageCO->setCurrentIndex(pos); langModule->quoteStyleCO->setCurrentIndex( @@ -2039,7 +2018,7 @@ void GuiDocument::updateAvailableModules() modules_av_model_.clear(); vector const modInfoList = getModuleInfo(); int const mSize = modInfoList.size(); - for (int i = 0; i < mSize; ++i) { + for (int i = 0; i != mSize; ++i) { modInfoStruct const & modInfo = modInfoList[i]; modules_av_model_.insertRow(i, qt_(modInfo.name), modInfo.id); } @@ -2048,11 +2027,11 @@ void GuiDocument::updateAvailableModules() void GuiDocument::updateSelectedModules() { - //and selected ones, too + // and selected ones, too modules_sel_model_.clear(); vector const selModList = getSelectedModules(); int const sSize = selModList.size(); - for (int i = 0; i < sSize; ++i) { + for (int i = 0; i != sSize; ++i) { modInfoStruct const & modInfo = selModList[i]; modules_sel_model_.insertRow(i, qt_(modInfo.name), modInfo.id); } @@ -2119,9 +2098,9 @@ void GuiDocument::setLayoutComboByIDString(std::string const & idString) bool GuiDocument::isValid() { - return (validate_listings_params().empty() && - (textLayoutModule->skipCO->currentIndex() != 3 || - !textLayoutModule->skipLE->text().isEmpty())); + return validate_listings_params().empty() + && (textLayoutModule->skipCO->currentIndex() != 3 + || !textLayoutModule->skipLE->text().isEmpty()); } diff --git a/src/frontends/qt4/GuiDocument.h b/src/frontends/qt4/GuiDocument.h index 980fdc5173..7ebeae461f 100644 --- a/src/frontends/qt4/GuiDocument.h +++ b/src/frontends/qt4/GuiDocument.h @@ -160,8 +160,8 @@ private: GuiSelectionManager * selectionManager; - // FIXME - std::vector lang_; + /// + QStringList lang_; /// Available modules GuiIdListModel * availableModel() { return &modules_av_model_; } diff --git a/src/frontends/qt4/GuiPrefs.cpp b/src/frontends/qt4/GuiPrefs.cpp index ff288c34da..c50381fa87 100644 --- a/src/frontends/qt4/GuiPrefs.cpp +++ b/src/frontends/qt4/GuiPrefs.cpp @@ -35,6 +35,7 @@ #include "support/FileFilterList.h" #include "support/FileName.h" #include "support/filetools.h" +#include "support/foreach.h" #include "support/gettext.h" #include "support/lstrings.h" #include "support/os.h" @@ -77,13 +78,6 @@ namespace frontend { // ///////////////////////////////////////////////////////////////////// -FileName libFileSearch(QString const & dir, QString const & name, - QString const & ext = QString()) -{ - return support::libFileSearch(fromqstr(dir), fromqstr(name), fromqstr(ext)); -} - - /** Launch a file dialog and return the chosen file. filename: a suggested filename. title: the title of the dialog. @@ -144,8 +138,8 @@ QString browseLibFile(QString const & dir, // remove the extension if it is the default one QString noextresult; - if (toqstr(getExtension(fromqstr(result))) == ext) - noextresult = toqstr(removeExtension(fromqstr(result))); + if (getExtension(result) == ext) + noextresult = removeExtension(result); else noextresult = result; @@ -216,15 +210,12 @@ QString browseRelFile(QString const & filename, QString const & refpath, namespace frontend { -template -static size_t findPos_helper(vector const & vec, A const & val) +static int findPos_helper(QStringList const & vec, QString const & val) { - typedef typename vector::const_iterator Cit; - - Cit it = find(vec.begin(), vec.end(), val); - if (it == vec.end()) - return 0; - return distance(vec.begin(), it); + for (int i = 0; i != vec.size(); ++i) + if (vec[i] == val) + return i; + return 0; } @@ -1630,13 +1621,9 @@ PrefLanguage::PrefLanguage(QWidget * parent) defaultLanguageCO->clear(); // store the lang identifiers for later - vector const langs = getLanguageData(false); - vector::const_iterator lit = langs.begin(); - vector::const_iterator lend = langs.end(); - lang_.clear(); - for (; lit != lend; ++lit) { - defaultLanguageCO->addItem(toqstr(lit->first)); - lang_.push_back(lit->second); + foreach (LanguagePair const & lpair, languageData(false)) { + defaultLanguageCO->addItem(lpair.first); + lang_.append(lpair.second); } } @@ -1654,7 +1641,7 @@ void PrefLanguage::apply(LyXRC & rc) const rc.language_package = fromqstr(languagePackageED->text()); rc.language_command_begin = fromqstr(startCommandED->text()); rc.language_command_end = fromqstr(endCommandED->text()); - rc.default_language = lang_[defaultLanguageCO->currentIndex()]; + rc.default_language = fromqstr(lang_[defaultLanguageCO->currentIndex()]); } @@ -1675,7 +1662,7 @@ void PrefLanguage::update(LyXRC const & rc) startCommandED->setText(toqstr(rc.language_command_begin)); endCommandED->setText(toqstr(rc.language_command_end)); - int const pos = int(findPos_helper(lang_, rc.default_language)); + int const pos = findPos_helper(lang_, toqstr(rc.default_language)); defaultLanguageCO->setCurrentIndex(pos); } diff --git a/src/frontends/qt4/GuiPrefs.h b/src/frontends/qt4/GuiPrefs.h index 903a7d4e30..4c4b87da09 100644 --- a/src/frontends/qt4/GuiPrefs.h +++ b/src/frontends/qt4/GuiPrefs.h @@ -318,7 +318,7 @@ public: void update(LyXRC const & rc); private: - std::vector lang_; + QStringList lang_; }; diff --git a/src/frontends/qt4/GuiPrint.cpp b/src/frontends/qt4/GuiPrint.cpp index ed8898126c..aedba1b885 100644 --- a/src/frontends/qt4/GuiPrint.cpp +++ b/src/frontends/qt4/GuiPrint.cpp @@ -179,7 +179,7 @@ void GuiPrint::applyView() bool GuiPrint::initialiseParams(string const &) { /// get global printer parameters - string const name = changeExtension(buffer().absFileName(), + string const name = support::changeExtension(buffer().absFileName(), lyxrc.print_file_extension); params_ = PrinterParams(PrinterParams::PRINTER, lyxrc.printer, name); diff --git a/src/frontends/qt4/GuiTexinfo.cpp b/src/frontends/qt4/GuiTexinfo.cpp index 8777827125..2b13cba794 100644 --- a/src/frontends/qt4/GuiTexinfo.cpp +++ b/src/frontends/qt4/GuiTexinfo.cpp @@ -17,6 +17,7 @@ #include "support/debug.h" #include "support/filetools.h" +#include "support/foreach.h" #include "support/FileName.h" #include "support/lstrings.h" @@ -35,17 +36,16 @@ using namespace lyx::support; namespace lyx { namespace frontend { - -static string texFileFromList(string const & file, string const & type) +static QString texFileFromList(QString const & file, QString const & type) { - string file_ = file; + QString file_ = file; // do we need to add the suffix? - if (!(getExtension(file) == type)) + if (getExtension(file) != type) file_ += '.' + type; - lyxerr << "Searching for file " << file_ << endl; + lyxerr << "Searching for file " << fromqstr(file_) << endl; - string lstfile = type + "Files.lst"; + QString lstfile = type + "Files.lst"; if (type == "cls") lstfile = "clsFiles.lst"; else if (type == "sty") @@ -54,26 +54,26 @@ static string texFileFromList(string const & file, string const & type) lstfile = "bstFiles.lst"; else if (type == "bib") lstfile = "bibFiles.lst"; - FileName const abslstfile = libFileSearch(string(), lstfile); + FileName const abslstfile = libFileSearch(QString(), lstfile); if (abslstfile.empty()) { - lyxerr << "File `'" << lstfile << "' not found." << endl; - return string(); + lyxerr << "File `'" << fromqstr(lstfile) << "' not found." << endl; + return QString(); } // FIXME UNICODE string const allClasses = to_utf8(abslstfile.fileContents("UTF-8")); int entries = 0; string classfile = token(allClasses, '\n', entries); int count = 0; - while ((!contains(classfile, file) || - (support::onlyFilename(classfile) != file)) && - (++count < 1000)) { + while ((!contains(classfile, fromqstr(file)) + || support::onlyFilename(classfile) != fromqstr(file)) + && ++count < 1000) { classfile = token(allClasses, '\n', ++entries); } // now we have filename with full path lyxerr << "with full path: " << classfile << endl; - return classfile; + return toqstr(classfile); } @@ -82,8 +82,8 @@ GuiTexInfo::GuiTexInfo(GuiView & lv) { setupUi(this); - warningPosted = false; - activeStyle = ClsType; + warningPosted_ = false; + activeStyle_ = ClsType; connect(closePB, SIGNAL(clicked()), this, SLOT(slotClose())); @@ -121,11 +121,13 @@ void GuiTexInfo::rescanClicked() void GuiTexInfo::viewClicked() { - size_t const fitem = fileListLW->currentRow(); - vector const & data = texdata_[activeStyle]; - string file = data[fitem]; + // takes advantage of enum order + static QString const ext[] = { "cls", "sty", "bst" }; + int const fitem = fileListLW->currentRow(); + QStringList const & data = texdata_[activeStyle_]; + QString file = data[fitem]; if (!pathCB->isChecked()) - file = texFileFromList(data[fitem], fileType(activeStyle)); + file = texFileFromList(data[fitem], ext[activeStyle_]); viewFile(file); } @@ -146,51 +148,51 @@ void GuiTexInfo::enableViewPB() void GuiTexInfo::updateStyles(TexFileType type) { - ContentsType & data = texdata_[type]; + static QString const filenames[] = { + "clsFile.lst", "styFiles.lst", "bstFiles.lst" + }; - static string filenames[] = { "clsFiles.lst", "styFiles.lst", "bstFiles.lst" }; - string filename = filenames[type]; + QString const filename = filenames[type]; - getTexFileList(filename, data); + QStringList data = texFileList(filename); if (data.empty()) { // build filelists of all availabe bst/cls/sty-files. // Done through kpsewhich and an external script, // saved in *Files.lst rescanTexStyles(); - getTexFileList(filename, data); + data = texFileList(filename); } + if (!pathCB->isChecked()) { - vector::iterator it1 = data.begin(); - vector::iterator end1 = data.end(); - for (; it1 != end1; ++it1) - *it1 = support::onlyFilename(*it1); + for (int i = 0; i != data.size(); ++i) + data[i] = onlyFilename(data[i]); } // sort on filename only (no path) - sort(data.begin(), data.end()); + data.sort(); fileListLW->clear(); - ContentsType::const_iterator it = data.begin(); - ContentsType::const_iterator end = data.end(); - for (; it != end; ++it) - fileListLW->addItem(toqstr(*it)); + foreach (QString const & item, data) + fileListLW->addItem(item); - activeStyle = type; + activeStyle_ = type; + texdata_[type] = data; } void GuiTexInfo::updateStyles() { - updateStyles(activeStyle); + updateStyles(activeStyle_); } -void GuiTexInfo::viewFile(string const & filename) const +void GuiTexInfo::viewFile(QString const & filename) const { - dispatch(FuncRequest(LFUN_DIALOG_SHOW, "file " + filename)); + dispatch(FuncRequest(LFUN_DIALOG_SHOW, "file " + fromqstr(filename))); } /// get a class with full path from the list +/* string GuiTexInfo::classOptions(string const & classname) const { FileName const filename(texFileFromList(classname, "cls")); @@ -210,14 +212,7 @@ string GuiTexInfo::classOptions(string const & classname) const } return optionList; } - - -string GuiTexInfo::fileType(TexFileType type) const -{ - // takes advantage of enum order - static string const ext[] = { "cls", "sty", "bst" }; - return ext[type]; -} +*/ Dialog * createGuiTexInfo(GuiView & lv) { return new GuiTexInfo(lv); } diff --git a/src/frontends/qt4/GuiTexinfo.h b/src/frontends/qt4/GuiTexinfo.h index f734fc6e66..c190a4bc4b 100644 --- a/src/frontends/qt4/GuiTexinfo.h +++ b/src/frontends/qt4/GuiTexinfo.h @@ -17,9 +17,6 @@ #include "ui_TexinfoUi.h" #include "qt_helpers.h" -#include -#include - namespace lyx { namespace frontend { @@ -32,7 +29,7 @@ public: /// GuiTexInfo(GuiView & lv); /// the file extensions. order matters in GuiTexInfo::fileType() - enum TexFileType { ClsType, StyType, BstType }; + enum TexFileType { ClsType = 0, StyType, BstType, DummyLastType }; public Q_SLOTS: /// @@ -49,14 +46,6 @@ private Q_SLOTS: void enableViewPB(); private: - /// - void updateStyles(TexFileType); - /// - void updateStyles(); - /// - bool warningPosted; - /// - TexFileType activeStyle; /// Nothing to initialise in this case. bool initialiseParams(std::string const &) { return true; } /// @@ -68,15 +57,21 @@ private: /// void apply() {} + /// + void updateStyles(TexFileType); + /// + void updateStyles(); + /// + bool warningPosted_; + /// + TexFileType activeStyle_; + /// show contents af a file - void viewFile(std::string const & filename) const; + void viewFile(QString const & filename) const; /// show all classoptions - std::string classOptions(std::string const & filename) const; - /// return file type as string - std::string fileType(TexFileType type) const; + //std::string classOptions(std::string const & filename) const; - typedef std::vector ContentsType; - std::map texdata_; + QStringList texdata_[DummyLastType]; }; diff --git a/src/frontends/qt4/GuiToolbar.cpp b/src/frontends/qt4/GuiToolbar.cpp index e2a060a696..2da16848aa 100644 --- a/src/frontends/qt4/GuiToolbar.cpp +++ b/src/frontends/qt4/GuiToolbar.cpp @@ -80,23 +80,23 @@ namespace frontend { namespace { struct PngMap { - char const * key; - char const * value; + QString key; + QString value; }; bool operator<(PngMap const & lhs, PngMap const & rhs) { - return strcmp(lhs.key, rhs.key) < 0; + return lhs.key < rhs.key; } class CompareKey { public: - CompareKey(string const & name) : name_(name) {} + CompareKey(QString const & name) : name_(name) {} bool operator()(PngMap const & other) const { return other.key == name_; } private: - string const name_; + QString const name_; }; @@ -140,7 +140,7 @@ PngMap sorted_png_map[] = { size_t const nr_sorted_png_map = sizeof(sorted_png_map) / sizeof(PngMap); -string const find_png(string const & name) +QString findPng(QString const & name) { PngMap const * const begin = sorted_png_map; PngMap const * const end = begin + nr_sorted_png_map; @@ -148,29 +148,30 @@ string const find_png(string const & name) PngMap const * const it = find_if(begin, end, CompareKey(name)); - string png_name; - if (it != end) + QString png_name; + if (it != end) { png_name = it->value; - else { - png_name = subst(name, "_", "underscore"); - png_name = subst(png_name, ' ', '_'); + } else { + png_name = name; + png_name.replace('_', "underscore"); + png_name.replace(' ', '_'); // This way we can have "math-delim { }" on the toolbar. - png_name = subst(png_name, "(", "lparen"); - png_name = subst(png_name, ")", "rparen"); - png_name = subst(png_name, "[", "lbracket"); - png_name = subst(png_name, "]", "rbracket"); - png_name = subst(png_name, "{", "lbrace"); - png_name = subst(png_name, "}", "rbrace"); - png_name = subst(png_name, "|", "bars"); - png_name = subst(png_name, ",", "thinspace"); - png_name = subst(png_name, ":", "mediumspace"); - png_name = subst(png_name, ";", "thickspace"); - png_name = subst(png_name, "!", "negthinspace"); + png_name.replace('(', "lparen"); + png_name.replace(')', "rparen"); + png_name.replace('[', "lbracket"); + png_name.replace(']', "rbracket"); + png_name.replace('{', "lbrace"); + png_name.replace('}', "rbrace"); + png_name.replace('|', "bars"); + png_name.replace(',', "thinspace"); + png_name.replace(':', "mediumspace"); + png_name.replace(';', "thickspace"); + png_name.replace('!', "negthinspace"); } - LYXERR(Debug::GUI, "find_png(" << name << ")\n" - << "Looking for math PNG called \"" << png_name << '"'); + LYXERR(Debug::GUI, "findPng(" << fromqstr(name) << ")\n" + << "Looking for math PNG called \"" << fromqstr(png_name) << '"'); return png_name; } @@ -182,36 +183,36 @@ static QIcon getIcon(FuncRequest const & f, bool unknown) { initializeResources(); QPixmap pm; - string name1; - string name2; - string path; - string fullname; - + QString name1; + QString name2; + QString path; switch (f.action) { case LFUN_MATH_INSERT: if (!f.argument().empty()) { path = "math/"; - name1 = find_png(to_utf8(f.argument()).substr(1)); + name1 = findPng(toqstr(f.argument()).mid(1)); } break; case LFUN_MATH_DELIM: case LFUN_MATH_BIGDELIM: path = "math/"; - name1 = find_png(to_utf8(f.argument())); + name1 = findPng(toqstr(f.argument())); break; case LFUN_CALL: path = "commands/"; - name1 = to_utf8(f.argument()); + name1 = toqstr(f.argument()); break; default: - name2 = lyxaction.getActionName(f.action); + name2 = toqstr(lyxaction.getActionName(f.action)); name1 = name2; - if (!f.argument().empty()) - name1 = subst(name2 + ' ' + to_utf8(f.argument()), ' ', '_'); + if (!f.argument().empty()) { + name1 = name2 + ' ' + toqstr(f.argument()); + name1.replace(' ', '_'); + } } - fullname = libFileSearch("images/" + path, name1, "png").absFilename(); + string fullname = libFileSearch("images/" + path, name1, "png").absFilename(); if (pm.load(toqstr(fullname))) return pm; @@ -219,10 +220,10 @@ static QIcon getIcon(FuncRequest const & f, bool unknown) if (pm.load(toqstr(fullname))) return pm; - if (pm.load(":/images/" + toqstr(path + name1) + ".png")) + if (pm.load(":/images/" + path + name1 + ".png")) return pm; - if (pm.load(":/images/" + toqstr(path + name2) + ".png")) + if (pm.load(":/images/" + path + name2 + ".png")) return pm; LYXERR(Debug::GUI, "Cannot find icon for command \"" @@ -245,11 +246,13 @@ class FilterItemDelegate : public QAbstractItemDelegate { public: /// explicit FilterItemDelegate(QObject * parent = 0) - : QAbstractItemDelegate(parent) {} + : QAbstractItemDelegate(parent) + {} /// void paint(QPainter * painter, QStyleOptionViewItem const & option, - QModelIndex const & index) const { + QModelIndex const & index) const + { QComboBox * combo = static_cast(parent()); QStyleOptionMenuItem opt = getStyleOption(option, index); @@ -326,7 +329,8 @@ public: /// QSize sizeHint(QStyleOptionViewItem const & option, - QModelIndex const & index) const { + QModelIndex const & index) const + { QComboBox * combo = static_cast(parent()); QStyleOptionMenuItem opt = getStyleOption(option, index); diff --git a/src/frontends/qt4/GuiView.cpp b/src/frontends/qt4/GuiView.cpp index bc40a465b2..10cda4668a 100644 --- a/src/frontends/qt4/GuiView.cpp +++ b/src/frontends/qt4/GuiView.cpp @@ -1196,7 +1196,7 @@ void GuiView::openDocument(string const & fname) static bool import(GuiView * lv, FileName const & filename, string const & format, ErrorList & errorList) { - FileName const lyxfile(changeExtension(filename.absFilename(), ".lyx")); + FileName const lyxfile(support::changeExtension(filename.absFilename(), ".lyx")); string loader_format; vector loaders = theConverters().loaders(); @@ -1207,7 +1207,7 @@ static bool import(GuiView * lv, FileName const & filename, continue; string const tofile = - changeExtension(filename.absFilename(), + support::changeExtension(filename.absFilename(), formats.extension(*it)); if (!theConverters().convert(0, filename, FileName(tofile), filename, format, *it, errorList)) @@ -1238,7 +1238,7 @@ static bool import(GuiView * lv, FileName const & filename, lv->setBuffer(b); bool as_paragraphs = loader_format == "textparagraph"; string filename2 = (loader_format == format) ? filename.absFilename() - : changeExtension(filename.absFilename(), + : support::changeExtension(filename.absFilename(), formats.extension(loader_format)); lv->view()->insertPlaintextFile(FileName(filename2), as_paragraphs); theLyXFunc().setLyXView(lv); @@ -1301,7 +1301,7 @@ void GuiView::importDocument(string const & argument) // get absolute path of file FileName const fullname(makeAbsPath(filename)); - FileName const lyxfile(changeExtension(fullname.absFilename(), ".lyx")); + FileName const lyxfile(support::changeExtension(fullname.absFilename(), ".lyx")); // Check if the document already is open Buffer * buf = theBufferList().getBuffer(lyxfile.absFilename()); diff --git a/src/frontends/qt4/qt_helpers.cpp b/src/frontends/qt4/qt_helpers.cpp index d62bf9015b..0217f0810a 100644 --- a/src/frontends/qt4/qt_helpers.cpp +++ b/src/frontends/qt4/qt_helpers.cpp @@ -24,6 +24,7 @@ #include "support/debug.h" #include "support/filetools.h" +#include "support/foreach.h" #include "support/gettext.h" #include "support/lstrings.h" #include "support/lyxalgo.h" @@ -32,12 +33,11 @@ #include "support/Path.h" #include "support/Systemcall.h" -#include #include -#include +#include #include - -#include +#include +#include #include #include @@ -47,6 +47,13 @@ using namespace std; using namespace lyx::support; namespace lyx { + +FileName libFileSearch(QString const & dir, QString const & name, + QString const & ext) +{ + return support::libFileSearch(fromqstr(dir), fromqstr(name), fromqstr(ext)); +} + namespace frontend { string widgetsToLength(QLineEdit const * input, LengthCombo const * combo) @@ -146,7 +153,8 @@ class Sorter { public: #if !defined(USE_WCHAR_T) && defined(__GNUC__) - bool operator()(LanguagePair const & lhs, LanguagePair const & rhs) const { + bool operator()(LanguagePair const & lhs, LanguagePair const & rhs) const + { return lhs.first < rhs.first; } #else @@ -157,12 +165,13 @@ public: } catch (...) { loc_ok = false; } - }; + } - bool operator()(LanguagePair const & lhs, - LanguagePair const & rhs) const { + bool operator()(LanguagePair const & lhs, LanguagePair const & rhs) const + { + // FIXME: would that be "QString::localeAwareCompare()"? if (loc_ok) - return loc_(lhs.first, rhs.first); + return loc_(fromqstr(lhs.first), fromqstr(rhs.first)); else return lhs.first < rhs.first; } @@ -176,36 +185,35 @@ private: } // namespace anon -vector const getLanguageData(bool character_dlg) +QList languageData(bool character_dlg) { - size_t const size = languages.size() + (character_dlg ? 2 : 0); - - vector langs(size); + size_t const offset = character_dlg ? 2 : 0; + vector langs(languages.size() + offset); if (character_dlg) { - langs[0].first = _("No change"); + langs[0].first = qt_("No change"); langs[0].second = "ignore"; - langs[1].first = _("Reset"); + langs[1].first = qt_("Reset"); langs[1].second = "reset"; } - size_t i = character_dlg ? 2 : 0; - for (Languages::const_iterator cit = languages.begin(); - cit != languages.end(); ++cit) { - langs[i].first = _(cit->second.display()); - langs[i].second = cit->second.lang(); - ++i; + 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 = character_dlg ? - langs.begin() + 2 : langs.begin(); - + vector::iterator begin = langs.begin() + offset; sort(begin, langs.end(), Sorter()); - return langs; + QList list; + foreach (LanguagePair const & l, langs) + list.append(l); + return list; } + void rescanTexStyles() { // Run rescan in user lyx directory @@ -223,27 +231,29 @@ void rescanTexStyles() } -void getTexFileList(string const & filename, vector & list) +QStringList texFileList(QString const & filename) { - list.clear(); - FileName const file = libFileSearch("", filename); + QStringList list; + FileName const file = libFileSearch(QString(), filename); if (file.empty()) - return; + return list; // FIXME Unicode. vector doclist = getVectorFromString(file.fileContents("UTF-8"), from_ascii("\n")); // Normalise paths like /foo//bar ==> /foo/bar - boost::RegEx regex("/{2,}"); - vector::iterator it = doclist.begin(); - vector::iterator end = doclist.end(); - for (; it != end; ++it) - list.push_back(regex.Merge(to_utf8(*it), "/")); - - // remove empty items and duplicates - list.erase(remove(list.begin(), list.end(), ""), list.end()); - eliminate_duplicates(list); + QSet set; + for (size_t i = 0; i != doclist.size(); ++i) { + QString file = toqstr(doclist[i]); + while (file.contains("//")) + file.replace("//", "/"); + if (!file.isEmpty()) + set.insert(file); + } + + // remove duplicates + return QList::fromSet(set); } @@ -264,4 +274,32 @@ QString onlyPath(const QString & str) return toqstr(support::onlyPath(fromqstr(str))); } + +QString changeExtension(QString const & oldname, QString const & ext) +{ + return toqstr(support::changeExtension(fromqstr(oldname), fromqstr(ext))); +} + +/// Remove the extension from \p name +QString removeExtension(QString const & name) +{ + return toqstr(support::removeExtension(fromqstr(name))); +} + +/** 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 addExtension(QString const & name, QString const & ext) +{ + return toqstr(support::addExtension(fromqstr(name), fromqstr(ext))); +} + +/// Return the extension of the file (not including the .) +QString getExtension(QString const & name) +{ + return toqstr(support::getExtension(fromqstr(name))); +} + } // namespace lyx diff --git a/src/frontends/qt4/qt_helpers.h b/src/frontends/qt4/qt_helpers.h index 920cc9c8a4..f42c993361 100644 --- a/src/frontends/qt4/qt_helpers.h +++ b/src/frontends/qt4/qt_helpers.h @@ -17,19 +17,19 @@ #include "support/qstring_helpers.h" #include "support/strfwd.h" -#include - class QComboBox; class QLineEdit; class QCheckBox; class QString; class QWidget; +template class QList; class LengthCombo; namespace lyx { namespace support { class FileFilterList; } +namespace support { class FileName; } namespace frontend { @@ -71,12 +71,15 @@ QString const qt_(char const * str, const char * comment = 0); QString const qt_(std::string const & str); /// -typedef std::pair LanguagePair; +typedef std::pair LanguagePair; /** If the caller is the character dialog, add "No change" and "Reset" * to the vector. */ -std::vector const getLanguageData(bool character_dlg); +QList languageData(bool character_dlg); + +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" @@ -103,12 +106,27 @@ void rescanTexStyles(); /** Fill \c contents from one of the three texfiles. * Each entry in the file list is returned as a name_with_path */ -void getTexFileList(std::string const & filename, std::vector & contents); +QStringList texFileList(QString const & filename); // wrapper around the docstring versions -QString internalPath(const QString &); -QString onlyFilename(const QString & str); -QString onlyPath(const QString & str); +QString internalPath(QString const &); +QString onlyFilename(QString const & str); +QString onlyPath(QString const & str); + +QString changeExtension(QString const & oldname, QString const & extension); + +/// Remove the extension from \p name +QString removeExtension(QString const & name); + +/** 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 addExtension(QString const & name, QString const & extension); + +/// Return the extension of the file (not including the .) +QString getExtension(QString const & name); } // namespace lyx