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

Component property tree for SessionItems. More...

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

Public Member Functions

 ComponentTreeView (QWidget *parent=nullptr)
 
 ~ComponentTreeView ()
 
virtual void addItem (SessionItem *)
 
void clearEditor ()
 
void setItem (SessionItem *item)
 
void setShowHeader (bool show)
 
void setShowRootItem (bool show)
 

Private Slots

void onCustomContextMenuRequested (const QPoint &pos)
 

Private Member Functions

void setModel (SessionModel *model)
 
void setRootIndex (const QModelIndex &index, bool show_root_item=true)
 

Private Attributes

ComponentTreeActionsm_actions
 
SessionModelDelegatem_delegate
 
std::unique_ptr< RightMouseButtonEaterm_eventFilter
 
QStandardItemModel * m_placeHolderModel
 
ComponentProxyModelm_proxyModel
 
bool m_show_root_item
 Tree will starts from item itself, if true. More...
 
QTreeView * m_tree
 

Detailed Description

Component property tree for SessionItems.

Shows only PropertyItems and current items of GroupProperties.

Definition at line 34 of file ComponentTreeView.h.

Constructor & Destructor Documentation

◆ ComponentTreeView()

ComponentTreeView::ComponentTreeView ( QWidget *  parent = nullptr)

Definition at line 26 of file ComponentTreeView.cpp.

27  : ComponentView(parent)
28  , m_tree(new QTreeView)
29  , m_delegate(new SessionModelDelegate(this))
31  , m_placeHolderModel(new QStandardItemModel(this))
33  , m_actions(new ComponentTreeActions(this))
34  , m_show_root_item(false)
35 {
36  auto layout = new QVBoxLayout;
37 
38  layout->setMargin(0);
39  layout->setSpacing(0);
40  layout->addWidget(m_tree);
41 
42  setLayout(layout);
43 
44  QStringList labels = {"Name", "Value"};
45  m_placeHolderModel->setHorizontalHeaderLabels(labels);
46 
48  m_tree->setRootIsDecorated(false);
49  m_tree->setModel(m_placeHolderModel);
50  m_tree->setItemDelegate(m_delegate);
51 
52  // provide one click editing, but still keeping custom context menu alive
53  m_tree->setEditTriggers(QAbstractItemView::AllEditTriggers);
54  m_tree->viewport()->installEventFilter(m_eventFilter.get());
55 
56  // custom context menu setup
57  m_tree->setContextMenuPolicy(Qt::CustomContextMenu);
58  connect(m_tree, &QTreeView::customContextMenuRequested, this,
60 }
Proxy model to adjust SessionModel for component editor (right bottom corner of SampleView and simila...
Additional action for ComponentTreeView.
SessionModelDelegate * m_delegate
std::unique_ptr< RightMouseButtonEater > m_eventFilter
bool m_show_root_item
Tree will starts from item itself, if true.
QStandardItemModel * m_placeHolderModel
ComponentProxyModel * m_proxyModel
void onCustomContextMenuRequested(const QPoint &pos)
ComponentTreeActions * m_actions
ComponentView(QWidget *parent=nullptr)
Definition: ComponentView.h:27
Filter out right mouse button events.
The SessionModelDelegate class presents the content of SessionModel items in standard QTreeView.
void setPropertyStyle(QTreeView *tree)
Sets style for the tree to use in property editors.
Definition: StyleUtils.cpp:36

References m_delegate, m_eventFilter, m_placeHolderModel, m_tree, onCustomContextMenuRequested(), and StyleUtils::setPropertyStyle().

Here is the call graph for this function:

◆ ~ComponentTreeView()

ComponentTreeView::~ComponentTreeView ( )
default

Member Function Documentation

◆ addItem()

virtual void ComponentView::addItem ( SessionItem )
inlinevirtualinherited

Reimplemented in ComponentFlatView.

Definition at line 31 of file ComponentView.h.

31 {}

Referenced by ComponentEditor::addItem().

◆ clearEditor()

void ComponentTreeView::clearEditor ( )
virtual

Implements ComponentView.

Definition at line 75 of file ComponentTreeView.cpp.

76 {
77  m_tree->setModel(m_placeHolderModel);
78 }

References m_placeHolderModel, and m_tree.

◆ onCustomContextMenuRequested

void ComponentTreeView::onCustomContextMenuRequested ( const QPoint &  pos)
privateslot

Definition at line 109 of file ComponentTreeView.cpp.

110 {
111  auto point = m_tree->mapToGlobal(pos);
112  auto treeIndex = m_tree->indexAt(pos);
113  if (!treeIndex.isValid())
114  return;
115 
116  auto index = m_proxyModel->mapToSource(treeIndex);
117 
118  SessionItem* item = static_cast<SessionItem*>(index.internalPointer());
119  if (item->value().type() != QVariant::Double)
120  return;
121 
123 }
QModelIndex mapToSource(const QModelIndex &proxyIndex) const
void onCustomContextMenuRequested(const QPoint &point, SessionItem &item)
Creates right-mouse-click context menu on top of ComponentTreeView which will allow user to switch be...
QVariant value() const
Get value.

References m_actions, m_proxyModel, m_tree, ComponentProxyModel::mapToSource(), ComponentTreeActions::onCustomContextMenuRequested(), and SessionItem::value().

Referenced by ComponentTreeView().

Here is the call graph for this function:

◆ setItem()

void ComponentTreeView::setItem ( SessionItem item)
virtual

Implements ComponentView.

Definition at line 64 of file ComponentTreeView.cpp.

65 {
66  if (!item) {
67  setModel(nullptr);
68  return;
69  }
70  setModel(item->model());
72  m_tree->expandAll();
73 }
void setModel(SessionModel *model)
void setRootIndex(const QModelIndex &index, bool show_root_item=true)
SessionModel * model() const
Returns model of this item.
Definition: SessionItem.cpp:66
QModelIndex index() const
Returns model index of this item.
Definition: SessionItem.cpp:80

References SessionItem::index(), m_show_root_item, m_tree, SessionItem::model(), setModel(), and setRootIndex().

Here is the call graph for this function:

◆ setModel()

void ComponentTreeView::setModel ( SessionModel model)
private

Definition at line 80 of file ComponentTreeView.cpp.

81 {
83  if (model)
84  m_tree->setModel(m_proxyModel);
85  else
86  m_tree->setModel(m_placeHolderModel);
87 }
void setSessionModel(SessionModel *model)

References m_placeHolderModel, m_proxyModel, m_tree, and ComponentProxyModel::setSessionModel().

Referenced by setItem().

Here is the call graph for this function:

◆ setRootIndex()

void ComponentTreeView::setRootIndex ( const QModelIndex &  index,
bool  show_root_item = true 
)
private

Definition at line 89 of file ComponentTreeView.cpp.

90 {
91  if (QWidget* editor = m_tree->indexWidget(m_tree->currentIndex()))
92  m_delegate->closeEditor(editor, QAbstractItemDelegate::NoHint);
94  m_proxyModel->setRootIndex(index);
95  if (!show_root_item)
96  m_tree->setRootIndex(m_proxyModel->mapFromSource(index));
97 }
#define ASSERT(condition)
Definition: Assert.h:31
void setRootIndex(const QModelIndex &sourceRootIndex)
QModelIndex mapFromSource(const QModelIndex &sourceIndex) const

References ASSERT, m_delegate, m_proxyModel, m_tree, ComponentProxyModel::mapFromSource(), and ComponentProxyModel::setRootIndex().

Referenced by setItem().

Here is the call graph for this function:

◆ setShowHeader()

void ComponentTreeView::setShowHeader ( bool  show)

Definition at line 99 of file ComponentTreeView.cpp.

100 {
101  m_tree->setHeaderHidden(!show);
102 }

References m_tree.

Referenced by ComponentEditor::createComponentView().

◆ setShowRootItem()

void ComponentTreeView::setShowRootItem ( bool  show)

Definition at line 104 of file ComponentTreeView.cpp.

105 {
106  m_show_root_item = show;
107 }

References m_show_root_item.

Member Data Documentation

◆ m_actions

ComponentTreeActions* ComponentTreeView::m_actions
private

Definition at line 58 of file ComponentTreeView.h.

Referenced by onCustomContextMenuRequested().

◆ m_delegate

SessionModelDelegate* ComponentTreeView::m_delegate
private

Definition at line 54 of file ComponentTreeView.h.

Referenced by ComponentTreeView(), and setRootIndex().

◆ m_eventFilter

std::unique_ptr<RightMouseButtonEater> ComponentTreeView::m_eventFilter
private

Definition at line 57 of file ComponentTreeView.h.

Referenced by ComponentTreeView().

◆ m_placeHolderModel

QStandardItemModel* ComponentTreeView::m_placeHolderModel
private

Definition at line 56 of file ComponentTreeView.h.

Referenced by ComponentTreeView(), clearEditor(), and setModel().

◆ m_proxyModel

ComponentProxyModel* ComponentTreeView::m_proxyModel
private

Definition at line 55 of file ComponentTreeView.h.

Referenced by onCustomContextMenuRequested(), setModel(), and setRootIndex().

◆ m_show_root_item

bool ComponentTreeView::m_show_root_item
private

Tree will starts from item itself, if true.

Definition at line 59 of file ComponentTreeView.h.

Referenced by setItem(), and setShowRootItem().

◆ m_tree

QTreeView* ComponentTreeView::m_tree
private

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