BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
JobListWidget.cpp
Go to the documentation of this file.
1 // ************************************************************************************************
2 //
3 // BornAgain: simulate and fit reflection and scattering
4 //
5 //! @file GUI/coregui/Views/JobWidgets/JobListWidget.cpp
6 //! @brief Implements class JobListWidget
7 //!
8 //! @homepage http://www.bornagainproject.org
9 //! @license GNU General Public License v3 or higher (see COPYING)
10 //! @copyright Forschungszentrum Jülich GmbH 2018
11 //! @authors Scientific Computing Group at MLZ (see CITATION, AUTHORS)
12 //
13 // ************************************************************************************************
14 
21 #include <QItemSelectionModel>
22 #include <QListView>
23 #include <QVBoxLayout>
24 
26  : QWidget(parent)
27  , m_listViewDelegate(new JobListViewDelegate(this))
28  , m_listView(new ItemSelectorWidget(this))
29  , m_jobModel(nullptr)
30 {
31  setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
32 
33  m_listView->listView()->setItemDelegate(m_listViewDelegate);
34  m_listView->listView()->setSelectionMode(QAbstractItemView::ExtendedSelection);
35 
36  auto mainLayout = new QVBoxLayout;
37  mainLayout->setMargin(0);
38  mainLayout->setSpacing(0);
39 
40  auto vlayout = new QVBoxLayout;
41  vlayout->setMargin(10);
42  vlayout->setSpacing(10);
43 
44  vlayout->addWidget(m_listView);
45  mainLayout->addLayout(vlayout);
46 
47  setLayout(mainLayout);
48 
51 
54 }
55 
57 {
58  ASSERT(model);
59  if (model != m_jobModel) {
60  m_jobModel = model;
61  m_listView->setModel(model);
62 
64  &JobModel::cancelJob, Qt::UniqueConnection);
65  }
66 }
67 
68 QItemSelectionModel* JobListWidget::selectionModel()
69 {
70  return m_listView->selectionModel();
71 }
72 
73 //! Returns currently selected JobItem
74 
76 {
77  QModelIndexList selected = m_listView->selectionModel()->selectedIndexes();
78  return selected.size() == 1 ? m_jobModel->getJobItemForIndex(selected.at(0)) : nullptr;
79 }
80 
82 {
84 }
85 
87 {
89 }
90 
92 {
93  ASSERT(jobItem);
94  QModelIndexList selected = m_listView->selectionModel()->selectedIndexes();
95 
96  // Already selected, but we still will emit the signal to notify widgets.
97  // To handle the case, when the job was selected before it completed (and some stack widgets
98  // were refusing to show the content for non-complete job).
99  if (selected.size() == 1 && selected.at(0) == jobItem->index()) {
100  emit selectionChanged(jobItem);
101  return;
102  }
103 
104  m_listView->selectionModel()->clearSelection();
105  m_listView->selectionModel()->select(jobItem->index(), QItemSelectionModel::Select);
106 }
107 
108 //! Recieves SeesionItem from ItemSelectorWidget and emits it further as JobItem.
109 //! Null item means the absence of selection.
110 
112 {
113  JobItem* jobItem(nullptr);
114  if (item) {
115  jobItem = dynamic_cast<JobItem*>(item);
116  ASSERT(jobItem);
117  }
118  emit selectionChanged(jobItem);
119 }
#define ASSERT(condition)
Definition: Assert.h:31
Defines class ItemSelectorWidget.
Defines class JobItem.
Defines class JobListViewDelegate.
Defines class JobListWidget.
Defines class JobModel.
DefinesStyleUtils namespace.
The ItemSelectorWidget class holds QListView to show top level items of SessionModel.
QItemSelectionModel * selectionModel()
void contextMenuRequest(const QPoint &point, const QModelIndex &index)
void setModel(SessionModel *model)
void selectionChanged(SessionItem *item)
ViewDelegate to show progress bar JobQueuListView.
void cancelButtonClicked(const QModelIndex &index)
JobListViewDelegate * m_listViewDelegate
Definition: JobListWidget.h:56
void setModel(JobModel *model)
ItemSelectorWidget * m_listView
Definition: JobListWidget.h:57
QItemSelectionModel * selectionModel()
void selectionChanged(JobItem *)
QSize minimumSizeHint() const
void makeJobItemSelected(JobItem *jobItem)
void contextMenuRequest(const QPoint &point, const QModelIndex &index)
void onItemSelectionChanged(SessionItem *item)
Recieves SeesionItem from ItemSelectorWidget and emits it further as JobItem.
JobListWidget(QWidget *parent=nullptr)
const JobItem * currentJobItem() const
Returns currently selected JobItem.
QSize sizeHint() const
JobModel * m_jobModel
Definition: JobListWidget.h:58
const JobItem * getJobItemForIndex(const QModelIndex &index) const
Definition: JobModel.cpp:46
void cancelJob(const QModelIndex &index)
Definition: JobModel.cpp:184
QModelIndex index() const
Returns model index of this item.
Definition: SessionItem.cpp:80
int PropertyPanelWidth()
Returns typical width of the vertical property panel.
Definition: StyleUtils.cpp:121