X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2Fqt4%2FGuiSendto.cpp;h=0bfb1de465f0051536ce5a13dcabfa18f54c40df;hb=425d092204118ea6c24c28e85fdf03fcf2bb51a4;hp=d0da7f926e84eb090e1fec19280e4799658d3d74;hpb=2e11d3ca916849c669b9a0029a6262140de044ce;p=lyx.git diff --git a/src/frontends/qt4/GuiSendto.cpp b/src/frontends/qt4/GuiSendto.cpp index d0da7f926e..0bfb1de465 100644 --- a/src/frontends/qt4/GuiSendto.cpp +++ b/src/frontends/qt4/GuiSendto.cpp @@ -4,7 +4,7 @@ * Licence details can be found in the file COPYING. * * \author Angus Leeming - * \author Jürgen Spitzmüller + * \author Jürgen Spitzmüller * * Full author contact details are available in file CREDITS. */ @@ -12,16 +12,16 @@ #include #include "GuiSendto.h" +#include "qt_helpers.h" #include "Buffer.h" -#include "Converter.h" #include "Format.h" #include "FuncRequest.h" -#include "LyXRC.h" #include "support/qstring_helpers.h" #include "support/filetools.h" +#include #include #include @@ -47,6 +47,8 @@ GuiSendTo::GuiSendTo(GuiView & lv) this, SLOT(slotFormatSelected(QListWidgetItem *))); connect(formatLW, SIGNAL(itemClicked(QListWidgetItem *)), this, SLOT(changed_adaptor())); + connect(formatLW, SIGNAL(itemSelectionChanged()), + this, SLOT(changed_adaptor())); connect(commandCO, SIGNAL(textChanged(QString)), this, SLOT(changed_adaptor())); @@ -65,7 +67,14 @@ void GuiSendTo::changed_adaptor() void GuiSendTo::updateContents() { - all_formats_ = allFormats(); + all_formats_ = buffer().exportableFormats(false); + + // 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 @@ -75,30 +84,42 @@ void GuiSendTo::updateContents() 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(command_); + // Restore the selection + if (current_line > -1) + formatLW->setCurrentItem(formatLW->item(current_line)); } void GuiSendTo::applyView() { int const line = formatLW->currentRow(); + QString const command = commandCO->currentText().trimmed(); + + if (commandCO->findText(command) == -1) + commandCO->insertItem(0, command); if (line < 0 || line > formatLW->count()) return; format_ = all_formats_[line]; - command_ = commandCO->currentText().trimmed(); + command_ = command; } @@ -109,19 +130,29 @@ bool GuiSendTo::isValid() 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; - command_ = toqstr(lyxrc.custom_export_command); + 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()) @@ -131,59 +162,10 @@ void GuiSendTo::dispatchParams() dispatch(FuncRequest(getLfun(), data)); } -// FIXME: Move to Converters? -vector GuiSendTo::allFormats() const -{ - // What formats can we output natively? - vector exports; - exports.push_back("lyx"); - exports.push_back("text"); - - if (buffer().isLatex()) { - exports.push_back("latex"); - exports.push_back("pdflatex"); - } - else if (buffer().isDocBook()) - exports.push_back("docbook"); - else if (buffer().isLiterate()) - exports.push_back("literate"); - - // Loop over these native formats and ascertain what formats we - // can convert to - vector to; - - vector::const_iterator ex_it = exports.begin(); - vector::const_iterator ex_end = exports.end(); - for (; ex_it != ex_end; ++ex_it) { - // Start off with the native export format. - // "formats" is LyX's list of recognised formats - to.push_back(formats.getFormat(*ex_it)); - - Formats::const_iterator fo_it = formats.begin(); - Formats::const_iterator fo_end = formats.end(); - for (; fo_it != fo_end; ++fo_it) { - // we need to hide the default graphic export formats - // from the external menu, because we need them only - // for the internal lyx-view and external latex run - string const name = fo_it->name(); - if (name != "eps" && name != "xpm" && name != "png" && - theConverters().isReachable(*ex_it, name)) - to.push_back(&(*fo_it)); - } - } - - // Remove repeated formats. - sort(to.begin(), to.end()); - to.erase(unique(to.begin(), to.end()), to.end()); - - return to; -} - - Dialog * createGuiSendTo(GuiView & lv) { return new GuiSendTo(lv); } } // namespace frontend } // namespace lyx -#include "GuiSendto_moc.cpp" +#include "moc_GuiSendto.cpp"