BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
ItemStackPresenter< T > Class Template Reference

The ItemStackPresenter templated class extends ItemStackWidget so it could operate with SesionItem editor's of specified type, while still keeping signal/slots alive. More...

Inheritance diagram for ItemStackPresenter< T >:
[legend]
Collaboration diagram for ItemStackPresenter< T >:
[legend]

Public Slots

virtual void onModelAboutToBeReset ()
 
virtual void onRowsAboutToBeRemoved (const QModelIndex &parent, int first, int)
 

Public Member Functions

 ItemStackPresenter (bool single_widget=false)
 
T * currentWidget ()
 
void hideWidgets ()
 
T * itemWidget (SessionItem *item)
 
QSize minimumSizeHint () const
 
template<class U >
void setItem (U *item, bool *isNew=0)
 Shows the widget for given item (and hides previous one). More...
 
void setModel (SessionModel *model)
 
void setSizeHint (const QSize &size_hint)
 
QSize sizeHint () const
 

Protected Member Functions

void connectModel ()
 
void disconnectModel ()
 
void removeWidgetForItem (SessionItem *item)
 
void removeWidgets ()
 
void validateItem (SessionItem *item)
 Checks if model was set correctly. More...
 

Protected Attributes

SessionModelm_model
 
QSize m_size_hint
 
class QStackedWidget * m_stackedWidget
 

Private Attributes

QMap< SessionItem *, T * > m_itemToWidget
 
bool m_single_widget
 Different items will be served by same widget. More...
 

Detailed Description

template<class T>
class ItemStackPresenter< T >

The ItemStackPresenter templated class extends ItemStackWidget so it could operate with SesionItem editor's of specified type, while still keeping signal/slots alive.

Definition at line 29 of file ItemStackPresenter.h.

Constructor & Destructor Documentation

◆ ItemStackPresenter()

template<class T >
ItemStackPresenter< T >::ItemStackPresenter ( bool  single_widget = false)
inline

Definition at line 31 of file ItemStackPresenter.h.

31 : m_single_widget(single_widget) {}
bool m_single_widget
Different items will be served by same widget.

Member Function Documentation

◆ connectModel()

void ItemStackWidget::connectModel ( )
protectedinherited

Definition at line 74 of file ItemStackWidget.cpp.

75 {
76  if (!m_model)
77  return;
78 
79  connect(m_model, &SessionModel::modelAboutToBeReset, this,
80  &ItemStackWidget::onModelAboutToBeReset, Qt::UniqueConnection);
81 
82  connect(m_model, &SessionModel::rowsAboutToBeRemoved, this,
83  &ItemStackWidget::onRowsAboutToBeRemoved, Qt::UniqueConnection);
84 }
virtual void onModelAboutToBeReset()
SessionModel * m_model
virtual void onRowsAboutToBeRemoved(const QModelIndex &parent, int first, int)

References ItemStackWidget::m_model, ItemStackWidget::onModelAboutToBeReset(), and ItemStackWidget::onRowsAboutToBeRemoved().

Referenced by ItemStackWidget::setModel().

Here is the call graph for this function:

◆ currentWidget()

template<class T >
T * ItemStackPresenter< T >::currentWidget

Definition at line 79 of file ItemStackPresenter.h.

80 {
81  return dynamic_cast<T*>(m_stackedWidget->currentWidget());
82 }
class QStackedWidget * m_stackedWidget

Referenced by FitActivityPanel::currentFitSuiteWidget(), JobOutputDataWidget::onActivityChanged(), and FitActivityPanel::setItem().

◆ disconnectModel()

void ItemStackWidget::disconnectModel ( )
protectedinherited

Definition at line 86 of file ItemStackWidget.cpp.

87 {
88  if (!m_model)
89  return;
90 
91  disconnect(m_model, &SessionModel::modelAboutToBeReset, this,
93 
94  disconnect(m_model, &SessionModel::rowsAboutToBeRemoved, this,
96 }

References ItemStackWidget::m_model, ItemStackWidget::onModelAboutToBeReset(), and ItemStackWidget::onRowsAboutToBeRemoved().

Referenced by ItemStackWidget::setModel().

Here is the call graph for this function:

◆ hideWidgets()

template<class T >
void ItemStackPresenter< T >::hideWidgets

Definition at line 96 of file ItemStackPresenter.h.

97 {
98  if (m_stackedWidget->currentWidget())
99  m_stackedWidget->currentWidget()->hide();
100 }

Referenced by FitActivityPanel::setItem(), JobOutputDataWidget::setItem(), and JobRealTimeWidget::setItem().

◆ itemWidget()

template<class T >
T * ItemStackPresenter< T >::itemWidget ( SessionItem item)

Definition at line 84 of file ItemStackPresenter.h.

85 {
86  if (m_single_widget) {
87  if (!m_itemToWidget.empty())
88  return m_itemToWidget.first();
89  } else {
90  return m_itemToWidget[item];
91  }
92 
93  return nullptr;
94 }
QMap< SessionItem *, T * > m_itemToWidget

Referenced by JobRealTimeWidget::parameterTuningWidget().

◆ minimumSizeHint()

QSize ItemStackWidget::minimumSizeHint ( ) const
inherited

Definition at line 53 of file ItemStackWidget.cpp.

54 {
55  return QSize(25, 25);
56 }

◆ onModelAboutToBeReset

void ItemStackWidget::onModelAboutToBeReset ( )
virtualslotinherited

Definition at line 63 of file ItemStackWidget.cpp.

64 {
65  removeWidgets();
66 }
virtual void removeWidgets()=0

References ItemStackWidget::removeWidgets().

Referenced by ItemStackWidget::connectModel(), and ItemStackWidget::disconnectModel().

Here is the call graph for this function:

◆ onRowsAboutToBeRemoved

void ItemStackWidget::onRowsAboutToBeRemoved ( const QModelIndex &  parent,
int  first,
int   
)
virtualslotinherited

Definition at line 68 of file ItemStackWidget.cpp.

69 {
70  SessionItem* item = m_model->itemForIndex(m_model->index(first, 0, parent));
71  removeWidgetForItem(item);
72 }
virtual void removeWidgetForItem(SessionItem *item)=0
SessionItem * itemForIndex(const QModelIndex &index) const
virtual QModelIndex index(int row, int column, const QModelIndex &parent) const

References SessionModel::index(), SessionModel::itemForIndex(), ItemStackWidget::m_model, and ItemStackWidget::removeWidgetForItem().

Referenced by ItemStackWidget::connectModel(), and ItemStackWidget::disconnectModel().

Here is the call graph for this function:

◆ removeWidgetForItem()

template<class T >
void ItemStackPresenter< T >::removeWidgetForItem ( SessionItem item)
protectedvirtual

Implements ItemStackWidget.

Definition at line 102 of file ItemStackPresenter.h.

103 {
104  ASSERT(item);
105 
106  if (m_single_widget)
107  return;
108 
109  T* widget = m_itemToWidget[item];
110  if (!widget)
111  return;
112 
113  typename QMap<SessionItem*, T*>::iterator it = m_itemToWidget.begin();
114  while (it != m_itemToWidget.end()) {
115  if (it.value() == widget)
116  it = m_itemToWidget.erase(it);
117  else
118  ++it;
119  }
120 
121  m_stackedWidget->removeWidget(widget);
122  delete widget;
123 }
#define ASSERT(condition)
Definition: Assert.h:31

References ASSERT.

◆ removeWidgets()

template<class T >
void ItemStackPresenter< T >::removeWidgets
protectedvirtual

Implements ItemStackWidget.

Definition at line 125 of file ItemStackPresenter.h.

126 {
127  typename QMap<SessionItem*, T*>::iterator it = m_itemToWidget.begin();
128  while (it != m_itemToWidget.end()) {
129  m_stackedWidget->removeWidget(it.value());
130  delete it.value();
131  ++it;
132  }
133  m_itemToWidget.clear();
134 }

◆ setItem()

template<class T >
template<class U >
void ItemStackPresenter< T >::setItem ( U *  item,
bool *  isNew = 0 
)

Shows the widget for given item (and hides previous one).

If no widget yet exists, it will be created (flag isNew will become 'true' in this case).

Definition at line 50 of file ItemStackPresenter.h.

51 {
52  validateItem(item);
53 
54  if (isNew)
55  *isNew = false;
56 
57  if (!item) {
58  hideWidgets();
59  return;
60  }
61 
62  T* widget = itemWidget(item);
63 
64  if (!widget) {
65  widget = new T();
66  if (isNew)
67  *isNew = true;
68  m_stackedWidget->addWidget(widget);
69  m_itemToWidget[item] = widget;
70  }
71 
72  m_stackedWidget->setCurrentWidget(widget);
73  if (widget->isHidden())
74  widget->show();
75 
76  widget->setItem(item);
77 }
T * itemWidget(SessionItem *item)
void validateItem(SessionItem *item)
Checks if model was set correctly.

Referenced by InstrumentView::onItemSelectionChanged(), ImportDataView::onSelectionChanged(), FitActivityPanel::setItem(), JobOutputDataWidget::setItem(), and JobRealTimeWidget::setItem().

◆ setModel()

void ItemStackWidget::setModel ( SessionModel model)
inherited

Definition at line 38 of file ItemStackWidget.cpp.

39 {
40  if (model == m_model)
41  return;
42 
44  m_model = model;
45  connectModel();
46 }

References ItemStackWidget::connectModel(), ItemStackWidget::disconnectModel(), and ItemStackWidget::m_model.

Referenced by FitActivityPanel::FitActivityPanel(), ImportDataView::ImportDataView(), JobOutputDataWidget::JobOutputDataWidget(), JobRealTimeWidget::JobRealTimeWidget(), and ItemStackWidget::validateItem().

Here is the call graph for this function:

◆ setSizeHint()

void ItemStackWidget::setSizeHint ( const QSize &  size_hint)
inherited

Definition at line 58 of file ItemStackWidget.cpp.

59 {
60  m_size_hint = size_hint;
61 }

References ItemStackWidget::m_size_hint.

Referenced by ImportDataView::ImportDataView().

◆ sizeHint()

QSize ItemStackWidget::sizeHint ( ) const
inherited

Definition at line 48 of file ItemStackWidget.cpp.

49 {
50  return m_size_hint;
51 }

References ItemStackWidget::m_size_hint.

◆ validateItem()

void ItemStackWidget::validateItem ( SessionItem item)
protectedinherited

Checks if model was set correctly.

Definition at line 100 of file ItemStackWidget.cpp.

101 {
102  if (!item)
103  return;
104 
105  if (m_model) {
106  if (m_model != item->model())
107  // in principle it should be possible, but should be tested
108  throw GUIHelpers::Error("ItemStackWidget::validateItem() -> Error. "
109  "Attempt to use items from different models.");
110  } else {
111  setModel(item->model());
112  }
113 }
void setModel(SessionModel *model)
SessionModel * model() const
Returns model of this item.
Definition: SessionItem.cpp:66

References ItemStackWidget::m_model, SessionItem::model(), and ItemStackWidget::setModel().

Here is the call graph for this function:

Member Data Documentation

◆ m_itemToWidget

template<class T >
QMap<SessionItem*, T*> ItemStackPresenter< T >::m_itemToWidget
private

Definition at line 46 of file ItemStackPresenter.h.

◆ m_model

◆ m_single_widget

template<class T >
bool ItemStackPresenter< T >::m_single_widget
private

Different items will be served by same widget.

Definition at line 47 of file ItemStackPresenter.h.

◆ m_size_hint

QSize ItemStackWidget::m_size_hint
protectedinherited

Definition at line 56 of file ItemStackWidget.h.

Referenced by ItemStackWidget::setSizeHint(), and ItemStackWidget::sizeHint().

◆ m_stackedWidget

class QStackedWidget* ItemStackWidget::m_stackedWidget
protectedinherited

Definition at line 54 of file ItemStackWidget.h.

Referenced by ItemStackWidget::ItemStackWidget().


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