BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
JobListViewDelegate Class Reference

ViewDelegate to show progress bar JobQueuListView. More...

Inheritance diagram for JobListViewDelegate:
[legend]
Collaboration diagram for JobListViewDelegate:
[legend]

Signals

void cancelButtonClicked (const QModelIndex &index)
 

Public Member Functions

 JobListViewDelegate (QWidget *parent)
 
bool editorEvent (QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index)
 
void paint (QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
 

Private Member Functions

void drawCustomProjectBar (const JobItem *item, QPainter *painter, const QStyleOptionViewItem &option) const
 
QRect getButtonRect (QRect optionRect) const
 returns rectangle for button More...
 
QRect getProgressBarRect (QRect optionRect) const
 returns rectangle for progress bar More...
 
QRect getTextRect (QRect optionRect) const
 returns rectangle for text More...
 

Private Attributes

QStyle::State m_buttonState
 
QMap< QString, QColor > m_status_to_color
 

Detailed Description

ViewDelegate to show progress bar JobQueuListView.

Definition at line 25 of file JobListViewDelegate.h.

Constructor & Destructor Documentation

◆ JobListViewDelegate()

JobListViewDelegate::JobListViewDelegate ( QWidget *  parent)

Definition at line 26 of file JobListViewDelegate.cpp.

26  : QItemDelegate(parent)
27 {
28  m_buttonState = QStyle::State_Enabled;
29  m_status_to_color["Idle"] = QColor(255, 286, 12);
30  m_status_to_color["Running"] = QColor(5, 150, 230);
31  m_status_to_color["Completed"] = QColor(5, 150, 230);
32  m_status_to_color["Canceled"] = QColor(186, 0, 0);
33  m_status_to_color["Failed"] = QColor(255, 186, 12);
34 }
QStyle::State m_buttonState
QMap< QString, QColor > m_status_to_color

References m_buttonState, and m_status_to_color.

Member Function Documentation

◆ cancelButtonClicked

void JobListViewDelegate::cancelButtonClicked ( const QModelIndex &  index)
signal

◆ drawCustomProjectBar()

void JobListViewDelegate::drawCustomProjectBar ( const JobItem item,
QPainter *  painter,
const QStyleOptionViewItem &  option 
) const
private

Definition at line 107 of file JobListViewDelegate.cpp.

109 {
110  int progress = item->getProgress();
111  QRect rect = getProgressBarRect(option.rect);
112 
113  painter->save();
114  painter->setRenderHint(QPainter::Antialiasing);
115  painter->setBrush(QColor(204, 223, 230));
116  painter->setPen(QColor("transparent"));
117  QRect rect2(rect.x(), rect.y(), rect.width(), rect.height());
118  painter->drawRoundedRect(rect2, 2, 2);
119  painter->restore();
120 
121  int progBarWidth = float((rect.width() * progress) / 100);
122  painter->save();
123  painter->setRenderHint(QPainter::Antialiasing);
124  painter->setPen(QColor("transparent"));
125  painter->setBrush(m_status_to_color[item->getStatus()]);
126  QRect rect5(rect.x(), rect.y(), progBarWidth, rect.height());
127  painter->drawRoundedRect(rect5, 2, 2);
128  painter->restore();
129 }
int getProgress() const
Definition: JobItem.cpp:199
QString getStatus() const
Definition: JobItem.cpp:123
QRect getProgressBarRect(QRect optionRect) const
returns rectangle for progress bar

References JobItem::getProgress(), getProgressBarRect(), JobItem::getStatus(), and m_status_to_color.

Referenced by paint().

Here is the call graph for this function:

◆ editorEvent()

bool JobListViewDelegate::editorEvent ( QEvent *  event,
QAbstractItemModel *  model,
const QStyleOptionViewItem &  option,
const QModelIndex &  index 
)

Definition at line 71 of file JobListViewDelegate.cpp.

73 {
74  if (event->type() == QEvent::MouseButtonPress || event->type() == QEvent::MouseButtonRelease) {
75  } else {
76  m_buttonState = QStyle::State_Raised;
77  return QItemDelegate::editorEvent(event, model, option, index);
78  }
79 
80  const JobModel* jqmodel = static_cast<const JobModel*>(index.model());
81  ASSERT(model);
82 
83  const JobItem* item = jqmodel->getJobItemForIndex(index);
84  ASSERT(item);
85 
86  if (!item->isRunning())
87  return false;
88 
89  QRect buttonRect = getButtonRect(option.rect);
90 
91  QMouseEvent* mouseEvent = static_cast<QMouseEvent*>(event);
92  if (!buttonRect.contains(mouseEvent->pos())) {
93  m_buttonState = QStyle::State_Raised;
94  return false; // so that selection can change
95  }
96 
97  if (event->type() == QEvent::MouseButtonPress) {
98  m_buttonState = QStyle::State_Sunken;
99  } else if (event->type() == QEvent::MouseButtonRelease) {
100  m_buttonState = QStyle::State_Raised;
101  qDebug("JobListViewDelegate::editorEvent() -> cancel clicked");
102  emit cancelButtonClicked(index);
103  }
104  return true;
105 }
#define ASSERT(condition)
Definition: Assert.h:31
bool isRunning() const
Definition: JobItem.cpp:145
void cancelButtonClicked(const QModelIndex &index)
QRect getButtonRect(QRect optionRect) const
returns rectangle for button
const JobItem * getJobItemForIndex(const QModelIndex &index) const
Definition: JobModel.cpp:46

References ASSERT, cancelButtonClicked(), getButtonRect(), JobModel::getJobItemForIndex(), JobItem::isRunning(), and m_buttonState.

Here is the call graph for this function:

◆ getButtonRect()

QRect JobListViewDelegate::getButtonRect ( QRect  optionRect) const
private

returns rectangle for button

Definition at line 154 of file JobListViewDelegate.cpp.

155 {
156  int height = 10;
157  int width = 10;
158  int x = optionRect.x() + optionRect.width() * 0.92;
159  int y = optionRect.y() + (optionRect.height() - height) / 2.;
160  QRect result(x, y, width, height);
161  return result;
162 }

Referenced by editorEvent(), and paint().

◆ getProgressBarRect()

QRect JobListViewDelegate::getProgressBarRect ( QRect  optionRect) const
private

returns rectangle for progress bar

Definition at line 143 of file JobListViewDelegate.cpp.

144 {
145  int width = optionRect.width() * 0.4;
146  int height = optionRect.height() * 0.6;
147  int x = optionRect.x() + optionRect.width() * 0.5;
148  int y = optionRect.y() + (optionRect.height() - height) / 2.;
149  QRect result(x, y, width, height);
150  return result;
151 }

Referenced by drawCustomProjectBar().

◆ getTextRect()

QRect JobListViewDelegate::getTextRect ( QRect  optionRect) const
private

returns rectangle for text

Definition at line 132 of file JobListViewDelegate.cpp.

133 {
134  int width = optionRect.width() * 0.4;
135  int height = optionRect.height();
136  int x = optionRect.x() + 3;
137  int y = optionRect.y();
138  QRect result(x, y, width, height);
139  return result;
140 }

Referenced by paint().

◆ paint()

void JobListViewDelegate::paint ( QPainter *  painter,
const QStyleOptionViewItem &  option,
const QModelIndex &  index 
) const

Definition at line 36 of file JobListViewDelegate.cpp.

38 {
39  if (option.state & QStyle::State_Selected)
40  painter->fillRect(option.rect, option.palette.highlight());
41 
42  const JobModel* model = static_cast<const JobModel*>(index.model());
43  ASSERT(model);
44 
45  const JobItem* item = model->getJobItemForIndex(index);
46  ASSERT(item);
47 
48  painter->save();
49 
50  painter->setRenderHint(QPainter::Antialiasing, true);
51 
52  QString text = item->itemName();
53  QRect textRect = getTextRect(option.rect);
54  painter->drawText(textRect, text);
55 
56  drawCustomProjectBar(item, painter, option);
57 
58  if (item->isRunning()) {
59  QStyleOptionButton button;
60  button.rect = getButtonRect(option.rect);
61  button.state = m_buttonState | QStyle::State_Enabled;
62  button.icon = QIcon(":/images/dark-close.svg");
63  button.iconSize = QSize(12, 12);
64 
65  QApplication::style()->drawControl(QStyle::CE_PushButton, &button, painter);
66  }
67 
68  painter->restore();
69 }
QRect getTextRect(QRect optionRect) const
returns rectangle for text
void drawCustomProjectBar(const JobItem *item, QPainter *painter, const QStyleOptionViewItem &option) const
QString itemName() const
Get item name, return display name if no name is set.

References ASSERT, drawCustomProjectBar(), getButtonRect(), JobModel::getJobItemForIndex(), getTextRect(), JobItem::isRunning(), SessionItem::itemName(), and m_buttonState.

Here is the call graph for this function:

Member Data Documentation

◆ m_buttonState

QStyle::State JobListViewDelegate::m_buttonState
private

Definition at line 40 of file JobListViewDelegate.h.

Referenced by JobListViewDelegate(), editorEvent(), and paint().

◆ m_status_to_color

QMap<QString, QColor> JobListViewDelegate::m_status_to_color
private

Definition at line 48 of file JobListViewDelegate.h.

Referenced by JobListViewDelegate(), and drawCustomProjectBar().


The documentation for this class was generated from the following files: