Newer
Older
// Mantid Repository : https://github.com/mantidproject/mantid
//
// Copyright © 2018 ISIS Rutherford Appleton Laboratory UKRI,
// NScD Oak Ridge National Laboratory, European Spallation Source
// & Institut Laue - Langevin
// SPDX - License - Identifier: GPL - 3.0 +
#include "GUI/Batch/IBatchPresenterFactory.h"
#include "MantidQtWidgets/Common/HelpWindow.h"
namespace MantidQt {
namespace CustomInterfaces {
* @param view :: [input] The view we are managing
* @param messageHandler :: Interface to a class that displays messages to
* the user
* @param batchPresenterFactory :: [input] A factory to create the batches
* we will manage
MainWindowPresenter::MainWindowPresenter(
IMainWindowView *view, IMessageHandler *messageHandler,
std::unique_ptr<IBatchPresenterFactory> batchPresenterFactory)
: m_view(view), m_messageHandler(messageHandler),
m_batchPresenterFactory(std::move(batchPresenterFactory)) {
view->subscribe(this);
for (auto *batchView : m_view->batches())
void MainWindowPresenter::notifyNewBatchRequested() {
auto *newBatchView = m_view->newBatch();
addNewBatch(newBatchView);
void MainWindowPresenter::notifyCloseBatchRequested(int batchIndex) {
if (m_batchPresenters[batchIndex]->isAutoreducing() ||
m_batchPresenters[batchIndex]->isProcessing()) {
m_messageHandler->giveUserCritical(
"Cannot close batch while processing or autoprocessing is in progress",
"Error");
return;
}
if (m_batchPresenters[batchIndex]->requestClose()) {
m_batchPresenters.erase(m_batchPresenters.begin() + batchIndex);
m_view->removeBatch(batchIndex);
}
void MainWindowPresenter::notifyAutoreductionResumed() {
for (auto &batchPresenter : m_batchPresenters) {
batchPresenter->anyBatchAutoreductionResumed();
}
}
void MainWindowPresenter::notifyAutoreductionPaused() {
for (auto &batchPresenter : m_batchPresenters) {
batchPresenter->anyBatchAutoreductionPaused();
void MainWindowPresenter::notifyHelpPressed() { showHelp(); }
bool MainWindowPresenter::isAnyBatchProcessing() const {
for (auto &batchPresenter : m_batchPresenters) {
if (batchPresenter->isProcessing())
return true;
}
bool MainWindowPresenter::isAnyBatchAutoreducing() const {
for (auto &batchPresenter : m_batchPresenters) {
if (batchPresenter->isAutoreducing())
return true;
}
return false;
}
void MainWindowPresenter::addNewBatch(IBatchView *batchView) {
m_batchPresenters.emplace_back(m_batchPresenterFactory->make(batchView));
m_batchPresenters.back()->acceptMainPresenter(this);
// starts in the paused state
m_batchPresenters.back()->reductionPaused();
// Ensure autoreduce button is enabled/disabled correctly for the new batch
if (isAnyBatchAutoreducing())
m_batchPresenters.back()->anyBatchAutoreductionResumed();
else
m_batchPresenters.back()->anyBatchAutoreductionPaused();
}
void MainWindowPresenter::showHelp() {
MantidQt::API::HelpWindow::showCustomInterface(nullptr,
QString("ISIS Reflectometry"));
} // namespace ISISReflectometry
} // namespace CustomInterfaces
} // namespace MantidQt