]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/GuiSendto.cpp
Complete the removal of the embedding stuff. Maybe. It's hard to be sure we got every...
[lyx.git] / src / frontends / qt4 / GuiSendto.cpp
index 8d775237b061fcfd209891c9afeeccef2e041592..1d744fcae0772913111855ae3069dfdf9bf4c16f 100644 (file)
@@ -3,6 +3,7 @@
  * This file is part of LyX, the document processor.
  * Licence details can be found in the file COPYING.
  *
+ * \author Angus Leeming
  * \author Jürgen Spitzmüller
  *
  * Full author contact details are available in file CREDITS.
 
 #include "GuiSendto.h"
 
-#include "ControlSendto.h"
+#include "Buffer.h"
+#include "Converter.h"
+#include "Format.h"
+#include "FuncRequest.h"
+#include "LyXRC.h"
 #include "qt_helpers.h"
 
-#include "Format.h"
+#include "support/filetools.h"
+#include "support/lstrings.h"
 
 #include <QListWidget>
 #include <QPushButton>
-#include <QCloseEvent>
-
-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 +48,7 @@ GuiSendtoDialog::GuiSendtoDialog(LyXView & lv)
                this, SLOT(slotFormatSelected(QListWidgetItem *)));
        connect(formatLW, SIGNAL(itemClicked(QListWidgetItem *)),
                this, SLOT(changed_adaptor()));
-       connect(commandCO, SIGNAL(textChanged(const QString&)),
+       connect(commandCO, SIGNAL(textChanged(QString)),
                this, SLOT(changed_adaptor()));
 
        bc().setPolicy(ButtonPolicy::OkApplyCancelPolicy);
@@ -55,28 +58,15 @@ GuiSendtoDialog::GuiSendtoDialog(LyXView & lv)
 }
 
 
-ControlSendto & GuiSendtoDialog::controller() const
-{
-       return static_cast<ControlSendto &>(GuiDialog::controller());
-}
-
-
-void GuiSendtoDialog::changed_adaptor()
+void GuiSendTo::changed_adaptor()
 {
        changed();
 }
 
 
-void GuiSendtoDialog::closeEvent(QCloseEvent * e)
+void GuiSendTo::updateContents()
 {
-       slotClose();
-       e->accept();
-}
-
-
-void GuiSendtoDialog::update_contents()
-{
-       all_formats_ = controller().allFormats();
+       all_formats_ = allFormats();
 
        // Check whether the current contents of the browser will be
        // changed by loading the contents of formats
@@ -97,23 +87,23 @@ void GuiSendtoDialog::update_contents()
                formatLW->addItem(toqstr(*it));
        }
 
-       commandCO->addItem(toqstr(controller().getCommand()));
+       commandCO->addItem(toqstr(command_));
 }
 
 
-void GuiSendtoDialog::applyView()
+void GuiSendTo::applyView()
 {
        int const line = formatLW->currentRow();
 
        if (line < 0 || line > int(formatLW->count()))
                return;
 
-       controller().setFormat(all_formats_[line]);
-       controller().setCommand(fromqstr(commandCO->currentText()));
+       format_ = all_formats_[line];
+       command_ = trim(fromqstr(commandCO->currentText()));
 }
 
 
-bool GuiSendtoDialog::isValid()
+bool GuiSendTo::isValid()
 {
        int const line = formatLW->currentRow();
 
@@ -124,6 +114,76 @@ bool GuiSendtoDialog::isValid()
                !commandCO->currentText().isEmpty();
 }
 
+
+bool GuiSendTo::initialiseParams(string const &)
+{
+       format_ = 0;
+       command_ = lyxrc.custom_export_command;
+       return true;
+}
+
+
+void GuiSendTo::dispatchParams()
+{
+       if (command_.empty() || !format_ || format_->name().empty())
+               return;
+
+       string const data = format_->name() + " " + command_;
+       dispatch(FuncRequest(getLfun(), data));
+}
+
+// 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");
+               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<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.
+       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