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

Main widget for real time parameter tuning. More...

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

Public Slots

void makeSelected (ParameterItem *item)
 
void onCurrentLinkChanged (SessionItem *item)
 
void onLockZValueChanged (bool value)
 
void onSliderValueChanged (double value)
 
void restoreModelsOfCurrentJobItem ()
 

Signals

void itemContextMenuRequest (const QPoint &point)
 

Public Member Functions

 ParameterTuningWidget (QWidget *parent=0)
 
virtual QList< QAction * > actionList ()
 
SessionItemcurrentItem ()
 
const SessionItemcurrentItem () const
 
QVector< ParameterItem * > getSelectedParameters ()
 Returns list of ParameterItem's currently selected in parameter tree. More...
 
QItemSelectionModel * selectionModel ()
 
virtual void setItem (SessionItem *item)
 

Protected Member Functions

void contextMenuEvent (QContextMenuEvent *)
 
virtual void hideEvent (QHideEvent *)
 
virtual void showEvent (QShowEvent *)
 
void subscribeToItem ()
 
virtual void unsubscribeFromItem ()
 

Private Slots

void onCustomContextMenuRequested (const QPoint &point)
 
void onPropertyChanged (const QString &property_name)
 
void updateParameterModel ()
 

Private Member Functions

void closeActiveEditors ()
 
JobItemjobItem ()
 
void setTuningDelegateEnabled (bool enabled)
 Sets delegate to enabled/disabled state. More...
 
void updateDragAndDropSettings ()
 Disable drag-and-drop abilities, if job is in fit running state. More...
 

Private Attributes

ParameterTuningDelegatem_delegate
 
SessionItemControllerm_itemController
 
JobModelm_jobModel
 
ParameterTuningModelm_parameterTuningModel
 
SliderSettingsWidgetm_sliderSettingsWidget
 
JobRealTimeToolBarm_toolBar
 
QTreeView * m_treeView
 
WarningSignm_warningSign
 

Detailed Description

Main widget for real time parameter tuning.

Contains a tree for parameter tuning and the model to provide drag-and-drop in FitActivityPanel.

Definition at line 35 of file ParameterTuningWidget.h.

Constructor & Destructor Documentation

◆ ParameterTuningWidget()

ParameterTuningWidget::ParameterTuningWidget ( QWidget *  parent = 0)
explicit

Definition at line 29 of file ParameterTuningWidget.cpp.

30  : SessionItemWidget(parent)
31  , m_toolBar(new JobRealTimeToolBar(this))
32  , m_jobModel(nullptr)
33  , m_parameterTuningModel(nullptr)
35  , m_treeView(new QTreeView)
38 {
39  setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
40 
41  m_treeView->setItemDelegate(m_delegate);
42  m_treeView->setContextMenuPolicy(Qt::CustomContextMenu);
43  m_treeView->setDragDropMode(QAbstractItemView::NoDragDrop);
44  m_treeView->setAttribute(Qt::WA_MacShowFocusRect, false);
45 
46  auto mainLayout = new QVBoxLayout;
47  mainLayout->setMargin(0);
48  mainLayout->setSpacing(0);
49  mainLayout->addWidget(m_toolBar);
50  mainLayout->addWidget(m_sliderSettingsWidget);
51  mainLayout->addWidget(m_treeView);
52  setLayout(mainLayout);
53 
60  connect(m_treeView, &QTreeView::customContextMenuRequested, this,
64 }
Represents a toolbar with buttons for ParameterTuningWidget.
void currentLinkChanged(SessionItem *item)
void onCustomContextMenuRequested(const QPoint &point)
void onCurrentLinkChanged(SessionItem *item)
ParameterTuningModel * m_parameterTuningModel
JobRealTimeToolBar * m_toolBar
void onLockZValueChanged(bool value)
SliderSettingsWidget * m_sliderSettingsWidget
ParameterTuningDelegate * m_delegate
void onSliderValueChanged(double value)
SessionItemWidget(QWidget *parent=0)
void sliderRangeFactorChanged(double value)
void lockzChanged(bool value)
The WarningSign controls appearance of WarningSignWidget on top of parent widget.
Definition: WarningSign.h:25

References ParameterTuningDelegate::currentLinkChanged(), SliderSettingsWidget::lockzChanged(), m_delegate, m_sliderSettingsWidget, m_toolBar, m_treeView, onCurrentLinkChanged(), onCustomContextMenuRequested(), onLockZValueChanged(), onSliderValueChanged(), JobRealTimeToolBar::resetParameters(), restoreModelsOfCurrentJobItem(), and SliderSettingsWidget::sliderRangeFactorChanged().

Here is the call graph for this function:

Member Function Documentation

◆ actionList()

QList< QAction * > SessionItemWidget::actionList ( )
virtualinherited

◆ closeActiveEditors()

void ParameterTuningWidget::closeActiveEditors ( )
private

Definition at line 227 of file ParameterTuningWidget.cpp.

228 {
229  QModelIndex index = m_treeView->currentIndex();
230  QWidget* editor = m_treeView->indexWidget(index);
231  if (editor) {
232  // m_delegate->commitData(editor);
233  m_delegate->closeEditor(editor, QAbstractItemDelegate::NoHint);
234  }
235  m_treeView->selectionModel()->clearSelection();
236 }

References m_delegate, and m_treeView.

Referenced by restoreModelsOfCurrentJobItem(), and setTuningDelegateEnabled().

◆ contextMenuEvent()

void ParameterTuningWidget::contextMenuEvent ( QContextMenuEvent *  )
protected

Definition at line 160 of file ParameterTuningWidget.cpp.

161 {
162  // reimplemented to suppress context menu from QMainWindow
163 }

◆ currentItem() [1/2]

SessionItem * SessionItemWidget::currentItem ( )
inherited

Definition at line 41 of file SessionItemWidget.cpp.

42 {
43  return const_cast<SessionItem*>(static_cast<const SessionItemWidget*>(this)->currentItem());
44 }
The SessionItemWidget class is a base for all widgets representing the content of SessionItem.
SessionItem * currentItem()

Referenced by RectangularDetectorEditor::detectorItem(), SphericalDetectorEditor::detectorItem(), FitFlowWidget::fitSuiteItem(), DistributionEditor::groupItem(), DepthProbeInstrumentEditor::instrumentItem(), EnvironmentEditor::instrumentItem(), GISASBeamEditor::instrumentItem(), GISASDetectorEditor::instrumentItem(), GISASInstrumentEditor::instrumentItem(), OffSpecularBeamEditor::instrumentItem(), OffSpecularInstrumentEditor::instrumentItem(), PolarizationAnalysisEditor::instrumentItem(), SpecularBeamEditor::instrumentItem(), SpecularInstrumentEditor::instrumentItem(), RealDataMaskWidget::intensityDataItem(), IntensityDataCanvas::intensityDataItem(), IntensityDataProjectionsWidget::intensityDataItem(), IntensityDataWidget::intensityDataItem(), ProjectionsPlot::intensityItem(), ColorMap::intensityItem(), DetectorPresenter::itemPresentation(), InstrumentPresenter::itemPresentation(), JobResultsPresenter::itemPresentation(), FitComparisonWidget::jobItem(), FitComparisonWidget1D::jobItem(), FitParameterWidget::jobItem(), RunFitControlWidget::jobItem(), JobPropertiesWidget::jobItem(), jobItem(), SpecularDataImportWidget::realDataItem(), ItemComboWidget::setPresentation(), JobResultsPresenter::setPresentation(), SpecularDataCanvas::specularDataItem(), SpecularDataImportWidget::specularDataItem(), SpecularDataWidget::specularDataItem(), SpecularPlot::specularItem(), ItemComboWidget::subscribeToItem(), DistributionEditor::subscribeToItem(), GISASDetectorEditor::subscribeToItem(), PolarizationAnalysisEditor::subscribeToItem(), IntensityDataPropertyWidget::subscribeToItem(), JobPropertiesWidget::subscribeToItem(), ProjectionsPropertyPanel::subscribeToItem(), ProjectionsPlot::unsubscribeFromChildren(), and Plot1D::viewItem().

◆ currentItem() [2/2]

const SessionItem * SessionItemWidget::currentItem ( ) const
inherited

Definition at line 46 of file SessionItemWidget.cpp.

47 {
48  return m_itemController->currentItem();
49 }
SessionItemController * m_itemController

References SessionItemController::currentItem(), and SessionItemWidget::m_itemController.

Here is the call graph for this function:

◆ getSelectedParameters()

QVector< ParameterItem * > ParameterTuningWidget::getSelectedParameters ( )

Returns list of ParameterItem's currently selected in parameter tree.

Definition at line 74 of file ParameterTuningWidget.cpp.

75 {
76  QVector<ParameterItem*> result;
77  QModelIndexList proxyIndexes = selectionModel()->selectedIndexes();
78  for (auto proxyIndex : proxyIndexes) {
79  if (ParameterItem* parItem = m_parameterTuningModel->getParameterItem(proxyIndex))
80  result.push_back(parItem);
81  }
82  return result;
83 }
The ParameterItem class represent a tuning value in a parameter tuning tree.
ParameterItem * getParameterItem(const QModelIndex &proxyIndex) const
Returns ParameterItem from given proxy index.
QItemSelectionModel * selectionModel()

References ParameterTuningModel::getParameterItem(), m_parameterTuningModel, and selectionModel().

Referenced by FitParameterWidget::canCreateFitParameter(), FitParameterWidget::canRemoveFromFitParameters(), FitParameterWidget::onAddToFitParAction(), FitParameterWidget::onCreateFitParAction(), and FitParameterWidget::onRemoveFromFitParAction().

Here is the call graph for this function:

◆ hideEvent()

void SessionItemWidget::hideEvent ( QHideEvent *  )
protectedvirtualinherited

Definition at line 56 of file SessionItemWidget.cpp.

57 {
59 }
void unsubscribe()
Fully unsubscribes the parent from listening item's signals.

References SessionItemWidget::m_itemController, and SessionItemController::unsubscribe().

Here is the call graph for this function:

◆ itemContextMenuRequest

void ParameterTuningWidget::itemContextMenuRequest ( const QPoint &  point)
signal

◆ jobItem()

JobItem * ParameterTuningWidget::jobItem ( )
private

Definition at line 194 of file ParameterTuningWidget.cpp.

195 {
196  return dynamic_cast<JobItem*>(currentItem());
197 }

References SessionItemWidget::currentItem().

Referenced by onCurrentLinkChanged(), onLockZValueChanged(), onPropertyChanged(), restoreModelsOfCurrentJobItem(), subscribeToItem(), updateDragAndDropSettings(), and updateParameterModel().

Here is the call graph for this function:

◆ makeSelected

void ParameterTuningWidget::makeSelected ( ParameterItem item)
slot

Definition at line 153 of file ParameterTuningWidget.cpp.

154 {
155  QModelIndex proxyIndex = m_parameterTuningModel->mapFromSource(item->index());
156  if (proxyIndex.isValid())
157  selectionModel()->select(proxyIndex, QItemSelectionModel::Select);
158 }
QModelIndex index() const
Returns model index of this item.
Definition: SessionItem.cpp:80

References SessionItem::index(), m_parameterTuningModel, and selectionModel().

Referenced by FitParameterWidget::onFitParametersSelectionChanged().

Here is the call graph for this function:

◆ onCurrentLinkChanged

void ParameterTuningWidget::onCurrentLinkChanged ( SessionItem item)
slot

Definition at line 85 of file ParameterTuningWidget.cpp.

86 {
87  ASSERT(jobItem());
88 
89  if (jobItem()->isRunning())
90  return;
91 
92  if (item) {
93  // link.updateItem(); // FIXME circular dependency if uncomment
94  m_jobModel->runJob(jobItem()->index());
95  }
96 }
#define ASSERT(condition)
Definition: Assert.h:31
void runJob(const QModelIndex &index)
Definition: JobModel.cpp:179

References ASSERT, jobItem(), m_jobModel, and JobModel::runJob().

Referenced by ParameterTuningWidget().

Here is the call graph for this function:

◆ onCustomContextMenuRequested

void ParameterTuningWidget::onCustomContextMenuRequested ( const QPoint &  point)
privateslot

Definition at line 134 of file ParameterTuningWidget.cpp.

135 {
136  emit itemContextMenuRequest(m_treeView->mapToGlobal(point + QPoint(2, 22)));
137 }
void itemContextMenuRequest(const QPoint &point)

References itemContextMenuRequest(), and m_treeView.

Referenced by ParameterTuningWidget().

◆ onLockZValueChanged

void ParameterTuningWidget::onLockZValueChanged ( bool  value)
slot

Definition at line 103 of file ParameterTuningWidget.cpp.

104 {
105  if (!jobItem())
106  return;
109 }
void setZAxisLocked(bool state)
IntensityDataItem * intensityDataItem(SessionItem *parent)
Returns IntensityDataItem contained as a child in givent parent.

References DataItemUtils::intensityDataItem(), jobItem(), and IntensityDataItem::setZAxisLocked().

Referenced by ParameterTuningWidget().

Here is the call graph for this function:

◆ onPropertyChanged

void ParameterTuningWidget::onPropertyChanged ( const QString &  property_name)
privateslot

Definition at line 178 of file ParameterTuningWidget.cpp.

179 {
180  if (property_name == JobItem::P_STATUS) {
181  m_warningSign->clear();
182 
183  if (jobItem()->isFailed()) {
184  QString message;
185  message.append("Current parameter values cause simulation failure.\n\n");
186  message.append(jobItem()->getComments());
188  }
189 
191  }
192 }
static const QString P_STATUS
Definition: JobItem.h:40
void updateDragAndDropSettings()
Disable drag-and-drop abilities, if job is in fit running state.
void clear()
Clears warning message;.
Definition: WarningSign.cpp:40
void setWarningMessage(const QString &warningMessage)
Shows warning sign on the screen.
Definition: WarningSign.cpp:58

References WarningSign::clear(), jobItem(), m_warningSign, JobItem::P_STATUS, WarningSign::setWarningMessage(), and updateDragAndDropSettings().

Referenced by subscribeToItem().

Here is the call graph for this function:

◆ onSliderValueChanged

void ParameterTuningWidget::onSliderValueChanged ( double  value)
slot

Definition at line 98 of file ParameterTuningWidget.cpp.

99 {
101 }
void setSliderRangeFactor(double value)

References m_delegate, and ParameterTuningDelegate::setSliderRangeFactor().

Referenced by ParameterTuningWidget().

Here is the call graph for this function:

◆ restoreModelsOfCurrentJobItem

void ParameterTuningWidget::restoreModelsOfCurrentJobItem ( )
slot

Definition at line 139 of file ParameterTuningWidget.cpp.

140 {
142  ASSERT(jobItem());
143 
144  if (jobItem()->isRunning())
145  return;
146 
148 
150  m_jobModel->runJob(jobItem()->index());
151 }
void restore(JobItem *jobItem)
restore instrument and sample model from backup for given JobItem
Definition: JobModel.cpp:111

References ASSERT, closeActiveEditors(), jobItem(), m_jobModel, JobModel::restore(), and JobModel::runJob().

Referenced by ParameterTuningWidget().

Here is the call graph for this function:

◆ selectionModel()

QItemSelectionModel * ParameterTuningWidget::selectionModel ( )

◆ setItem()

void SessionItemWidget::setItem ( SessionItem item)
virtualinherited

Reimplemented in SpecularPlotCanvas, SpecularDataImportWidget, SpecularDataWidget, IntensityDataWidget, SpecularDataCanvas, ProjectionsWidget, IntensityDataCanvas, ColorMapCanvas, and Plot1DCanvas.

Definition at line 28 of file SessionItemWidget.cpp.

29 {
31 
32  if (isVisible())
34 }
void setItem(SessionItem *item)
void subscribe()
Subscribe parent to item's signals.

References SessionItemWidget::m_itemController, SessionItemController::setItem(), and SessionItemController::subscribe().

Referenced by IntensityDataWidget::onFFTAction(), JobSelectorWidget::onSelectionChanged(), ProjectionsEditor::resetContext(), ProjectionsEditor::setContext(), MaskGraphicsProxy::setIntensityItem(), FitSessionWidget::setItem(), Plot1DCanvas::setItem(), InstrumentEditorWidget::setItem(), ColorMapCanvas::setItem(), IntensityDataCanvas::setItem(), ProjectionsWidget::setItem(), SpecularDataCanvas::setItem(), DistributionDialog::setItem(), IntensityDataWidget::setItem(), SpecularDataWidget::setItem(), SpecularDataImportWidget::setItem(), SpecularPlotCanvas::setItem(), ItemComboWidget::setPresentation(), GISASInstrumentEditor::subscribeToItem(), OffSpecularInstrumentEditor::subscribeToItem(), SpecularInstrumentEditor::subscribeToItem(), FitComparisonWidget::subscribeToItem(), FitComparisonWidget1D::subscribeToItem(), and GISASDetectorEditor::updateDetectorPresenter().

Here is the call graph for this function:

◆ setTuningDelegateEnabled()

void ParameterTuningWidget::setTuningDelegateEnabled ( bool  enabled)
private

Sets delegate to enabled/disabled state.

In 'disabled' state the delegate is in ReadOnlyMode, if it was containing already some editing widget, it will be forced to close.

Definition at line 217 of file ParameterTuningWidget.cpp.

218 {
219  if (enabled) {
220  m_delegate->setReadOnly(false);
221  } else {
222  m_delegate->setReadOnly(true);
224  }
225 }
void setReadOnly(bool isReadOnly)

References closeActiveEditors(), m_delegate, and ParameterTuningDelegate::setReadOnly().

Referenced by updateDragAndDropSettings().

Here is the call graph for this function:

◆ showEvent()

void SessionItemWidget::showEvent ( QShowEvent *  )
protectedvirtualinherited

Definition at line 51 of file SessionItemWidget.cpp.

52 {
54 }

References SessionItemWidget::m_itemController, and SessionItemController::subscribe().

Here is the call graph for this function:

◆ subscribeToItem()

void ParameterTuningWidget::subscribeToItem ( )
protectedvirtual

Reimplemented from SessionItemWidget.

Definition at line 165 of file ParameterTuningWidget.cpp.

166 {
167  m_jobModel = dynamic_cast<JobModel*>(jobItem()->model());
168 
171 
173  [this](const QString& name) { onPropertyChanged(name); }, this);
174 
176 }
void setOnPropertyChange(std::function< void(QString)> f, const void *caller=0)
Definition: ModelMapper.cpp:35
void onPropertyChanged(const QString &property_name)
ModelMapper * mapper()
Returns the current model mapper of this item. Creates new one if necessary.
SessionModel * model() const
Returns model of this item.
Definition: SessionItem.cpp:66
QString const & name(EShape k)
Definition: particles.cpp:21

References jobItem(), m_jobModel, SessionItem::mapper(), SessionItem::model(), RealSpace::Particles::name(), onPropertyChanged(), JobItem::P_STATUS, ModelMapper::setOnPropertyChange(), updateDragAndDropSettings(), and updateParameterModel().

Here is the call graph for this function:

◆ unsubscribeFromItem()

◆ updateDragAndDropSettings()

void ParameterTuningWidget::updateDragAndDropSettings ( )
private

Disable drag-and-drop abilities, if job is in fit running state.

Definition at line 201 of file ParameterTuningWidget.cpp.

202 {
203  ASSERT(jobItem());
204  if (jobItem()->getStatus() == "Fitting") {
206  m_treeView->setDragDropMode(QAbstractItemView::NoDragDrop);
207  } else {
209  if (jobItem()->isValidForFitting())
210  m_treeView->setDragDropMode(QAbstractItemView::DragOnly);
211  }
212 }
void setTuningDelegateEnabled(bool enabled)
Sets delegate to enabled/disabled state.

References ASSERT, jobItem(), m_treeView, and setTuningDelegateEnabled().

Referenced by onPropertyChanged(), and subscribeToItem().

Here is the call graph for this function:

◆ updateParameterModel

void ParameterTuningWidget::updateParameterModel ( )
privateslot

Definition at line 111 of file ParameterTuningWidget.cpp.

112 {
114 
115  if (!jobItem())
116  return;
117 
118  if (!jobItem()->multiLayerItem() || !jobItem()->instrumentItem())
119  throw GUIHelpers::Error("ModelTuningWidget::updateParameterModel() -> Error."
120  "JobItem doesn't have sample or instrument model.");
121 
122  delete m_parameterTuningModel;
124  m_parameterTuningModel->setSourceModel(m_jobModel);
125 
127  m_treeView->setRootIndex(
128  m_parameterTuningModel->mapFromSource(jobItem()->parameterContainerItem()->index()));
129  if (m_treeView->columnWidth(0) < 170)
130  m_treeView->setColumnWidth(0, 170);
131  m_treeView->expandAll();
132 }
The ParameterTuningModel class represents parameters which can be tuned in real time in ParameterTuni...

References ASSERT, jobItem(), m_jobModel, m_parameterTuningModel, and m_treeView.

Referenced by subscribeToItem().

Here is the call graph for this function:

Member Data Documentation

◆ m_delegate

ParameterTuningDelegate* ParameterTuningWidget::m_delegate
private

◆ m_itemController

◆ m_jobModel

JobModel* ParameterTuningWidget::m_jobModel
private

◆ m_parameterTuningModel

ParameterTuningModel* ParameterTuningWidget::m_parameterTuningModel
private

◆ m_sliderSettingsWidget

SliderSettingsWidget* ParameterTuningWidget::m_sliderSettingsWidget
private

Definition at line 73 of file ParameterTuningWidget.h.

Referenced by ParameterTuningWidget().

◆ m_toolBar

JobRealTimeToolBar* ParameterTuningWidget::m_toolBar
private

Definition at line 70 of file ParameterTuningWidget.h.

Referenced by ParameterTuningWidget().

◆ m_treeView

QTreeView* ParameterTuningWidget::m_treeView
private

◆ m_warningSign

WarningSign* ParameterTuningWidget::m_warningSign
private

Definition at line 76 of file ParameterTuningWidget.h.

Referenced by onPropertyChanged().


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