BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
ParameterTuningDelegate Class Reference
Inheritance diagram for ParameterTuningDelegate:
[legend]
Collaboration diagram for ParameterTuningDelegate:
[legend]

Classes

class  TuningData
 

Signals

void currentLinkChanged (SessionItem *item)
 

Public Member Functions

 ParameterTuningDelegate (QObject *parent=0)
 
 ~ParameterTuningDelegate ()
 
QWidget * createEditor (QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
 
void paint (QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
 
void setEditorData (QWidget *editor, const QModelIndex &index) const
 
void setModelData (QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
 
void setReadOnly (bool isReadOnly)
 
void setSliderRangeFactor (double value)
 
void setValueColumn (int valueColumn)
 
QSize sizeHint (const QStyleOptionViewItem &option, const QModelIndex &) const
 

Private Slots

void editorValueChanged (double value)
 
void sliderValueChanged (int position)
 

Private Member Functions

void emitSignals (double value)
 
void updateSlider (double value) const
 

Private Attributes

QHBoxLayout * m_contentLayout
 
QWidget * m_contentWidget
 
ParameterItemm_currentItem
 
bool m_isReadOnly
 
QSlider * m_slider
 
TuningData m_tuning_info
 
ScientificSpinBoxm_valueBox
 
int m_valueColumn
 

Detailed Description

Definition at line 28 of file ParameterTuningDelegate.h.

Constructor & Destructor Documentation

◆ ParameterTuningDelegate()

ParameterTuningDelegate::ParameterTuningDelegate ( QObject *  parent = 0)

Definition at line 87 of file ParameterTuningDelegate.cpp.

88  : QItemDelegate(parent)
89  , m_valueColumn(1)
90  , m_slider(nullptr)
91  , m_valueBox(nullptr)
92  , m_contentWidget(nullptr)
93  , m_contentLayout(nullptr)
94  , m_currentItem(nullptr)
95  , m_isReadOnly(false)
96 {
97 }
ScientificSpinBox * m_valueBox

◆ ~ParameterTuningDelegate()

ParameterTuningDelegate::~ParameterTuningDelegate ( )
default

Member Function Documentation

◆ createEditor()

QWidget * ParameterTuningDelegate::createEditor ( QWidget *  parent,
const QStyleOptionViewItem &  option,
const QModelIndex &  index 
) const

Definition at line 128 of file ParameterTuningDelegate.cpp.

130 {
131  if (m_isReadOnly)
132  return nullptr;
133 
134  if (index.column() == m_valueColumn) {
135  if (index.parent().isValid() == false)
136  return nullptr;
137 
138  QVariant data = index.model()->data(index, Qt::EditRole);
139  if (!data.isValid())
140  return nullptr;
141 
142  m_currentItem = static_cast<ParameterItem*>(
143  ParameterTuningModel::toSourceIndex(index).internalPointer());
144  if (!m_currentItem)
145  return nullptr;
146 
147  double value = data.toDouble();
148  RealLimits limits = m_currentItem->linkedItem()->limits();
151 
152  // initializing value box
154  m_valueBox->setKeyboardTracking(false);
155  m_valueBox->setFixedWidth(105);
158 
159  if (limits.hasLowerLimit()) {
160  m_valueBox->setMinimum(limits.lowerLimit());
161  } else {
162  m_valueBox->setMinimum(minimum_doublespin_value);
163  }
164 
165  if (limits.hasUpperLimit()) {
166  m_valueBox->setMaximum(limits.upperLimit());
167  } else {
168  m_valueBox->setMaximum(maximum_doublespin_value);
169  }
170 
171  m_valueBox->setValue(value);
174 
175  // initializing slider
176  m_slider = new QSlider(Qt::Horizontal);
177  m_slider->setFocusPolicy(Qt::StrongFocus);
178  m_slider->setTickPosition(QSlider::NoTicks);
179  m_slider->setTickInterval(1);
180  m_slider->setSingleStep(1);
182 
183  updateSlider(value);
184 
185  m_contentWidget = new QWidget(parent);
186  m_contentLayout = new QHBoxLayout(parent);
187  m_contentLayout->setMargin(0);
188  m_contentLayout->setSpacing(0);
189  m_contentLayout->addWidget(m_valueBox);
190  m_contentLayout->addWidget(m_slider);
191 
192  // FIXME there is an issue with time of life of editor .vs. item
193  // m_currentItem->mapper()->setOnValueChange(
194  // [this](){
195  // if(m_valueBox && m_currentItem)
196  // m_valueBox->setValue(m_currentItem->value().toDouble());
197  // }, this);
198 
199  // m_currentItem->mapper()->setOnItemDestroy(
200  // [this](SessionItem *) {
201  // m_currentItem = 0;
202  // }, this);
203 
204  m_contentWidget->setLayout(m_contentLayout);
205 
206  return m_contentWidget;
207  } else {
208  return QItemDelegate::createEditor(parent, option, index);
209  }
210 }
static QModelIndex toSourceIndex(QModelIndex index)
The ParameterItem class represent a tuning value in a parameter tuning tree.
SessionItem * linkedItem()
Returns corresponding linked item in MultiLayerItem/IsntrumentItem.
void setItemLimits(const RealLimits &item_limits)
void updateSlider(double value) const
Limits for a real fit parameter.
Definition: RealLimits.h:24
bool hasUpperLimit() const
if has upper limit
Definition: RealLimits.cpp:57
double upperLimit() const
Returns upper limit.
Definition: RealLimits.cpp:62
double lowerLimit() const
Returns lower limit.
Definition: RealLimits.cpp:40
bool hasLowerLimit() const
if has lower limit
Definition: RealLimits.cpp:35
void setMaximum(double max)
void setMinimum(double min)
void setValue(double val)
void setSingleStep(double step)
void valueChanged(double value)
int decimals() const
RealLimits limits() const

References SessionItem::decimals(), editorValueChanged(), RealLimits::hasLowerLimit(), RealLimits::hasUpperLimit(), SessionItem::limits(), ParameterItem::linkedItem(), RealLimits::lowerLimit(), m_contentLayout, m_contentWidget, m_currentItem, m_isReadOnly, m_slider, ParameterTuningDelegate::TuningData::m_smax, ParameterTuningDelegate::TuningData::m_smin, m_tuning_info, m_valueBox, m_valueColumn, ScientificSpinBox::setDecimals(), ParameterTuningDelegate::TuningData::setItemLimits(), ScientificSpinBox::setMaximum(), ScientificSpinBox::setMinimum(), ScientificSpinBox::setSingleStep(), ScientificSpinBox::setValue(), ParameterTuningDelegate::TuningData::step(), FilterPropertyProxy::toSourceIndex(), updateSlider(), RealLimits::upperLimit(), ParameterTuningDelegate::TuningData::value_to_slider(), and ScientificSpinBox::valueChanged().

Here is the call graph for this function:

◆ currentLinkChanged

void ParameterTuningDelegate::currentLinkChanged ( SessionItem item)
signal

◆ editorValueChanged

void ParameterTuningDelegate::editorValueChanged ( double  value)
privateslot

Definition at line 235 of file ParameterTuningDelegate.cpp.

236 {
237  disconnect(m_slider, &QSlider::valueChanged, this,
239 
240  updateSlider(value);
241 
242  connect(m_slider, &QSlider::valueChanged, this, &ParameterTuningDelegate::sliderValueChanged);
243  emitSignals(value);
244 }

References emitSignals(), m_slider, sliderValueChanged(), and updateSlider().

Referenced by createEditor(), and sliderValueChanged().

Here is the call graph for this function:

◆ emitSignals()

void ParameterTuningDelegate::emitSignals ( double  value)
private

Definition at line 267 of file ParameterTuningDelegate.cpp.

268 {
269  if (m_currentItem) {
272  }
273 }
void propagateValueToLink(double newValue)
Sets current value to the original PropertyItem of MultiLayerItem/InstrumentItem.
void currentLinkChanged(SessionItem *item)

References currentLinkChanged(), m_currentItem, and ParameterItem::propagateValueToLink().

Referenced by editorValueChanged(), and sliderValueChanged().

Here is the call graph for this function:

◆ paint()

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

Definition at line 101 of file ParameterTuningDelegate.cpp.

103 {
104  if (index.column() == m_valueColumn) {
105 
106  if (!index.parent().isValid())
107  return;
108 
109  QVariant prop_value = index.model()->data(index, Qt::EditRole);
110  if (prop_value.isValid()) {
111  int type = SessionItemUtils::VariantType(prop_value);
112  if (type == QVariant::Double) {
113  double value = prop_value.toDouble();
114  QString text = ScientificSpinBox::toString(value, 3);
115 
116  QStyleOptionViewItem myOption = option;
117  myOption.displayAlignment = Qt::AlignLeft | Qt::AlignVCenter;
118 
119  drawDisplay(painter, myOption, myOption.rect, text);
120  drawFocus(painter, myOption, myOption.rect);
121  return;
122  }
123  }
124  }
125  QItemDelegate::paint(painter, option, index);
126 }
static QString toString(double val, int decimal_points)
int VariantType(const QVariant &variant)
Returns type of variant (additionally checks for user type).

References m_valueColumn, ScientificSpinBox::toString(), and SessionItemUtils::VariantType().

Here is the call graph for this function:

◆ setEditorData()

void ParameterTuningDelegate::setEditorData ( QWidget *  editor,
const QModelIndex &  index 
) const

Definition at line 246 of file ParameterTuningDelegate.cpp.

247 {
248  if (index.column() == m_valueColumn) {
249  // as using custom widget, doing nothing here
250  } else {
251  QItemDelegate::setEditorData(editor, index);
252  }
253 }

References m_valueColumn.

◆ setModelData()

void ParameterTuningDelegate::setModelData ( QWidget *  editor,
QAbstractItemModel *  model,
const QModelIndex &  index 
) const

Definition at line 255 of file ParameterTuningDelegate.cpp.

257 {
258  if (index.column() == m_valueColumn) {
259 
260  model->setData(index, m_valueBox->value());
261 
262  } else {
263  QItemDelegate::setModelData(editor, model, index);
264  }
265 }

References m_valueBox, m_valueColumn, and ScientificSpinBox::value.

◆ setReadOnly()

void ParameterTuningDelegate::setReadOnly ( bool  isReadOnly)

Definition at line 280 of file ParameterTuningDelegate.cpp.

281 {
282  m_isReadOnly = isReadOnly;
283 }

References m_isReadOnly.

Referenced by ParameterTuningWidget::setTuningDelegateEnabled().

◆ setSliderRangeFactor()

void ParameterTuningDelegate::setSliderRangeFactor ( double  value)

Definition at line 275 of file ParameterTuningDelegate.cpp.

276 {
278 }

References m_tuning_info, and ParameterTuningDelegate::TuningData::setRangeFactor().

Referenced by ParameterTuningWidget::onSliderValueChanged().

Here is the call graph for this function:

◆ setValueColumn()

void ParameterTuningDelegate::setValueColumn ( int  valueColumn)
inline

Definition at line 64 of file ParameterTuningDelegate.h.

64 { m_valueColumn = valueColumn; }

References m_valueColumn.

◆ sizeHint()

QSize ParameterTuningDelegate::sizeHint ( const QStyleOptionViewItem &  option,
const QModelIndex &   
) const
inline

Definition at line 51 of file ParameterTuningDelegate.h.

52  {
53  return QSize(option.rect.width(), 25);
54  }

◆ sliderValueChanged

void ParameterTuningDelegate::sliderValueChanged ( int  position)
privateslot

Definition at line 222 of file ParameterTuningDelegate.cpp.

223 {
224  disconnect(m_valueBox, &ScientificSpinBox::valueChanged, this,
226 
227  double value = m_tuning_info.slider_to_value(position);
228  m_valueBox->setValue(value);
229 
232  emitSignals(value);
233 }

References editorValueChanged(), emitSignals(), m_tuning_info, m_valueBox, ScientificSpinBox::setValue(), ParameterTuningDelegate::TuningData::slider_to_value(), and ScientificSpinBox::valueChanged().

Referenced by editorValueChanged(), and updateSlider().

Here is the call graph for this function:

◆ updateSlider()

void ParameterTuningDelegate::updateSlider ( double  value) const
private

Definition at line 212 of file ParameterTuningDelegate.cpp.

213 {
214  disconnect(m_slider, &QSlider::valueChanged, this,
216 
217  m_slider->setValue(m_tuning_info.value_to_slider(value));
218 
219  connect(m_slider, &QSlider::valueChanged, this, &ParameterTuningDelegate::sliderValueChanged);
220 }

References m_slider, m_tuning_info, sliderValueChanged(), and ParameterTuningDelegate::TuningData::value_to_slider().

Referenced by createEditor(), and editorValueChanged().

Here is the call graph for this function:

Member Data Documentation

◆ m_contentLayout

QHBoxLayout* ParameterTuningDelegate::m_contentLayout
mutableprivate

Definition at line 83 of file ParameterTuningDelegate.h.

Referenced by createEditor().

◆ m_contentWidget

QWidget* ParameterTuningDelegate::m_contentWidget
mutableprivate

Definition at line 82 of file ParameterTuningDelegate.h.

Referenced by createEditor().

◆ m_currentItem

ParameterItem* ParameterTuningDelegate::m_currentItem
mutableprivate

Definition at line 84 of file ParameterTuningDelegate.h.

Referenced by createEditor(), and emitSignals().

◆ m_isReadOnly

bool ParameterTuningDelegate::m_isReadOnly
private

Definition at line 86 of file ParameterTuningDelegate.h.

Referenced by createEditor(), and setReadOnly().

◆ m_slider

QSlider* ParameterTuningDelegate::m_slider
mutableprivate

Definition at line 80 of file ParameterTuningDelegate.h.

Referenced by createEditor(), editorValueChanged(), and updateSlider().

◆ m_tuning_info

TuningData ParameterTuningDelegate::m_tuning_info
mutableprivate

◆ m_valueBox

ScientificSpinBox* ParameterTuningDelegate::m_valueBox
mutableprivate

Definition at line 81 of file ParameterTuningDelegate.h.

Referenced by createEditor(), setModelData(), and sliderValueChanged().

◆ m_valueColumn

int ParameterTuningDelegate::m_valueColumn
private

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