Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/source/release/v6.11.0/Inelastic/Bugfixes/38041.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
- Data unrestricted by suffix can be loaded on :ref:`Elwin Tab <elwin>` of the :ref:`Data Processor Interface <interface-inelastic-data-processor>` if the option is selected from Settings.
Original file line number Diff line number Diff line change
Expand Up @@ -34,16 +34,14 @@ double underscore at the start of the
workspace name
* By providing a suffix that the workspace name must have
*/
class EXPORT_OPT_MANTIDQT_COMMON WorkspaceMultiSelector : public QTableWidget {
class EXPORT_OPT_MANTIDQT_COMMON WorkspaceMultiSelector final : public QTableWidget {
Q_OBJECT

Q_PROPERTY(QStringList WorkspaceTypes READ getWorkspaceTypes WRITE setWorkspaceTypes)
Q_PROPERTY(bool ShowGroups READ showWorkspaceGroups WRITE showWorkspaceGroups)
Q_PROPERTY(QStringList Suffix READ getWSSuffixes WRITE setWSSuffixes)

public:
/// Default Constructor
explicit WorkspaceMultiSelector(QWidget *parent = 0, bool init = true);
explicit WorkspaceMultiSelector(QWidget *parent = nullptr);

/// Destructor
~WorkspaceMultiSelector() override;
Expand All @@ -54,19 +52,15 @@ class EXPORT_OPT_MANTIDQT_COMMON WorkspaceMultiSelector : public QTableWidget {
void resetIndexRangeToDefault();
void unifyRange();

bool showWorkspaceGroups() const;
void showWorkspaceGroups(bool show);
StringPairVec retrieveSelectedNameIndexPairs();

QStringList getWorkspaceTypes() const;
QStringList getWSSuffixes() const;
void setWorkspaceTypes(const QStringList &types);
const QStringList &getWSSuffixes() const;
void setWSSuffixes(const QStringList &suffix);

bool isValid() const;

void connectObservers();
void disconnectObservers();
void connectObservers() const;
void disconnectObservers() const;

signals:
void emptied();
Expand Down Expand Up @@ -98,14 +92,7 @@ class EXPORT_OPT_MANTIDQT_COMMON WorkspaceMultiSelector : public QTableWidget {
Poco::NObserver<WorkspaceMultiSelector, Mantid::API::WorkspaceRenameNotification> m_renameObserver;
Poco::NObserver<WorkspaceMultiSelector, Mantid::API::WorkspaceAfterReplaceNotification> m_replaceObserver;

bool m_init;

/// A list of workspace types that should be shown in the QtableWidget
QStringList m_workspaceTypes;
// show/hide workspace groups
bool m_showGroups;
QStringList m_suffix;

// Mutex for synchronized event handling
std::mutex m_adsMutex;
};
Expand Down
73 changes: 17 additions & 56 deletions qt/widgets/common/src/WorkspaceMultiSelector.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -44,17 +44,14 @@ QStringList headerLabels = {"Workspace Name", "Ws Index"};
namespace MantidQt {
namespace MantidWidgets {

WorkspaceMultiSelector::WorkspaceMultiSelector(QWidget *parent, bool init)
WorkspaceMultiSelector::WorkspaceMultiSelector(QWidget *parent)
: QTableWidget(parent), m_addObserver(*this, &WorkspaceMultiSelector::handleAddEvent),
m_remObserver(*this, &WorkspaceMultiSelector::handleRemEvent),
m_clearObserver(*this, &WorkspaceMultiSelector::handleClearEvent),
m_renameObserver(*this, &WorkspaceMultiSelector::handleRenameEvent),
m_replaceObserver(*this, &WorkspaceMultiSelector::handleReplaceEvent), m_init(init), m_workspaceTypes(),
m_showGroups(false), m_suffix() {

if (init) {
connectObservers();
}
m_replaceObserver(*this, &WorkspaceMultiSelector::handleReplaceEvent), m_suffix(QStringList()) {
connectObservers();
refresh();
}

/**
Expand All @@ -80,67 +77,37 @@ void WorkspaceMultiSelector::setupTable() {
/**
* De-subscribes this object from the Poco NotificationCentre
*/
void WorkspaceMultiSelector::disconnectObservers() {
if (m_init) {
Mantid::API::AnalysisDataService::Instance().notificationCenter.removeObserver(m_addObserver);
Mantid::API::AnalysisDataService::Instance().notificationCenter.removeObserver(m_remObserver);
Mantid::API::AnalysisDataService::Instance().notificationCenter.removeObserver(m_clearObserver);
Mantid::API::AnalysisDataService::Instance().notificationCenter.removeObserver(m_renameObserver);
Mantid::API::AnalysisDataService::Instance().notificationCenter.removeObserver(m_replaceObserver);
m_init = false;
}
void WorkspaceMultiSelector::disconnectObservers() const {
Mantid::API::AnalysisDataService::Instance().notificationCenter.removeObserver(m_addObserver);
Mantid::API::AnalysisDataService::Instance().notificationCenter.removeObserver(m_remObserver);
Mantid::API::AnalysisDataService::Instance().notificationCenter.removeObserver(m_clearObserver);
Mantid::API::AnalysisDataService::Instance().notificationCenter.removeObserver(m_renameObserver);
Mantid::API::AnalysisDataService::Instance().notificationCenter.removeObserver(m_replaceObserver);
}

/**
* Subscribes this object to the Poco NotificationCentre
*/
void WorkspaceMultiSelector::connectObservers() {
void WorkspaceMultiSelector::connectObservers() const {
Mantid::API::AnalysisDataServiceImpl &ads = Mantid::API::AnalysisDataService::Instance();
ads.notificationCenter.addObserver(m_addObserver);
ads.notificationCenter.addObserver(m_remObserver);
ads.notificationCenter.addObserver(m_renameObserver);
ads.notificationCenter.addObserver(m_clearObserver);
ads.notificationCenter.addObserver(m_replaceObserver);
refresh();
m_init = true;
}

QStringList WorkspaceMultiSelector::getWorkspaceTypes() const { return m_workspaceTypes; }

void WorkspaceMultiSelector::setWorkspaceTypes(const QStringList &types) {
if (types != m_workspaceTypes) {
m_workspaceTypes = types;
if (m_init) {
refresh();
}
}
}

bool WorkspaceMultiSelector::showWorkspaceGroups() const { return m_showGroups; }

void WorkspaceMultiSelector::showWorkspaceGroups(bool show) {
if (show != m_showGroups) {
m_showGroups = show;
if (m_init) {
refresh();
}
}
}

bool WorkspaceMultiSelector::isValid() const {
const QTableWidgetItem *item = currentItem();
return (item != nullptr);
}

QStringList WorkspaceMultiSelector::getWSSuffixes() const { return m_suffix; }
const QStringList &WorkspaceMultiSelector::getWSSuffixes() const { return m_suffix; }

void WorkspaceMultiSelector::setWSSuffixes(const QStringList &suffix) {
if (suffix != m_suffix) {
if (suffix != m_suffix)
m_suffix = suffix;
if (m_init) {
refresh();
}
}
refresh();
}

void WorkspaceMultiSelector::addItem(const std::string &name) {
Expand Down Expand Up @@ -274,14 +241,9 @@ void WorkspaceMultiSelector::handleReplaceEvent(Mantid::API::WorkspaceAfterRepla
}

bool WorkspaceMultiSelector::checkEligibility(const std::string &name) const {
auto &ads = Mantid::API::AnalysisDataService::Instance();
auto workspace = ads.retrieve(name);
if ((!m_workspaceTypes.empty()) && m_workspaceTypes.indexOf(QString::fromStdString(workspace->id())) == -1)
return false;
else if (!hasValidSuffix(name))
auto const workspace = Mantid::API::AnalysisDataService::Instance().retrieve(name);
if (workspace->isGroup() || !hasValidSuffix(name))
return false;
else if (!m_showGroups)
return std::dynamic_pointer_cast<Mantid::API::WorkspaceGroup>(workspace) == nullptr;
return true;
}

Expand All @@ -296,8 +258,7 @@ bool WorkspaceMultiSelector::hasValidSuffix(const std::string &name) const {
void WorkspaceMultiSelector::refresh() {
const std::lock_guard<std::mutex> lock(m_adsMutex);
this->clearContents();
auto &ads = Mantid::API::AnalysisDataService::Instance();
auto items = ads.getObjectNames();
auto const items = Mantid::API::AnalysisDataService::Instance().getObjectNames();
addItems(items);
}

Expand Down
Loading