X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2Fqt4%2FGuiInclude.cpp;h=7f5c96bd1894ac0b2a4d5dd2c2917c1209d401a9;hb=82d6524298e37613703e901495f22002994679f3;hp=38b56befcae6a13378ebdc7c2664507c7bc8a81e;hpb=a1cec91afaca91968b46e695533c10ad2a3f73d3;p=lyx.git diff --git a/src/frontends/qt4/GuiInclude.cpp b/src/frontends/qt4/GuiInclude.cpp index 38b56befca..7f5c96bd18 100644 --- a/src/frontends/qt4/GuiInclude.cpp +++ b/src/frontends/qt4/GuiInclude.cpp @@ -3,88 +3,93 @@ * This file is part of LyX, the document processor. * Licence details can be found in the file COPYING. * + * \author Alejandro Aguilar Sierra * \author John Levon + * \author Angus Leeming * * Full author contact details are available in file CREDITS. */ #include -#include "support/os.h" -#include "support/lstrings.h" - #include "GuiInclude.h" -#include "CheckedLineEdit.h" -#include "Qt2BC.h" -#include "qt_helpers.h" +#include "Buffer.h" +#include "FuncRequest.h" +#include "LyXRC.h" +#include "qt_helpers.h" #include "LyXRC.h" +#include "support/gettext.h" +#include "support/lstrings.h" +#include "support/os.h" +#include "support/FileName.h" +#include "support/filetools.h" + #include "insets/InsetListingsParams.h" -#include "controllers/ControlInclude.h" +#include "insets/InsetInclude.h" #include #include -#include #include -using std::string; -using std::vector; +#include -using lyx::support::os::internal_path; -using lyx::support::prefixIs; -using lyx::support::getStringFromVector; -using lyx::support::getVectorFromString; +using namespace std; +using namespace lyx::support; +using namespace lyx::support::os; namespace lyx { namespace frontend { -///////////////////////////////////////////////////////////////////// -// -// GuiIncludeDialog -// -///////////////////////////////////////////////////////////////////// -GuiIncludeDialog::GuiIncludeDialog(GuiInclude * form) - : form_(form) +GuiInclude::GuiInclude(GuiView & lv) + : GuiDialog(lv, "include", qt_("Child Document")), + params_(insetCode("include")) { setupUi(this); - connect(okPB, SIGNAL(clicked()), form, SLOT(slotOK())); - connect(closePB, SIGNAL(clicked()), form, SLOT(slotClose())); + + connect(okPB, SIGNAL(clicked()), this, SLOT(slotOK())); + connect(closePB, SIGNAL(clicked()), this, SLOT(slotClose())); connect(visiblespaceCB, SIGNAL(clicked()), this, SLOT(change_adaptor())); connect(filenameED, SIGNAL(textChanged(const QString &)), this, SLOT(change_adaptor())); - connect(editPB, SIGNAL(clicked()), this, SLOT(editClicked())); - connect(browsePB, SIGNAL(clicked()), this, SLOT(browseClicked())); + connect(editPB, SIGNAL(clicked()), this, SLOT(edit())); + connect(browsePB, SIGNAL(clicked()), this, SLOT(browse())); connect(typeCO, SIGNAL(activated(int)), this, SLOT(change_adaptor())); connect(typeCO, SIGNAL(activated(int)), this, SLOT(typeChanged(int))); connect(previewCB, SIGNAL(clicked()), this, SLOT(change_adaptor())); connect(captionLE, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor())); connect(labelLE, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor())); connect(listingsED, SIGNAL(textChanged()), this, SLOT(change_adaptor())); - connect(listingsED, SIGNAL(textChanged()), this, SLOT(set_listings_msg())); + connect(listingsED, SIGNAL(textChanged()), this, SLOT(setListingsMsg())); connect(bypassCB, SIGNAL(clicked()), this, SLOT(change_adaptor())); - connect(bypassCB, SIGNAL(clicked()), this, SLOT(set_listings_msg())); + connect(bypassCB, SIGNAL(clicked()), this, SLOT(setListingsMsg())); setFocusProxy(filenameED); -} + bc().setPolicy(ButtonPolicy::OkApplyCancelReadOnlyPolicy); + bc().setOK(okPB); + bc().setCancel(closePB); + bc().addReadOnly(filenameED); + bc().addReadOnly(browsePB); + bc().addReadOnly(visiblespaceCB); + bc().addReadOnly(typeCO); + bc().addReadOnly(listingsED); -void GuiIncludeDialog::show() -{ - QDialog::show(); + bc().addCheckedLineEdit(filenameED, filenameLA); } -void GuiIncludeDialog::change_adaptor() +void GuiInclude::change_adaptor() { - form_->changed(); + changed(); } -docstring GuiIncludeDialog::validate_listings_params() +docstring GuiInclude::validate_listings_params() { // use a cache here to avoid repeated validation // of the same parameters @@ -103,7 +108,7 @@ docstring GuiIncludeDialog::validate_listings_params() } -void GuiIncludeDialog::set_listings_msg() +void GuiInclude::setListingsMsg() { static bool isOK = true; docstring msg = validate_listings_params(); @@ -120,14 +125,7 @@ void GuiIncludeDialog::set_listings_msg() } -void GuiIncludeDialog::closeEvent(QCloseEvent * e) -{ - form_->slotWMHide(); - e->accept(); -} - - -void GuiIncludeDialog::typeChanged(int v) +void GuiInclude::typeChanged(int v) { switch (v) { //case Include @@ -168,67 +166,22 @@ void GuiIncludeDialog::typeChanged(int v) } -void GuiIncludeDialog::editClicked() +void GuiInclude::paramsToDialog(InsetCommandParams const & params_) { - form_->edit(); -} - - -void GuiIncludeDialog::browseClicked() -{ - form_->browse(); -} - - -///////////////////////////////////////////////////////////////////// -// -// GuiInclude -// -///////////////////////////////////////////////////////////////////// - - -typedef QController > IncludeBase; - - -GuiInclude::GuiInclude(Dialog & parent) - : IncludeBase(parent, _("Child Document")) -{} - - -void GuiInclude::build_dialog() -{ - dialog_.reset(new GuiIncludeDialog(this)); - - bcview().setOK(dialog_->okPB); - bcview().setCancel(dialog_->closePB); - bcview().addReadOnly(dialog_->filenameED); - bcview().addReadOnly(dialog_->browsePB); - bcview().addReadOnly(dialog_->visiblespaceCB); - bcview().addReadOnly(dialog_->typeCO); - bcview().addReadOnly(dialog_->listingsED); - - addCheckedLineEdit(bcview(), dialog_->filenameED, dialog_->filenameLA); -} - - -void GuiInclude::update_contents() -{ - InsetCommandParams const & params = controller().params(); - - dialog_->filenameED->setText(toqstr(params["filename"])); - - dialog_->visiblespaceCB->setChecked(false); - dialog_->visiblespaceCB->setEnabled(false); - dialog_->previewCB->setChecked(false); - dialog_->previewCB->setEnabled(false); - dialog_->listingsGB->setEnabled(false); - dialog_->captionLE->clear(); - dialog_->labelLE->clear(); - dialog_->listingsED->clear(); - dialog_->listingsTB->setPlainText( + filenameED->setText(toqstr(params_["filename"])); + + visiblespaceCB->setChecked(false); + visiblespaceCB->setEnabled(false); + previewCB->setChecked(false); + previewCB->setEnabled(false); + listingsGB->setEnabled(false); + captionLE->clear(); + labelLE->clear(); + listingsED->clear(); + listingsTB->setPlainText( qt_("Input listing parameters on the right. Enter ? for a list of parameters.")); - string cmdname = controller().params().getCmdName(); + string cmdname = params_.getCmdName(); if (cmdname != "include" && cmdname != "verbatiminput" && cmdname != "verbatiminput*" && @@ -236,123 +189,169 @@ void GuiInclude::update_contents() cmdname = "input"; if (cmdname == "include") { - dialog_->typeCO->setCurrentIndex(0); + typeCO->setCurrentIndex(0); } else if (cmdname == "input") { - dialog_->typeCO->setCurrentIndex(1); - dialog_->previewCB->setEnabled(true); - dialog_->previewCB->setChecked(params.preview()); + typeCO->setCurrentIndex(1); + previewCB->setEnabled(true); + previewCB->setChecked(params_.preview()); } else if (cmdname == "verbatiminput*") { - dialog_->typeCO->setCurrentIndex(2); - dialog_->visiblespaceCB->setEnabled(true); - dialog_->visiblespaceCB->setChecked(true); + typeCO->setCurrentIndex(2); + visiblespaceCB->setEnabled(true); + visiblespaceCB->setChecked(true); } else if (cmdname == "verbatiminput") { - dialog_->typeCO->setCurrentIndex(2); - dialog_->visiblespaceCB->setEnabled(true); + typeCO->setCurrentIndex(2); + visiblespaceCB->setEnabled(true); } else if (cmdname == "lstinputlisting") { - dialog_->typeCO->setCurrentIndex(3); - dialog_->listingsGB->setEnabled(true); - dialog_->listingsED->setEnabled(true); - InsetListingsParams par(params.getOptions()); + typeCO->setCurrentIndex(3); + listingsGB->setEnabled(true); + listingsED->setEnabled(true); + InsetListingsParams par(to_utf8(params_["lstparams"])); // extract caption and label and put them into their respective editboxes vector pars = getVectorFromString(par.separatedParams(), "\n"); for (vector::iterator it = pars.begin(); it != pars.end(); ++it) { if (prefixIs(*it, "caption=")) { string cap = it->substr(8); - if (cap[0] == '{' && cap[cap.size()-1] == '}') { - dialog_->captionLE->setText(toqstr(cap.substr(1, cap.size()-2))); + if (cap[0] == '{' && cap[cap.size() - 1] == '}') { + captionLE->setText(toqstr(cap.substr(1, cap.size() - 2))); *it = ""; } } else if (prefixIs(*it, "label=")) { string lbl = it->substr(6); if (lbl[0] == '{' && lbl[lbl.size()-1] == '}') { - dialog_->labelLE->setText(toqstr(lbl.substr(1, lbl.size()-2))); + labelLE->setText(toqstr(lbl.substr(1, lbl.size() - 2))); *it = ""; } } } // 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())); } + + // Make sure that the bc is in the INITIAL state + if (bc().policy().buttonStatus(ButtonPolicy::OKAY)) + bc().restore(); } -void GuiInclude::apply() +void GuiInclude::applyView() { - InsetCommandParams params = controller().params(); - - params["filename"] = from_utf8(internal_path(fromqstr(dialog_->filenameED->text()))); - params.preview(dialog_->previewCB->isChecked()); + params_["filename"] = from_utf8(internal_path(fromqstr(filenameED->text()))); + params_.preview(previewCB->isChecked()); - int const item = dialog_->typeCO->currentIndex(); + int const item = typeCO->currentIndex(); if (item == 0) { - params.setCmdName("include"); + params_.setCmdName("include"); } else if (item == 1) { - params.setCmdName("input"); + params_.setCmdName("input"); } else if (item == 3) { - params.setCmdName("lstinputlisting"); + params_.setCmdName("lstinputlisting"); // the parameter string should have passed validation - InsetListingsParams par(fromqstr(dialog_->listingsED->toPlainText())); - string caption = fromqstr(dialog_->captionLE->text()); - string label = fromqstr(dialog_->labelLE->text()); + InsetListingsParams par(fromqstr(listingsED->toPlainText())); + string caption = fromqstr(captionLE->text()); + string label = fromqstr(labelLE->text()); if (!caption.empty()) par.addParam("caption", "{" + caption + "}"); if (!label.empty()) par.addParam("label", "{" + label + "}"); - params.setOptions(par.params()); + string const listparams = par.params(); + params_["lstparams"] = from_utf8(listparams); } else { - if (dialog_->visiblespaceCB->isChecked()) - params.setCmdName("verbatiminput*"); + if (visiblespaceCB->isChecked()) + params_.setCmdName("verbatiminput*"); else - params.setCmdName("verbatiminput"); + params_.setCmdName("verbatiminput"); } - controller().setParams(params); } void GuiInclude::browse() { - ControlInclude::Type type; + Type type; - int const item = dialog_->typeCO->currentIndex(); + int const item = typeCO->currentIndex(); if (item == 0) - type = ControlInclude::INCLUDE; + type = INCLUDE; else if (item == 1) - type = ControlInclude::INPUT; + type = INPUT; else if (item == 2) - type = ControlInclude::VERBATIM; + type = VERBATIM; else - type = ControlInclude::LISTINGS; + type = LISTINGS; - docstring const & name = - controller().browse(qstring_to_ucs4(dialog_->filenameED->text()), type); - if (!name.empty()) - dialog_->filenameED->setText(toqstr(name)); + QString name = browse(filenameED->text(), type); + if (!name.isEmpty()) + filenameED->setText(name); } void GuiInclude::edit() { - if (isValid()) { - string const file = fromqstr(dialog_->filenameED->text()); + if (!isValid()) + return; + string const file = fromqstr(filenameED->text()); + if (bc().policy().buttonStatus(ButtonPolicy::OKAY)) { slotOK(); - controller().edit(file); - } + applyView(); + } else + hideView(); + dispatch(FuncRequest(LFUN_INSET_EDIT)); } bool GuiInclude::isValid() { - return !dialog_->filenameED->text().isEmpty() && - dialog_->validate_listings_params().empty(); + return !filenameED->text().isEmpty() && validate_listings_params().empty(); +} + + +QString GuiInclude::browse(QString const & in_name, Type in_type) const +{ + QString const title = qt_("Select document to include"); + + // input TeX, verbatim, or LyX file ? + QStringList filters; + switch (in_type) { + case INCLUDE: + case INPUT: + filters = fileFilters(qt_("LaTeX/LyX Documents (*.tex *.lyx)")); + break; + case VERBATIM: + case LISTINGS: + break; + } + + QString const docpath = toqstr(support::onlyPath(buffer().absFileName())); + + return browseRelToParent(in_name, docpath, title, filters, false, + qt_("Documents|#o#O"), toqstr(lyxrc.document_path)); +} + + +bool GuiInclude::initialiseParams(std::string const & data) +{ + InsetCommand::string2params(data, params_); + paramsToDialog(params_); + return true; } + +void GuiInclude::dispatchParams() +{ + std::string const lfun = InsetCommand::params2string(params_); + dispatch(FuncRequest(getLfun(), lfun)); +} + + +Dialog * createGuiInclude(GuiView & lv) { return new GuiInclude(lv); } + + } // namespace frontend } // namespace lyx -#include "GuiInclude_moc.cpp" +#include "moc_GuiInclude.cpp"