Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
74 changes: 17 additions & 57 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,36 @@ 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) {
m_suffix = suffix;
if (m_init) {
refresh();
}
}
m_suffix = suffix;
refresh();
}

void WorkspaceMultiSelector::addItem(const std::string &name) {
Expand Down Expand Up @@ -274,14 +240,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 +257,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