]> git.lyx.org Git - features.git/blobdiff - src/frontends/qt4/GuiSendto.cpp
* remove outdated RC_CUSTOM_EXPORT_COMMAND and RC_CUSTOM_EXPORT_FORMAT.
[features.git] / src / frontends / qt4 / GuiSendto.cpp
index fe644a40f50c76a7091b0331ad7994af14a8b332..8aece21b81d995d6b3249ee862465a024b80be39 100644 (file)
@@ -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.
  */
@@ -15,6 +15,7 @@
 #include "qt_helpers.h"
 
 #include "Buffer.h"
+#include "BufferParams.h"
 #include "Converter.h"
 #include "Format.h"
 #include "FuncRequest.h"
@@ -23,6 +24,7 @@
 #include "support/qstring_helpers.h"
 #include "support/filetools.h"
 
+#include <QLineEdit>
 #include <QListWidget>
 #include <QPushButton>
 
@@ -48,6 +50,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()));
 
@@ -68,6 +72,13 @@ void GuiSendTo::updateContents()
 {
        all_formats_ = 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
        vector<string> keys;
@@ -76,8 +87,14 @@ void GuiSendTo::updateContents()
        vector<string>::iterator result = keys.begin();
        vector<Format const *>::const_iterator it  = all_formats_.begin();
        vector<Format const *>::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();
@@ -87,19 +104,25 @@ void GuiSendTo::updateContents()
                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;
 }
 
 
@@ -110,19 +133,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())
@@ -141,8 +174,12 @@ vector<Format const *> GuiSendTo::allFormats() const
        exports.push_back("text");
 
        if (buffer().isLatex()) {
-               exports.push_back("latex");
-               exports.push_back("pdflatex");
+               if (buffer().params().useXetex)
+                       exports.push_back("xetex");
+               else {
+                       exports.push_back("latex");
+                       exports.push_back("pdflatex");
+               }
        }
        else if (buffer().isDocBook())
                exports.push_back("docbook");
@@ -187,4 +224,4 @@ Dialog * createGuiSendTo(GuiView & lv) { return new GuiSendTo(lv); }
 } // namespace frontend
 } // namespace lyx
 
-#include "GuiSendto_moc.cpp"
+#include "moc_GuiSendto.cpp"