X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2Fqt4%2FGuiInclude.cpp;h=32c8f097a0b2c3aaa9530b8cd5e223ba3d08449f;hb=425d092204118ea6c24c28e85fdf03fcf2bb51a4;hp=a6c3e155391899166121eb6c56fce27307e6377b;hpb=34492a9d033aef3d4369d4d758b01f3969ef3af0;p=lyx.git diff --git a/src/frontends/qt4/GuiInclude.cpp b/src/frontends/qt4/GuiInclude.cpp index a6c3e15539..32c8f097a0 100644 --- a/src/frontends/qt4/GuiInclude.cpp +++ b/src/frontends/qt4/GuiInclude.cpp @@ -3,7 +3,9 @@ * 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. */ @@ -11,39 +13,42 @@ #include #include "GuiInclude.h" -#include "ControlInclude.h" -#include "support/os.h" -#include "support/lstrings.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 "insets/InsetInclude.h" #include #include -#include #include -using std::string; -using std::vector; - -using lyx::support::os::internal_path; -using lyx::support::prefixIs; -using lyx::support::getStringFromVector; -using lyx::support::getVectorFromString; +#include +using namespace std; +using namespace lyx::support; +using namespace lyx::support::os; namespace lyx { namespace frontend { -GuiIncludeDialog::GuiIncludeDialog(LyXView & lv) - : GuiDialog(lv, "include") + +GuiInclude::GuiInclude(GuiView & lv) + : GuiDialog(lv, "include", qt_("Child Document")), + params_(insetCode("include")) { setupUi(this); - setViewTitle(_("Child Document")); - setController(new ControlInclude(*this)); connect(okPB, SIGNAL(clicked()), this, SLOT(slotOK())); connect(closePB, SIGNAL(clicked()), this, SLOT(slotClose())); @@ -51,17 +56,17 @@ GuiIncludeDialog::GuiIncludeDialog(LyXView & lv) 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); @@ -78,19 +83,13 @@ GuiIncludeDialog::GuiIncludeDialog(LyXView & lv) } -ControlInclude & GuiIncludeDialog::controller() const -{ - return static_cast(GuiDialog::controller()); -} - - -void GuiIncludeDialog::change_adaptor() +void GuiInclude::change_adaptor() { changed(); } -docstring GuiIncludeDialog::validate_listings_params() +docstring GuiInclude::validate_listings_params() { // use a cache here to avoid repeated validation // of the same parameters @@ -109,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(); @@ -126,14 +125,7 @@ void GuiIncludeDialog::set_listings_msg() } -void GuiIncludeDialog::closeEvent(QCloseEvent * e) -{ - slotClose(); - e->accept(); -} - - -void GuiIncludeDialog::typeChanged(int v) +void GuiInclude::typeChanged(int v) { switch (v) { //case Include @@ -174,23 +166,9 @@ void GuiIncludeDialog::typeChanged(int v) } -void GuiIncludeDialog::editClicked() -{ - edit(); -} - - -void GuiIncludeDialog::browseClicked() -{ - browse(); -} - - -void GuiIncludeDialog::update_contents() +void GuiInclude::paramsToDialog(InsetCommandParams const & params_) { - InsetCommandParams const & params = controller().params(); - - filenameED->setText(toqstr(params["filename"])); + filenameED->setText(toqstr(params_["filename"])); visiblespaceCB->setChecked(false); visiblespaceCB->setEnabled(false); @@ -203,7 +181,7 @@ void GuiIncludeDialog::update_contents() 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*" && @@ -216,7 +194,7 @@ void GuiIncludeDialog::update_contents() } else if (cmdname == "input") { typeCO->setCurrentIndex(1); previewCB->setEnabled(true); - previewCB->setChecked(params.preview()); + previewCB->setChecked(params_.preview()); } else if (cmdname == "verbatiminput*") { typeCO->setCurrentIndex(2); @@ -231,21 +209,21 @@ void GuiIncludeDialog::update_contents() typeCO->setCurrentIndex(3); listingsGB->setEnabled(true); listingsED->setEnabled(true); - InsetListingsParams par(params.getOptions()); + 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] == '}') { - 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] == '}') { - labelLE->setText(toqstr(lbl.substr(1, lbl.size()-2))); + labelLE->setText(toqstr(lbl.substr(1, lbl.size() - 2))); *it = ""; } } @@ -254,23 +232,25 @@ void GuiIncludeDialog::update_contents() string extra = getStringFromVector(pars); 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 GuiIncludeDialog::applyView() +void GuiInclude::applyView() { - InsetCommandParams params = controller().params(); - - params["filename"] = from_utf8(internal_path(fromqstr(filenameED->text()))); - params.preview(previewCB->isChecked()); + params_["filename"] = from_utf8(internal_path(fromqstr(filenameED->text()))); + params_.preview(previewCB->isChecked()); 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(listingsED->toPlainText())); string caption = fromqstr(captionLE->text()); @@ -279,55 +259,99 @@ void GuiIncludeDialog::applyView() 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 (visiblespaceCB->isChecked()) - params.setCmdName("verbatiminput*"); + params_.setCmdName("verbatiminput*"); else - params.setCmdName("verbatiminput"); + params_.setCmdName("verbatiminput"); } - controller().setParams(params); } -void GuiIncludeDialog::browse() +void GuiInclude::browse() { - ControlInclude::Type type; + Type type; 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(filenameED->text()), type); - if (!name.empty()) - filenameED->setText(toqstr(name)); + QString name = browse(filenameED->text(), type); + if (!name.isEmpty()) + filenameED->setText(name); } -void GuiIncludeDialog::edit() +void GuiInclude::edit() { - if (isValid()) { - string const file = fromqstr(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 !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 browseRelFile(in_name, docpath, title, filters, false, + qt_("Documents|#o#O"), toqstr(lyxrc.document_path)); } -bool GuiIncludeDialog::isValid() +bool GuiInclude::initialiseParams(std::string const & data) { - return !filenameED->text().isEmpty() && - validate_listings_params().empty(); + InsetCommand::string2params("include", data, params_); + paramsToDialog(params_); + return true; } + +void GuiInclude::dispatchParams() +{ + std::string const lfun = InsetCommand::params2string("include", 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"