BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
ModelView::PropertyFlatView::PropertyFlatViewImpl Struct Reference

Public Member Functions

 PropertyFlatViewImpl ()
 
void connect_model ()
 Connect model. More...
 
std::unique_ptr< CustomEditorcreate_editor (const QModelIndex &index)
 Creates custom editor for given index. More...
 
std::unique_ptr< QLabel > create_label (ViewItem *view_item)
 Creates label for given index. More...
 
std::unique_ptr< QWidget > create_widget (const QModelIndex &index)
 Creates widget for given index to appear in grid layout. More...
 
void update_grid_layout ()
 Updates grid layout with all editors corresponding to the model. More...
 
void update_mappers ()
 Creates row of widget mappers. Each widget mapper will serve all editors in a column. More...
 

Public Attributes

std::unique_ptr< DefaultEditorFactoryeditor_factory
 
QGridLayout * grid_layout {nullptr}
 
std::map< ViewItem *, QWidget * > item_to_widget
 
std::unique_ptr< ViewModelDelegatem_delegate
 
std::unique_ptr< ViewModelview_model
 
std::vector< std::unique_ptr< QDataWidgetMapper > > widget_mappers
 

Detailed Description

Definition at line 32 of file propertyflatview.cpp.

Constructor & Destructor Documentation

◆ PropertyFlatViewImpl()

ModelView::PropertyFlatView::PropertyFlatViewImpl::PropertyFlatViewImpl ( )
inline

Definition at line 40 of file propertyflatview.cpp.

41  : m_delegate(std::make_unique<ViewModelDelegate>())
42  , editor_factory(std::make_unique<DefaultEditorFactory>())
43  , grid_layout(new QGridLayout)
44  {
45  }
std::unique_ptr< DefaultEditorFactory > editor_factory
std::unique_ptr< ViewModelDelegate > m_delegate

Member Function Documentation

◆ connect_model()

void ModelView::PropertyFlatView::PropertyFlatViewImpl::connect_model ( )
inline

Connect model.

Definition at line 71 of file propertyflatview.cpp.

72  {
73  auto on_data_change = [this](const QModelIndex& topLeft, const QModelIndex&,
74  const QVector<int>& roles) {
75 #if QT_VERSION >= QT_VERSION_CHECK(5, 13, 0)
76  QVector<int> expected_roles = {Qt::ForegroundRole};
77 #else
78  QVector<int> expected_roles = {Qt::TextColorRole};
79 #endif
80  if (roles == expected_roles) {
81  auto view_item = view_model->viewItemFromIndex(topLeft);
82  auto it = item_to_widget.find(view_item);
83  if (it != item_to_widget.end())
84  it->second->setEnabled(view_item->item()->isEnabled());
85  }
86  };
87  connect(view_model.get(), &ViewModel::dataChanged, on_data_change);
88 
89  auto on_row_inserted = [this](const QModelIndex&, int, int) { update_grid_layout(); };
90  connect(view_model.get(), &ViewModel::rowsInserted, on_row_inserted);
91 
92  auto on_row_removed = [this](const QModelIndex&, int, int) { update_grid_layout(); };
93  connect(view_model.get(), &ViewModel::rowsRemoved, on_row_removed);
94  }
MVVM_VIEWMODEL_EXPORT QVariant TextColorRole(const SessionItem &item)
Returns text color for given item.
QVariant ForegroundRole(const SessionItem &item)
Returns text color for given item.
std::map< ViewItem *, QWidget * > item_to_widget
void update_grid_layout()
Updates grid layout with all editors corresponding to the model.

References SessionItemUtils::ForegroundRole(), ModelView::PropertyFlatView::PropertyFlatViewImpl::item_to_widget, ModelView::Utils::TextColorRole(), ModelView::PropertyFlatView::PropertyFlatViewImpl::update_grid_layout(), and ModelView::PropertyFlatView::PropertyFlatViewImpl::view_model.

Here is the call graph for this function:

◆ create_editor()

std::unique_ptr<CustomEditor> ModelView::PropertyFlatView::PropertyFlatViewImpl::create_editor ( const QModelIndex &  index)
inline

Creates custom editor for given index.

Definition at line 59 of file propertyflatview.cpp.

60  {
61  auto editor = editor_factory->createEditor(index);
62  m_delegate->setEditorData(editor.get(), index);
63  connect(editor.get(), &CustomEditor::dataChanged, m_delegate.get(),
64  &ViewModelDelegate::onCustomEditorDataChanged);
65  editor->setEnabled(view_model->sessionItemFromIndex(index)->isEnabled());
66  return editor;
67  }
void dataChanged(const QVariant &data)
Signal emit then user changed the data through the editor.

References ModelView::CustomEditor::dataChanged(), ModelView::PropertyFlatView::PropertyFlatViewImpl::editor_factory, ModelView::PropertyFlatView::PropertyFlatViewImpl::m_delegate, ModelView::ViewModelDelegate::onCustomEditorDataChanged(), and ModelView::PropertyFlatView::PropertyFlatViewImpl::view_model.

Referenced by ModelView::PropertyFlatView::PropertyFlatViewImpl::create_widget().

Here is the call graph for this function:

◆ create_label()

std::unique_ptr<QLabel> ModelView::PropertyFlatView::PropertyFlatViewImpl::create_label ( ViewItem view_item)
inline

Creates label for given index.

Definition at line 49 of file propertyflatview.cpp.

50  {
51  auto result = std::make_unique<QLabel>(view_item->data(Qt::DisplayRole).toString());
52  result->setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed));
53  result->setEnabled(view_item->item()->isEnabled());
54  return result;
55  }
bool isEnabled() const
Returns true if this item has enabled flag set.
virtual QVariant data(int qt_role) const
Returns the data for given role according to Qt::ItemDataRole namespace definitions.
Definition: viewitem.cpp:199
SessionItem * item() const
Definition: viewitem.cpp:168

References ModelView::ViewItem::data(), ModelView::SessionItem::isEnabled(), and ModelView::ViewItem::item().

Referenced by ModelView::PropertyFlatView::PropertyFlatViewImpl::create_widget().

Here is the call graph for this function:

◆ create_widget()

std::unique_ptr<QWidget> ModelView::PropertyFlatView::PropertyFlatViewImpl::create_widget ( const QModelIndex &  index)
inline

Creates widget for given index to appear in grid layout.

Definition at line 98 of file propertyflatview.cpp.

99  {
100  auto view_item = view_model->viewItemFromIndex(index);
101  if (auto label_item = dynamic_cast<ViewLabelItem*>(view_item); label_item)
102  return create_label(label_item);
103 
104  return create_editor(index);
105  }
Represents display name of SessionItem in any cell of Qt's trees and tables.
std::unique_ptr< CustomEditor > create_editor(const QModelIndex &index)
Creates custom editor for given index.
std::unique_ptr< QLabel > create_label(ViewItem *view_item)
Creates label for given index.

References ModelView::PropertyFlatView::PropertyFlatViewImpl::create_editor(), ModelView::PropertyFlatView::PropertyFlatViewImpl::create_label(), and ModelView::PropertyFlatView::PropertyFlatViewImpl::view_model.

Referenced by ModelView::PropertyFlatView::PropertyFlatViewImpl::update_grid_layout().

Here is the call graph for this function:

◆ update_grid_layout()

void ModelView::PropertyFlatView::PropertyFlatViewImpl::update_grid_layout ( )
inline

Updates grid layout with all editors corresponding to the model.

Definition at line 124 of file propertyflatview.cpp.

125  {
127 
128  update_mappers();
129  item_to_widget.clear();
130  for (int row = 0; row < view_model->rowCount(); ++row) {
131  for (int col = 0; col < view_model->columnCount(); ++col) {
132  auto index = view_model->index(row, col);
133  auto widget = create_widget(index);
134  item_to_widget[view_model->viewItemFromIndex(index)] = widget.get();
135  widget_mappers[static_cast<size_t>(row)]->addMapping(widget.get(), col);
136  grid_layout->addWidget(widget.release(), row, col);
137  }
138  }
139  }
void clearGridLayout(QGridLayout *layout, bool deleteWidgets=true)
Clear layout completely.
Definition: LayoutUtils.cpp:81
std::vector< std::unique_ptr< QDataWidgetMapper > > widget_mappers
std::unique_ptr< QWidget > create_widget(const QModelIndex &index)
Creates widget for given index to appear in grid layout.
void update_mappers()
Creates row of widget mappers. Each widget mapper will serve all editors in a column.

References LayoutUtils::clearGridLayout(), ModelView::PropertyFlatView::PropertyFlatViewImpl::create_widget(), ModelView::PropertyFlatView::PropertyFlatViewImpl::grid_layout, ModelView::PropertyFlatView::PropertyFlatViewImpl::item_to_widget, ModelView::PropertyFlatView::PropertyFlatViewImpl::update_mappers(), ModelView::PropertyFlatView::PropertyFlatViewImpl::view_model, and ModelView::PropertyFlatView::PropertyFlatViewImpl::widget_mappers.

Referenced by ModelView::PropertyFlatView::PropertyFlatViewImpl::connect_model().

Here is the call graph for this function:

◆ update_mappers()

void ModelView::PropertyFlatView::PropertyFlatViewImpl::update_mappers ( )
inline

Creates row of widget mappers. Each widget mapper will serve all editors in a column.

Definition at line 109 of file propertyflatview.cpp.

110  {
111  widget_mappers.clear();
112  for (int row = 0; row < view_model->rowCount(); ++row) {
113  auto mapper = std::make_unique<QDataWidgetMapper>();
114  mapper->setModel(view_model.get());
115  mapper->setItemDelegate(m_delegate.get());
116  mapper->setRootIndex(QModelIndex());
117  mapper->setCurrentModelIndex(view_model->index(row, 0));
118  widget_mappers.emplace_back(std::move(mapper));
119  }
120  }

References ModelView::PropertyFlatView::PropertyFlatViewImpl::m_delegate, ModelView::PropertyFlatView::PropertyFlatViewImpl::view_model, and ModelView::PropertyFlatView::PropertyFlatViewImpl::widget_mappers.

Referenced by ModelView::PropertyFlatView::PropertyFlatViewImpl::update_grid_layout().

Member Data Documentation

◆ editor_factory

std::unique_ptr<DefaultEditorFactory> ModelView::PropertyFlatView::PropertyFlatViewImpl::editor_factory

◆ grid_layout

QGridLayout* ModelView::PropertyFlatView::PropertyFlatViewImpl::grid_layout {nullptr}

◆ item_to_widget

std::map<ViewItem*, QWidget*> ModelView::PropertyFlatView::PropertyFlatViewImpl::item_to_widget

◆ m_delegate

std::unique_ptr<ViewModelDelegate> ModelView::PropertyFlatView::PropertyFlatViewImpl::m_delegate

◆ view_model

◆ widget_mappers

std::vector<std::unique_ptr<QDataWidgetMapper> > ModelView::PropertyFlatView::PropertyFlatViewImpl::widget_mappers

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