X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2Fqt4%2FGuiListings.cpp;h=9bb8f05dba0cef6f8f7df61ee45ec5722ff725e4;hb=425d092204118ea6c24c28e85fdf03fcf2bb51a4;hp=ea4de2e9ea88486810a6136607bf3ecd1a81120d;hpb=212386be8a1573fb52b5da718961835816a3c8e2;p=lyx.git diff --git a/src/frontends/qt4/GuiListings.cpp b/src/frontends/qt4/GuiListings.cpp index ea4de2e9ea..9bb8f05dba 100644 --- a/src/frontends/qt4/GuiListings.cpp +++ b/src/frontends/qt4/GuiListings.cpp @@ -4,7 +4,7 @@ * Licence details can be found in the file COPYING. * * \author Bo Peng - * \author Jürgen Spitzmüller + * \author Jürgen Spitzmüller * * Full author contact details are available in file CREDITS. */ @@ -12,35 +12,34 @@ #include #include "GuiListings.h" + #include "qt_helpers.h" + +#include "FuncRequest.h" + +#include "insets/InsetListings.h" #include "insets/InsetListingsParams.h" -#include "debug.h" #include "support/convert.h" +#include "support/debug.h" +#include "support/gettext.h" #include "support/lstrings.h" #include -#include #include #include #include - -using std::string; -using std::vector; -using lyx::support::findToken; -using lyx::support::getVectorFromString; -using lyx::support::getStringFromVector; -using lyx::support::prefixIs; -using lyx::support::suffixIs; -using lyx::support::contains; +using namespace std; +using namespace lyx::support; namespace lyx { namespace frontend { + ///////////////////////////////////////////////////////////////////// // -// GuiListingsDialog +// GuiListings // ///////////////////////////////////////////////////////////////////// @@ -48,7 +47,7 @@ namespace frontend { char const * languages[] = { "no language", "ABAP", "ACSL", "Ada", "ALGOL", "Assembler", "Awk", "bash", "Basic", "C", "C++", "Caml", "Clean", "Cobol", "Comal 80", "command.com", "Comsol", "csh", "Delphi", - "Eiffel", "Elan", "Euphoria", "Fortran", "Gnuplot", "Haskell", "HTML", "IDL", "inform", + "Eiffel", "Elan", "erlang", "Euphoria", "Fortran", "Gnuplot", "Haskell", "HTML", "IDL", "inform", "Java", "JVMIS", "ksh", "Lingo", "Lisp", "Logo", "make", "Mathematica", "Matlab", "Mercury", "MetaPost", "Miranda", "ML", "Modula-2", "MuPAD", "NASTRAN", "Oberon-2", "OCL", "Octave", "Oz", "Pascal", "Perl", "PHP", "PL/I", "Plasm", "PostScript", "POV", "Prolog", "Promela", @@ -60,7 +59,7 @@ char const * languages[] = char const * languages_gui[] = { N_("No language"), "ABAP", "ACSL", "Ada", "ALGOL", "Assembler", "Awk", "bash", "Basic", "C", "C++", "Caml", "Clean", "Cobol", "Comal 80", "command.com", "Comsol", "csh", "Delphi", - "Eiffel", "Elan", "Euphoria", "Fortran", "Gnuplot", "Haskell", "HTML", "IDL", "inform", + "Eiffel", "Elan", "Erlang", "Euphoria", "Fortran", "Gnuplot", "Haskell", "HTML", "IDL", "inform", "Java", "JVMIS", "ksh", "Lingo", "Lisp", "Logo", "make", "Mathematica", "Matlab", "Mercury", "MetaPost", "Miranda", "ML", "Modula-2", "MuPAD", "NASTRAN", "Oberon-2", "OCL", "Octave", "Oz", "Pascal", "Perl", "PHP", "PL/I", "Plasm", "PostScript", "POV", "Prolog", "Promela", @@ -161,36 +160,58 @@ char const * font_styles_gui[] = -GuiListingsDialog::GuiListingsDialog(GuiListings * form) - : form_(form) +GuiListings::GuiListings(GuiView & lv) + : GuiDialog(lv, "listings", qt_("Program Listing Settings")) { setupUi(this); - connect(okPB, SIGNAL(clicked()), form, SLOT(slotOK())); - connect(applyPB, SIGNAL(clicked()), form_, SLOT(slotApply())); - connect(closePB, SIGNAL(clicked()), form, SLOT(slotClose())); - - connect(languageCO, SIGNAL(currentIndexChanged(int)), this, SLOT(change_adaptor())); - connect(dialectCO, SIGNAL(currentIndexChanged(int)), this, SLOT(change_adaptor())); - connect(inlineCB, SIGNAL(clicked()), this, SLOT(change_adaptor())); - connect(floatCB, SIGNAL(clicked()), this, SLOT(change_adaptor())); - connect(placementLE, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor())); - connect(numberSideCO, SIGNAL(currentIndexChanged(int)), this, SLOT(change_adaptor())); - connect(numberStepLE, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor())); - connect(numberFontSizeCO, SIGNAL(currentIndexChanged(int)), this, SLOT(change_adaptor())); - connect(firstlineLE, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor())); - connect(lastlineLE, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor())); - connect(fontsizeCO, SIGNAL(currentIndexChanged(int)), this, SLOT(change_adaptor())); - connect(fontstyleCO, SIGNAL(currentIndexChanged(int)), this, SLOT(change_adaptor())); - connect(breaklinesCB, SIGNAL(clicked()), this, SLOT(change_adaptor())); - connect(spaceCB, SIGNAL(clicked()), this, SLOT(change_adaptor())); - connect(spaceInStringCB, SIGNAL(clicked()), this, SLOT(change_adaptor())); - connect(extendedcharsCB, SIGNAL(clicked()), this, SLOT(change_adaptor())); - - connect(listingsED, SIGNAL(textChanged()), this, SLOT(change_adaptor())); - connect(listingsED, SIGNAL(textChanged()), this, SLOT(set_listings_msg())); - connect(bypassCB, SIGNAL(clicked()), this, SLOT(change_adaptor())); - connect(bypassCB, SIGNAL(clicked()), this, SLOT(set_listings_msg())); + connect(okPB, SIGNAL(clicked()), this, SLOT(slotOK())); + connect(applyPB, SIGNAL(clicked()), this, SLOT(slotApply())); + connect(closePB, SIGNAL(clicked()), this, SLOT(slotClose())); + + connect(languageCO, SIGNAL(currentIndexChanged(int)), + this, SLOT(change_adaptor())); + connect(dialectCO, SIGNAL(currentIndexChanged(int)), + this, SLOT(change_adaptor())); + connect(inlineCB, SIGNAL(clicked()), + this, SLOT(change_adaptor())); + connect(floatCB, SIGNAL(clicked()), + this, SLOT(change_adaptor())); + connect(placementLE, SIGNAL(textChanged(QString)), + this, SLOT(change_adaptor())); + connect(numberSideCO, SIGNAL(currentIndexChanged(int)), + this, SLOT(change_adaptor())); + connect(numberStepLE, SIGNAL(textChanged(QString)), + this, SLOT(change_adaptor())); + connect(numberFontSizeCO, SIGNAL(currentIndexChanged(int)), + this, SLOT(change_adaptor())); + connect(firstlineLE, SIGNAL(textChanged(QString)), + this, SLOT(change_adaptor())); + connect(lastlineLE, SIGNAL(textChanged(QString)), + this, SLOT(change_adaptor())); + connect(fontsizeCO, SIGNAL(currentIndexChanged(int)), + this, SLOT(change_adaptor())); + connect(fontstyleCO, SIGNAL(currentIndexChanged(int)), + this, SLOT(change_adaptor())); + connect(breaklinesCB, SIGNAL(clicked()), + this, SLOT(change_adaptor())); + connect(spaceCB, SIGNAL(clicked()), + this, SLOT(change_adaptor())); + connect(spaceInStringCB, SIGNAL(clicked()), + this, SLOT(change_adaptor())); + connect(tabsizeSB, SIGNAL(valueChanged(int)), + this, SLOT(change_adaptor())); + connect(extendedcharsCB, SIGNAL(clicked()), + this, SLOT(change_adaptor())); + + connect(listingsED, SIGNAL(textChanged()), + this, SLOT(change_adaptor())); + connect(listingsED, SIGNAL(textChanged()), + this, SLOT(setListingsMsg())); + connect(bypassCB, SIGNAL(clicked()), + this, SLOT(change_adaptor())); + connect(bypassCB, SIGNAL(clicked()), + this, SLOT(setListingsMsg())); for (int n = 0; languages[n][0]; ++n) languageCO->addItem(qt_(languages_gui[n])); @@ -209,29 +230,32 @@ GuiListingsDialog::GuiListingsDialog(GuiListings * form) firstlineLE->setValidator(new QIntValidator(0, 1000000, this)); lastlineLE->setValidator(new QIntValidator(0, 1000000, this)); placementLE->setValidator(new QRegExpValidator(QRegExp("[\\*tbph]*"), this)); -} + bc().setPolicy(ButtonPolicy::NoRepeatedApplyReadOnlyPolicy); + bc().setOK(okPB); + bc().setApply(applyPB); + bc().setCancel(closePB); + listingsTB->setPlainText( + qt_("Input listing parameters on the right. Enter ? for a list of parameters.")); + + updateContents(); -void GuiListingsDialog::closeEvent(QCloseEvent * e) -{ - form_->slotWMHide(); - e->accept(); } -void GuiListingsDialog::change_adaptor() +void GuiListings::change_adaptor() { - form_->changed(); + changed(); } -string GuiListingsDialog::construct_params() +string GuiListings::construct_params() { - string language = languages[languageCO->currentIndex()]; + string language = languages[qMax(0, languageCO->currentIndex())]; string dialect; string const dialect_gui = fromqstr(dialectCO->currentText()); if (dialectCO->currentIndex() > 0) { - for (size_t i = 0; i < nr_dialects; ++i) { + for (size_t i = 0; i != nr_dialects; ++i) { if (dialect_gui == dialects[i].gui && dialects[i].language == language && !dialects[i].is_default) { @@ -247,7 +271,7 @@ string GuiListingsDialog::construct_params() placement = fromqstr(placementLE->text()); string numberSide; - switch (numberSideCO->currentIndex()) { + switch (qMax(0, numberSideCO->currentIndex())) { case 0: numberSide = "none"; break; @@ -262,12 +286,12 @@ string GuiListingsDialog::construct_params() break; } string stepnumber = fromqstr(numberStepLE->text()); - string numberfontsize = font_sizes[numberFontSizeCO->currentIndex()]; + string numberfontsize = font_sizes[qMax(0, numberFontSizeCO->currentIndex())]; string firstline = fromqstr(firstlineLE->text()); string lastline = fromqstr(lastlineLE->text()); - string fontsize = font_sizes[fontsizeCO->currentIndex()]; - string fontstyle = font_styles[fontstyleCO->currentIndex()]; + string fontsize = font_sizes[qMax(0, fontsizeCO->currentIndex())]; + string fontstyle = font_styles[qMax(0, fontstyleCO->currentIndex())]; string basicstyle; if (fontsize != "default") basicstyle = "\\" + fontsize; @@ -275,6 +299,7 @@ string GuiListingsDialog::construct_params() basicstyle += "\\" + fontstyle; bool breakline = breaklinesCB->isChecked(); bool space = spaceCB->isChecked(); + int tabsize = tabsizeSB->value(); bool spaceInString = spaceInStringCB->isChecked(); bool extendedchars = extendedcharsCB->isChecked(); string extra = fromqstr(listingsED->toPlainText()); @@ -310,6 +335,8 @@ string GuiListingsDialog::construct_params() par.addParam("showspaces", "true"); if (!spaceInString) par.addParam("showstringspaces", "false"); + if (tabsize != 8) + par.addParam("tabsize", convert(tabsize)); if (extendedchars) par.addParam("extendedchars", "true"); par.addParams(extra); @@ -317,12 +344,12 @@ string GuiListingsDialog::construct_params() } -docstring GuiListingsDialog::validate_listings_params() +docstring GuiListings::validate_listings_params() { // use a cache here to avoid repeated validation // of the same parameters - static string param_cache = string(); - static docstring msg_cache = docstring(); + static string param_cache; + static docstring msg_cache; if (bypassCB->isChecked()) return docstring(); @@ -336,7 +363,7 @@ docstring GuiListingsDialog::validate_listings_params() } -void GuiListingsDialog::set_listings_msg() +void GuiListings::setListingsMsg() { static bool isOK = true; docstring msg = validate_listings_params(); @@ -353,7 +380,7 @@ void GuiListingsDialog::set_listings_msg() } -void GuiListingsDialog::on_floatCB_stateChanged(int state) +void GuiListings::on_floatCB_stateChanged(int state) { if (state == Qt::Checked) { inlineCB->setChecked(false); @@ -363,7 +390,7 @@ void GuiListingsDialog::on_floatCB_stateChanged(int state) } -void GuiListingsDialog::on_inlineCB_stateChanged(int state) +void GuiListings::on_inlineCB_stateChanged(int state) { if (state == Qt::Checked) { floatCB->setChecked(false); @@ -372,14 +399,14 @@ void GuiListingsDialog::on_inlineCB_stateChanged(int state) } -void GuiListingsDialog::on_numberSideCO_currentIndexChanged(int index) +void GuiListings::on_numberSideCO_currentIndexChanged(int index) { numberStepLE->setEnabled(index > 0); numberFontSizeCO->setEnabled(index > 0); } -void GuiListingsDialog::on_languageCO_currentIndexChanged(int index) +void GuiListings::on_languageCO_currentIndexChanged(int index) { dialectCO->clear(); // 0 is "no dialect" @@ -387,7 +414,7 @@ void GuiListingsDialog::on_languageCO_currentIndexChanged(int index) dialectCO->addItem(qt_("No dialect")); string const language = languages[index]; - for (size_t i = 0; i < nr_dialects; ++i) { + for (size_t i = 0; i != nr_dialects; ++i) { if (language == dialects[i].language) { dialectCO->addItem(qt_(dialects[i].gui)); if (dialects[i].is_default) @@ -400,45 +427,14 @@ void GuiListingsDialog::on_languageCO_currentIndexChanged(int index) } -///////////////////////////////////////////////////////////////////// -// -// GuiListings -// -///////////////////////////////////////////////////////////////////// - - -GuiListings::GuiListings(GuiDialog & parent) - : GuiView(parent, _("Program Listing Settings")) -{ -} - - -void GuiListings::build_dialog() -{ - dialog_.reset(new GuiListingsDialog(this)); - - bc().setOK(dialog_->okPB); - bc().setApply(dialog_->applyPB); - bc().setCancel(dialog_->closePB); - dialog_->listingsTB->setPlainText( - qt_("Input listing parameters on the right. Enter ? for a list of parameters.")); - - update_contents(); -} - - -void GuiListings::apply() +void GuiListings::applyView() { - InsetListingsParams & params = controller().params(); - params.setInline(dialog_->inlineCB->isChecked()); - params.setParams(dialog_->construct_params()); - controller().setParams(params); + params_.setInline(inlineCB->isChecked()); + params_.setParams(construct_params()); } -namespace { - -string plainParam(std::string const & par) +static string plainParam(string const & par) { // remove enclosing braces if (prefixIs(par, "{") && suffixIs(par, "}")) @@ -446,39 +442,37 @@ string plainParam(std::string const & par) return par; } -} //namespace anon - -void GuiListings::update_contents() +void GuiListings::updateContents() { // set default values - dialog_->listingsTB->setPlainText( + listingsTB->setPlainText( qt_("Input listing parameters on the right. Enter ? for a list of parameters.")); - dialog_->languageCO->setCurrentIndex(findToken(languages, "no language")); - dialog_->dialectCO->setCurrentIndex(0); - dialog_->floatCB->setChecked(false); - dialog_->placementLE->clear(); - dialog_->numberSideCO->setCurrentIndex(0); - dialog_->numberStepLE->clear(); - dialog_->numberFontSizeCO->setCurrentIndex(findToken(font_sizes, "default")); - dialog_->firstlineLE->clear(); - dialog_->lastlineLE->clear(); - dialog_->fontstyleCO->setCurrentIndex(findToken(font_styles, "default")); - dialog_->fontsizeCO->setCurrentIndex(findToken(font_sizes, "default")); - dialog_->breaklinesCB->setChecked(false); - dialog_->spaceCB->setChecked(false); - dialog_->spaceInStringCB->setChecked(true); - dialog_->extendedcharsCB->setChecked(false); + languageCO->setCurrentIndex(findToken(languages, "no language")); + dialectCO->setCurrentIndex(0); + floatCB->setChecked(false); + placementLE->clear(); + numberSideCO->setCurrentIndex(0); + numberStepLE->clear(); + numberFontSizeCO->setCurrentIndex(findToken(font_sizes, "default")); + firstlineLE->clear(); + lastlineLE->clear(); + fontstyleCO->setCurrentIndex(findToken(font_styles, "default")); + fontsizeCO->setCurrentIndex(findToken(font_sizes, "default")); + breaklinesCB->setChecked(false); + spaceCB->setChecked(false); + spaceInStringCB->setChecked(true); + tabsizeSB->setValue(8); + extendedcharsCB->setChecked(false); // set values from param string - InsetListingsParams & params = controller().params(); - dialog_->inlineCB->setChecked(params.isInline()); - if (params.isInline()) { - dialog_->floatCB->setChecked(false); - dialog_->placementLE->setEnabled(false); + inlineCB->setChecked(params_.isInline()); + if (params_.isInline()) { + floatCB->setChecked(false); + placementLE->setEnabled(false); } // break other parameters and set values - vector pars = getVectorFromString(params.separatedParams(), "\n"); + vector pars = getVectorFromString(params_.separatedParams(), "\n"); // process each of them for (vector::iterator it = pars.begin(); it != pars.end(); ++it) { @@ -489,43 +483,44 @@ void GuiListings::update_contents() string dialect; bool in_gui = false; if (prefixIs(arg, "[") && contains(arg, "]")) { - string::size_type end_dialect = arg.find("]"); + size_t end_dialect = arg.find("]"); dialect = arg.substr(1, end_dialect - 1); language = arg.substr(end_dialect + 1); - } else + } else { language = arg; + } int n = findToken(languages, language); if (n >= 0) { - dialog_->languageCO->setCurrentIndex(n); + languageCO->setCurrentIndex(n); in_gui = true; } // on_languageCO_currentIndexChanged should have set dialects if (!dialect.empty()) { string dialect_gui; - for (size_t i = 0; i < nr_dialects; ++i) { + for (size_t i = 0; i != nr_dialects; ++i) { if (dialect == dialects[i].dialect && dialects[i].language == language) { dialect_gui = dialects[i].gui; break; } } - n = dialog_->dialectCO->findText(qt_(dialect_gui)); + n = dialectCO->findText(qt_(dialect_gui)); if (n >= 0) - dialog_->dialectCO->setCurrentIndex(n); + dialectCO->setCurrentIndex(n); else in_gui = false; } if (in_gui) *it = ""; - dialog_->languageCO->setEnabled(in_gui); - dialog_->dialectCO->setEnabled( - in_gui && dialog_->dialectCO->count() > 1); + languageCO->setEnabled(in_gui); + dialectCO->setEnabled( + in_gui && dialectCO->count() > 1); } else if (prefixIs(*it, "float")) { - dialog_->floatCB->setChecked(true); - dialog_->inlineCB->setChecked(false); - dialog_->placementLE->setEnabled(true); + floatCB->setChecked(true); + inlineCB->setChecked(false); + placementLE->setEnabled(true); if (prefixIs(*it, "float=")) - dialog_->placementLE->setText( + placementLE->setText( toqstr(plainParam(it->substr(6)))); *it = ""; } else if (prefixIs(*it, "numbers=")) { @@ -535,24 +530,24 @@ void GuiListings::update_contents() n = 1; else if (s == "right") n = 2; - dialog_->numberSideCO->setCurrentIndex(n); + numberSideCO->setCurrentIndex(n); *it = ""; } else if (prefixIs(*it, "stepnumber=")) { - dialog_->numberStepLE->setText( + numberStepLE->setText( toqstr(plainParam(it->substr(11)))); *it = ""; } else if (prefixIs(*it, "numberstyle=")) { string par = plainParam(it->substr(12)); int n = findToken(font_sizes, par.substr(1)); if (n >= 0) - dialog_->numberFontSizeCO->setCurrentIndex(n); + numberFontSizeCO->setCurrentIndex(n); *it = ""; } else if (prefixIs(*it, "firstline=")) { - dialog_->firstlineLE->setText( + firstlineLE->setText( toqstr(plainParam(it->substr(10)))); *it = ""; } else if (prefixIs(*it, "lastline=")) { - dialog_->lastlineLE->setText( + lastlineLE->setText( toqstr(plainParam(it->substr(9)))); *it = ""; } else if (prefixIs(*it, "basicstyle=")) { @@ -577,47 +572,79 @@ void GuiListings::update_contents() if (!style.empty()) { int n = findToken(font_styles, style.substr(1)); if (n >= 0) - dialog_->fontstyleCO->setCurrentIndex(n); + fontstyleCO->setCurrentIndex(n); } if (!size.empty()) { int n = findToken(font_sizes, size.substr(1)); if (n >= 0) - dialog_->fontsizeCO->setCurrentIndex(n); + fontsizeCO->setCurrentIndex(n); } *it = ""; } } else if (prefixIs(*it, "breaklines=")) { - dialog_->breaklinesCB->setChecked(contains(*it, "true")); + breaklinesCB->setChecked(contains(*it, "true")); *it = ""; } else if (prefixIs(*it, "showspaces=")) { - dialog_->spaceCB->setChecked(contains(*it, "true")); + spaceCB->setChecked(contains(*it, "true")); *it = ""; } else if (prefixIs(*it, "showstringspaces=")) { - dialog_->spaceInStringCB->setChecked(contains(*it, "true")); + spaceInStringCB->setChecked(contains(*it, "true")); + *it = ""; + } else if (prefixIs(*it, "tabsize=")) { + tabsizeSB->setValue(convert(plainParam(it->substr(8)))); *it = ""; } else if (prefixIs(*it, "extendedchars=")) { - dialog_->extendedcharsCB->setChecked(contains(*it, "true")); + extendedcharsCB->setChecked(contains(*it, "true")); *it = ""; } } - dialog_->numberStepLE->setEnabled(dialog_->numberSideCO->currentIndex() > 0); - dialog_->numberFontSizeCO->setEnabled(dialog_->numberSideCO->currentIndex() > 0); + numberStepLE->setEnabled(numberSideCO->currentIndex() > 0); + numberFontSizeCO->setEnabled(numberSideCO->currentIndex() > 0); // parameters that can be handled by widgets are cleared // the rest is put to the extra edit box. string extra = getStringFromVector(pars); - dialog_->listingsED->setPlainText(toqstr(InsetListingsParams(extra).separatedParams())); + listingsED->setPlainText(toqstr(InsetListingsParams(extra).separatedParams())); } bool GuiListings::isValid() { - return dialog_->validate_listings_params().empty(); + return validate_listings_params().empty(); +} + + +bool GuiListings::initialiseParams(string const & data) +{ + InsetListings::string2params(data, params_); + return true; +} + + +void GuiListings::clearParams() +{ + params_.clear(); +} + + +void GuiListings::dispatchParams() +{ + string const lfun = InsetListings::params2string(params_); + dispatch(FuncRequest(getLfun(), lfun)); } +void GuiListings::setParams(InsetListingsParams const & params) +{ + params_ = params; +} + + +Dialog * createGuiListings(GuiView & lv) { return new GuiListings(lv); } + + } // namespace frontend } // namespace lyx -#include "GuiListings_moc.cpp" +#include "moc_GuiListings.cpp"