15#include "MantidQtWidgets/Common/QtPropertyBrowser/DoubleDialogEditor.h"
16#include "MantidQtWidgets/Common/QtPropertyBrowser/qttreepropertybrowser.h"
24#include <QApplication>
37template <
typename T> std::vector<T> convertQListToStdVector(
QList<T> const &qList) {
39 vec.reserve(
static_cast<std::size_t
>(qList.size()));
40 std::transform(qList.cbegin(), qList.cend(), std::back_inserter(
vec), [](T
const &element) { return element; });
44template <
typename T>
QList<T> convertToQList(std::vector<T>
const &
vec) {
46 qList.reserve(
static_cast<int>(
vec.size()));
47 std::transform(
vec.cbegin(),
vec.cend(), std::back_inserter(qList), [](T
const &element) { return element; });
51QString getDefaultScriptDirectory() {
52 auto const previousDirectory = AlgorithmInputHistory::Instance().getPreviousDirectory();
53 if (previousDirectory.isEmpty())
54 return QString::fromStdString(ConfigService::Instance().getString(
"pythonscripts.directory"));
55 return previousDirectory;
66 QMap<QString, QString>
const &fitOptions)
75 m_ui.splitterVertical->setSizes({360, 120});
102 connect(
m_functionTreeView.get(), SIGNAL(functionRemovedString(std::string
const &)),
this,
106 connect(
m_functionTreeView.get(), SIGNAL(functionReplaced(std::string
const &)),
this,
108 connect(
m_functionTreeView.get(), SIGNAL(parameterChanged(std::string
const &)),
this,
110 connect(
m_functionTreeView.get(), SIGNAL(attributePropertyChanged(std::string
const &)),
this,
112 connect(
m_functionTreeView.get(), SIGNAL(parameterTieChanged(std::string
const &, std::string
const &)),
this,
114 connect(
m_functionTreeView.get(), SIGNAL(parameterConstraintRemoved(std::string
const &)),
this,
116 connect(
m_functionTreeView.get(), SIGNAL(parameterConstraintAdded(std::string
const &, std::string
const &)),
this,
118 connect(
m_functionTreeView.get(), SIGNAL(globalsChanged(std::vector<std::string>
const &)),
this,
122 connect(
m_functionTreeView.get(), SIGNAL(localParameterButtonClicked(std::string
const &)),
this,
125 connect(
m_fitOptionsBrowser.get(), SIGNAL(outputBaseNameChanged(std::string
const &)),
this,
140 SLOT(closeEditor()));
158 if (QThread::currentThread() != QApplication::instance()->thread()) {
159 QMetaObject::invokeMethod(
this,
"notifyADSDeleteEvent", Qt::AutoConnection, Q_ARG(std::string
const &, wsName));
166 if (QThread::currentThread() != QApplication::instance()->thread()) {
167 QMetaObject::invokeMethod(
this,
"notifyADSClearEvent", Qt::AutoConnection);
174 if (QThread::currentThread() != QApplication::instance()->thread()) {
175 QMetaObject::invokeMethod(
this,
"notifyADSRenameEvent", Qt::AutoConnection, Q_ARG(std::string
const &, wsName),
176 Q_ARG(std::string
const &, newName));
199 if (column == ColumnIndex::StartX) {
202 }
else if (column == ColumnIndex::EndX) {
239 std::string
const &constraint) {
270 if (result == QDialog::Accepted)
323 double startX,
double endX) {
329 dialog->setAttribute(Qt::WA_DeleteOnClose);
341std::vector<MatrixWorkspace_const_sptr>
343 std::vector<MatrixWorkspace_const_sptr> workspaces;
346 auto &ads = AnalysisDataService::Instance();
347 if (ads.doesExist(wsName)) {
350 displayWarning(
"Failed to add workspace: '" + wsName +
"' doesn't exist.");
357 std::string
const ¶meter, std::vector<std::string>
const &workspaceNames,
358 std::vector<std::string>
const &domainNames, std::vector<double>
const &values, std::vector<bool>
const &fixes,
359 std::vector<std::string>
const &ties, std::vector<std::string>
const &constraints) {
361 this, parameter, workspaceNames, domainNames, convertToQList(values), convertToQList(fixes),
369std::tuple<std::string, std::vector<double>, std::vector<bool>, std::vector<std::string>, std::vector<std::string>>
378std::tuple<std::string, std::string, std::string, std::string, std::string, bool>
386 auto const defaultDirectory = getDefaultScriptDirectory();
387 auto const filePath = QFileDialog::getSaveFileName(this->parentWidget(), tr(
"Save Script As "), defaultDirectory,
388 tr(
"Script files (*.py)"));
390 if (!filePath.isEmpty())
391 API::AlgorithmInputHistory::Instance().setPreviousDirectory(QFileInfo(filePath).absoluteDir().path());
393 return filePath.toStdString();
399 return m_ui.cbApplyFunctionChangesTo->currentText() ==
"All Domains";
405 m_dataTable->setFunctionPrefixVisible(simultaneousMode);
407 simultaneousMode ?
m_dataTable->selectedDomainFunctionPrefix().toStdString() :
"");
409 if (simultaneousMode)
427 std::vector<std::string> globals;
428 globals.reserve(globalParameters.size());
429 std::transform(globalParameters.cbegin(), globalParameters.cend(), std::back_inserter(globals),
430 [](
GlobalParameter const &globalParam) { return globalParam.m_parameter; });
435 m_ui.lbMessage->setText(QString::fromStdString(text));
439 if (QClipboard *clipboard = QApplication::clipboard())
440 clipboard->setText(QString::fromStdString(text));
444 QMessageBox::warning(
this,
"Warning!", QString::fromStdString(message));
std::map< DeltaEMode::Type, std::string > index
std::vector< T > const * vec
#define UNUSED_ARG(x)
Function arguments are sometimes unused in certain implmentations but are required for documentation ...
static void showCustomInterface(const QString &name, const QString &area=QString(), const QString §ion=QString())
void observeRename(bool turnOn=true)
Function will add/remove the observer to the ADS for when a workspace is renamed.
void observeDelete(bool turnOn=true)
Function will add/remove the observer to the ADS for when a workspace is deleted.
void observeClear(bool turnOn=true)
Function will add/remove the observer to the ADS for when the ADS is cleared.
Attribute is a non-fitting parameter.
Base MatrixWorkspace Abstract Class.
std::shared_ptr< Workspace > Workspace_sptr
shared pointer to Mantid::API::Workspace
std::shared_ptr< IFunction > IFunction_sptr
shared pointer to the function base class