]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/GuiSendto.cpp
rename buffer parameter math_number_before to math_numbering_side
[lyx.git] / src / frontends / qt4 / GuiSendto.cpp
index c466505710d0aa529fe5b85fc86aa1209fa65e9e..92814f0da9dae7f3c8201aba1cd4e7533ac8741b 100644 (file)
@@ -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.
  */
 #include "GuiSendto.h"
 #include "qt_helpers.h"
 
+#include "Buffer.h"
+#include "BufferParams.h"
+#include "Converter.h"
 #include "Format.h"
+#include "FuncRequest.h"
 
+#include "support/filetools.h"
+#include "support/gettext.h"
+#include "support/qstring_helpers.h"
+
+#include <algorithm>
+
+#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 {
 
-/////////////////////////////////////////////////////////////////////
-//
-// GuiSendtoDialog
-//
-/////////////////////////////////////////////////////////////////////
 
-GuiSendtoDialog::GuiSendtoDialog(GuiSendto * form)
-       : form_(form)
+GuiSendTo::GuiSendTo(GuiView & lv)
+       : GuiDialog(lv, "sendto", qt_("Export or Send Document")), format_(0)
 {
        setupUi(this);
 
-       connect(okPB, SIGNAL(clicked()),
-               form, SLOT(slotOK()));
-       connect(applyPB, SIGNAL(clicked()),
-               form, SLOT(slotApply()));
-       connect(closePB, SIGNAL(clicked()),
-               form, SLOT(slotClose()));
-
-       connect( formatLW, SIGNAL( itemClicked(QListWidgetItem *) ),
-               this, SLOT( slotFormatHighlighted(QListWidgetItem *) ) );
-       connect( formatLW, SIGNAL( itemActivated(QListWidgetItem *) ),
-               this, SLOT( slotFormatSelected(QListWidgetItem *) ) );
-       connect( formatLW, SIGNAL( itemClicked(QListWidgetItem *) ),
-               this, SLOT( changed_adaptor() ) );
-       connect( commandCO, SIGNAL( textChanged(const QString&) ),
-               this, SLOT( changed_adaptor() ) );
+       connect(okPB, SIGNAL(clicked()), this, SLOT(slotOK()));
+       connect(applyPB, SIGNAL(clicked()), this, SLOT(slotApply()));
+       connect(closePB, SIGNAL(clicked()), this, SLOT(slotClose()));
+
+       connect(formatLW, SIGNAL(itemClicked(QListWidgetItem *)),
+               this, SLOT(slotFormatHighlighted(QListWidgetItem *)));
+       connect(formatLW, SIGNAL(itemActivated(QListWidgetItem *)),
+               this, SLOT(slotFormatSelected(QListWidgetItem *)));
+       connect(formatLW, SIGNAL(itemClicked(QListWidgetItem *)),
+               this, SLOT(changed_adaptor()));
+       connect(formatLW, SIGNAL(itemSelectionChanged()),
+               this, SLOT(changed_adaptor()));
+       connect(commandCO, SIGNAL(editTextChanged(QString)),
+               this, SLOT(changed_adaptor()));
+
+       bc().setPolicy(ButtonPolicy::OkApplyCancelPolicy);
+       bc().setOK(okPB);
+       bc().setApply(applyPB);
+       bc().setCancel(closePB);
 }
 
 
-void GuiSendtoDialog::changed_adaptor()
+void GuiSendTo::changed_adaptor()
 {
-       form_->changed();
+       changed();
 }
 
 
-void GuiSendtoDialog::closeEvent(QCloseEvent * e)
+void GuiSendTo::updateContents()
 {
-       form_->slotWMHide();
-       e->accept();
+       FormatList const & all_formats = 
+           buffer().params().exportableFormats(false);
+       // Save the current selection if any
+       Format const * current_format = nullptr;
+       int const line = formatLW->currentRow();
+       if (line >= 0 && static_cast<unsigned int>(line) < all_formats.size()
+           && formatLW->selectedItems().size() > 0)
+               current_format = all_formats[line];
+       // Reset the list widget
+       formatLW->clear();
+       for (Format const * f : all_formats) {
+               formatLW->addItem(toqstr(translateIfPossible(f->prettyname())));
+               // Restore the selection
+               if (current_format && f->prettyname() == current_format->prettyname())
+                       formatLW->setCurrentRow(formatLW->count() - 1);
+       }
 }
 
 
-/////////////////////////////////////////////////////////////////////
-//
-// GuiSendto
-//
-/////////////////////////////////////////////////////////////////////
-
-
-GuiSendto::GuiSendto(GuiDialog & parent)
-       : GuiView<GuiSendtoDialog>(parent, _("Send Document to Command"))
+void GuiSendTo::applyView()
 {
-}
+       int const line = formatLW->currentRow();
+       QString const command = commandCO->currentText().trimmed();
 
+       if (commandCO->findText(command) == -1)
+               commandCO->insertItem(0, command);
 
-void GuiSendto::build_dialog()
-{
-       dialog_.reset(new GuiSendtoDialog(this));
+       if (line < 0 || line > formatLW->count())
+               return;
 
-       // Manage the ok, apply, restore and cancel/close buttons
-       bc().setOK(dialog_->okPB);
-       bc().setApply(dialog_->applyPB);
-       bc().setCancel(dialog_->closePB);
+       FormatList const & all_formats = 
+           buffer().params().exportableFormats(false);
+       format_ = all_formats[line];
+       command_ = command;
 }
 
 
-void GuiSendto::update_contents()
+bool GuiSendTo::isValid()
 {
-       all_formats_ = controller().allFormats();
-
-       // Check whether the current contents of the browser will be
-       // changed by loading the contents of formats
-       vector<string> keys;
-       keys.resize(all_formats_.size());
-
-       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) {
-               *result = (*it)->prettyname();
-       }
-
-       // Reload the browser
-       dialog_->formatLW->clear();
+       int const line = formatLW->currentRow();
 
-       for (vector<string>::const_iterator it = keys.begin();
-            it < keys.end(); ++it) {
-               dialog_->formatLW->addItem(toqstr(*it));
-       }
+       if (line < 0 || line > int(formatLW->count()))
+               return false;
 
-       dialog_->commandCO->addItem(toqstr(controller().getCommand()));
+       return (formatLW->selectedItems().size() > 0
+               && formatLW->count() != 0);
 }
 
 
-void GuiSendto::applyView()
+bool GuiSendTo::initialiseParams(string const &)
 {
-       int const line(dialog_->formatLW->currentRow());
+       format_ = 0;
+       paramsToDialog(format_, command_);
+       return true;
+}
 
-       if (line < 0 || line > int(dialog_->formatLW->count()))
-               return;
 
-       string const cmd(fromqstr(dialog_->commandCO->currentText()));
+void GuiSendTo::paramsToDialog(Format const * /*format*/, QString const & command)
+{
+       if (!command.isEmpty())
+               commandCO->addItem(command);
 
-       controller().setFormat(all_formats_[line]);
-       controller().setCommand(cmd);
+       bc().setValid(isValid());
 }
 
 
-bool GuiSendto::isValid()
+void GuiSendTo::dispatchParams()
 {
-       int const line(dialog_->formatLW->currentRow());
+       if (!format_ || format_->name().empty())
+               return;
 
-       if (line < 0 || line > int(dialog_->formatLW->count()))
-               return false;
+       string data = format_->name();
+       if (!command_.isEmpty())
+               data += " " + fromqstr(command_);
+
+       FuncCode const lfun = command_.isEmpty() ?
+               LFUN_BUFFER_EXPORT : getLfun();
 
-       else return dialog_->formatLW->count() != 0 &&
-               !dialog_->commandCO->currentText().isEmpty();
+       dispatch(FuncRequest(lfun, data));
 }
 
+Dialog * createGuiSendTo(GuiView & lv) { return new GuiSendTo(lv); }
+
+
 } // namespace frontend
 } // namespace lyx
 
-#include "GuiSendto_moc.cpp"
+#include "moc_GuiSendto.cpp"