X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2Fqt4%2FGuiListings.cpp;h=d41724f15bfa5a126aad3c097664efdcbea4f7bd;hb=b7f6b979d0f889f08e735f35378bb20ba3788b4b;hp=da128829e69bd3cbb0446f4d379af34f7f79f480;hpb=fdbe775b9f5468e8f53dc83a66583f412b5970fb;p=lyx.git diff --git a/src/frontends/qt4/GuiListings.cpp b/src/frontends/qt4/GuiListings.cpp index da128829e6..d41724f15b 100644 --- a/src/frontends/qt4/GuiListings.cpp +++ b/src/frontends/qt4/GuiListings.cpp @@ -15,6 +15,8 @@ #include "qt_helpers.h" +#include "Buffer.h" +#include "BufferParams.h" #include "FuncRequest.h" #include "insets/InsetListings.h" @@ -293,10 +295,20 @@ string GuiListings::construct_params() string fontsize = font_sizes[qMax(0, fontsizeCO->currentIndex())]; string fontstyle = font_styles[qMax(0, fontstyleCO->currentIndex())]; string basicstyle; - if (fontsize != "default") - basicstyle = "\\" + fontsize; - if (fontstyle != "default") - basicstyle += "\\" + fontstyle; + string mintedsize; + bool const use_minted = buffer().params().use_minted; + if (fontsize != "default") { + if (use_minted) + mintedsize = "\\" + fontsize; + else + basicstyle = "\\" + fontsize; + } + if (fontstyle != "default") { + if (use_minted) + basicstyle = fontstyle.substr(0, 2); + else + basicstyle += "\\" + fontstyle; + } bool breakline = breaklinesCB->isChecked(); bool space = spaceCB->isChecked(); int tabsize = tabsizeSB->value(); @@ -306,7 +318,22 @@ string GuiListings::construct_params() // compose a string InsetListingsParams par; - if (language != "no language" && !contains(extra, "language=")) { + par.setMinted(use_minted); + if (use_minted) { + if (language == "no language" && !contains(extra, "language=")) { + string const & blp = buffer().params().listings_params; + size_t start = blp.find("language="); + if (start != string::npos) { + start += strlen("language="); + size_t len = blp.find(",", start); + if (len != string::npos) + len -= start; + par.addParam("language", blp.substr(start, len)); + } else + par.addParam("language", "TeX"); + } else + par.addParam("language", language); + } else if (language != "no language" && !contains(extra, "language=")) { if (dialect.empty()) par.addParam("language", language); else @@ -319,7 +346,7 @@ string GuiListings::construct_params() par.addParam("float", placement); if (numberSide != "none") par.addParam("numbers", numberSide); - if (numberfontsize != "default" && numberSide != "none") + if (numberfontsize != "default" && numberSide != "none" && !use_minted) par.addParam("numberstyle", "\\" + numberfontsize); if (!stepnumber.empty() && numberSide != "none") par.addParam("stepnumber", stepnumber); @@ -328,16 +355,18 @@ string GuiListings::construct_params() if (!lastline.empty()) par.addParam("lastline", lastline); if (!basicstyle.empty()) - par.addParam("basicstyle", basicstyle); + par.addParam(use_minted ? "fontfamily" : "basicstyle", basicstyle); + if (!mintedsize.empty()) + par.addParam("fontsize", mintedsize); if (breakline) par.addParam("breaklines", "true"); if (space) par.addParam("showspaces", "true"); - if (!spaceInString) + if (!spaceInString && !use_minted) par.addParam("showstringspaces", "false"); if (tabsize != 8) par.addParam("tabsize", convert(tabsize)); - if (extendedchars) + if (extendedchars && !use_minted) par.addParam("extendedchars", "true"); par.addParams(extra); return par.params(); @@ -346,21 +375,9 @@ string GuiListings::construct_params() docstring GuiListings::validate_listings_params() { - // use a cache here to avoid repeated validation - // of the same parameters - // FIXME THREAD - static string param_cache; - static docstring msg_cache; - if (bypassCB->isChecked()) return docstring(); - - string params = construct_params(); - if (params != param_cache) { - param_cache = params; - msg_cache = InsetListingsParams(params).validate(); - } - return msg_cache; + return InsetListingsParams(construct_params()).validate(); } @@ -425,12 +442,14 @@ void GuiListings::on_languageCO_currentIndexChanged(int index) } } dialectCO->setCurrentIndex(default_dialect); - dialectCO->setEnabled(dialectCO->count() > 1); + dialectCO->setEnabled(dialectCO->count() > 1 + && !buffer().params().use_minted); } void GuiListings::applyView() { + params_.setMinted(buffer().params().use_minted); params_.setInline(inlineCB->isChecked()); params_.setParams(construct_params()); } @@ -447,6 +466,7 @@ static string plainParam(string const & par) void GuiListings::updateContents() { + bool const use_minted = buffer().params().use_minted; // set default values listingsTB->setPlainText( qt_("Input listing parameters on the right. Enter ? for a list of parameters.")); @@ -515,7 +535,7 @@ void GuiListings::updateContents() if (in_gui) *it = ""; languageCO->setEnabled(in_gui); - dialectCO->setEnabled( + dialectCO->setEnabled(!use_minted && in_gui && dialectCO->count() > 1); } else if (prefixIs(*it, "float")) { floatCB->setChecked(true); @@ -583,6 +603,36 @@ void GuiListings::updateContents() } *it = ""; } + } else if (prefixIs(*it, "fontsize=")) { + string size; + for (int n = 0; font_sizes[n][0]; ++n) { + string const s = font_sizes[n]; + if (contains(*it, "\\" + s)) { + size = "\\" + s; + break; + } + } + if (!size.empty()) { + int n = findToken(font_sizes, size.substr(1)); + if (n >= 0) + fontsizeCO->setCurrentIndex(n); + } + *it = ""; + } else if (prefixIs(*it, "fontfamily=")) { + string style; + for (int n = 0; font_styles[n][0]; ++n) { + string const s = font_styles[n]; + if (contains(*it, "=" + s.substr(0,2))) { + style = "\\" + s; + break; + } + } + if (!style.empty()) { + int n = findToken(font_styles, style.substr(1)); + if (n >= 0) + fontstyleCO->setCurrentIndex(n); + } + *it = ""; } else if (prefixIs(*it, "breaklines=")) { breaklinesCB->setChecked(contains(*it, "true")); *it = ""; @@ -602,11 +652,15 @@ void GuiListings::updateContents() } numberStepLE->setEnabled(numberSideCO->currentIndex() > 0); - numberFontSizeCO->setEnabled(numberSideCO->currentIndex() > 0); + numberFontSizeCO->setEnabled(numberSideCO->currentIndex() > 0 + && !use_minted); + spaceInStringCB->setEnabled(!use_minted); + extendedcharsCB->setEnabled(!use_minted); // parameters that can be handled by widgets are cleared // the rest is put to the extra edit box. string extra = getStringFromVector(pars); listingsED->setPlainText(toqstr(InsetListingsParams(extra).separatedParams())); + params_.setMinted(use_minted); } @@ -626,6 +680,7 @@ bool GuiListings::initialiseParams(string const & data) void GuiListings::clearParams() { params_.clear(); + params_.setMinted(buffer().params().use_minted); } @@ -639,6 +694,7 @@ void GuiListings::dispatchParams() void GuiListings::setParams(InsetListingsParams const & params) { params_ = params; + params_.setMinted(buffer().params().use_minted); }