X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2Fqt4%2FGuiSendto.cpp;h=0bfb1de465f0051536ce5a13dcabfa18f54c40df;hb=425d092204118ea6c24c28e85fdf03fcf2bb51a4;hp=8d775237b061fcfd209891c9afeeccef2e041592;hpb=34492a9d033aef3d4369d4d758b01f3969ef3af0;p=lyx.git diff --git a/src/frontends/qt4/GuiSendto.cpp b/src/frontends/qt4/GuiSendto.cpp index 8d775237b0..0bfb1de465 100644 --- a/src/frontends/qt4/GuiSendto.cpp +++ b/src/frontends/qt4/GuiSendto.cpp @@ -3,7 +3,8 @@ * This file is part of LyX, the document processor. * Licence details can be found in the file COPYING. * - * \author Jürgen Spitzmüller + * \author Angus Leeming + * \author Jürgen Spitzmüller * * Full author contact details are available in file CREDITS. */ @@ -11,29 +12,30 @@ #include #include "GuiSendto.h" - -#include "ControlSendto.h" #include "qt_helpers.h" +#include "Buffer.h" #include "Format.h" +#include "FuncRequest.h" + +#include "support/qstring_helpers.h" +#include "support/filetools.h" +#include #include #include -#include - -using std::vector; -using std::string; +using namespace std; +using namespace lyx::support; namespace lyx { namespace frontend { -GuiSendtoDialog::GuiSendtoDialog(LyXView & lv) - : GuiDialog(lv, "sendto") + +GuiSendTo::GuiSendTo(GuiView & lv) + : GuiDialog(lv, "sendto", qt_("Send Document to Command")) { setupUi(this); - setViewTitle(_("Send Document to Command")); - setController(new ControlSendto(*this)); connect(okPB, SIGNAL(clicked()), this, SLOT(slotOK())); connect(applyPB, SIGNAL(clicked()), this, SLOT(slotApply())); @@ -45,7 +47,9 @@ GuiSendtoDialog::GuiSendtoDialog(LyXView & lv) this, SLOT(slotFormatSelected(QListWidgetItem *))); connect(formatLW, SIGNAL(itemClicked(QListWidgetItem *)), this, SLOT(changed_adaptor())); - connect(commandCO, SIGNAL(textChanged(const QString&)), + connect(formatLW, SIGNAL(itemSelectionChanged()), + this, SLOT(changed_adaptor())); + connect(commandCO, SIGNAL(textChanged(QString)), this, SLOT(changed_adaptor())); bc().setPolicy(ButtonPolicy::OkApplyCancelPolicy); @@ -55,28 +59,22 @@ GuiSendtoDialog::GuiSendtoDialog(LyXView & lv) } -ControlSendto & GuiSendtoDialog::controller() const -{ - return static_cast(GuiDialog::controller()); -} - - -void GuiSendtoDialog::changed_adaptor() +void GuiSendTo::changed_adaptor() { changed(); } -void GuiSendtoDialog::closeEvent(QCloseEvent * e) +void GuiSendTo::updateContents() { - slotClose(); - e->accept(); -} - + all_formats_ = buffer().exportableFormats(false); -void GuiSendtoDialog::update_contents() -{ - all_formats_ = controller().allFormats(); + // Save the current selection if any + Format const * current_format = 0; + int const line = formatLW->currentRow(); + if (line >= 0 && line <= formatLW->count() + && formatLW->selectedItems().size() > 0) + current_format = all_formats_[line]; // Check whether the current contents of the browser will be // changed by loading the contents of formats @@ -86,45 +84,88 @@ void GuiSendtoDialog::update_contents() vector::iterator result = keys.begin(); vector::const_iterator it = all_formats_.begin(); vector::const_iterator end = all_formats_.end(); - for (; it != end; ++it, ++result) + + int current_line = -1; + for (int ln = 0; it != end; ++it, ++result, ++ln) { *result = (*it)->prettyname(); + if (current_format + && (*it)->prettyname() == current_format->prettyname()) + current_line = ln; + } // Reload the browser formatLW->clear(); for (vector::const_iterator it = keys.begin(); it != keys.end(); ++it) { - formatLW->addItem(toqstr(*it)); + formatLW->addItem(qt_(*it)); } - commandCO->addItem(toqstr(controller().getCommand())); + // Restore the selection + if (current_line > -1) + formatLW->setCurrentItem(formatLW->item(current_line)); } -void GuiSendtoDialog::applyView() +void GuiSendTo::applyView() { int const line = formatLW->currentRow(); + QString const command = commandCO->currentText().trimmed(); - if (line < 0 || line > int(formatLW->count())) + if (commandCO->findText(command) == -1) + commandCO->insertItem(0, command); + + if (line < 0 || line > formatLW->count()) return; - controller().setFormat(all_formats_[line]); - controller().setCommand(fromqstr(commandCO->currentText())); + format_ = all_formats_[line]; + command_ = command; } -bool GuiSendtoDialog::isValid() +bool GuiSendTo::isValid() { int const line = formatLW->currentRow(); if (line < 0 || line > int(formatLW->count())) return false; - return formatLW->count() != 0 && - !commandCO->currentText().isEmpty(); + return (formatLW->selectedItems().size() > 0 + && formatLW->count() != 0 + && !commandCO->currentText().isEmpty()); } + +bool GuiSendTo::initialiseParams(string const &) +{ + format_ = 0; + paramsToDialog(format_, command_); + return true; +} + + +void GuiSendTo::paramsToDialog(Format const * /*format*/, QString const & command) +{ + if (!command.isEmpty()) + commandCO->addItem(command); + + bc().setValid(isValid()); +} + + +void GuiSendTo::dispatchParams() +{ + if (command_.isEmpty() || !format_ || format_->name().empty()) + return; + + string const data = format_->name() + " " + fromqstr(command_); + dispatch(FuncRequest(getLfun(), data)); +} + +Dialog * createGuiSendTo(GuiView & lv) { return new GuiSendTo(lv); } + + } // namespace frontend } // namespace lyx -#include "GuiSendto_moc.cpp" +#include "moc_GuiSendto.cpp"