]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/GuiSendto.cpp
* fix spelling in comments to please John.
[lyx.git] / src / frontends / qt4 / GuiSendto.cpp
index 798fad0c39eb4171a65c26bf0650ee34b9fae324..0bfb1de465f0051536ce5a13dcabfa18f54c40df 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.
  */
 #include <config.h>
 
 #include "GuiSendto.h"
+#include "qt_helpers.h"
 
 #include "Buffer.h"
-#include "Converter.h"
 #include "Format.h"
 #include "FuncRequest.h"
-#include "LyXRC.h"
-#include "qt_helpers.h"
 
+#include "support/qstring_helpers.h"
 #include "support/filetools.h"
-#include "support/lstrings.h"
 
+#include <QLineEdit>
 #include <QListWidget>
 #include <QPushButton>
-#include <QCloseEvent>
-
-using std::vector;
-using std::string;
 
+using namespace std;
+using namespace lyx::support;
 
 namespace lyx {
 namespace frontend {
 
-using support::trim;
 
-GuiSendTo::GuiSendTo(LyXView & lv)
-       : GuiDialog(lv, "sendto"), Controller(this)
+GuiSendTo::GuiSendTo(GuiView & lv)
+       : GuiDialog(lv, "sendto", qt_("Send Document to Command"))
 {
        setupUi(this);
-       setViewTitle(_("Send Document to Command"));
-       setController(this, false);
 
        connect(okPB, SIGNAL(clicked()), this, SLOT(slotOK()));
        connect(applyPB, SIGNAL(clicked()), this, SLOT(slotApply()));
@@ -53,6 +47,8 @@ GuiSendTo::GuiSendTo(LyXView & 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()));
 
@@ -69,16 +65,16 @@ void GuiSendTo::changed_adaptor()
 }
 
 
-void GuiSendTo::closeEvent(QCloseEvent * e)
-{
-       slotClose();
-       e->accept();
-}
-
-
 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
@@ -88,30 +84,42 @@ 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();
 
        for (vector<string>::const_iterator it = keys.begin();
             it != keys.end(); ++it) {
-               formatLW->addItem(toqstr(*it));
+               formatLW->addItem(qt_(*it));
        }
 
-       commandCO->addItem(toqstr(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 (line < 0 || line > int(formatLW->count()))
+       if (commandCO->findText(command) == -1)
+               commandCO->insertItem(0, command);
+
+       if (line < 0 || line > formatLW->count())
                return;
 
        format_ = all_formats_[line];
-       command_ = trim(fromqstr(commandCO->currentText()));
+       command_ = command;
 }
 
 
@@ -122,79 +130,42 @@ 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(std::string const &)
+bool GuiSendTo::initialiseParams(string const &)
 {
        format_ = 0;
-       command_ = lyxrc.custom_export_command;
+       paramsToDialog(format_, command_);
        return true;
 }
 
 
-void GuiSendTo::dispatchParams()
+void GuiSendTo::paramsToDialog(Format const * /*format*/, QString const & command)
 {
-       if (command_.empty() || !format_ || format_->name().empty())
-               return;
+       if (!command.isEmpty())
+               commandCO->addItem(command);
 
-       string const data = format_->name() + " " + command_;
-       dispatch(FuncRequest(getLfun(), data));
+       bc().setValid(isValid());
 }
 
-// FIXME: Move to Converters?
-vector<Format const *> GuiSendTo::allFormats() const
-{
-       // What formats can we output natively?
-       vector<string> exports;
-       exports.push_back("lyx");
-       exports.push_back("text");
-
-       if (buffer().isLatex())
-               exports.push_back("latex");
-       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<Format const *> to;
-
-       vector<string>::const_iterator ex_it  = exports.begin();
-       vector<string>::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.
-       std::sort(to.begin(), to.end());
-       to.erase(std::unique(to.begin(), to.end()), to.end());
+void GuiSendTo::dispatchParams()
+{
+       if (command_.isEmpty() || !format_ || format_->name().empty())
+               return;
 
-       return to;
+       string const data = format_->name() + " " + fromqstr(command_);
+       dispatch(FuncRequest(getLfun(), data));
 }
 
-
-Dialog * createGuiSendTo(LyXView & lv) { return new GuiSendTo(lv); }
+Dialog * createGuiSendTo(GuiView & lv) { return new GuiSendTo(lv); }
 
 
 } // namespace frontend
 } // namespace lyx
 
-#include "GuiSendto_moc.cpp"
+#include "moc_GuiSendto.cpp"