diff --git a/GUI/Views/JobWidgets/JobListWidget.cpp b/GUI/Views/JobWidgets/JobListWidget.cpp deleted file mode 100644 index 2ec724a56e257902c1abcaa0bf55ef5892bc73dd..0000000000000000000000000000000000000000 --- a/GUI/Views/JobWidgets/JobListWidget.cpp +++ /dev/null @@ -1,120 +0,0 @@ -// ************************************************************************************************ -// -// BornAgain: simulate and fit reflection and scattering -// -//! @file GUI/Views/JobWidgets/JobListWidget.cpp -//! @brief Implements class JobListWidget -//! -//! @homepage http://www.bornagainproject.org -//! @license GNU General Public License v3 or higher (see COPYING) -//! @copyright Forschungszentrum Jülich GmbH 2018 -//! @authors Scientific Computing Group at MLZ (see CITATION, AUTHORS) -// -// ************************************************************************************************ - -#include "GUI/Views/JobWidgets/JobListWidget.h" -#include "GUI/Models/JobItem.h" -#include "GUI/Models/JobModel.h" -#include "GUI/Views/CommonWidgets/ItemSelectorWidget.h" -#include "GUI/Views/CommonWidgets/StyleUtils.h" -#include "GUI/Views/JobWidgets/JobListViewDelegate.h" -#include <QItemSelectionModel> -#include <QListView> -#include <QVBoxLayout> - -JobListWidget::JobListWidget(QWidget* parent) - : QWidget(parent) - , m_listViewDelegate(new JobListViewDelegate(this)) - , m_listView(new ItemSelectorWidget(this)) - , m_jobModel(nullptr) -{ - setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); - - m_listView->listView()->setItemDelegate(m_listViewDelegate); - m_listView->listView()->setSelectionMode(QAbstractItemView::ExtendedSelection); - - auto mainLayout = new QVBoxLayout; - mainLayout->setMargin(0); - mainLayout->setSpacing(0); - - auto vlayout = new QVBoxLayout; - vlayout->setMargin(10); - vlayout->setSpacing(10); - - vlayout->addWidget(m_listView); - mainLayout->addLayout(vlayout); - - setLayout(mainLayout); - - connect(m_listView, &ItemSelectorWidget::contextMenuRequest, this, - &JobListWidget::contextMenuRequest); - - connect(m_listView, &ItemSelectorWidget::selectionChanged, this, - &JobListWidget::onItemSelectionChanged); -} - -void JobListWidget::setModel(JobModel* model) -{ - ASSERT(model); - if (model != m_jobModel) { - m_jobModel = model; - m_listView->setModel(model); - - connect(m_listViewDelegate, &JobListViewDelegate::cancelButtonClicked, m_jobModel, - &JobModel::cancelJob, Qt::UniqueConnection); - } -} - -QItemSelectionModel* JobListWidget::selectionModel() -{ - return m_listView->selectionModel(); -} - -//! Returns currently selected JobItem - -const JobItem* JobListWidget::currentJobItem() const -{ - QModelIndexList selected = m_listView->selectionModel()->selectedIndexes(); - return selected.size() == 1 ? m_jobModel->getJobItemForIndex(selected.at(0)) : nullptr; -} - -QSize JobListWidget::sizeHint() const -{ - return QSize(GUI::Utils::Style::PropertyPanelWidth(), - GUI::Utils::Style::PropertyPanelWidth() * 2); -} - -QSize JobListWidget::minimumSizeHint() const -{ - return QSize(GUI::Utils::Style::PropertyPanelWidth(), GUI::Utils::Style::PropertyPanelWidth()); -} - -void JobListWidget::makeJobItemSelected(JobItem* jobItem) -{ - ASSERT(jobItem); - QModelIndexList selected = m_listView->selectionModel()->selectedIndexes(); - - // Already selected, but we still will emit the signal to notify widgets. - // To handle the case, when the job was selected before it completed (and some stack widgets - // were refusing to show the content for non-complete job). - if (selected.size() == 1 && selected.at(0) == jobItem->index()) { - emit selectionChanged(jobItem); - return; - } - - m_listView->selectionModel()->clearSelection(); - m_listView->selectionModel()->select(jobItem->index(), QItemSelectionModel::Select); -} - -//! Recieves SeesionItem from ItemSelectorWidget and emits it further as JobItem. -//! Null item means the absence of selection. - -void JobListWidget::onItemSelectionChanged(SessionItem* item) -{ - JobItem* jobItem(nullptr); - if (item) { - jobItem = dynamic_cast<JobItem*>(item); - ASSERT(jobItem); - } - emit selectionChanged(jobItem); -} diff --git a/GUI/Views/JobWidgets/JobListWidget.h b/GUI/Views/JobWidgets/JobListWidget.h deleted file mode 100644 index 88f9eff9d8db902f64e7d4d3147388e38986bb89..0000000000000000000000000000000000000000 --- a/GUI/Views/JobWidgets/JobListWidget.h +++ /dev/null @@ -1,61 +0,0 @@ -// ************************************************************************************************ -// -// BornAgain: simulate and fit reflection and scattering -// -//! @file GUI/Views/JobWidgets/JobListWidget.h -//! @brief Defines class JobListWidget -//! -//! @homepage http://www.bornagainproject.org -//! @license GNU General Public License v3 or higher (see COPYING) -//! @copyright Forschungszentrum Jülich GmbH 2018 -//! @authors Scientific Computing Group at MLZ (see CITATION, AUTHORS) -// -// ************************************************************************************************ - -#ifndef BORNAGAIN_GUI_VIEWS_JOBWIDGETS_JOBLISTWIDGET_H -#define BORNAGAIN_GUI_VIEWS_JOBWIDGETS_JOBLISTWIDGET_H - -#include <QModelIndexList> -#include <QWidget> - -class JobModel; -class JobListViewDelegate; -class QItemSelectionModel; -class ItemSelectorWidget; -class QModelIndex; -class JobItem; -class SessionItem; - -//! The JobListWidget class contains list view to select job items. - -class JobListWidget : public QWidget { - Q_OBJECT -public: - explicit JobListWidget(QWidget* parent = nullptr); - - void setModel(JobModel* model); - - QItemSelectionModel* selectionModel(); - - const JobItem* currentJobItem() const; - - QSize sizeHint() const; - QSize minimumSizeHint() const; - -signals: - void contextMenuRequest(const QPoint& point, const QModelIndex& index); - void selectionChanged(JobItem*); - -public slots: - void makeJobItemSelected(JobItem* jobItem); - -private slots: - void onItemSelectionChanged(SessionItem* item); - -private: - JobListViewDelegate* m_listViewDelegate; - ItemSelectorWidget* m_listView; - JobModel* m_jobModel; -}; - -#endif // BORNAGAIN_GUI_VIEWS_JOBWIDGETS_JOBLISTWIDGET_H diff --git a/GUI/Views/JobWidgets/JobSelectorActions.cpp b/GUI/Views/JobWidgets/JobSelectorActions.cpp deleted file mode 100644 index 5e1f7b2f374dbeeccf2fcfb6af6b9761ed19ea15..0000000000000000000000000000000000000000 --- a/GUI/Views/JobWidgets/JobSelectorActions.cpp +++ /dev/null @@ -1,182 +0,0 @@ -// ************************************************************************************************ -// -// BornAgain: simulate and fit reflection and scattering -// -//! @file GUI/Views/JobWidgets/JobSelectorActions.cpp -//! @brief Implements class JobSelectorActions -//! -//! @homepage http://www.bornagainproject.org -//! @license GNU General Public License v3 or higher (see COPYING) -//! @copyright Forschungszentrum Jülich GmbH 2018 -//! @authors Scientific Computing Group at MLZ (see CITATION, AUTHORS) -// -// ************************************************************************************************ - -#include "GUI/Views/JobWidgets/JobSelectorActions.h" -#include "GUI/Models/IntensityDataItem.h" -#include "GUI/Models/JobItem.h" -#include "GUI/Models/JobModel.h" -#include <QAction> -#include <QItemSelectionModel> -#include <QMenu> -#include <QPersistentModelIndex> -#include <memory> - -JobSelectorActions::JobSelectorActions(JobModel* jobModel, QObject* parent) - : QObject(parent) - , m_runJobAction(nullptr) - , m_removeJobAction(nullptr) - , m_selectionModel(nullptr) - , m_jobModel(jobModel) -{ - m_runJobAction = new QAction("Run", this); - m_runJobAction->setIcon(QIcon(":/images/play.svg")); - m_runJobAction->setToolTip("Run currently selected job"); - connect(m_runJobAction, &QAction::triggered, this, &JobSelectorActions::onRunJob); - - m_removeJobAction = new QAction("Remove", this); - m_removeJobAction->setIcon(QIcon(":/images/delete.svg")); - m_removeJobAction->setToolTip("Remove currently selected job."); - connect(m_removeJobAction, &QAction::triggered, this, &JobSelectorActions::onRemoveJob); -} - -void JobSelectorActions::setSelectionModel(QItemSelectionModel* selectionModel) -{ - m_selectionModel = selectionModel; -} - -void JobSelectorActions::onRunJob() -{ - QModelIndexList indexList = m_selectionModel->selectedIndexes(); - for (auto index : indexList) { - if (canRunJob(index)) - m_jobModel->runJob(index); - } -} - -void JobSelectorActions::onRemoveJob() -{ - QList<QPersistentModelIndex> toRemove; - for (auto index : m_selectionModel->selectedIndexes()) - if (canRemoveJob(index)) - toRemove.append(QPersistentModelIndex(index)); - - for (auto index : toRemove) - m_jobModel->removeJob(index); -} - -//! Generates context menu at given point. If indexAtPoint is provided, the actions will be done -//! for corresponding JobItem - -void JobSelectorActions::onContextMenuRequest(const QPoint& point, const QModelIndex& indexAtPoint) -{ - QMenu menu; - initItemContextMenu(menu, indexAtPoint); - menu.exec(point); - setAllActionsEnabled(true); -} - -//! Puts all IntensityDataItem axes range to the selected job - -void JobSelectorActions::equalizeSelectedToJob(int selected_id) -{ - QModelIndexList selectedList = m_selectionModel->selectedIndexes(); - - if (selected_id >= selectedList.size()) - return; - - JobItem* referenceItem = m_jobModel->getJobItemForIndex(selectedList.at(selected_id)); - ASSERT(referenceItem); - - IntensityDataItem* referenceDataItem = referenceItem->intensityDataItem(); - if (!referenceDataItem) - return; - - for (auto index : selectedList) { - JobItem* jobItem = m_jobModel->getJobItemForIndex(index); - if (jobItem == referenceItem) - continue; - if (IntensityDataItem* dataItem = jobItem->intensityDataItem()) { - dataItem->setLowerX(referenceDataItem->getLowerX()); - dataItem->setUpperX(referenceDataItem->getUpperX()); - dataItem->setLowerY(referenceDataItem->getLowerY()); - dataItem->setUpperY(referenceDataItem->getUpperY()); - dataItem->setLowerZ(referenceDataItem->getLowerZ()); - dataItem->setUpperZ(referenceDataItem->getUpperZ()); - } - } -} - -void JobSelectorActions::initItemContextMenu(QMenu& menu, const QModelIndex& indexAtPoint) -{ - menu.setToolTipsVisible(true); - - menu.addAction(m_runJobAction); - menu.addAction(m_removeJobAction); - - QModelIndex targetIndex = indexAtPoint; - if (!targetIndex.isValid()) { - QModelIndexList indexList = m_selectionModel->selectedIndexes(); - if (!indexList.empty()) - targetIndex = indexList.first(); - } - m_runJobAction->setEnabled(canRunJob(targetIndex)); - m_removeJobAction->setEnabled(canRemoveJob(targetIndex)); - - setupEqualizeMenu(menu); -} - -void JobSelectorActions::setupEqualizeMenu(QMenu& menu) -{ - menu.addSeparator(); - - QMenu* equalize_menu = menu.addMenu("Equalize selected plots"); - equalize_menu->setToolTipsVisible(true); - equalize_menu->setToolTip( - "All plots from the list of selected jobs will be equalized to the one."); - QModelIndexList selected = m_selectionModel->selectedIndexes(); - - if (selected.size() <= 1) { - equalize_menu->setDisabled(true); - return; - } - std::sort(selected.begin(), selected.end(), - [](const QModelIndex& a, const QModelIndex& b) { return a.row() < b.row(); }); - - for (int i = 0; i < selected.count(); ++i) { - JobItem* jobItem = m_jobModel->getJobItemForIndex(selected.at(i)); - QAction* action = equalize_menu->addAction(QString("to ").append(jobItem->itemName())); - connect(action, &QAction::triggered, [=] { equalizeSelectedToJob(i); }); - } -} - -void JobSelectorActions::setAllActionsEnabled(bool value) const -{ - m_runJobAction->setEnabled(value); - m_removeJobAction->setEnabled(value); -} - -bool JobSelectorActions::canRunJob(const QModelIndex& index) const -{ - if (!index.isValid()) - return false; - - const JobItem* jobItem = m_jobModel->getJobItemForIndex(index); - - if (jobItem->isRunning() || jobItem->getStatus() == JobStatus::Fitting) - return false; - - return true; -} - -bool JobSelectorActions::canRemoveJob(const QModelIndex& index) const -{ - if (!index.isValid()) - return false; - - const JobItem* jobItem = m_jobModel->getJobItemForIndex(index); - if (jobItem->isRunning() || jobItem->getStatus() == JobStatus::Fitting) - return false; - - return true; -} diff --git a/GUI/Views/JobWidgets/JobSelectorActions.h b/GUI/Views/JobWidgets/JobSelectorActions.h deleted file mode 100644 index 4973d53ab54bfa069806ff4c970742501bc7e357..0000000000000000000000000000000000000000 --- a/GUI/Views/JobWidgets/JobSelectorActions.h +++ /dev/null @@ -1,59 +0,0 @@ -// ************************************************************************************************ -// -// BornAgain: simulate and fit reflection and scattering -// -//! @file GUI/Views/JobWidgets/JobSelectorActions.h -//! @brief Defines class JobSelectorActions -//! -//! @homepage http://www.bornagainproject.org -//! @license GNU General Public License v3 or higher (see COPYING) -//! @copyright Forschungszentrum Jülich GmbH 2018 -//! @authors Scientific Computing Group at MLZ (see CITATION, AUTHORS) -// -// ************************************************************************************************ - -#ifndef BORNAGAIN_GUI_VIEWS_JOBWIDGETS_JOBSELECTORACTIONS_H -#define BORNAGAIN_GUI_VIEWS_JOBWIDGETS_JOBSELECTORACTIONS_H - -#include <QModelIndex> -#include <QObject> - -class QAction; -class JobModel; -class QItemSelectionModel; -class QModelIndex; -class QMenu; - -//! The JobSelectorActions class contains actions to run/remove jobs. Actions are used by the -//! toolbar and JobSelectorList's context menu. - -class JobSelectorActions : public QObject { - Q_OBJECT -public: - JobSelectorActions(JobModel* jobModel, QObject* parent = 0); - - void setSelectionModel(QItemSelectionModel* selectionModel); - -public slots: - void onRunJob(); - void onRemoveJob(); - void onContextMenuRequest(const QPoint& point, const QModelIndex& indexAtPoint = {}); - void equalizeSelectedToJob(int selected_id); - -private: - void initItemContextMenu(QMenu& menu, const QModelIndex& indexAtPoint); - void setupEqualizeMenu(QMenu& menu); - void setAllActionsEnabled(bool value) const; - bool canRunJob(const QModelIndex& index) const; - bool canRemoveJob(const QModelIndex& index) const; - -public: - QAction* m_runJobAction; - QAction* m_removeJobAction; - -private: - QItemSelectionModel* m_selectionModel; - JobModel* m_jobModel; -}; - -#endif // BORNAGAIN_GUI_VIEWS_JOBWIDGETS_JOBSELECTORACTIONS_H