diff --git a/src/frontends/controllers/ControlInclude.cpp b/src/frontends/controllers/ControlInclude.cpp deleted file mode 100644 index 59ae0f8126..0000000000 --- a/src/frontends/controllers/ControlInclude.cpp +++ /dev/null @@ -1,127 +0,0 @@ -/** - * \file ControlInclude.cpp - * 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 "ControlInclude.h" -#include "frontend_helpers.h" - -#include "Buffer.h" -#include "Format.h" -#include "FuncRequest.h" -#include "gettext.h" -#include "LyXRC.h" - -#include "insets/InsetInclude.h" - -#include "support/FileFilterList.h" -#include "support/filetools.h" - -#include - -using std::pair; -using std::string; - -namespace lyx { - -using support::FileFilterList; -using support::FileName; -using support::isFileReadable; -using support::makeAbsPath; -using support::onlyPath; - -namespace frontend { - -ControlInclude::ControlInclude(Dialog & parent) - : Controller(parent), params_("include") -{} - - -bool ControlInclude::initialiseParams(string const & data) -{ - InsetIncludeMailer::string2params(data, params_); - return true; -} - - -void ControlInclude::clearParams() -{ - params_.clear(); -} - - -void ControlInclude::dispatchParams() -{ - string const lfun = InsetIncludeMailer::params2string(params_); - dispatch(FuncRequest(getLfun(), lfun)); -} - - -void ControlInclude::setParams(InsetCommandParams const & params) -{ - params_ = params; -} - - -docstring const ControlInclude::browse(docstring const & in_name, Type in_type) const -{ - docstring const title = _("Select document to include"); - - // input TeX, verbatim, or LyX file ? - FileFilterList filters; - switch (in_type) { - case INCLUDE: - case INPUT: - filters = FileFilterList(_("LaTeX/LyX Documents (*.tex *.lyx)")); - break; - case VERBATIM: - break; - case LISTINGS: - break; - } - - pair dir1(_("Documents|#o#O"), - from_utf8(lyxrc.document_path)); - - docstring const docpath = from_utf8(onlyPath(buffer().fileName())); - - return browseRelFile(in_name, docpath, title, - filters, false, dir1); -} - - -void ControlInclude::edit(string const & file) -{ - string const ext = support::getExtension(file); - if (ext == "lyx") - dispatch(FuncRequest(LFUN_BUFFER_CHILD_OPEN, file)); - else - // tex file or other text file in verbatim mode - formats.edit(buffer(), - FileName(makeAbsPath(file, onlyPath(buffer().fileName()))), - "text"); -} - - -bool ControlInclude::fileExists(string const & file) -{ - FileName const fileWithAbsPath( - makeAbsPath(file, onlyPath(buffer().fileName()))); - - if (isFileReadable(fileWithAbsPath)) - return true; - - return false; -} - -} // namespace frontend -} // namespace lyx diff --git a/src/frontends/controllers/ControlInclude.h b/src/frontends/controllers/ControlInclude.h deleted file mode 100644 index 4b140d84ad..0000000000 --- a/src/frontends/controllers/ControlInclude.h +++ /dev/null @@ -1,75 +0,0 @@ -// -*- C++ -*- -/** - * \file ControlInclude.h - * 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. - */ - -#ifndef CONTROLINCLUDE_H -#define CONTROLINCLUDE_H - - -#include "Dialog.h" -#include "insets/InsetCommandParams.h" - -#include "support/docstring.h" - -namespace lyx { -namespace frontend { - -/** A controller for the Include file dialog. - */ -class ControlInclude : public Controller { -public: - /// - enum Type { - /// - INPUT, - /// - VERBATIM, - /// - INCLUDE, - /// - LISTINGS, - }; - /// - ControlInclude(Dialog &); - - /// - virtual bool initialiseParams(std::string const & data); - /// clean-up on hide. - virtual void clearParams(); - /// clean-up on hide. - virtual void dispatchParams(); - /// - virtual bool isBufferDependent() const { return true; } - - /// - InsetCommandParams const & params() const { return params_; } - /// - void setParams(InsetCommandParams const &); - - /// Browse for a file - docstring const browse(docstring const &, Type) const; - - /// edit the child document, .lyx file will be opened in lyx - /// other formats will be edited by external applications. - void edit(std::string const & file); - - /// test if file exist - bool fileExists(std::string const & file); -private: - /// - InsetCommandParams params_; -}; - -} // namespace frontend -} // namespace lyx - -#endif // CONTROLINCLUDE_H diff --git a/src/frontends/controllers/Makefile.am b/src/frontends/controllers/Makefile.am index 8e14c96335..a39c75c591 100644 --- a/src/frontends/controllers/Makefile.am +++ b/src/frontends/controllers/Makefile.am @@ -16,7 +16,6 @@ SOURCEFILES = \ ControlErrorList.cpp \ ControlExternal.cpp \ ControlGraphics.cpp \ - ControlInclude.cpp \ ControlViewSource.cpp \ ControlMath.cpp \ ControlParagraph.cpp \ @@ -38,7 +37,6 @@ HEADERFILES = \ ControlEmbeddedFiles.h \ ControlExternal.h \ ControlGraphics.h \ - ControlInclude.h \ ControlViewSource.h \ ControlMath.h \ ControlParagraph.h \ diff --git a/src/frontends/qt4/Dialogs.cpp b/src/frontends/qt4/Dialogs.cpp index 6e4a1c1758..640ee2d51e 100644 --- a/src/frontends/qt4/Dialogs.cpp +++ b/src/frontends/qt4/Dialogs.cpp @@ -23,7 +23,6 @@ #include "GuiErrorList.h" #include "GuiExternal.h" #include "GuiGraphics.h" -#include "GuiInclude.h" #include "GuiIndex.h" #include "GuiMathMatrix.h" #include "GuiNomencl.h" @@ -182,7 +181,7 @@ Dialog * Dialogs::build(string const & name) } else if (name == "graphics") { dialog = new GuiGraphicsDialog(lyxview_); } else if (name == "include") { - dialog = new GuiIncludeDialog(lyxview_); + dialog = createGuiInclude(lyxview_); } else if (name == "index") { dialog = new GuiIndexDialog(lyxview_); } else if (name == "nomenclature") { diff --git a/src/frontends/qt4/GuiInclude.cpp b/src/frontends/qt4/GuiInclude.cpp index 42ca019b67..155c85af87 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,59 @@ #include #include "GuiInclude.h" -#include "ControlInclude.h" -#include "support/os.h" -#include "support/lstrings.h" +#include "frontend_helpers.h" + +#include "Buffer.h" +#include "Format.h" +#include "FuncRequest.h" +#include "gettext.h" +#include "LyXRC.h" #include "qt_helpers.h" #include "LyXRC.h" +#include "support/os.h" +#include "support/lstrings.h" +#include "support/FileFilterList.h" +#include "support/filetools.h" + #include "insets/InsetListingsParams.h" +#include "insets/InsetInclude.h" #include #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; +using std::pair; +using std::string; namespace lyx { namespace frontend { -GuiIncludeDialog::GuiIncludeDialog(LyXView & lv) - : GuiDialog(lv, "include") +using support::FileFilterList; +using support::FileName; +using support::isFileReadable; +using support::makeAbsPath; +using support::onlyPath; +using support::os::internal_path; +using support::prefixIs; +using support::getStringFromVector; +using support::getVectorFromString; + + +GuiInclude::GuiInclude(LyXView & lv) + : GuiDialog(lv, "include"), Controller(this), params_("include") { setupUi(this); setViewTitle(_("Child Document")); - setController(new ControlInclude(*this)); + setController(this, false); connect(okPB, SIGNAL(clicked()), this, SLOT(slotOK())); connect(closePB, SIGNAL(clicked()), this, SLOT(slotClose())); @@ -51,8 +73,8 @@ 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())); @@ -78,19 +100,13 @@ GuiIncludeDialog::GuiIncludeDialog(LyXView & lv) } -ControlInclude & GuiIncludeDialog::controller() -{ - 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 +125,7 @@ docstring GuiIncludeDialog::validate_listings_params() } -void GuiIncludeDialog::set_listings_msg() +void GuiInclude::set_listings_msg() { static bool isOK = true; docstring msg = validate_listings_params(); @@ -126,14 +142,14 @@ void GuiIncludeDialog::set_listings_msg() } -void GuiIncludeDialog::closeEvent(QCloseEvent * e) +void GuiInclude::closeEvent(QCloseEvent * e) { slotClose(); e->accept(); } -void GuiIncludeDialog::typeChanged(int v) +void GuiInclude::typeChanged(int v) { switch (v) { //case Include @@ -174,23 +190,9 @@ void GuiIncludeDialog::typeChanged(int v) } -void GuiIncludeDialog::editClicked() +void GuiInclude::updateContents() { - edit(); -} - - -void GuiIncludeDialog::browseClicked() -{ - browse(); -} - - -void GuiIncludeDialog::updateContents() -{ - InsetCommandParams const & params = controller().params(); - - filenameED->setText(toqstr(params["filename"])); + filenameED->setText(toqstr(params_["filename"])); visiblespaceCB->setChecked(false); visiblespaceCB->setEnabled(false); @@ -203,7 +205,7 @@ void GuiIncludeDialog::updateContents() 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 +218,7 @@ void GuiIncludeDialog::updateContents() } 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 +233,21 @@ void GuiIncludeDialog::updateContents() typeCO->setCurrentIndex(3); listingsGB->setEnabled(true); listingsED->setEnabled(true); - InsetListingsParams par(params.getOptions()); + InsetListingsParams par(params_.getOptions()); // 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 = ""; } } @@ -257,20 +259,18 @@ void GuiIncludeDialog::updateContents() } -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,54 +279,114 @@ void GuiIncludeDialog::applyView() par.addParam("caption", "{" + caption + "}"); if (!label.empty()) par.addParam("label", "{" + label + "}"); - params.setOptions(par.params()); + params_.setOptions(par.params()); } 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); + docstring const & name = browse(qstring_to_ucs4(filenameED->text()), type); if (!name.empty()) filenameED->setText(toqstr(name)); } -void GuiIncludeDialog::edit() +void GuiInclude::edit() { if (isValid()) { string const file = fromqstr(filenameED->text()); slotOK(); - controller().edit(file); + edit(file); } } -bool GuiIncludeDialog::isValid() +bool GuiInclude::isValid() { - return !filenameED->text().isEmpty() && - validate_listings_params().empty(); + return !filenameED->text().isEmpty() && validate_listings_params().empty(); } + +bool GuiInclude::initialiseParams(string const & data) +{ + InsetIncludeMailer::string2params(data, params_); + return true; +} + + +void GuiInclude::clearParams() +{ + params_.clear(); +} + + +void GuiInclude::dispatchParams() +{ + dispatch(FuncRequest(getLfun(), InsetIncludeMailer::params2string(params_))); +} + + +docstring GuiInclude::browse(docstring const & in_name, Type in_type) const +{ + docstring const title = _("Select document to include"); + + // input TeX, verbatim, or LyX file ? + FileFilterList filters; + switch (in_type) { + case INCLUDE: + case INPUT: + filters = FileFilterList(_("LaTeX/LyX Documents (*.tex *.lyx)")); + break; + case VERBATIM: + break; + case LISTINGS: + break; + } + + pair dir1(_("Documents|#o#O"), + from_utf8(lyxrc.document_path)); + + docstring const docpath = from_utf8(onlyPath(buffer().fileName())); + + return browseRelFile(in_name, docpath, title, + filters, false, dir1); +} + + +void GuiInclude::edit(string const & file) +{ + string const ext = support::getExtension(file); + if (ext == "lyx") + dispatch(FuncRequest(LFUN_BUFFER_CHILD_OPEN, file)); + else + // tex file or other text file in verbatim mode + formats.edit(buffer(), + FileName(makeAbsPath(file, onlyPath(buffer().fileName()))), + "text"); +} + + +Dialog * createGuiInclude(LyXView & lv) { return new GuiInclude(lv); } + + } // namespace frontend } // namespace lyx diff --git a/src/frontends/qt4/GuiInclude.h b/src/frontends/qt4/GuiInclude.h index 09abe6791b..8330684ca2 100644 --- a/src/frontends/qt4/GuiInclude.h +++ b/src/frontends/qt4/GuiInclude.h @@ -4,6 +4,8 @@ * This file is part of LyX, the document processor. * Licence details can be found in the file COPYING. * + * \author Alejandro Aguilar Sierra + * \author Angus Leeming * \author John Levon * * Full author contact details are available in file CREDITS. @@ -13,23 +15,31 @@ #define GUIINCLUDE_H #include "GuiDialog.h" -#include "ControlInclude.h" #include "ui_IncludeUi.h" +#include "insets/InsetCommandParams.h" + +#include "support/docstring.h" + + namespace lyx { namespace frontend { -class GuiIncludeDialog : public GuiDialog, public Ui::IncludeUi +class GuiInclude : public GuiDialog, public Ui::IncludeUi, public Controller { Q_OBJECT public: - GuiIncludeDialog(LyXView & lv); + GuiInclude(LyXView & lv); private Q_SLOTS: void change_adaptor(); - void editClicked(); - void browseClicked(); + /// edit the child document, .lyx file will be opened in lyx + /// other formats will be edited by external applications. + void edit(); + /// browse for a file + void browse(); + /// void typeChanged(int v); /// AFAIK, QValidator only works for QLineEdit so /// I have to validate listingsED (QTextEdit) manually. @@ -40,11 +50,13 @@ private Q_SLOTS: private: void closeEvent(QCloseEvent * e); /// parent controller - ControlInclude & controller(); + Controller & controller() { return *this; } /// void updateLists(); /// validate listings parameters and return an error message, if any docstring validate_listings_params(); + /// + void edit(std::string const & file); /// bool isValid(); @@ -52,11 +64,34 @@ private: void applyView(); /// update void updateContents(); - /// edit the child document, .lyx file will be opened in lyx - /// other formats will be edited by external applications. - void edit(); - /// browse for a file - void browse(); + + /// + enum Type { + /// + INPUT, + /// + VERBATIM, + /// + INCLUDE, + /// + LISTINGS, + }; + + /// + bool initialiseParams(std::string const & data); + /// clean-up on hide. + void clearParams(); + /// clean-up on hide. + void dispatchParams(); + /// + bool isBufferDependent() const { return true; } + + /// Browse for a file + docstring browse(docstring const &, Type) const; + +private: + /// + InsetCommandParams params_; }; } // namespace frontend