diff --git a/src/Mod/Path/Gui/AppPathGuiPy.cpp b/src/Mod/Path/Gui/AppPathGuiPy.cpp index 6fd3e6e9a..7aad0b79a 100644 --- a/src/Mod/Path/Gui/AppPathGuiPy.cpp +++ b/src/Mod/Path/Gui/AppPathGuiPy.cpp @@ -95,16 +95,16 @@ private: QFileInfo fileInfo = list.at(i); scripts.push_back(fileInfo.baseName().toStdString()); } - std::string selected; + std::string processor; PathGui::DlgProcessorChooser Dlg(scripts); if (Dlg.exec() != QDialog::Accepted) { return Py::None(); } - selected = Dlg.getSelected(); - + processor = Dlg.getProcessor(); + std::ostringstream pre; std::ostringstream cmd; - if (selected.empty()) { + if (processor.empty()) { App::Document *pcDoc = App::GetApplication().newDocument("Unnamed"); Gui::Command::runCommand(Gui::Command::Gui,"import Path"); cmd << "Path.read(\"" << EncodedName << "\",\"" << pcDoc->getName() << "\")"; @@ -112,14 +112,14 @@ private: } else { for (int i = 0; i < list.size(); ++i) { QFileInfo fileInfo = list.at(i); - if (fileInfo.baseName().toStdString() == selected) { + if (fileInfo.baseName().toStdString() == processor) { if (fileInfo.absoluteFilePath().contains(QString::fromLatin1("PathScripts"))) { - pre << "from PathScripts import " << selected; + pre << "from PathScripts import " << processor; } else { - pre << "import " << selected; + pre << "import " << processor; } Gui::Command::runCommand(Gui::Command::Gui,pre.str().c_str()); - cmd << selected << ".open(\"" << EncodedName << "\")"; + cmd << processor << ".open(\"" << EncodedName << "\")"; Gui::Command::runCommand(Gui::Command::Gui,cmd.str().c_str()); } } @@ -162,12 +162,12 @@ private: QFileInfo fileInfo = list.at(i); scripts.push_back(fileInfo.baseName().toStdString()); } - std::string selected; + std::string processor; PathGui::DlgProcessorChooser Dlg(scripts); if (Dlg.exec() != QDialog::Accepted) { return Py::None(); } - selected = Dlg.getSelected(); + processor = Dlg.getProcessor(); App::Document *pcDoc = 0; if (DocName) @@ -181,21 +181,21 @@ private: std::ostringstream pre; std::ostringstream cmd; - if (selected.empty()) { + if (processor.empty()) { Gui::Command::runCommand(Gui::Command::Gui,"import Path"); cmd << "Path.read(\"" << EncodedName << "\",\"" << pcDoc->getName() << "\")"; Gui::Command::runCommand(Gui::Command::Gui,cmd.str().c_str()); } else { for (int i = 0; i < list.size(); ++i) { QFileInfo fileInfo = list.at(i); - if (fileInfo.baseName().toStdString() == selected) { + if (fileInfo.baseName().toStdString() == processor) { if (fileInfo.absoluteFilePath().contains(QString::fromLatin1("PathScripts"))) { - pre << "from PathScripts import " << selected; + pre << "from PathScripts import " << processor; } else { - pre << "import " << selected; + pre << "import " << processor; } Gui::Command::runCommand(Gui::Command::Gui,pre.str().c_str()); - cmd << selected << ".insert(\"" << EncodedName << "\",\"" << pcDoc->getName() << "\")"; + cmd << processor << ".insert(\"" << EncodedName << "\",\"" << pcDoc->getName() << "\")"; Gui::Command::runCommand(Gui::Command::Gui,cmd.str().c_str()); } } @@ -238,16 +238,16 @@ private: QFileInfo fileInfo = list.at(i); scripts.push_back(fileInfo.baseName().toStdString()); } - std::string selected; - PathGui::DlgProcessorChooser Dlg(scripts); + PathGui::DlgProcessorChooser Dlg(scripts, true); if (Dlg.exec() != QDialog::Accepted) { return Py::None(); } - selected = Dlg.getSelected(); + std::string processor = Dlg.getProcessor(); + std::string arguments = Dlg.getArguments(); std::ostringstream pre; std::ostringstream cmd; - if (selected.empty()) { + if (processor.empty()) { if (objlist.size() > 1) { throw Py::RuntimeError("Cannot export more than one object without using a post script"); } @@ -256,7 +256,7 @@ private: App::DocumentObject* obj = static_cast(item)->getDocumentObjectPtr(); App::Document* doc = obj->getDocument(); Gui::Command::runCommand(Gui::Command::Gui,"import Path"); - cmd << "Path.write(FreeCAD.getDocument(\"" << doc->getName() << "\").getObject(\"" << obj->getNameInDocument() << "\"),\"" << EncodedName << "\")"; + cmd << "Path.write(FreeCAD.getDocument(\"" << doc->getName() << "\").getObject(\"" << obj->getNameInDocument() << "\"),\"" << EncodedName << "\")"; Gui::Command::runCommand(Gui::Command::Gui,cmd.str().c_str()); } else { return Py::None(); @@ -264,14 +264,14 @@ private: } else { for (int i = 0; i < list.size(); ++i) { QFileInfo fileInfo = list.at(i); - if (fileInfo.baseName().toStdString() == selected) { + if (fileInfo.baseName().toStdString() == processor) { if (fileInfo.absoluteFilePath().contains(QString::fromLatin1("PathScripts"))) { - pre << "from PathScripts import " << selected; + pre << "from PathScripts import " << processor; } else { - pre << "import " << selected; + pre << "import " << processor; } Gui::Command::runCommand(Gui::Command::Gui,pre.str().c_str()); - cmd << selected << ".export(__objs__,\"" << EncodedName << "\")"; + cmd << processor << ".export(__objs__,\"" << EncodedName << "\",\"" << arguments << "\")"; Gui::Command::runCommand(Gui::Command::Gui,cmd.str().c_str()); } } diff --git a/src/Mod/Path/Gui/DlgProcessorChooser.cpp b/src/Mod/Path/Gui/DlgProcessorChooser.cpp index 1cb51c1b8..62a473a88 100644 --- a/src/Mod/Path/Gui/DlgProcessorChooser.cpp +++ b/src/Mod/Path/Gui/DlgProcessorChooser.cpp @@ -42,7 +42,7 @@ using namespace PathGui; /* TRANSLATOR PathGui::DlgProcessorChooser */ -DlgProcessorChooser::DlgProcessorChooser(std::vector &scriptnames) +DlgProcessorChooser::DlgProcessorChooser(std::vector &scriptnames, bool withArguments) : QDialog(Gui::getMainWindow()), ui(new Ui_DlgProcessorChooser) { ui->setupUi(this); @@ -50,23 +50,35 @@ DlgProcessorChooser::DlgProcessorChooser(std::vector &scriptnames) for (std::vector::const_iterator it = scriptnames.begin(); it != scriptnames.end(); ++it) ui->comboBox->addItem(QString::fromUtf8((*it).c_str())); QMetaObject::connectSlotsByName(this); + if (withArguments) { + ui->argsLabel->setEnabled(true); + ui->argsLineEdit->setEnabled(true); + } } DlgProcessorChooser::~DlgProcessorChooser() { } -std::string DlgProcessorChooser::getSelected() +std::string DlgProcessorChooser::getProcessor() { - return entry; + return processor; +} + +std::string DlgProcessorChooser::getArguments() +{ + return arguments; } void DlgProcessorChooser::accept() { - if (ui->comboBox->currentText() == tr("None")) - entry = ""; - else - entry = ui->comboBox->currentText().toUtf8().data(); + if (ui->comboBox->currentText() == tr("None")) { + processor = ""; + arguments = ""; + } else { + processor = ui->comboBox->currentText().toUtf8().data(); + arguments = ui->argsLineEdit->text().toUtf8().data(); + } QDialog::accept(); } #include "moc_DlgProcessorChooser.cpp" diff --git a/src/Mod/Path/Gui/DlgProcessorChooser.h b/src/Mod/Path/Gui/DlgProcessorChooser.h index ae7a6178f..37213de71 100644 --- a/src/Mod/Path/Gui/DlgProcessorChooser.h +++ b/src/Mod/Path/Gui/DlgProcessorChooser.h @@ -36,10 +36,11 @@ class DlgProcessorChooser : public QDialog Q_OBJECT public: - DlgProcessorChooser(std::vector &scriptnames); + DlgProcessorChooser(std::vector &scriptnames, bool withArguments = false); ~DlgProcessorChooser(); - std::string getSelected(); + std::string getProcessor(); + std::string getArguments(); void accept(); @@ -47,7 +48,7 @@ protected Q_SLOTS: private: Ui_DlgProcessorChooser* ui; - std::string entry; + std::string processor, arguments; }; } diff --git a/src/Mod/Path/Gui/DlgProcessorChooser.ui b/src/Mod/Path/Gui/DlgProcessorChooser.ui index a8c8636a6..39543d03a 100644 --- a/src/Mod/Path/Gui/DlgProcessorChooser.ui +++ b/src/Mod/Path/Gui/DlgProcessorChooser.ui @@ -6,18 +6,42 @@ 0 0 - 239 - 82 + 272 + 107 Choose a processor - - + + + + + Processor + + + + - + + + + false + + + Arguments + + + + + + + false + + + + Qt::Horizontal @@ -25,6 +49,9 @@ QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + true +